--- /dev/null
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+ENABLE_TESTING()
+
+PROJECT(accessibility-setting CXX)
+
+option(TESTS "enable/disable accessibility setting tests" ON)
+
+SET(HEADERS)
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(EXEC_PREFIX "\${prefix}")
+SET(INCLUDEDIR "\${prefix}/include")
+SET(VERSION 1.0)
+
+SET(PACKAGE ${PROJECT_NAME})
+SET(PKGNAME "org.tizen.${PACKAGE}")
+SET(PKGDIR "${TZ_SYS_RO_APP}/${PKGNAME}")
+SET(BINDIR "${PKGDIR}/bin")
+SET(RESDIR "${PKGDIR}/res")
+SET(EDJDIR "${RESDIR}/edje")
+SET(ICONDIR "${TZ_SYS_RO_ICONS}/default/small")
+SET(LOCALEDIR "${RESDIR}/locale")
+
+INCLUDE(FindPkgConfig)
+
+pkg_check_modules(pkgs REQUIRED
+ capi-appfw-application
+ appcore-efl
+ elementary
+ efl-extension
+ dlog
+ vconf
+ glib-2.0
+ capi-system-info
+ capi-system-system-settings
+ tts
+ tts-setting
+ notification
+ edje
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -fdiagnostics-color=always -fPIE -std=c++17 -Wall")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fPIE")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2 -g -fPIE")
+
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DTZ_SYS_RO_APP_D=\"${TZ_SYS_RO_APP}\"")
+ADD_DEFINITIONS("-D_TZ_SYS_DATA=\"${TZ_SYS_DATA}\"")
+ADD_DEFINITIONS("-DDEBUG_PRINTING_LEVEL=DEBUG_PRINTING_LEVEL_DEBUG")
+ADD_DEFINITIONS("-DENABLE_COLORS")
+
+ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/src)
+if(TESTS)
+ ADD_SUBDIRECTORY(tests)
+endif()
+
+
+SET(EDC_LIST
+ accessibility-settings-set-value;
+ accessibility-smart-switch-accessory;
+ screen-reader-settings-popup;
+ accessibility-smart-switch-accessory-popup;
+ genlist;
+ spinner-layout;
+ spinner-layout-toggle;)
+
+FOREACH(F ${EDC_LIST})
+ ADD_CUSTOM_TARGET(${F}.edj
+ COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/resource/images -id ${CMAKE_SOURCE_DIR}/resource/icons -sd ${CMAKE_SOURCE_DIR}/resource/sounds
+ ${CMAKE_SOURCE_DIR}/resource/${F}.edc ${CMAKE_BINARY_DIR}/${F}.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/resource/${F}.edc
+ )
+ ADD_DEPENDENCIES(${PROJECT_NAME} ${F}.edj)
+ INSTALL(FILES ${CMAKE_BINARY_DIR}/${F}.edj DESTINATION ${EDJDIR})
+ENDFOREACH()
+
+
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/resource/icons DESTINATION ${RESDIR} FILES_MATCHING PATTERN "*.png")
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PKGNAME}.xml DESTINATION ${TZ_SYS_RO_PACKAGES})
+INSTALL(PROGRAMS utils/setVconfKeys.sh DESTINATION scripts/)
+
+
+# i18n
+ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/po)
--- /dev/null
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.accessibility-setting" version="0.0.1" install-location="internal-only" api-version="3.0">
+ <label>Accessibility Setting</label>
+ <description>Accessibility Setting App</description>
+ <ui-application appid="org.tizen.accessibility-setting" exec="accessibility-setting" nodisplay="true" multiple="false" type="capp" taskmanage="false" mainapp="true" process-pool="true" hw-acceleration="use-GL">
+ <label>Accessibility Setting</label>
+ <label xml:lang="en-us">Accessibility Setting</label>
+ </ui-application>
+ <privileges>
+ <privilege>http://tizen.org/privilege/systemsettings.admin</privilege>
+ </privileges>
+</manifest>
--- /dev/null
+%bcond_without tests
+
+Name: org.tizen.accessibility-setting
+Summary: Accessibility Setting Application
+Version: 0.0.1
+Release: 1
+Group: UI Framework
+License: Apache-2.0
+Source0: %{name}-%{version}.tar.gz
+
+BuildRequires: gettext-tools
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: cmake
+BuildRequires: pkgconfig(libtzplatform-config)
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(appcore-common)
+BuildRequires: pkgconfig(efl-extension)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-appfw-event)
+BuildRequires: pkgconfig(capi-appfw-preference)
+BuildRequires: pkgconfig(tts)
+BuildRequires: pkgconfig(tts-setting)
+BuildRequires: pkgconfig(glib-2.0)
+BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(capi-system-system-settings)
+BuildRequires: pkgconfig(tts-setting)
+BuildRequires: pkgconfig(notification)
+BuildRequires: edje-tools
+BuildRequires: gtest-devel
+
+%description
+Accessibility setting application.
+
+%prep
+%setup -q
+%define _pkg_dir %{TZ_SYS_RO_APP}/%{name}
+
+%build
+
+%define DataDir %{?TZ_SYS_RO_SHARE:%TZ_SYS_RO_SHARE}%{!?TZ_SYS_RO_SHARE:/usr/share}
+%define AppDir %{TZ_SYS_RO_APP}/%{name}
+
+%define TestsName %{name}-tests
+%define TestsAppDir %{TZ_SYS_RO_APP}/%{TestsName}
+
+
+rm -rf CMakeFiles CMakeCache.txt && cmake . -DCMAKE_INSTALL_PREFIX=%{_pkg_dir} \
+ -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP \
+ -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES \
+ -DCMAKE_TESTS_INSTALL_PREFIX="%{TestsAppDir}" \
+%if !%{with tests}
+ -DTESTS=OFF \
+%endif
+
+
+make %{?jobs:-j%jobs}
+
+export CTEST_OUTPUT_ON_FAILURE=1
+make test
+
+%install
+%make_install
+
+mkdir -p %{buildroot}/%{_datadir}/license
+cp %{_builddir}/%{buildsubdir}/LICENSE %{buildroot}/%{_datadir}/license/%{name}
+
+%post
+%{AppDir}/scripts/setVconfKeys.sh
+
+%files
+%defattr(-,root,root,-)
+%{_pkg_dir}/bin/*
+%{_pkg_dir}/res/*
+%{TZ_SYS_RO_PACKAGES}/%{name}.xml
+%{_datadir}/license/%{name}
+%manifest %{name}.manifest
+%license LICENSE
+%{AppDir}/scripts/setVconfKeys.sh
+
+
+%if %{with tests}
+%package tests
+Summary: Accessibility setting - tests
+Requires: %{name} = %{version}
+
+%description tests
+Accessibility setting tests
+
+%post tests
+%{TestsAppDir}/scripts/VConf_init.sh
+tpk-backend -y %{TestsName} --preload
+
+%files tests
+%manifest %{TestsName}.manifest
+%{TestsAppDir}/no-ui-scenarios/*
+%license LICENSE
+%{DataDir}/packages/%{TestsName}.xml
+#%{TestsAppDir}/bin/accessibility-setting-tests
+%{TestsAppDir}/scripts/VConf_init.sh
+#%{TestsAppDir}/lib/libaccessibility-setting-shared.so
+%endif
--- /dev/null
+# for i18n
+
+SET(POFILES
+ ar.po
+ az.po
+ bg.po
+ ca.po
+ cs.po
+ da.po
+ de.po
+ el_GR.po
+ en_PH.po
+ en.po
+ en_US.po
+ es_ES.po
+ es_US.po
+ et.po
+ eu.po
+ fi.po
+ fr_CA.po
+ fr.po
+ ga.po
+ gl.po
+ hr.po
+ hu.po
+ hy.po
+ is.po
+ it_IT.po
+ ja_JP.po
+ ka.po
+ kk.po
+ ko_KR.po
+ lt.po
+ lv.po
+ mk.po
+ nb.po
+ nl.po
+ pl.po
+ pt_BR.po
+ pt_PT.po
+ ro.po
+ ru_RU.po
+ sk.po
+ sl.po
+ sr.po
+ sv.po
+ tr_TR.po
+ uk.po
+ uz.po
+ zh_CN.po
+ zh_HK.po
+ zh_TW.po
+)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+ INSTALL(FILES ${moFile}
+ DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "سيوفر هاتفك الملاحظات الصوتية عندما يكون قارئ الشاشة مفعلاً. على سبيل المثال، سيعلمك قارئ الشاشة بالمحتويات التي يمكنك التفاعل معها على كل شاشة. انقر فوق العناصر لتحديدها وسماع ما هي، وانقر نقراً مزدوجاً فوقها لتنفيذ الإجراء ذي الصلة."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "قراءة تلميحات الاستخدام"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "ملاحظات حول الصوت"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "ملاحظات الاهتزاز"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "قراءة إدخال لوحة المفاتيح دائماً"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "ملاحظات لوحة المفاتيح"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "ملاحظات أخرى"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "اقرأ الإشعارات عندما تكون الشاشة متوقفة عن التشغيل."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "حدد المعلومات التي ستتم قراءتها من المؤشرات الظاهرة على شريط الحالة عند النقر ثلاث مرات فوق الشاشة بإصبعين، على سبيل المثال، الوقت والتاريخ، وقوة إشارة الجهاز، واتصالات Wi-Fi والبلوتوث، وطاقة البطارية."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "اضبط الملاحظات الصوتية بحيث تتغير طبقة الصوت أثناء استخدام لوحة المفاتيح لإدخال نص."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "معلومات شريط الحالة"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "تصدير"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "اغلاق"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "خلفيات الشاشة"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "تقييد"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "إلغاء"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "تم"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "غير مدعوم."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "تفعيل الحركة"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "اسحب شريط التمرير لضبط سرعة الحديث."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "استيراد"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "١٠ دقائق"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "١٥ ثانية"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "دقيقة واحدة"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "دقيقتين"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "٣٠ ثانية"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "٥ دقائق"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "حول الجهاز"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "إمكانية الوصول"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "حسابات"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "مفعل دائما"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "مدير التطبيقات"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "التطبيقات"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "النسخ الاحتياطي وإعادة الضبط"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "البطارية"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "البلوتوث"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "التوصيلات"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "بيانات"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "البيانات أثناء التجوال"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "التاريخ"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "التاريخ و الوقت"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "حذف"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "خيارات المطور"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "الجهاز"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "تعديل"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "وضع الطيران"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "الخط"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "منزل"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "مكبر"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "الأحداث الفائتة"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "شبكات الهواتف المحمولة"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "غير مفعل"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "مفعل"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "تحتوي كلمة المرور على رمز غير صالح."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "حفظ"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "مهلة الشاشة"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "قوة الإشارة"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "الحديث"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "سرعة الحديث"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "مكان التخزين"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "النظام"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "انقر للإدراج."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "إيقاف تشغيل"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "استخدام الحركة"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "رجوع"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "إلغاء"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "إلغاء"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "متابعة"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "تعطيل"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "فصل"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "تفعيل"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "موافق"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "إرجاع"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "إيقاف"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "إلغاء التثبيت"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "مسح ذاكرة التخزين المؤقت"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "التطبيقات الافتراضية"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "الشاشة"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "تنسيق"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "اللغة والإدخال"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "شاشة القفل"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "تخصيص"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "الخصوصية والحماية"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "إرجاع"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "الصوت"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "التوقيت"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "الرؤية"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "بيانات الهاتف المحمول"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "قارئ الشاشة (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "الضبط"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "جارٍ التحميل..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "تمت"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "تهيئة"
+
+msgid "IDS_ST_SK_YES"
+msgstr "نعم"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "تم بلوغ الحد الأقصى لعدد الأحرف."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "حاول مرة أخرى"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "البلوتوث"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Ekran oxuyucusu aktiv olan zaman telefonunuz səsli əks-əlaqəni təmin edəcək. Məsələn, Ekran oxuyucusu hər ekranda nə ilə əlaqə yarada bildiyinizi sizə söyləyəcəkdir. Seçmək üçün elementlərə vurun və onları eşidin və əlaqədar əməliyyatı keçirmək üçün elementlərə iki dəfə vurun."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "İstifadə ipuclarını oxu"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Səs əlaqəsi"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrasiya əks əlaqəsi"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Həmişə klaviatura girişini oxu"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Klaviatura əks-əlaqəsi"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Başqa əks-əlaqələr"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Ekran sönülü olan zaman bildirişləri oxu."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Status panelində görünən göstəricilərdən hansı məlumatın ekrana iki barmağınızla üç dəfə vurduqda oxunacağını seçin, məsələn, vaxt və tarix, cihazın siqnal gücü, Wi-Fi və Bluetooth bağlantıları və batareya enerjisi."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Mətni daxil etmək üçün klaviaturadan istifadə edən zaman tonu fərqləndirmək üçün səsli əks-əlaqəni qur."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Status panel məlumatı"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "İxrac et"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Bağla"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Divar kağızları"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Bağlanma"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "LƏĞV ET"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "HAZIR"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Dəstəklənmədi."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Hrkti aktv et"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Nitq dərəcəsini qurmaq üçün slayderi dartın."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "İdxal et"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 dəqiqə"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 saniyə"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 dəqiqə"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 dəqiqə"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 saniyə"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 dəqiqə"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Cihaz haqqında"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Xüsusi imkanlar"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Hesablar"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Həmişə qoşulu"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Proqram meneceri"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Əlavə vasitələr"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Nüsxəsini çıxart və sıfırla"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batareya"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Bağlantılar"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Məlumat"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Məlumat rouminqi"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Tarix"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Tarix və vaxt"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Yaradıcı seçimləri"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Cihaz"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Redaktə et"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Uçuş rejimi"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Şrift"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Ev"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Böyüdücü"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Buraxılan hadisələr"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobil şəbəkələr"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Söndür"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Qoş"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Parola səhv simvol daxildir."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Yaddaşa yaz"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Ekran fasiləsi"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Siqnal gücü"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Nitq"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Nitq sürəti"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Ehtiyat"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Daxil etmək üçün vurun."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Söndür"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Hərəkətdən istifadə edin"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Geri"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ləğv et"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Ləğv et"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Davam et"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Söndür"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Bağlantını kəs"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Qoş"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Sıfırla"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Dayndir"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Quraşdırmanı ləğv et"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Keşi təmizlə"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standart proqramlar"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Displey"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Dil və daxiletmə"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Ekran kilidi"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizasiya"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Məxfilik və təhlükəs"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Sıfırlansın"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Səs"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Vaxt"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Görmə"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobil məlumatlar"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekran oxuyucusu (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Parametrlər"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Yüklənir..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Bitdi"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Bəli"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Simvolların sayı maksimuma çatıb."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Yenidən cəhd edin"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Докато „Екранен четец“ е активиран, телефонът ще предоставя гласова обратна връзка. Например „Екранен четец“ ще ви казва с какво можете да взаимодействате на всеки екран. Докоснете елементи, за да ги изберете и чуете какви са те, и докоснете двукратно върху елементи, за да изпълните подходящото действие."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Проч. на глас подск.изпол."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Звукова обратна връзка"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Обр. връзка с вибриране"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Въвеждането на клавиатурата винаги да се чете на глас"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Реакция на клавиатурата"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Друга реакция"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Направете уведомленията да се прочитат на глас, докато екранът е изключен."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Изберете коя информация от индикаторите, показани в лентата на състоянието, ще се прочита на глас, когато докоснете трикратно екрана с два пръста, като например час и дата, сила на сигнала на устройството, Wi-Fi и Bluetooth връзки и заряд на батерията."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Задайте гласовата обратна връзка да се различава във височина на тона, докато се използва клавиатурата за въвеждане на текст."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Информ. на лента на състоянието"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Експортиране"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Затвори"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Тапети"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Привързване"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ОТКАЗ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ГОТОВО"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Не се поддържа."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Актив. движ."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Плъзнете плъзгача, за да зададете скоростта на речта."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Импортиране"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 минути"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 секунди"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 минута"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 минути"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 секунди"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 минути"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "За устройството"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Достъпност"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Акаунти"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Винаги включен"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Диспечер на приложения"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Приложения"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Архивиране и нулиране"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Батерия"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Връзки"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Данни"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Данни в роуминг"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Дата"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Дата и час"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Изтриване"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Опции за разработчици"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Устройство"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Редакт."
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Режим полет"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Шрифт"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Дом"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Лупа"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Пропуснати събития"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Мобилни мрежи"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Изключено"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Включено"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Паролата съдържа невалиден знак."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Запис"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Изт. вр. екран"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Сила на сигнала"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Реч"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Скорост на речта"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Устройство за съхранение на данни"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Системен"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Чукнете, за да вмъкнете."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Изключване"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "С движение"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Назад"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Отказ"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Отказ"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Продължи"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Забрани"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Изключване"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Разрешаване"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Нyлиране"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Стоп"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Деинсталиране"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Изчистване на кеша"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Приложения по подразбир."
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Дисплей"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Формат"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Език и въвеждане"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Заключен екран"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Персонализиране"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Поверителност и защита"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Нyлиране"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Звук"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Време"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Свързване"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Зрение"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Мобилни данни"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Екранен четец (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Настройки"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Зареждане"
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Готово"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Формат"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Да"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Достигнат е максималният брой символи."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Опитайте отново."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Quan el Lector de pantalla estigui activat, el telèfon proporcionarà resposta de veu. Per exemple, el Lector de pantalla li dirà amb què pot interactuar a cada pantalla. Toqui els elements per seleccionar-los i escoltar què són, i toqui dos cops els elements per realitzar l'acció corresponent."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Llegir en alt consells ús"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Resposta sonora"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Resposta de vibració"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Llegir sempre en alt l'entrada del teclat"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Resposta de teclat"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Un altre comentari"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Llegir les notificacions en alt mentre la pantalla està desactivada."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Seleccioni quina informació dels indicadors que es mostra a la barra d'estat es llegirà en veu alta quan toqui tres cops la pantalla amb dos dits, com ara l'hora i la data, la potència de senyal del dispositiu, les connexions Wi-Fi i Bluetooth i la bateria."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Defineixi la resposta de veu per variar l'altura de so mentre utilitza el teclat per introduir text."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informació de la barra estat"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Tancar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fons de pantalla"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCEL·LAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "REALITZAT"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "No s'admet"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Habilitar mov"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Arrossegui el control lliscant per establir la velocitat de veu."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuts"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segons"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuts"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segons"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuts"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Sobre el dispositiu"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibilitat"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Comptes"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Sempre activat"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Administrador d'aplicacions"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicacions"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Còpia de seguretat i restabliment"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Bateria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connexions"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dades"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dades en itinerància"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Hora i data"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Esborrar"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opcions de programador"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositiu"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Mode Vol"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Casa"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Ampliació"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Esdeveniments perduts"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Xarxes mòbils"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desactivat"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activat"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "La contrasenya conté un caràcter no vàlid"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Desar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Temps esp pant"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Potència del senyal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Veu"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Velocitat de veu"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Emmagatzematge"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Toqui per inserir"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilitzar moviment"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Enrere"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel·lar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancel·lar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desactiv"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desconn"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Acceptar"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Restablir"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Atur"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstal·lar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Esborrar memòria cau"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicació predeterminada"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Pantalla"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma i entrada"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Bloquejar pantalla"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalització"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privadesa i seguretat"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Restablir"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "So"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Durada"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Connexió a Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visió"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Dades mòbils"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lector de pantalla (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ajustaments"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Carregant..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Fet"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sí"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "S'ha assolit el nombre màxim de caràcters."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Torni-ho a intentar."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Když bude funkce Čtečka displeje zapnutá, telefon bude poskytovat hlasovou zpětnou vazbu. Čtečka displeje vám například řekne, jaké jsou možné interakce na jednotlivých obrazovkách. Klepnutím na položky je vyberete a poslechnete si co jsou zač, a poklepáním provedete související akci."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Přečíst užitečné tipy"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Zvuková zpětná vazba"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrační zpětná vazba"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Vždy přečíst vstup z klávesnice"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Zpětná vazba klávesnice"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Jiná zpětná vazba"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Přečte oznámení při vypnutém displeji."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Vyberte informace z indikátorů na stavovém panelu, které se přečtou po trojím klepnutí dvěma prsty, například čas a datum, intenzitu signálu zařízení, připojení Wi-Fi a Bluetooth a stav nabití baterie."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Nastavte hlasovou zpětnou vazbu tak, aby se během použití klávesnice pro zadávání textu měnila výška."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informace na stavovém panelu"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Export"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Zavřít"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Pozadí"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Sdílení internetového připojení"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ZRUŠIT"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "HOTOVO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Není podporováno."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Zapnout pohyb"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Tažením posuvníku nastavte rychlost řeči."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minut"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekund"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuta"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuty"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekund"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minut"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "O zařízení"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Usnadnění"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Účty"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Vždy zapnuto"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Správce aplikací"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikace"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Záloha a obnovení"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Baterie"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Připojení"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Datový roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum a čas"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Odstranit"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Vývojářské možnosti"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Zařízení"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Upravit"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Režim Letadlo"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Písmo"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domů"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Zmeškané události"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilní sítě"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Vypnuto"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Zapnuto"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Heslo obsahuje neplatný znak."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Uložit"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Č. limit disp."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Síla signálu"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Mluvení"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Rychlost mluvení"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Úložiště"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Systém"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Klepnutím vložte."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Vypnout"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Použít pohyb"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Zpět"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Storno"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Storno"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Pokračovat"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Vypnout"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Odpojit"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Povolit"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Vynulovat"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Odinstalovat"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Vymazat paměť"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Výchozí aplikace"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Zobrazení"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formát"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Jazyk a zadávání"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Zamknout displej"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizace"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Ochr. os. údajů a zab."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Obnovit"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Zvuk"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Doba"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Připojení Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Zrak"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilní data"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Čtečka displeje (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Nastavení"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Nahrávám..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Form."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ano"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Bylo dosaženo maximálního počtu znaků."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Opakovat."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Når Skærmlæser er aktiveret, vil din telefon give stemmefeedback. Skærmlæser vil f.eks. fortælle dig, hvad du kan interagere med på skærmen. Tryk på elementer for at vælge dem og høre, hvad de er, og dobbelttryk på elementer for at udføre den tilhørende handling."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Læs hints om forbrug højt"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Tilbagemelding med lyd"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrationstilbagemelding"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Læs altid tastaturindtastninger højt"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Tastaturfeedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Anden feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Læs meddelelser højt, når skærmen er slukket."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Vælg, hvilke oplysninger der skal læses højt fra de viste indikatorer på statuslinjen, når du trykker tre gange på skærmen med to fingre. Det kan for eksempel dreje sig om dato og klokkeslæt, enhedens signalstyrke, Wi-Fi- og Bluetooth-forbindelser eller batteriniveauet."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Indstil stemmefeedback til at skifte toneleje, når tastaturet bliver brugt til at indtaste tekst."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Statuslinjeoplysninger"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksporter"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Luk"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Baggrunde"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Internetdeling"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANNULLER"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "UDFØRT"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Understøttes ikke."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Akt. bevæg."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Træk i skyderen for at angive talehastigheden."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importer"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutter"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekunder"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutter"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekunder"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutter"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Om enheden"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Tilgængelighed"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Konti"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Altid tændt"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Applikationsmanager"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applikationer"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Backup og nulstil"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batteri"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Forbindelser"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dataroaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dato"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dato og tid"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Slet"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Udviklingsindstillinger"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Enhed"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Rediger"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flytilstand"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Skrifttype"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Hjem"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Forstørrelsesglas"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Mistede events"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobile netværk"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Fra"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Til"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Adgangskode indeholder ugyldige tegn."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Gem"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Skærm-timeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signalstyrke"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Tale"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Talehastighed"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tryk for at indsætte."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Sluk"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Brug bevægelse"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Tilbage"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuller"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Annuller"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Fortsæt"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Deaktiver"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Afbryd"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aktiver"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Nulstil"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Afinstaller"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Ryd cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standardapplikationer"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Skærm"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Sprog og input"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Låseskærm"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Tilpasning"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Fortroligh. & sikkerh."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Nulstil"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Lyd"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Tid"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen tilslut"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Syn"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Skærmlæser (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Indstillinger"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Indlæser data ..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Udført"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formatér"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ja"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Det maksimale antal tegn er nået."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Prøv igen."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Wenn das Bildschirmleseprogramm aktiviert ist, stellt das Telefon Sprachfeedback bereit. Beispielsweise sagt Ihnen das Bildschirmleseprogramm, womit Sie auf jedem Bildschirm interagieren können. Tippen Sie auf Elemente, um sie auszuwählen und deren Beschreibung zu hören, und tippen Sie zweimal auf Elemente, um die entsprechende Aktion auszuführen."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Verwendungshinweise vorlesen"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Tonfeedback"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrationsfeedback"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Tastatureingabe immer vorlesen"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Tastatur-Feedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Weiteres Feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Benachrichtigungen bei ausgeschaltetem Bildschirm vorlesen."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Auswählen, welche Informationen von Anzeigen in der Statusleiste vorgelesen werden, wenn dreimal mit zwei Fingern auf den Bildschirm getippt wird, wie z. B. Uhrzeit und Datum, Signalstärke des Gerätes, WLAN- und Bluetooth-Verbindungen und die Akkuladung."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Für das Sprachfeedback eine variierende Tonhöhe festlegen, wenn die Tastatur zur Texteingabe verwendet wird."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Statusleisteninformationen"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportieren"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Schließen"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Hintergrund"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ABBRECHEN"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "FERTIG"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nicht unterstützt"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Aktivieren"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Ziehen Sie den Regler, um die Sprechgeschwindigkeit festzulegen."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importieren"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 Minuten"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 Sekunden"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 Minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 Minuten"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 Sekunden"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 Minuten"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Geräteinformationen"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Eingabehilfe"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Konten"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Immer ein"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Anwendungsmanager"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Anwendungen"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Sichern und zurücksetzen"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Akku"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Verbindungen"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Daten"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Daten-Roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum und Uhrzeit"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Entwickleroptionen"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Gerät"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Bearbeiten"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Offline-Modus"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Schriftart"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Privat"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Vergrößerung"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Verpasste Ereignisse"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobile Netzwerke"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Deaktiviert"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Ein"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Passwort enthält ungültige Zeichen."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Speichern"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Bildschirm-Timeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signalstärke"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Sprache"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Sprechgeschwindigkeit"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Speicher"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Zum Einfügen tippen"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Ausschalten"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Bewegung verwenden"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "WLAN"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Zurück"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Abbruch"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Abbrechen"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Weiter"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Deaktivieren"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Trennen"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aktivieren"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Zurücks."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stopp"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Deinstallieren"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Leeren des Cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standardanwendungen"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Anzeige"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Sprache und Eingabe"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Sperrbildschirm"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalisierung"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Datenschutz/Sicherheit"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Zurücksetzen"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ton"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Zeit"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Sehhilfe"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobile Daten"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Bildschirm-Reader (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Einstellungen"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Lädt..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "OK"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formatie."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ja"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maximale Anzahl von Zeichen erreicht."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Erneut versuchen"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Όταν το Εργαλείο ανάγνωσης οθόνης είναι ενεργό, το τηλέφωνό σας θα παρέχει ανταπόκριση φωνής. Για παράδειγμα, το Εργαλείο ανάγνωσης οθόνης θα σας πει με τι μπορείτε να αλληλεπιδράσετε σε κάθε οθόνη. Πατήστε στοιχεία για να τα επιλέξετε και να ακούσετε τι είναι και πατήστε τα δύο φορές για να εκτελέσετε τη σχετική ενέργεια."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Ανάγνωση συμβουλών χρήσης"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Απόκριση με ήχο"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Ανάδραση δόνησης"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Να γίνεται πάντα ανάγνωση της εισαγωγής πληκτρολογίου"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Απόκριση πληκτρολογίου"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Άλλα σχόλια"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Να γίνεται εκφώνηση ειδοποιήσεων όταν η οθόνη είναι σβηστή."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Επιλέξτε ποιες από τις πληροφορίες των ενδείξεων που εμφανίζονται στη γραμμή κατάστασης θα εκφωνούνται όταν πατάτε τρεις φορές την οθόνη με δύο δάχτυλα όπως, για παράδειγμα, η ώρα και η ημερομηνία, η ισχύς του σήματος της συσκευής, οι συνδέσεις Wi-Fi και Bluetooth και η ισχύς της μπαταρίας."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Ορίστε την ανταπόκριση φωνής σε διαφορετικούς τόνους, χρησιμοποιώντας το πληκτρολόγιο για την καταχώριση κειμένου."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Πληροφορίες γραμμής κατάστασης"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Εξαγωγή"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Κλείσιμο"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Θέματα φόντου"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ΑΚΥΡΟ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ΤΕΛΟΣ"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Δεν υποστηρίζεται."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Ενερ. κίνησης"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Σύρετε το ρυθμιστικό για να ορίσετε το ρυθμό ομιλίας."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Εισαγωγή"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 λεπτά"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 δευτερόλεπτα"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 λεπτό"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 λεπτά"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 δευτερόλεπτα"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 λεπτά"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Πληροφορίες συσκευής"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Προσβ/τητα"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Λογαριασμοί"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Πάντα ενεργό"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Διαχειριστής εφαρμογών"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Εφαρμογές"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Δημιουργία αντιγράφων ασφαλείας και επαναφορά"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Μπαταρία"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Συνδέσεις"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Δεδομένα"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Περιαγωγή δεδομένων"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Ημερομηνία"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Ημερομηνία & ώρα"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Επιλογές προγραμματιστή"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Συσκευή"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Επεξεργασία"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Λειτουργία πτήσης"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Γραμματοσειρά"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Σπίτι"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Μεγεθυντικός φακός"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Παράλειψη συμβάντων"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Δίκτυα κινητής τηλεφωνίας"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Ανενεργό"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Ενεργό"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Ο κωδ. πρόσβασης περιέχει μη έγκυρους χαρακτήρες."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Αποθήκευση"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Λήξη χρ.ορ.οθ."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Ισχύς σήματος"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Ομιλία"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Ρυθμός ομιλίας"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Αποθήκευση"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Σύστημα"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Πατήστε για εισαγωγή."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Απενεργοποίηση"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Χρήση κίνησης"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Πίσω"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ακύρωση"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Ακύρωση"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Συνέχεια;"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Απενεργ."
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Αποσύνδεση"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Ενεργό"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Μηδενισμ."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Διακ."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Κατάργ. εγκατ."
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Εκκαθάριση μνήμης cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Προεπ/νες εφαρμογές"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Εμφάνιση"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Μορφή"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Γλώσσα και εισαγωγή"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Κλείδωμα Οθόνης"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Εξατομίκευση"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Απόρρητο και ασφάλεια"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Επαναφορά"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ήχος"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Ώρα"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Σύνδεση Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Όραση"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Δεδομ. κινητής συσκ."
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Λόγος πλευρ. οθ."
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ρυθμίσεις"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Φόρτωση..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Τέλος"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Μορφή"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ναι"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Συμπληρώθηκε ο μέγιστος αριθμός χαρακτήρων."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Δοκιμάστε ξανά."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "While Screen reader is enabled, your phone will provide voice feedback. For example, Screen reader will tell you what you can interact with on each screen. Tap items to select them and hear what they are, and double tap items to perform the related action."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Read out usage hints"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Sound feedback"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibration feedback"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Always read out keyboard input"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Keyboard feedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Other feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Read out notifications while the screen is off."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Select which information from indicators shown on the status bar will be read out when you triple tap the screen with two fingers, for example, the time and date, the device's signal strength, Wi-Fi and Bluetooth connections, and the battery power."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Set the voice feedback to vary in pitch while using the keyboard to enter text."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Status bar information"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Export"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Close"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCEL"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "DONE"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Unsupported."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Enable motion"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Drag the slider to set the speech rate."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 seconds"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 seconds"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "About device"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibility"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Accounts"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Always on"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Application manager"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applications"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Backup and reset"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Battery"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connections"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Data roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Date and time"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Developer options"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Device"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Edit"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flight mode"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Home"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Magnifier"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Missed events"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobile networks"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Off"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "On"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Password contains invalid character."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Save"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Screen timeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signal strength"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Speech"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Speech rate"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tap to insert."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Turn off"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Use motion"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Back"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Disable"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Disconnect"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Enable"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Uninstall"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Clear cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Default applications"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Display"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Language and input"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalisation"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacy and security"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sound"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Time"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vision"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Screen reader (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Done"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Yes"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maximum number of characters reached."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Try again."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH"
+msgstr "Universal switch"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_HINT"
+msgstr "Control your device with your customized switches."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ON"
+msgstr "On"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_OFF"
+msgstr "Off"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_COMMENT"
+msgstr "Use customizable switches to interact with the device and select items shown on the screen.You can set your personal interaction method by connecting external accessories, tapping the screen or using the front camera to detect the rotation of your head, the opening of your mouth and the blinking of your eyes."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS"
+msgstr "Universal switch settings"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_POPUP_ADD"
+msgstr "Add switch"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SAVE"
+msgstr "Save"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_NAME"
+msgstr "Name"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ACTION"
+msgstr "Action"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES"
+msgstr "Switches"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_ADD_SWITCH"
+msgstr "Add switch"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_DELETE"
+msgstr "DELETE"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING"
+msgstr "Scanning"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN"
+msgstr "Auto scan"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN_INT"
+msgstr "Auto scan interval"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_NUM_OF_SCANS"
+msgstr "Number of auto scan loops"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD"
+msgstr "Scan method"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_POINT"
+msgstr "Point"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_ROW"
+msgstr "Row"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR"
+msgstr "Scan direction"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_TB"
+msgstr "Top to bottom"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_BT"
+msgstr "Bottom to top"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_PT_SPEED"
+msgstr "Point scan speed"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS"
+msgstr "Additional settings"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST"
+msgstr "Pause on first item"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION"
+msgstr "Tap duration"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT"
+msgstr "Single interaction interval"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP"
+msgstr "Auto tap"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_MOVE_INT"
+msgstr "Auto move interval"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD"
+msgstr "Auto tap keyboard"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD_SUB"
+msgstr "Do not show a menu of additional actions when the keyboard is tapped while using Row scan."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK"
+msgstr "Feedback"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL"
+msgstr "Cursor color"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_RED"
+msgstr "Red"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_ORANGE"
+msgstr "Orange"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_YELLOW"
+msgstr "Yellow"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GREEN"
+msgstr "Green"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_BLUE"
+msgstr "Blue"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GRAY"
+msgstr "Gray"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND"
+msgstr "Sound"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND_VOLUME"
+msgstr "Volume"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE"
+msgstr "Voice"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_RATE"
+msgstr "Speech rate"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_VOLUME"
+msgstr "Speech volume"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_OPTIONS"
+msgstr "Options"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE"
+msgstr "Manage menu options"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SUB"
+msgstr "Select which menu options to show in Universal switch."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_GESTURES"
+msgstr "Gestures"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_ACTIONS"
+msgstr "Actions"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_RECENT_APPS"
+msgstr "Recent apps"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_HOME_SCREEN"
+msgstr "Home screen"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_BACK"
+msgstr "Back"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_BUTTONS_AND_KEYS"
+msgstr "Buttons and keys"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_CONTEXTUAL_MENU"
+msgstr "Contextual menu"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_CONTEXTUAL_MENU_DESC"
+msgstr "Place contextual menu on the first row depending on the activity"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS"
+msgstr "%.1f seconds"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_ON"
+msgstr "On"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"
+msgstr "Off"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED"
+msgstr "Undefined"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES"
+msgstr "%d Switches"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_AUTO_SCAN_INT"
+msgstr "Select the length of the time to wait before the next item is highlighted."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_NUM_OF_SCANS"
+msgstr "Select the number of times the screen is scanned automatically for interactive items when there is no interaction."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_SCAN_SPEED"
+msgstr "Select the movement speed of the vertical and horizontal screen scanning lines."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_PAUSE_ON_FIRST"
+msgstr "Select how much more time you want the 1st item to stay highlighted for while Auto scan is turned on. This will be added to the Auto scan interval time (%.1f seconds). The 1st item will stay highlighted for %.1f seconds in total."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_TAP_DURATION"
+msgstr "Select how long you need to hold an interaction for it to be recognized as a tap.<br> This duration must be less than the Auto tap time."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_SGL_IACTION_INT"
+msgstr "Select the minimum length of time that must pass between interactions for them to be recognized as separate."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_AUTO_TAP"
+msgstr "Select how long to wait before a selected item is tapped automatically. Use the Select item switch again during this time to show menu options instead."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_AUTO_MOVE_INT"
+msgstr "Select how long a switch must be held before the highlight skips to the next or previous item. This function cannot be used while Auto scan is turned on."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_SOUND"
+msgstr "Select the volume of the sound feedback."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_VOICE"
+msgstr "Select the volume and speed of voice feedback."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_SELECT_ACTION"
+msgstr "Select switch action"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH"
+msgstr "Add switch"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES"
+msgstr "Delete switches"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC"
+msgstr "All switches will be removed. Universal Switch will be disabled."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"
+msgstr "switches will be removed."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_OK"
+msgstr "Ok"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_UNABLE_TO_ADD"
+msgstr "Unable to add accessory"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ALREADY_ADDED"
+msgstr "This accessory has already been added. Try adding another accessory."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_NAME"
+msgstr "Switch name"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_SCREEN"
+msgstr "Screen"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_SCREEN_HINT"
+msgstr "Tap anywhere on the screen."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES"
+msgstr "Accessories"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_HINT"
+msgstr "Connect accessories before adding switches."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA"
+msgstr "Camera"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_HINT"
+msgstr "Set your device to detect the movement of your head, eyes and moth."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_SCREEN_TITLE"
+msgstr "Screen"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_TITLE"
+msgstr "Accessories"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_DESC"
+msgstr "Connect an accessory and press any of its buttons."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_TITLE"
+msgstr "Camera"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_COMMENT"
+msgstr "Control your device with gestures and motions via the camera. Note that these camera switches cannot be used while using the camera hardware in any app."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD"
+msgstr "Head"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_LEFT"
+msgstr "Turn head left"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_RIGHT"
+msgstr "Turn head right"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_UP"
+msgstr "Move head up"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_DOWN"
+msgstr "Move head down"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_BLINK"
+msgstr "Blink"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_BLINK_SUB"
+msgstr "Close your eyes for at least 2.0 seconds to allow the device to recognise this switch."
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD_MOUTH"
+msgstr "Open mouth"
+
+msgid "IDS_ACCS_ACCESSIBILITY_LAUNCHER"
+msgstr "Accessibility launcher"
+
+msgid "IDS_ACCS_ACCESSIBILITY_LAUNCHER_HINT"
+msgstr "Add shortcuts to specific settings and functions."
+
+msgid "IDS_ACCS_ACCESSIBILITY_LAUNCHER_COMMENT"
+msgstr "Open your accessibility settings by pressing the home key three times in quick succession."
+
+msgid "IDS_ACCS_ACCESSIBILITY_LAUNCHER_ON"
+msgstr "On"
+
+msgid "IDS_ACCS_ACCESSIBILITY_LAUNCHER_OFF"
+msgstr "Off"
+
+msgid "IDS_ACCS_SELECT_ITEMS"
+msgstr "Select items"
+
+msgid "IDS_ACCS_DELETE"
+msgstr "Delete"
+
+msgid "IDS_ACCS_ALL_CAPS"
+msgstr "ALL"
+
+msgid "IDS_ACCS_DELETE_CAPS"
+msgstr "DELETE"
+
+msgid "IDS_ACCS_SETTINGS_CAPS"
+msgstr "SETTINGS"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_NO_SWITCHES_TITLE"
+msgstr "Add switch?"
+
+msgid "IDS_ACCS_UNIVERSAL_SWITCH_NO_SWITCHES_TEXT"
+msgstr "To turn on Universal switch, at least one switch needs to be added."
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "While Screen reader is enabled, your phone will provide voice feedback. For example, Screen reader will tell you what you can interact with on each screen. Tap items to select them and hear what they are, and double tap items to perform the related action."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Read out usage hints"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Sound feedback"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibration feedback"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Always read out keyboard input"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Keyboard feedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Other feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Read out notifications while the screen is off."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Select which information from indicators shown on the status bar will be read out when you triple tap the screen with two fingers, for example, the time and date, the device's signal strength, Wi-Fi and Bluetooth connections, and the battery power."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Set the voice feedback to vary in pitch while using the keyboard to enter text."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Status bar information"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Export"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Close"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCEL"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "DONE"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Unsupported."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Enable motion"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Drag the slider to set the speech rate."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 seconds"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 seconds"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "About device"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibility"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Accounts"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Always on"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Application manager"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applications"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Backup and reset"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Battery"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connections"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Data roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Date and time"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Developer options"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Device"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Edit"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flight mode"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Home"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Magnifier"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Missed events"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobile networks"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Off"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "On"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Password contains invalid character."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Save"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Screen timeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signal strength"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Speech"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Speech rate"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tap to insert."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Turn off"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Use motion"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Back"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Disable"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Disconnect"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Enable"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Uninstall"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Clear cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Default applications"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Display"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Language and keyboard"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalization"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacy and security"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sound"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Time"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vision"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Screen reader (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Done"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Yes"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maximum number of characters reached."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Try again."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "While Screen reader is turned on, your phone will provide voice feedback. For example, Screen reader will tell you what you can interact with on each screen. Tap items to select them and hear what they are, and double tap items to perform the related action."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Read usage hints aloud"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Sound feedback"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibration feedback"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Always read keyboard input aloud"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Keyboard feedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Other feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Read notifications aloud while the screen is off."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Select which information from indicators shown on the status bar will be read aloud when you triple tap the screen with two fingers, for example, the time and date, the device's signal strength, Wi-Fi and Bluetooth connections, and the battery power."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Set the voice feedback to vary in pitch while using the keyboard to enter text."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Status bar information"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Export"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Close"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCEL"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "DONE"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Unsupported."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Turn on motion"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Drag the slider to set the speech rate."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 seconds"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 seconds"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "About device"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibility"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Accounts"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Always on"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Application manager"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Apps"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Backup and reset"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Battery"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connections"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Data roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Date and time"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Delete"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Developer options"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Device"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Edit"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Airplane mode"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Home"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Magnifier"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Missed events"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobile networks"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "OFF"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "On"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Password contains invalid character."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Save"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Screen timeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signal strength"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Speech"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Speech rate"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Storage"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tap to insert."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Turn off"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Use motion"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Back"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancel"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Turn off"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Disconnect"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Turn on"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Uninstall"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Clear cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Default applications"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Display"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Language and input"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lock screen"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalization"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacy and security"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sound"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Time"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vision"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Screen reader (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Settings"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Done"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Yes"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maximum number of characters reached."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Try again."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Mientras Lector de pantalla está activado, el teléfono proporcionará respuestas de voz. Por ejemplo, Lector de pantalla le dirá con qué puede interactuar en cada pantalla. Pulse los elementos para seleccionarlos y escuchar su descripción, y pulse dos veces los elementos para realizar la acción correspondiente."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Leer sugerencias de uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Respuesta sonora"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Respuesta de vibración"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Leer siempre la entrada del teclado."
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Respuesta del teclado"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Otras respuestas"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Leer las notificaciones mientras la pantalla está apagada."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Seleccione la información de los indicadores de la barra de estado que se leerá cuando toque tres veces la pantalla con dos dedos, por ejemplo, la hora y la fecha, la intensidad de la señal del dispositivo, las conexiones de Wi-Fi y Bluetooth y el nivel de batería."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Configurar la respuesta de voz para variar el tono mientras usa el teclado para introducir texto."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Información de barra de estado"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fondos"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Módem USB"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCELAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "HECHO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "No admitido"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Activar mov"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Deslice el controlador para establecer la velocidad de la voz."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutos"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundos"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutos"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundos"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutos"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Acerca del dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accesibilidad"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Cuentas"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Siempre activado"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Administrador de aplicaciones"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicaciones"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Copia de seguridad y restablecimiento"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batería"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Conexiones"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Datos"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Itinerancia de datos"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Fecha"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Fecha y hora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opciones de desarrollador"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Modo Avión"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fuente"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Casa"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Ampliación"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventos perdidos"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Redes móviles"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activado"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "La contraseña contiene caracteres no válidos"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Guardar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Tiempo espera"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intensidad de la señal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Voz"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Índice de velocidad"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Almacenamiento"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Toque para insertar"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilizar movimiento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atrás"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desconectar"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Aceptar"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Restab."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Parar"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Borrar caché"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicaciones predeterminadas"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Pantalla"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma y entrada de texto"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Pantalla Bloqueo"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalización"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacidad y seguridad"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sonido"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Duración"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Conexión de Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visión"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Datos móviles"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lector de pantalla (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ajustes"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Hecho"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sí"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Número máximo de caracteres alcanzado."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Inténtelo de nuevo."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Mientras Lector de pantalla está activado, el teléfono proporcionará respuestas de voz. Por ejemplo, Lector de pantalla le dirá con qué elementos puede interactuar en cada pantalla. Pulse los elementos para seleccionarlos y escuchar su descripción, y púlselos dos veces para realizar la acción correspondiente."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Leer consejos de uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Respuesta sonora"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Respuesta de vibración"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Siempre leer las entradas del teclado"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Respuesta del teclado"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Otras respuestas"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Leer notificaciones cuando la pantalla está apagada."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Seleccionar qué información de los indicadores que aparecen en la barra de estado se leerá en voz alta al pulsar tres veces la pantalla con dos dedos; por ejemplo, la hora y la fecha, la intensidad de la señal del dispositivo, las conexiones Wi-Fi y Bluetooth, y el nivel de carga de la batería."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Definir la respuesta de voz para que varíe la tonalidad al usar el teclado para introducir texto."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Información de barra de estado"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fondos de pantalla"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Anclaje a red"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCELAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "REALIZADO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "No compatible."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Activar mov."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Arrastre el deslizador para definir la velocidad de la voz."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutos"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundos"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutos"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundos"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutos"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Acerca del dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accesibilidad"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Cuentas"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Siempre activada"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Administrador de aplicaciones"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicaciones"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Realizar copia de seguridad y restablecer"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batería"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Conexiones"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Datos"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Roaming de datos"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Fecha"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Fecha y hora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opciones de desarrollador"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Perfil Fuera de línea"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fuente"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Privado"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Ampliación"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventos perdidos"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Redes móviles"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activado"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "La contraseña contiene caracteres no válidos."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Guardar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Tiemp. esp. pant."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intensidad de la señal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Voz"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Índice de velocidad"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Almacenamiento"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Pulsa para insertar."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilizar movimiento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atrás"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desconectar"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Aceptar"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Restabl."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Det."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Eliminar caché"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Predeterminadas"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Pantalla"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma e introducción"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Pantalla de bloqueo"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalización"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacidad y seguridad"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sonido"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Fecha"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visión"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Datos móviles"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lector de pantalla (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ajustes"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Realizado"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sí"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Se alcanzó el número máximo de caracteres."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Intentar de nuevo."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Kui ekraanilugeja on aktiivne, annab teie telefon häältagasisidet. Näiteks ütleb ekraanilugeja teile, millised toimingud on igal ekraanil võimalikud. Toksake üksust, et see valida ja kuulda selle kohta selgitust, ning soovitud toimingu tegemiseks toksake seda kaks korda."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Kasutamisnippide ettelug."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Heli tagasiside"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Värina tagasiside"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Loe klaviatuuri sisestus alati ette"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Klahvistiku tagasiside"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Muu tagasiside"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Teavitusi öeldakse, kui ekraan on välja lülitatud."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Saate valida, milline olekuriba indikaatorite teave loetakse ette, kui toksate ekraani kolm korda kahe sõrmega, nt aeg ja kuupäev, seadme signaalitugevus, Wi-Fi ja Bluetoothi ühendused ning akutoide."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Saate määrata häältagasiside kõrguse erinevuse, kui kasutate teksti sisestamiseks klaviatuuri."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Olekuriba teave"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Ekspordi"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Sulge"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Taustpildid"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Mobiilse internetiga ühendamine"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "TÜHISTA"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "VALMIS"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Toetuseta."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Luba liik."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Lohistage liugurit, et määrata kõne kiirus."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Impordi"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutit"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekundit"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutit"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekundit"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutit"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Teave seadme kohta"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Juurdepääs"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Kontod"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Alati sees"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Rakendusehaldur"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Rakendused"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Varunda ja lähtesta"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Aku"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Ühendused"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Andmed"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Andmesiderändlus"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Kuupäev"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Kuupäev ja kellaaeg"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Kustuta"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Arendaja valikud"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Seade"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Muuda"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Lennurežiim"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Kodu"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Suurendus"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Möödunud sündmused"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobiilsidevõrgud"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Väljas"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Sees"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Parool sisaldab lubamatut tahemarki."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Salvesta"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Ekr. ajalõpp"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signaali tugevus"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Kõne"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Kõne kiirus"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Hoiundamine"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Süsteem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Toksake sisestamiseks."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Lülita välja"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Kasuta liigutusi"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Tagasi"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Tühista"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Tühista"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Jätka"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desaktiv."
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Katkesta ühendus"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Luba"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Lähtesta"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Lõpeta"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalli"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Vahemälu tühjendamine"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Vaikerakendused"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Ekraan"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Vorminda"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Keel ja sisestus"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lukustusekraan"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Isikupärastamine"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privaatsus ja turval."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Lähtesta"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Heli"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Kestus"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Nägemine"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobiilne andmeside"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekraanilugeja (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Seaded"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Laadimine..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Valmis"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Vorming"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Jah"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Tähemärkide maksimaalne arv on saavutatud."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Proovige uuesti"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Pantaila irakurgailua gaituta dagoenean, telefonoak ahots laguntza eskainiko du. Adibidez, Pantaila irakurgailuak pantaila bakoitzeko zer elementurekin izan dezakezun elkarreragina adieraziko dizu. Ukitu elementuak haiek hautatzeko eta zer diren entzuteko, eta ukitu bi aldiz dagokion ekintza gauzatzeko."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Irakurri aholkuak ozen"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Soinu erantzuna"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Bibrazio erantzuna"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Irakurri beti ozen teklatuan idatzitakoa"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Teklatuaren erantzuna"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Beste erantzun batzuk"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Irakurri ozen jakinarazpenak pantaila itzalita dagoenean."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Hautatu egoera barrako adierazleen zer informazio erakutsiko den pantaila hiru aldiz bi hatzez ukitzean, esaterako, ordua eta data, gailuaren seinalearen indarra, Wi-Fi eta Bluetooth konexioak, eta bateria."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Ezarri ahotsezko erantzuna tonua alda dezan teklatua idazteko erabiltzen duzun bitartean."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Egoera barraren informazioa"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Esportatu"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Itxi"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Pantaila atzealdea"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Sare ainguraketa"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "UTZI"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "EGINA"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Ez bateragarria"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Gaitu mugim."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Mugitu graduatzailea hizketaren abiadura ezartzeko."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Inportatu"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutu"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundo"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "Minutu 1"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutu"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundo"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutu"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Gailuari buruz"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Erabilgarritasuna"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Kontuak"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Beti aktibatuta"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Aplikazio kudeatzailea"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikazioak"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Babes kopia eta berrezarri"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Bateria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Konexioak"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Datuak"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Datu roaminga"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data eta ordua"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Ezabatu"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Garatzailearen aukerak"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Gailua"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editatu"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Hegaldi modua"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Letra"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Etxea"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Galdutako gertaerak"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Sare mugikorrak"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desaktibatuta"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Aktibatuta"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Pasahitzak karaktere baliogabeak ditu"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Gorde"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Pan. den. muga"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Seinale indarra"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Hizketa"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Hizketaren abiadura"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Biltegiratzea"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Ukitu txertatzeko"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desaktibatu"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Erabili mugimendua"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atzera"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Ezeztatu"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Utzi"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Jarraitu"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Ezgaitu"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Deskonekt."
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Gaitu"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Ados"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Berrezar."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Geld."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalatu"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Garbitu cachea"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Lehenetsitako aplikazioak"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Pantaila"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formatua"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Hizkuntza eta sarrera"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Blokeo pantaila"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Pertsonalizazioa"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Pribatutas./Segurtasuna"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Berrezarri"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Soinua"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Iraupena"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Ikusmena"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Datu mugikorrak"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Pant. irakurgailua (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ezarpenak"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Kargatzen..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Amaituta"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formatua"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Bai"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Gehieneko karaktere kopurura iritsi zara."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Saiatu berriz."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Kun Näytönlukija on käytössä, puhelin antaa äänipalautetta. Näytönlukija esimerkiksi kertoo sinulle, mitä toimintoja voit suorittaa eri näytöissä. Napauta kohteita, jos haluat valita ne ja kuulla, mitä ne ovat, ja kaksoisnapauta kohteita, jos haluat suorittaa niihin liittyvät toiminnot."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Lue käyttövihjeet ääneen"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Äänipalaute"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Värinäpalaute"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Lue näppäimistön syöte aina ääneen"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Näppäimistöpalaute"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Muu palaute"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Lue ilmoitukset ääneen, kun näyttö on sammutettu."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Valitse, mitkä tilarivillä olevien ilmaisimien tiedot luetaan ääneen, kun napautat näyttöä kahdella sormella kolme kertaa. Esimerkkejä ovat päivämäärä ja kellonaika, laitteen signaalinvoimakkuus, Wi-Fi- ja Bluetooth-yhteydet sekä akun varaustaso."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Aseta äänipalautteen sävelkorkeus muuttumaan, kun tekstiä syötetään näppäimistöllä."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Tilarivin tiedot"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Vie"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Sulje"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Taustakuvat"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Yhteyden jako"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "PERUUTA"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "VALMIS"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Ei tuettu."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Käytä liikettä"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Aseta puhenopeus vetämällä liukusäädintä."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Tuo"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuuttia"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekuntia"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuutti"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuuttia"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekuntia"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuuttia"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Tietoja laitteesta"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Helppokäyttöisyys"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Tilit"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Aina päällä"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Sovellusten hallinta"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Sovellukset"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Varmuuskopioi ja palauta"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Akku"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Yhteydet"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dataverkkovierailu"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Päivämäärä"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Päivämäärä ja aika"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Poista"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Sovelluskehittäjien asetukset"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Laite"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Muokkaa"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Lentotila"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fontti"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Koti"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Suurennuslasi"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Ohitetut tapahtumat"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Matkapuhelinverkot"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Pois"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Päällä"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Salasanassa on virheellinen merkki."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Tallenna"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Näytön aikak."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signaalinvoimakkuus"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Puhe"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Puhenopeus"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Tallennustila"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Järjestelmä"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Lisää napauttamalla."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Sammuta"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Käytä liikettä"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Tak."
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Peruuta"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Peruuta"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Jatka"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Ei käyt."
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Katkaise"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Päälle"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Nollaa"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Lop."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Poista asennus"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Tyhjennä välimuisti"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Oletussovellukset"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Näyttö"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Muoto"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Kieli ja syöttö"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lukitusnäyttö"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Yksilöinti"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Yksityisyys ja tietot."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Nollaa"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ääni"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Kesto"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen-yhteys"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Näkö"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobiilidata"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Näytönlukija (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Asetukset"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Ladataan..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Valmis"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Alus."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Kyllä"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Merkkien enimmäismäärä on saavutettu."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Yritä uudelleen."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Lorsque le lecteur d'écran est activé, votre téléphone propose un retour vocal. Par exemple, il vous indique les éléments interactifs de chaque écran. Appuyez sur ces éléments pour les sélectionner et en savoir plus sur eux. Appuyez deux fois dessus pour exécuter l'action associée."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Lire hte voix astuces util."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Retour sonore"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Retour vibration"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Toujours lire à haute voix la saisie au clavier"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Retour clavier"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Autre retour"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Les notifications sont lues à haute voix lorsque l'écran est éteint."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Sélectionnez les informations des indicateurs de la barre d'état qui seront lues à haute voix lorsque vous appuierez trois fois sur l'écran avec deux doigts, par exemple l'heure et la date, la force du signal de l'appareil, les connexions Wi-Fi et Bluetooth et le niveau de la batterie."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Définissez la hauteur de la voix lors de la saisie de texte à l'aide d'un clavier."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informations barre d'état"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exporter"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fonds d'écran"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Fonction modem"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANNULER"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "OK"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Non pris en charge"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Act. mouvement"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Faites glisser le curseur pour régler la vitesse d'élocution."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importer"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 secondes"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 secondes"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "À propos de l'appareil"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibilité"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Comptes"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Toujours activé"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Gestionnaire d'applications"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applications"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Sauvegarder et réinitialiser"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batterie"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connexions"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Données"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Données en itinérance"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Date et heure"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Options de développement"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Appareil"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Modifier"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Mode Hors-ligne"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Police"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domicile"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Zoom"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Evénements manqués"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Réseaux mobiles"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Désactivé"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activé"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Le mot de passe contient un caractère non valide."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Enregistrer"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Expirat. écran"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Force du signal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Voix"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Vitesse d'élocution"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Stockage"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Système"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Appuyer pour compléter."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Désactiver"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utiliser les mouvements"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Retour"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Annuler"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuer"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Désactiver"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Déconnecter"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activer"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Réinit."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Arrêter"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Désinstaller"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Vider le cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Applications par défaut"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Affichage"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Langue et saisie"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Écran de verrouillage"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personnalisation"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Confidentialité/sécu."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Réinitialiser"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Son"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Minutage"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Connexion Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vue"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Données mobiles"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lecteur d'écran (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Paramètres"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Chargement en cours."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Terminé"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Oui"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Nombre maximal de caractères atteint."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Réessayez."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Lorsque le lecteur d'écran est activé, votre téléphone propose un retour vocal. Par exemple, il vous indique les éléments interactifs de chaque écran. Touchez ces éléments pour les sélectionner et en savoir plus sur eux. Touchez-y deux fois pour exécuter l'action associée."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Lire hte voix astuces util."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Retour sonore"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Retour vibration"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Toujours lire à haute voix la saisie au clavier"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Retour clavier"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Autre retour"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Les notifications sont lues à haute voix lorsque l'écran est éteint."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Sélectionnez les informations des indicateurs de la barre d'état qui seront lues à haute voix lorsque vous toucherez trois fois l'écran avec deux doigts, par exemple l'heure et la date, la force du signal de l'appareil, les connexions wifi et Bluetooth et le niveau de la pile."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Définissez la hauteur de la voix lors de la saisie de texte à l'aide d'un clavier."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informations barre d'état"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exporter"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Fermer"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fonds d'écran"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Fonction modem"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANNULER"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "OK"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Non pris en charge."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Act mouvement"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Faites glisser le curseur pour régler la vitesse d'élocution."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importer"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 secondes"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minute"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 secondes"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "À propos de l'appareil"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibilité"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Comptes"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Toujours activé"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Gestionnaire d'applications"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applications"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Sauvegarder et réinitialiser"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Pile"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connexions"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Données"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Itinérance"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Date et heure"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Options de développement"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Appareil"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Modifier"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Mode Hors-ligne"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Police"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domicile"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Zoom"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Évènements manqués"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Réseaux mobiles"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Désactivé"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activé"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Le mot de passe contient un caractère non valide."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Enregistrer"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Expirat. écran"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intensité du signal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Reconnaissance et synthèse vocales"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Vitesse d'élocution"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Stockage"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Système"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Touchez pour insérer."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Désactiver"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utiliser les mouvements"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wifi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Retour"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Annuler"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuer"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Désactiver"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Déconnecter"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activer"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Réinit."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Arrêter"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Désinstaller"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Vider le cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Applications par défaut"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Affichage"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Langue et saisie"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Écran verrouillé"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personnalisation"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Confidentialité/sécu."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Réinitialiser"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Son"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Heure"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Connexion Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vue"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Données mobiles"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lecteur d'écran (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Réglages"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Chargement..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Terminé"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Oui"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Nombre maximal de caractères atteint."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Réessayez."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Tabharfaidh d'fhón aisfhotha gutha agus Léitheoir scáileáin cumasaithe. Mar shampla, inseoidh Léitheoir scáileáin duit faoinar féidir leat idirghníomhú leis ar gach scáileán. Tapáil míreanna lena roghnú agus lena gcloisteáil céard iad, agus déthapáil míreanna leis an ngníomh lena mbaineann a dhéanamh."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Léigh amach leideanna úsáide"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Aisfhotha fuaime"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Aisfhotha creatha"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Léigh amach ionchur eochairchláir i gcónaí"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Aisfhotha eochairchláir"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Aisfhotha eile"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Léigh fógraí os ard agus an scáileán casta as."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Roghnaigh cén fhaisnéis ó na táscairí a thaispeántar ar an mbarra stádais a léifear amach ar thapáil an scáileáin faoi thrí le dhá mhéar, mar shampla, an t-am agus an dáta, neart comhartha an ghléis, naisc Wi-Fi agus Bluetooth, agus cumhacht an cheallra."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Socraigh go n-athrófar tuinairde an aisfhotha gutha agus an t-eochairchlár á úsáid le téacs a iontráil."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Faisnéis barra stádais"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Easpórtáil"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Dún"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Cúlbhrait"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Ag déanamh teaghráin"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CUIR AR CEAL"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "DÉANTA"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Gan tacú."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Cumas. gluaisne"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Tarraing an sleamhnán leis an ráta urlabhra a shocrú."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Iompórtáil"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 nóiméad"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 shoicind"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 nóiméad"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 nóiméad"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 soicind"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 nóiméad"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Eolas faoin ngléas"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Inrochtaineacht"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Cuntais"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Air i gcónaí"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Bainisteoir feidhmchláir"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Feidhmchláir"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Déan cóip chúltaca agus athshocraigh"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Ceallra"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Naisc"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Sonraí"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Sonraí fánaíochta"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dáta"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dáta agus am"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Scrios"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Roghanna forbróirí"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Gléas"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Cuir in eagar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Mód eitilte"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Cló"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Baile"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Formhéadaitheoir"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Imeachtaí a cailleadh"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Líonraí móibíleacha"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "As"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Air"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Tá carachtar neamhbhailí sa phasfhocal"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Sábháil"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Am istigh scáil."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Neart comhartha"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Caint"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Ráta labhartha"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Stóras"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Córas"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tapáil le hionsá"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Cas as"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Úsáid gluaisne"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Siar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cealaigh"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cuir ar ceal"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Ar aghaidh"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Díchumasú"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Dínasc"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Cumasaigh"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Athshocrú"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Díshuiteáil"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Glan taisce"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Feidhmchláir r.shocraithe"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Taispeáint"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formáid"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Teanga agus ionchur"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Glasáil an scáileán"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Pearsanrú"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Príobháid & slándáil"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Athshocraigh"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Fuaim"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Am"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Nascadh Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Radharc"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Sonraí móibíleacha"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Léitheoir scáileáin (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Socruithe"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Ag lódáil..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Déanta"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formáid"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Déan é"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Uaslíon na gcarachtar bainte amach."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Triail arís."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Con Lector da pantalla activado, o teu teléfono fornecerá comentarios de voz. Por exemplo, Lector da pantalla indicarache con quen podes interactuar en cada pantalla. Toca elementos para seleccionalos e escoitar o que son e toca dúas veces elementos para levar a cabo a acción relacionada."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Ler as suxestións de uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Son"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Resposta de vibración"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Ler sempre en alto as entradas co teclado"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Resposta de teclado"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Outras respostas"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Ler notificacións en alto coa pantalla apagada."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Selecciona que información dos indicadores mostrados na barra de estado se lerá en alto cando toques tres veces a pantalla con dous dedos, por exemplo, a hora e a data, a intensidade do sinal do dispositivo, as conexións Wi-Fi e Bluetooth e a carga da batería."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Define os comentarios de voz para que varíen de ton mentres usas o teclado para inserir texto."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Información da barra de estado"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Cerrar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fondos"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Ancoraxe á rede"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCELAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "FEITO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Non admitido"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Act. movemen."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Arrastra o control esvaradío para definir a velocidade da voz."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutos"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundos"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutos"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundos"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutos"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Acerca do dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accesibilidade"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Contas"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Sempre activado"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Administrador de aplicacións"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicacións"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Copia de seguridade e restauración"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batería"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Conexións"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Datos"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Itinerancia de datos"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data e hora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opcións de creador"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Modo Avión"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fonte"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Particular"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventos perdidos"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Redes móbiles"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Activado"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "O contrasinal contén un carácter non válido"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Gardar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Temp.esp.pant."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intensidade do sinal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Voz"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Valor da voz"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Almacenamento"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Toca para inserir"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Apagado"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Usar movemento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atrás"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desconectar"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Aceptar"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Restab."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Deter"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Borrar caché"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicacións predetermin."
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Pantalla"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma e entrada"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Pantalla de bloqueo"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalización"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacid. e seguridade"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Restablecer"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Son"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Duración"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Conexión Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visual"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Datos móbiles"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lector de pantalla (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Axustes"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Fin."
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Form."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Si"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Alcanzouse o número máximo de carácteres."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Inténtao outra vez."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Dok je Čitač zaslona uključen, vaš će telefon pružati glasovne povratne informacije. Primjerice, Čitač zaslona reći će vam s čime možete ostvariti interakciju na svakom zaslonu. Dodirnite stavke da biste ih odabrali i čuli što su te dvaput dodirnite stavke za izvođenje povezane radnje."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Čitanje savjeta o uporabi"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Zvučna naredba"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Dojava vibracijom"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Uvijek čitaj unos s tipkovnice"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Povratne informacije tipkovnice"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Ostale povratne informacije"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Čitaj obavijesti dok je zaslon isključen."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Odaberite koje će se informacije s pokazatelja prikazane na traci statusa pročitati kada tri puta dodirnete zaslon s dva prsta, poput datuma i vremena, jačine signala uređaja, Wi-Fi i Bluetooth veza te baterije."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Postavite variranje tona glasovne povratne informacije tijekom upotrebe tipkovnice za unos teksta."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informacije na traci statusa"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Izvoz"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Prekid"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Pozadine"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Dijeljenje veze"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ODUSTANI"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "GOTOVO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nepodržano."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Uklj. pokret"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Povucite klizač da biste postavili brzinu govora."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Uvoz"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuta"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sek"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 min"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 min"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sek"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuta"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "O uređaju"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Pristupačnost"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Računi"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Uvijek uključeno"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Upravljanje aplikacijama"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikacije"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Sigurnosno kopiranje i poništavanje"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Baterija"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Veze"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Podaci"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Podatkovni roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum i vrijeme"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Obriši"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opcije razvoja"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Uređaj"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Profil Bez mreže"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Slova"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Kuća"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Povećalo"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Propušteni događaji"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilne mreže"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Isključeno"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Uključeno"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Lozinka sadrži neispravan znak."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Spremi"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Istek zaslona"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Jačina signala"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Govor"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Brzina govora"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Pohrana"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Dotaknite za umetanje."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Isključi"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Koristi pokrete"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Nazad"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Prekid"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Prekid"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Nastavak"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Isključi"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Odspoji"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Uključi"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "U redu"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Poništi"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Zaustavi"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Deinstaliraj"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Brisanje predmemorije"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Zadane aplikacije"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Zaslon"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Jezik i unos"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Zaslon zaključavanja"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizacija"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privatnost i sigurnost"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Poništavanje"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Zvuk"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Vrijeme"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen povezivanje"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vid"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilni podaci"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Čitač zaslona (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Postavke"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Učitavanje..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "OK"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Da"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Dosegnut maksimalan broj znakova."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Ponovite."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "A Képernyőolvasó bekapcsolása esetén a telefon hangos visszajelzést ad. A Képernyőolvasó például elmondja önnek, hogy milyen műveleteket végezhet az egyes képernyőkön. Az elemeket megérintve kijelölheti őket. Ekkor az eszköz elmondja, hogy milyen elemet jelölt ki. A kapcsolódó művelet végrehajtásához kétszer kell megérinteni az elemeket."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Használati tippek felolv."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Hangvisszajelzés"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Visszajelzés rezgéssel"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Mindig felolvassa a billentyűzeten végzett bevitelt"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Billentyűzet visszajelzése"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Egyéb visszajelzés"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Kikapcsolt képernyőnél felolvassa az értesítéseket."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Kijelölheti az állapotsor jelzőelemeinek azon adatait, amelyeket a képernyő két ujjal történő háromszori megérintésekor fel szeretne olvastatni az eszközzel. Ezek között szerepelhet például az idő és a dátum, a jelerősség, a Wi-Fi- és a Bluetooth-kapcsolatok, valamint az akkumulátor töltöttsége."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Beállíthatja, hogy a billentyűzeten végzett szövegbevitel során változzon a hangos visszajelzés hangmagassága."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Adatok az állapotsorban"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportálás"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Bezárás"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Háttérképek"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Internetmegosztás"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "MÉGSE"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "KÉSZ"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nem támogatott"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Mozgás eng."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "A beszédgyorsaságot a csúszka húzásával állíthatja be."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importálás"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 perc"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 másodperc"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 perc"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 perc"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 másodperc"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 perc"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Az eszköz névjegye"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Kisegítő lehetőségek"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Fiókok"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Mindig bekapcsolva"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Alkalmazáskezelő"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Alkalmazások"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Mentés és visszaállítás"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Akkumulátor"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Kapcsolatok"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Adat"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Adatroaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dátum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dátum és idő"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Töröl"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Fejlesztői beállítások"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Eszköz"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Szerkeszt"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Repülő üzemmód"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Betűtípus"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Otthoni"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Nagyító"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Elmulasztott események"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilhálózatok"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Ki"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Be"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "A jelszó érvénytelen karaktert tartalmaz."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Ment"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Képernyő idők."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Jelerősség"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Beszéd"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Beszédgyorsaság"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Tárhely"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Rendszer"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Érintse meg a beillesztéshez."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Kikapcsolás"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Hangulatjelek használata"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Vissza"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Mégse"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Mégse"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Folytatás"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Kikapcsol"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Bontás"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Engedélyezés"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Nullázás"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Leállít"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Eltávolítás"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Gyorsítótár törlése"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Alapértelm. alkalmazások"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Kijelző"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formátum"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Nyelv és bevitel"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Képernyő lezárása"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Testreszabás"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Adatvéd. és biztonság"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Visszaállítás"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Hang"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Idő"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Látás"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilinternet-kapcsolat"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Szövegfelolvasó (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Beállítások"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Betöltés..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Kész"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formáz"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Igen"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Elérte a karakterek maximális számát."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Próbálja újra."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Երբ Էկրանի ընթերցիչն ընձեռված է, հեռախոսը կտրամադրի ձայնով հետադարձ կապ: Օրինակ՝ Էկրանի ընթերցիչը կասի, թե ինչի հետ կարող եք փոխգործողություն կատարել յուրաքանչյուր էկրանի վրա: Թակեք տարրերը՝ ընտրելու և լսելու, թե դրանք ինչ են, և կրկնակի թակեք տարրերը՝ համապատասխան գործողությունը կատարելու համար:"
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Կրդլ օգտ. մասին հուշումներ"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Ձայնային հետադարձ կապ"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Թրթռումով հետդրձ արձագանք"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Միշտ բարձրաձայն կարդալ ստեղնաշարով մուտքագրված տվյալները"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Ստեղնաշարի հետադարձ արձագանք"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Այլ հետադարձ արձագանք"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Բարձրաձայն կարդալ ծանուցումներ, երբ էկրանն անջատված է:"
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Ընտրեք, թե վիճակագոտում ցուցադրված ցուցիչներից ինչ տեղեկություններ կարդացվեն բարձրաձայն, երբ երկու մատով երեք անգամ թակեք էկրանը, օրինակ՝ ժամը և թվականը, սարքի ազդանշանի ուժգնությունը, Wi-Fi-ի և Bluetooth-ի միացումները և մարտկոցի էներգիան:"
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Նախադրեք ձայնային հետադարձ կապն այնպես, որ տեքստի մուտքագրման նպատակով ստեղնաշարն օգտագործելիս փոխվի ձայնի ուժգնությունը:"
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Վիճակագոտու տվյալներ"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Արտահանել"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Փակել"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Պաստառներ"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Տեղակապում"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ԴԱԴԱՐԵՑՆԵԼ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ԱՐՎԱԾ"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Չսատարվող:"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Ընձռլ շարժում"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Քարշեք սողանիկը՝ խոսքի արագությունը նախադրելու համար:"
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Ներմուծել"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 րոպե"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 վայրկյան"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 րոպե"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 րոպե"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 վայրկյան"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 րոպե"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Սարքի մասին"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Մատչելիություն"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Հաշիվներ"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Միշտ միացված"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Ծրագրի վարիչ"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Ծրագրեր"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Կրկնօրինակել և վերադնել"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Մարտկոց"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Կապեր"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Տվյալներ"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Տվյալների ռոումինգ"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Ամսաթիվ"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Ամսաթիվ և ժամանակ"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Ջնջել"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Մշակողի ընտրանքներ"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Սարք"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Խմբագրել"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Թռիչքի ռեժիմ"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Տառատեսակ"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Տուն"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Խոշորացույց"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Բաց թողնված իրադարձություններ"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Բջջային ցանցեր"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Անջատված է"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Միացված է"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Գաղտնաբառը պարունակում է անվավեր նիշ:"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Պահպանել"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Էկրանի դադար"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Ազդանշանի ուժգնությունը"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Խոսք"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Խոսքի արագություն"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Պահոց"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Համակարգ"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Թակել մուտքագրելու համար:"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Անջատել"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Օգտագործել շարժում"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Ետ"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Չեղարկել"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Դադարեցնել"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Շարունակել"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Կասեցնել"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Անջատել"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Ակտիվացնլ"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Ընդունել"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Հետադարձել"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Կնգնլ"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Ապատեղադրել"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Մաքրել հիշապահեստը"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Կանխադրված ծրագրեր"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Էկրան"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Ձևաչափ"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Լեզու և ներածում"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Կողպել էկրանը"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Անհատականացում"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Գաղտն. և անվտանգութ."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Զրոյացնել"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ձայն"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Ժամանակ"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Տեսողություն"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Շարժական տվյալներ"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Էկրանի ընթերցիչ (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Պարամետրեր"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Բեռնում է..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Պատրաստ"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Ձևչափ"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Այո"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Հասել է նիշերի առավելագույն քանակին:"
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Փորձեք կրկին"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Þegar kveikt er á skjálesara býður síminn upp á raddsvörun. Skjálesari mun til dæmis segja þér hvaða aðgerðir þú getur framkvæmt á hverjum skjá. Pikkaðu á atriði til að velja þau og heyra hvað þau gera og pikkaðu tvisvar á atriði til að framkvæma aðgerðina."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Lesa upp notkunarráð"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Hljóðsvörun"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Titringssvörun"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Lesa alltaf upp innslátt á lyklaborð"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Svörun lyklaborðs"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Önnur svörun"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Lesa upp tilkynningar þegar slökkt er á skjánum."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Veldu hvaða upplýsingar vísa á stöðustikunni eru lesnar upp þegar þú pikkar þrisvar á skjáinn með tveimur fingrum, t.d. tími og dagsetning, sendistyrkur tækisins, tengingar um Wi-Fi og Bluetooth og rafhlöðuorka."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Láta tónhæð raddsvörunar breytast þegar lyklaborðið er notað til að slá inn texta."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Upplýsingar stöðustiku"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Flytja út"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Loka"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Veggfóður"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Sími sem netaðgangsstaður"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "HÆTTA VIÐ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "LOKIÐ"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Óstutt."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Hreyfing á"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Dragðu sleðann til að stilla talhraðann."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Flytja inn"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 mínútur"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekúndur"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 mínúta"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 mínútur"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekúndur"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 mínútur"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Um tækið"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Aðgengi"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Reikningar"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Alltaf kveikt"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Forritastjórnun"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Forrit"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Öryggisafrit og núllstilling"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Rafhlaða"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Tengingar"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Gögn"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Gagnareiki"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dagsetning"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dagsetning og tími"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Eyða"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Þróunarvalkostir"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Tæki"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Breyta"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flughamur"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Letur"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Heima"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Magnari"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Ósvaraðar áminningar"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Farsímakerfi"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Slökkt"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Kveikt"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Lykilorð inniheldur ógildan staf."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Vista"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Skjátímalokun"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Sendistyrkur"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Tal"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Talhraði"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Geymsla"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Kerfi"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Pikkaðu til að setja inn."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Slökkva"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Nota hreyfingu"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Bakka"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Hætta v."
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Hætta við"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Halda áfram"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Slökkva"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Aftengja"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Gera virkt"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Í lagi"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Núllstil."
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stö."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Fjarlægja"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Hreinsa skyndiminni"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Sjálfgefin forrit"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Skjár"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Snið"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Tungumál og innsláttur"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Lásskjár"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Sérstillingar"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Persónuvernd og öryggi"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Endurstilla"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Hljóð"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Tími"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen-tenging"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Sjón"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Farsímagögn"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Skjálesari (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Stillingar"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Hleð..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Lokið"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Forsn."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Já"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Hámarksfjölda stafa hefur verið náð."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Reyna aftur."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Quando Lettore schermo è attivo, il dispositivo fornirà un feedback vocale. Ad esempio, Lettore schermo vi dirà con quale elemento potete interagire su ciascuna schermata. Toccate gli elementi per selezionarli e ascoltarne la descrizione e toccateli due volte per effettuare l'azione collegata."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Leggi suggerimenti uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Feedback acustico"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Feedback vibrazione"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Legge sempre ad alta voce l'inserimento della tastiera"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Feedback tastiera"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Altro feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Legge ad alta voce le notifiche mentre lo schermo è spento."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Selezionate quali informazioni degli indicatori visualizzati sulla barra di stato verranno lette a voce alta quando toccate per tre volte con due dita lo schermo, come ad esempio l'ora e la data, la potenza del segnale del dispositivo, le connessioni Wi-Fi e Bluetooth e il livello della batteria."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Imposta il feedback vocale sulla variazione di tono durante l'utilizzo della tastiera per l'inserimento di testo."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informazioni barra di stato"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Esporta"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Chiudi"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Sfondi"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANNULLA"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "FATTO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Non supportato."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Attiva movim."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Trascinate il cursore per impostare la velocità di sintesi."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importa"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuti"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 secondi"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuti"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 secondi"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuti"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Info sul dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accessibilità"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Account"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Sempre attivo"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Gestione applicazioni"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Applicazioni"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Backup e ripristino"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batteria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Connessioni"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dati"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Roaming dati"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data e ora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opzioni sviluppatore"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Modifica"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Modalità offline"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Carattere"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Casa"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lente d'ingrandimento"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventi persi"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Reti mobili"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Non attivo"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Attivo"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "La password contiene caratteri non validi."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Salva"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Spegn. schermo"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Potenza del segnale"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Parlato"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Velocità riproduzione"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Memoria"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tocca per inserire."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Disattiva"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Sensore di movimento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Indietro"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Annulla"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continua"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Disattiva"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Disconnetti"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Attiva"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Azzera"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Ferma"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Disinstalla"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Svuota cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Applicazioni predefinite"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Schermo"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Lingua e inserimento"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Schermata di blocco"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizzazione"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacy ed emergenza"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Ripristina"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Suono"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Durata"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Connessione Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vista"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Connessione dati"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Lettura schermo (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Impostaz."
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Caricamento..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Fatto"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formatta"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sì"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Il numero massimo di caratteri è stato raggiunto."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Riprovate."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "スクリーンリーダーが有効な間は、音声フィードバックが提供されます。たとえば、スクリーンリーダーでは各画面で入力操作できる内容を確認することができます。項目をタップして選択し、音声による内容の確認や、項目をダブルタップして関連する操作を実行することができます。"
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "使用方法のヒントを読み上げ"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "サウンドフィードバック"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "タッチ操作バイブ"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "常にキーボード入力を読み上げる"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "キーボードフィードバック"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "他のフィードバック"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "画面OFF時に通知を読み上げます。"
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "画面を2本の指でトリプルタップしたときに読み上げるステータスバーの情報を設定します。読み上げる情報は日時、端末の電波強度、Wi-FiおよびBluetooth接続、バッテリー残量などから選択できます。"
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "キーボードを使用してテキストを入力している間は、音声フィードバックのトーンを変更するように設定します。"
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "ステータスバーの情報"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "エクスポート"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "閉じる"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "壁紙"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "テザリング"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "キャンセル"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "完了"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "未対応です。"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "モーションを使用"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "読み上げの速度を設定するには、スライダーをドラッグしてください。"
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "インポート"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10分"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15秒"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1分"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2分"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30秒"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5分"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "端末情報"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "ユーザー補助"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "アカウント"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "常にON"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "アプリケーション管理"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "アプリケーション"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "バックアップとリセット"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "バッテリー"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "接続"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "データ"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "データローミング"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "日付"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "日付と時刻"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "削除"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "開発者向けオプション"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "本体"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "編集"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "機内モード"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "フォント"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "自宅"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "ルーペ"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "未確認イベント"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "モバイルネットワーク"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "OFF"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "ON"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "パスワードに無効な文字が含まれています。"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "保存"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "画面のタイムアウト"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "電波強度"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "音声"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "読み上げの速度"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "ストレージ"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "システム"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "タップして入力"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "OFF"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "モーションを使用"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "戻る"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "キャンセル"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "キャンセル"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "続行"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "無効"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "切断"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "有効"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "リセット"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "停止"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "削除"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "キャッシュを消去"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "標準アプリケーション"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "ディスプレイ"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "初期化"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "言語と文字入力"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "ロック画面"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "個人設定"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "プライバシーとセキュリティ"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "リセット"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "サウンド"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "時間"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizenコネクト"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "視覚"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "モバイルデータ"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "スクリーンリーダー(TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "読み込み中..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "完了"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "フォーマット"
+
+msgid "IDS_ST_SK_YES"
+msgstr "はい"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "最大文字数に達しました。"
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "再度入力してください。"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "როდესაც „ეკრანის წამკითხველი“ ჩართულია, ტელეფონი გეხმაურებათ ხმით. მაგალითად, „ეკრანის წამკითხველი“ გეტყვით, რომელი ინტერაქტივის შესრულება შეგიძლიათ თითოეულ ეკრანზე. შეეხეთ შესარჩევ ელემენტს და მოისმინეთ, თუ რა არის იგი, ხოლო ორჯერ შეხებით შეასრულეთ შესაბამისი მოქმედება."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "მითითებების წარმოთქმა"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "ხმოვანი გამოხმაურება"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "ვიბრაციული უკუკავშირი"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "მუდამ შესრულდეს კლავიატურით აკრეფილის წარმოთქმა"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "კლავიატურის რეაგირება"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "სხვა რეაგირება"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "მოხდეს შეტყობინებების წარმოთქმა, სანამ ეკრანი გამორთულია."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "აირჩიეთ, სტატუსის ზოლის ინდიკატორებიდან რომელი ინფორმაციის წარმოთქმა შესრულდეს, როდესაც ორი თითით სამჯერ შეეხებით ეკრანს; მაგალითად, თარიღი და დრო, მოწყობილობის სიგნალის სიმძლავრე, Wi-Fi და Bluetooth კავშირი და კვების ენერგიის შევსების დონე."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "დააყენეთ ხმოვანი გამოხმაურება, რომლის ხმის ტონალობა იცვლება, როდესაც ტექსტის ასაკრეფად იყენებთ კლავიატურას."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "სტატუსის ზოლის ინფორმაცია"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "ექსპორტი"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "დახურვა"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "ფონები"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "მიბმა"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "გაუქმება"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "მზადაა"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "გაუთვალისწინებელი."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "მოძრაობის ჩრ."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "თითით გადაიტანეთ ცოცია, საუბრის სიჩქარის დასაყენებლად."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "იმპორტი"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 წუთი"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 წამი"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 წუთი"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 წუთი"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 წამი"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 წუთი"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "აპარატის შესახებ"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "წვდომა"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "ანგარიშები"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "ყოველთვის ჩართული"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "პროგრამის მენეჯერი"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "პროგრამები"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "დამარქაფება და გადატვირთვა"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "კვების ელემენტი"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "დაკავშირებები"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "მონაცემები"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "მონაცემთა გადაცემა როუმინგის დროს"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "თარიღი"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "თარიღი და დრო"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "წაშლა"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "დეველოპერის ოფციები"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "მოწყობილობა"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "შეცვლა"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "ფრენის რეჟიმი"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "ფონტი"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "საწყისი გვერდი"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "გამადიდებელი"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "გამოტოვებული მოვლენები"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "მობილური ქსელები"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "გამორთ."
+
+msgid "IDS_ST_BODY_ON"
+msgstr "ჩართვა"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "პაროლი შეიცავს არასწორ სიმბოლოს."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "შენახვა"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "განათების დრო"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "სიგნალის სიძლიერე"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "წარმოთქმა"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "საუბრის სიჩქარე"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "მეხსიერება"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "სისტემა"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "დააკაკუნეთ და ჩასვით."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "გამორთვა"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "მოძრაობის გამოყენება"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "უკან"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "გაუქმება"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "გაუქმება"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "გაგრძელება"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "გამორთვა"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "გამორთვა"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "ჩართვა"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "კი"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "გაუქმება"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "შეჩერ."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "დეინსტალაცია"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "ქეშის გასუფთავება"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "ნაგულისხმევი პროგრამები"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "ჩვენება"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "დაფორმატება"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "ენა და ტექსტის აკრეფა"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "ეკრანის დაბლოკვა"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "პერსონალურად მოწყობა"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "კონფიდენციალურ., დაცვა"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "გადატვირთვა"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "ხმა"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "საათი"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "ხედვა"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "მობილური მონაცემები"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "ეკრანზე წამკითხველი (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "პარამეტრები"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "იტვირთება..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "შესრულდა"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "ფორმტ."
+
+msgid "IDS_ST_SK_YES"
+msgstr "კი"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "მიღწეულია სიმბოლოების მაქსიმალური რაოდენობა."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "კიდევ მოსინჯეთ"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Экранды оқу құралы қосулы кезде, телефоныңыз дауыстық хабар береді. Мысалы, экранды оқу құралы сізге әрбір экранда қандай элементпен өзара әрекеттесе алатыныңызды айтады. Элементтерді таңдап, олардың қандай элемент екенін есту үшін, элементтерді түртіңіз, ал қатысты әрекетті орындау үшін, элементтерді екі рет түртіңіз."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Пайдалану кеңестерін оқу"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Дыбыстық кері байланыс"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Дірілдеу кері байланысы"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Пернетақтамен енгізгенді әрқашан дауыстап оқу"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Пернетақта кері байланысы"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Басқа кері байланыс"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Экран өшірулі болған кезде хабарландыруларды оқу."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Экранды екі саусақпен үш рет түрткен кезде күй жолағында көрсетілетін индикаторлардың оқылатын ақпаратын таңдаңыз, мысалы, уақыт пен күн, құрылғы сигналының деңгейі, Wi-Fi және Bluetooth қосылымдары және батарея қуаты."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Мәтінді пернетақтамен енгізу кезінде, дауыстық пікірді орнатыңыз."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Күй жолағы ақпараты"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Экспорттау"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Жабу"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Түсқағаз"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Шектеу"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "БАС ТАРТУ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ДАЙЫН"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Қолдаусыз"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Қозғалыс қосу"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Сөйлеу жылдамдығын орнату үшін сырғытпаны сүйреңіз."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Импорттау"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 минут"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 секунд"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 минут"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 минут"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 секунд"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 минут"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Құрылғы туралы"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Қол жетімділік"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Есептік жазбалар"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Әрқашан қосулы"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Қосымша реттегіші"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Қосымшалар"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Сақтық көшірме және қалпына келтіру"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Батарея"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Байланысу"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Деректер"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Деректер роумингі"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Күні"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Күні және уақыты"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Жою"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Әзірлеуші параметрлері"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Құрылғы"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Өзгерту"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Ұшу режимі"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Қаріп"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Үй парағы"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Үлкейткіш"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Жауап берілмеген оқиғалар"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Ұялы желілер"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Өшірілген"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Қосылған"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Құпиясөзде қате таңба бар."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Сақтау"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Экр.уақ.бітті"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Сигнал деңгейі"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Сөз"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Сөйлеу жылдамдығы"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Сақтау орны"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Жүйе"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Енгізу үшін түртіңіз."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Өшіру."
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Қозғалыс пайдалану"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Артқа"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Тоқтату"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Бас тарту"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Жалғастыру"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Өшіру"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Ажырату"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Қосу"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Жаңарту"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Тоқт"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Жою"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Кэшті тазарту"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Әдепкі бағдарламалар"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Дисплей"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Пішімдеу"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Тіл және енгізу"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Экранды құлыптау"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Жекешелендіру"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Құпиялылық-қауіпсіздік"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Алып тастау"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Дыбыс"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Уақыт"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen қосылымы"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Көру"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Ұялы деректер"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Экран оқу құралы (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Қондырғылар"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Жазылуда..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Дайын"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Фрм."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Иә"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Ең көп таңбалар санына жетті."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Әрекетті қайталаңыз"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "스크린 리더를 실행하면 음성 피드백을 제공합니다. 예를 들어, 스크린 리더는 각 화면에서 조작할 수 있는 것을 말해줍니다. 항목을 한 번 누르면 들을 수 있고, 두 번 누르면 관련 항목의 작업을 수행합니다."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "사용 도움말 읽어주기"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "소리 피드백"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "진동 피드백"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "항상"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "키보드 입력 읽어주기"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "기타 피드백"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "화면이 꺼져 있을 때 알림을 읽어줍니다."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "상태표시줄의 정보 중, 두 손가락으로 세 번 눌렀을 때 읽어줄 항목을 선택합니다. 날짜, 시간, 신호 세기, Wi-Fi 및 블루투스 연결, 배터리 사용량 등의 정보가 있습니다."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "키보드를 사용할 때 다른 목소리 톤으로 음성 피드백을 받습니다."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "상태표시줄 정보"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "내보내기"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "닫기"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "배경화면"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "테더링"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "취소"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "완료"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "지원되지 않습니다."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "모션 실행"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "슬라이드를 움직여 읽어주는 속도를 설정하세요."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "가져오기"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10분"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15초"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1분"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2분"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30초"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5분"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "디바이스 정보"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "접근성"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "계정"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "항상 사용"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "애플리케이션 관리자"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "애플리케이션"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "백업 및 초기화"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "배터리"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "블루투스"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "연결 프로필"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "데이터"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "데이터 로밍"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "날짜"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "날짜 및 시간"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "삭제"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "개발자 옵션"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "디바이스"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "편집"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "비행기 탑승 모드"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "글꼴"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "집"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "돋보기"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "읽지 않은 일정"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "모바일 네트워크"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "해제"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "사용"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "바르지 않은 문자를 포함하고 있습니다."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "저장"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "화면 자동 꺼짐 시간"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "신호 세기"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "말하기"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "읽어주는 속도"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "저장공간"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "시스템"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "삽입하려면 누르세요."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "해제"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "모션 기능 사용"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "뒤로가기"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "취소"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "취소"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "계속"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "해제"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "연결 해제"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "실행"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "확인"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "초기화"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "중지"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "삭제"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "캐시 삭제"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "기본 애플리케이션"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "디스플레이"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "포맷"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "언어 및 입력 방식"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "잠금화면"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "개인 설정"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "개인정보 보호 및 보안"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "초기화"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "소리"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "시간"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "시각"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "모바일 데이터"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "스크린 리더(TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "설정"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "불러오는 중..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "완료"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "포맷"
+
+msgid "IDS_ST_SK_YES"
+msgstr "예"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "최대 글자 수에 도달했습니다."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "다시 시도하세요."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "블루투스"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Įjungus ekrano skaitytuvą telefonas pateiks atsakymus balsu. Pavyzdžiui, ekrano skaitytuvas pasakys, su kokiais elementais galite atlikti veiksmus kiekviename ekrane. Bakstelėdami elementus juos pasirinksite ir išgirsite jų pavadinimus, o bakstelėję elementus dukart galėsite atlikti su jais susietus veiksmus."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Perskaityt naud. patarimus"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Garsinis atsakas"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibravimo atsakas"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Visada skaityti balsu įvestį klaviatūra"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Klaviatūros atsakas"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Kitas atsiliepimas"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Perskaityti pranešimus, kai ekranas išjungtas."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Pasirinkite, kuri būsenos juostoje rodomų indikatorių informacija bus perskaityta, kai tris kartus bakstelėsite ekraną trimis pirštais, pvz., laikas ir data, įrenginio priimamo signalo stiprumas, „Wi-Fi“ ir „Bluetooth“ ryšiai ir akumuliatoriaus galia."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Nustatykite, kad naudojantis klaviatūra ir įvedant tekstą, keistųsi tonas."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Būsenos juostos informacija"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksportuoti"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Uždaryti"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Ekrano fonai"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Siejama"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ATŠAUKTI"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ATLIKTA"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nepalaikoma."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Įjungt judes."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Vilkite slankiklį ir nustatykite kalbėjimo spartą."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importuoti"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minučių"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekundžių"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minutė"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutės"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekundžių"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutės"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Apie įrenginį"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Prieiga neįgaliesiems"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Paskyros"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Visada įjungta"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Programų tvarkyklė"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Programos"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Atsarginis kopijavimas ir nustatymas iš naujo"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Akumuliatorius"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Ryšiai"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Duomenys"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Tarptinklinis duomenų siuntimas"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data ir laikas"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Trinti"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Kūrėjų parinktys"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Įrenginys"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Redaguoti"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Skrydžio režimas"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Šriftas"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Namų"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Didintuvas"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Praleisti įvykiai"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilieji tinklai"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Išjungta"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Įjungta"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Slaptažodyje yra neleistinų simbolių."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Išsaugoti"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Baig.ekr.laik."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signalo stiprumas"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Kalba"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Kalbėjimo sparta"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Saugykla"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Bakstelėkite, jei norite įterpti."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Išjungti"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Naudoti judesį"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atgal"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Atšaukti"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Atšaukti"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Tęsti"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Išjungti"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Atsijungti"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Įjungti"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Gerai"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Atstatyti"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stab."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Pašalinti"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Valyti talpyklą"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Numatytosios programos"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Ekranas"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formatuoti"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Kalba ir įvestis"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Užrakinimo ekranas"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Tinkinimas"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privatumas ir sauga"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Atstatyti"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Garsas"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Laikas"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Rega"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilieji duomenys"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekrano skaitytuvas (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Nustatymai"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Įkeliama..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Atlikta"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Taip"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Pasiektas didžiausias simbolių skaičius."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Bandyti dar kartą"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Kamēr būs aktivizēta programma Ekrāna lasītājs, tālrunis nodrošinās balss atbildi. Piemēram, Ekrāna lasītājs paziņos, kādas darbības var veikt katrā no ekrāniem. Pieskarieties objektiem, lai tos izvēlētos un noklausītos, kas tie ir, un veiciet dubultskārienu pie objektiem, lai veiktu saistīto darbību."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Lietošanas padomu lasīšana"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Atbilde ar skaņu"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Atbilde ar vibrāciju"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Vienmēr nolasīt tastatūras ievadi"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Atbilde ar tastatūru"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Citas atsauksmes"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Nolasiet paziņojumus, kad ekrāns ir izslēgts."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Izvēlieties, ko no statusa joslā redzamo indikatoru informācijas nolasīt, kad trīsreiz pieskaraties ekrānam. Nolasīt var, piemēram, laiku un datumu, ierīces signāla stiprumu, Wi-Fi un Bluetooth savienojumus un akumulatora uzlādes līmeni."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Iestatiet, lai balss atbildes tonis atšķiras, kad teksta ievadei tiek lietota tastatūra."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Statusa joslas informācija"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksportēt"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Aizvērt"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fona attēli"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Ierīces piesaiste tālrunim"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ATCELT"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "GATAVS"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Neatbalstīts."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Akt. kustību"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Velciet slīdni, lai iestatītu runas ātrumu."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importēt"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minūtes"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekundes"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minūte"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minūtes"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekundes"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minūtes"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Par ierīci"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Pieejamība"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Konti"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Vienmēr ieslēgts"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Programmu pārvaldnieks"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Programmas"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Dublēšana un atiestatīšana"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Akumulators"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Savienojumi"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dati"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Datu viesabonēšana"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datums"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datums un laiks"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Dzēst"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Izstrādātāja iespējas"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Ierīce"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Rediģēt"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Lidojuma režīms"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fonts"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Mājas"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Nokavētie notikumi"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilie tīkli"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Izslēgts"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Ieslēgts"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Parolē ir nederīga rakstzīme."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Saglabāt"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Ekr. taimauts"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signāla stiprums"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Runa"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Runas ātrums"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Krātuve"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistēma"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Pieskarieties, lai ievietotu."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Izslēgt"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Lietot kustību"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Atpakaļ"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Atcelt"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Atcelt"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Turpināt"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Deaktiviz."
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Atvienot"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aktivizēt"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Labi"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Nodzēst"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Apt."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Atinstalēt"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Notīrīt kešatmiņu"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Noklusējuma programmas"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Displejs"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formāts"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Valoda un ievade"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Bloķēšanas ekrāns"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizēšana"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Konfidenc. un drošība"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Atiestatīt"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Skaņa"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Laiks"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Redze"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilie dati"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekrāna lasītājs (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Iestatījumi"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Ielādē..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Gatavs"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formatēt"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Jā"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Sasniegts maksimālais rakstzīmju skaits."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Mēģiniet vēlreiz"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Додека е овозможен Екрански читач, телефонот ќе дава говорни повратни информации. На пример, Екрански читач ќе Ви каже со што можете да содејствувате на секој екран. Допирајте ставки за да ги бирате и за да чуете што се, а со двоен допир на ставките вршете го поврзаното дејство."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Проч. ги сов. за користење"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Звучни поврат. информации"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Вибрации"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Секогаш читај на глас внесување на тастатурата"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Повратни информации на тастатурата"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Други повратни информации"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Читај известувања на глас кога екранот е исклучен."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Изберете кои информации од показателите прикажани на статусната лента ќе се читаат на глас кога ќе го допрете трипати екранот со два прста, на пример, времето и датумот, јачината на сигналот на уредот, поврзувањата Wi-Fi и Bluetooth и наполнетоста на батеријата."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Одредете говорните повратни информации да бидат со друга висина додека се користи тастатурата за да внесувате текст."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Инфо. на лентата за состојба"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Извези"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Затвори"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Заднини"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Споделување"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ОТКАЖИ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ГОТОВО"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Неподдржано."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Вкл. движење"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Повлечете го лизгачот за да ја поставите брзината на говорот."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Увези"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 минути"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 секунди"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 минута"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 минути"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 секунди"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 минути"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "За уредот"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Пристапност"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Сметки"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Секогаш вклучен"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Управител со апликацијата"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Апликации"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Резервна копија и ресетирање"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Батерија"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Конекции"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Податоци"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Роаминг за податоци"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Датум"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Датум и време"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Избриши"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Опции за програмери"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Уред"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Измени"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Режим за летало"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Фонт"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Дома"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Лупа"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Пропуштени настани"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Мобилни мрежи"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Исклучено"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Вклучено"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Лозинката содржи неправилни знаци."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Сочувај"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Вр.за гас.екр."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Јачина на сигналот"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Говор"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Брзина на говор"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Меморија"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Системски"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Допрете за вметнување."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Исклучи"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Користи движења"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Назад"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Откажи"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Откажи"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Продолжи"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Исклучи"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Прекини врска"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Вклучи"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Ресетирај"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Запри"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Деинсталирај"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Испразни кеш"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Основни апликации"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Екран"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Форматирај"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Јазик и внесување"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Заклучување на екранот"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Персонализација"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Приват. и безбедност"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Ресетирај"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Звук"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Време"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Поврзување Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Вид"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Мобилни податоци"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Екрански читач (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Поставувања"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Активирање..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Готово"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Формат"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Да"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Достигнат е максималниот број знаци."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Обидете се повторно."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Når Skjermleser er aktivert, får du taletilbakemelding av telefonen. Skjermleser forteller deg for eksempel hva du kan samhandle med på hvert skjermbilde. Trykk på elementer for å velge dem og høre hva de er, og trykk raskt to ganger på elementer for å utføre den relaterte handlingen."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Les opp brukstips"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Tilbakemelding med lyd"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrasjonstilbakemelding"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Les alltid opp tastaturinndata"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Tilbakemelding fra tastatur"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Annen tilbakemelding"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Les opp varsler mens skjermen er av."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Velg hvilken informasjon som skal leses opp fra indikatorene som vises på statuslinjen, for eksempel klokkeslettet og datoen, enhetens signalstyrke, Wi-Fi- og Bluetooth-tilkoblinger og batteristrømmen, når du trykker raskt tre ganger på skjermen med to fingre."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Angi at taletilbakemeldingen skal variere tonehøyden mens du bruker tastaturet til å angi tekst."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Statuslinjeinformasjon"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksporter"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Lukk"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Bakgrunn"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Internettdeling"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "AVBRYT"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "FULLFØRT"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Støttes ikke."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Aktiv. beveg."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Dra glidebryteren for å angi talehastigheten."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importer"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutter"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekunder"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minutt"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutter"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekunder"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutter"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Om enheten"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Tilgjengelighet"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Kontoer"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Alltid på"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Appstyring"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Apper"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Sikkerhetskopier og nullstill"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batteri"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Tilkoblinger"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dataroaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dato"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dato og tid"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Slett"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Utviklerinnstillinger"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Enhet"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Rediger"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flymodus"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Skrift"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Hjem"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Forstørrelse"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Tapte hendelser"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilnett"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Av"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "På"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Passord inneholder ugyldig tegn."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Lagre"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "T.avbr. skj."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signalstyrke"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Tale"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Talehastighet"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Trykk for å sette inn."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Deaktiver"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Bruk bevegelse"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Tilbake"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Avbryt"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Fortsett"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Deaktiver"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Koble fra"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aktiver"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Nullstill"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stopp"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Avinstaller"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Tøm mellomlager"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standardapper"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Skjerm"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Språk og inndata"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Låseskjerm"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalisering"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Personv. og sikkerhet"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Nullstill"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Lyd"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Tid"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen-tilkobling"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Syn"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobildata"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Skjermleser (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Innstillinger"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Åpner..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Utført"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ja"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maksimalt antall tegn er nådd."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Prøv på nytt."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Terwijl Schermlezer is ingeschakeld, geeft uw telefoon gesproken feedback. Schermlezer vertelt u voor elk scherm bijvoorbeeld waar interactie mogelijk is. Tik op items om deze te selecteren en te horen waarvoor ze dienen en tik twee keer op items om de samenhangende actie uit te voeren."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Hints voor gebr. voorlezen"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Geluidfeedback"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Feedback trilsignaal"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Toetsenbordinvoer altijd voorlezen"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Feedback toetsenbord"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Overige feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Meldingen voorlezen terwijl het scherm uit is."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Selecteer welke informatie van statusbalkindicatoren wordt voorgelezen wanneer u met twee vingers drie keer op het scherm tikt, zoals de tijd en datum, de signaalsterkte van het apparaat, Wi-Fi- en Bluetooth-verbindingen en batterijvoeding."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Stel de gesproken feedback in op het variëren van toonhoogte terwijl het toetsenbord wordt gebruikt om tekst in te voeren."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Statusbalkgegevens"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exporteren"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Sluiten"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Achtergrond"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANNULEREN"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "GEREED"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Niet ondersteund."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Beweging aan"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Sleep de schuifregelaar om de spreeksnelheid in te stellen."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importeren"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuten"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 seconden"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuten"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 seconden"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuten"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Toestel-info"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Toegankelijkheid"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Accounts"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Altijd aan"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Applicatiebeheer"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Apps"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Back-up maken en terugzetten"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batterij"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Verbindingen"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Gegevens"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum en tijd"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Verwijderen"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Ontwikkelaarsopties"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Apparaat"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Bewerken"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Vliegtuigstand"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Lettertype"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Privé"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Vergrootglas"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Gemiste gebeurtenissen"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobiele netwerken"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Uit"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Aan"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Wachtwoord bevat ongeldig teken."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Opslaan"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Schermtime-out"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signaalsterkte"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Spraak"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Spraaksnelheid"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Opslag"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Systeem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tik om in te voegen."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Uitschakelen"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Beweging gebruiken"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Vorige"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Annuleer"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Annuleren"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Doorgaan"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Uitzetten"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Verbreek verbinding"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aanzetten"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Reset"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Verwijderen"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Cache legen"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standaardapplicaties"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Display"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Indeling"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Taal en invoer"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Vergrendelscherm"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Aanpassen"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacy en beveiliging"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Resetten"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Geluid"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Tijd"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Verbinden met Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Zicht"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobiele gegevens"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Schermlezer (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Instellingen"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Laden..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Gereed"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ja"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maximumaantal tekens bereikt."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Probeer het opnieuw."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Gdy Czytnik ekranu jest włączony, telefon emituje komunikaty głosowe. Funkcja Czytnik ekranu powie na przykład, jakimi elementami można sterować na poszczególnych ekranach. Dotknij elementów, aby je wybrać i usłyszeć ich opis, lub dotknij dwukrotnie, aby wykonać związane z nimi akcje."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Czytaj podpowiedzi użycia"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Dźwięk klawiszy"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Wibracja"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Zawsze odczytuj tekst wprowadzany z klawiatury"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Monit klawiatury"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Inne opcje monitów"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Odczytuj powiadomienia, gdy ekran jest wyłączony."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Wybierz, które informacje ze wskaźników widocznych na pasku stanu będą odczytywane po trzykrotnym dotknięciu ekranu dwoma palcami, na przykład godzina i data, siła sygnału urządzenia, połączenia Wi-Fi i Bluetooth czy poziom naładowania baterii."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Ustaw różną wysokość tonu podczas wprowadzania tekstu za pomocą klawiatury."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informacje na pasku stanu"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksportuj"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Zamknij"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Tapety"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Udost. poł. internetowego"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANULUJ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "GOTOWE"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nieobsługiwane."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Wł. f. ruchu"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Przeciągnij suwak, aby ustawić szybkość mówienia."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importuj"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 min"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sek."
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 min"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 min"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sek."
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 min"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Informacje o urządzeniu"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Dostępność"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Konta"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Zawsze włączone"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Menedżer aplikacji"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikacje"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Kopia zapasowa i zerowanie"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Bateria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Profile trans. danych"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dane"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Roaming danych"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data i godzina"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Usuń"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opcje programisty"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Urządzenie"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Edytuj"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Tryb Offline"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Czcionka"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domowy"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Nieodebrane zdarzenia"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Sieci komórkowe"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Wyłączone"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Włączone"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Hasło zawiera nieprawidłowy znak."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Zapisz"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Limit cz. ekr."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Moc sygnału"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Mowa"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Szybkość mówienia"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Domyślna pamięć"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Dotknij, aby wprowadzić."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Wyłącz"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Użycie ruchu"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Wstecz"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Anuluj"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Anuluj"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Kontynuuj"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Wyłącz"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Rozłącz"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Włącz"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Zeruj"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Odinstaluj"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Czyszczenie pamięci podręcznej"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplikacje domyślne"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Wyświetlacz"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Język i wprowadzanie"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Ekran blokady"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizacja"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Prywatność i bezpiecz."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Wyzeruj"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Dźwięk"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Czas"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Połączenie Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Widoczność"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Dane pakietowe"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Czytnik ekranu (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ustawienia"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Ładuję..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Gotowe"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Tak"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Osiągnięto maksymalną liczbę znaków."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Ponów próbę."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Enquanto o Leitor de tela estiver ativado, seu telefone fornecerá retorno de voz. Por exemplo, o Leitor de tela informará com o que você pode interagir em cada tela. Toque nos itens para selecioná-los e ouvir sua descrição e toque duas vezes nos itens para executar a ação relacionada."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Ler alto as dicas de uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Resposta sonora"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Resposta por vibração"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Sempre ler a entrada no teclado"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Resposta do teclado"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Outras respostas"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Ler as notificações enquanto a tela estiver desligada."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Selecione quais informações dos indicadores exibidos na barra de status serão lidas em voz alta ao tocar três vezes na tela com dois dedos, informações como, a hora e data, intensidade do sinal, conexões Wi-Fi e Bluetooth e carga da bateria."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Define o retorno de voz para variar o tom enquanto utiliza o teclado para inserir texto."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informações da barra status"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Papéis de parede"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Ancoragem"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCELAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "CONCLUÍDO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Não suportado."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Ativar mov."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Arraste o controle deslizante para definir a velocidade da fala."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutos"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundos"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutos"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundos"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutos"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Sobre o dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Acessibilidade"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Contas"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Sempre ligado"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Gerenciador de aplicações"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicações"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Fazer o backup e redefinir"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Bateria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Conexões"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dados"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dados em roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data e hora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Excluir"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opções do desenvolvedor"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Modo Offline"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fonte"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Casa"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventos perdidos"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Redes móveis"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desativado"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Ativado"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "A senha tem um caractere inválido."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Salvar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Deslig. autom."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intensidade do sinal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Fala"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Velocidade da fala"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Armazenamento"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Toque para inserir."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desligar"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilizar movimento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Voltar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desativar"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desconectar"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Ativar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Zerar"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Parar"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Limpar cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicativos padrão"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Visor"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma e inserção"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Tela de bloqueio"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalização"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacid. e segurança"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Zerar"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Som"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Hora"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Conexão Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visão"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Dados móveis"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Leitor de tela (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Configurações"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Carregando..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "OK"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sim"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Número máximo de caracteres atingido."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Tente novamente."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Quando o Leitor de ecrã está activo, o seu telefone irá fornecer respostas de voz. Por exemplo, o Leitor de ecrã dir-lhe-á quais são os elementos com que pode interagir em cada ecrã. Toque nos itens para os seleccionar e ouvir o que são, e toque duas vezes nos itens para executar a acção relacionada."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Ler alto sugestões de uso"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Retorno do som"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Reacção da vibração"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Ler sempre alto a introdução através do teclado"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Retorno do teclado"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Outro comentário"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Ler alto notificações quando o ecrã está desligado."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Seleccione as informações dos indicadores apresentados na barra de estado que serão lidas em voz alta quando tocar três vezes no ecrã com dois dedos, por exemplo, a data e hora, a potência de sinal do dispositivo, as ligações Wi-Fi e Bluetooth e a carga da bateria."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Defina a resposta de voz para fazer variar a entoação quando utiliza o teclado para introduzir texto."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informações da barra de estado"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportar"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Fechar"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fundos"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Partilha de Internet"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "CANCELAR"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "CONCLUÍDO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Não suportado."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Activar mov."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Arraste o cursor para definir a velocidade da voz."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minutos"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 segundos"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuto"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minutos"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 segundos"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minutos"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Acerca do dispositivo"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Acessibilidade"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Contas"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Sempre ligado"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Gestor de aplicações"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicações"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Cópia de segurança e reposição"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Bateria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Ligações"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dados"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dados em roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Data e hora"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opções de programador"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispositivo"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editar"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Modo de voo"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Fonte"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Pessoal"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Eventos perdidos"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Redes móveis"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Desligado"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Ligado"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "A palavra-passe tem um carácter inválido."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Guardar"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Duraç luz fund"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Potência do sinal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Voz"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Velocidade da fala"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Armazenamento"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistema"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tocar para inserir."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Desligar"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilizar movimento"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Voltar"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Cancelar"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Desligado"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Repor"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Parar"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Desinstalar"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Limpar cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicações padrão"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Visor e luz"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formato"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Idioma e introdução"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Ecrã bloqueado"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalização"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privacidade e segurança"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Repor"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Som"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Hora"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Visão"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Dados móveis"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Leitor de ecrã (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Definições"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "A carregar..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Concluído"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Form."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Sim"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Número máximo de caracteres atingido."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Tente novamente."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Atunci când Cititor de ecran este activat, telefonul va oferi feedback vocal. De exemplu, Cititor de ecran vă va indica elementele cu care puteți interacționa de pe fiecare ecran. Atingeți elemente pentru a le selecta și a auzi ce reprezintă și atingeți-le de două ori pentru a efectua acțiunea asociată."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Citire sfaturi de utiliz."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Feedback sonor"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Feedback prin vibrație"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Se citesc întotdeauna elementele introduse de la tastatură"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Feedback pentru tastatură"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Alt tip de feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Citiți notificările în timp ce ecranul este oprit."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Selectați informațiile de pe indicatorii afișați pe bara de stare care vor fi citite atunci când atingeți de trei ori ecranul folosind două degete, de exemplu, ora și data, puterea semnalului, conexiunile Wi-Fi și Bluetooth și energia bateriei dispozitivului."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Setați modularea înălțimii feedbackului vocal în timp ce se utilizează tastatura pentru a introduce text."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informații bară de stare"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportați"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Închide"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fundaluri"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ANULARE"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "EFECTUAT"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Neacceptat"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Activ. mișc."
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Glisați cursorul pentru a seta rata de vorbire."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minute"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 secunde"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minute"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 secunde"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minute"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Despre dispozitiv"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Accesibilitate"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Conturi"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Întotdeauna pornit"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Manager de aplicații"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplicații"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Creare copii de rezervă și reset."
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Baterie"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Conexiuni"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Date"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Roaming date"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dată"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dată și oră"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Ștergere"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Opțiuni dezvoltator"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Dispozitiv"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Editare"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Mod Avion"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Font"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Acasă"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupă"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Evenimente pierdute"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Rețele mobile"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Oprit"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Pornit"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Parola conține caractere nevalide."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Salvare"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Expirare ecran"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Putere semnal"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Vorbire"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Rată vorbire"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Stocare"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Atingeți pentru a insera."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Închidere"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Utilizare mișcare"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Înapoi"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Anulare"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Anulare"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Continuare"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Dezactiv."
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Deconectare"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Activare"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Resetare"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Dezinstalare"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Golire cache"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Aplicații implicite"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Afișare"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Setări regionale și text"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Blocare ecran"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizare"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Confid. și securitate"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Reinițializare"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Sunet"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Oră"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Conectare Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vedere"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Date mobile"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Cititor de ecran (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Setări"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Încărcare..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Gata"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Da"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "A fost atins numărul maxim de caractere."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Încercați din nou."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Пока функция “Чтение с экрана” включена, устройство будет предоставлять голосовой отклик. Например, эта функция расскажет вам, с какими объектами можно взаимодействовать на том или ином экране. Одно касание позволяет выбрать элемент и прослушать его описание, два касания — выполнить соответствующее действие."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Чтение подсказок"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Звуковая обратная связь"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Обратная связь"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Всегда озвучивать ввод с клавиатуры"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Отклик клавиатуры"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Другие отзывы"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Чтение уведомлений при отключенном экране."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Выберите, какую информацию, отображаемую в строке состояния, озвучивать после тройного касания экрана двумя пальцами. Это может быть время и дата, мощность сигнала устройства, подключения через Wi-Fi и Bluetooth, а также заряд аккумулятора."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Установить речевые подтверждения для изменения высоты тона во время ввода текста с клавиатуры."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Уведомления в строке информации"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Экспорт"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Закрыть"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Обои"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Модем"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ОТМЕНА"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ГОТОВО"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Не поддерживается."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Вкл. движение"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Для изменения скорости речи перетяните ползунок."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Импорт"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 минут"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 секунд"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 минута"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 минуты"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 секунд"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 минут"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Об устройстве"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Специальные возможности"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Учетные записи"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Всегда вкл."
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Диспетчер приложений"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Приложения"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Архивация и сброс"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Батарея"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Подключения"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Данные"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Данные в роуминге"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Дата"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Дата и время"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Параметры разработчика"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Устройство"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Изменить"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Авиарежим"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Шрифт"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Домашний"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Масштаб"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Пропущенные события"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Мобильные сети"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Выключено"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Включено"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Пароль содержит недопустимый символ."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Соxранить"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Тайм-аут экрана"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Уровень сигнала"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Речь"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Темп речи"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Память"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Система"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Коснитесь, чтобы ввести текст."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Выключить"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Использовать движение"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Назад"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Отмена"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Продолжить"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Выключить"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Отключить"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Включить"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "ОК"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Сброс"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Стоп"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Удалить"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Очистить кэш"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Стандартные приложения"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Дисплей"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Формат"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Язык и ввод"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Экран блокировки"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Мои настройки"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Конфиденц. и безопасн."
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Сброс"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Звук"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Время"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Подключение Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Зрение"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Мобильные данные"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Чтение с экрана (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Настройки"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Загрузка..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Готово"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Формат"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Да"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Достигнуто максимальное число символов."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Повторите попытку"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Kým je zapnutá aplikácia Čítačka obrazovky, telefón bude poskytovať hlasovú odozvu. Funkcia Čítačka obrazovky vám napríklad povie, s čím môžete interagovať na každej obrazovke. Ťuknutím na položky ich môžete vybrať a vypočuť si, na čo slúžia. Dvojitým ťuknutím na položky môžete vykonať ich funkciu."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Prečítať tipy na použitie"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Zvuková odozva"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibračná odozva"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Vždy čítať vstup z klávesnice"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Odozva klávesnice"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Iní odozva"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Čítanie oznámení pri vypnutej obrazovke."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Vyberte, ktoré informácie z indikátorov zobrazených na stavovom riadku sa budú čítať po trojitom ťuknutí na obrazovku dvomi prstami, ako napríklad čas a dátum, intenzita signálu zariadenia, pripojenia Wi-Fi a Bluetooth a energia batérie."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Nastavte zmenu výšky tónu hlasovej odozvy pri používaní klávesnice na zadávanie textu."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informácie na stavovom riadku"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportovať"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Zavrieť"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Tapety"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Zdieľanie pripojenia"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "ZRUŠIŤ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "HOTOVO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nie je podporované."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Povoliť pohyb"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Presunutím posúvača môžete nastaviť rýchlosť reči."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importovať"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minút"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekúnd"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minúta"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minúty"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekúnd"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minút"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Informácie o zariadení"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Zjednodušenie ovládania"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Kontá"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Vždy zapnuté"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Správca aplikácií"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikácie"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Zálohovanie a resetovanie"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batéria"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Pripojenia"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Dáta"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dátový roaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Dátum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Dátum a čas"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Odstrániť"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Vývojárske možnosti"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Zariadenie"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Upraviť"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Letový režim"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Písmo"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domov"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Zmeškané udalosti"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilné siete"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Vyp."
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Zap."
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Heslo obsahuje neplatný znak."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Uložiť"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Čas. lim. obr."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Intenzita signálu"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Reč"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Rýchlosť reči"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Úložisko"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Systém"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Ťuknutím môžete vložiť."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Vypnúť"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Použiť pohyb"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Späť"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Zrušiť"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Zrušiť"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Pokračovať"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Vypnúť"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Odpojiť"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Povoliť"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Vynulovať"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Odinštalovať"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Vymazanie vyrovnávacej pamäte"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Predvolené aplikácie"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Zobrazenie"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Formát"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Jazyk a vstup"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Zamknutá obrazovka"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Prispôsobenie"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Súkromie a zabezpečenie"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Vynulovať"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Zvuk"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Trvanie"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Pripojenie Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Zrak"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilné dáta"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Čítačka obrazovky (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Nastavenia"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Načítava sa..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Hotovo"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Formát."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Áno"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Dosiahol sa maximálny počet znakov."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Skúste to znova."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Ko je omogočen Bralnik zaslona, telefon predvaja glasovne povratne informacije. Bralnik zaslona vam tako na primer na vsakem zaslonu pove, s katerim elementi je možna interakcija. Pritisnite elemente, da jih izberete in slišite njihov opis, nato pa dvakrat pritisnite elemente, da se izvede ustrezno dejanje."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Branje nasvetov za uporabo"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Zvočne povr. informacije"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Povr. inf. z vibriranjem"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Vedno preberi vnos s tipkovnico"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Povratne informacije tipkovnice"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Druge povratne informacije"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Branje obvestil, ko je zaslon izklopljen."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Izberite, kateri podatki indikatorjev, prikazanih v vrstici stanja, bodo prebrani, ko trikrat pritisnete na zaslon z dvema prstoma, na primer ura in datum, moč signala v napravi, povezave Wi-Fi in Bluetooth ter moč baterije."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Nastavite glasovne povratne informacije, da se bo med uporabo tipkovnice za vnos besedila višina tona spreminjala."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Podatki v vrstici stanja"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Izvoz"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Zapri"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Ozadja"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "PREKLIČI"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "KONČANO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Ni podprto."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Omog. gibanje"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Povlecite drsnik, da nastavite hitrost govora."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Uvoz"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minut"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekund"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minuta"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuti"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekund"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minut"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "O napravi"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Dostopnost"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Računi"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Vedno vključeno"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Upravitelj aplikacij"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikacije"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Varnostno kopiranje in ponastavitev"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Baterija"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Povezave"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Podatki"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Podatkovno gostovanje"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum in čas"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Možnosti za razvijalce"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Naprava"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Način letenja"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Pisava"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Domači"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Povečava"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Zamujeni dogodki"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilna omrežja"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Izključeno"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Vključeno"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Geslo vsebuje neveljaven znak."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Shrani"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Čas. om. zas."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Moč signala"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Govor"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Stopnja govora"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Shranjevanje"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Pritisnite za vnos."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Izključi"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Uporabi gibanje"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Nazaj"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Prekliči"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Prekliči"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Nadaljuj"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Onemogoči"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Prekini povezavo"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Omogoči"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "V redu"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Ponastavi"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Odstrani"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Počistite začasni pomnilnik"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Privzete aplikacije"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Zaslon"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Jezik in vnos"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Zaklenjen zaslon"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Prilagajanje"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Zasebnost in varnost"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Ponastavi"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Zvok"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Čas"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Okvara vida"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobilni podatki"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Bralnik zaslona (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Nastavitve"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Nalaganje..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Končano"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Zapis"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Da"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Doseženo je največje dovoljeno število znakov."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Poskusite znova."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Dok je omogućen Čitač ekrana, telefon će pružati eho glasa. Na primer, Čitač ekrana će vam reći sa čime možete da stupite u interakciju na svakom ekranu. Kucnite na stavke da biste ih izabrali i saslušali šta su, a zatim dvaput kucnite na stavke da biste izvršili odgovarajuću radnju."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Pročitaj savete za upot."
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Zvučni eho"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Eho vibracije"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Uvek pročitaj unos sa tastature"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Povratna informacija o tastaturi"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Ostale povratne informacije"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Pročitaj obaveštenja kada je ekran isključen."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Izaberi informacije indikatora prikazane na statusnoj liniji koje će se pročitati kada triput kucneš na ekran koristeći dva prsta, na primer, vreme i datum, jačina signala uređaja, Wi-Fi i Bluetooth veze i energija baterije."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Podesi da se eho glasa menja u visini tona dok se koristi tastatura za unos teksta."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Informacije statusne linije"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Izvezi"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Zatvori"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Tapeti"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Vezivanje"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "OTKAŽI"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "GOTOVO"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Nepodržano."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Omog. pokret"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Prevucite klizač da biste podesili brzinu govora."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Uvezi"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuta"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekundi"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuta"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekundi"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuta"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "O uređaju"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Pristupačnost"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Nalozi"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Uvek uključeno"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Menadžer aplikacija"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Aplikacije"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Bekap i resetovanje"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Baterija"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Veze"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Podaci"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Slanje podataka u romingu"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum i vreme"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Programerske opcije"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Uređaj"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Izmeni"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Profil letenja"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Slova"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Kuća"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Lupa"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Propušteni događaji"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilne mreže"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Isključeno"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Uključeno"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Šifra sadrži nedozvoljeni karakter."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Sačuvaj"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Vr. do isk. ekr."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Jačina signala"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Govor"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Brzina govora"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Memorija"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Kucni za umetanje."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Isključi"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Koristi pokrete"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Nazad"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Otkaži"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Otkaži"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Nastavi"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Onemogući"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Otkači"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Omogući"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Resetuj"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stop"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Deinstaliraj"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Obriši keš memoriju"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Podrazumevane aplikacije"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Ekran"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Jezik i unos"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Zaključan ekran"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personalizacija"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Privatnost i bezbednost"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Resetuj"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Zvuk"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Vreme"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen povezivanje"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Vid"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Podaci za mob. uređaje"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Čitač ekrana (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Podešavanja"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Učitavanje..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Gotovo"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Da"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Dostignut je maksimalan broj karaktera."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Pokušaj ponovo."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "När Skärmläsare är aktiverad ger telefonen röståterkoppling. Exempelvis berättar Skärmläsare vilka objekt du kan använda på varje skärm. Tryck på ett objekt för att markera det och höra vad det heter. Dubbeltryck på det om du vill utföra åtgärden som är kopplad till det."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Läs upp användningstips"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Ljudåterkoppling"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibrationsfeedback"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Läs alltid upp tangentbordsinmatning"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Tangentbordsfeedback"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Annan feedback"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Läs upp aviseringar när skärmen är av."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Välj vilken information från indikatorerna i statusfältet som ska läsas upp när du trycker tre gånger på skärmen med två fingrar, t.ex. tiden och datumet, enhetens signalstyrka, Wi-Fi- och Bluetooth-anslutningar samt batteriladdningen."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Ange att röståterkopplingen ska variera i tonhöjd när du matar in text via tangentbordet."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Information i statusfältet"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Exportera"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Stäng"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Bakgrunder"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Internetdelning"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "AVBRYT"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "KLAR"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Stöds inte."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Akt. rörelse"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Ställ in talhastigheten genom att dra i skjutreglaget."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Importera"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 minuter"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 sekunder"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 minut"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 minuter"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 sekunder"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 minuter"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Om enheten"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Tillgänglighet"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Konton"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Alltid på"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Programhanterare"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Program"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Säkerhetskopiera och återställ"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batteri"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Anslutningar"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Data"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Dataroaming"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Datum"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Datum och tid"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Ta bort"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Utvecklaralternativ"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Enhet"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Redigera"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Flygläge"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Tecken"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Hem"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Förstoring"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Missade händelser"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobilnätverk"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Av"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "På"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Lösenordet innehåller ogiltiga tecken."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Spara"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Skärmtimeout"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signalstyrka"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Tal"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Talhastighet"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Lagring"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "System"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Tryck för infoga."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Stäng av"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Använd rörelse"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Åter"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Avbryt"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Fortsätt"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Inaktivera"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Frånkoppla"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Aktivera"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Återställ"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Stopp"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Avinstallera"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Töm cachen"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Standardprogram"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Display"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Form"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Språk och inmatning"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Låsskärm"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Personifiering"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Sekretess och säkerhet"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Återställ"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ljud"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Tid"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Anslut till Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Syn"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobildata"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Skärmläsare (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Inställningar"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Laddar..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Klar"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ja"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Högsta antal tecken har uppnåtts."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Försök igen."
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Ekran okuyucu etkinken telefonunuz sesli geri bildirim sağlar. Örneğin, Ekran okuyucu size her ekranda nelerle etkileşim kurabileceğinizi söyler. Seçmek ve ne olduklarını duymak için öğelere dokunun ve ilgili işlemi gerçekleştirmek için öğelere çift dokunun."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Kullanm ipuçlrnı sesli oku"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Sesli geribildirim"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Titreşimli geri bildirim"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Klavye girişini her zaman sesli oku"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Klavye geri bildirimi"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Diğer geribildirimler"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Bildirimleri ekran kapalıyken sesli oku."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Ekrana iki parmağınızla üç kez dokunduğunuzda durum çubuğundaki göstergelerden hangi bilgilerin sesli okunacağını seçer. Örneğin; saat ve tarih, cihazın sinyal gücü, Wi-Fi ve Bluetooth bağlantıları ve pil gücü."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Metin girmek için klavyeyi kullanırken sesli geri bildirimi, ses perdesi değişecek şekilde ayarlayın."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Durum çubuğu bilgileri"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Dışarı ver"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Kapat"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Duvar kağıtları"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Bağlantı"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "İPTAL"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "BİTTİ"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Desteklenmiyor."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Hareket etkinleştir"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Konuşma hızını ayarlamak için kaydırıcıyı sürükleyin."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "İçeri aktar"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 dakika"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 saniye"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 dakika"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 dakika"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 saniye"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 dakika"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Cihaz hakkında"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Erişilebilirlik"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Hesaplar"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Her zaman açık"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Uygulama yöneticisi"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Uygulamalar"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Yedekle ve sıfırla"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Pil"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Bağlantılar"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Veri"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Veri dolaşımı"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Tarih"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Tarih ve saat"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Sil"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Geliştirici seçenekleri"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Cihaz"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Düzenle"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Uçuş modu"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Yazı tipi"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Ev"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Büyüteç"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Unutulan etkinlik"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobil ağlar"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Kapalı"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Açık"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Şifre geçersiz karakter içeriyor."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Kaydet"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Ekran zman aşm"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Sinyal kuvveti"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Konuşma"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Konuşma hızı"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Kayıt yeri"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Sistem"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Eklemek için dokunun."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Kapat"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Hareket kullan"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Geri"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "İptal"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Devam"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Devre dışı"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Bağlantıyı kes"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Etkinleştir"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "Tamam"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Sıfırla"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Dur"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Kaldır"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Önbelleği temizle"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Varsayılan uygulamalar"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Ekran"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Biçim"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Dil ve giriş"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Kilit ekranı"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Kişiselleştirme"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Gizlilik ve güvenlik"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Sıfırla"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ses"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Süre"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Görme"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobil verisi"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekran okuyucu (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Ayarlar"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Yükleniyor..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Kaydet"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Biçim"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Evet"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Maksimum karakter sayısına ulaşıldı."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Tekrar dene"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Поки увімкнено «Читання з екрану», пристрій надає голосовий зворотній зв’язок. Наприклад, ця функція підкаже вам, з якими об’єктами можна взаємодіяти на тому чи іншому екрані. Один дотик до об’єкта дозволяє вибрати його та прослухати його опис, а два дотики – виконати відповідну дію."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Читання підказок"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Звуковий зворот. зв’язок"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Зворотній зв'язок"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Завжди читати введення з клавіатури"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Відгук з клавіатури"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Інші відгуки"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Читати сповіщення, коли вимкнено екран."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Виберіть, яку інформацію, що відображується у рядку стану, читати вголос після потрійного торкання екрану двома пальцями. Це може бути час і дата, потужність сигналу пристрою, підключення через Wi-Fi і Bluetooth та заряд акумулятора."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Налаштування голосового зворотного зв'язку для зміни висоти тону під час введення тексту з клавіатури."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Інформація в рядку стану"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Експортувати"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Закрити"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Заставки"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Прив’язка"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "СКАСУВАТИ"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "ГОТОВО"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Не підтримується."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Увімк. рухи"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Для зміни швидкості мовлення перетягніть повзунок."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Імпорт"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 хвилин"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 секунд"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 хвилина"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 хвилини"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 секунд"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 хвилин"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Про пристрій"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Спеціальні можливості"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Облікові записи"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Завжди ввімкнено"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Диспетчер програм"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Програми"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Резервне копіювання та скидання "
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Акумулятор"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "З’єднання"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Дані"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Передача даних у роумінгу"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Дата"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Дата й час"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "Видалити"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Параметри розробника"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Пристрій"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Редагувати"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Без зв’язку"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Шрифт"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Дім"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Лупа"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "Пропущені події"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Мобільні мережі"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "Вимкнено"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Увімкнено"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Пароль містить хибні символи."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Зберегти"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Час очік.екр."
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Потужність сигналу"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Мовлення"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Швидкість мовлення"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Пам'ять"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Система"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Натисніть, щоб вставити."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "Вимкнути"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Використовувати рух"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Назад"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Скасувати"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Скасувати"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Продовжити"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "Вимкнути"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Відключити"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Увімкнути"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Скидання"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "Стоп"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Видалити"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Очищення кешу"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Програми за замовчуванням"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Дисплей"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Форматування"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Мова та введення"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Екран блокування"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Персоналізація"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Конфіденц. та безпека"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Скинути"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Звук"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Час"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Підключення Tizen"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Зір"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Мобільні дані"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Прог. читан. з екр. (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Налаштування"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Завантаження..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Готово"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Фор."
+
+msgid "IDS_ST_SK_YES"
+msgstr "Так"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Досягнуто максимальної кількості символів."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Cпробуйте ще раз"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "Ekranni o‘qish vositasi yoqilganda, telefoningiz ovozli maslahatni taqdim etadi. Misol uchun, Ekranni o‘qish vositasi har bir ekranda aloqa qilishingiz mumkin bo‘lgan narsalar haqida ma’lumot beradi. Elementlarni tanlash va ular nimaligini eshitish uchun ularga teging va tegishli amalni bajarish uchun ularga ikki marta teging."
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "Mas-hat. ovoz chiq. o‘qish"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "Ovozli mulohaza"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "Vibratsiya indikatori"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "Kaviatura kiritishi har doim ovoz chiqarib o‘qilsin"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "Klaviatura indikatori"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "Boshqa indikator"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "Ekran o‘chiqligida bildirishnomalarni ovoz chiqarib o‘qish."
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "Ikkita barmoq bilan ekranga uch marta tekkaningizda, holat satrida indikatorlardagi qanday ma’lumotlar ko‘rsatilishini tanlang, misol uchun, vaqt va sana, qurilma signali kuchi, Wi-Fi va Bluetooth ulanishlari va batareya quvvati."
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "Matn kiritishda klaviaturadan foydalanayotganda, ovozli maslahatni o‘qish intonatsiyasi o‘zgaradigan qilib sozlang."
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "Holat satri ma’lumotlari"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "Eksport qilish"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "Yopish"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "Fon rasmlari"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "Bog‘lash"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "BEKOR QILISH"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "BAJARILDI"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "Qo‘llab-quvvatlanmaydigan."
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "Harakatni yoq"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "Nutq tezligini o‘rnatish uchun slayderni suring."
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "Import qilish"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 daqiqa"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 soniya"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 daqiqa"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 daqiqa"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 soniya"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 daqiqa"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "Qurilma haqida"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "Foydalanish imkoniyati"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "Hisob qaydnomalari"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "Har doim yoq."
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "Ilova boshqaruvi"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "Ilovalar"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "Arxivlash va tashlash"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "Batareya"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "Bluetooth"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "Ulanishlar"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "Ma’lumot"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "Ma’lumotlar roumingi"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "Sana"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "Sana va vaqt"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "O'chirish"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "Ishlab chiqaruvchi opsiyalari"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "Qurilma"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "Tahrirlash"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "Parvoz rejimi"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "Shrift"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "Asosiy"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "Kattalashtiruvchi"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "O‘tkazib yuborilgan hodisalar"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "Mobil tarmoqlar"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "O‘ch."
+
+msgid "IDS_ST_BODY_ON"
+msgstr "Yoq."
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "Parol noto‘g‘ri belgilardan tashkil topgan."
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "Saqlash"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "Ekrn taym-auti"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "Signal quvvati"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "Nutq"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "Nutq tezligi"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "Xotira"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "Tizim"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "Kiritish uchun teging."
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "O‘chiring"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "Harakatdan foydalanish"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "Orqaga"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "Bekor qilish"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "Bekor qilish"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "Davom ettirish"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "O‘chirish"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "Uzish"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "Yoqish"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "OK"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "Tashlash"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "To‘x."
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "Olib tashlash"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "Keshni o‘chirish"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "Birlamchi ilovalar"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "Displey"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "Til va kiritish"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "Bloklash ekrani"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "Moslashtirish"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "Maxfiy. va xavfsizlik"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "Qayta yuklash"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "Ovoz"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "Vaqt"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "Ko‘rish"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "Mobil ma’lumot"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "Ekran o‘qish vos. (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "Parametrlar"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "Yuklanmoqda..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "Bajarildi"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "Format"
+
+msgid "IDS_ST_SK_YES"
+msgstr "Ha"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "Belgilar soni maksimal miqdorga yetdi."
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "Qayta urinib ko‘ring"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "Bluetooth"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "启用屏幕阅读器时,您的手机将提供语音反馈。例如,屏幕阅读器将告诉您可与每个屏幕上的什么项目互动。点击项目可选中并收听项目的内容,此时双击项目即可执行相关的动作。"
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "读出使用提示"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "声音反馈"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "振动反馈"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "总是读出键盘输入"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "键盘反馈"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "其他反馈"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "屏幕关闭时读出通知"
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "选择将在用两根手指在屏幕上点击三下时从状态栏上显示的指示中读出的信息类型,如时间和日期、设备的信号强度、Wi-Fi 和蓝牙连接,以及电量。"
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "将语音反馈设置为使用键盘输入文本时改变音调"
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "状态栏信息"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "导出"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "关闭"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "壁纸"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "网络共享"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "完成"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "不支持。"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "启用动作"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "请拖动控制滑块来设置语速。"
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "导入"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 分钟"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 秒"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 分钟"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 分钟"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 秒"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 分钟"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "关于手机"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "辅助功能"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "帐户"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "始终打开"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "应用程序管理器"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "应用程序"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "备份与重置"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "电池"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "蓝牙"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "连接"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "数据"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "数据漫游"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "日期"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "日期和时间"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "删除"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "开发者选项"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "设备"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "编辑"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "飞行模式"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "字体"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "家庭"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "放大镜"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "错过的事件"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "移动网络"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "关"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "开"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "密码包含无效字符"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "保存"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "画面逾时"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "信号强度"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "语音"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "语速"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "存储"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "系统"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "点击以插入。"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "关闭"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "使用动作"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "返回"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "继续"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "禁用"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "断开连接"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "启用"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "确定"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "重置"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "停止"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "卸载"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "清除缓存"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "默认应用程序"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "显示"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "格式"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "语言和输入"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "锁定屏幕"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "个性化"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "隐私和安全"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "重置"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "声音"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "时间"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen 连接"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "视觉"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "移动数据"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "屏幕读取器(TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "设置"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "载入中…"
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "完成"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "格式化"
+
+msgid "IDS_ST_SK_YES"
+msgstr "是"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "已达到最大字符数"
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "请重试"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "蓝牙"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "螢幕閱讀器已啟用時,您的手機將提供語音回饋。例如,螢幕閱讀器將告訴您可與每個螢幕上的什麼項目互動。輕觸項目以選擇並收聽項目的內容,此時輕觸兩下項目即可執行相關動作。"
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "讀出使用量提示"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "聲音回饋"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "震動回饋"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "總是讀出鍵盤輸入"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "鍵盤回饋"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "其他回饋"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "螢幕關閉時讀出通知。"
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "選擇您以兩指輕觸螢幕三下時將從顯示於狀態列指示中讀出的資訊類型,如時間和日期、裝置的訊號強度、Wi-Fi 與藍牙連接及電池電量等。"
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "將語音回饋設定為使用鍵盤輸入文字時改變音調。"
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "狀態列資訊"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "匯出"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "關閉"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "螢幕牆紙"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "網絡共享"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "完成"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "不支援。"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "啟用動作"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "拖曳滑桿以設定語音速度。"
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "匯入"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 分鐘"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 秒"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 分鐘"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 分鐘"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 秒"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 分鐘"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "關於裝置"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "協助工具"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "帳戶"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "總是開啟"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "應用程式管理員"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "應用程式"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "備份與重設"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "電量"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "藍牙"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "連接"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "數據"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "數據漫遊"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "日期"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "日期和時間"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "刪除"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "開發人員選項"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "裝置"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "編輯"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "飛行模式"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "字體"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "住家"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "放大鏡"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "已錯過的事件"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "流動網絡"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "關"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "開"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "密碼含有無效的字元。"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "儲存"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "螢幕逾時"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "訊號強度"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "語音"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "語速"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "儲存位置"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "系統"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "輕觸以插入。"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "關閉"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "使用動作"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "返回"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "繼續"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "關閉"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "中斷連線"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "啟用"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "確定"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "重設"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "停止"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "解除安裝"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "清除緩存"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "預設應用程式"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "顯示"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "格式"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "語言和輸入"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "鎖定螢幕"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "個人化"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "私隱與安全"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "重設"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "聲音"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "時間"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "視覺"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "流動數據"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "螢幕閱讀器 (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "正在載入..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "完成"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "格式化"
+
+msgid "IDS_ST_SK_YES"
+msgstr "是"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "已達字元數量上限。"
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "請重試"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "藍牙"
--- /dev/null
+msgid "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"
+msgstr "螢幕閱讀器啟用時,您的手機將提供語音回饋。例如,螢幕閱讀器將告訴您每個畫面上可以執行的互動內容。輕觸欲選取的項目並聽取項目內容,接著輕觸兩下項目即可執行相關動作。"
+
+msgid "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB"
+msgstr "讀出使用秘訣"
+
+msgid "IDS_ACCS_MBODY_SOUND_FEEDBACK"
+msgstr "音效回饋"
+
+msgid "IDS_ACCS_MBODY_VIBRATION_FEEDBACK"
+msgstr "震動回饋"
+
+msgid "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS"
+msgstr "永遠讀出鍵盤輸入"
+
+msgid "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS"
+msgstr "鍵盤回饋"
+
+msgid "IDS_ACCS_OPT_OTHER_FEEDBACK_TTS"
+msgstr "其他回饋"
+
+msgid "IDS_ACCS_SBODY_READ_OUT_NOTIFICATIONS_WHILE_THE_SCREEN_IS_OFF"
+msgstr "螢幕關閉時讀出通知。"
+
+msgid "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"
+msgstr "選擇您用雙指輕觸三下螢幕時要讀出狀態列上哪一個顯示燈的資訊,例如時間與日期、裝置訊號強度、Wi-Fi 與藍牙連線、以及電池電力等。"
+
+msgid "IDS_ACCS_SBODY_SET_THE_VOICE_FEEDBACK_TO_VARY_IN_PITCH_WHILE_USING_THE_KEYBOARD_TO_ENTER_TEXT"
+msgstr "將語音回饋設定為使用鍵盤輸入文字時變換音調。"
+
+msgid "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION"
+msgstr "狀態列資訊"
+
+msgid "IDS_CLD_BUTTON_EXPORT"
+msgstr "匯出"
+
+msgid "IDS_CST_BUTTON_CLOSE"
+msgstr "關閉"
+
+msgid "IDS_LCKSCN_BODY_WALLPAPERS"
+msgstr "桌布"
+
+msgid "IDS_MOBILEAP_BODY_TETHERING"
+msgstr "網路共享"
+
+msgid "IDS_MSG_ACBUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_MSG_ACBUTTON_DONE_ABB"
+msgstr "完成"
+
+msgid "IDS_MSGF_POP_UNSUPPORTED"
+msgstr "不支援。"
+
+msgid "IDS_MTTRL_BUTTON_ENABLE_MOTION"
+msgstr "啟用動作"
+
+msgid "IDS_SCR_POP_DRAG_THE_SLIDER_TO_SET_THE_SPEECH_RATE"
+msgstr "拖曳滑桿來設定語音速率。"
+
+msgid "IDS_SMEMO_BUTTON_IMPORT"
+msgstr "匯入"
+
+msgid "IDS_ST_BODY_10_MINUTES"
+msgstr "10 分鐘"
+
+msgid "IDS_ST_BODY_15SEC"
+msgstr "15 秒"
+
+msgid "IDS_ST_BODY_1_MINUTE"
+msgstr "1 分鐘"
+
+msgid "IDS_ST_BODY_2_MINUTES"
+msgstr "2 分鐘"
+
+msgid "IDS_ST_BODY_30SEC"
+msgstr "30 秒"
+
+msgid "IDS_ST_BODY_5_MINUTES"
+msgstr "5 分鐘"
+
+msgid "IDS_ST_BODY_ABOUT_DEVICE"
+msgstr "關於裝置"
+
+msgid "IDS_ST_BODY_ACCESSIBILITY"
+msgstr "協助工具"
+
+msgid "IDS_ST_BODY_ACCOUNTS"
+msgstr "帳號"
+
+msgid "IDS_ST_BODY_ALWAYS_ON"
+msgstr "一律開啟"
+
+msgid "IDS_ST_BODY_APPLICATION_MANAGER"
+msgstr "應用程式管理員"
+
+msgid "IDS_ST_BODY_APPLICATIONS"
+msgstr "應用程式"
+
+msgid "IDS_ST_BODY_BACKUP_AND_RESET"
+msgstr "備份與重設"
+
+msgid "IDS_ST_BODY_BATTERY"
+msgstr "電池"
+
+msgid "IDS_ST_BODY_BLUETOOTH"
+msgstr "藍牙"
+
+msgid "IDS_ST_BODY_CONNECTIONS"
+msgstr "連接"
+
+msgid "IDS_ST_BODY_DATA"
+msgstr "數據"
+
+msgid "IDS_ST_BODY_DATA_ROAMING"
+msgstr "數據漫遊"
+
+msgid "IDS_ST_BODY_DATE"
+msgstr "日期"
+
+msgid "IDS_ST_BODY_DATE_AND_TIME"
+msgstr "日期與時間"
+
+msgid "IDS_ST_BODY_DELETE"
+msgstr "刪除"
+
+msgid "IDS_ST_BODY_DEVELOPER_OPTIONS"
+msgstr "開發人員選項"
+
+msgid "IDS_ST_BODY_DEVICE"
+msgstr "裝置"
+
+msgid "IDS_ST_BODY_EDIT"
+msgstr "編輯"
+
+msgid "IDS_ST_BODY_FLIGHT_MODE"
+msgstr "飛航模式"
+
+msgid "IDS_ST_BODY_FONT"
+msgstr "字型"
+
+msgid "IDS_ST_BODY_HOME"
+msgstr "住家"
+
+msgid "IDS_ST_BODY_MAGNIFIER"
+msgstr "放大鏡"
+
+msgid "IDS_ST_BODY_MISSED_EVENTS"
+msgstr "錯過的事件"
+
+msgid "IDS_ST_BODY_MOBILE_NETWORKS"
+msgstr "行動網路"
+
+msgid "IDS_ST_BODY_NFC"
+msgstr "NFC"
+
+msgid "IDS_ST_BODY_OFF"
+msgstr "關"
+
+msgid "IDS_ST_BODY_ON"
+msgstr "開"
+
+msgid "IDS_ST_BODY_PASSWORD_CONTAINS_INVALID_CHARACTER_ABB"
+msgstr "無效字元。"
+
+msgid "IDS_ST_BODY_SAVE"
+msgstr "儲存"
+
+msgid "IDS_ST_BODY_SCREEN_TIMEOUT_ABB2"
+msgstr "畫面逾時"
+
+msgid "IDS_ST_BODY_SIGNAL_STRENGTH"
+msgstr "訊號強度"
+
+msgid "IDS_ST_BODY_SPEECH"
+msgstr "語音"
+
+msgid "IDS_ST_BODY_SPEECH_RATE"
+msgstr "說話速度"
+
+msgid "IDS_ST_BODY_STORAGE"
+msgstr "儲存位置"
+
+msgid "IDS_ST_BODY_SYSTEM"
+msgstr "系統"
+
+msgid "IDS_ST_BODY_TAP_TO_INSERT"
+msgstr "輕觸以插入。"
+
+msgid "IDS_ST_BODY_TURN_OFF"
+msgstr "關閉"
+
+msgid "IDS_ST_BODY_USE_MOTION"
+msgstr "使用動作"
+
+msgid "IDS_ST_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_ST_BUTTON_BACK"
+msgstr "返回"
+
+msgid "IDS_ST_BUTTON_CANCEL"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CANCEL_ABB"
+msgstr "取消"
+
+msgid "IDS_ST_BUTTON_CONTINUE"
+msgstr "繼續"
+
+msgid "IDS_ST_BUTTON_DISABLE"
+msgstr "停用"
+
+msgid "IDS_ST_BUTTON_DISCONNECT"
+msgstr "中斷連線"
+
+msgid "IDS_ST_BUTTON_ENABLE"
+msgstr "啟用"
+
+msgid "IDS_ST_BUTTON_OK"
+msgstr "確認"
+
+msgid "IDS_ST_BUTTON_RESET"
+msgstr "重設"
+
+msgid "IDS_ST_BUTTON_STOP"
+msgstr "停止"
+
+msgid "IDS_ST_BUTTON_UNINSTALL"
+msgstr "解除安裝"
+
+msgid "IDS_ST_HEADER_CLEAR_CACHE_ABB"
+msgstr "清除快取"
+
+msgid "IDS_ST_HEADER_DEFAULT_APPLICATIONS_ABB"
+msgstr "預設應用程式"
+
+msgid "IDS_ST_HEADER_DISPLAY"
+msgstr "顯示"
+
+msgid "IDS_ST_HEADER_FORMAT_MVERB_ABB"
+msgstr "格式"
+
+msgid "IDS_ST_HEADER_LANGUAGE_AND_INPUT"
+msgstr "語言與輸入"
+
+msgid "IDS_ST_HEADER_LOCK_SCREEN"
+msgstr "鎖定螢幕"
+
+msgid "IDS_ST_HEADER_PERSONALISATION"
+msgstr "個人化"
+
+msgid "IDS_ST_HEADER_PRIVACY_AND_SECURITY_ABB"
+msgstr "隱私權與安全性"
+
+msgid "IDS_ST_HEADER_RESET"
+msgstr "重設"
+
+msgid "IDS_ST_HEADER_SOUND"
+msgstr "音效"
+
+msgid "IDS_ST_HEADER_TIME"
+msgstr "時間"
+
+msgid "IDS_ST_HEADER_TIZEN_CONNECT"
+msgstr "Tizen Connect"
+
+msgid "IDS_ST_HEADER_VISION"
+msgstr "視覺"
+
+msgid "IDS_ST_MBODY_MOBILE_DATA"
+msgstr "行動數據"
+
+msgid "IDS_ST_MBODY_SCREEN_READER_HTTS"
+msgstr "螢幕讀取軟體 (TTS)"
+
+msgid "IDS_ST_OPT_SETTINGS"
+msgstr "設定"
+
+msgid "IDS_ST_POP_LOADING_ING"
+msgstr "正在載入..."
+
+msgid "IDS_ST_SK3_DONE"
+msgstr "完成"
+
+msgid "IDS_ST_SK_FORMAT_ABB"
+msgstr "格式化"
+
+msgid "IDS_ST_SK_YES"
+msgstr "是"
+
+msgid "IDS_ST_TPOP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+msgstr "已達字元數量上限。"
+
+msgid "IDS_ST_TPOP_TRY_AGAIN"
+msgstr "請重試"
+
+msgid "IDS_TPLATFORM_OPT_BLUETOOTH"
+msgstr "藍牙"
--- /dev/null
+#!/bin/sh
+
+TEXT_ERROR='\033[0;31mError: \033[0m'
+TEXT_INFO='\033[0;32mInfo: \033[0m'
+ACCESSIBILITY_SETTING_NAME="org.tizen.accessibility-setting"
+ACCESSIBILITY_SETTING_TESTS_NAME="org.tizen.accessibility-setting-tests"
+
+print_help()
+{
+ echo "usage: $0 [-h] [-b [BUILT_TYPE]] [-i [PACKAGE]] [-t]\n"
+ echo "Tool for easy building, installing and running tests of Accessibility Setting."
+ echo "Requires getopt, gbs and sdb.\n"
+ echo "Options:"
+ echo "-h,--help print this message"
+ echo "-bBUILT_TYPE,--build=BUILT_TYPE build repository using GBS, available types are: 'initial', 'fast', 'no-tests', default value is 'fast'"
+ echo "-iPACKAGE,--install=PACKAGE install package on connected target, available packages are: 'base', 'tests', 'all', default value is 'all'"
+ echo "-t,--run-tests run tests on connected target"
+ echo "-j,--clean-journal vacuum systemd journal on target"
+}
+
+check_if_sdb_exist()
+{
+ which sdb 1>/dev/null
+ if [ "$?" -ne 0 ]; then
+ echo $TEXT_ERROR"Command sdb cannot be found, check if it is installed and its directory is added to PATH"
+ exit 1
+ fi
+}
+
+check_if_target_connected()
+{
+ check_if_sdb_exist
+
+ sdb devices | grep "device " 1>/dev/null
+ if [ "$?" -ne 0 ]; then
+ echo $TEXT_ERROR"Target not connected"
+ exit 1
+ fi
+}
+
+rpm_install()
+{
+ TMP=`mktemp -d`
+
+ check_if_target_connected
+ sdb root on
+ sdb -d shell mount -o remount,rw /
+
+ cp "$@" "$TMP" 2>/dev/null
+
+ sdb push "$TMP" "$TMP"
+ sdb -d shell rpm -Uvh --force "$TMP"/*
+}
+
+rpm_erase()
+{
+ for RPM in $@
+ do
+ sdb -d shell rpm -e "$RPM"
+ done
+}
+
+
+exit_on_error()
+{
+ if [ $? -eq 1 ]; then
+ exit 1
+ fi
+}
+
+RUN_TESTS=0
+CLEAN_JOURNAL=0
+DEFAULT_BUILT_TYPE="fast"
+DEFAULT_INSTALL_TYPE="all"
+VERSION=`awk '/Version/ {print $2}' packaging/org.tizen.accessibility-setting.spec`
+RELEASE=`awk '/Release/ {print $2}' packaging/org.tizen.accessibility-setting.spec`
+
+ARGUMENTS=`getopt -o hb::i::tj -l help,build::,install::,run-tests,clean-journal -n "$0" -- "$@"`
+if [ $? -ne 0 ];
+then
+ print_help;
+fi
+
+eval set -- "$ARGUMENTS"
+
+while [ $# -gt 0 ]; do
+ key="$1"
+
+ case "$key" in
+ --)
+ shift
+ break
+ ;;
+
+ '-h'|'--help')
+ print_help
+ exit 0
+ ;;
+
+ '-b'|'--build')
+ case "$2" in
+ "")
+ BUILD_DIR="$HOME/GBS-ROOT/local/BUILD-ROOTS/scratch.armv7l.0/home/abuild/rpmbuild/BUILD/org.tizen.accessibility-setting-$VERSION"
+ if [ -d "$BUILD_DIR" ]; then
+ BUILD_TYPE="fast"
+ else
+ BUILD_TYPE="initial"
+ fi
+ shift 2
+ ;;
+
+ *)
+ BUILD_TYPE="$2"
+ shift 2
+ ;;
+ esac ;;
+
+ '-i'|'--install')
+ case "$2" in
+ "")
+ INSTALL_PACKAGE="$DEFAULT_INSTALL_TYPE"
+ shift 2
+ ;;
+
+ *)
+ INSTALL_PACKAGE="$2"
+ shift 2
+ ;;
+ esac ;;
+
+ '-t'|'--run-tets')
+ sdb -d shell mount -o remount,rw /
+ sdb push "tests/dbustests.conf" "/etc/dbus-1/system.d/"
+ sdb -d shell killall -HUP dbus-daemon
+ RUN_TESTS=1
+ shift
+ ;;
+
+ '-j'|'--clean-journal')
+ CLEAN_JOURNAL=1
+ shift
+ ;;
+
+ *)
+ echo "Invalid option, use '--help' for available options"
+ exit 1
+ ;;
+ esac
+done
+
+if [ "$BUILD_TYPE" != "" ]; then
+
+ echo $TEXT_INFO"Build type: "$BUILD_TYPE" chosen"
+
+ case "$BUILD_TYPE" in
+ 'initial')
+ gbs build -A armv7l --include-all --ccache --define "jobs 4"
+ exit_on_error
+ ;;
+
+ 'fast')
+ gbs build -A armv7l --include-all --noinit --ccache --keep-packs --define "jobs 4"
+ exit_on_error
+ ;;
+
+ 'no-tests')
+ gbs build -A armv7l --include-all --noinit --ccache --keep-packs --define "_without_tests 1" --define "jobs 4"
+ exit_on_error
+ ;;
+
+ *)
+ echo $TEXT_ERROR"Cannot build, valid options for building are: initial, fast, no-tests"
+ exit 1
+ ;;
+ esac
+fi
+
+if [ "$INSTALL_PACKAGE" != "" ]; then
+ GBS_PATH="$HOME/GBS-ROOT/local/repos/public_mobile/armv7l/RPMS"
+ BASE_PACKAGE_NAME="$GBS_PATH/$ACCESSIBILITY_SETTING_NAME-$VERSION-$RELEASE.armv7l.rpm"
+ TEST_PACKAGE_NAME="$GBS_PATH/$ACCESSIBILITY_SETTING_TESTS_NAME-$VERSION-$RELEASE.armv7l.rpm"
+ TEST_LIB_PACKAGE_NAME="$HOME/GBS-ROOT/local/cache/*/gtest-[0-9]*"
+
+ case "$INSTALL_PACKAGE" in
+ 'base')
+ if [ -f "$BASE_PACKAGE_NAME" ]; then
+ BASE_FILE="$BASE_PACKAGE_NAME"
+ BASE_RPM_NAME="$ACCESSIBILITY_SETTING_NAME"
+ else
+ echo $TEXT_ERROR"Base package not found, check if it was built."
+ exit 1
+ fi
+ ;;
+
+ 'tests')
+ if [ -f "$TEST_PACKAGE_NAME" ]; then
+ TEST_FILE="$TEST_PACKAGE_NAME"
+ LIB_FILE="$TEST_LIB_PACKAGE_NAME"
+ TEST_RPM_NAME="$ACCESSIBILITY_SETTING_TESTS_NAME"
+ else
+ echo $TEXT_ERROR"Test package not found, check if it was built."
+ exit 1
+ fi
+ ;;
+
+ 'all')
+ if [ -f "$BASE_PACKAGE_NAME" -a -f "$TEST_PACKAGE_NAME" ]; then
+ BASE_FILE="$BASE_PACKAGE_NAME"
+ TEST_FILE="$TEST_PACKAGE_NAME"
+ LIB_FILE="$TEST_LIB_PACKAGE_NAME"
+ BASE_RPM_NAME="$ACCESSIBILITY_SETTING_NAME"
+ TEST_RPM_NAME="$ACCESSIBILITY_SETTING_TESTS_NAME"
+ else
+ echo $TEXT_ERROR"Not all packages exist, check if they were built."
+ exit 1
+ fi
+ ;;
+
+ *)
+ echo $TEXT_ERROR"Cannot install, valid options for installing are: base, tests, all"
+ exit 1
+ ;;
+ esac
+
+ check_if_target_connected
+
+ echo $TEXT_INFO"Following packages will be installed: $BASE_FILE $TEST_FILE $LIB_FILE"
+ rpm_erase $BASE_RPM_NAME $TEST_RPM_NAME
+ rpm_install "$BASE_FILE" "$TEST_FILE" $LIB_FILE
+
+fi
+
+if [ $CLEAN_JOURNAL -eq 1 ]; then
+ check_if_target_connected
+ sdb root on
+ sdb shell 'journalctl --vacuum-size=1K'
+fi
+
+if [ $RUN_TESTS -eq 1 ]; then
+ check_if_target_connected
+
+ echo $TEXT_INFO"Setting vconf keys..."
+ dir="$(dirname "$0")"
+ "$dir"/utils/setVconfKeys.sh "accessibilityTests/"
+
+ sdb root on
+ sdb shell '
+ DATE=`date "+%F %X"`
+ TMPFILE=`mktemp`
+ FAILED_BINARIES_COUNT=0
+ for i in /usr/apps/org.tizen.accessibility-setting-tests/no-ui-scenarios/*
+ do
+ TEST_COUNT=$((TEST_COUNT+1))
+ $i --gtest_color=yes | tee -a $TMPFILE
+ if [ ${PIPESTATUS[0]} -ne 0 ]
+ then
+ FAILED_BINARIES_COUNT=$((FAILED_BINARIES_COUNT+1))
+ fi
+
+ done
+ TOTAL=`cat $TMPFILE | grep "\[ RUN \]" | wc -l`
+ FAILED=`cat $TMPFILE | grep "\[ FAILED \]" | wc -l`
+ FAILED=$((FAILED-FAILED_BINARIES_COUNT*2))
+ PASSED=`cat $TMPFILE | grep "\[ OK \]" | wc -l`
+ rm $TMPFILE
+ echo "----------------------------"
+ echo -e "\033[0;33mTOTAL \\t---> \\t $TOTAL\033[0m"
+ echo -e "\033[0;31mFAILED \\t---> \\t $FAILED\033[0m"
+ echo -e "\033[0;32mPASSED \\t---> \\t $PASSED\033[0m"
+ echo "----------------------------"
+ echo "Tests with Graphical User Interface"
+ UI_PID=`app_launcher -s org.tizen.accessibility-setting-tests | sed "s/^.*pid \= \([[:digit:]]*\).*$/\1/"`
+ journalctl --since "$DATE" -f | grep accessibility-setting-tests &
+ while kill -0 $UI_PID 2> /dev/null
+ do
+ sleep 1
+ done
+ '
+fi
--- /dev/null
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Michal Pawluk <m.pawluk@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define SELECTOR_ITEM_COUNT 5
+#define SELECTOR_ITEM_HEIGHT 65
+
+#define TXT_STYLE_SWITCH "style,switch"
+#define TXT_STYLE_VALUE "style,value"
+#define TXT_STYLE_RANGE "style,range"
+#define TXT_STYLE_DESC "style,desc"
+
+#define GRP_SET_VALUE_NUMERIC "set-value-numeric"
+#define GRP_SET_VALUE_NUMERIC_SWITCH "set-value-numeric-switch"
+#define GRP_SET_VALUE_RADIOS "set-value-radios"
+#define GRP_SET_VALUE_SWITCHES "set-value-switches"
+#define GRP_SET_VALUE_LIST_SWITCH "set-value-list-switch"
+#define GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH "set-value-update-accessories-switch"
+#define PRT_SET_VALUE_BG "set-value-bg"
+#define PRT_SET_VALUE_SWITCH_BG "set-value-switch-bg"
+#define PRT_SET_VALUE_SWITCH "set-value-switch"
+#define PRT_SET_VALUE_SWITCH_LABEL "set-value-switch-label"
+#define PRT_SET_VALUE_VALUE "set-value-value"
+#define PRT_SET_VALUE_SEP_1 "set-value-sep-1"
+#define PRT_SET_VALUE_SEP_2 "set-value-sep-2"
+#define PRT_SET_VALUE_SEP_3 "set-value-sep-3"
+#define PRT_SET_VALUE_SELECTOR "set-value-selector"
+#define PRT_SET_VALUE_HIGHLIGHT "set-value-highlight"
+#define PRT_SET_VALUE_RANGE "set-value-range"
+#define PRT_SET_VALUE_DESC "set-value-desc"
+#define PRT_SET_VALUE_LIST "set-value-list"
+#define PRT_SET_VALUE_ENTRY "set-value-entry"
+
+styles {
+ style {
+ name: TXT_STYLE_SWITCH;
+ base: "font=BreezeSans:style=medium font_size=35 color=#000000 wrap=mixed align=left valign=top";
+ }
+ style {
+ name: TXT_STYLE_VALUE;
+ base: "font=BreezeSans:style=bold font_size=35 color=#000000 wrap=mixed align=center valign=top";
+ }
+ style {
+ name: TXT_STYLE_RANGE;
+ base: "font=BreezeSans:style=medium font_size=31 color=#404040 wrap=mixed align=center valign=top";
+ }
+ style {
+ name: TXT_STYLE_DESC;
+ base: "font=BreezeSans:style=medium font_size=29 color=#404040 wrap=mixed align=left valign=top";
+ }
+}
+
+collections {
+ base_scale: 1.8;
+
+ group {
+ name: GRP_SET_VALUE_NUMERIC;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_VALUE;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 0.0;
+ rel2.relative: 0.95 0.1;
+ text.style: TXT_STYLE_VALUE;
+ text.text: "";
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_1;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_VALUE;
+ rel2.relative: 0.95 1.0;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SELECTOR;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SEP_1;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_SEP_1;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ align: 0 0;
+ min: 0 SELECTOR_ITEM_HEIGHT*SELECTOR_ITEM_COUNT;
+ max: -1 SELECTOR_ITEM_HEIGHT*SELECTOR_ITEM_COUNT;
+ fixed: 0 1;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_HIGHLIGHT;
+ type: RECT;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.4;
+ rel1.to: PRT_SET_VALUE_SELECTOR;
+ rel2.relative: 1.0 0.6;
+ rel2.to: PRT_SET_VALUE_SELECTOR;
+ color: 127 127 127 32;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_2;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SELECTOR;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_SELECTOR;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_RANGE;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SEP_2;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_SEP_2;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ text.style: TXT_STYLE_RANGE;
+ text.text: "";
+ align: 0 0;
+ fixed: 0 1;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_DESC;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.00 1.0;
+ rel1.to: PRT_SET_VALUE_RANGE;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_RANGE;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ text.style: TXT_STYLE_DESC;
+ text.text: "Description text";
+ text.align: 0.0 0.0;
+ }
+ }
+ }
+ }
+
+ group {
+ name: GRP_SET_VALUE_NUMERIC_SWITCH;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0;
+ rel2.relative: 1.0 0;
+ min: 0 180;
+ color: 224 224 224 255;
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.9 0.5;
+ rel2.relative: 0.9 1.0;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH_LABEL;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.1 0.5;
+ rel2.relative: 0.5 1.0;
+ text.style: TXT_STYLE_SWITCH;
+ text.text: "";
+ text.align: 0.0 0.5;
+ }
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_1;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SWITCH;
+ rel2.relative: 1.0 0.0;
+ rel2.to_x: PRT_SET_VALUE_SWITCH;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ visible: 0;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_VALUE;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_SEP_1;
+ rel2.relative: 0.95 1.5;
+ min: 0 100;
+ rel2.to: PRT_SET_VALUE_SWITCH_BG;
+ text.style: TXT_STYLE_VALUE;
+ text.text: "";
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_2;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_VALUE;
+ rel2.relative: 0.95 0.0;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SELECTOR;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SEP_2;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_SEP_2;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ align: 0 0;
+ min: 0 SELECTOR_ITEM_HEIGHT*SELECTOR_ITEM_COUNT;
+ max: -1 SELECTOR_ITEM_HEIGHT*SELECTOR_ITEM_COUNT;
+ fixed: 0 1;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_HIGHLIGHT;
+ type: RECT;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.4;
+ rel1.to: PRT_SET_VALUE_SELECTOR;
+ rel2.relative: 1.0 0.6;
+ rel2.to: PRT_SET_VALUE_SELECTOR;
+ color: 127 127 127 32;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_3;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SELECTOR;
+ rel2.relative: 1.0 0.0;
+ rel2.to_x: PRT_SET_VALUE_SELECTOR;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_RANGE;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SEP_3;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_SEP_3;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ text.style: TXT_STYLE_RANGE;
+ text.text: "";
+ align: 0 0;
+ fixed: 0 1;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_DESC;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.00 1.0;
+ rel1.to: PRT_SET_VALUE_RANGE;
+ rel2.relative: 1.0 1.0;
+ rel2.to_x: PRT_SET_VALUE_RANGE;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ text.style: TXT_STYLE_DESC;
+ text.text: "Description text";
+ text.align: 0.0 0.0;
+ }
+ }
+ }
+ }
+
+ group {
+ name: GRP_SET_VALUE_RADIOS;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SELECTOR;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.03;
+ rel2.relative: 1.0 1.0;
+ }
+ }
+ }
+ }
+
+ group {
+ name: GRP_SET_VALUE_SWITCHES;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_LIST;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ }
+ }
+ }
+ }
+
+ group {
+ name: GRP_SET_VALUE_LIST_SWITCH;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0;
+ rel2.relative: 1.0 0;
+ min: 0 180;
+ color: 224 224 224 255;
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.9 0.5;
+ rel2.relative: 0.9 1.0;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SWITCH_LABEL;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.1 0.5;
+ rel2.relative: 0.5 1.0;
+ text.style: TXT_STYLE_SWITCH;
+ text.text: "";
+ text.align: 0.0 0.5;
+ }
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_SEP_1;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to: PRT_SET_VALUE_SWITCH;
+ rel2.relative: 1.0 0.0;
+ rel2.to_x: PRT_SET_VALUE_SWITCH;
+ rel2.to_y: PRT_SET_VALUE_BG;
+ visible: 0;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_DESC;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_SEP_1;
+ rel2.relative: 0.95 1.5;
+ min: 0 100;
+ rel2.to: PRT_SET_VALUE_SWITCH_BG;
+ text.style: TXT_STYLE_DESC;
+ text.text: "Description text";
+ text.align: 0.0 0.5;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_LIST;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_DESC;
+ rel2.relative: 1.0 1.0;
+ rel2.to: PRT_SET_VALUE_BG;
+ }
+ }
+ }
+ }
+
+ group {
+ name: GRP_SET_VALUE_UPDATE_ACCESSORIES_SWITCH;
+ parts {
+ part {
+ name: PRT_SET_VALUE_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_DESC;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.offset: 40 5;
+ rel1.to: PRT_SET_VALUE_BG;
+ text.style: TXT_STYLE_DESC;
+ text.align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_ENTRY;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.offset: 40 150;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel2.relative: 1.0 0.0;
+ rel2.to: PRT_SET_VALUE_BG;
+ }
+ }
+
+ part {
+ name: PRT_SET_VALUE_LIST;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to_x: PRT_SET_VALUE_BG;
+ rel1.to_y: PRT_SET_VALUE_ENTRY;
+ rel2.relative: 1.0 1.0;
+ rel2.to: PRT_SET_VALUE_BG;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Michal Pawluk <m.pawluk@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define TXT_STYLE_LABEL "style,switch"
+
+#define GRP_ACCESSORY_POPUP "accessory_popup"
+#define PRT_ACCESSORY_POPUP_BG "accessory_popup_bg"
+#define PRT_ACCESSORY_POPUP_LABEL "accessory_popup_label"
+#define PRT_ACCESSORY_POPUP_ENTRY "accessory_popup_entry"
+
+styles {
+ style {
+ name: TXT_STYLE_LABEL;
+ base: "font=BreezeSans:style=medium font_size=31 color=#404040 wrap=mixed align=left valign=top";
+ }
+}
+
+collections {
+ base_scale: 1.8;
+
+ group {
+ name: GRP_ACCESSORY_POPUP;
+ parts {
+ part {
+ name: PRT_ACCESSORY_POPUP_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ min: 0 150;
+ max: -1 150;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_ACCESSORY_POPUP_LABEL;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.1 0.0;
+ rel1.to: PRT_ACCESSORY_POPUP_BG;
+ rel2.relative: 1.0 0.5;
+ rel2.to: PRT_ACCESSORY_POPUP_BG;
+ text.style: TXT_STYLE_LABEL;
+ text.text: "";
+ text.align: 0.0 0.0;
+ }
+ }
+
+ part {
+ name: PRT_ACCESSORY_POPUP_ENTRY;
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.1 0.5;
+ rel1.to: PRT_ACCESSORY_POPUP_BG;
+ rel2.relative: 1.0 1.0;
+ rel2.to: PRT_ACCESSORY_POPUP_BG;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Michal Pawluk <m.pawluk@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define TXT_STYLE_LABEL "style,switch"
+
+#define GRP_ACCESSORY "accessory"
+#define PRT_ACCESSORY_BG "accessory_bg"
+#define PRT_ACCESSORY_LABEL "accessory_label"
+
+styles {
+ style {
+ name: TXT_STYLE_LABEL;
+ base: "font=BreezeSans:style=medium font_size=31 color=#404040 wrap=mixed align=left valign=top";
+ }
+}
+
+collections {
+ base_scale: 1.8;
+
+ group {
+ name: GRP_ACCESSORY;
+ parts {
+ part {
+ name: PRT_ACCESSORY_BG;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 1.0;
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: PRT_ACCESSORY_LABEL;
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ rel1.relative: 0.05 0.0;
+ rel2.relative: 0.95 1.0;
+ text.style: TXT_STYLE_LABEL;
+ text.text: "";
+ text.align: 0.0 0.0;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+collections {
+ #define POPUP_TEXT_SLIDER_BG_MIN_INC 0 42
+ #define POPUP_TEXT_SLIDER_PADDING_SIZE_INC 47 27
+ base_scale: 3;
+ group { name: "gl_custom_item";
+ styles{
+ style { name: "text_style";
+ base: "color=#FF0000FF font=Tizen:style=Regular font_size=20 text_class=list_item ellipsis=1.0";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "b" "+ font_weight=Bold";
+ tag: "match" "+ color=#0051B5FF";
+ }
+ }
+ parts {
+ part { name: "base";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 120; //GENLIST_ITEM_1LINE_HEIGHT
+ }
+ }
+ part { name: "left_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 24 0;
+ align: 0.0 0.0;
+ rel1 { to: "base"; relative: 0.0 0.0; }
+ rel2 { to: "base"; relative: 0.0 1.0; }
+ }
+ }
+ part { name: "right_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 24 0;
+ align: 1.0 0.0;
+ rel1 { to: "base"; relative: 1.0 0.0; }
+ rel2 { to: "base"; relative: 1.0 1.0; }
+ }
+ }
+ part { name: "top_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 17;
+ align: 0.0 0.0;
+ rel1 { to_x: "left_padding"; to_y: "base"; relative: 1.0 0.0; }
+ rel2 { to_x: "right_padding"; to_y: "base"; relative: 0.0 0.0; }
+ }
+ }
+ part { name: "elm.text";
+ type: SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 41;
+ align: 0.0 0.0;
+ rel1 { to: "top_padding"; relative: 0.0 1.0; }
+ rel2 { to: "top_padding"; relative: 1.0 1.0; }
+ }
+ }
+ part { name: "text_content_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 10;
+ align: 0.0 0.0;
+ rel1 { to: "elm.text"; relative: 0.0 1.0; }
+ rel2 { to: "elm.text"; relative: 1.0 1.0; }
+ }
+ }
+ part {
+ name: "pad_l_t";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ max: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "pad_r_t";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ max: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ fixed: 1 1;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 1.0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ min: POPUP_TEXT_SLIDER_BG_MIN_INC;
+ rel1 {
+ relative: 1.0 0.0;
+ to_y: "pad_r_t";
+ to_x: "pad_l_t";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "pad_r_t";
+ }
+ align: 0.0 1.0;
+ }
+ }
+ part { name: "bottom_padding";
+ type: SPACER;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 24;
+ align: 0.5 1.0;
+ rel1 { to: "base"; relative: 0.0 1.0; }
+ rel2 { to: "base"; relative: 1.0 1.0; }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+/*
+ * setting
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Michal Pawluk <m.pawluk@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+collections {
+
+ base_scale: 2.6;
+
+ #define POPUP_TEXT_SLIDER_VIEW_LAYOUT_MIN_INC 0 144
+ #define POPUP_TEXT_SLIDER_PADDING_SIZE_INC 47 27
+ #define POPUP_TEXT_SLIDER_TEXT_DISCRIPTION_MIN_INC 0 38
+ #define POPUP_TEXT_SLIDER_BG_MIN_INC 0 42
+ #define POPUP_SLIDER_PADDING_LEFT_MIN_INC 10 0
+
+ group { name: "popup_text_slider_view_layout";
+ parts {
+ part {
+ name: "bg";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: POPUP_TEXT_SLIDER_VIEW_LAYOUT_MIN_INC;
+ fixed: 1 0;
+ }
+ }
+ part {
+ name: "pad_l_t";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ max: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "pad_r_t";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ max: POPUP_TEXT_SLIDER_PADDING_SIZE_INC;
+ fixed: 1 1;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ align: 1.0 1.0;
+ }
+ }
+ part {
+ name: "elm.text.description";
+ type: TEXTBLOCK;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ min: POPUP_TEXT_SLIDER_TEXT_DISCRIPTION_MIN_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "pad_l_t";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "pad_r_t";
+ to_y: "pad_l_t";
+ }
+ text {
+ style: "popup_processing_style";
+ min: 0 1;
+ }
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "slider";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ min: POPUP_TEXT_SLIDER_BG_MIN_INC;
+ rel1 {
+ relative: 1.0 0.0;
+ to_y: "pad_r_t";
+ to_x: "pad_l_t";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "pad_r_t";
+ }
+ align: 0.0 1.0;
+ }
+ }
+ }
+ }
+}
+
--- /dev/null
+#define TXT_STYLE_RANGE "style,range"
+#define TXT_STYLE_DESC "style,desc"
+#define TXT_STYLE_STATE "style,state"
+
+styles {
+ style {
+ name: TXT_STYLE_RANGE;
+ base: "font=BreezeSans:style=medium font_size=31 color=#404040 wrap=mixed align=center valign=top";
+ }
+ style {
+ name: TXT_STYLE_DESC;
+ base: "font=BreezeSans:style=medium font_size=35 color=#404040 wrap=mixed align=center valign=top";
+ }
+ style {
+ name: TXT_STYLE_STATE;
+ base: "font=BreezeSans:style=medium font_size=35 color=#404040 wrap=mixed align=left valign=center";
+ }
+}
+
+collections {
+ group { name: "spinner-layout-toggle";
+ parts {
+ part { name: "spinner-background"; type: RECT;
+ description { state: "default";
+ }
+ }
+
+ part {
+ name: "toggle-widget-state";
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ text.style: TXT_STYLE_STATE;
+ rel1.to: "spinner-background";
+ rel1.relative: 0.05 0;
+ rel2.to: "spinner-background";
+ rel2.relative: 0.85 0.10;
+ }
+ }
+
+ part {
+ name: "toggle-widget";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "spinner-background";
+ rel1.relative: 0.85 0;
+ rel2.to: "spinner-background";
+ rel2.relative: 1.0 0.10;
+ }
+ }
+
+ part {
+ name: "separator";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1.to: "spinner-background";
+ rel1.relative: 0.0 0.10;
+ rel2.relative: 1.0 0.10;
+ align: 0 0;
+ min: 0 1;
+ max: -1 1;
+ fixed: 0 1;
+ color: 127 127 127 192;
+ }
+ }
+
+ part {
+ name: "spinner-widget";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "spinner-background";
+ rel1.relative: 0 0.10;
+ rel2.to: "spinner-background";
+ rel2.relative: 1.0 0.25;
+ }
+ }
+
+ part {
+ name: "accepted-range";
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ text.style: TXT_STYLE_RANGE;
+ rel1.to: "spinner-background";
+ rel1.relative: 0 0.25;
+ rel2.to: "spinner-background";
+ rel2.relative: 1.0 0.3;
+ }
+ }
+
+ part {
+ name: "description";
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ text.style: TXT_STYLE_DESC;
+ rel1.to: "spinner-background";
+ rel1.relative: 0.05 0.3;
+ rel2.to: "spinner-background";
+ rel2.relative: 0.95 0.6;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+#define TXT_STYLE_RANGE "style,range"
+#define TXT_STYLE_DESC "style,desc"
+
+styles {
+ style {
+ name: TXT_STYLE_RANGE;
+ base: "font=BreezeSans:style=medium font_size=31 color=#404040 wrap=mixed align=center valign=top";
+ }
+ style {
+ name: TXT_STYLE_DESC;
+ base: "font=BreezeSans:style=medium font_size=35 color=#404040 wrap=mixed align=center valign=top";
+ }
+}
+
+collections {
+ group { name: "spinner-layout";
+ parts {
+ part { name: "spinner-background"; type: RECT;
+ description { state: "default";
+ }
+ }
+ part {
+ name: "spinner-widget";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "spinner-background";
+ rel1.relative: 0 0;
+ rel2.to: "spinner-background";
+ rel2.relative: 1.0 0.15;
+ }
+ }
+
+ part {
+ name: "accepted-range";
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ text.style: TXT_STYLE_RANGE;
+ rel1.to: "spinner-background";
+ rel1.relative: 0 0.15;
+ rel2.to: "spinner-background";
+ rel2.relative: 1.0 0.2;
+ }
+ }
+
+ part {
+ name: "description";
+ type: TEXTBLOCK;
+ description {
+ state: "default" 0.0;
+ text.style: TXT_STYLE_DESC;
+ rel1.to: "spinner-background";
+ rel1.relative: 0.05 0.2;
+ rel2.to: "spinner-background";
+ rel2.relative: 0.95 0.5;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+INCLUDE_DIRECTORIES(. ./service ./ui ./utils ./model ./view ./presenter)
+
+FILE(GLOB SRCS ./*.cpp ./service/*.cpp ./ui/*.cpp ./utils/*.cpp ./model/*.cpp ./view/*.cpp ./presenter/*.cpp)
+
+ADD_LIBRARY(accessibility-setting-obj OBJECT ${SRCS})
+
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-pie" ${pkgs_LIBRARIES})
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AccessibilitySettingLog.hpp"
+#include "AppContext.hpp"
+#include "MainPagePresenter.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+#include "UniversalSwitchSettingsPagePresenter.hpp"
+
+#include <app.h>
+#include <appcore-common.h>
+
+static bool on_app_create(void *priv)
+{
+ elm_app_name_set(PACKAGE_NAME);
+ // Because of lazy initialization in Singleton class
+ // order of below calls of "instance" method is meaningful
+ Singleton<AppContext>::instance();
+ Singleton<NavigationContext>::instance();
+ return true;
+}
+
+static void on_app_terminate(void *priv)
+{}
+
+static void on_app_pause(void *priv)
+{
+ if (Singleton<AppContext>::instance().empty())
+ return;
+
+ auto p = Singleton<AppContext>::instance().back();
+ if (p)
+ p->onAppPause();
+}
+
+static void on_app_resume(void *priv)
+{
+ if (Singleton<AppContext>::instance().empty())
+ return;
+
+ auto p = Singleton<AppContext>::instance().back();
+ if (p)
+ p->onAppResume();
+}
+
+static void on_app_control(app_control_h service, void *priv)
+{
+ char *value = NULL;
+ if (!app_control_get_extra_data(service, "SHOW_US_SETTINGS", &value) && value != NULL && strcmp(value, "1") == 0)
+ Singleton<AppContext>::instance().push(std::make_unique<UniversalSwitchSettingsPagePresenter>());
+ else
+ Singleton<AppContext>::instance().push(std::make_unique<MainPagePresenter>());
+ free(value);
+}
+
+static void _lang_changed(app_event_info_h event_info, void *data)
+{
+ char *lang = NULL;
+ if (app_event_get_language(event_info, &lang) == APP_ERROR_NONE) {
+ DEBUG("Setting - language is changed : %s", lang);
+ elm_language_set(lang);
+ elm_config_all_flush();
+ free(lang);
+ } else {
+ ERROR("Cannot get language from event_info");
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ app_event_handler_h handlers[5] = {
+ NULL,
+ };
+ ui_app_lifecycle_callback_s ops = {.create = on_app_create,
+ .terminate = on_app_terminate,
+ .pause = on_app_pause,
+ .resume = on_app_resume,
+ .app_control = on_app_control};
+
+ ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, NULL, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, NULL, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, _lang_changed, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, NULL, NULL);
+ ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, NULL, NULL);
+
+ return ui_app_main(argc, argv, &ops, nullptr);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AccessibilityLauncherModel.hpp"
+
+#include "Singleton.hpp"
+
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE "db/setting/accessibility/accessibility-launcher"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH "db/setting/accessibility/accessibility-launcher/launch"
+
+AccessibilityLauncherModel::AccessibilityLauncherModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE, false, [this](auto val) {
+ state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_STATE, val);
+ });
+
+ launchedHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, 0, [this](auto val) {
+ bool a = val & 0x1;
+ if (a != accessibilityLaunched_.value())
+ accessibilityLaunched_ = a;
+
+ bool sr = val & 0x2;
+ if (sr != screenReaderLaunched_.value())
+ screenReaderLaunched_ = sr;
+
+ bool us = val & 0x4;
+ if (us != universalSwitchLaunched_.value())
+ universalSwitchLaunched_ = us;
+ });
+
+ auto calculateLauncherState = [this]() {
+ int a = accessibilityLaunched_.value() ? 0x1 : 0x0;
+ int sr = screenReaderLaunched_.value() ? 0x2 : 0x0;
+ int us = universalSwitchLaunched_.value() ? 0x4 : 0x0;
+
+ return us | sr | a;
+ };
+
+ accessibilityLaunched_.attach([this, calculateLauncherState](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, calculateLauncherState());
+ });
+ screenReaderLaunched_.attach([this, calculateLauncherState](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, calculateLauncherState());
+ });
+ universalSwitchLaunched_.attach([this, calculateLauncherState](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_ACCESSIBILITY_LAUNCHER_LAUNCH, calculateLauncherState());
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ACCESSIBILITY_LAUNCHER_MODEL_HPP
+#define ACCESSIBILITY_LAUNCHER_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class AccessibilityLauncherModel
+{
+ public:
+ AccessibilityLauncherModel();
+
+ ObservableProperty<bool> state_;
+ ObservableProperty<bool> accessibilityLaunched_;
+ ObservableProperty<bool> screenReaderLaunched_;
+ ObservableProperty<bool> universalSwitchLaunched_;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle launchedHandle_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AddAccessoriesSwitchesPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+AddAccessoriesSwitchesPageModel::AddAccessoriesSwitchesPageModel()
+{
+ dBusClient_ = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+}
+
+AddAccessoriesSwitchesPageModel::~AddAccessoriesSwitchesPageModel()
+{
+ cancelCaptureSwitch();
+}
+
+void AddAccessoriesSwitchesPageModel::captureSwitch(std::function<void(std::string)> onCapture, std::string providerId)
+{
+ dBusClient_.method<std::string(std::string)>("captureSwitch").timeout(DBus::InfinitiveTimeout).asyncCall([onCapture](DBus::ValueOrError<std::string> msg) {
+ if (msg) {
+ onCapture(std::get<0>(msg));
+ } else {
+ ERROR("Error on function captureSwitch asyncCall");
+ ERROR("failed '%s'", msg.getError().message.c_str());
+ }
+ },
+ providerId);
+}
+
+void AddAccessoriesSwitchesPageModel::cancelCaptureSwitch()
+{
+ auto reply = dBusClient_.method<DBus::ValueOrError<>()>("cancelCaptureSwitch").call();
+ if (!reply) {
+ ERROR("Error on function cancelCaptureSwitch call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
+
+bool AddAccessoriesSwitchesPageModel::isConfigured(const std::string &switchId)
+{
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, ChangeType>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ for (auto &item : std::get<0>(reply))
+ if (std::get<0>(item) == switchId)
+ return true;
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ ASSERT(0, "unable to know that switch is configured");
+ }
+ return false;
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ADD_ACCESSORIES_SWITCHES_PAGE_MODEL_HPP
+#define ADD_ACCESSORIES_SWITCHES_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+#include <chrono>
+
+class AddAccessoriesSwitchesPageModel
+{
+ public:
+ AddAccessoriesSwitchesPageModel();
+ ~AddAccessoriesSwitchesPageModel();
+ void captureSwitch(std::function<void(std::string)> onCapture, std::string providerId);
+ void cancelCaptureSwitch();
+ bool isConfigured(const std::string &switchId);
+
+ private:
+ DBus::DBusClient dBusClient_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AddSwitchPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+AddSwitchPageModel::AddSwitchPageModel()
+{
+ dBusClient_ = DBus::DBusClient(BUS, PATH, IFACE, DBus::ConnectionType::SESSION);
+ synchronizeProviders();
+ dBusClient_.addSignal<void()>(std::string{"switchesConfigurationChanged"}, [this]() {
+ this->switchesConfigurationChanged_ = std::chrono::system_clock::now();
+ });
+}
+
+void AddSwitchPageModel::synchronizeProviders()
+{
+ providers_.clear();
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getAllSwitchProviders").call();
+ if (reply) {
+ for (auto provider : std::get<0>(reply))
+ providers_.push_back(InfoType{std::get<0>(provider), std::get<1>(provider), std::get<2>(provider)});
+ } else {
+ ERROR("Error on function getAllSwitchProviders call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
+
+bool AddSwitchPageModel::areAllSwitchesConfigured(const InfoType &switchProvider)
+{
+ auto configuredSwitches = getAllSwitchConfigurationItems();
+ auto isSwitchConfigured = [&](const InfoType &switchItem) {
+ for (auto &configured : configuredSwitches) {
+ if (switchItem.id == configured.switchId)
+ return true;
+ }
+ return false;
+ };
+ for (auto &aSwitch : getAllSwitchesByProviderId(switchProvider.id)) {
+ if (!isSwitchConfigured(aSwitch))
+ return false;
+ }
+ return true;
+}
+
+const std::vector<InfoType> &AddSwitchPageModel::getProviders()
+{
+ return providers_;
+}
+
+std::vector<InfoType> AddSwitchPageModel::getAllSwitchesByProviderId(const std::string &providerId)
+{
+ std::vector<InfoType> allSwitches;
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>(std::string)>("getAllSwitchesByProviderId").call(providerId);
+ if (reply) {
+ for (auto aSwitch : std::get<0>(reply))
+ allSwitches.push_back(InfoType{std::get<0>(aSwitch), std::get<1>(aSwitch), std::get<2>(aSwitch)});
+ } else {
+ ERROR("Error on function getAllSwitchProviders call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return allSwitches;
+}
+
+std::vector<SwitchConfigurationItem> AddSwitchPageModel::getAllSwitchConfigurationItems()
+{
+ std::vector<SwitchConfigurationItem> configurationItems{};
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, ChangeType>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ for (auto item : std::get<0>(reply))
+ configurationItems.push_back(SwitchConfigurationItem{std::get<0>(item), std::get<1>(item), std::get<2>(item)});
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return configurationItems;
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ADD_SWITCH_PAGE_MODEL_HPP
+#define ADD_SWITCH_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+#include <chrono>
+
+class AddSwitchPageModel
+{
+ public:
+ AddSwitchPageModel();
+ const std::vector<InfoType> &getProviders();
+ bool areAllSwitchesConfigured(const InfoType &switchProvider);
+ ObservableProperty<std::chrono::system_clock::time_point> switchesConfigurationChanged_;
+ std::vector<InfoType> getAllSwitchesByProviderId(const std::string &providerId);
+
+ private:
+ void synchronizeProviders();
+ std::vector<SwitchConfigurationItem> getAllSwitchConfigurationItems();
+
+ DBus::DBusClient dBusClient_;
+ std::vector<InfoType> providers_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoMoveIntervalModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+AutoMoveIntervalModel::AutoMoveIntervalModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE, defaultState_, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE, val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE, defaultValue_, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE, val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_MOVE_INTERVAL_MODEL_HPP_
+#define AUTO_MOVE_INTERVAL_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class AutoMoveIntervalModel
+{
+ public:
+ AutoMoveIntervalModel();
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ const utils::Range<double> range_ = {0.1, 5.0};
+
+ const double step_ = 0.1;
+ const double defaultValue_ = 1.0;
+
+ const bool defaultState_ = false;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoScanModel.hpp"
+
+#include "Singleton.hpp"
+
+AutoScanModel::AutoScanModel()
+{
+ enabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>("db/setting/accessibility/universal-switch/AUTO_SCAN_ENABLED", true, [this](auto val) {
+ this->enabled_ = val;
+ });
+
+ enabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/AUTO_SCAN_ENABLED", val);
+ });
+
+ intervalHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>("db/setting/accessibility/universal-switch/AUTO_SCAN_INTERVAL", 1, [this](auto val) {
+ this->interval_ = val;
+ });
+
+ interval_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/AUTO_SCAN_INTERVAL", val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_SCAN_MODEL_HPP
+#define AUTO_SCAN_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class AutoScanModel
+{
+ public:
+ AutoScanModel();
+ ObservableProperty<bool> enabled_;
+ ObservableProperty<double> interval_;
+
+ const utils::Range<double> range_ = {0.5, 9.9};
+ const double step_ = 0.1;
+
+ private:
+ VConfInterface::CallbackHandle enabledHandle_;
+ VConfInterface::CallbackHandle intervalHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoTapModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+AutoTapModel::AutoTapModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE, defaultState_, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE, val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE, defaultValue_, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE, val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_TAP_MODEL_HPP_
+#define AUTO_TAP_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class AutoTapModel
+{
+ public:
+ AutoTapModel();
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ const utils::Range<double> range_ = {0.5, 5.0};
+
+ const double step_ = 0.1;
+ const double defaultValue_ = 1.0;
+
+ const bool defaultState_ = false;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CameraSwitchesPageModel.hpp"
+
+#include "DBus.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+std::vector<InfoType> CameraSwitchesPageModel::getAllSwitchesByProvider(const std::string &providerId)
+{
+ std::vector<InfoType> allSwitches;
+ auto reply = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION}.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>(std::string)>("getAllSwitchesByProviderId").call(providerId);
+ if (reply) {
+ for (auto aSwitch : std::get<0>(reply))
+ allSwitches.push_back(InfoType{std::get<0>(aSwitch), std::get<1>(aSwitch), std::get<2>(aSwitch)});
+ } else {
+ ERROR("Error on function getAllSwitchesByProviderId call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return allSwitches;
+}
+
+bool CameraSwitchesPageModel::isSwitchConfigured(const std::string &switchId)
+{
+ auto reply = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION}.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ for (auto item : std::get<0>(reply))
+ if (std::get<0>(item) == switchId)
+ return true;
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return false;
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CAMERA_SWITCHES_PAGE_MODEL_HPP
+#define CAMERA_SWITCHES_PAGE_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+class CameraSwitchesPageModel
+{
+ public:
+ std::vector<InfoType> getAllSwitchesByProvider(const std::string &provider);
+ bool isSwitchConfigured(const std::string &switchId);
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CursorColorModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+CursorColorModel::CursorColorModel()
+{
+ vconfHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(
+ VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR,
+ DEFAULT_FEEDBACK_CURSOR_COLOR,
+ [this](auto value) {
+ this->cursorColor_ = Color::fromABGR(value);
+ });
+ cursorColor_.attach([this](auto value) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR, value.toABGRInt());
+ });
+}
+
+std::string CursorColorModel::getColorText(Color color)
+{
+ if (color == Color::RED)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_RED";
+ if (color == Color::ORANGE)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_ORANGE";
+ if (color == Color::YELLOW)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_YELLOW";
+ if (color == Color::GREEN)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GREEN";
+ if (color == Color::BLUE)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_BLUE";
+ if (color == Color::GRAY)
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL_GRAY";
+
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CURSOR_COLOR_MODEL_HPP
+#define CURSOR_COLOR_MODEL_HPP
+
+#include "Geometry.hpp"
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class CursorColorModel
+{
+ public:
+ CursorColorModel();
+ ObservableProperty<Color> cursorColor_;
+ std::string getColorText(Color color);
+
+ private:
+ VConfInterface::CallbackHandle vconfHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ManageMenuOptionsPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+ManageMenuOptionsPageModel::ManageMenuOptionsPageModel()
+{
+ std::vector<std::string> vconfKeys{
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_CONTEXTUAL_MENU},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_GESTURES},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_RECENT_APPS},
+ {VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_BACK}};
+ manageMenuOptionStates_.resize(ManageMenuOptionsCount);
+ vconfHandles_.resize(ManageMenuOptionsCount);
+
+ for (auto i = 0u; i < ManageMenuOptionsCount; ++i) {
+ auto key = vconfKeys[i];
+ vconfHandles_[i] = Singleton<VConfInterface>::instance().registerAndGet<bool>(
+ key,
+ false,
+ [this, i](auto value) {
+ this->manageMenuOptionStates_[i] = value;
+ });
+
+ manageMenuOptionStates_[i].attach([this, key](auto newValue) {
+ Singleton<VConfInterface>::instance().set(key, newValue);
+ });
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MANAGE_MENU_OPTIONS_PAGE_MODEL_HPP
+#define MANAGE_MENU_OPTIONS_PAGE_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class ManageMenuOptionsPageModel
+{
+ public:
+ static const int ManageMenuOptionsCount = 8;
+ ManageMenuOptionsPageModel();
+ std::vector<ObservableProperty<bool>> manageMenuOptionStates_;
+
+ private:
+ std::vector<VConfInterface::CallbackHandle> vconfHandles_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "NumberOfAutoScanLoopsModel.hpp"
+#include "Singleton.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+NumberOfAutoScanLoopsModel::NumberOfAutoScanLoopsModel()
+{
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS, defaultValue_, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS, val);
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NUMBER_OF_AUTO_SCAN_LOOPS_MODEL_HPP_
+#define NUMBER_OF_AUTO_SCAN_LOOPS_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchConstants.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class NumberOfAutoScanLoopsModel
+{
+ public:
+ NumberOfAutoScanLoopsModel();
+ ObservableProperty<int> value_;
+
+ const utils::Range<double> range_ = {RANGE_MIN_SCANS_NUM, RANGE_MAX_SCANS_NUM};
+ const double step_ = STEP_SCANS_NUM;
+ const double defaultValue_ = DEFAULT_AUTO_SCAN_NUMBER;
+
+ private:
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "PauseOnFirstModel.hpp"
+
+PauseOnFirstModel::PauseOnFirstModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>("db/setting/accessibility/universal-switch/PAUSE_ON_FIRST_ELEMENT_ENABLED", false, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/PAUSE_ON_FIRST_ELEMENT_ENABLED", val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>("db/setting/accessibility/universal-switch/PAUSE_ON_FIRST_ELEMENT_TIME", 1, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/PAUSE_ON_FIRST_ELEMENT_TIME", val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef PAUSE_ON_FIRST_MODEL_HPP_
+#define PAUSE_ON_FIRST_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class PauseOnFirstModel
+{
+ public:
+ PauseOnFirstModel();
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ const utils::Range<double> range_ = {0.1, 5.0};
+ const double step_ = 0.1;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "PointScanSpeedModel.hpp"
+#include "Singleton.hpp"
+
+PointScanSpeedModel::PointScanSpeedModel()
+{
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED, DEFAULT_SCAN_PT_SPEED, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED, val);
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef POINT_SCAN_SPEED_MODEL_HPP_
+#define POINT_SCAN_SPEED_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchConstants.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class PointScanSpeedModel
+{
+ public:
+ PointScanSpeedModel();
+ ObservableProperty<int> value_;
+
+ const utils::Range<double> range_ = {RANGE_MIN_SCAN_SPEED, RANGE_MAX_SCAN_SPEED};
+ const double step_ = STEP_SCAN_SPEED;
+ const double defaultValue_ = DEFAULT_SCAN_PT_SPEED;
+
+ private:
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "RemoveSwitchesModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+RemoveSwitchesModel::RemoveSwitchesModel()
+{
+ isUniversalSwitchActiveHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_INTERACTION_SERVICE, false, [this](auto val) {
+ this->isUniversalSwitchActive_ = val;
+ });
+
+ isUniversalSwitchActive_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_INTERACTION_SERVICE, val);
+ });
+}
+
+void RemoveSwitchesModel::removeSwitches(std::vector<std::string> &switchesIds)
+{
+ auto dBusClient_ = DBus::DBusClient(BUS, PATH, IFACE, DBus::ConnectionType::SESSION);
+ for (auto &s : switchesIds) {
+ DEBUG("removing: %s", s.c_str());
+ dBusClient_.method<void(std::string)>("removeSwitchConfigurationItem").call(s);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef REMOVE_SWITCHES_MODEL_HPP
+#define REMOVE_SWITCHES_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class RemoveSwitchesModel
+{
+ public:
+ RemoveSwitchesModel();
+ ObservableProperty<bool> isUniversalSwitchActive_;
+ void removeSwitches(std::vector<std::string> &switchesIds);
+
+ private:
+ VConfInterface::CallbackHandle isUniversalSwitchActiveHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScanDirectionModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+ScanDirectionModel::ScanDirectionModel()
+{
+ vconfHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_VERTICAL,
+ static_cast<int>(DEFAULT_SCAN_DIR),
+ [this](auto value) {
+ this->direction_ = static_cast<ScanDirection>(value);
+ });
+
+ direction_.attach([this](auto value) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_VERTICAL, static_cast<int>(value));
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCAN_DIRECTION_MODEL_HPP
+#define SCAN_DIRECTION_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+class ScanDirectionModel
+{
+ public:
+ ScanDirectionModel();
+ ObservableProperty<ScanDirection> direction_;
+
+ private:
+ VConfInterface::CallbackHandle vconfHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScanMethodModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+ScanMethodModel::ScanMethodModel()
+{
+ vconfHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD,
+ static_cast<int>(DEFAULT_SCAN_METHOD),
+ [this](auto value) {
+ this->method_ = static_cast<ScanMethod>(value);
+ });
+
+ method_.attach([this](auto value) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD, static_cast<int>(value));
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCAN_METHOD_MODEL_HPP
+#define SCAN_METHOD_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+class ScanMethodModel
+{
+ public:
+ ScanMethodModel();
+ ObservableProperty<ScanMethod> method_;
+
+ private:
+ VConfInterface::CallbackHandle vconfHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScreenReaderModel.hpp"
+
+#define VCONFKEY_ACCESSIBILITY_TTS "db/setting/accessibility/tts"
+
+ScreenReaderModel::ScreenReaderModel()
+{
+ screenReaderStateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_ACCESSIBILITY_TTS}, false, [this](auto state) {
+ this->state_ = state;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_ACCESSIBILITY_TTS, val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCREEN_READER_MODEL_HPP
+#define SCREEN_READER_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class ScreenReaderModel
+{
+ public:
+ ScreenReaderModel();
+ ObservableProperty<bool> state_;
+
+ private:
+ VConfInterface::CallbackHandle screenReaderStateHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScreenReaderSettingsModel.hpp"
+#include "TextToSpeech.hpp"
+
+#include <vconf-internal-keys.h>
+
+ScreenReaderSettingsModel::ScreenReaderSettingsModel()
+{
+ speechRate_ = Singleton<TextToSpeech>::instance().getSpeed();
+
+ Singleton<TextToSpeech>::instance().addSpeedChangedCb([this](auto val) {
+ this->speechRate_ = val;
+ });
+
+ speechRateMin_ = Singleton<TextToSpeech>::instance().getSpeedRange().min;
+
+ speechRateMax_ = Singleton<TextToSpeech>::instance().getSpeedRange().max;
+
+ keyboardFeedbackHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_KEYBOARD_FEEDBACK}, false, [this](auto value) {
+ this->keyboardFeedback_ = value;
+ });
+
+ readUsageHintsHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_DESCRIPTION}, false, [this](auto value) {
+ this->readUsageHints_ = value;
+ });
+
+ vibrationFeedbackHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_HAPTIC}, false, [this](auto value) {
+ this->vibrationFeedback_ = value;
+ });
+
+ soundFeedbackHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_SOUND_FEEDBACK}, false, [this](auto value) {
+ this->soundFeedback_ = value;
+ });
+
+ speechRate_.attach([](auto val) {
+ Singleton<TextToSpeech>::instance().setSpeed(val);
+ });
+
+
+ keyboardFeedback_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_KEYBOARD_FEEDBACK, val);
+ });
+
+ readUsageHints_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_DESCRIPTION, val);
+ });
+
+ vibrationFeedback_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_HAPTIC, val);
+ });
+
+ soundFeedback_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_SCREEN_READER_SOUND_FEEDBACK, val);
+ });
+
+}
+
+ScreenReaderSettingsModel::~ScreenReaderSettingsModel()
+{
+ Singleton<TextToSpeech>::instance().clearSpeedChangedCallbacks();
+}
+
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCREEN_READER_SETTINGS_MODEL_HPP
+#define SCREEN_READER_SETTINGS_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class ScreenReaderSettingsModel
+{
+ public:
+ ScreenReaderSettingsModel();
+ ~ScreenReaderSettingsModel();
+
+ size_t speechRateMin_;
+ size_t speechRateMax_;
+ ObservableProperty<size_t> speechRate_;
+ ObservableProperty<bool> keyboardFeedback_;
+ ObservableProperty<bool> readUsageHints_;
+ ObservableProperty<bool> vibrationFeedback_;
+ ObservableProperty<bool> soundFeedback_;
+
+ private:
+ VConfInterface::CallbackHandle keyboardFeedbackHandle_;
+ VConfInterface::CallbackHandle readUsageHintsHandle_;
+ VConfInterface::CallbackHandle vibrationFeedbackHandle_;
+ VConfInterface::CallbackHandle soundFeedbackHandle_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SelectActionPageModel.hpp"
+
+#include "DBus.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+std::vector<InfoType> SelectActionPageModel::getBindableActivityTypes()
+{
+ std::vector<InfoType> bindableActivities{};
+ auto dBusClient = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+ auto reply = dBusClient.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getBindableActivityTypes").call();
+ if (reply) {
+ for (auto activity : std::get<0>(reply))
+ bindableActivities.push_back(InfoType{std::get<0>(activity), std::get<1>(activity), std::get<2>(activity)});
+ } else {
+ ERROR("Error on function getBindableActivityTypes call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return bindableActivities;
+}
+
+void SelectActionPageModel::updateSwitch(const SwitchConfigurationItem &item)
+{
+ auto dBusClient = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+ auto reply = dBusClient.method<DBus::ValueOrError<>(std::string, std::string, std::string)>("updateSwitchConfigurationItem").call(item.switchId, item.userName, item.activityType);
+ if (reply)
+ DEBUG("Switch: %s updated successfully", item.switchId.c_str());
+ else {
+ ERROR("Error on function updateSwitchConfigurationItem call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
+
+void SelectActionPageModel::addSwitch(const SwitchConfigurationItem &item)
+{
+ auto dBusClient = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+ auto reply = dBusClient.method<DBus::ValueOrError<>(std::string, std::string, std::string)>("addSwitchConfigurationItem").call(item.switchId, item.userName, item.activityType);
+ if (reply)
+ DEBUG("Switch: %s added successfully", item.switchId.c_str());
+ else {
+ ERROR("Error on function addSwitchConfigurationItem call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SELECT_ACTION_PAGE_MODEL_HPP
+#define SELECT_ACTION_PAGE_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+class SelectActionPageModel
+{
+ public:
+ std::vector<InfoType> getBindableActivityTypes();
+ void updateSwitch(const SwitchConfigurationItem &item);
+ void addSwitch(const SwitchConfigurationItem &item);
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SingleInteractionIntervalModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+SingleInteractionIntervalModel::SingleInteractionIntervalModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE, defaultState_, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE, val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE, defaultValue_, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE, val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SINGLE_INTERACTION_INTERVAL_HPP_
+#define SINGLE_INTERACTION_INTERVAL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class SingleInteractionIntervalModel
+{
+ public:
+ SingleInteractionIntervalModel();
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ const utils::Range<double> range_ = {0.1, 2.5};
+
+ const double step_ = 0.1;
+ const double defaultValue_ = 1.0;
+
+ const bool defaultState_ = false;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SoundModel.hpp"
+
+SoundModel::SoundModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>("db/setting/accessibility/universal-switch/FEEDBACK_SOUND_ENABLED", false, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_SOUND_ENABLED", val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>("db/setting/accessibility/universal-switch/FEEDBACK_SOUND_VOLUME", 1.0, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_SOUND_VOLUME", val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SOUND_MODEL_HPP
+#define SOUND_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class SoundModel
+{
+ public:
+ SoundModel();
+
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "StatusBarInformationModel.hpp"
+
+#include <vconf-internal-keys.h>
+
+StatusBarInformationModel::StatusBarInformationModel()
+{
+ timeEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_TIME}, false, [this](auto value) {
+ this->timeEnabled_ = value;
+ });
+
+ dateEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_DATE}, false, [this](auto value) {
+ this->dateEnabled_ = value;
+ });
+
+ batteryEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BATTERY}, false, [this](auto value) {
+ this->batteryEnabled_ = value;
+ });
+
+ signalStrenghtEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_SIGNAL_STRENGHT}, false, [this](auto value) {
+ this->signalStrenghtEnabled_ = value;
+ });
+
+ bluetoothEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BLUETOOTH}, false, [this](auto value) {
+ this->bluetoothEnabled_ = value;
+ });
+
+ missedEventsEnabledHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(std::string{VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_MISSED_EVENTS}, false, [this](auto value) {
+ this->missedEventsEnabled_ = value;
+ });
+
+
+ timeEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_TIME, val);
+ });
+
+ dateEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_DATE, val);
+ });
+
+ batteryEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BATTERY, val);
+ });
+
+ signalStrenghtEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_SIGNAL_STRENGHT, val);
+ });
+
+ bluetoothEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_BLUETOOTH, val);
+ });
+
+ missedEventsEnabled_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS_INDICATOR_INFORMATION_MISSED_EVENTS, val);
+ });
+
+}
+
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef STATUS_BAR_INFORMATION_MODEL_HPP
+#define STATUS_BAR_INFORMATION_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+class StatusBarInformationModel
+{
+ public:
+ StatusBarInformationModel();
+
+ ObservableProperty<bool> timeEnabled_;
+ ObservableProperty<bool> dateEnabled_;
+ ObservableProperty<bool> batteryEnabled_;
+ ObservableProperty<bool> signalStrenghtEnabled_;
+ ObservableProperty<bool> bluetoothEnabled_;
+ ObservableProperty<bool> missedEventsEnabled_;
+
+ private:
+ VConfInterface::CallbackHandle timeEnabledHandle_;
+ VConfInterface::CallbackHandle dateEnabledHandle_;
+ VConfInterface::CallbackHandle batteryEnabledHandle_;
+ VConfInterface::CallbackHandle signalStrenghtEnabledHandle_;
+ VConfInterface::CallbackHandle bluetoothEnabledHandle_;
+ VConfInterface::CallbackHandle missedEventsEnabledHandle_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SwitchesPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+SwitchesPageModel::SwitchesPageModel()
+{
+ dBusClient_ = DBus::DBusClient(BUS, PATH, IFACE, DBus::ConnectionType::SESSION);
+ dBusClient_.addSignal<void()>(std::string{"switchesConfigurationChanged"}, [this]() {
+ this->switchesConfigurationChanged_ = std::chrono::system_clock::now();
+ });
+ synchronizeBindableActivities();
+}
+
+std::vector<SwitchConfigurationItem> SwitchesPageModel::getAllSwitchConfigurationItems()
+{
+ std::vector<SwitchConfigurationItem> configurationItems{};
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, ChangeType>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ for (auto item : std::get<0>(reply))
+ configurationItems.push_back(SwitchConfigurationItem{std::get<0>(item), std::get<1>(item), std::get<2>(item)});
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return configurationItems;
+}
+
+std::string SwitchesPageModel::getActivityName(std::string activityType)
+{
+ for (auto activity : bindableActivities_)
+ if (activity.id == activityType)
+ return activity.name;
+ return {};
+}
+
+void SwitchesPageModel::synchronizeBindableActivities()
+{
+ bindableActivities_.clear();
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getBindableActivityTypes").call();
+ if (reply) {
+ for (auto activity : std::get<0>(reply))
+ bindableActivities_.push_back(InfoType{std::get<0>(activity), std::get<1>(activity), std::get<2>(activity)});
+ } else {
+ ERROR("Error on function getBindableActivityTypes call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SWITCHES_PAGE_MODEL_HPP
+#define SWITCHES_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+#include <chrono>
+
+class SwitchesPageModel
+{
+ public:
+ SwitchesPageModel();
+ ObservableProperty<std::chrono::system_clock::time_point> switchesConfigurationChanged_;
+ std::vector<SwitchConfigurationItem> getAllSwitchConfigurationItems();
+ std::string getActivityName(std::string activityType);
+
+ private:
+ void synchronizeBindableActivities();
+ std::vector<InfoType> bindableActivities_;
+ DBus::DBusClient dBusClient_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "TapDurationModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+TapDurationModel::TapDurationModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE, defaultState_, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE, val);
+ });
+
+ valueHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE, defaultValue_, [this](auto val) {
+ this->value_ = val;
+ });
+
+ value_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE, val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TAP_DURATION_MODEL_HPP_
+#define TAP_DURATION_MODEL_HPP_
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class TapDurationModel
+{
+ public:
+ TapDurationModel();
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> value_;
+
+ const utils::Range<double> range_ = {0.5, 5.0};
+
+ const double step_ = 0.1;
+ const double defaultValue_ = 1.0;
+
+ const bool defaultState_ = false;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle valueHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "TextToSpeechModel.hpp"
+#include "Singleton.hpp"
+#include "TextToSpeech.hpp"
+
+TextToSpeechModel::TextToSpeechModel() {
+
+ speechRate_ = Singleton<TextToSpeech>::instance().getSpeed();
+
+ Singleton<TextToSpeech>::instance().addSpeedChangedCb([this](auto val) {
+ this->speechRate_ = val;
+ });
+
+ speechRate_.attach([](auto val) {
+ Singleton<TextToSpeech>::instance().setSpeed(val);
+ });
+
+ auto speedRange = Singleton<TextToSpeech>::instance().getSpeedRange();
+ speechRateMin_ = speedRange.min;
+ speechRateMax_ = speedRange.max;
+}
+
+TextToSpeechModel::~TextToSpeechModel() {
+
+ Singleton<TextToSpeech>::instance().clearSpeedChangedCallbacks();
+
+}
+
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MODEL_TEXT_TO_SPEECH_MODEL_HPP
+#define MODEL_TEXT_TO_SPEECH_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+
+class TextToSpeechModel
+{
+ public:
+ TextToSpeechModel();
+ ~TextToSpeechModel();
+ ObservableProperty<size_t> speechRate_;
+ size_t speechRateMin_;
+ size_t speechRateMax_;
+};
+
+#endif /* MODEL_TEXT_TO_SPEECH_MODEL_HPP */
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UniversalSwitchPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+UniversalSwitchPageModel::UniversalSwitchPageModel()
+{
+ connectionPtr_ = DBus::getDBusConnectionByType(DBus::ConnectionType::SESSION);
+ sentinel_ = Singleton<UniversalSwitchSentinelService>::instance().getSentinel();
+ sentinel_->setConfigurationServiceState(true);
+}
+
+bool UniversalSwitchPageModel::atLeastOneSwitchConfigured()
+{
+ DBus::DBusClient client{BUS, PATH, IFACE, connectionPtr_};
+ auto reply = client.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, int32_t>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ return std::get<0>(reply).size() > 0;
+ }
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ return false;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_PAGE_MODEL_HPP
+#define UNIVERSAL_SWITCH_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchSentinel.hpp"
+#include "VConf.hpp"
+
+class UniversalSwitchPageModel
+{
+ public:
+ UniversalSwitchPageModel();
+ bool atLeastOneSwitchConfigured();
+ UniversalSwitchSentinel sentinel_;
+
+ private:
+ DBus::DBusWrapper::ConnectionPtr connectionPtr_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UniversalSwitchSettingsPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+UniversalSwitchSettingsPageModel::UniversalSwitchSettingsPageModel()
+{
+ synchronizePropertyWithVConf(autoTapKeyboardState_, VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE, DEFAULT_AUTO_TAP_KEYBOARD_STATE);
+
+ sentinel_ = Singleton<UniversalSwitchSentinelService>::instance().getSentinel();
+ sentinel_->setConfigurationServiceState(true);
+ sentinel_->configurationServiceState_.attach([this](auto val) {
+ this->initDbusClient();
+ });
+
+ if (sentinel_->configurationServiceState_.value())
+ initDbusClient();
+}
+
+void UniversalSwitchSettingsPageModel::initDbusClient()
+{
+ connectionPtr_ = DBus::getDBusConnectionByType(DBus::ConnectionType::SESSION);
+ dBusClient_ = DBus::DBusClient{BUS, PATH, IFACE, connectionPtr_};
+
+ dBusClient_.addSignal<void()>(std::string{"switchesConfigurationChanged"}, [this]() {
+ getConfiguredSwitchesCount();
+ });
+ getConfiguredSwitchesCount();
+}
+
+void UniversalSwitchSettingsPageModel::getConfiguredSwitchesCount()
+{
+ auto reply = dBusClient_.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string, int32_t>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ configuredSwitchesCount_ = std::get<0>(reply).size();
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_SETTINGS_PAGE_MODEL_HPP
+#define UNIVERSAL_SWITCH_SETTINGS_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "Geometry.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchSentinel.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+class UniversalSwitchSettingsPageModel
+{
+ public:
+ UniversalSwitchSettingsPageModel();
+
+ ObservableProperty<int> configuredSwitchesCount_;
+ ObservableProperty<bool> autoTapKeyboardState_;
+ UniversalSwitchSentinel sentinel_;
+
+ private:
+ template <typename T>
+ void synchronizePropertyWithVConf(ObservableProperty<T> &property, const std::string &vconfKey, T defaultValue)
+ {
+ vconfHandles_.push_back(Singleton<VConfInterface>::instance().registerAndGet<T>(
+ vconfKey,
+ defaultValue,
+ [&property](auto value) {
+ property = value;
+ }));
+
+ property.attach([this, vconfKey](auto newValue) {
+ Singleton<VConfInterface>::instance().set(vconfKey, newValue);
+ });
+ }
+ std::vector<VConfInterface::CallbackHandle> vconfHandles_;
+ DBus::DBusWrapper::ConnectionPtr connectionPtr_;
+ DBus::DBusClient dBusClient_;
+ void initDbusClient();
+ void getConfiguredSwitchesCount();
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UpdateAccessoriesSwitchPageModel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+UpdateAccessoriesSwitchPageModel::UpdateAccessoriesSwitchPageModel()
+{
+}
+
+SwitchConfigurationItem UpdateAccessoriesSwitchPageModel::getDetailsForSwitchConfigurationItem(const std::string &switchId)
+{
+ auto reply = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION}.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getAllSwitchConfigurationItems").call();
+ if (reply) {
+ for (auto &item : std::get<0>(reply))
+ if (std::get<0>(item) == switchId)
+ return SwitchConfigurationItem{std::get<0>(item), std::get<1>(item), std::get<2>(item)};
+ } else {
+ ERROR("Error on function getAllSwitchConfigurationItems call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return {};
+}
+
+InfoType UpdateAccessoriesSwitchPageModel::getActivityDetails(const std::string &activityId)
+{
+ auto dBusClient = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+ auto reply = dBusClient.method<DBus::ValueOrError<std::vector<std::tuple<std::string, std::string, std::string>>>()>("getBindableActivityTypes").call();
+ if (reply) {
+ for (auto &activity : std::get<0>(reply))
+ if (std::get<0>(activity) == activityId)
+ return InfoType{std::get<0>(activity), std::get<1>(activity), std::get<2>(activity)};
+ } else {
+ ERROR("Error on function getBindableActivityTypes call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+ return {};
+}
+
+void UpdateAccessoriesSwitchPageModel::updateSwitch(const SwitchConfigurationItem &item)
+{
+ auto dBusClient = DBus::DBusClient{BUS, PATH, IFACE, DBus::ConnectionType::SESSION};
+ auto reply = dBusClient.method<DBus::ValueOrError<>(std::string, std::string, std::string)>("updateSwitchConfigurationItem").call(item.switchId, item.userName, item.activityType);
+ if (reply)
+ DEBUG("Switch: %s updated successfully", item.switchId.c_str());
+ else {
+ ERROR("Error on function updateSwitchConfigurationItem call");
+ ERROR("%s", reply.getError().message.c_str());
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UPDATE_ACCESSORIES_SWITCH_PAGE_MODEL_HPP
+#define UPDATE_ACCESSORIES_SWITCH_PAGE_MODEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VConf.hpp"
+
+#include <chrono>
+
+class UpdateAccessoriesSwitchPageModel
+{
+ public:
+ UpdateAccessoriesSwitchPageModel();
+ SwitchConfigurationItem getDetailsForSwitchConfigurationItem(const std::string &switchId);
+ InfoType getActivityDetails(const std::string &actionId);
+ void updateSwitch(const SwitchConfigurationItem &item);
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "VoiceModel.hpp"
+
+VoiceModel::VoiceModel()
+{
+ stateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_ENABLED", false, [this](auto val) {
+ this->state_ = val;
+ });
+
+ state_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_ENABLED", val);
+ });
+
+ rateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<int>("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_SPEECH_RATE", 7, [this](auto val) {
+ this->rate_ = utils::rescale<int, double>(val, utils::Range<int>{0, 15}, this->range_);
+ });
+
+ rate_.attach([this](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_SPEECH_RATE", utils::rescale<double, int>(val, this->range_, utils::Range<int>{0, 15}));
+ });
+
+ volumeHandle_ = Singleton<VConfInterface>::instance().registerAndGet<double>("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_SPEECH_VOLUME", 1.0, [this](auto val) {
+ this->volume_ = val;
+ });
+
+ volume_.attach([](auto val) {
+ Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_SPEECH_VOLUME", val);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef VOICE_MODEL_HPP
+#define VOICE_MODEL_HPP
+
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+class VoiceModel
+{
+ public:
+ VoiceModel();
+
+ const utils::Range<double> range_ = {0.0, 1.0};
+ const double step_ = 0.1;
+
+ ObservableProperty<bool> state_;
+ ObservableProperty<double> rate_;
+ ObservableProperty<double> volume_;
+
+ private:
+ VConfInterface::CallbackHandle stateHandle_;
+ VConfInterface::CallbackHandle rateHandle_;
+ VConfInterface::CallbackHandle volumeHandle_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AccessibilityLauncherPagePresenter.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+#include "AppContext.hpp"
+#include "Button.hpp"
+#include "Genlist.hpp"
+#include "Singleton.hpp"
+#include "VConf.hpp"
+#include "utils.hpp"
+
+#include <app.h>
+#include <string>
+#include <vconf.h>
+
+AccessibilityLauncherPagePresenter::AccessibilityLauncherPagePresenter()
+ : ListPresenter("IDS_ACCS_ACCESSIBILITY_LAUNCHER")
+{
+ model_.state_.attach([this](auto val) {
+ groups_[0].items_[0]->title_ = val ? "IDS_ACCS_ACCESSIBILITY_LAUNCHER_ON" : "IDS_ACCS_ACCESSIBILITY_LAUNCHER_OFF";
+ groups_[0].items_[0]->widgetState_ = val;
+ });
+
+ groups_.emplace_back("");
+
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ model_.state_.value() ? "IDS_ACCS_ACCESSIBILITY_LAUNCHER_ON" : "IDS_ACCS_ACCESSIBILITY_LAUNCHER_OFF",
+ std::string{},
+ [this](auto item) {
+ model_.state_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle));
+ groups_.back().items_.back()->widgetState_ = model_.state_.value();
+
+ groups_.back().items_.push_back(std::make_unique<ListItem>(std::string{}, "IDS_ACCS_ACCESSIBILITY_LAUNCHER_COMMENT"));
+
+ groups_.emplace_back("");
+
+ groups_.back().items_.push_back(std::make_unique<ListItem>("IDS_ST_BODY_ACCESSIBILITY",
+ std::string{},
+ [this](auto item) { model_.accessibilityLaunched_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle));
+ groups_.back().items_.back()->enabled_ = groups_[0].items_[0]->widgetState_.value();
+ groups_.back().items_.push_back(std::make_unique<ListItem>("IDS_ST_MBODY_SCREEN_READER_HTTS",
+ std::string{},
+ [this](auto item) { model_.screenReaderLaunched_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle));
+ groups_.back().items_.back()->enabled_ = groups_[0].items_[0]->widgetState_.value();
+ groups_.back().items_.push_back(std::make_unique<ListItem>("IDS_ACCS_UNIVERSAL_SWITCH",
+ std::string{},
+ [this](auto item) { model_.universalSwitchLaunched_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle));
+ groups_.back().items_.back()->enabled_ = groups_[0].items_[0]->widgetState_.value();
+
+ groups_[0].items_[0]->widgetState_.attach([this](auto val) {
+ for (auto &it : groups_[1].items_)
+ it->enabled_ = val;
+ });
+}
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ACCESSIBILITY_LAUNCHER_PAGE_PRESENTER_HPP
+#define ACCESSIBILITY_LAUNCHER_PAGE_PRESENTER_HPP
+
+#include "AccessibilityLauncherModel.hpp"
+#include "ListPresenter.hpp"
+
+#include <vector>
+
+class AccessibilityLauncherPagePresenter : public ListPresenter
+{
+ public:
+ AccessibilityLauncherPagePresenter();
+
+ private:
+ AccessibilityLauncherModel model_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Action.hpp"
+
+Action::Action(std::string actionId, std::string title, std::function<void(Action *item)> onInvoke, bool enabled, bool state)
+ : actionId_(std::move(actionId)),
+ title_(std::move(title)),
+ onInvoke_(std::move(onInvoke)),
+ enabled_(enabled),
+ state_(state)
+{
+ state_.attach([this](auto val) {
+ onInvoke_(this);
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ACTION_HPP
+#define ACTION_HPP
+
+#include "ObservableProperty.hpp"
+
+#include <functional>
+#include <string>
+
+struct Action
+{
+ Action(std::string actionId, std::string title, std::function<void(Action *item)> onInvoke, bool enabled_ = true, bool state = false);
+
+ const std::string actionId_;
+ ObservableProperty<std::string> title_;
+ const std::function<void(Action *item)> onInvoke_;
+ ObservableProperty<bool> enabled_ = true;
+ ObservableProperty<bool> state_ = false;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AddAccessoriesSwitchesPagePresenter.hpp"
+
+#include "AlreadyMappedSwitchModalPresenter.hpp"
+#include "AppContext.hpp"
+#include "EntryNameModalPresenter.hpp"
+#include "Singleton.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+AddAccessoriesSwitchesPagePresenter::AddAccessoriesSwitchesPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_TITLE");
+ labelText_ = "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_ACCESSORIES_DESC";
+}
+
+void AddAccessoriesSwitchesPagePresenter::onTop()
+{
+ model_.captureSwitch([this](auto switchId) {
+ this->onSwitchCapture(switchId);
+ },
+ ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER);
+}
+
+void AddAccessoriesSwitchesPagePresenter::notOnTop()
+{
+ model_.cancelCaptureSwitch();
+}
+
+void AddAccessoriesSwitchesPagePresenter::onSwitchCapture(const std::string &switchId)
+{
+ notOnTop();
+ if (model_.isConfigured(switchId))
+ Singleton<AppContext>::instance().pushModal(std::make_unique<AlreadyMappedSwitchModalPresenter>());
+ else
+ Singleton<AppContext>::instance().pushModal(std::make_unique<EntryNameModalPresenter>(switchId));
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ADD_ACCESSORIES_SWITCHES_PAGE_PRESENTER
+#define ADD_ACCESSORIES_SWITCHES_PAGE_PRESENTER
+
+#include "AddAccessoriesSwitchesPageModel.hpp"
+#include "LabelPresenter.hpp"
+
+class AddAccessoriesSwitchesPagePresenter : public LabelPresenter
+{
+ public:
+ AddAccessoriesSwitchesPagePresenter();
+
+ private:
+ void onTop() override;
+ void notOnTop() override;
+ void onSwitchCapture(const std::string &switchId);
+ AddAccessoriesSwitchesPageModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AddSwitchPagePresenter.hpp"
+
+#include "AddAccessoriesSwitchesPagePresenter.hpp"
+#include "AppContext.hpp"
+#include "CameraSwitchesPagePresenter.hpp"
+#include "SelectActionPagePresenter.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+AddSwitchPagePresenter::AddSwitchPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+ for (auto &provider : model_.getProviders()) {
+ items.push_back(std::make_unique<ListItem>(
+ provider.name,
+ provider.description,
+ [=](auto item) {
+ this->createPageForProvider(provider);
+ }));
+ }
+ auto onConfigurationChange = [this](auto changeTime) {
+ auto providers = this->model_.getProviders();
+ auto size = providers.size();
+ for (auto i = 0u; i < size; ++i)
+ this->groups_.back().items_[i]->enabled_ = !this->model_.areAllSwitchesConfigured(providers[i]);
+ };
+ model_.switchesConfigurationChanged_.attach(onConfigurationChange);
+ onConfigurationChange(std::chrono::system_clock::now());
+}
+
+void AddSwitchPagePresenter::createPageForProvider(const InfoType &provider)
+{
+ if (provider.id == ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER) {
+ createPageForScreenProvider();
+ return;
+ }
+ if (provider.id == ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER) {
+ createPageForAccessoriesProvider();
+ return;
+ }
+ if (provider.id == ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER) {
+ createPageForCameraProvider();
+ return;
+ }
+}
+
+void AddSwitchPagePresenter::createPageForScreenProvider()
+{
+ auto switches = model_.getAllSwitchesByProviderId(ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER);
+ if (switches.size() != 1)
+ return;
+ auto screenSwitch = switches[0];
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(screenSwitch.id, ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN, ChangeType::ADD, 1));
+}
+
+void AddSwitchPagePresenter::createPageForAccessoriesProvider()
+{
+ Singleton<AppContext>::instance().push(std::make_unique<AddAccessoriesSwitchesPagePresenter>());
+}
+
+void AddSwitchPagePresenter::createPageForCameraProvider()
+{
+ Singleton<AppContext>::instance().push(std::make_unique<CameraSwitchesPagePresenter>());
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ADD_SWITCH_PAGE_PRESENTER_HPP
+#define ADD_SWITCH_PAGE_PRESENTER_HPP
+
+#include "AddSwitchPageModel.hpp"
+#include "ListPresenter.hpp"
+#include "UniversalSwitchTypes.hpp"
+
+class AddSwitchPagePresenter : public ListPresenter
+{
+ public:
+ AddSwitchPagePresenter();
+
+ private:
+ AddSwitchPageModel model_;
+ void createPageForProvider(const InfoType &provider);
+ void createPageForScreenProvider();
+ void createPageForAccessoriesProvider();
+ void createPageForCameraProvider();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AlreadyMappedSwitchModalPresenter.hpp"
+
+#include "AppContext.hpp"
+#include "Singleton.hpp"
+
+AlreadyMappedSwitchModalPresenter::AlreadyMappedSwitchModalPresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_UNABLE_TO_ADD");
+ text_ = "IDS_ACCS_UNIVERSAL_SWITCH_ALREADY_ADDED";
+ addAction(std::make_unique<Action>("doneAction", "IDS_ACCS_UNIVERSAL_SWITCH_OK", [](auto action) {
+ Singleton<AppContext>::instance().popModal();
+ }));
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ALREADY_MAPPED_SWITCH_MODAL_PRESENTER
+#define ALREADY_MAPPED_SWITCH_MODAL_PRESENTER
+
+#include "ModalPresenter.hpp"
+
+class AlreadyMappedSwitchModalPresenter : public ModalPresenter
+{
+ public:
+ AlreadyMappedSwitchModalPresenter();
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AppContext.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+#include "Conformant.hpp"
+#include "MainPagePresenter.hpp"
+
+#include <app.h>
+
+AppContext::AppContext()
+{
+ elm_app_base_scale_set(2.4);
+
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+}
+
+void AppContext::push(std::unique_ptr<Presenter> presenter)
+{
+ if (presentersStack_.size() > 0)
+ presentersStack_.back()->notOnTop();
+ presentersStack_.push_back(std::move(presenter));
+ presentersStack_.back()->onTop();
+ Observable<Presenter *, size_t>::notify(presentersStack_.back().get(), 1);
+}
+
+void AppContext::pop(size_t countOfPagesToPop)
+{
+ if (countOfPagesToPop < 1)
+ return;
+
+ if (countOfPagesToPop > presentersStack_.size())
+ countOfPagesToPop = presentersStack_.size();
+
+ if (presentersStack_.size() > 0)
+ presentersStack_.back()->notOnTop();
+
+ for (auto i = 0u; i < countOfPagesToPop; ++i)
+ presentersStack_.pop_back();
+
+ if (presentersStack_.empty()) {
+ ui_app_exit();
+ } else {
+ presentersStack_.back()->onTop();
+ Observable<Presenter *, size_t>::notify(nullptr, countOfPagesToPop);
+ }
+}
+
+Presenter *AppContext::back()
+{
+ return presentersStack_.back().get();
+}
+
+bool AppContext::empty()
+{
+ return presentersStack_.empty();
+}
+
+void AppContext::pushModal(std::unique_ptr<ModalPresenter> presenter)
+{
+ if (presentersStack_.size() > 0)
+ presentersStack_.back()->notOnTop();
+ modalPresentersStack_.push_back(std::move(presenter));
+ Observable<ModalPresenter *>::notify(modalPresentersStack_.back().get());
+}
+
+void AppContext::popModal()
+{
+ if (presentersStack_.size() > 0)
+ presentersStack_.back()->onTop();
+ modalPresentersStack_.pop_back();
+ Observable<ModalPresenter *>::notify(nullptr);
+}
+
+ModalPresenter *AppContext::modalsBack()
+{
+ return modalPresentersStack_.back().get();
+}
+
+bool AppContext::modalsEmpty()
+{
+ return modalPresentersStack_.empty();
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef APP_CONTEXT_HPP
+#define APP_CONTEXT_HPP
+
+#include "ModalPresenter.hpp"
+#include "Naviframe.hpp"
+#include "Observable.hpp"
+#include "Presenter.hpp"
+#include "Window.hpp"
+
+#include <memory>
+#include <string>
+
+class AppContext : public Observable<Presenter *, size_t>, public Observable<ModalPresenter *>
+{
+ public:
+ AppContext();
+ void push(std::unique_ptr<Presenter> presenter);
+ void pop(size_t countOfPagesToPop = 1);
+ Presenter *back();
+ bool empty();
+
+ void pushModal(std::unique_ptr<ModalPresenter> presenter);
+ void popModal();
+ ModalPresenter *modalsBack();
+ bool modalsEmpty();
+ std::unordered_map<std::string, std::string> sharedPreferences;
+
+ private:
+ std::vector<std::unique_ptr<Presenter>> presentersStack_;
+ std::vector<std::unique_ptr<ModalPresenter>> modalPresentersStack_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoMoveIntervalPresenter.hpp"
+
+AutoMoveIntervalPresenter::AutoMoveIntervalPresenter()
+ : SpinnerPresenterWithToggle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_MOVE_INT")
+{
+ state_ = model_.state_.value();
+ state_.attach([this](auto state) {
+ model_.state_ = state;
+ });
+
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> AutoMoveIntervalPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double AutoMoveIntervalPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string AutoMoveIntervalPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
+
+std::string AutoMoveIntervalPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_MOVE_INT";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_MOVE_INTERVAL_PRESENTER_HPP_
+#define AUTO_MOVE_INTERVAL_PRESENTER_HPP_
+
+#include "AutoMoveIntervalModel.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+
+class AutoMoveIntervalPresenter : public SpinnerPresenterWithToggle
+{
+ public:
+ AutoMoveIntervalPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ AutoMoveIntervalModel model_;
+};
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoScanIntervalPresenter.hpp"
+
+AutoScanIntervalPresenter::AutoScanIntervalPresenter()
+ : SpinnerPresenter("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN_INT")
+{
+ value_ = model_.interval_;
+ value_.attach([this](auto val) {
+ model_.interval_ = val;
+ });
+}
+
+utils::Range<double> AutoScanIntervalPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double AutoScanIntervalPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string AutoScanIntervalPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_AUTO_SCAN_INT";
+}
+
+std::string AutoScanIntervalPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_SCAN_INTERVAL_PRESENTER
+#define AUTO_SCAN_INTERVAL_PRESENTER
+
+#include "AutoScanModel.hpp"
+#include "SpinnerPresenter.hpp"
+
+class AutoScanIntervalPresenter : public SpinnerPresenter
+{
+ public:
+ AutoScanIntervalPresenter();
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ AutoScanModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "AutoTapPresenter.hpp"
+
+AutoTapPresenter::AutoTapPresenter()
+ : SpinnerPresenterWithToggle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP")
+{
+ state_ = model_.state_.value();
+ state_.attach([this](auto state) {
+ model_.state_ = state;
+ });
+
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> AutoTapPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double AutoTapPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string AutoTapPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
+
+std::string AutoTapPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef AUTO_TAP_PRESENTER_HPP_
+#define AUTO_TAP_PRESENTER_HPP_
+
+#include "AutoTapModel.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+
+class AutoTapPresenter : public SpinnerPresenterWithToggle
+{
+ public:
+ AutoTapPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ AutoTapModel model_;
+};
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CameraSwitchesPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "SelectActionPagePresenter.hpp"
+#include "UniversalSwitchConstants.hpp"
+
+CameraSwitchesPagePresenter::CameraSwitchesPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_TITLE");
+ groups_.emplace_back("");
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_COMMENT"));
+
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_CAMERA_GROUP_HEAD");
+ auto &items = groups_.back().items_;
+ for (auto &aSwitch : model_.getAllSwitchesByProvider(ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER)) {
+ items.push_back(std::make_unique<ListItem>(
+ aSwitch.name,
+ aSwitch.description,
+ [=](auto item) {
+ this->createSelectActionPageForSwitch(aSwitch);
+ }));
+ items.back()->enabled_ = !model_.isSwitchConfigured(aSwitch.id);
+ }
+}
+
+void CameraSwitchesPagePresenter::createSelectActionPageForSwitch(const InfoType &aSwitch)
+{
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(aSwitch.id, aSwitch.name, ChangeType::ADD, 2));
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CAMERA_SWITCHES_PAGE_PRESENTER_HPP
+#define CAMERA_SWITCHES_PAGE_PRESENTER_HPP
+
+#include "CameraSwitchesPageModel.hpp"
+#include "ListPresenter.hpp"
+
+class CameraSwitchesPagePresenter : public ListPresenter
+{
+ public:
+ CameraSwitchesPagePresenter();
+
+ private:
+ CameraSwitchesPageModel model_;
+ void createSelectActionPageForSwitch(const InfoType &aSwitch);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CursorColorPagePresenter.hpp"
+
+#include "AppContext.hpp"
+
+CursorColorPagePresenter::CursorColorPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+ for (auto color : colors_) {
+ items.push_back(std::make_unique<ListItem>(
+ model_.getColorText(color),
+ std::string{},
+ [this, color](auto item) {
+ this->model_.cursorColor_ = color;
+ Singleton<AppContext>::instance().pop();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ color == model_.cursorColor_.value()));
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CURSOR_COLOR_PAGE_PRESENTER_HPP
+#define CURSOR_COLOR_PAGE_PRESENTER_HPP
+
+#include "CursorColorModel.hpp"
+#include "ListPresenter.hpp"
+
+#include <vector>
+
+class CursorColorPagePresenter : public ListPresenter
+{
+ public:
+ CursorColorPagePresenter();
+
+ private:
+ CursorColorModel model_;
+ std::vector<Color> colors_ = {
+ Color::RED,
+ Color::ORANGE,
+ Color::YELLOW,
+ Color::GREEN,
+ Color::BLUE,
+ Color::GRAY};
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "EntryNameModalPresenter.hpp"
+
+#include "AppContext.hpp"
+#include "SelectActionPagePresenter.hpp"
+#include "Singleton.hpp"
+
+EntryNameModalPresenter::EntryNameModalPresenter(std::string switchId)
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH");
+ entryAction_ = addAction(std::make_unique<Action>("modalEntry", "IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_NAME", [this](auto action) {
+ doneAction_->enabled_ = !entryAction_->title_.value().empty();
+ }));
+
+ addAction(std::make_unique<Action>("cancelAction", "IDS_ACCS_UNIVERSAL_SWITCH_CANCEL", std::function<void(Action *)>{}));
+ doneAction_ = addAction(std::make_unique<Action>("doneAction", "IDS_ACCS_UNIVERSAL_SWITCH_SAVE", [this, switchId](auto action) {
+ auto switchUserName = this->entryAction_->title_.value();
+ Singleton<AppContext>::instance().popModal();
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(switchId, switchUserName, ChangeType::ADD, 2));
+ },
+ false));
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ENTRY_NAME_MODAL_PRESENTER_HPP
+#define ENTRY_NAME_MODAL_PRESENTER_HPP
+
+#include "ModalPresenter.hpp"
+
+class EntryNameModalPresenter : public ModalPresenter
+{
+ public:
+ EntryNameModalPresenter(std::string switchId);
+
+ private:
+ Action *entryAction_ = nullptr;
+ Action *doneAction_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LABEL_PRESENTER
+#define LABEL_PRESENTER
+
+#include "ObservableProperty.hpp"
+#include "Presenter.hpp"
+
+class LabelPresenter : public Presenter
+{
+ public:
+ ObservableProperty<std::string> labelText_;
+
+ protected:
+ using Presenter::Presenter;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ListGroup.hpp"
+
+ListGroup::ListGroup(std::string name)
+ : name_(std::move(name))
+{}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LIST_GROUP_HPP
+#define LIST_GROUP_HPP
+
+#include "ListItem.hpp"
+
+#include <memory>
+#include <string>
+#include <vector>
+
+struct ListGroup
+{
+ ListGroup(std::string name);
+ std::string name_;
+ std::vector<std::unique_ptr<ListItem>> items_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ListItem.hpp"
+
+ListItem::ListItem(std::string title,
+ std::string description,
+ std::function<void(ListItem *item)> onItemSelection,
+ WidgetType type,
+ std::function<void(ListItem *item)> onWidgetSelection,
+ std::function<void(ListItem *item)> onWidgetChanged,
+ bool state,
+ std::string iconPath)
+ : title_(std::move(title)),
+ description_(std::move(description)),
+ onItemSelection_(std::move(onItemSelection)),
+ widgetType_(type),
+ onWidgetSelection_(std::move(onWidgetSelection)),
+ onWidgetChanged_(std::move(onWidgetChanged)),
+ widgetState_(state),
+ iconPath_(std::move(iconPath))
+{}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LIST_ITEM_HPP
+#define LIST_ITEM_HPP
+
+#include "ObservableProperty.hpp"
+
+#include <functional>
+#include <string>
+
+struct ListItem
+{
+ public:
+ enum class WidgetType
+ {
+ none,
+ check,
+ toggle,
+ radio,
+ icon,
+ slider,
+ entry
+ };
+
+ ListItem(std::string title,
+ std::string description,
+ std::function<void(ListItem *item)> onItemSelection = {},
+ WidgetType type = WidgetType::none,
+ std::function<void(ListItem *item)> onWidgetSelection = {},
+ std::function<void(ListItem *item)> onWidgetChanged = {},
+ bool state = false,
+ std::string iconPath = {});
+
+ ObservableProperty<std::string> title_;
+ ObservableProperty<std::string> description_;
+ const std::function<void(ListItem *item)> onItemSelection_;
+ const WidgetType widgetType_ = WidgetType::none;
+ const std::function<void(ListItem *item)> onWidgetSelection_;
+ const std::function<void(ListItem *item)> onWidgetChanged_;
+ ObservableProperty<bool> widgetState_ = false;
+ const std::string iconPath_;
+ ObservableProperty<bool> enabled_ = true;
+ double value_ = 0.0;
+ std::pair<double, double> range_;
+ double step_ = 1;
+ ObservableProperty<std::string> entryText_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ListPresenter.hpp"
+
+const std::vector<ListGroup> &ListPresenter::getListGroups() const
+{
+ return groups_;
+}
+
+void ListPresenter::setOnListUpdateCallback(std::function<void()> callback)
+{
+ onListUpdate_ = std::move(callback);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LIST_PRESENTER_HPP
+#define LIST_PRESENTER_HPP
+
+#include "ListGroup.hpp"
+#include "Observable.hpp"
+#include "Presenter.hpp"
+
+class ListPresenter : public Presenter, public Observable<>
+{
+ public:
+ const std::vector<ListGroup> &getListGroups() const;
+ void setOnListUpdateCallback(std::function<void()> callback);
+
+ protected:
+ using Presenter::Presenter;
+
+ std::function<void()> onListUpdate_;
+ std::vector<ListGroup> groups_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "MainPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "ScreenReaderPresenter.hpp"
+
+#include <app.h>
+
+MainPagePresenter::MainPagePresenter()
+ : ListPresenter("IDS_ST_BODY_ACCESSIBILITY")
+{
+ groups_.emplace_back("IDS_ST_HEADER_VISION");
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ "IDS_ST_MBODY_SCREEN_READER_HTTS",
+ model_.state_.value() ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF",
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<ScreenReaderPresenter>()); },
+ ListItem::WidgetType::none,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.state_.value()));
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_UNIVERSAL_SWITCH",
+ "IDS_ACCS_UNIVERSAL_SWITCH_HINT",
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<UniversalSwitchPagePresenter>()); }));
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_ACCESSIBILITY_LAUNCHER",
+ "IDS_ACCS_ACCESSIBILITY_LAUNCHER_HINT",
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<AccessibilityLauncherPagePresenter>()); }));
+
+ onPopCallback_ = [this]() {
+ screenReaderStateHandle_ = {};
+ ui_app_exit();
+ };
+ model_.state_.attach([this](auto state) {
+ auto item = groups_[0].items_[0]->description_ = state ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF";
+ });
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MAIN_PAGE_PRESENTER_HPP
+#define MAIN_PAGE_PRESENTER_HPP
+
+#include "AccessibilityLauncherPagePresenter.hpp"
+#include "ListPresenter.hpp"
+#include "ScreenReaderModel.hpp"
+#include "UniversalSwitchPagePresenter.hpp"
+#include "VConf.hpp"
+
+class MainPagePresenter : public ListPresenter
+{
+ public:
+ MainPagePresenter();
+
+ private:
+ std::unique_ptr<AccessibilityLauncherPagePresenter> accessibilityLauncherPage_;
+ VConfInterface::CallbackHandle screenReaderStateHandle_;
+ ScreenReaderModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ManageMenuOptionsPagePresenter.hpp"
+
+ManageMenuOptionsPagePresenter::ManageMenuOptionsPagePresenter()
+{
+ std::vector<std::pair<std::string, std::string>> titleAndDescription =
+ {
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_GESTURES", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_ACTIONS", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SETTINGS", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_RECENT_APPS", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_HOME_SCREEN", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_BACK", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_BUTTONS_AND_KEYS", ""},
+ {"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_CONTEXTUAL_MENU", "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_CONTEXTUAL_MENU_DESC"}};
+
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE");
+ groups_.emplace_back("");
+
+ for (auto i = 0u; i < ManageMenuOptionsPageModel::ManageMenuOptionsCount; ++i) {
+ groups_.back().items_.push_back(std::make_unique<ListItem>(
+ titleAndDescription[i].first,
+ titleAndDescription[i].second,
+ [this, i](auto item) {
+ model_.manageMenuOptionStates_[i] = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.manageMenuOptionStates_[i].value()));
+ auto item = groups_.back().items_.back().get();
+ model_.manageMenuOptionStates_[i].attach([item](auto state) {
+ item->widgetState_ = state;
+ });
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MANAGE_MENU_OPTIONS_PAGE_PRESENTER_HPP
+#define MANAGE_MENU_OPTIONS_PAGE_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "ManageMenuOptionsPageModel.hpp"
+
+#include <vector>
+
+class ManageMenuOptionsPagePresenter : public ListPresenter
+{
+ public:
+ ManageMenuOptionsPagePresenter();
+
+ private:
+ ManageMenuOptionsPageModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ModalPresenter.hpp"
+
+std::string ModalPresenter::getText()
+{
+ return text_;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MODAL_PRESENTER_HPP
+#define MODAL_PRESENTER_HPP
+
+#include "Presenter.hpp"
+
+class ModalPresenter : public Presenter
+{
+ public:
+ std::string getText();
+
+ protected:
+ using Presenter::Presenter;
+
+ std::string text_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "NoSwitchesModalPresenter.hpp"
+
+#include "AddSwitchPagePresenter.hpp"
+#include "AppContext.hpp"
+
+NoSwitchesModalPresenter::NoSwitchesModalPresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_NO_SWITCHES_TITLE");
+ text_ = "IDS_ACCS_UNIVERSAL_SWITCH_NO_SWITCHES_TEXT";
+
+ addAction(std::make_unique<Action>("cancelAction", "IDS_ACCS_UNIVERSAL_SWITCH_CANCEL", std::function<void(Action *)>{}));
+ addAction(std::make_unique<Action>("doneAction", "IDS_ACCS_UNIVERSAL_SWITCH_POPUP_ADD", [this](auto action) {
+ Singleton<AppContext>::instance().popModal();
+ Singleton<AppContext>::instance().push(std::make_unique<AddSwitchPagePresenter>());
+ }));
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NO_SWITCHES_MODAL_PRESENTER_HPP
+#define NO_SWITCHES_MODAL_PRESENTER_HPP
+
+#include "ModalPresenter.hpp"
+
+class NoSwitchesModalPresenter : public ModalPresenter
+{
+ public:
+ NoSwitchesModalPresenter();
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "NumberOfAutoScanLoopsPresenter.hpp"
+
+NumberOfAutoScanLoopsPresenter::NumberOfAutoScanLoopsPresenter()
+ : SpinnerPresenter("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_NUM_OF_SCANS")
+{
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> NumberOfAutoScanLoopsPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double NumberOfAutoScanLoopsPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string NumberOfAutoScanLoopsPresenter::getFormat()
+{
+ return "%d times";
+}
+
+std::string NumberOfAutoScanLoopsPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_NUM_OF_SCANS";
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NUMBER_OF_AUTO_SCAN_LOOPS_PRESENTER_HPP_
+#define NUMBER_OF_AUTO_SCAN_LOOPS_PRESENTER_HPP_
+
+#include "NumberOfAutoScanLoopsModel.hpp"
+#include "SpinnerPresenter.hpp"
+
+class NumberOfAutoScanLoopsPresenter : public SpinnerPresenter
+{
+ public:
+ NumberOfAutoScanLoopsPresenter();
+
+ utils::Range<double> getRange();
+ double getStep();
+ std::string getFormat();
+ std::string getLabel();
+
+ private:
+ NumberOfAutoScanLoopsModel model_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "PauseOnFirstPresenter.hpp"
+
+PauseOnFirstPresenter::PauseOnFirstPresenter()
+ : SpinnerPresenterWithToggle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST")
+{
+ state_ = model_.state_.value();
+ state_.attach([this](auto state) {
+ model_.state_ = state;
+ });
+
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> PauseOnFirstPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double PauseOnFirstPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string PauseOnFirstPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST";
+}
+
+std::string PauseOnFirstPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef PAUSE_ON_FIRST_PRESENTER_HPP_
+#define PAUSE_ON_FIRST_PRESENTER_HPP_
+
+#include "PauseOnFirstModel.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+
+class PauseOnFirstPresenter : public SpinnerPresenterWithToggle
+{
+ public:
+ PauseOnFirstPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ PauseOnFirstModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "PointScanSpeedPresenter.hpp"
+
+PointScanSpeedPresenter::PointScanSpeedPresenter()
+ : SpinnerPresenter("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_PT_SPEED")
+{
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> PointScanSpeedPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double PointScanSpeedPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string PointScanSpeedPresenter::getFormat()
+{
+ return "%d";
+}
+
+std::string PointScanSpeedPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_SCAN_SPEED";
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef POINT_SCAN_SPEED_PRESENTER_HPP_
+#define POINT_SCAN_SPEED_PRESENTER_HPP_
+
+#include "PointScanSpeedModel.hpp"
+#include "SpinnerPresenter.hpp"
+
+class PointScanSpeedPresenter : public SpinnerPresenter
+{
+ public:
+ PointScanSpeedPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getFormat() override;
+ std::string getLabel() override;
+
+ private:
+ PointScanSpeedModel model_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Presenter.hpp"
+
+Presenter::Presenter(TranslatedString title, std::function<void()> onPopCallback)
+ : title_(title), onPopCallback_(std::move(onPopCallback))
+{}
+
+const TranslatedString Presenter::getTitle() const
+{
+ return title_;
+}
+
+void Presenter::setTitle(const std::string &title)
+{
+ title_ = title;
+}
+
+const std::function<void()> Presenter::getOnPopCallback() const
+{
+ return onPopCallback_;
+}
+
+void Presenter::onAppPause()
+{}
+
+void Presenter::onAppResume()
+{}
+
+void Presenter::onTop()
+{}
+
+void Presenter::notOnTop()
+{}
+
+Action *Presenter::getAction(const std::string &actionId) const
+{
+ auto it = actions_.find(actionId);
+ if (it == actions_.end()) {
+ return nullptr;
+ }
+ return it->second.get();
+}
+
+Action *Presenter::addAction(std::unique_ptr<Action> action)
+{
+ return actions_.insert_or_assign(action->actionId_, std::move(action)).first->second.get();
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef PRESENTER_HPP
+#define PRESENTER_HPP
+
+#include "Action.hpp"
+#include "GenlistItem.hpp"
+#include "TranslatedString.hpp"
+
+#include <functional>
+#include <unordered_map>
+#include <vector>
+
+class Presenter
+{
+ public:
+ virtual ~Presenter() = default;
+
+ const TranslatedString getTitle() const;
+ void setTitle(const std::string &title);
+ const std::function<void()> getOnPopCallback() const;
+ virtual void onAppPause();
+ virtual void onAppResume();
+ virtual void onTop();
+ virtual void notOnTop();
+ Action *getAction(const std::string &actionId) const;
+ Action *addAction(std::unique_ptr<Action> action);
+
+ protected:
+ Presenter(TranslatedString title = {}, std::function<void()> onPopCallback = {});
+
+ TranslatedString title_;
+ std::function<void()> onPopCallback_;
+ std::unordered_map<std::string, std::unique_ptr<Action>> actions_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "RemoveSwitchesModalPresenter.hpp"
+
+#include "AppContext.hpp"
+
+RemoveSwitchesModalPresenter::RemoveSwitchesModalPresenter(std::vector<SwitchConfigurationItem> switches, std::vector<std::string> switchesToRemove)
+ : switches_(std::move(switches)), switchesToRemove_(std::move(switchesToRemove))
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES");
+
+ if (switchesToRemove_.size() == switches_.size() && model_.isUniversalSwitchActive_.value()) {
+ text_ = "IDS_ACCS_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC";
+ } else {
+ text_ = std::to_string(switchesToRemove_.size()) + " " + TranslatedString{"IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"}.str();
+ }
+
+ addAction(std::make_unique<Action>("cancelAction", "IDS_ST_BUTTON_CANCEL", std::function<void(Action *)>{}));
+ addAction(std::make_unique<Action>("doneAction", "IDS_ACCS_DELETE", [this](auto action) {
+ model_.removeSwitches(switchesToRemove_);
+ Singleton<AppContext>::instance().popModal();
+ Singleton<AppContext>::instance().pop();
+ }));
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef REMOVE_SWITCHES_MODAL_PRESENTER_HPP
+#define REMOVE_SWITCHES_MODAL_PRESENTER_HPP
+
+#include "ModalPresenter.hpp"
+#include "RemoveSwitchesModel.hpp"
+#include "UniversalSwitchTypes.hpp"
+
+class RemoveSwitchesModalPresenter : public ModalPresenter
+{
+ public:
+ RemoveSwitchesModalPresenter(std::vector<SwitchConfigurationItem> switches, std::vector<std::string> switchesToRemove);
+
+ private:
+ RemoveSwitchesModel model_;
+ std::vector<SwitchConfigurationItem> switches_;
+ std::vector<std::string> switchesToRemove_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "RemoveSwitchesPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "RemoveSwitchesModalPresenter.hpp"
+
+RemoveSwitchesPagePresenter::RemoveSwitchesPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES");
+ groups_.emplace_back("");
+
+ deleteAction_ = addAction(std::make_unique<Action>("titleRightAction", "IDS_ACCS_DELETE_CAPS", [this](auto action) {
+ std::vector<std::string> toRemove;
+ for (auto i = 0u; i < groups_[0].items_.size(); ++i) {
+ if (groups_[0].items_[i]->widgetState_.value())
+ toRemove.push_back(switches_[i].switchId);
+ }
+
+ Singleton<AppContext>::instance().pushModal(std::make_unique<RemoveSwitchesModalPresenter>(switches_, toRemove));
+ },
+ false));
+
+ selectAllAction_ = addAction(std::make_unique<Action>("selectAll", std::string{}, [this](auto action) {
+ if (!changeAllSelectedItems_) {
+ changeAllSelectedItems_ = true;
+ return;
+ }
+
+ for (auto &it : groups_[0].items_) {
+ it->widgetState_ = action->state_.value();
+ }
+ selectedNo_ = action->state_.value() ? groups_[0].items_.size() : 0;
+
+ if (selectedNo_ == 0)
+ deleteAction_->enabled_ = false;
+ else
+ deleteAction_->enabled_ = true;
+ },
+ true));
+
+ addItemsToList();
+ model_.switchesConfigurationChanged_.attach([this](auto timeStamp) {
+ groups_.back().items_.clear();
+ this->addItemsToList();
+ if (this->onListUpdate_)
+ this->onListUpdate_();
+ });
+}
+
+void RemoveSwitchesPagePresenter::addItemsToList()
+{
+ auto &items = groups_.back().items_;
+ switches_ = model_.getAllSwitchConfigurationItems();
+ for (auto oneSwitch : switches_) {
+ items.push_back(std::make_unique<ListItem>(
+ oneSwitch.userName,
+ model_.getActivityName(oneSwitch.activityType),
+ [this](auto item) {
+ if (item->widgetState_.value())
+ ++selectedNo_;
+ else
+ --selectedNo_;
+
+ if (selectedNo_ == groups_[0].items_.size() && !selectAllAction_->state_.value()) {
+ changeAllSelectedItems_ = false;
+ selectAllAction_->state_ = true;
+ } else if (selectedNo_ < groups_[0].items_.size() && selectAllAction_->state_.value()) {
+ changeAllSelectedItems_ = false;
+ selectAllAction_->state_ = false;
+ }
+ if (selectedNo_ == 0)
+ deleteAction_->enabled_ = false;
+ else
+ deleteAction_->enabled_ = true;
+ },
+ ListItem::WidgetType::check));
+ }
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef REMOVE_SWITCHES_PAGE_PRESENTER_HPP
+#define REMOVE_SWITCHES_PAGE_PRESENTER_HPP
+
+#include "Action.hpp"
+#include "ListPresenter.hpp"
+#include "SwitchesPageModel.hpp"
+
+class RemoveSwitchesPagePresenter : public ListPresenter
+{
+ public:
+ RemoveSwitchesPagePresenter();
+
+ private:
+ SwitchesPageModel model_;
+ void addItemsToList();
+
+ Action *deleteAction_ = nullptr;
+ Action *selectAllAction_ = nullptr;
+ std::vector<SwitchConfigurationItem> switches_;
+ size_t selectedNo_ = 0;
+ bool changeAllSelectedItems_ = true;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScanDirectionPresenter.hpp"
+
+#include "AppContext.hpp"
+
+ScanDirectionPresenter::ScanDirectionPresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+ for (auto direction : directions_) {
+ items.push_back(std::make_unique<ListItem>(
+ scanDirectionToString(direction),
+ std::string{},
+ [this, direction](auto item) {
+ this->model_.direction_ = direction;
+ Singleton<AppContext>::instance().pop();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ direction == model_.direction_.value()));
+ }
+}
+
+std::string ScanDirectionPresenter::scanDirectionToString(ScanDirection scanDirection)
+{
+ switch (scanDirection) {
+ case ScanDirection::TO_BOTTOM:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_TB";
+ case ScanDirection::TO_TOP:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR_BT";
+ default:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCAN_DIRECTION_PRESENTER_HPP
+#define SCAN_DIRECTION_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "ScanDirectionModel.hpp"
+
+class ScanDirectionPresenter : public ListPresenter
+{
+ public:
+ ScanDirectionPresenter();
+ static std::string scanDirectionToString(ScanDirection scanDirection);
+
+ private:
+ ScanDirectionModel model_;
+ std::vector<ScanDirection> directions_ = {
+ ScanDirection::TO_BOTTOM,
+ ScanDirection::TO_TOP};
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScanMethodPresenter.hpp"
+
+#include "AppContext.hpp"
+
+ScanMethodPresenter::ScanMethodPresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+ for (auto method : methods_) {
+ items.push_back(std::make_unique<ListItem>(
+ scanMethodToString(method),
+ std::string{},
+ [this, method](auto item) {
+ this->model_.method_ = method;
+ Singleton<AppContext>::instance().pop();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ method == model_.method_.value()));
+ }
+}
+
+std::string ScanMethodPresenter::scanMethodToString(ScanMethod scanMethod)
+{
+ switch (scanMethod) {
+ case ScanMethod::POINT:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_POINT";
+ case ScanMethod::ROW:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD_ROW";
+ default:
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_UNDEFINED";
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCAN_METHOD_PRESENTER_HPP
+#define SCAN_METHOD_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "ScanMethodModel.hpp"
+
+class ScanMethodPresenter : public ListPresenter
+{
+ public:
+ ScanMethodPresenter();
+ static std::string scanMethodToString(ScanMethod scanMethod);
+
+ private:
+ ScanMethodModel model_;
+ std::vector<ScanMethod> methods_ = {
+ ScanMethod::POINT,
+ ScanMethod::ROW};
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScreenReaderPresenter.hpp"
+
+#include "AppContext.hpp"
+#include "ScreenReaderSettingsPresenter.hpp"
+#include "TextToSpeech.hpp"
+
+ScreenReaderPresenter::ScreenReaderPresenter()
+{
+ Singleton<TextToSpeech>::instance();
+ groups_.emplace_back("");
+
+ setTitle("IDS_ST_MBODY_SCREEN_READER_HTTS");
+
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_MBODY_SCREEN_READER_HTTS",
+ model_.state_.value() ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF",
+ [this](auto item) {
+ this->model_.state_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.state_.value()));
+ items.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_BODY_WHILE_SCREEN_READER_IS_ENABLED_YOUR_PHONE_WILL_PROVIDE_VOICE_FEEDBACK_FOR_EXAMPLE_SCREEN_READER_WILL_MSG"));
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_OPT_SETTINGS",
+ std::string{},
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<ScreenReaderSettingsPresenter>()); }));
+ model_.state_.attach([this](auto state) {
+ auto item = groups_[0].items_[0].get();
+ item->widgetState_ = state;
+ item->description_ = state ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF";
+ if (!state) {
+ auto buf = TranslatedString{"IDS_ST_MBODY_SCREEN_READER_HTTS"} + " " + TranslatedString{"IDS_ST_BODY_OFF"};
+ Singleton<TextToSpeech>::instance().play(buf.str());
+ }
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCREEN_READER_PRESENTER_HPP
+#define SCREEN_READER_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "ScreenReaderModel.hpp"
+
+#include <vector>
+
+class ScreenReaderPresenter : public ListPresenter
+{
+ public:
+ ScreenReaderPresenter();
+
+ private:
+ ScreenReaderModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ScreenReaderSettingsPresenter.hpp"
+
+#include "AppContext.hpp"
+#include "StatusBarInformationPresenter.hpp"
+#include "TextToSpeechPresenter.hpp"
+#include "utils.hpp"
+
+ScreenReaderSettingsPresenter::ScreenReaderSettingsPresenter()
+ : ListPresenter("IDS_ST_OPT_SETTINGS")
+{
+ groups_.emplace_back("");
+
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_SPEECH_RATE",
+ speechRatePercent(),
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<TextToSpeechPresenter>()); } //TODO: add TextToSpeechPresenter
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_OPT_KEYBOARD_FEEDBACK_TTS",
+ "IDS_ACCS_OPT_ALWAYS_READ_OUT_KEYBOARD_INPUT_TTS",
+ [this](auto item) { this->model_.keyboardFeedback_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.keyboardFeedback_.value()));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_MBODY_READ_OUT_USAGE_HINTS_ABB",
+ std::string{},
+ [this](auto item) { this->model_.readUsageHints_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.readUsageHints_.value()));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_MBODY_VIBRATION_FEEDBACK",
+ std::string{},
+ [this](auto item) { this->model_.vibrationFeedback_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.vibrationFeedback_.value()));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_MBODY_SOUND_FEEDBACK",
+ std::string{},
+ [this](auto item) { this->model_.soundFeedback_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.soundFeedback_.value()));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION",
+ std::string{},
+ [this](auto item) { Singleton<AppContext>::instance().push(std::make_unique<StatusBarInformationPresenter>()); } //TODO: add StatusBarInformationPresenter
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_SBODY_SELECT_WHICH_INFORMATION_FROM_INDICATORS_SHOWN_ON_THE_STATUS_BAR_WILL_BE_READ_OUT_WHEN_YOU_TRIPLE_"
+ "TAP_THE_SCREEN_WITH_TWO_FINGERS_MSG"));
+
+ model_.speechRate_.attach([this](auto value) {
+ auto item = groups_[0].items_[0].get();
+ item->description_ = this->speechRatePercent();
+ });
+
+ model_.keyboardFeedback_.attach([this](auto state) {
+ auto item = groups_[0].items_[1].get();
+ item->widgetState_ = state;
+ });
+
+ model_.readUsageHints_.attach([this](auto state) {
+ auto item = groups_[0].items_[2].get();
+ item->widgetState_ = state;
+ });
+
+ model_.vibrationFeedback_.attach([this](auto state) {
+ auto item = groups_[0].items_[3].get();
+ item->widgetState_ = state;
+ });
+
+ model_.soundFeedback_.attach([this](auto state) {
+ auto item = groups_[0].items_[4].get();
+ item->widgetState_ = state;
+ });
+}
+
+std::string ScreenReaderSettingsPresenter::speechRatePercent()
+{
+ auto val = static_cast<size_t>(utils::rescale(model_.speechRate_.value(), utils::Range<size_t>{model_.speechRateMin_, model_.speechRateMax_}) * 100);
+ return std::to_string(val) + "%";
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCREEN_READER_SETTINGS_PRESENTER_HPP
+#define SCREEN_READER_SETTINGS_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "ScreenReaderSettingsModel.hpp"
+
+class ScreenReaderSettingsPresenter : public ListPresenter
+{
+ public:
+ ScreenReaderSettingsPresenter();
+
+ private:
+ std::string speechRatePercent();
+ ScreenReaderSettingsModel model_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SelectActionPagePresenter.hpp"
+
+#include "AppContext.hpp"
+
+SelectActionPagePresenter::SelectActionPagePresenter(std::string switchId, std::string userName, ChangeType changeType, size_t countOfPagesToPop, std::string activityId, bool locally)
+ : switchId_(std::move(switchId)), userName_(std::move(userName)), changeType_(changeType), countOfPagesToPop_(countOfPagesToPop)
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SELECT_ACTION");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+
+ for (auto &activity : model_.getBindableActivityTypes()) {
+ items.push_back(std::make_unique<ListItem>(
+ activity.name,
+ std::string{},
+ [=](auto item) {
+ this->addOrUpdateSwitchConfigurationItem(activity.id, locally);
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ activityId == activity.id));
+ }
+}
+
+void SelectActionPagePresenter::addOrUpdateSwitchConfigurationItem(const std::string &activityType, bool locally)
+{
+ switch (changeType_) {
+ case ChangeType::ADD:
+ model_.addSwitch({switchId_, userName_, activityType});
+ break;
+ case ChangeType::UPDATE:
+ if (locally)
+ Singleton<AppContext>::instance().sharedPreferences.insert_or_assign(switchId_, activityType);
+ else
+ model_.updateSwitch({switchId_, userName_, activityType});
+ break;
+ default:
+ ASSERT(0, "Unhandled change type");
+ break;
+ }
+ Singleton<AppContext>::instance().pop(countOfPagesToPop_ + 1);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SELECT_ACTION_PAGE_PRESENTER_HPP
+#define SELECT_ACTION_PAGE_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "SelectActionPageModel.hpp"
+#include "UniversalSwitchTypes.hpp"
+
+class SelectActionPagePresenter : public ListPresenter
+{
+ public:
+ SelectActionPagePresenter(std::string switchId, std::string userName, ChangeType changeType, size_t countOfPagesToPop, std::string activityId = {}, bool locally = false);
+
+ private:
+ void addOrUpdateSwitchConfigurationItem(const std::string &activityType, bool locally);
+ const std::string switchId_;
+ const std::string userName_;
+ ChangeType changeType_;
+ const size_t countOfPagesToPop_;
+ SelectActionPageModel model_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SingleInteractionIntervalPresenter.hpp"
+
+SingleInteractionIntervalPresenter::SingleInteractionIntervalPresenter()
+ : SpinnerPresenterWithToggle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT")
+{
+ state_ = model_.state_.value();
+ state_.attach([this](auto state) {
+ model_.state_ = state;
+ });
+
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> SingleInteractionIntervalPresenter::getRange()
+{
+ return model_.range_;
+}
+double SingleInteractionIntervalPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string SingleInteractionIntervalPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
+
+std::string SingleInteractionIntervalPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SINGLE_INTERACTION_INTERVAL_PRESENTER_HPP_
+#define SINGLE_INTERACTION_INTERVAL_PRESENTER_HPP_
+
+#include "SingleInteractionIntervalModel.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+
+class SingleInteractionIntervalPresenter : public SpinnerPresenterWithToggle
+{
+ public:
+ SingleInteractionIntervalPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ SingleInteractionIntervalModel model_;
+};
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SoundPresenter.hpp"
+
+SoundPresenter::SoundPresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND");
+
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ model_.state_.value() ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF",
+ std::string{},
+ [this](auto item) {
+ this->model_.state_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.state_.value()));
+ model_.state_.attach([this](auto val) {
+ groups_[0].items_[0]->title_ = val ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF";
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_SOUND"));
+
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND_VOLUME");
+ auto &radioItems = groups_.back().items_;
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "Match media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.value_ = 1.0;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.value_.value() == 1.0));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "75% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.value_ = 0.75;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.value_.value() == 0.75));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "50% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.value_ = 0.50;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.value_.value() == 0.50));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "25% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.value_ = 0.25;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.value_.value() == 0.25));
+}
+
+void SoundPresenter::updateRadioItems()
+{
+ for (auto i = 1; i <= 4; ++i) {
+ auto idx = 4 - i;
+ groups_[1].items_[idx]->widgetState_ = model_.value_.value() == 0.25 * i;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SOUND_PRESENTER_HPP
+#define SOUND_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "SoundModel.hpp"
+
+class SoundPresenter : public ListPresenter
+{
+ public:
+ SoundPresenter();
+
+ private:
+ void updateRadioItems();
+
+ SoundModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SpinnerPresenter.hpp"
+
+#include <sstream>
+
+SpinnerPresenter::SpinnerPresenter(std::string title)
+ : Presenter(title)
+{}
+
+std::string SpinnerPresenter::getRangeDescription()
+{
+ std::ostringstream out;
+ if (getStep() < 1.0)
+ out.precision(1);
+ else
+ out.precision(0);
+
+ out << std::fixed << "Accepted range: " << getRange().begin << " to " << getRange().end; // TODO translation
+
+ return out.str();
+}
+
+bool SpinnerPresenter::isEditable()
+{
+ return true;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SPINNER_PRESENTER_HPP
+#define SPINNER_PRESENTER_HPP
+
+#include "ObservableProperty.hpp"
+#include "Presenter.hpp"
+#include "TranslatedString.hpp"
+#include "utils.hpp"
+
+#include <functional>
+#include <string>
+
+class SpinnerPresenter : public Presenter
+{
+ public:
+ SpinnerPresenter(std::string title);
+
+ virtual utils::Range<double> getRange() = 0;
+ virtual double getStep() = 0;
+ virtual bool isEditable();
+ virtual std::string getLabel() = 0;
+ virtual std::string getFormat() = 0;
+
+ std::string getRangeDescription();
+
+ ObservableProperty<double> value_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SPINNER_PRESENTER_WITH_TOGGLE_HPP
+#define SPINNER_PRESENTER_WITH_TOGGLE_HPP
+
+#include "SpinnerPresenter.hpp"
+
+class SpinnerPresenterWithToggle : public SpinnerPresenter
+{
+ public:
+ using SpinnerPresenter::SpinnerPresenter;
+
+ ObservableProperty<bool> state_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "StatusBarInformationPresenter.hpp"
+
+StatusBarInformationPresenter::StatusBarInformationPresenter()
+:ListPresenter("IDS_ACCS_TMBODY_STATUS_BAR_INFORMATION")
+{
+ groups_.emplace_back("");
+
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_HEADER_TIME",
+ std::string{},
+ [this](auto item) { this->model_.timeEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.timeEnabled_.value()
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_DATE",
+ std::string{},
+ [this](auto item) { this->model_.dateEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.dateEnabled_.value()
+ ));
+
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_BATTERY",
+ std::string{},
+ [this](auto item) { this->model_.batteryEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.batteryEnabled_.value()
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_SIGNAL_STRENGTH",
+ std::string{},
+ [this](auto item) { this->model_.signalStrenghtEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.signalStrenghtEnabled_.value()
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_BLUETOOTH",
+ std::string{},
+ [this](auto item) { this->model_.bluetoothEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.bluetoothEnabled_.value()
+ ));
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ST_BODY_MISSED_EVENTS",
+ std::string{},
+ [this](auto item) { this->model_.missedEventsEnabled_ = item->widgetState_.value(); },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.missedEventsEnabled_.value()
+ ));
+
+
+ model_.timeEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[0].get();
+ item->widgetState_ = state;
+ });
+
+ model_.dateEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[1].get();
+ item->widgetState_ = state;
+ });
+
+ model_.batteryEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[2].get();
+ item->widgetState_ = state;
+ });
+
+ model_.signalStrenghtEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[3].get();
+ item->widgetState_ = state;
+ });
+
+ model_.bluetoothEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[4].get();
+ item->widgetState_ = state;
+ });
+
+ model_.missedEventsEnabled_.attach([this](auto state) {
+ auto item = groups_[0].items_[5].get();
+ item->widgetState_ = state;
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef STATUS_BAR_INFORMATION_PRESENTER_HPP
+#define STATUS_BAR_INFORMATION_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "StatusBarInformationModel.hpp"
+
+class StatusBarInformationPresenter : public ListPresenter
+{
+ public:
+ StatusBarInformationPresenter();
+
+ private:
+ StatusBarInformationModel model_;
+
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SwitchesPagePresenter.hpp"
+
+#include "AddSwitchPagePresenter.hpp"
+#include "AppContext.hpp"
+#include "RemoveSwitchesPagePresenter.hpp"
+#include "SelectActionPagePresenter.hpp"
+#include "UniversalSwitchConstants.hpp"
+#include "UpdateAccessoriesSwitchPagePresenter.hpp"
+
+SwitchesPagePresenter::SwitchesPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES");
+ groups_.emplace_back("");
+
+ deleteSwitchesAction_ = addAction(std::make_unique<Action>("titleRightAction", "IDS_ACCS_DELETE_CAPS", [this](auto action) {
+ Singleton<AppContext>::instance().push(std::make_unique<RemoveSwitchesPagePresenter>());
+ },
+ true));
+ updateSwitchDeleteAction();
+ addItemsToList();
+ model_.switchesConfigurationChanged_.attach([this](auto timeStamp) {
+ this->updateSwitchDeleteAction();
+ groups_.back().items_.clear();
+ this->addItemsToList();
+ if (this->onListUpdate_)
+ this->onListUpdate_();
+ });
+}
+
+void SwitchesPagePresenter::addItemsToList()
+{
+ auto &items = groups_.back().items_;
+ auto switches = model_.getAllSwitchConfigurationItems();
+ for (auto &oneSwitch : switches) {
+ items.push_back(std::make_unique<ListItem>(
+ oneSwitch.userName,
+ model_.getActivityName(oneSwitch.activityType),
+ [this, oneSwitch](auto item) {
+ this->createUpdatePage(oneSwitch);
+ }));
+ }
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES_ADD_SWITCH",
+ std::string{},
+ [this](auto item) {
+ Singleton<AppContext>::instance().push(std::make_unique<AddSwitchPagePresenter>());
+ },
+ ListItem::WidgetType::icon,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ true,
+ ACCESSIBILITY_UNIVERSAL_SWITCH_PLUS_ICON));
+}
+
+void SwitchesPagePresenter::createUpdatePage(const SwitchConfigurationItem &item)
+{
+ auto tokens = utils::stringSplitByDelimiter(item.switchId, '_');
+ if (!tokens.empty()) {
+ if (tokens[0] == ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER) {
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(item.switchId, item.userName, ChangeType::UPDATE, 0, item.activityType));
+ return;
+ }
+ if (tokens[0] == ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER) {
+ Singleton<AppContext>::instance().push(std::make_unique<UpdateAccessoriesSwitchPagePresenter>(item.switchId));
+ return;
+ }
+ if (tokens[0] == ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER) {
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(item.switchId, item.userName, ChangeType::UPDATE, 0, item.activityType));
+ return;
+ }
+ }
+}
+
+void SwitchesPagePresenter::updateSwitchDeleteAction()
+{
+ if (model_.getAllSwitchConfigurationItems().size() == 0)
+ deleteSwitchesAction_->enabled_ = false;
+ else
+ deleteSwitchesAction_->enabled_ = true;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SWITCHES_PAGE_PRESENTER_HPP
+#define SWITCHES_PAGE_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "SwitchesPageModel.hpp"
+
+class SwitchesPagePresenter : public ListPresenter
+{
+ public:
+ SwitchesPagePresenter();
+
+ private:
+ void addItemsToList();
+ void createUpdatePage(const SwitchConfigurationItem &item);
+ void updateSwitchDeleteAction();
+ SwitchesPageModel model_;
+ Action *deleteSwitchesAction_ = nullptr;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "TapDurationPresenter.hpp"
+
+TapDurationPresenter::TapDurationPresenter()
+ : SpinnerPresenterWithToggle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION")
+{
+ state_ = model_.state_.value();
+ state_.attach([this](auto state) {
+ model_.state_ = state;
+ });
+
+ value_ = model_.value_.value();
+ value_.attach([this](auto val) {
+ model_.value_ = val;
+ });
+}
+
+utils::Range<double> TapDurationPresenter::getRange()
+{
+ return model_.range_;
+}
+
+double TapDurationPresenter::getStep()
+{
+ return model_.step_;
+}
+
+std::string TapDurationPresenter::getFormat()
+{
+ return "%1.1f seconds";
+}
+
+std::string TapDurationPresenter::getLabel()
+{
+ return "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION";
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TAP_DURATION_PRESENTER_HPP_
+#define TAP_DURATION_PRESENTER_HPP_
+
+#include "SpinnerPresenterWithToggle.hpp"
+#include "TapDurationModel.hpp"
+
+class TapDurationPresenter : public SpinnerPresenterWithToggle
+{
+ public:
+ TapDurationPresenter();
+
+ utils::Range<double> getRange() override;
+ double getStep() override;
+ std::string getLabel() override;
+ std::string getFormat() override;
+
+ private:
+ TapDurationModel model_;
+};
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "TextToSpeechPresenter.hpp"
+
+#include "utils.hpp"
+
+TextToSpeechPresenter::TextToSpeechPresenter()
+ : ListPresenter("IDS_ST_BODY_SPEECH_RATE")
+{
+ groups_.emplace_back("");
+
+ auto &items = groups_.back().items_;
+ auto speechRateItem = std::make_unique<ListItem>(
+ std::string{},
+ std::string{},
+ std::function<void(ListItem * item)>{},
+ ListItem::WidgetType::slider,
+ std::function<void(ListItem * item)>{},
+ [this](auto item) {
+ this->model_.speechRate_ = utils::rescale(static_cast<double>(item->value_),
+ utils::Range<double>{0.0, 1.0},
+ utils::Range<size_t>{this->model_.speechRateMin_, this->model_.speechRateMax_});
+ });
+ speechRateItem->value_ = utils::rescale<size_t, double>(model_.speechRate_.value(),
+ utils::Range<size_t>{this->model_.speechRateMin_, this->model_.speechRateMax_});
+ speechRateItem->range_ = {0.0, 1.0};
+ speechRateItem->step_ = 0.05;
+
+ items.push_back(std::move(speechRateItem));
+
+ model_.speechRate_.attach([this](auto value) {
+ auto &item = groups_[0].items_[0];
+ item->value_ = utils::rescale<size_t, double>(value, utils::Range<size_t>{this->model_.speechRateMin_, this->model_.speechRateMax_});
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEXT_TO_SPEECH_PRESENTER_HPP
+#define TEXT_TO_SPEECH_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "TextToSpeechModel.hpp"
+
+class TextToSpeechPresenter : public ListPresenter
+{
+ public:
+ TextToSpeechPresenter();
+
+ private:
+ TextToSpeechModel model_;
+
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UniversalSwitchPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "NoSwitchesModalPresenter.hpp"
+#include "UniversalSwitchSettingsPagePresenter.hpp"
+
+UniversalSwitchPagePresenter::UniversalSwitchPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH");
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ model_.sentinel_->interactionServiceState_.value() ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF",
+ std::string{},
+ [this](auto item) {
+ if (!item->widgetState_.value())
+ model_.sentinel_->setInteractionServiceState(false);
+ else if (model_.atLeastOneSwitchConfigured())
+ model_.sentinel_->setInteractionServiceState(true);
+ else {
+ item->widgetState_ = false;
+ DEBUG("No switch configured");
+ Singleton<AppContext>::instance().pushModal(std::make_unique<NoSwitchesModalPresenter>());
+ }
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.sentinel_->interactionServiceState_.value()));
+ items.back()->enabled_ = model_.sentinel_->configurationServiceState_.value();
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_UNIVERSAL_SWITCH_COMMENT"));
+ items.back()->enabled_ = false;
+
+ addAction(std::make_unique<Action>("titleRightAction", "IDS_ACCS_SETTINGS_CAPS", [this](auto action) {
+ Singleton<AppContext>::instance().push(std::make_unique<UniversalSwitchSettingsPagePresenter>());
+ },
+ model_.sentinel_->configurationServiceState_.value()));
+
+ model_.sentinel_->configurationServiceState_.attach([this, &items](auto value) {
+ this->getAction("titleRightAction")->enabled_ = value;
+ items.front()->enabled_ = value;
+ });
+
+ model_.sentinel_->interactionServiceState_.attach([this, &items](auto value) {
+ items.front()->title_ = value ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF";
+ items.front()->widgetState_ = value;
+ });
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_PAGE_PRESENTER_HPP
+#define UNIVERSAL_SWITCH_PAGE_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "UniversalSwitchPageModel.hpp"
+
+class UniversalSwitchPagePresenter : public ListPresenter
+{
+ public:
+ UniversalSwitchPagePresenter();
+
+ private:
+ UniversalSwitchPageModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UniversalSwitchSettingsPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "AutoMoveIntervalPresenter.hpp"
+#include "AutoScanIntervalPresenter.hpp"
+#include "AutoTapPresenter.hpp"
+#include "CursorColorPagePresenter.hpp"
+#include "ManageMenuOptionsPagePresenter.hpp"
+#include "NumberOfAutoScanLoopsPresenter.hpp"
+#include "PauseOnFirstPresenter.hpp"
+#include "PointScanSpeedPresenter.hpp"
+#include "ScanDirectionPresenter.hpp"
+#include "ScanMethodPresenter.hpp"
+#include "SingleInteractionIntervalPresenter.hpp"
+#include "SoundPresenter.hpp"
+#include "SwitchesPagePresenter.hpp"
+#include "TapDurationPresenter.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VoicePresenter.hpp"
+
+UniversalSwitchSettingsPagePresenter::UniversalSwitchSettingsPagePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS");
+ createSwitchesGroup();
+ createScanningGropu();
+ createAdditionalSettingsGroup();
+ createFeedbackGroup();
+}
+
+void UniversalSwitchSettingsPagePresenter::createSwitchesGroup()
+{
+ groups_.emplace_back("");
+ groups_.back().items_.push_back(std::make_unique<ListItem>(std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SWITCHES"},
+ TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", model_.configuredSwitchesCount_.value()).str(),
+ [this](auto item) {
+ Singleton<AppContext>::instance().push(std::make_unique<SwitchesPagePresenter>());
+ DEBUG("Switches page");
+ }));
+ auto item = groups_.back().items_.back().get();
+ model_.configuredSwitchesCount_.attach([item](auto value) {
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", value).str();
+ });
+ model_.sentinel_->configurationServiceState_.attach([this, item](auto value) {
+ item->enabled_ = value;
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", model_.configuredSwitchesCount_.value()).str();
+ });
+ item->enabled_ = model_.sentinel_->configurationServiceState_.value();
+}
+
+void UniversalSwitchSettingsPagePresenter::createScanningGropu()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING");
+
+ auto &items = groups_.back().items_;
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN"},
+ std::string{},
+ [this](auto item) {
+ DEBUG("Auto scan");
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ autoScanModel_.enabled_.value()));
+ auto item = items.back().get();
+ autoScanModel_.enabled_.attach([item](auto value) {
+ item->widgetState_ = value;
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_AUTO_SCAN_INT"},
+ TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", autoScanModel_.interval_.value()).str(),
+ [this](auto item) {
+ DEBUG("Auto scan interval");
+ Singleton<AppContext>::instance().push(std::make_unique<AutoScanIntervalPresenter>());
+ }));
+ item = items.back().get();
+ autoScanModel_.interval_.attach([item](auto value) {
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", value).str();
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_NUM_OF_SCANS"},
+ std::to_string(autoScanLoopsModel_.value_.value()),
+ [this](auto item) {
+ DEBUG("Scan num");
+ Singleton<AppContext>::instance().push(std::make_unique<NumberOfAutoScanLoopsPresenter>());
+ }));
+ item = items.back().get();
+ autoScanLoopsModel_.value_.attach([item](auto value) {
+ item->description_ = std::to_string(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_METHOD"},
+ ScanMethodPresenter::scanMethodToString(scanMethodModel_.method_.value()),
+ [this](auto item) {
+ DEBUG("Scan method");
+ Singleton<AppContext>::instance().push(std::make_unique<ScanMethodPresenter>());
+ }));
+ item = items.back().get();
+ scanMethodModel_.method_.attach([item, this](auto value) {
+ item->description_ = ScanMethodPresenter::scanMethodToString(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_SCAN_DIR"},
+ ScanDirectionPresenter::scanDirectionToString(scanDirectionModel_.direction_.value()),
+ [this](auto item) {
+ DEBUG("Scan dir");
+ Singleton<AppContext>::instance().push(std::make_unique<ScanDirectionPresenter>());
+ }));
+ item = items.back().get();
+ scanDirectionModel_.direction_.attach([item, this](auto value) {
+ item->description_ = ScanDirectionPresenter::scanDirectionToString(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_PT_SPEED"},
+ std::to_string(pointScanSpeedModel_.value_.value()),
+ [this](auto item) {
+ DEBUG("Scan point speed");
+ Singleton<AppContext>::instance().push(std::make_unique<PointScanSpeedPresenter>());
+ }));
+ item = items.back().get();
+ pointScanSpeedModel_.value_.attach([item](auto value) {
+ item->description_ = std::to_string(value);
+ });
+}
+
+void UniversalSwitchSettingsPagePresenter::createAdditionalSettingsGroup()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST"},
+ pauseOnFirstModel_.state_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", pauseOnFirstModel_.value_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("Pause on first");
+ Singleton<AppContext>::instance().push(std::make_unique<PauseOnFirstPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ pauseOnFirstModel_.state_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ pauseOnFirstModel_.state_.value()));
+ auto item = items.back().get();
+ auto pauseOnFirstCb = [this, item](auto value) {
+ item->widgetState_ = pauseOnFirstModel_.state_.value();
+ if (pauseOnFirstModel_.state_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", pauseOnFirstModel_.value_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ pauseOnFirstModel_.state_.attach(pauseOnFirstCb);
+ pauseOnFirstModel_.value_.attach(pauseOnFirstCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION"},
+ tapDurationModel_.state_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", tapDurationModel_.value_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("tap duration widget");
+ Singleton<AppContext>::instance().push(std::make_unique<TapDurationPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("tap duration");
+ tapDurationModel_.state_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ tapDurationModel_.state_.value()));
+ item = items.back().get();
+ auto tapDurationCb = [this, item](auto value) {
+ item->widgetState_ = tapDurationModel_.state_.value();
+ if (tapDurationModel_.state_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", tapDurationModel_.value_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ tapDurationModel_.state_.attach(tapDurationCb);
+ tapDurationModel_.value_.attach(tapDurationCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT"},
+ singleInteractionIntervalModel_.state_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", singleInteractionIntervalModel_.value_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("single interaction interval widget");
+ Singleton<AppContext>::instance().push(std::make_unique<SingleInteractionIntervalPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ singleInteractionIntervalModel_.state_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ singleInteractionIntervalModel_.state_.value()));
+ item = items.back().get();
+ auto snglIntCb = [this, item](auto value) {
+ item->widgetState_ = singleInteractionIntervalModel_.state_.value();
+ if (singleInteractionIntervalModel_.state_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", singleInteractionIntervalModel_.value_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ singleInteractionIntervalModel_.state_.attach(snglIntCb);
+ singleInteractionIntervalModel_.value_.attach(snglIntCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP"},
+ autoTapModel_.state_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", autoTapModel_.value_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("auto tap widget");
+ Singleton<AppContext>::instance().push(std::make_unique<AutoTapPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ autoTapModel_.state_ = item->widgetState_.value();
+ DEBUG("auto tap");
+ },
+ std::function<void(ListItem * item)>{},
+ autoTapModel_.state_.value()));
+ item = items.back().get();
+ auto autoTapCb = [this, item](auto value) {
+ item->widgetState_ = autoTapModel_.state_.value();
+ if (autoTapModel_.state_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", autoTapModel_.value_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ autoTapModel_.state_.attach(autoTapCb);
+ autoTapModel_.value_.attach(autoTapCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_MOVE_INT"},
+ autoMoveIntervalModel_.state_.value() ? TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", autoMoveIntervalModel_.value_.value()).str()
+ : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("auto move widget");
+ Singleton<AppContext>::instance().push(std::make_unique<AutoMoveIntervalPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ autoMoveIntervalModel_.state_ = item->widgetState_.value();
+ DEBUG("auto move");
+ },
+ std::function<void(ListItem * item)>{},
+ autoMoveIntervalModel_.state_.value()));
+ item = items.back().get();
+ auto autoMoveCb = [this, item](auto value) {
+ item->widgetState_ = autoMoveIntervalModel_.state_.value();
+ if (autoMoveIntervalModel_.state_.value())
+ item->description_ = TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", autoMoveIntervalModel_.value_.value()).str();
+ else
+ item->description_ = "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ };
+ autoMoveIntervalModel_.state_.attach(autoMoveCb);
+ autoMoveIntervalModel_.value_.attach(autoMoveCb);
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD"},
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_AUTO_TAP_KBD_SUB"},
+ [this](auto item) {
+ model_.autoTapKeyboardState_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.autoTapKeyboardState_.value()));
+ item = items.back().get();
+ model_.autoTapKeyboardState_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ });
+}
+
+void UniversalSwitchSettingsPagePresenter::createFeedbackGroup()
+{
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_CURSOR_CL"},
+ cursorColorModel_.getColorText(cursorColorModel_.cursorColor_.value()),
+ [this](auto item) {
+ Singleton<AppContext>::instance().push(std::make_unique<CursorColorPagePresenter>());
+ }));
+ auto item = items.back().get();
+ cursorColorModel_.cursorColor_.attach([item, this](auto value) {
+ item->description_ = this->cursorColorModel_.getColorText(value);
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_SOUND"},
+ soundModel_.state_.value() ? utils::doubleToPercent(soundModel_.value_.value()) + " of media volume" : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"},
+ [this](auto item) {
+ DEBUG("feedback sound widget");
+ Singleton<AppContext>::instance().push(std::make_unique<SoundPresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("feedback sound");
+ soundModel_.state_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ soundModel_.state_.value()));
+ item = items.back().get();
+ soundModel_.state_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ item->description_ = value ? utils::doubleToPercent(soundModel_.value_.value()) + " of media volume" : "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ });
+ soundModel_.value_.attach([item, this](auto value) {
+ item->description_ = soundModel_.state_.value() ? utils::doubleToPercent(soundModel_.value_.value()) + " of media volume" : "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF";
+ });
+
+ auto speechRate = "Speech rate: " + utils::doubleToString(voiceModel_.rate_.value(), 1);
+ auto mediaVolume = "Speech volume: " + utils::doubleToPercent(voiceModel_.volume_.value()) + " of media volume";
+ auto desc = voiceModel_.state_.value() ? speechRate + "<br>" + mediaVolume : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"};
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE"},
+ desc,
+ [this](auto item) {
+ DEBUG("feedback sound widget");
+ Singleton<AppContext>::instance().push(std::make_unique<VoicePresenter>());
+ },
+ ListItem::WidgetType::toggle,
+ [this](auto item) {
+ DEBUG("auto move");
+ voiceModel_.state_ = item->widgetState_.value();
+ },
+ std::function<void(ListItem * item)>{},
+ voiceModel_.state_.value()));
+ item = items.back().get();
+ voiceModel_.state_.attach([item, this](auto value) {
+ item->widgetState_ = value;
+ auto speechRate = "Speech rate: " + utils::doubleToPercent(voiceModel_.rate_.value());
+ auto mediaVolume = "Speech volume: " + utils::doubleToPercent(voiceModel_.volume_.value()) + " of media volume";
+ auto desc = voiceModel_.state_.value() ? speechRate + "<br>" + mediaVolume : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"};
+ item->description_ = desc;
+ });
+ voiceModel_.rate_.attach([item, this](auto value) {
+ auto speechRate = "Speech rate: " + utils::doubleToPercent(voiceModel_.rate_.value());
+ auto mediaVolume = "Speech volume: " + utils::doubleToPercent(voiceModel_.volume_.value()) + " of media volume";
+ auto desc = voiceModel_.state_.value() ? speechRate + "<br>" + mediaVolume : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"};
+ item->description_ = desc;
+ });
+ voiceModel_.volume_.attach([item, this](auto value) {
+ auto speechRate = "Speech rate: " + utils::doubleToPercent(voiceModel_.rate_.value());
+ auto mediaVolume = "Speech volume: " + utils::doubleToPercent(voiceModel_.volume_.value()) + " of media volume";
+ auto desc = voiceModel_.state_.value() ? speechRate + "<br>" + mediaVolume : std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_OFF"};
+ item->description_ = desc;
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE"},
+ std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_MANAGE_SUB"},
+ [this](auto item) {
+ Singleton<AppContext>::instance().push(std::make_unique<ManageMenuOptionsPagePresenter>());
+ }));
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_SETTINGS_PAGE_PRESENTER_HPP
+#define UNIVERSAL_SWITCH_SETTINGS_PAGE_PRESENTER_HPP
+
+#include "AutoMoveIntervalModel.hpp"
+#include "AutoScanModel.hpp"
+#include "AutoTapModel.hpp"
+#include "CursorColorModel.hpp"
+#include "ListPresenter.hpp"
+#include "NumberOfAutoScanLoopsModel.hpp"
+#include "PauseOnFirstModel.hpp"
+#include "PointScanSpeedModel.hpp"
+#include "ScanDirectionModel.hpp"
+#include "ScanMethodModel.hpp"
+#include "SingleInteractionIntervalModel.hpp"
+#include "SoundModel.hpp"
+#include "TapDurationModel.hpp"
+#include "UniversalSwitchSettingsPageModel.hpp"
+#include "UniversalSwitchTypes.hpp"
+#include "VoiceModel.hpp"
+
+class UniversalSwitchSettingsPagePresenter : public ListPresenter
+{
+ public:
+ UniversalSwitchSettingsPagePresenter();
+
+ private:
+ void createSwitchesGroup();
+ void createScanningGropu();
+ void createAdditionalSettingsGroup();
+ void createFeedbackGroup();
+
+ UniversalSwitchSettingsPageModel model_;
+ AutoScanModel autoScanModel_;
+ NumberOfAutoScanLoopsModel autoScanLoopsModel_;
+ PointScanSpeedModel pointScanSpeedModel_;
+ PauseOnFirstModel pauseOnFirstModel_;
+ TapDurationModel tapDurationModel_;
+ SingleInteractionIntervalModel singleInteractionIntervalModel_;
+ AutoTapModel autoTapModel_;
+ AutoMoveIntervalModel autoMoveIntervalModel_;
+ SoundModel soundModel_;
+ VoiceModel voiceModel_;
+ CursorColorModel cursorColorModel_;
+ ScanMethodModel scanMethodModel_;
+ ScanDirectionModel scanDirectionModel_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UpdateAccessoriesSwitchPagePresenter.hpp"
+
+#include "AppContext.hpp"
+#include "SelectActionPagePresenter.hpp"
+
+UpdateAccessoriesSwitchPagePresenter::UpdateAccessoriesSwitchPagePresenter(std::string switchId) : switchId_(std::move(switchId))
+{
+ cancelAction_ = addAction(std::make_unique<Action>("cancelAction",
+ "IDS_ACCS_UNIVERSAL_SWITCH_CANCEL",
+ [this](auto action) {
+ Singleton<AppContext>::instance().pop();
+ }));
+ saveAction_ = addAction(std::make_unique<Action>("saveAction",
+ "IDS_ACCS_UNIVERSAL_SWITCH_SAVE",
+ [this](auto action) {
+ model_.updateSwitch(SwitchConfigurationItem{switchId_, entryItem_->entryText_.value(), activityId_});
+ Singleton<AppContext>::instance().pop();
+ }));
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_UNIVERSAL_SWITCH_NAME",
+ std::string{},
+ std::function<void(ListItem *)>{},
+ ListItem::WidgetType::entry,
+ std::function<void(ListItem *)>{},
+ [this](auto item) {
+ if (item->entryText_.value().empty())
+ saveAction_->enabled_ = false;
+ else
+ saveAction_->enabled_ = true;
+ }));
+
+ entryItem_ = items.back().get();
+ auto switchInfo = model_.getDetailsForSwitchConfigurationItem(switchId_);
+ entryItem_->entryText_ = switchInfo.userName;
+ activityId_ = switchInfo.activityType;
+
+ items.push_back(std::make_unique<ListItem>(
+ "IDS_ACCS_UNIVERSAL_SWITCH_ACTION",
+ model_.getActivityDetails(switchInfo.activityType).name,
+ [this](auto item) {
+ Singleton<AppContext>::instance().push(std::make_unique<SelectActionPagePresenter>(switchId_, entryItem_->entryText_.value(), ChangeType::UPDATE, 0, activityId_, true));
+ },
+ ListItem::WidgetType::none,
+ std::function<void(ListItem *)>{},
+ std::function<void(ListItem *)>{},
+ false));
+ actionItem_ = items.back().get();
+}
+
+void UpdateAccessoriesSwitchPagePresenter::onTop()
+{
+ auto &sharedPreferences = Singleton<AppContext>::instance().sharedPreferences;
+ auto val = sharedPreferences.find(switchId_);
+ if (val != sharedPreferences.end()) {
+ activityId_ = val->second;
+ actionItem_->description_ = model_.getActivityDetails(activityId_).name;
+ }
+}
+
+UpdateAccessoriesSwitchPagePresenter::~UpdateAccessoriesSwitchPagePresenter()
+{
+ Singleton<AppContext>::instance().sharedPreferences.erase(switchId_);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UPDATE_ACCESSORIES_SWITCH_PAGE_PRESENTER
+#define UPDATE_ACCESSORIES_SWITCH_PAGE_PRESENTER
+
+#include "ListPresenter.hpp"
+#include "UpdateAccessoriesSwitchPageModel.hpp"
+
+class UpdateAccessoriesSwitchPagePresenter : public ListPresenter
+{
+ public:
+ UpdateAccessoriesSwitchPagePresenter(std::string switchId);
+ ~UpdateAccessoriesSwitchPagePresenter();
+
+ private:
+ void onTop() override;
+ std::string switchId_;
+ std::string activityId_;
+ Action *saveAction_ = nullptr;
+ Action *cancelAction_ = nullptr;
+ ListItem *entryItem_ = nullptr;
+ ListItem *actionItem_ = nullptr;
+ UpdateAccessoriesSwitchPageModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "VoicePresenter.hpp"
+
+VoicePresenter::VoicePresenter()
+{
+ setTitle("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE");
+
+ groups_.emplace_back("");
+ auto &items = groups_.back().items_;
+
+ items.push_back(std::make_unique<ListItem>(
+ model_.state_.value() ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF",
+ std::string{},
+ [this](auto item) {
+ this->model_.state_ = item->widgetState_.value();
+ },
+ ListItem::WidgetType::toggle,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.state_.value()));
+ model_.state_.attach([this](auto val) {
+ groups_[0].items_[0]->title_ = val ? "IDS_ST_BODY_ON" : "IDS_ST_BODY_OFF";
+ });
+
+ items.push_back(std::make_unique<ListItem>(
+ std::string{},
+ "IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_FEEDBACK_VOICE"));
+
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_RATE");
+ auto speechRateItem = std::make_unique<ListItem>(
+ std::string{},
+ std::string{},
+ std::function<void(ListItem * item)>{},
+ ListItem::WidgetType::slider,
+ std::function<void(ListItem * item)>{},
+ [this](auto item) {
+ this->model_.rate_ = item->value_;
+ });
+ speechRateItem->value_ = model_.rate_.value();
+ speechRateItem->range_ = {model_.range_.begin, model_.range_.end};
+ speechRateItem->step_ = model_.step_;
+
+ groups_.back().items_.push_back(std::move(speechRateItem));
+
+ groups_.emplace_back("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_FEEDBACK_VOICE_SPEECH_VOLUME");
+ auto &radioItems = groups_.back().items_;
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "Match media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.volume_ = 1.0;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.volume_.value() == 1.0));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "75% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.volume_ = 0.75;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.volume_.value() == 0.75));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "50% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.volume_ = 0.50;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.volume_.value() == 0.50));
+
+ radioItems.push_back(std::make_unique<ListItem>(
+ "25% of media volume",
+ std::string{},
+ [this](auto item) {
+ this->model_.volume_ = 0.25;
+ this->updateRadioItems();
+ },
+ ListItem::WidgetType::radio,
+ std::function<void(ListItem * item)>{},
+ std::function<void(ListItem * item)>{},
+ model_.volume_.value() == 0.25));
+}
+
+void VoicePresenter::updateRadioItems()
+{
+ for (auto i = 1; i <= 4; ++i) {
+ auto idx = 4 - i;
+ groups_[2].items_[idx]->widgetState_ = model_.volume_.value() == 0.25 * i;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef VOICE_PRESENTER_HPP
+#define VOICE_PRESENTER_HPP
+
+#include "ListPresenter.hpp"
+#include "VoiceModel.hpp"
+
+class VoicePresenter : public ListPresenter
+{
+ public:
+ VoicePresenter();
+
+ private:
+ void updateRadioItems();
+
+ VoiceModel model_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "DBus.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+#include <sstream>
+//#include "Atspi.hpp"
+#include <Ecore_Input.h>
+#include <Eldbus.h>
+#include <iostream>
+#include <mutex>
+
+#define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
+
+#undef EINA_FALSE
+#undef EINA_TRUE
+#define EINA_TRUE static_cast<Eina_Bool>(1)
+#define EINA_FALSE static_cast<Eina_Bool>(0)
+
+//#define DBUS_DEBUG(...) do { DBus::debugPrint(__FILE__, __LINE__, __VA_ARGS__); } while (0)
+using namespace DBus;
+
+std::atomic<unsigned int> DBus::detail::CallId::LastId{0};
+static std::function<void(const char *, size_t)> debugPrinter;
+static std::mutex debugLock;
+
+thread_local std::string DBus::DBusServer::currentObjectPath;
+thread_local DBusWrapper::ConnectionPtr DBus::DBusServer::currentConnection;
+
+void DBus::setDebugPrinter(std::function<void(const char *, size_t)> printer)
+{
+ std::lock_guard<std::mutex> lock(debugLock);
+ debugPrinter = std::move(printer);
+}
+
+void DBus::debugPrint(const char *file, size_t line, const char *format, ...)
+{
+ std::function<void(const char *, size_t)> debugPrintFunc;
+ {
+ std::lock_guard<std::mutex> lock(debugLock);
+ if (!debugPrinter)
+ return;
+ debugPrintFunc = debugPrinter;
+ }
+ std::vector<char> buf(4096);
+ int offset;
+ while (true) {
+ offset = snprintf(buf.data(), buf.size(), "%s:%u: ", file, static_cast<unsigned int>(line));
+ if (offset < 0)
+ return;
+ if (static_cast<size_t>(offset) < buf.size())
+ break;
+ buf.resize(offset + 1);
+ }
+
+ while (true) {
+ va_list args;
+ va_start(args, format);
+ int z = vsnprintf(buf.data() + offset, buf.size() - offset, format, args);
+ va_end(args);
+ if (z < 0)
+ return;
+ bool done = static_cast<size_t>(z) + static_cast<size_t>(offset) < buf.size();
+ buf.resize(static_cast<size_t>(z) + static_cast<size_t>(offset));
+ if (done)
+ break;
+ }
+ debugPrintFunc(buf.data(), buf.size());
+}
+
+DBusWrapper::ConnectionPtr DBus::getDBusConnectionByName(const std::string &name)
+{
+ return DBUS_W->eldbus_address_connection_get_impl(name);
+}
+
+DBusWrapper::ConnectionPtr DBus::getDBusConnectionByType(ConnectionType connectionType)
+{
+ return DBUS_W->eldbus_connection_get_impl(connectionType);
+}
+
+DBus::DBusClient::DBusClient(std::string busName, std::string pathName, std::string interfaceName, ConnectionType tp) : DBusClient(std::move(busName), std::move(pathName), std::move(interfaceName), getDBusConnectionByType(tp))
+{
+}
+
+DBus::DBusClient::DBusClient(std::string busName, std::string pathName, std::string interfaceName, const DBusWrapper::ConnectionPtr &conn)
+{
+ if (!conn)
+ connectionState->connection = getDBusConnectionByType(ConnectionType::SESSION);
+ else
+ connectionState->connection = conn;
+
+ std::ostringstream o;
+ o << "bus = " << busName << " path = " << pathName << " connection = " << DBUS_W->eldbus_connection_unique_name_get_impl(connectionState->connection);
+ info = o.str();
+
+ connectionState->object = DBUS_W->eldbus_object_get_impl(connectionState->connection, busName.c_str(), pathName.c_str());
+ if (connectionState->object) {
+ connectionState->proxy = DBUS_W->eldbus_proxy_get_impl(connectionState->object, interfaceName);
+ if (interfaceName != DBUS_INTERFACE_PROPERTIES) {
+ connectionState->propertiesProxy = DBUS_W->eldbus_proxy_get_impl(connectionState->object, DBUS_INTERFACE_PROPERTIES);
+ } else {
+ connectionState->propertiesProxy = DBUS_W->eldbus_proxy_copy_impl(connectionState->proxy);
+ }
+ }
+ connectionInfo = std::make_shared<ConnectionInfo>();
+ connectionInfo->busName = std::move(busName);
+ connectionInfo->pathName = std::move(pathName);
+ connectionInfo->interfaceName = std::move(interfaceName);
+}
+
+DBus::DBusServer::DBusServer(ConnectionType tp) : DBus::DBusServer(DBus::getDBusConnectionByType(tp))
+{
+}
+
+DBus::DBusServer::DBusServer(const DBusWrapper::ConnectionPtr &conn)
+{
+ if (!conn)
+ connection = getDBusConnectionByType(ConnectionType::SESSION);
+ else
+ connection = conn;
+}
+
+DBus::DBusInterfaceDescription::DBusInterfaceDescription(std::string interfaceName) : interfaceName(std::move(interfaceName))
+{
+}
+
+void DBus::DBusServer::addInterface(const std::string &pathName, DBusInterfaceDescription &dscr, bool fallback)
+{
+ DBUS_W->add_interface_impl(fallback, pathName, connection, destructorObject->destructors, dscr.interfaceName, dscr.methods, dscr.properties, dscr.signals);
+}
+
+std::string DBus::DBusServer::getBusName() const
+{
+ return getConnectionName(connection);
+}
+
+std::string DBus::getConnectionName(const DBusWrapper::ConnectionPtr &c)
+{
+ return DBUS_W->eldbus_connection_unique_name_get_impl(c);
+}
+
+bool DBus::DBusClient::getFromEinaValue(const _Eina_Value *v, void *dst)
+{
+ return eina_value_get(const_cast<Eina_Value *>(v), dst);
+}
+
+struct DefaultDBusWrapper : public DBusWrapper
+{
+ constexpr static int ELDBUS_CALL_TIMEOUT = 1000;
+
+ DefaultDBusWrapper()
+ {
+ }
+ ~DefaultDBusWrapper()
+ {
+ }
+#define DEFINE_GS(name, eldbus_name, unref_call) \
+ static eldbus_name *get(const std::shared_ptr<name> &a) \
+ { \
+ return static_cast<name##Impl *>(a.get())->Value; \
+ } \
+ static eldbus_name *release(const std::shared_ptr<name> &a) \
+ { \
+ auto z = static_cast<name##Impl *>(a.get())->Value; \
+ static_cast<name##Impl *>(a.get())->Value = nullptr; \
+ return z; \
+ } \
+ template <typename... ARGS> \
+ static std::shared_ptr<name> create(const eldbus_name *v, ARGS &&... args) \
+ { \
+ return std::make_shared<name##Impl>(const_cast<eldbus_name *>(v), std::forward<ARGS>(args)...); \
+ }
+
+#define DEFINE_TYPE(name, eldbus_name, unref_call) \
+ struct name##Impl : public name \
+ { \
+ eldbus_name *Value = nullptr; \
+ bool EraseOnExit = false; \
+ name##Impl(eldbus_name *Value, bool EraseOnExit = false) : Value(Value), EraseOnExit(EraseOnExit) {} \
+ ~name##Impl() \
+ { \
+ if (EraseOnExit && Value) { \
+ unref_call; \
+ } \
+ } \
+ }; \
+ DEFINE_GS(name, eldbus_name, unref_call)
+
+ struct ConnectionImpl : public Connection
+ {
+ Eldbus_Connection *Value = nullptr;
+ bool EraseOnExit = false;
+ ConnectionImpl(Eldbus_Connection *Value, bool EraseOnExit = false) : Value(Value), EraseOnExit(EraseOnExit)
+ {
+ ecore_event_init();
+ eldbus_init();
+ }
+ ~ConnectionImpl()
+ {
+ if (EraseOnExit && Value) {
+ eldbus_connection_unref(Value);
+ }
+ eldbus_shutdown();
+ ecore_event_shutdown();
+ }
+ };
+ struct MessageIterImpl : public MessageIter
+ {
+ Eldbus_Message_Iter *Value = nullptr, *Parent = nullptr;
+ bool EraseOnExit = false;
+ MessageIterImpl(Eldbus_Message_Iter *Value, Eldbus_Message_Iter *Parent, bool EraseOnExit = false) : Value(Value), Parent(Parent), EraseOnExit(EraseOnExit) {}
+ ~MessageIterImpl()
+ {
+ if (EraseOnExit && Value && Parent)
+ eldbus_message_iter_container_close(Parent, Value);
+ }
+ };
+
+ DEFINE_GS(Connection, Eldbus_Connection, )
+ DEFINE_GS(MessageIter, Eldbus_Message_Iter, )
+ DEFINE_TYPE(Message, Eldbus_Message, eldbus_message_unref(Value))
+ struct ProxyImpl : public Proxy
+ {
+ Eldbus_Proxy *Value = nullptr;
+ bool EraseOnExit = false;
+ std::vector<std::function<void()>> destructors;
+ ProxyImpl(Eldbus_Proxy *Value, bool EraseOnExit = false) : Value(Value), EraseOnExit(EraseOnExit) {}
+ ~ProxyImpl()
+ {
+ for (auto &it : destructors)
+ if (it)
+ it();
+ }
+ };
+ DEFINE_GS(Proxy, Eldbus_Proxy, )
+ DEFINE_TYPE(Object, Eldbus_Object, eldbus_object_unref(Value))
+ DEFINE_TYPE(Pending, Eldbus_Pending, )
+ DEFINE_TYPE(EventPropertyChanged, Eldbus_Proxy_Event_Property_Changed, )
+#undef DEFINE_TYPE
+
+ std::shared_ptr<Connection> eldbus_address_connection_get_impl(const std::string &addr) override
+ {
+ eldbus_init();
+ auto p = eldbus_address_connection_get(addr.c_str());
+ auto w = create(p, true);
+ eldbus_shutdown();
+ return w;
+ }
+
+#define eldbus_message_iter_arguments_append_impl_basic(type, sig) \
+ void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, type src) override \
+ { \
+ eldbus_message_iter_arguments_append(get(it), #sig, src); \
+ } \
+ bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, type &dst) override \
+ { \
+ return eldbus_message_iter_get_and_next(get(it), (#sig)[0], &dst); \
+ }
+
+ eldbus_message_iter_arguments_append_impl_basic(uint8_t, y)
+ eldbus_message_iter_arguments_append_impl_basic(uint16_t, q)
+ eldbus_message_iter_arguments_append_impl_basic(uint32_t, u)
+ eldbus_message_iter_arguments_append_impl_basic(uint64_t, t)
+ eldbus_message_iter_arguments_append_impl_basic(int16_t, n)
+ eldbus_message_iter_arguments_append_impl_basic(int32_t, i)
+ eldbus_message_iter_arguments_append_impl_basic(int64_t, x)
+ eldbus_message_iter_arguments_append_impl_basic(double, d)
+
+#undef eldbus_message_iter_arguments_append_impl_basic
+
+ void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, bool src) override
+ {
+ eldbus_message_iter_arguments_append(get(it), "b", src ? 1 : 0);
+ }
+ bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, bool &dst) override
+ {
+ unsigned char q;
+ auto z = eldbus_message_iter_get_and_next(get(it), 'b', &q);
+ dst = q != 0;
+ return z;
+ }
+ void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, const std::string &src) override
+ {
+ eldbus_message_iter_arguments_append(get(it), "s", src.c_str());
+ }
+ bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, std::string &dst) override
+ {
+ auto iter = get(it);
+ const char *q;
+ if (!eldbus_message_iter_get_and_next(iter, 's', &q)) {
+ if (!eldbus_message_iter_get_and_next(iter, 'o', &q))
+ return false;
+ }
+ dst = q;
+ return true;
+ }
+ void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, const ObjectPath &src) override
+ {
+ eldbus_message_iter_arguments_append(get(it), "o", src.value.c_str());
+ }
+ bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, ObjectPath &dst) override
+ {
+ const char *q;
+ if (!eldbus_message_iter_get_and_next(get(it), 'o', &q))
+ return false;
+ dst.value = q;
+ return true;
+ }
+
+ MessageIterPtr eldbus_message_iter_container_new_impl(const MessageIterPtr &it, int type, const std::string &sig) override
+ {
+ auto z = eldbus_message_iter_container_new(get(it), type, !sig.empty() ? sig.c_str() : NULL);
+ return create(z, get(it), true);
+ }
+ MessageIterPtr eldbus_message_iter_get_and_next_by_type_impl(const MessageIterPtr &it, int type) override
+ {
+ Eldbus_Message_Iter *entry;
+ if (!eldbus_message_iter_get_and_next(get(it), type, &entry))
+ return {};
+ return create(entry, get(it), false);
+ }
+ MessageIterPtr eldbus_message_iter_get_impl(const MessagePtr &msg, bool) override
+ {
+ return create(eldbus_message_iter_get(get(msg)), nullptr, false);
+ }
+ MessagePtr eldbus_proxy_method_call_new_impl(const ProxyPtr &proxy, const std::string &funcName)
+ {
+ return create(eldbus_proxy_method_call_new(get(proxy), funcName.c_str()));
+ }
+ MessagePtr eldbus_proxy_send_and_block_impl(const ProxyPtr &proxy, const MessagePtr &msg, double timeout) override
+ {
+ return create(eldbus_proxy_send_and_block(get(proxy), release(msg), timeout < 0 ? ELDBUS_TIMEOUT_INFINITE : timeout * 1000));
+ }
+ bool eldbus_message_error_get_impl(const MessagePtr &msg, std::string &name, std::string &text) override
+ {
+ const char *errname, *errmsg;
+ if (eldbus_message_error_get(get(msg), &errname, &errmsg)) {
+ name = errname;
+ text = errmsg;
+ return true;
+ }
+ return false;
+ }
+ std::string eldbus_message_signature_get_impl(const MessagePtr &msg) override
+ {
+ return eldbus_message_signature_get(get(msg));
+ }
+
+ static void callAsyncCb(void *data, const Eldbus_Message *msg, Eldbus_Pending *pending)
+ {
+ auto d = static_cast<SendCallback *>(data);
+ (*d)(create(msg, false));
+ }
+ static void pendingFreeCb(void *data, const void *)
+ {
+ auto d = static_cast<SendCallback *>(data);
+ delete d;
+ }
+ static void listenerCallbackFree(void *data, const void *)
+ {
+ auto d = static_cast<std::function<void(const Eldbus_Message *msg)> *>(data);
+ delete d;
+ }
+
+ PendingPtr eldbus_proxy_send_impl(const ProxyPtr &proxy, const MessagePtr &msg, const SendCallback &callback, double timeout) override
+ {
+ auto cb = new SendCallback{callback};
+ auto pending = eldbus_proxy_send(get(proxy), release(msg), callAsyncCb, cb, timeout < 0 ? ELDBUS_TIMEOUT_INFINITE : timeout * 1000);
+ if (pending) {
+ eldbus_pending_free_cb_add(pending, pendingFreeCb, cb);
+ } else {
+ delete cb;
+ }
+ return create(pending, false);
+ }
+ std::string eldbus_proxy_interface_get_impl(const ProxyPtr &proxy) override
+ {
+ return eldbus_proxy_interface_get(get(proxy));
+ }
+ static void listenerCallback(void *data, const Eldbus_Message *msg)
+ {
+ auto p = static_cast<std::function<void(const Eldbus_Message *msg)> *>(data);
+ (*p)(msg);
+ }
+ void eldbus_proxy_signal_handler_add_impl(const ProxyPtr &proxy, const std::string &member, const std::function<void(const MessagePtr &)> &cb) override
+ {
+ auto tmp = new std::function<void(const Eldbus_Message *msg)>{
+ [cb](const Eldbus_Message *msg) {
+ cb(create(msg, false));
+ }};
+ auto handler = eldbus_proxy_signal_handler_add(get(proxy), member.c_str(), listenerCallback, tmp);
+ if (handler) {
+ static_cast<ProxyImpl *>(proxy.get())->destructors.push_back([tmp, handler]() {
+ eldbus_signal_handler_del(handler);
+ delete tmp;
+ });
+ } else
+ delete tmp;
+ }
+ std::string eldbus_message_iter_signature_get_impl(const MessageIterPtr &iter) override
+ {
+ return eldbus_message_iter_signature_get(get(iter));
+ }
+ MessagePtr eldbus_message_method_return_new_impl(const MessagePtr &msg) override
+ {
+ return create(eldbus_message_method_return_new(get(msg)));
+ }
+ MessagePtr eldbus_message_error_new_impl(const MessagePtr &msg, const std::string &err, const std::string &txt) override
+ {
+ return create(eldbus_message_error_new(get(msg), err.c_str(), txt.c_str()));
+ }
+ PendingPtr eldbus_connection_send_impl(const ConnectionPtr &conn, const MessagePtr &msg) override
+ {
+ return create(eldbus_connection_send(get(conn), get(msg), NULL, NULL, -1));
+ }
+ MessagePtr eldbus_message_signal_new_impl(const std::string &path, const std::string &iface, const std::string &name) override
+ {
+ return create(eldbus_message_signal_new(path.c_str(), iface.c_str(), name.c_str()));
+ }
+ MessagePtr eldbus_message_ref_impl(const MessagePtr &msg) override
+ {
+ return create(eldbus_message_ref(get(msg)), true);
+ }
+ ConnectionPtr eldbus_connection_get_impl(ConnectionType type) override
+ {
+ Eldbus_Connection_Type eldbusType = ELDBUS_CONNECTION_TYPE_SYSTEM;
+
+ switch (type) {
+ case ConnectionType::SYSTEM: {
+ eldbusType = ELDBUS_CONNECTION_TYPE_SYSTEM;
+ break;
+ }
+ case ConnectionType::SESSION: {
+ eldbusType = ELDBUS_CONNECTION_TYPE_SESSION;
+ break;
+ }
+ }
+
+ eldbus_init();
+ auto p = eldbus_connection_get(eldbusType);
+ auto w = create(p, true);
+ eldbus_shutdown();
+ return w;
+ }
+ std::string eldbus_connection_unique_name_get_impl(const ConnectionPtr &conn) override
+ {
+ return eldbus_connection_unique_name_get(get(conn));
+ }
+ ObjectPtr eldbus_object_get_impl(const ConnectionPtr &conn, const std::string &bus, const std::string &path) override
+ {
+ return create(eldbus_object_get(get(conn), bus.c_str(), path.c_str()), true);
+ }
+ ProxyPtr eldbus_proxy_get_impl(const ObjectPtr &obj, const std::string &interface) override
+ {
+ return create(eldbus_proxy_get(get(obj), interface.c_str()), false);
+ }
+ ProxyPtr eldbus_proxy_copy_impl(const ProxyPtr &ptr) override
+ {
+ return create(get(ptr), false);
+ }
+
+ struct Implementation
+ {
+ Eldbus_Service_Interface_Desc dsc;
+ std::vector<std::vector<Eldbus_Arg_Info>> argsInfos;
+ std::vector<Eldbus_Method> methods;
+ std::vector<Eldbus_Signal> signals;
+ std::vector<Eldbus_Property> properties;
+
+ std::unordered_map<std::string, DBusWrapper::MethodInfo> methodsMap;
+ std::unordered_map<std::string, DBusWrapper::PropertyInfo> propertiesMap;
+ std::unordered_map<unsigned int, DBusWrapper::SignalInfo> signalsMap;
+
+ DBusWrapper::ConnectionWeakPtr connection;
+ };
+
+ static std::unordered_map<const Eldbus_Service_Interface *, std::unique_ptr<Implementation>> globalEntries;
+ static std::mutex globalEntriesMutex;
+
+#undef EINA_FALSE
+#undef EINA_TRUE
+#define EINA_FALSE static_cast<Eina_Bool>(0)
+#define EINA_TRUE static_cast<Eina_Bool>(1)
+
+ static Eina_Bool property_get_callback(const Eldbus_Service_Interface *iface, const char *propertyName, Eldbus_Message_Iter *iter, const Eldbus_Message *message, Eldbus_Message **error)
+ {
+ Implementation *impl = nullptr;
+ {
+ std::lock_guard<std::mutex> lock(globalEntriesMutex);
+ auto it = globalEntries.find(iface);
+ if (it != globalEntries.end())
+ impl = it->second.get();
+ }
+ if (!impl)
+ return EINA_FALSE;
+
+ auto it = impl->propertiesMap.find(propertyName);
+ if (it == impl->propertiesMap.end() || !it->second.getCallback)
+ return EINA_FALSE;
+
+ auto connection = impl->connection.lock();
+ if (!connection)
+ return EINA_FALSE;
+
+ DBus::DBusServer::CurrentObjectSetter currentObjectSetter(connection, eldbus_message_path_get(message));
+ auto reply = it->second.getCallback(create(message, false), create(iter, nullptr, false));
+ if (!reply.empty()) {
+ if (error)
+ *error = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", reply.c_str());
+ return EINA_FALSE;
+ }
+
+ return EINA_TRUE;
+ }
+
+ static Eldbus_Message *property_set_callback(const Eldbus_Service_Interface *iface, const char *propertyName, Eldbus_Message_Iter *iter, const Eldbus_Message *message)
+ {
+ Implementation *impl = nullptr;
+ {
+ std::lock_guard<std::mutex> lock(globalEntriesMutex);
+ auto it = globalEntries.find(iface);
+ if (it != globalEntries.end())
+ impl = it->second.get();
+ }
+ if (!impl) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Unknown interface");
+ return ret;
+ }
+ auto it = impl->propertiesMap.find(propertyName);
+ if (it == impl->propertiesMap.end() || !it->second.setCallback) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Unknown setter");
+ return ret;
+ }
+ auto connection = impl->connection.lock();
+ if (!connection) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Connection lost");
+ return ret;
+ }
+
+ DBus::DBusServer::CurrentObjectSetter currentObjectSetter(connection, eldbus_message_path_get(message));
+ auto reply = it->second.setCallback(create(message, false), create(iter, nullptr, false));
+
+ Eldbus_Message *ret = nullptr;
+ if (!reply.empty()) {
+ ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", reply.c_str());
+ } else {
+ ret = eldbus_message_method_return_new(message);
+ }
+ return ret;
+ }
+
+ static Eldbus_Message *method_callback(const Eldbus_Service_Interface *iface, const Eldbus_Message *message)
+ {
+ Implementation *impl = nullptr;
+ {
+ std::lock_guard<std::mutex> lock(globalEntriesMutex);
+ auto it = globalEntries.find(iface);
+ if (it != globalEntries.end())
+ impl = it->second.get();
+ }
+ if (!impl) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Unknown interface");
+ return ret;
+ }
+ std::string memberName = eldbus_message_member_get(message);
+ auto it = impl->methodsMap.find(memberName);
+ if (it == impl->methodsMap.end()) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Unknown method");
+ return ret;
+ }
+ auto connection = impl->connection.lock();
+ if (!connection) {
+ auto ret = eldbus_message_error_new(message, "org.freedesktop.DBus.Error.Failed", "Connection lost");
+ return ret;
+ }
+ DBus::DBusServer::CurrentObjectSetter currentObjectSetter(connection, eldbus_message_path_get(message));
+ auto reply = it->second.callback(create(message));
+ return release(reply);
+ }
+
+ void add_interface_impl(bool fallback, const std::string &pathName, const ConnectionPtr &connection, std::vector<std::function<void()>> &destructors, const std::string &interfaceName, std::vector<MethodInfo> &dscrMethods, std::vector<PropertyInfo> &dscrProperties, std::vector<SignalInfo> &dscrSignals) override
+ {
+ std::vector<Eldbus_Method> methods;
+ std::vector<Eldbus_Signal> signals;
+ std::vector<Eldbus_Property> properties;
+ std::vector<std::vector<Eldbus_Arg_Info>> argsInfos;
+ std::unordered_map<std::string, DBus::DBusInterfaceDescription::MethodInfo> methodsMap;
+ std::unordered_map<std::string, DBus::DBusInterfaceDescription::PropertyInfo> propertiesMap;
+ std::unordered_map<unsigned int, DBus::DBusInterfaceDescription::SignalInfo> signalsMap;
+
+ DBUS_DEBUG("interface %s path %s on bus %s", interfaceName.c_str(), pathName.c_str(), DBus::getConnectionName(connection).c_str());
+ auto makeArgInfo = [&](const std::vector<std::pair<std::string, std::string>> &input) {
+ argsInfos.push_back({});
+ auto &dst = argsInfos.back();
+ for (auto &s : input) {
+ auto a = Strings.add(s.first);
+ auto b = Strings.add(s.second);
+ dst.push_back({a, b});
+ }
+ dst.push_back({nullptr, nullptr});
+ return dst.data();
+ };
+ for (auto &ee : dscrMethods) {
+ auto key = ee.memberName;
+ DBUS_DEBUG("adding method %s", ee.memberName.c_str());
+ for (auto &r : ee.in) {
+ DBUS_DEBUG("in %s '%s'", r.first.c_str(), r.second.c_str());
+ }
+ for (auto &r : ee.out) {
+ DBUS_DEBUG("out %s '%s'", r.first.c_str(), r.second.c_str());
+ }
+ auto &e = (methodsMap[key] = std::move(ee));
+ methods.push_back({});
+ auto &m = methods.back();
+ m.member = e.memberName.c_str();
+ m.in = makeArgInfo(e.in);
+ m.out = makeArgInfo(e.out);
+ m.cb = method_callback;
+ m.flags = 0;
+ }
+ for (auto &ee : dscrProperties) {
+ auto key = ee.memberName;
+ DBUS_DEBUG("adding property %s", ee.memberName.c_str());
+ auto &e = (propertiesMap[key] = std::move(ee));
+ properties.push_back({});
+ auto &m = properties.back();
+ m.name = e.memberName.c_str();
+ m.type = e.typeSignature.c_str();
+ m.get_func = e.getCallback ? property_get_callback : nullptr;
+ m.set_func = e.setCallback ? property_set_callback : nullptr;
+ m.flags = 0;
+ }
+ dscrMethods.clear();
+ dscrProperties.clear();
+ dscrSignals.clear();
+
+ methods.push_back({nullptr, nullptr, nullptr, nullptr, 0});
+ signals.push_back({nullptr, nullptr, 0});
+ properties.push_back({nullptr, nullptr, nullptr, nullptr, 0});
+
+ auto impl = std::unique_ptr<Implementation>(new Implementation{
+ {interfaceName.c_str(),
+ methods.data(),
+ signals.data(),
+ properties.data(),
+ nullptr,
+ nullptr},
+ std::move(argsInfos),
+ std::move(methods),
+ std::move(signals),
+ std::move(properties),
+ std::move(methodsMap),
+ std::move(propertiesMap),
+ std::move(signalsMap),
+ connection});
+
+ {
+ std::lock_guard<std::mutex> lock(globalEntriesMutex);
+ auto v = fallback ? eldbus_service_interface_fallback_register(get(connection), pathName.c_str(), &impl->dsc) : eldbus_service_interface_register(get(connection), pathName.c_str(), &impl->dsc);
+ assert(v);
+ globalEntries[v] = std::move(impl);
+ DBUS_DEBUG("registering interface %p (%d)", v, fallback ? 1 : 0);
+ destructors.push_back([=]() {
+ DBUS_DEBUG("unregistering interface %p", v);
+ eldbus_service_interface_unregister(v);
+ std::lock_guard<std::mutex> lock(globalEntriesMutex);
+ globalEntries.erase(v);
+ });
+ }
+ }
+ static void listenerEventChangedCallback(void *data, Eldbus_Proxy *proxy EINA_UNUSED, void *event)
+ {
+ auto p = static_cast<std::function<void(Eldbus_Proxy_Event_Property_Changed *)> *>(data);
+ (*p)(static_cast<Eldbus_Proxy_Event_Property_Changed *>(event));
+ }
+ static void ProxyEventCallbackDelCb(void *data, const void *obj)
+ {
+ auto p = static_cast<Eldbus_Proxy *>(const_cast<void *>(obj));
+ eldbus_proxy_event_callback_del(p, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED, listenerEventChangedCallback, data);
+ auto d = static_cast<std::function<void(Eldbus_Proxy_Event_Property_Changed *)> *>(data);
+ delete d;
+ }
+ void add_property_changed_event_listener_impl(const ProxyPtr &proxy, const std::string &interface, const std::string &name, std::function<void(const Eina_Value *)> cb) override
+ {
+ auto callbackLambdaPtr = new std::function<void(Eldbus_Proxy_Event_Property_Changed * epc)>{
+ [cb, name, interface](Eldbus_Proxy_Event_Property_Changed *ev) {
+ const char *ifc = eldbus_proxy_interface_get(ev->proxy);
+ if (ev->name && ev->name == name && ifc && interface == ifc) {
+ cb(ev->value);
+ }
+ }};
+ auto p = get(proxy);
+ eldbus_proxy_event_callback_add(p, ELDBUS_PROXY_EVENT_PROPERTY_CHANGED, listenerEventChangedCallback, callbackLambdaPtr);
+ eldbus_proxy_free_cb_add(p, ProxyEventCallbackDelCb, callbackLambdaPtr);
+ }
+};
+
+std::unordered_map<const Eldbus_Service_Interface *, std::unique_ptr<DefaultDBusWrapper::Implementation>> DefaultDBusWrapper::globalEntries;
+std::mutex DefaultDBusWrapper::globalEntriesMutex;
+
+static std::unique_ptr<DBusWrapper> InstalledWrapper;
+
+DBusWrapper *DBusWrapper::Installed()
+{
+ if (!InstalledWrapper)
+ InstalledWrapper.reset(new DefaultDBusWrapper);
+ return InstalledWrapper.get();
+}
+
+void DBusWrapper::Install(std::unique_ptr<DBusWrapper> w)
+{
+ InstalledWrapper = std::move(w);
+}
+
+static void busNameAcquired(void *data, const char *bus, const char *old_id, const char *new_id)
+{
+ if (!new_id || strlen(new_id) == 0)
+ return;
+ if (*(std::function<void(std::string, std::string)> *)data)
+ (*(std::function<void(std::string, std::string)> *)data)(old_id, new_id);
+}
+
+OwnerNameCallbackHandle::OwnerNameCallbackHandle(OwnerNameCallbackHandle &&o) : callback_(o.callback_)
+{
+ o.callback_ = {};
+}
+
+OwnerNameCallbackHandle &OwnerNameCallbackHandle::operator=(OwnerNameCallbackHandle &&o)
+{
+ if (this != &o) {
+ if (callback_) {
+ callback_();
+ }
+ callback_ = o.callback_;
+ o.callback_ = {};
+ }
+ return *this;
+}
+
+OwnerNameCallbackHandle::~OwnerNameCallbackHandle()
+{
+ if (callback_)
+ callback_();
+}
+
+OwnerNameCallbackHandle DBus::registerNameOwnerChangedCallback(DBusWrapper::ConnectionPtr connection, const std::string &bus, std::function<void(std::string, std::string)> fnc_)
+{
+ auto p = dynamic_cast<DefaultDBusWrapper *>(DBUS_W);
+ OwnerNameCallbackHandle o;
+ if (p) {
+ auto con = p->get(connection);
+ auto ptr = new std::function<void(std::string, std::string)>(fnc_);
+ eldbus_name_owner_changed_callback_add(con, bus.c_str(), busNameAcquired, ptr, EINA_TRUE);
+ eldbus_connection_ref(con);
+ eldbus_init();
+ o.callback_ = [=]() {
+ eldbus_name_owner_changed_callback_del(con, bus.c_str(), busNameAcquired, ptr);
+ delete (std::function<void(std::string, std::string)> *)ptr;
+ eldbus_connection_unref(con);
+ eldbus_shutdown();
+ };
+ }
+ return o;
+}
\ No newline at end of file
--- /dev/null
+#ifndef DBUS_HPP
+#define DBUS_HPP
+
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <array>
+#include <atomic>
+#include <cassert>
+#include <cstdint>
+#include <functional>
+#include <list>
+#include <map>
+#include <memory>
+#include <sstream>
+#include <string.h>
+#include <string>
+#include <thread>
+#include <tuple>
+#include <type_traits>
+#include <unordered_map>
+#include <vector>
+
+#define DBUS_DEBUG(...) \
+ do { \
+ DBus::debugPrint(__FILE__, __LINE__, __VA_ARGS__); \
+ } while (0)
+#define DBUS_W DBusWrapper::Installed()
+
+/**
+ * @brief Template based, single file, wrapper library around eldbus for DBUS based communication.
+ *
+ * Main motivation was missing asynchronous calls in AT-SPI library and difficulties,
+ * when using eldbus from C++.
+ *
+ * The library:
+ * - takes care of marshalling arguments to and from DBUS calls.
+ * - allows synchronous and asynchronous calls.
+ * - allows synchronous and asynchronous listeners on signals.
+ * - manages all involved objects' lifetimes.
+ * - errors are passed as optional-alike objects, no exceptions are used.
+ * - allows setting additional debug-print function for more details about
+ * what's going on
+ *
+ * DBUS's method signatures (and expected return values) are specified as template argument,
+ * using functor syntax. For example:
+ * \code{.cpp}
+ * auto dbus = DBusClient{ ... };
+ * auto v = dbus.method<std::tuple<int, float>(float, float, std::string)>("foo").call(1.0f, 2.0f, "qwe");
+ * \endcode
+ * means (synchronous) call on dbus object, which takes three arguments (thus making call signature \b dds)
+ * of types float, float and string (float will be automatically converted to double).
+ * Expected return value is std::tuple<int, float>, which gives signature <B>(id)</B> - std::tuple acts
+ * as struct container. Returned value v will be of type ValueOrError<std::tuple<int, float>>.\n
+ * Slightly different (asynchronous) example:
+ * \code{.cpp}
+ * auto dbus = DBusClient{ ... };
+ * std::function<void(ValueOrError<int, float>)> callback;
+ * dbus.method<ValueOrError<int, float>(float, float, std::string)>("foo").asyncCall(callback, 1.0f, 2.0f, "qwe");
+ * \endcode
+ * Now the call takes the same arguments and has the same signature. But expected values are different -
+ * now the signature is simply \b id. ValueOrError acts in this case as placeholder for list of values,
+ * which DBUS allows as return data. The call itself is asynchronous - instead of expecting reply
+ * you need to pass a callback, which will be called either with received data and error message.
+ *
+ * Library is not thread-safe, the same object shouldn't be called from different threads without
+ * synchronization. There's no guarantee, that callbacks will be executed on the same thread.
+ */
+struct _Eina_Value;
+struct _Eldbus_Arg_Info;
+namespace DBus
+{
+ namespace detail
+ {
+ enum class MethodType
+ {
+ Method,
+ Getter,
+ Setter
+ };
+ }
+} // namespace DBus
+namespace std
+{
+ template <>
+ struct hash<std::tuple<std::string, std::string, std::string>>
+ {
+ size_t operator()(const std::tuple<std::string, std::string, std::string> &a) const
+ {
+ auto a1 = std::hash<std::string>()(std::get<0>(a));
+ auto a2 = std::hash<std::string>()(std::get<1>(a));
+ auto a3 = std::hash<std::string>()(std::get<2>(a));
+ size_t v = a1;
+ v = (v * 11400714819323198485llu) + a2;
+ v = (v * 11400714819323198485llu) + a3;
+ return v;
+ }
+ };
+ template <>
+ struct hash<std::tuple<std::string, std::string, std::string, DBus::detail::MethodType>>
+ {
+ size_t operator()(const std::tuple<std::string, std::string, std::string, DBus::detail::MethodType> &a) const
+ {
+ auto a1 = std::hash<std::string>()(std::get<0>(a));
+ auto a2 = std::hash<std::string>()(std::get<1>(a));
+ auto a3 = std::hash<std::string>()(std::get<2>(a));
+ auto a4 = static_cast<size_t>(std::get<3>(a));
+ size_t v = a1;
+ v = (v * 11400714819323198485llu) + a2;
+ v = (v * 11400714819323198485llu) + a3;
+ v = (v * 11400714819323198485llu) + a4;
+ return v;
+ }
+ };
+ template <>
+ struct hash<std::tuple<std::string, std::string, unsigned int>>
+ {
+ size_t operator()(const std::tuple<std::string, std::string, unsigned int> &a) const
+ {
+ auto a1 = std::hash<std::string>()(std::get<0>(a));
+ auto a2 = std::hash<std::string>()(std::get<1>(a));
+ auto a3 = std::get<2>(a);
+ size_t v = a1;
+ v = (v * 11400714819323198485llu) + a2;
+ v = (v * 11400714819323198485llu) + a3;
+ return v;
+ }
+ };
+} // namespace std
+namespace DBus
+{
+ struct ObjectPath
+ {
+ std::string value;
+ };
+
+ class Address
+ {
+ public:
+ Address() = default;
+ Address(std::string bus, std::string path) : bus(std::move(bus)), path(std::move(path)) {}
+
+ explicit operator bool() const { return !path.empty(); }
+ std::string ToString() const
+ {
+ return *this ? bus + ":" + path : "::null";
+ }
+ const std::string &GetBus() const;
+ const std::string &GetPath() const { return path; }
+
+ bool operator==(const Address &a) const
+ {
+ return bus == a.bus && path == a.path;
+ }
+ bool operator!=(const Address &a) const
+ {
+ return !(*this == a);
+ }
+
+ private:
+ mutable std::string bus, path;
+ };
+
+ struct DBusWrapper
+ {
+ virtual ~DBusWrapper() = default;
+
+ enum class ConnectionType
+ {
+ SYSTEM,
+ SESSION
+ };
+
+#define DEFINE_TYPE(name, eldbus_name, unref_call) \
+ struct name \
+ { \
+ virtual ~name() = default; \
+ }; \
+ using name##Ptr = std::shared_ptr<name>; \
+ using name##WeakPtr = std::weak_ptr<name>;
+
+ DEFINE_TYPE(Connection, Eldbus_Connection, )
+ DEFINE_TYPE(MessageIter, Eldbus_Message_Iter, eldbus_message_iter_container_close(Value))
+ DEFINE_TYPE(Message, Eldbus_Message, eldbus_message_unref(Value))
+ DEFINE_TYPE(Proxy, Eldbus_Proxy, eldbus_proxy_unref(Value))
+ DEFINE_TYPE(Object, Eldbus_Object, eldbus_object_unref(Value))
+ DEFINE_TYPE(Pending, Eldbus_Pending, )
+ DEFINE_TYPE(EventPropertyChanged, Eldbus_Proxy_Event_Property_Changed, )
+
+#undef DEFINE_TYPE
+
+ virtual ConnectionPtr eldbus_address_connection_get_impl(const std::string &addr) = 0;
+
+#define eldbus_message_iter_arguments_append_impl_basic_impl(type_set, type_get, sig) \
+ virtual void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, type_set src) = 0; \
+ virtual bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, type_get &dst) = 0;
+#define eldbus_message_iter_arguments_append_impl_basic(type, sig) \
+ eldbus_message_iter_arguments_append_impl_basic_impl(type, type, sig)
+
+ eldbus_message_iter_arguments_append_impl_basic(uint8_t, y)
+ eldbus_message_iter_arguments_append_impl_basic(uint16_t, q)
+ eldbus_message_iter_arguments_append_impl_basic(uint32_t, u)
+ eldbus_message_iter_arguments_append_impl_basic(uint64_t, t)
+ eldbus_message_iter_arguments_append_impl_basic(int16_t, n)
+ eldbus_message_iter_arguments_append_impl_basic(int32_t, i)
+ eldbus_message_iter_arguments_append_impl_basic(int64_t, x)
+ eldbus_message_iter_arguments_append_impl_basic(double, d)
+ eldbus_message_iter_arguments_append_impl_basic(bool, b)
+ eldbus_message_iter_arguments_append_impl_basic_impl(const std::string &, std::string, s)
+ eldbus_message_iter_arguments_append_impl_basic_impl(const ObjectPath &, ObjectPath, o)
+
+#undef eldbus_message_iter_arguments_append_impl_basic
+#undef eldbus_message_iter_arguments_append_impl_basic_impl
+
+ virtual MessageIterPtr eldbus_message_iter_container_new_impl(const MessageIterPtr &it, int type, const std::string &sig) = 0;
+ virtual MessageIterPtr eldbus_message_iter_get_and_next_by_type_impl(const MessageIterPtr &it, int type) = 0;
+ virtual MessageIterPtr eldbus_message_iter_get_impl(const MessagePtr &it, bool write) = 0;
+ virtual MessagePtr eldbus_proxy_method_call_new_impl(const ProxyPtr &proxy, const std::string &funcName) = 0;
+ virtual MessagePtr eldbus_proxy_send_and_block_impl(const ProxyPtr &proxy, const MessagePtr &msg, double timeout) = 0;
+ virtual bool eldbus_message_error_get_impl(const MessagePtr &msg, std::string &name, std::string &text) = 0;
+ virtual std::string eldbus_message_signature_get_impl(const MessagePtr &msg) = 0;
+
+ using SendCallback = std::function<void(const MessagePtr &msg)>;
+ virtual PendingPtr eldbus_proxy_send_impl(const ProxyPtr &proxy, const MessagePtr &msg, const SendCallback &callback, double timeout) = 0;
+ virtual std::string eldbus_proxy_interface_get_impl(const ProxyPtr &) = 0;
+ virtual void eldbus_proxy_signal_handler_add_impl(const ProxyPtr &proxy, const std::string &member, const std::function<void(const MessagePtr &)> &cb) = 0;
+ virtual std::string eldbus_message_iter_signature_get_impl(const MessageIterPtr &iter) = 0;
+ virtual MessagePtr eldbus_message_method_return_new_impl(const MessagePtr &msg) = 0;
+ virtual MessagePtr eldbus_message_error_new_impl(const MessagePtr &msg, const std::string &err, const std::string &txt) = 0;
+ virtual PendingPtr eldbus_connection_send_impl(const ConnectionPtr &conn, const MessagePtr &msg) = 0;
+ virtual MessagePtr eldbus_message_signal_new_impl(const std::string &path, const std::string &iface, const std::string &name) = 0;
+ virtual MessagePtr eldbus_message_ref_impl(const MessagePtr &msg) = 0;
+ virtual ConnectionPtr eldbus_connection_get_impl(ConnectionType type) = 0;
+ virtual std::string eldbus_connection_unique_name_get_impl(const ConnectionPtr &conn) = 0;
+ virtual ObjectPtr eldbus_object_get_impl(const ConnectionPtr &conn, const std::string &bus, const std::string &path) = 0;
+ virtual ProxyPtr eldbus_proxy_get_impl(const ObjectPtr &obj, const std::string &interface) = 0;
+ virtual ProxyPtr eldbus_proxy_copy_impl(const ProxyPtr &ptr) = 0;
+
+ class StringStorage
+ {
+ public:
+ struct char_ptr_deleter
+ {
+ void operator()(char *p)
+ {
+ free(p);
+ }
+ };
+ std::vector<std::unique_ptr<char, char_ptr_deleter>> storage;
+
+ const char *add(const char *txt)
+ {
+ auto ptr = strdup(txt);
+ storage.push_back(std::unique_ptr<char, char_ptr_deleter>(ptr));
+ return storage.back().get();
+ }
+ const char *add(const std::string &txt)
+ {
+ return add(txt.c_str());
+ }
+ };
+
+ struct CallId
+ {
+ static std::atomic<unsigned int> LastId;
+ unsigned int id = ++LastId;
+ };
+ struct MethodInfo
+ {
+ CallId id;
+ std::string memberName;
+ std::vector<std::pair<std::string, std::string>> in, out; // _Eldbus_Arg_Info
+ std::function<DBusWrapper::MessagePtr(const DBusWrapper::MessagePtr &msg)> callback;
+ };
+ struct SignalInfo
+ {
+ CallId id;
+ std::string memberName;
+ std::vector<std::pair<std::string, std::string>> args;
+ unsigned int uniqueId;
+ };
+ struct PropertyInfo
+ {
+ CallId setterId, getterId;
+ std::string memberName, typeSignature;
+ std::function<std::string(const DBusWrapper::MessagePtr &src, const DBusWrapper::MessageIterPtr &dst)> getCallback, setCallback;
+ };
+ struct SignalId
+ {
+ CallId id;
+
+ SignalId() = default;
+ SignalId(CallId id) : id(id) {}
+ };
+ virtual void add_interface_impl(bool fallback, const std::string &pathName, const ConnectionPtr &connection, std::vector<std::function<void()>> &destructors, const std::string &interfaceName, std::vector<MethodInfo> &dscrMethods, std::vector<PropertyInfo> &dscrProperties, std::vector<SignalInfo> &dscrSignals) = 0;
+ virtual void add_property_changed_event_listener_impl(const ProxyPtr &proxy, const std::string &interface, const std::string &name, std::function<void(const _Eina_Value *)> cb) = 0;
+ static DBusWrapper *Installed();
+ static void Install(std::unique_ptr<DBusWrapper>);
+
+ StringStorage Strings;
+ };
+
+ class OwnerNameCallbackHandle
+ {
+ std::function<void()> callback_;
+ friend OwnerNameCallbackHandle registerNameOwnerChangedCallback(DBusWrapper::ConnectionPtr connection, const std::string &bus, std::function<void(std::string, std::string)>);
+
+ public:
+ OwnerNameCallbackHandle() = default;
+ OwnerNameCallbackHandle(OwnerNameCallbackHandle &&);
+ OwnerNameCallbackHandle &operator=(const OwnerNameCallbackHandle &) = delete;
+ OwnerNameCallbackHandle &operator=(OwnerNameCallbackHandle &&);
+ ~OwnerNameCallbackHandle();
+ OwnerNameCallbackHandle(const OwnerNameCallbackHandle &) = delete;
+ };
+ OwnerNameCallbackHandle registerNameOwnerChangedCallback(DBusWrapper::ConnectionPtr connection, const std::string &bus, std::function<void(std::string, std::string)>);
+
+ namespace detail
+ {
+ template <typename T>
+ struct DBusSigImpl
+ {
+ enum
+ {
+ value = 0,
+ end = 0
+ };
+ };
+ template <typename T>
+ struct DBusSig
+ {
+ enum
+ {
+ value = DBusSigImpl<typename std::decay<T>::type>::value,
+ end = DBusSigImpl<typename std::decay<T>::type>::end
+ };
+ };
+ template <typename T, typename Q, size_t I, size_t S>
+ struct IndexFromTypeTupleImpl
+ {
+ enum
+ {
+ value = std::is_same<typename std::decay<typename std::tuple_element<I, T>::type>::type, Q>::value ? I : IndexFromTypeTupleImpl<T, Q, I + 1, S>::value
+ };
+ };
+ template <typename T, typename Q, size_t S>
+ struct IndexFromTypeTupleImpl<T, Q, S, S>
+ {
+ enum
+ {
+ value = S
+ };
+ };
+ template <typename T, typename Q>
+ struct IndexFromTypeTuple
+ {
+ enum
+ {
+ value = IndexFromTypeTupleImpl<T, typename std::decay<Q>::type, 0, std::tuple_size<T>::value>::value
+ };
+ };
+ template <typename T, typename = void>
+ struct Encoder;
+ template <size_t I, size_t S, typename... ARGS>
+ struct EncoderTuple;
+ } // namespace detail
+
+ struct TestDBusWrapper : public DBusWrapper
+ {
+ using MethodType = detail::MethodType;
+ ConnectionPtr connection;
+ std::unordered_map<std::tuple<std::string, std::string, std::string, MethodType>, std::function<MessagePtr(const MessagePtr &)>> testMethods;
+ std::unordered_map<std::tuple<std::string, std::string, std::string, MethodType>, std::function<MessagePtr(const MessagePtr &)>> daliMethods;
+ std::unordered_map<std::tuple<std::string, std::string, unsigned int>, std::string> daliSignalsMap;
+ std::unordered_map<std::tuple<std::string, std::string, std::string>, std::function<void(const MessagePtr &)>> daliSignals;
+ std::unordered_map<std::tuple<std::string, std::string, std::string>, std::function<void(const _Eina_Value *)>> propertyChangeListeners;
+
+ std::vector<std::function<void()>> asyncCalls;
+
+ template <typename T>
+ struct Variant
+ {
+ T value;
+ Variant() = default;
+ Variant(T t) : value(std::move(t)) {}
+ };
+ template <typename... ARGS>
+ void Encode(const MessagePtr &m, const std::tuple<ARGS...> &args)
+ {
+ auto iter = eldbus_message_iter_get_impl(m, true);
+ detail::EncoderTuple<0, sizeof...(ARGS), ARGS...>::encode(*this, iter, args);
+ }
+ template <typename... ARGS>
+ void Decode(const MessagePtr &m, std::tuple<ARGS...> &args)
+ {
+ auto iter = eldbus_message_iter_get_impl(m, false);
+ detail::EncoderTuple<0, sizeof...(ARGS), ARGS...>::decode(*this, args, iter);
+ }
+ MessagePtr newMessage(const std::string &path, const std::string &interface, const std::string &name, bool reply);
+ MessagePtr newReplyMessage(const MessagePtr &m);
+
+ template <typename... ARGS>
+ void fromTestEmitSignal(std::string path, const std::string &interface, const std::string &name, const std::tuple<ARGS...> &args)
+ {
+ if (path.empty())
+ throw error{};
+ if (path[0] != '/')
+ path = "/org/a11y/atspi/accessible/" + path;
+ auto msg = newMessage(path, interface, name, false);
+ Encode(msg, args);
+ auto it = daliSignals.find(std::tuple<std::string, std::string, std::string>{path, interface, name});
+ if (it == daliSignals.end())
+ throw error{};
+ it->second(msg);
+ }
+ static std::shared_ptr<_Eina_Value> createEinaValue(bool);
+ template <typename T>
+ void fromTestChangeProperty(std::string path, const std::string &interface, const std::string &name, T new_value)
+ {
+ auto v = createEinaValue(new_value);
+ if (path.empty())
+ throw error{};
+ if (path[0] != '/')
+ path = "/org/a11y/atspi/accessible/" + path;
+ auto it = propertyChangeListeners.find(std::tuple<std::string, std::string, std::string>{path, interface, name});
+ if (it == propertyChangeListeners.end())
+ throw error{};
+ it->second(v.get());
+ }
+ template <typename... ARGS1, typename... ARGS2>
+ std::tuple<ARGS1...> fromTestCall(const std::string &path, const std::string &interface, const std::string &name, const std::tuple<ARGS2...> &args)
+ {
+ auto msg = newMessage(path, interface, name, false);
+ Encode(msg, args);
+ auto res = call(daliMethods, "daliMethods", msg, MethodType::Method);
+ std::string a, b;
+ if (eldbus_message_error_get_impl(res, a, b))
+ throw error{} << "call to " << path << " " << interface << " " << name << " failed: " << a << ": " << b;
+ std::tuple<ARGS1...> tmp;
+ Decode(res, tmp);
+ return tmp;
+ }
+ template <typename T>
+ T fromTestGet(const std::string &path, const std::string &interface, const std::string &name)
+ {
+ auto msg = newMessage(path, interface, name, false);
+ auto res = call(daliMethods, "daliMethods", msg, MethodType::Getter);
+ std::string a, b;
+ if (eldbus_message_error_get_impl(res, a, b))
+ throw error{} << "call to " << path << " " << interface << " " << name << " failed: " << a << ": " << b;
+ std::tuple<T> tmp;
+ Decode(res, tmp);
+ return std::move(std::get<0>(tmp));
+ }
+ template <typename... ARGS1, typename T>
+ std::tuple<ARGS1...> fromTestSet(const std::string &path, const std::string &interface, const std::string &name, const T &arg)
+ {
+ auto msg = newMessage(path, interface, name, false);
+ Encode(msg, TestDBusWrapper::Variant<T>{arg});
+ auto res = call(daliMethods, "daliMethods", msg, MethodType::Setter);
+ std::string a, b;
+ if (eldbus_message_error_get_impl(res, a, b))
+ throw error{} << "call to " << path << " " << interface << " " << name << " failed: " << a << ": " << b;
+ std::tuple<ARGS1...> tmp;
+ Decode(res, tmp);
+ return tmp;
+ }
+
+ TestDBusWrapper();
+ ~TestDBusWrapper();
+
+ class error : public std::exception
+ {
+ std::shared_ptr<std::ostringstream> temp = std::make_shared<std::ostringstream>();
+ mutable std::string text;
+
+ public:
+ error() = default;
+
+ template <typename T>
+ error &operator<<(T &&t)
+ {
+ *temp << std::forward<T>(t);
+ return *this;
+ }
+ const char *what() const noexcept override
+ {
+ text = temp->str();
+ return text.c_str();
+ }
+ };
+#define DEFINE_TYPE(name) \
+ struct name##Impl; \
+ static name##Impl *get(const name##Ptr &);
+ DEFINE_TYPE(Connection)
+ DEFINE_TYPE(Proxy)
+ DEFINE_TYPE(Object)
+ DEFINE_TYPE(Message)
+ DEFINE_TYPE(MessageIter)
+#undef DEFINE_TYPE
+
+ class Element;
+ using ElementList = std::list<Element>;
+ using ElementMap = std::map<std::string, std::string>;
+ using ElementTuple = std::tuple<
+ uint8_t,
+ uint16_t,
+ uint32_t,
+ uint64_t,
+ int16_t,
+ int32_t,
+ int64_t,
+ double,
+ bool,
+ std::string,
+ ObjectPath,
+ ElementList>;
+
+ class Element
+ {
+ ElementTuple data;
+ char signature_ = 0, end_ = 0, index_ = 0;
+ template <typename T>
+ void set(T &&t, char signature = detail::DBusSig<T>::value)
+ {
+ signature_ = signature;
+ end_ = detail::DBusSig<T>::end;
+ index_ = static_cast<char>(detail::IndexFromTypeTuple<ElementTuple, T>::value);
+ get<T>() = std::forward<T>(t);
+ }
+
+ public:
+ template <typename T>
+ Element(T &&t, typename std::enable_if<detail::DBusSig<T>::value != 0>::type * = nullptr)
+ {
+ set(std::forward<T>(t));
+ }
+ Element(ElementList t, int signature) { set(std::move(t), static_cast<char>(signature)); }
+
+ char signature() const { return signature_; }
+ char end() const { return end_; }
+ char index() const { return index_; }
+ bool isContainer() const { return index_ == detail::IndexFromTypeTuple<ElementTuple, ElementList>::value; }
+ template <typename T, typename = typename std::enable_if<detail::DBusSig<T>::value != 0>::type>
+ bool is() const
+ {
+ return index_ == detail::IndexFromTypeTuple<ElementTuple, T>::value;
+ }
+ template <typename T, typename = typename std::enable_if<detail::DBusSig<T>::value != 0>::type>
+ const T &get() const
+ {
+ if (!is<T>())
+ throw error{};
+ return std::get<detail::IndexFromTypeTuple<ElementTuple, T>::value>(data);
+ }
+ template <typename T, typename = typename std::enable_if<detail::DBusSig<T>::value != 0>::type>
+ T &get()
+ {
+ if (!is<T>())
+ throw error{};
+ return std::get<detail::IndexFromTypeTuple<ElementTuple, T>::value>(data);
+ }
+ };
+
+ ConnectionPtr eldbus_address_connection_get_impl(const std::string &addr) override;
+
+#define eldbus_message_iter_arguments_append_impl_basic_impl(type_set, type_get, sig) \
+ void eldbus_message_iter_arguments_append_impl(const MessageIterPtr &it, type_set src) override; \
+ bool eldbus_message_iter_get_and_next_impl(const MessageIterPtr &it, type_get &dst) override;
+#define eldbus_message_iter_arguments_append_impl_basic(type, sig) \
+ eldbus_message_iter_arguments_append_impl_basic_impl(type, type, sig)
+
+ eldbus_message_iter_arguments_append_impl_basic(uint8_t, y)
+ eldbus_message_iter_arguments_append_impl_basic(uint16_t, q)
+ eldbus_message_iter_arguments_append_impl_basic(uint32_t, u)
+ eldbus_message_iter_arguments_append_impl_basic(uint64_t, t)
+ eldbus_message_iter_arguments_append_impl_basic(int16_t, n)
+ eldbus_message_iter_arguments_append_impl_basic(int32_t, i)
+ eldbus_message_iter_arguments_append_impl_basic(int64_t, x)
+ eldbus_message_iter_arguments_append_impl_basic(double, d)
+ eldbus_message_iter_arguments_append_impl_basic(bool, b)
+ eldbus_message_iter_arguments_append_impl_basic_impl(const std::string &, std::string, s)
+ eldbus_message_iter_arguments_append_impl_basic_impl(const ObjectPath &, ObjectPath, o)
+
+#undef eldbus_message_iter_arguments_append_impl_basic
+#undef eldbus_message_iter_arguments_append_impl_basic_impl
+
+ MessageIterPtr eldbus_message_iter_container_new_impl(const MessageIterPtr &it, int type, const std::string &sig) override;
+ MessageIterPtr eldbus_message_iter_get_and_next_by_type_impl(const MessageIterPtr &it, int type) override;
+ MessageIterPtr eldbus_message_iter_get_impl(const MessagePtr &it, bool write) override;
+ MessagePtr eldbus_proxy_method_call_new_impl(const ProxyPtr &proxy, const std::string &funcName) override;
+ MessagePtr eldbus_proxy_send_and_block_impl(const ProxyPtr &proxy, const MessagePtr &msg, double timeout) override;
+ bool eldbus_message_error_get_impl(const MessagePtr &msg, std::string &name, std::string &text) override;
+ std::string eldbus_message_signature_get_impl(const MessagePtr &msg) override;
+ PendingPtr eldbus_proxy_send_impl(const ProxyPtr &proxy, const MessagePtr &msg, const SendCallback &callback, double timeout) override;
+ std::string eldbus_proxy_interface_get_impl(const ProxyPtr &) override;
+ void eldbus_proxy_signal_handler_add_impl(const ProxyPtr &proxy, const std::string &member, const std::function<void(const MessagePtr &)> &cb) override;
+ std::string eldbus_message_iter_signature_get_impl(const MessageIterPtr &iter) override;
+ MessagePtr eldbus_message_method_return_new_impl(const MessagePtr &msg) override;
+ MessagePtr eldbus_message_error_new_impl(const MessagePtr &msg, const std::string &err, const std::string &txt) override;
+ PendingPtr eldbus_connection_send_impl(const ConnectionPtr &conn, const MessagePtr &msg) override;
+ MessagePtr eldbus_message_signal_new_impl(const std::string &path, const std::string &iface, const std::string &name) override;
+ MessagePtr eldbus_message_ref_impl(const MessagePtr &msg) override;
+ ConnectionPtr eldbus_connection_get_impl(ConnectionType type) override;
+ std::string eldbus_connection_unique_name_get_impl(const ConnectionPtr &conn) override;
+ ObjectPtr eldbus_object_get_impl(const ConnectionPtr &conn, const std::string &bus, const std::string &path) override;
+ ProxyPtr eldbus_proxy_get_impl(const ObjectPtr &obj, const std::string &interface) override;
+ ProxyPtr eldbus_proxy_copy_impl(const ProxyPtr &ptr) override;
+ void add_property_changed_event_listener_impl(const ProxyPtr &proxy, const std::string &interface, const std::string &name, std::function<void(const _Eina_Value *)> cb) override;
+ void add_interface_impl(bool fallback, const std::string &pathName, const ConnectionPtr &connection, std::vector<std::function<void()>> &destructors, const std::string &interfaceName, std::vector<MethodInfo> &dscrMethods, std::vector<PropertyInfo> &dscrProperties, std::vector<SignalInfo> &dscrSignals) override;
+ static bool completed(const MessageIterPtr &iter);
+
+ private:
+ MessagePtr call(std::unordered_map<std::tuple<std::string, std::string, std::string, MethodType>, std::function<MessagePtr(const MessagePtr &)>> &mp, const std::string &name, const MessagePtr &msg, MethodType type);
+ };
+
+ namespace detail
+ {
+ template <>
+ struct DBusSigImpl<uint8_t>
+ {
+ enum
+ {
+ value = 'y',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<uint16_t>
+ {
+ enum
+ {
+ value = 'q',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<uint32_t>
+ {
+ enum
+ {
+ value = 'u',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<uint64_t>
+ {
+ enum
+ {
+ value = 't',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<int16_t>
+ {
+ enum
+ {
+ value = 'n',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<int32_t>
+ {
+ enum
+ {
+ value = 'i',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<int64_t>
+ {
+ enum
+ {
+ value = 'x',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<double>
+ {
+ enum
+ {
+ value = 'd',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<bool>
+ {
+ enum
+ {
+ value = 'b',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<std::string>
+ {
+ enum
+ {
+ value = 's',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<ObjectPath>
+ {
+ enum
+ {
+ value = 'o',
+ end = 0
+ };
+ };
+ template <>
+ struct DBusSigImpl<TestDBusWrapper::ElementList>
+ {
+ enum
+ {
+ value = '(',
+ end = ')'
+ };
+ };
+ template <>
+ struct DBusSigImpl<TestDBusWrapper::ElementMap>
+ {
+ enum
+ {
+ value = '{',
+ end = '}'
+ };
+ };
+
+ template <typename T>
+ struct Encoder<T, decltype(TestDBusWrapper().eldbus_message_iter_arguments_append_impl(TestDBusWrapper::MessageIterPtr(), T()))>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const T &src)
+ {
+ w.eldbus_message_iter_arguments_append_impl(tgt, src);
+ }
+ static void decode(TestDBusWrapper &w, T &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ if (!w.eldbus_message_iter_get_and_next_impl(src, tgt))
+ throw TestDBusWrapper::error{};
+ }
+ };
+ template <typename T>
+ struct Encoder<T, typename std::enable_if<std::is_enum<T>::value>::type>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const T &src)
+ {
+ Encoder<typename std::underlying_type<T>::type>::encode(w, tgt, static_cast<typename std::underlying_type<T>::type>(src));
+ }
+ static void decode(TestDBusWrapper &w, T &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ typename std::underlying_type<T>::type v = 0;
+ Encoder<typename std::underlying_type<T>::type>::decode(w, v, src);
+ tgt = static_cast<T>(v);
+ }
+ };
+ template <typename T>
+ struct Encoder<const T>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const T &src)
+ {
+ Encoder<T>::encode(w, tgt, src);
+ }
+ static void decode(TestDBusWrapper &w, T &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ Encoder<T>::decode(w, tgt, src);
+ }
+ };
+ template <typename T>
+ struct Encoder<const T &>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const T &src)
+ {
+ Encoder<T>::encode(w, tgt, src);
+ }
+ static void decode(TestDBusWrapper &w, T &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ Encoder<T>::decode(w, tgt, src);
+ }
+ };
+ template <typename T>
+ struct Encoder<T &>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const T &src)
+ {
+ Encoder<T>::encode(w, tgt, src);
+ }
+ static void decode(TestDBusWrapper &w, T &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ Encoder<T>::decode(w, tgt, src);
+ }
+ };
+ template <size_t I, size_t S, typename... ARGS>
+ struct EncoderTuple
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::tuple<ARGS...> &src)
+ {
+ Encoder<typename std::tuple_element<I, std::tuple<ARGS...>>::type>::encode(w, tgt, std::get<I>(src));
+ EncoderTuple<I + 1, S, ARGS...>::encode(w, tgt, src);
+ }
+ static void decode(TestDBusWrapper &w, std::tuple<ARGS...> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ Encoder<typename std::tuple_element<I, std::tuple<ARGS...>>::type>::decode(w, std::get<I>(tgt), src);
+ EncoderTuple<I + 1, S, ARGS...>::decode(w, tgt, src);
+ }
+ };
+ template <size_t S, typename... ARGS>
+ struct EncoderTuple<S, S, ARGS...>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::tuple<ARGS...> &src) {}
+ static void decode(TestDBusWrapper &w, std::tuple<ARGS...> &tgt, const TestDBusWrapper::MessageIterPtr &src) {}
+ };
+ template <typename... ARGS>
+ struct Encoder<std::tuple<ARGS...>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::tuple<ARGS...> &src)
+ {
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, 'r', "");
+ EncoderTuple<0, sizeof...(ARGS), ARGS...>::encode(w, var, src);
+ }
+ static void decode(TestDBusWrapper &w, std::tuple<ARGS...> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, 'r');
+ if (!s)
+ throw TestDBusWrapper::error{};
+ EncoderTuple<0, sizeof...(ARGS), ARGS...>::decode(w, tgt, s);
+ }
+ };
+ template <typename A, typename B>
+ struct Encoder<std::pair<A, B>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::pair<A, B> &src, char type = 'r')
+ {
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, type, "");
+ Encoder<A>::encode(w, var, src.first);
+ Encoder<B>::encode(w, var, src.second);
+ }
+ static void decode(TestDBusWrapper &w, std::pair<A, B> &tgt, const TestDBusWrapper::MessageIterPtr &src, char type = 'r')
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, type);
+ if (!s)
+ throw TestDBusWrapper::error{};
+ Encoder<A>::decode(w, tgt.first, s);
+ Encoder<B>::decode(w, tgt.second, s);
+ }
+ };
+ template <typename T>
+ struct Encoder<TestDBusWrapper::Variant<T>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const TestDBusWrapper::Variant<T> &src)
+ {
+ //w.eldbus_message_iter_arguments_append_impl(tgt, src);
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, 'v', "");
+ Encoder<T>::encode(w, var, src.value);
+ }
+ static void decode(TestDBusWrapper &w, TestDBusWrapper::Variant<T> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, 'v');
+ if (!s)
+ throw TestDBusWrapper::error{};
+ Encoder<T>::decode(w, tgt.value, s);
+ }
+ };
+ template <typename T>
+ struct Encoder<std::vector<T>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::vector<T> &src)
+ {
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, 'a', "");
+ for (auto &q : src)
+ Encoder<T>::encode(w, var, q);
+ }
+ static void decode(TestDBusWrapper &w, std::vector<T> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, 'a');
+ if (!s)
+ throw TestDBusWrapper::error{};
+ while (!TestDBusWrapper::completed(s)) {
+ tgt.push_back({});
+ Encoder<T>::decode(w, tgt.back(), s);
+ }
+ }
+ };
+ template <typename K, typename V>
+ struct Encoder<std::unordered_map<K, V>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::unordered_map<K, V> &src)
+ {
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, 'a', "");
+ for (auto &q : src) {
+ Encoder<typename std::unordered_map<K, V>::value_type>::encode(w, var, q, 'e');
+ }
+ }
+ static void decode(TestDBusWrapper &w, std::unordered_map<K, V> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, 'a');
+ if (!s)
+ throw TestDBusWrapper::error{};
+ while (!TestDBusWrapper::completed(s)) {
+ std::pair<K, V> tmp;
+ Encoder<std::pair<K, V>>::decode(w, tmp, s, 'e');
+ tgt.insert(std::move(tmp));
+ }
+ }
+ };
+ template <typename T, size_t I>
+ struct Encoder<std::array<T, I>>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const std::array<T, I> &src)
+ {
+ auto var = w.eldbus_message_iter_container_new_impl(tgt, 'a', "");
+ for (auto &q : src)
+ Encoder<T>::encode(w, var, q);
+ }
+ static void decode(TestDBusWrapper &w, std::array<T, I> &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ auto s = w.eldbus_message_iter_get_and_next_by_type_impl(src, 'a');
+ if (!s)
+ throw TestDBusWrapper::error{};
+ size_t i = 0;
+ while (!TestDBusWrapper::completed(s)) {
+ if (i >= tgt.size())
+ throw TestDBusWrapper::error{};
+ Encoder<T>::decode(w, tgt[i], s);
+ ++i;
+ }
+ if (i != tgt.size())
+ throw TestDBusWrapper::error{};
+ }
+ };
+ template <>
+ struct Encoder<Address>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const Address &src)
+ {
+ Encoder<std::tuple<std::string, ObjectPath>>::encode(w, tgt, std::tuple<std::string, ObjectPath>{src.GetBus(), ObjectPath{"/org/a11y/atspi/accessible/" + src.GetPath()}});
+ }
+ static void decode(TestDBusWrapper &w, Address &tgt, const TestDBusWrapper::MessageIterPtr &src)
+ {
+ std::tuple<std::string, ObjectPath> tmp;
+ Encoder<std::tuple<std::string, ObjectPath>>::decode(w, tmp, src);
+ static const size_t prefixSize = std::string{"/org/a11y/atspi/accessible/"}.size();
+ tgt = {std::move(std::get<0>(tmp)), std::get<1>(tmp).value.substr(prefixSize)};
+ }
+ };
+ template <>
+ struct Encoder<const char *>
+ {
+ static void encode(TestDBusWrapper &w, const TestDBusWrapper::MessageIterPtr &tgt, const char *src)
+ {
+ Encoder<std::string>::encode(w, tgt, src);
+ }
+ };
+ } // namespace detail
+
+ /// \cond
+ class DBusServer;
+ class DBusClient;
+ class DBusInterfaceDescription;
+
+ /**
+ * @brief Formats debug message and calls debug printer (if any) with it
+ */
+ void debugPrint(const char *file, size_t line, const char *format, ...);
+
+ /**
+ * @brief Sets debug printer callback, which will be called with debug messages
+ *
+ * Callback will be called in various moments of DBus activity. First value passed to callback
+ * is pointer to text, second it's length. Text is ended with 0 (not counted towards it's size),
+ * user can safely printf it.
+ */
+ void setDebugPrinter(std::function<void(const char *, size_t)>);
+
+ struct Error
+ {
+ std::string message;
+
+ Error() = default;
+ Error(std::string msg) : message(std::move(msg))
+ {
+ assert(!message.empty());
+ }
+ };
+ struct Success
+ {
+ };
+ /// \endcond
+
+ /**
+ * @brief Value representing data, that came from DBUS or error message
+ *
+ * Object of this class either helds series of values (of types ARGS...)
+ * or error message. This object will be true in boolean context, if has data
+ * and false, if an error occured.
+ * It's valid to create ValueOrError object with empty argument list or void:
+ * \code{.cpp}
+ * ValueOrError<> v1;
+ * ValueOrError<void> v2;
+ * \endcode
+ * Both mean the same - ValueOrError containing no real data and being a marker,
+ * wherever operation successed or failed and containing possible error message.
+ */
+ template <typename... ARGS>
+ class ValueOrError
+ {
+ public:
+ /**
+ * @brief Empty constructor. Valid only, if all ARGS types are default constructible.
+ */
+ ValueOrError() = default;
+
+ /**
+ * @brief Value constructor.
+ *
+ * This will be initialized as success with passed in values.
+ */
+ ValueOrError(ARGS... t) : value(std::move(t)...) {}
+
+ /**
+ * @brief Alternative Value constructor.
+ *
+ * This will be initialized as success with passed in values.
+ */
+ ValueOrError(std::tuple<ARGS...> t) : value(std::move(t)) {}
+
+ /**
+ * @brief Error constructor. This will be initialized as failure with given error message.
+ */
+ ValueOrError(Error e) : error(std::move(e))
+ {
+ assert(!error.message.empty());
+ }
+
+ /**
+ * @brief bool operator.
+ *
+ * Returns true, if operation was successful (getValues member is callable), or false
+ * when operation failed (getError is callable).
+ */
+ explicit operator bool() const
+ {
+ return error.message.empty();
+ }
+
+ /**
+ * @brief Returns error message object.
+ *
+ * Returns object containing error message associated with the failed operation.
+ * Only callable, if operation actually failed, otherwise will assert.
+ */
+ const Error &getError() const
+ {
+ return error;
+ }
+
+ /**
+ * @brief Returns modifiable tuple of held data.
+ *
+ * Returns reference to the internal tuple containing held data.
+ * User can modify (or move) data safely.
+ * Only callable, if operation actually successed, otherwise will assert.
+ */
+ std::tuple<ARGS...> &getValues()
+ {
+ assert(*this);
+ return value;
+ }
+
+ /**
+ * @brief Returns const tuple of held data.
+ *
+ * Returns const reference to the internal tuple containing held data.
+ * Only callable, if operation actually successed, otherwise will assert.
+ */
+ const std::tuple<ARGS...> &getValues() const
+ {
+ assert(*this);
+ return value;
+ }
+
+ protected:
+ /// \cond
+ std::tuple<ARGS...> value;
+ Error error;
+ /// \endcond
+ };
+
+ /// \cond
+ template <>
+ class ValueOrError<>
+ {
+ public:
+ ValueOrError() = default;
+ ValueOrError(std::tuple<> t) {}
+ ValueOrError(Error e) : error(std::move(e))
+ {
+ assert(!error.message.empty());
+ }
+
+ explicit operator bool() const
+ {
+ return error.message.empty();
+ }
+ const Error &getError() const
+ {
+ return error;
+ }
+ std::tuple<> &getValues()
+ {
+ assert(*this);
+ static std::tuple<> t;
+ return t;
+ }
+ std::tuple<> getValues() const
+ {
+ assert(*this);
+ return {};
+ }
+
+ protected:
+ Error error;
+ };
+
+ template <>
+ class ValueOrError<void>
+ {
+ public:
+ ValueOrError() = default;
+ ValueOrError(Success) {}
+ ValueOrError(Error e) : error(std::move(e))
+ {
+ assert(!error.message.empty());
+ }
+
+ explicit operator bool() const
+ {
+ return error.message.empty();
+ }
+ const Error &getError() const
+ {
+ return error;
+ }
+ std::tuple<> &getValues()
+ {
+ assert(*this);
+ static std::tuple<> t;
+ return t;
+ }
+ std::tuple<> getValues() const
+ {
+ assert(*this);
+ return {};
+ }
+
+ protected:
+ Error error;
+ };
+
+ /// \endcond
+
+ /**
+ * @brief Class used to marshall DBUS's variant type
+ *
+ * Minimalistic class, that allows user to specify DBUS variant type
+ * as argument or return value. You need to pass real type hidden under variant as
+ * template type \b A. At this point library doesn't allow to expected one of few classes
+ * as return data in variant. So for example user can't specify method call, which on return
+ * expects DBUS variant holding either string or int.
+ */
+ template <typename A>
+ struct EldbusVariant
+ {
+ A value;
+ };
+
+ /**
+ * @brief Namespace for private, internal functions and classes
+ *
+ */
+ namespace detail
+ {
+ /// \cond
+ template <typename T, typename = void>
+ struct signature;
+ template <typename... ARGS>
+ struct signature<std::tuple<ARGS...>>;
+ template <typename A, typename B>
+ struct signature<std::pair<A, B>>;
+ template <typename A>
+ struct signature<std::vector<A>>;
+ template <typename A, size_t N>
+ struct signature<std::array<A, N>>;
+ template <typename A, typename B>
+ struct signature<std::unordered_map<A, B>>;
+ template <typename A, typename B>
+ struct signature<std::map<A, B>>;
+ /// \endcond
+
+ /**
+ * @brief Signature class for marshalling uint8 type.
+ */
+ template <>
+ struct signature<uint8_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "uint8_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "y";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, uint8_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, uint8_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling uint16 type.
+ */
+ template <>
+ struct signature<uint16_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "uint16_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "q";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, uint16_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, uint16_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling uint32 type.
+ */
+ template <>
+ struct signature<uint32_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "uint32_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "u";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, uint32_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, uint32_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling uint64 type.
+ */
+ template <>
+ struct signature<uint64_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "uint64_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "t";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, uint64_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, uint64_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling int16 type.
+ */
+ template <>
+ struct signature<int16_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "int16_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "n";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, int16_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, int16_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling int32 type.
+ */
+ template <>
+ struct signature<int32_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "int32_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "i";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, int32_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, int32_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling int64 type.
+ */
+ template <>
+ struct signature<int64_t>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "int64_t";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "x";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, int64_t v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, int64_t &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling double type.
+ */
+ template <>
+ struct signature<double>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "double";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "d";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, double v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, double &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, float &v2)
+ {
+ double v = 0;
+ auto r = DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ v2 = static_cast<float>(v);
+ return r;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling float type.
+ */
+ template <>
+ struct signature<float>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "float";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "d";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, float v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, double &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, float &v2)
+ {
+ double v = 0;
+ auto r = DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ v2 = static_cast<float>(v);
+ return r;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling boolean type.
+ */
+ template <>
+ struct signature<bool>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "bool";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "b";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, bool v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, bool &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+
+ template <typename T>
+ struct signature<T, typename std::enable_if<std::is_enum<T>::value, void>::type>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "enum";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature<typename std::underlying_type<T>::type>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, T v)
+ {
+ signature<typename std::underlying_type<T>::type>::set(iter, static_cast<int64_t>(v));
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, T &v)
+ {
+ typename std::underlying_type<T>::type q = 0;
+ if (!signature<typename std::underlying_type<T>::type>::get(iter, q))
+ return false;
+
+ v = static_cast<T>(q);
+ return true;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling string type.
+ *
+ * Both (const) char * and std::string types are accepted as value to send.
+ * Only std::string is accepted as value to receive.
+ */
+ template <>
+ struct signature<std::string>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "string";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "s";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::string &v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ // /**
+ // * @brief Marshals value v as marshalled type into message
+ // */
+ // static void set( const DBusWrapper::MessageIterPtr &iter, const char* v )
+ // {
+ // DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ // }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::string &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ };
+ template <>
+ struct signature<ObjectPath>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "path";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "o";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::string &v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, ObjectPath{v});
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const ObjectPath &v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const char *v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, ObjectPath{v});
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, ObjectPath &v)
+ {
+ return DBUS_W->eldbus_message_iter_get_and_next_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::string &v)
+ {
+ ObjectPath q;
+ if (!DBUS_W->eldbus_message_iter_get_and_next_impl(iter, q))
+ return false;
+ v = std::move(q.value);
+ return true;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling (const) char * type.
+ *
+ * Both (const) char * and std::string types are accepted as value to send.
+ * You can't use (const) char * variable type to receive value.
+ */
+ template <>
+ struct signature<char *>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "string";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "s";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::string &v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, v);
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const char *v)
+ {
+ DBUS_W->eldbus_message_iter_arguments_append_impl(iter, std::string{v});
+ }
+ };
+ /// \cond
+ template <size_t INDEX, typename A, typename... ARGS>
+ struct signature_tuple_element_type_helper
+ {
+ using type = typename signature_tuple_element_type_helper<INDEX - 1, ARGS...>::type;
+ };
+ template <typename A, typename... ARGS>
+ struct signature_tuple_element_type_helper<0, A, ARGS...>
+ {
+ using type = A;
+ };
+ /// \endcond
+
+ /**
+ * @brief Helper class to marshall tuples
+ *
+ * This class marshals all elements of the tuple value starting at the index INDEX
+ * and incrementing. This class recursively calls itself with increasing INDEX value
+ * until INDEX is equal to SIZE, where recursive calling ends.
+ */
+ template <size_t INDEX, size_t SIZE, typename... ARGS>
+ struct signature_tuple_helper
+ {
+ using current_type = typename signature_tuple_element_type_helper<INDEX, ARGS...>::type;
+
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ if (INDEX + 1 >= SIZE)
+ return signature<current_type>::name();
+ return signature<current_type>::name() + ", " + signature_tuple_helper<INDEX + 1, SIZE, ARGS...>::name();
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature<current_type>::sig() + signature_tuple_helper<INDEX + 1, SIZE, ARGS...>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::tuple<ARGS...> &args)
+ {
+ signature<current_type>::set(iter, std::get<INDEX>(args));
+ signature_tuple_helper<INDEX + 1, SIZE, ARGS...>::set(iter, args);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::tuple<ARGS...> &args)
+ {
+ return signature<current_type>::get(iter, std::get<INDEX>(args)) &&
+ signature_tuple_helper<INDEX + 1, SIZE, ARGS...>::get(iter, args);
+ }
+ };
+
+ /**
+ * @brief Helper class to marshall tuples
+ *
+ * This class marks end of the tuple marshalling. Members of this class are called
+ * when INDEX value is equal to SIZE.
+ */
+ template <size_t SIZE, typename... ARGS>
+ struct signature_tuple_helper<SIZE, SIZE, ARGS...>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::tuple<ARGS...> &args)
+ {
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::tuple<ARGS...> &args)
+ {
+ return true;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling tuple of values
+ *
+ * This class marshalls tuple of values. This represents
+ * DBUS struct typle, encoded with character 'r'
+ */
+ template <typename... ARGS>
+ struct signature<std::tuple<ARGS...>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "tuple<" + signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "(" + signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::sig() + ")";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::tuple<ARGS...> &args)
+ {
+ auto entry = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'r', "");
+ signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::set(entry, args);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::tuple<ARGS...> &args)
+ {
+ auto entry = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'r');
+ if (!entry)
+ return false;
+ return signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::get(entry, args);
+ }
+ };
+ /**
+ * @brief Signature class for marshalling ValueOrError template type
+ *
+ * ValueOrError template type is used to marshall list of values passed to
+ * DBUS (or received from) at the "top" level. For example ss(s) is represented as
+ * \code{.cpp} ValueOrError<std::string, std::string, std::tuple<std::string>> \endcode
+ * While (ss(s)) is represented as
+ * \code{.cpp} std::tuple<std::string, std::string, std::tuple<std::string>> \endcode
+ * or
+ * \code{.cpp} ValueOrError<std::tuple<std::string, std::string, std::tuple<std::string>>> \endcode
+ */
+ template <typename... ARGS>
+ struct signature<ValueOrError<ARGS...>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "ValueOrError<" + signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const ValueOrError<ARGS...> &args)
+ {
+ signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::set(iter, args.getValues());
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, ValueOrError<ARGS...> &args)
+ {
+ return signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::get(iter, args.getValues());
+ }
+ };
+ /**
+ * @brief Signature class for marshalling ValueOrError<void> type
+ */
+ template <>
+ struct signature<ValueOrError<void>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "ValueOrError<void>";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const ValueOrError<void> &args)
+ {
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, ValueOrError<void> &args)
+ {
+ return true;
+ }
+ };
+ /**
+ * @brief Signature class for marshalling ValueOrError<> type
+ */
+ template <>
+ struct signature<ValueOrError<>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "ValueOrError<>";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const ValueOrError<> &args)
+ {
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, ValueOrError<> &args)
+ {
+ return true;
+ }
+ };
+ /**
+ * @brief Signature class for marshalling pair of types
+ */
+ template <typename A, typename B>
+ struct signature<std::pair<A, B>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "pair<" + signature_tuple_helper<0, 2, A, B>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "(" + signature_tuple_helper<0, 2, A, B>::sig() + ")";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::pair<A, B> &ab, bool dictionary = false)
+ {
+ auto entry = DBUS_W->eldbus_message_iter_container_new_impl(iter, dictionary ? 'e' : 'r', "");
+ signature_tuple_helper<0, 2, A, B>::set(entry, ab);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::pair<A, B> &ab)
+ {
+ auto entry = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'r');
+ if (!entry) {
+ entry = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, '{');
+ if (!entry)
+ return false;
+ }
+
+ std::tuple<A, B> ab_tmp;
+ auto z = signature_tuple_helper<0, 2, A, B>::get(entry, ab_tmp);
+ if (z) {
+ ab.first = std::move(std::get<0>(ab_tmp));
+ ab.second = std::move(std::get<1>(ab_tmp));
+ }
+ return z;
+ }
+ };
+ /**
+ * @brief Signature class for marshalling std::vector template type
+ *
+ * This marshals container's content as DBUS a ascii character type code.
+ */
+ template <typename A>
+ struct signature<std::vector<A>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "vector<" + signature<A>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "a" + signature<A>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::vector<A> &v)
+ {
+ auto lst = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'a', signature<A>::sig());
+ assert(lst);
+ for (auto &a : v) {
+ signature<A>::set(lst, a);
+ }
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::vector<A> &v)
+ {
+ auto s = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'a');
+ if (!s)
+ return false;
+ v.clear();
+ A a;
+ while (signature<A>::get(s, a))
+ v.push_back(std::move(a));
+
+ return true;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling std::array template type
+ *
+ * This marshals container's content as DBUS a ascii character type code.
+ */
+ template <typename A, size_t N>
+ struct signature<std::array<A, N>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "array<" + signature<A>::name() + ", " + std::to_string(N) + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "a" + signature<A>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::array<A, N> &v)
+ {
+ auto lst = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'a', signature<A>::sig());
+ assert(lst);
+ for (auto &a : v) {
+ signature<A>::set(lst, a);
+ }
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::array<A, N> &v)
+ {
+ auto s = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'a');
+ if (!s)
+ return false;
+ for (auto &a : v) {
+ if (!signature<A>::get(s, a))
+ return false;
+ }
+ return true;
+ }
+ };
+
+ /**
+ * @brief Signature class for marshalling EldbusVariant type
+ *
+ * This marshals variant's content as DBUS v ascii character type code.
+ */
+ template <typename A>
+ struct signature<EldbusVariant<A>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "variant<" + signature<A>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "v";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const EldbusVariant<A> &v)
+ {
+ set(iter, v.value);
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const A &v)
+ {
+ auto var = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'v', signature<A>::sig());
+ signature<A>::set(var, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, EldbusVariant<A> &v)
+ {
+ auto s = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'v');
+ if (!s)
+ return false;
+ return signature<A>::get(s, v.value);
+ }
+ };
+ /**
+ * @brief Signature class for marshalling std::unordered_map template type
+ *
+ * This marshals container's content as DBUS {} ascii character type code.
+ * Note, that library doesnt check, if the key is basic type, as DBUS
+ * specification mandates.
+ * User can always exchange std::unordered_map for std::map and the reverse.
+ * User can receive such values as std::vector of std::pair<key, value> values.
+ * Order of such values is unspecified.
+ */
+ template <typename A, typename B>
+ struct signature<std::unordered_map<A, B>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "unordered_map<" + signature<A>::name() + ", " + signature<B>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "a{" + signature_tuple_helper<0, 2, A, B>::sig() + "}";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::unordered_map<A, B> &v)
+ {
+ auto sig = "{" + signature_tuple_helper<0, 2, A, B>::sig() + "}";
+ auto lst = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'a', sig);
+ assert(lst);
+ for (auto &a : v) {
+ signature<std::pair<A, B>>::set(lst, a, true);
+ }
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::unordered_map<A, B> &v)
+ {
+ auto s = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'a');
+ v.clear();
+ if (!s)
+ return false;
+ std::pair<A, B> a;
+ while (signature<std::pair<A, B>>::get(s, a))
+ v.insert(std::move(a));
+ return true;
+ }
+ };
+ /**
+ * @brief Signature class for marshalling std::unordered_map template type
+ *
+ * This marshals container's content as DBUS {} ascii character type code.
+ * Note, that library doesnt check, if the key is basic type, as DBUS
+ * specification mandates.
+ * User can always exchange std::unordered_map for std::map and the reverse.
+ * User can receive such values as std::vector of std::pair<key, value> values.
+ * Order of such values is unspecified.
+ */
+ template <typename A, typename B>
+ struct signature<std::map<A, B>>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "map<" + signature<A>::name() + ", " + signature<B>::name() + ">";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return "a{" + signature_tuple_helper<0, 2, A, B>::sig() + "}";
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const std::map<A, B> &v)
+ {
+ auto sig = "{" + signature_tuple_helper<0, 2, A, B>::sig() + "}";
+ auto lst = DBUS_W->eldbus_message_iter_container_new_impl(iter, 'a', sig);
+ assert(lst);
+ for (auto &a : v) {
+ signature<std::pair<A, B>>::set(lst, a, true);
+ }
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static bool get(const DBusWrapper::MessageIterPtr &iter, std::map<A, B> &v)
+ {
+ auto s = DBUS_W->eldbus_message_iter_get_and_next_by_type_impl(iter, 'a');
+ if (!s)
+ return false;
+ std::pair<A, B> a;
+ while (signature<std::pair<A, B>>::get(s, a))
+ v.insert(std::move(a));
+ return true;
+ }
+ };
+ /**
+ * @brief Signature helper class for marshalling const reference types
+ */
+ template <typename A>
+ struct signature<const A &>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "const " + signature<A>::name() + "&";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature<A>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const A &v)
+ {
+ signature<A>::set(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static void get(const DBusWrapper::MessageIterPtr &iter, A &v)
+ {
+ signature<A>::get(iter, v);
+ }
+ };
+ /**
+ * @brief Signature helper class for marshalling reference types
+ */
+ template <typename A>
+ struct signature<A &>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return signature<A>::name() + "&";
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature<A>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const A &v)
+ {
+ signature<A>::set(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static void get(const DBusWrapper::MessageIterPtr &iter, A &v)
+ {
+ signature<A>::get(iter, v);
+ }
+ };
+ /**
+ * @brief Signature helper class for marshalling const types
+ */
+ template <typename A>
+ struct signature<const A>
+ {
+ /**
+ * @brief Returns name of type marshalled, for informative purposes
+ */
+ static std::string name()
+ {
+ return "const " + signature<A>::name();
+ }
+ /**
+ * @brief Returns DBUS' signature of type marshalled
+ */
+ static std::string sig()
+ {
+ return signature<A>::sig();
+ }
+ /**
+ * @brief Marshals value v as marshalled type into message
+ */
+ static void set(const DBusWrapper::MessageIterPtr &iter, const A &v)
+ {
+ signature<A>::set(iter, v);
+ }
+ /**
+ * @brief Marshals value from marshalled type into variable v
+ */
+ static void get(const DBusWrapper::MessageIterPtr &iter, A &v)
+ {
+ signature<A>::get(iter, v);
+ }
+ };
+ /// \cond
+ using CallId = DBusWrapper::CallId;
+
+ template <typename ValueType>
+ ValueType unpackValues(CallId callId, const DBusWrapper::MessagePtr &msg)
+ {
+ auto iter = DBUS_W->eldbus_message_iter_get_impl(msg, false);
+ ValueType r;
+
+ if (iter) {
+ if (!signature<ValueType>::get(iter, r)) {
+ DBUS_DEBUG("ValueType is %s", signature<ValueType>::name().c_str());
+ r = Error{"call " + std::to_string(callId.id) + ": failed to unpack values, got signature '" +
+ DBUS_W->eldbus_message_signature_get_impl(msg) + "', expected '" + signature<ValueType>::sig() + "'"};
+ }
+ } else {
+ r = Error{"call " + std::to_string(callId.id) + ": failed to get iterator"};
+ }
+ return r;
+ }
+ inline void packValues_helper(const DBusWrapper::MessageIterPtr &) {}
+ template <typename A, typename... ARGS>
+ void packValues_helper(const DBusWrapper::MessageIterPtr &iter, A &&a, ARGS &&... r)
+ {
+ signature<A>::set(iter, std::forward<A>(a));
+ packValues_helper(iter, std::forward<ARGS>(r)...);
+ }
+ template <typename... ARGS>
+ void packValues(CallId callId, const DBusWrapper::MessagePtr &msg, ARGS &&... r)
+ {
+ auto iter = DBUS_W->eldbus_message_iter_get_impl(msg, true);
+ packValues_helper(iter, std::forward<ARGS>(r)...);
+ }
+
+ template <typename>
+ struct ReturnType;
+ template <typename R, typename... ARGS>
+ struct ReturnType<R(ARGS...)>
+ {
+ using type = R;
+ };
+ template <typename R, typename... ARGS>
+ struct ReturnType<std::function<R(ARGS...)>>
+ {
+ using type = R;
+ };
+ template <int...>
+ struct sequence
+ {
+ };
+ template <int N, int... S>
+ struct sequence_gen : sequence_gen<N - 1, N - 1, S...>
+ {
+ };
+ template <int... S>
+ struct sequence_gen<0, S...>
+ {
+ typedef sequence<S...> type;
+ };
+ template <typename C, typename... ARGS>
+ struct apply_helper
+ {
+ const std::function<C> &c;
+ const std::tuple<ARGS...> &args;
+
+ template <int... S>
+ auto apply_2(sequence<S...>) const -> decltype(c(std::get<S>(args)...))
+ {
+ return c(std::get<S>(args)...);
+ }
+ auto apply_1() const -> decltype(apply_2(typename sequence_gen<sizeof...(ARGS)>::type()))
+ {
+ return apply_2(typename sequence_gen<sizeof...(ARGS)>::type());
+ }
+ };
+ template <typename C, typename A, typename... ARGS>
+ struct apply_helper_2
+ {
+ const std::function<C> &c;
+ const A &a;
+ const std::tuple<ARGS...> &args;
+
+ template <int... S>
+ auto apply_2(sequence<S...>) const -> decltype(c(a, std::get<S>(args)...))
+ {
+ return c(a, std::get<S>(args)...);
+ }
+ auto apply_1() const -> decltype(apply_2(typename sequence_gen<sizeof...(ARGS)>::type()))
+ {
+ return apply_2(typename sequence_gen<sizeof...(ARGS)>::type());
+ }
+ };
+ template <typename C, typename... ARGS>
+ auto apply(const std::function<C> &c, const std::tuple<ARGS...> &args) -> typename ReturnType<C>::type
+ {
+ apply_helper<C, ARGS...> ah{c, args};
+ return ah.apply_1();
+ }
+ template <typename C, typename D, typename... ARGS>
+ auto apply(const std::function<C> &c, const D &d, const std::tuple<ARGS...> &args) -> typename ReturnType<C>::type
+ {
+ apply_helper_2<C, D, ARGS...> ah{c, d, args};
+ return ah.apply_1();
+ }
+
+ struct ConnectionState
+ {
+ DBusWrapper::ConnectionPtr connection;
+ DBusWrapper::ObjectPtr object;
+ DBusWrapper::ProxyPtr proxy, propertiesProxy;
+ };
+ template <typename RETTYPE, typename... ARGS>
+ RETTYPE call(CallId callId, const ConnectionState &connectionState, bool property, double timeout, const std::string &funcName, const ARGS &... args)
+ {
+ const auto &proxy = property ? connectionState.propertiesProxy : connectionState.proxy;
+ if (!proxy) {
+ DBUS_DEBUG("call %d: not initialized", callId.id);
+ return Error{"not initialized"};
+ }
+
+ DBUS_DEBUG("call %d: calling '%s'", callId.id, funcName.c_str());
+ auto msg = DBUS_W->eldbus_proxy_method_call_new_impl(proxy, funcName);
+ if (!msg) {
+ DBUS_DEBUG("call %d: failed", callId.id);
+ return Error{"failed to create message"};
+ }
+
+ detail::packValues(callId, msg, args...);
+ auto reply = DBUS_W->eldbus_proxy_send_and_block_impl(proxy, msg, timeout);
+ DBUS_DEBUG("call %d: calling '%s' done", callId.id, funcName.c_str());
+ if (!reply) {
+ DBUS_DEBUG("call %d: failed", callId.id);
+ return Error{"eldbus returned null as reply"};
+ }
+ std::string errname, errmsg;
+ if (DBUS_W->eldbus_message_error_get_impl(reply, errname, errmsg)) {
+ DBUS_DEBUG("call %d: %s: %s", callId.id, errname.c_str(), errmsg.c_str());
+ return Error{errname + ": " + errmsg};
+ }
+ DBUS_DEBUG("call %d: got reply with signature '%s'", callId.id, DBUS_W->eldbus_message_signature_get_impl(reply).c_str());
+ return detail::unpackValues<RETTYPE>(callId, reply);
+ }
+
+ template <typename RETTYPE, typename... ARGS>
+ void asyncCall(CallId callId, const ConnectionState &connectionState, bool property, double timeout, const std::string &funcName, std::function<void(RETTYPE)> callback, const ARGS &... args)
+ {
+ const auto &proxy = property ? connectionState.propertiesProxy : connectionState.proxy;
+ if (!proxy) {
+ DBUS_DEBUG("call %d: not initialized", callId.id);
+ callback(Error{"not initialized"});
+ return;
+ }
+
+ auto msg = DBUS_W->eldbus_proxy_method_call_new_impl(proxy, funcName);
+ if (!msg) {
+ DBUS_DEBUG("call %d: failed", callId.id);
+ callback(Error{"failed to create message"});
+ return;
+ }
+
+ detail::packValues(callId, msg, args...);
+ auto pending = DBUS_W->eldbus_proxy_send_impl(proxy, msg, [callback, callId, proxy](const DBusWrapper::MessagePtr &reply) {
+ DBUS_DEBUG("call %d: calling done", callId.id);
+ if (!reply) {
+ DBUS_DEBUG("call %d: failed", callId.id);
+ callback(Error{"eldbus returned null as reply"});
+ } else {
+ std::string errname, errmsg;
+ if (DBUS_W->eldbus_message_error_get_impl(reply, errname, errmsg)) {
+ DBUS_DEBUG("call %d: %s: %s", callId.id, errname.c_str(), errmsg.c_str());
+ callback(Error{errname + ": " + errmsg});
+ } else {
+ DBUS_DEBUG("call %d: got reply with signature '%s'", callId.id, DBUS_W->eldbus_message_signature_get_impl(reply).c_str());
+ callback(detail::unpackValues<RETTYPE>(callId, reply));
+ }
+ }
+ },
+ timeout);
+ if (pending) {
+ DBUS_DEBUG("call %d: call sent", callId.id);
+ } else {
+ DBUS_DEBUG("call %d: failed to send call", callId.id);
+ callback(Error{"failed to send call"});
+ }
+ }
+ inline void displayDebugCallInfo(CallId callId, const std::string &funcName, const std::string &info, const std::string &interfaceName)
+ {
+ DBUS_DEBUG("call %d: %s iname = %s fname = %s", callId.id, info.c_str(), interfaceName.c_str(), funcName.c_str());
+ }
+ inline void displayDebugCallInfoSignal(CallId callId, const std::string &funcName, const std::string &info, const std::string &interfaceName)
+ {
+ DBUS_DEBUG("call %d: %s signal iname = %s fname = %s", callId.id, info.c_str(), interfaceName.c_str(), funcName.c_str());
+ }
+ inline void displayDebugCallInfoProperty(CallId callId, const std::string &funcName, std::string info, const std::string &interfaceName, const std::string &propertyName)
+ {
+ DBUS_DEBUG("call %d: %s iname = %s pname = %s", callId.id, info.c_str(), interfaceName.c_str(), propertyName.c_str());
+ }
+
+ using StringStorage = DBusWrapper::StringStorage;
+
+ template <typename A, typename... ARGS>
+ struct EldbusArgGenerator_Helper
+ {
+ static void add(std::vector<std::pair<std::string, std::string>> &r)
+ {
+ auto s = r.size();
+ auto sig = signature<A>::sig();
+ assert(!sig.empty());
+ auto name = "p" + std::to_string(s + 1);
+ r.push_back({std::move(sig), std::move(name)});
+ EldbusArgGenerator_Helper<ARGS...>::add(r);
+ }
+ };
+ template <>
+ struct EldbusArgGenerator_Helper<void>
+ {
+ static void add(std::vector<std::pair<std::string, std::string>> &)
+ {
+ }
+ };
+ template <>
+ struct EldbusArgGenerator_Helper<ValueOrError<void>, void>
+ {
+ static void add(std::vector<std::pair<std::string, std::string>> &)
+ {
+ }
+ };
+ template <>
+ struct EldbusArgGenerator_Helper<ValueOrError<>, void>
+ {
+ static void add(std::vector<std::pair<std::string, std::string>> &)
+ {
+ }
+ };
+ template <typename... ARGS>
+ struct EldbusArgGenerator_Helper<std::tuple<ARGS...>>
+ {
+ static void add(std::vector<std::pair<std::string, std::string>> &r)
+ {
+ EldbusArgGenerator_Helper<ARGS..., void>::add(r);
+ }
+ };
+ template <typename RetType>
+ struct dbus_interface_return_type_traits
+ {
+ using type = ValueOrError<RetType>;
+ };
+ template <typename... ARGS>
+ struct dbus_interface_return_type_traits<ValueOrError<ARGS...>>
+ {
+ using type = ValueOrError<ARGS...>;
+ };
+ template <typename T>
+ struct dbus_interface_traits;
+ template <typename RetType, typename... ARGS>
+ struct dbus_interface_traits<RetType(ARGS...)>
+ {
+ using Ret = typename dbus_interface_return_type_traits<RetType>::type;
+ using SyncCB = std::function<Ret(ARGS...)>;
+ using AsyncCB = std::function<void(std::function<void(Ret)>, ARGS...)>;
+ using VEArgs = ValueOrError<ARGS...>;
+ };
+ template <typename T>
+ struct EldbusArgGenerator_Args;
+ template <typename RetType, typename... ARGS>
+ struct EldbusArgGenerator_Args<RetType(ARGS...)>
+ {
+ static std::string name()
+ {
+ return signature_tuple_helper<0, sizeof...(ARGS), ARGS...>::name();
+ }
+ static std::vector<std::pair<std::string, std::string>> get()
+ {
+ std::vector<std::pair<std::string, std::string>> tmp;
+ EldbusArgGenerator_Helper<ARGS..., void>::add(tmp);
+ return tmp;
+ }
+ };
+ template <typename T>
+ struct EldbusArgGenerator_ReturnType;
+ template <typename RetType, typename... ARGS>
+ struct EldbusArgGenerator_ReturnType<RetType(ARGS...)>
+ {
+ static std::string name()
+ {
+ return signature<RetType>::name();
+ }
+ static std::vector<std::pair<std::string, std::string>> get()
+ {
+ std::vector<std::pair<std::string, std::string>> tmp;
+ EldbusArgGenerator_Helper<RetType, void>::add(tmp);
+ return tmp;
+ }
+ };
+ template <typename T>
+ struct EldbusArgGenerator_ReturnType;
+ template <typename... ARGS>
+ struct EldbusArgGenerator_ReturnType<void(ARGS...)>
+ {
+ static std::string name()
+ {
+ return "";
+ }
+ static std::vector<std::pair<std::string, std::string>> get()
+ {
+ return {};
+ }
+ };
+ /// \endcond
+ } // namespace detail
+
+ using ConnectionType = DBusWrapper::ConnectionType;
+
+ struct InfinitiveTimeout_
+ {
+ };
+ static constexpr InfinitiveTimeout_ InfinitiveTimeout;
+
+ /**
+ * @brief Class representing client's end of DBUS connection
+ *
+ * Allows calling (synchronous and asynchronos) methods on selected interface
+ * Allows (synchronous and asynchronos) setting / getting properties.
+ * Allows registering signals.
+ */
+
+ class DBusClient
+ {
+ /// \cond
+ struct ConnectionInfo
+ {
+ std::string interfaceName, busName, pathName;
+ };
+ /// \endcond
+ public:
+ /**
+ * @brief Default constructor, creates non-connected object.
+ */
+ DBusClient() = default;
+ /**
+ * @brief Connects to dbus choosen by tp, using given arguments
+ *
+ * @param bus_name name of the bus to connect to
+ * @param path_name object's path
+ * @param interface_name interface name
+ */
+ DBusClient(std::string busName_, std::string pathName_, std::string interfaceName_, ConnectionType tp);
+ /**
+ * @brief Connects to dbus using connection conn
+ *
+ * @param bus_name name of the bus to connect to
+ * @param path_name object's path
+ * @param interface_name interface name
+ * @param conn connection object from getDBusConnectionByType call
+ */
+ DBusClient(std::string busName_, std::string pathName_, std::string interfaceName_, const DBusWrapper::ConnectionPtr &conn = {});
+ /**
+ * @brief Destructor object.
+ *
+ * All signals added will be disconnected.
+ * All asynchronous calls will be cancelled, their callback's will be called
+ * with failure message.
+ */
+ ~DBusClient() = default;
+ DBusClient(const DBusClient &) = delete;
+ DBusClient(DBusClient &&) = default;
+
+ DBusClient &operator=(DBusClient &&) = default;
+ DBusClient &operator=(const DBusClient &) = delete;
+
+ /**
+ * @brief bool operator
+ *
+ * Returns true, if object is connected to DBUS
+ */
+ explicit operator bool() const
+ {
+ return bool(connectionState->proxy);
+ }
+
+ /**
+ * @brief Helper class for calling a method
+ *
+ * Template type T defines both arguments sent to the method
+ * and expected values. Receiving different values will be reported as
+ * error. For example:
+ * \code{.cpp} Method<int(float, float)> \endcode
+ * defines method, which takes two arguments (two floats) and return
+ * single value of type int.
+ */
+ template <typename T>
+ struct Method
+ {
+ /// \cond
+ using RetType = typename detail::dbus_interface_traits<T>::Ret;
+ const detail::ConnectionState &connectionState;
+ std::string funcName;
+ std::string info;
+ std::shared_ptr<ConnectionInfo> connectionInfo;
+ double timeout_ = 1.0;
+ /// \endcond
+
+ /**
+ * @brief Executes synchronous call on DBUS's method
+ *
+ * The function returns ValueOrError<...> object, which
+ * contains either received values or error message.
+ *
+ * @param args arguments to pass to the method
+ */
+ template <typename... ARGS>
+ RetType call(const ARGS &... args)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfo(callId, funcName, info, connectionInfo->interfaceName);
+ return detail::call<RetType>(callId, connectionState, false, timeout_, funcName, args...);
+ }
+
+ auto &timeout(double d)
+ {
+ timeout_ = d;
+ return *this;
+ }
+
+ auto &timeout(InfinitiveTimeout_)
+ {
+ timeout_ = -1;
+ return *this;
+ }
+ /**
+ * @brief Executes asynchronous call on DBUS's method
+ *
+ * The function calls callback with either received values or error message.
+ *
+ * @param callback callback functor, which will be called with return value(s) or error message
+ * @param args arguments to pass to the method
+ */
+ template <typename... ARGS>
+ void asyncCall(std::function<void(RetType)> callback, const ARGS &... args)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfo(callId, funcName, info, connectionInfo->interfaceName);
+ detail::asyncCall<RetType>(callId, connectionState, false, timeout_, funcName, std::move(callback), args...);
+ }
+ };
+
+ /**
+ * @brief Helper class for calling a property
+ *
+ * Template type T defines type of the value hidden under property.
+ * Note, that library automatically wraps both sent and received value into
+ * DBUS's wrapper type.
+ */
+ template <typename T>
+ struct Property
+ {
+ /// \cond
+ using RetType = typename detail::dbus_interface_return_type_traits<T>::type;
+ using VariantRetType = typename detail::dbus_interface_return_type_traits<EldbusVariant<T>>::type;
+ const detail::ConnectionState &connectionState;
+ std::string propName;
+ std::string info;
+ std::shared_ptr<ConnectionInfo> connectionInfo;
+ /// \endcond
+
+ /**
+ * @brief executes synchronous get on property
+ *
+ * The function returns ValueOrError<...> object, which
+ * contains either received values or error message.
+ */
+ RetType get()
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoProperty(callId, "Get", info, connectionInfo->interfaceName, propName);
+ auto z = detail::call<VariantRetType>(callId, connectionState, true, "Get", connectionInfo->interfaceName, propName);
+ if (!z)
+ return z.getError();
+ return {std::get<0>(z.getValues()).value};
+ }
+
+ /**
+ * @brief executes asynchronous get on property
+ *
+ * The function calls callback with either received values or error message.
+ *
+ * @param callback callback functor, which will be called with return value(s) or error message
+ */
+ void asyncGet(std::function<void(RetType)> callback)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoProperty(callId, "Get", info, connectionInfo->interfaceName, propName);
+ auto cc = [callback](VariantRetType reply) {
+ if (reply)
+ callback(std::move(std::get<0>(reply.getValues()).value));
+ else
+ callback(reply.getError());
+ };
+ detail::asyncCall<VariantRetType>(callId, connectionState, true, "Get", std::move(cc), connectionInfo->interfaceName, propName);
+ }
+
+ /**
+ * @brief executes synchronous set on property
+ *
+ * The function returns ValueOrError<void> object, with
+ * possible error message.
+ */
+ ValueOrError<void> set(const T &r)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoProperty(callId, "Set", info, connectionInfo->interfaceName, propName);
+ EldbusVariant<T> variantValue{std::move(r)};
+ return detail::call<ValueOrError<void>>(callId, connectionState, true, "Set", connectionInfo->interfaceName, propName, variantValue);
+ }
+
+ /**
+ * @brief executes asynchronous get on property
+ *
+ * The function calls callback with either received values or error message.
+ *
+ * @param callback callback functor, which will be called with return value(s) or error message
+ */
+ void asyncSet(std::function<void(ValueOrError<void>)> callback, const T &r)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoProperty(callId, "Set", info, connectionInfo->interfaceName, propName);
+ EldbusVariant<T> variantValue{std::move(r)};
+ detail::asyncCall<ValueOrError<void>>(callId, connectionState, true, "Set", std::move(callback), connectionInfo->interfaceName, propName, variantValue);
+ }
+ };
+
+ /**
+ * @brief Constructs Property<...> object for calling properties
+ *
+ * The function constructs and returns proxy object for calling property.
+ *
+ * @param propName property name to set and / or query
+ */
+ template <typename PropertyType>
+ Property<PropertyType> property(std::string propName)
+ {
+ return Property<PropertyType>{*connectionState, std::move(propName), info, connectionInfo};
+ }
+
+ /**
+ * @brief Constructs Method<...> object for calling methods
+ *
+ * The function constructs and returns proxy object for calling method.
+ *
+ * @param funcName function name to call
+ */
+ template <typename MethodType>
+ Method<MethodType> method(std::string funcName)
+ {
+ return Method<MethodType>{*connectionState, std::move(funcName), info, connectionInfo};
+ }
+
+ /**
+ * @brief Registers notification callback, when property has changed
+ *
+ * The callback will be called with new value, when property's value has changed.
+ * Note, that template type V must match expected type, otherwise undefined behavior will occur,
+ * there's no check for this.
+ */
+ template <typename V>
+ void addPropertyChangedEvent(std::string propertyName, std::function<void(V)> callback)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoSignal(callId, propertyName, info, connectionInfo->interfaceName);
+ DBUS_DEBUG("call %d: adding property", callId.id);
+ auto &cI = this->connectionInfo;
+ DBUS_W->add_property_changed_event_listener_impl(connectionState->proxy, cI->interfaceName, propertyName, [callback](const _Eina_Value *newValue) {
+ V val = 0;
+ if (!getFromEinaValue(newValue, &val)) {
+ DBUS_DEBUG("unable to get property's value");
+ return;
+ }
+ callback(val);
+ });
+ }
+ /**
+ * @brief Registers callback on the DBUS' signal
+ *
+ * The function registers callback signalName. When signal comes, callback will be called.
+ * Callback object will exists as long as signal is registered. You can unregister signal
+ * by destroying DBusClient object.
+ *
+ * @param signalName name of the signal to register
+ * @param callback callback to call
+ */
+ template <typename SignalType>
+ void addSignal(std::string signalName, std::function<SignalType> callback)
+ {
+ detail::CallId callId;
+ detail::displayDebugCallInfoSignal(callId, signalName, info, connectionInfo->interfaceName);
+ DBUS_W->eldbus_proxy_signal_handler_add_impl(connectionState->proxy, signalName, [callId, callback, signalName](const DBusWrapper::MessagePtr &msg) -> void {
+ std::string errname, aux;
+ if (DBUS_W->eldbus_message_error_get_impl(msg, errname, aux)) {
+ DBUS_DEBUG("call %d: Eldbus error: %s %s", callId.id, errname.c_str(), aux.c_str());
+ return;
+ }
+ DBUS_DEBUG("call %d: received signal with signature '%s'", callId.id, DBUS_W->eldbus_message_signature_get_impl(msg).c_str());
+ using ParamsType = typename detail::dbus_interface_traits<SignalType>::VEArgs;
+ auto params = detail::unpackValues<ParamsType>(callId, msg);
+ if (!params) {
+ DBUS_DEBUG("call %d: failed: %s", callId.id, params.getError().message.c_str());
+ return;
+ }
+ try {
+ detail::apply(callback, params.getValues());
+ } catch (...) {
+ DBUS_DEBUG("unhandled exception");
+ assert(0);
+ }
+ });
+ }
+
+ private:
+ /// \cond
+ std::unique_ptr<detail::ConnectionState> connectionState{new detail::ConnectionState};
+ std::string info;
+ std::shared_ptr<ConnectionInfo> connectionInfo;
+
+ static bool getFromEinaValue(const _Eina_Value *v, void *dst);
+ /// \endcond
+ };
+
+ /**
+ * @brief Helper class describing DBUS's server interface
+ *
+ */
+ class DBusInterfaceDescription
+ {
+ friend class DBusServer;
+
+ public:
+ /// \cond
+ using MethodInfo = DBusWrapper::MethodInfo;
+ using SignalInfo = DBusWrapper::SignalInfo;
+ using PropertyInfo = DBusWrapper::PropertyInfo;
+ using SignalId = DBusWrapper::SignalId;
+ /// \endcond
+
+ /**
+ * @brief Creates empty interface description with given name
+ *
+ * @param interfaceName name of the interface
+ */
+ DBusInterfaceDescription(std::string interfaceName);
+
+ /**
+ * @brief adds new, synchronous method to the interface
+ *
+ * When method memberName is called on DBUS, callback functor will be called
+ * with values received from DBUS. callback won't be called, if method was
+ * called with invalid signature. Value returned from functor (or error message)
+ * will be marshalled back to the caller.
+ *
+ * Template type T defines both arguments sent to the method
+ * and expected values. Receiving different values will be reported as
+ * error. For example:
+ * \code{.cpp} Method<int(float, float)> \endcode
+ * defines method, which takes two arguments (two floats) and return
+ * single value of type int.
+ *
+ * @param memberName name of the method
+ * @param callback functor, which will be called
+ */
+ template <typename T>
+ void addMethod(const std::string &memberName, typename detail::dbus_interface_traits<T>::SyncCB callback)
+ {
+ detail::CallId callId;
+ MethodInfo mi;
+ methods.push_back(std::move(mi));
+ auto &z = methods.back();
+ z.in = detail::EldbusArgGenerator_Args<T>::get();
+ z.out = detail::EldbusArgGenerator_ReturnType<T>::get();
+ z.memberName = memberName;
+ DBUS_DEBUG("call %d: method %s, in %s, out %s", callId.id, memberName.c_str(), detail::EldbusArgGenerator_Args<T>::name().c_str(), detail::EldbusArgGenerator_ReturnType<T>::name().c_str());
+ z.callback = construct<T>(callId, callback);
+ z.id = callId;
+ }
+
+ /**
+ * @brief adds new, synchronous property to the interface
+ *
+ * When property memberName is called on DBUS, respective callback functor will be called
+ * with values received from DBUS. callback won't be called, if method was
+ * called with invalid signature. Value returned from functor (or error message)
+ * will be marshalled back to the caller.
+ *
+ * Template type T defines type of the value hidden under property.
+ * Note, that library automatically wraps both sent and received value into
+ * DBUS's wrapper type.
+ *
+ * @param memberName name of the method
+ * @param getter functor, which will be called when property is being read
+ * @param setter functor, which will be called when property is being set
+ */
+ template <typename T>
+ void addProperty(const std::string &memberName, std::function<ValueOrError<T>()> getter, std::function<ValueOrError<void>(T)> setter)
+ {
+ properties.push_back({});
+ auto &z = properties.back();
+ z.memberName = memberName;
+ z.typeSignature = detail::signature<T>::sig();
+ if (getter) {
+ detail::CallId getterId;
+ z.getterId = getterId;
+ DBUS_DEBUG("call %d: property %s (get) type %s", getterId.id, memberName.c_str(), detail::signature<T>::name().c_str());
+ z.getCallback = [=](const DBusWrapper::MessagePtr &src, const DBusWrapper::MessageIterPtr &dst) -> std::string {
+ try {
+ auto v = detail::apply(getter, std::tuple<>{});
+ if (v) {
+ detail::signature<T>::set(dst, std::get<0>(v.getValues()));
+ DBUS_DEBUG("call %d: success", getterId.id);
+ return "";
+ }
+ DBUS_DEBUG("call %d: failed: %s", getterId.id, v.getError().message.c_str());
+ return v.getError().message;
+ } catch (std::exception &e) {
+ return std::string("unhandled exception (") + e.what() + ")";
+ } catch (...) {
+ return "unhandled exception";
+ }
+ };
+ }
+ if (setter) {
+ detail::CallId setterId;
+ z.setterId = setterId;
+ DBUS_DEBUG("call %d: property %s (set) type %s", setterId.id, memberName.c_str(), detail::signature<T>::name().c_str());
+ z.setCallback = [=](const DBusWrapper::MessagePtr &src, const DBusWrapper::MessageIterPtr &src_iter) -> std::string {
+ std::tuple<T> value;
+ auto src_signature = DBUS_W->eldbus_message_iter_signature_get_impl(src_iter);
+ if (detail::signature<T>::get(src_iter, std::get<0>(value))) {
+ try {
+ auto v = detail::apply(setter, std::move(value));
+ if (v) {
+ DBUS_DEBUG("call %d: success", setterId.id);
+ return "";
+ }
+ DBUS_DEBUG("call %d: failed: %s", setterId.id, v.getError().message.c_str());
+ return v.getError().message;
+ } catch (std::exception &e) {
+ return std::string("unhandled exception (") + e.what() + ")";
+ } catch (...) {
+ return "unhandled exception";
+ }
+ }
+ DBUS_DEBUG("call %d: failed to unpack values, got signature '%s', expected '%s'", setterId.id, src_signature.c_str(), detail::signature<T>::sig().c_str());
+ return "call " + std::to_string(setterId.id) + ": failed to unpack values, got signature '" +
+ src_signature + "', expected '" + detail::signature<T>::sig() + "'";
+ };
+ }
+ }
+
+ /**
+ * @brief adds new signal to the interface
+ *
+ * Template types ARGS defines values, which will be emited with the signal
+ *
+ * @param memberName name of the method
+ */
+ template <typename... ARGS>
+ SignalId addSignal(const std::string &memberName)
+ {
+ detail::CallId callId;
+ signals.push_back({});
+ auto &z = signals.back();
+ z.memberName = memberName;
+ z.args = detail::EldbusArgGenerator_Args<void(ARGS...)>::get(DBUS_W->Strings);
+ z.id = callId;
+ DBUS_DEBUG("call %d: signal %s", callId.id, memberName.c_str());
+ return SignalId{callId};
+ }
+
+ private:
+ /// \cond
+ std::vector<MethodInfo> methods;
+ std::vector<PropertyInfo> properties;
+ std::vector<SignalInfo> signals;
+ std::string interfaceName;
+
+ template <typename T>
+ std::function<DBusWrapper::MessagePtr(const DBusWrapper::MessagePtr &msg)> construct(detail::CallId callId,
+ typename detail::dbus_interface_traits<T>::SyncCB callback)
+ {
+ using VEArgs = typename detail::dbus_interface_traits<T>::VEArgs;
+ return [=](const DBusWrapper::MessagePtr &msg) -> DBusWrapper::MessagePtr {
+ DBUS_DEBUG("call %d: entering", callId.id);
+ DBusWrapper::MessagePtr ret = {};
+ auto args = detail::unpackValues<VEArgs>(callId, msg);
+ if (args) {
+ try {
+ auto v = detail::apply(callback, std::move(args.getValues()));
+ if (v) {
+ DBUS_DEBUG("call %d: success", callId.id);
+ ret = DBUS_W->eldbus_message_method_return_new_impl(msg);
+ detail::packValues(callId, ret, v);
+ } else {
+ DBUS_DEBUG("call %d: failed: %s", callId.id, v.getError().message.c_str());
+ ret = DBUS_W->eldbus_message_error_new_impl(msg, "org.freedesktop.DBus.Error.Failed", v.getError().message);
+ }
+ } catch (std::exception &e) {
+ auto txt = std::string("unhandled exception (") + e.what() + ")";
+ DBUS_DEBUG("call %d: failed: %s", callId.id, txt.c_str());
+ ret = DBUS_W->eldbus_message_error_new_impl(msg, "org.freedesktop.DBus.Error.Failed", txt);
+ } catch (...) {
+ DBUS_DEBUG("call %d: failed: %s", callId.id, "unhandled exception");
+ ret = DBUS_W->eldbus_message_error_new_impl(msg, "org.freedesktop.DBus.Error.Failed", "unhandled exception");
+ }
+ } else {
+ std::ostringstream err;
+ err << "expected signature '" << detail::signature<VEArgs>::sig() << "', got '" << DBUS_W->eldbus_message_signature_get_impl(msg) << "'";
+ auto str = err.str();
+ DBUS_DEBUG("call %d: failed: %s", callId.id, str.c_str());
+ ret = DBUS_W->eldbus_message_error_new_impl(msg, "org.freedesktop.DBus.Error.InvalidArgs", str);
+ }
+ return ret;
+ };
+ }
+ /// \endcond
+ };
+
+ /**
+ * @brief Class representing server's end of DBUS connection
+ *
+ * Allows listening (synchronously and asynchronosly) on methods on selected interface
+ * Allows listening (synchronously and asynchronosly) on setting / getting properties.
+ * Allows emiting signals.
+ */
+ class DBusServer
+ {
+ public:
+ /**
+ * @brief Constructs non-connected dbus server.
+ */
+ DBusServer() = default;
+
+ /**
+ * @brief Constructs dbus server on either system or user dbus connection.
+ */
+
+ DBusServer(ConnectionType tp);
+ /**
+ * @brief Constructs dbus server on connection from getDBusConnectionByType
+ */
+
+ DBusServer(const DBusWrapper::ConnectionPtr &conn);
+ /**
+ * @brief Destructor
+ *
+ * Destructor will properly destroy everything. Destructor will cancel
+ * pending replies.
+ */
+ ~DBusServer() = default;
+
+ DBusServer(const DBusServer &) = delete;
+ DBusServer(DBusServer &&) = default;
+
+ DBusServer &operator=(DBusServer &&) = default;
+ DBusServer &operator=(const DBusServer &) = delete;
+
+ /**
+ * @brief Registers interface on given path name
+ *
+ * @param pathName path object to register interface on.
+ * @param dscr
+ * @param fallback
+ */
+ void addInterface(const std::string &pathName, DBusInterfaceDescription &dscr, bool fallback = false);
+
+ /**
+ * @brief Gets bus name of the current connection (must be connected)
+ */
+ std::string getBusName() const;
+
+ /**
+ * @brief Returns connection object for this dbus server object
+ *
+ * @return connection object
+ */
+ DBusWrapper::ConnectionPtr getConnection();
+
+ /**
+ * @brief Emits signal
+ *
+ * Emits signal based only on data passed to the function
+ *
+ * @param signal identifier of the signal
+ * @param args values to emit
+ */
+ template <typename... ARGS>
+ void emit2(const std::string &path, const std::string &interfaceName, const std::string &signalName, const ARGS &... args)
+ {
+ auto msg = DBUS_W->eldbus_message_signal_new_impl(path, interfaceName, signalName);
+ detail::CallId id;
+ detail::packValues(id, msg, args...);
+ DBUS_W->eldbus_connection_send_impl(connection, msg);
+ }
+ /**
+ * @brief Returns current object path, when handling call to property / method
+ *
+ * User can call this function from inside callback used to handle property / method calls.
+ * It will retrieve object's path used in the call. Note, that in asynchronous handling
+ * of those calls user need to retrieve and store the current object / current connection
+ * as the value will change at the moment user's callback handling will exit. For example:
+ * \code{.cpp}
+ * DBusInterfaceDescription interface{"name"};
+ * auto handler_later = [](std::function<void(void)> done_cb) {
+ * // process something later on
+ * DBusServer::getCurrentObjectPath(); // this will return empty string
+ * };
+ * interface.addAsyncMethod<void()>("m", [=](std::function<void(void)> done_cb) {
+ * DBusServer::getCurrentObjectPath(); // this will current object's path
+ *
+ * // do some processing later on and call done_cb, when it's done
+ * register_to_call_sometime_later_on(std::move(done_cb));
+ * };
+ * \endcode
+ */
+ static std::string getCurrentObjectPath() { return currentObjectPath; }
+
+ /**
+ * @brief Returns current connection object, when handling call to property / method
+ *
+ * User can call this function from inside callback used to handle property / method calls.
+ * It will retrieve object's path used in the call. Note, that in asynchronous handling
+ * of those calls user need to retrieve and store the current object / current connection
+ * as the value will change at the moment user's callback handling will exit. For example:
+ * \code{.cpp}
+ * DBusInterfaceDescription interface{"name"};
+ * auto handler_later = [](std::function<void(void)> done_cb) {
+ * // process something later on
+ * DBusServer::getCurrentObjectPath(); // this will return empty string
+ * };
+ * interface.addAsyncMethod<void()>("m", [=](std::function<void(void)> done_cb) {
+ * DBusServer::getCurrentObjectPath(); // this will current object's path
+ *
+ * // do some processing later on and call done_cb, when it's done
+ * register_to_call_sometime_later_on(std::move(done_cb));
+ * };
+ * \endcode
+ */
+ static const DBusWrapper::ConnectionPtr &getCurrentConnection() { return currentConnection; }
+
+ /// \cond
+ class CurrentObjectSetter
+ {
+ public:
+ CurrentObjectSetter(DBusWrapper::ConnectionPtr con, std::string path)
+ {
+ currentObjectPath = std::move(path);
+ currentConnection = std::move(con);
+ }
+ ~CurrentObjectSetter()
+ {
+ currentObjectPath = "";
+ currentConnection = {};
+ }
+ CurrentObjectSetter(const CurrentObjectSetter &) = delete;
+ CurrentObjectSetter(CurrentObjectSetter &&) = delete;
+ void operator=(const CurrentObjectSetter &) = delete;
+ void operator=(CurrentObjectSetter &&) = delete;
+ };
+ /// \endcond
+ private:
+ /// \cond
+ DBusWrapper::ConnectionPtr connection;
+ struct DestructorObject
+ {
+ std::vector<std::function<void()>> destructors;
+ ~DestructorObject()
+ {
+ for (auto &a : destructors)
+ a();
+ }
+ };
+ std::unique_ptr<DestructorObject> destructorObject{new DestructorObject()};
+ static thread_local std::string currentObjectPath;
+ static thread_local DBusWrapper::ConnectionPtr currentConnection;
+
+ /// \endcond
+ };
+
+ /// \cond
+ DBusWrapper::ConnectionPtr getDBusConnectionByType(ConnectionType tp);
+ DBusWrapper::ConnectionPtr getDBusConnectionByName(const std::string &name);
+ std::string getConnectionName(const DBusWrapper::ConnectionPtr &);
+ /// \endcond
+} // namespace DBus
+
+/// \cond
+namespace std
+{
+ template <size_t INDEX, typename... ARGS>
+ inline auto get(DBus::ValueOrError<ARGS...> &v) -> decltype(std::get<INDEX>(v.getValues())) &
+ {
+ return std::get<INDEX>(v.getValues());
+ }
+ template <size_t INDEX, typename... ARGS>
+ inline auto get(const DBus::ValueOrError<ARGS...> &v) -> decltype(std::get<INDEX>(v.getValues()))
+ {
+ return std::get<INDEX>(v.getValues());
+ }
+} // namespace std
+/// \endcond
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "TextToSpeech.hpp"
+
+TextToSpeech::TextToSpeech()
+{
+ if (auto ret = tts_create(&handle_))
+
+ {
+ ERROR("tts_create: %s", ttsErrorToString(ret).c_str());
+ return;
+ }
+
+ if (auto ret = tts_set_mode(handle_, TTS_MODE_DEFAULT)) {
+ ERROR("tts_set_mode: %s", ttsErrorToString(ret).c_str());
+ return;
+ }
+
+ if (auto ret = tts_prepare(handle_)) {
+ ERROR("tts_prepare: %s", ttsErrorToString(ret).c_str());
+ return;
+ }
+
+ if (auto ret = tts_setting_initialize())
+ ERROR("tts_setting_initialize: %s", ttsSettingErrorToString(ret).c_str());
+}
+
+TextToSpeech::~TextToSpeech()
+{
+ if (tts_setting_finalize())
+ WARNING("Fail to setting finalize");
+
+ if (tts_destroy(handle_))
+ WARNING("Fail to tts destroy");
+}
+
+void TextToSpeech::play(const std::string &text)
+{
+ int utterance = 0;
+ if (auto ret = tts_add_text(handle_, text.c_str(), nullptr, TTS_VOICE_TYPE_AUTO, TTS_SPEED_AUTO, &utterance))
+ ERROR("tts_add_text: %s", ttsErrorToString(ret).c_str());
+
+ if (auto ret = tts_play(handle_))
+ ERROR("tts_play: %s", ttsErrorToString(ret).c_str());
+}
+
+size_t TextToSpeech::getSpeed()
+{
+ int speed{};
+ auto ret = tts_setting_get_speed(&speed);
+ if (ret)
+ ERROR("tts_setting_get_speed: %s", ttsSettingErrorToString(ret).c_str());
+ else
+ return static_cast<size_t>(speed);
+
+ return {};
+}
+
+void TextToSpeech::setSpeed(size_t speed)
+{
+ auto ret = tts_setting_set_speed(speed);
+ if (ret)
+ ERROR("tts_setting_set_speed: %s", ttsSettingErrorToString(ret).c_str());
+}
+
+auto TextToSpeech::getSpeedRange() -> SpeedRange
+{
+ int min{};
+ int normal{};
+ int max{};
+
+ auto ret = tts_setting_get_speed_range(&min, &normal, &max);
+ if (ret)
+ ERROR("tts_setting_get_speed_range: %s", ttsSettingErrorToString(ret).c_str());
+ else
+ return {static_cast<size_t>(min), static_cast<size_t>(normal), static_cast<size_t>(max)};
+
+ return {};
+}
+
+void TextToSpeech::addSpeedChangedCb(std::function<void(size_t)> onChange)
+{
+ auto ret = tts_setting_set_speed_changed_cb(onSpeedChange, this);
+ if (ret)
+ ERROR("tts_setting_set_speed_changed_cb: %s", ttsSettingErrorToString(ret).c_str());
+ speedChangedCallbacks_.push_back(std::move(onChange));
+}
+
+void TextToSpeech::clearSpeedChangedCallbacks()
+{
+ speedChangedCallbacks_.clear();
+}
+
+std::string TextToSpeech::ttsErrorToString(int error)
+{
+ switch (error) {
+ case TTS_ERROR_NONE: {
+ return "no error";
+ }
+ case TTS_ERROR_INVALID_PARAMETER: {
+ return "invalid parameter";
+ }
+ case TTS_ERROR_OUT_OF_MEMORY: {
+ return "out of memory";
+ }
+ case TTS_ERROR_OPERATION_FAILED: {
+ return "operation failed";
+ }
+ case TTS_ERROR_INVALID_STATE: {
+ return "invalid state";
+ }
+ }
+
+ return "unknown error";
+}
+
+std::string TextToSpeech::ttsSettingErrorToString(int error)
+{
+ switch (error) {
+ case TTS_SETTING_ERROR_NONE: {
+ return "no error";
+ }
+ case TTS_SETTING_ERROR_INVALID_STATE: {
+ return "alread initialized";
+ }
+ case TTS_SETTING_ERROR_OPERATION_FAILED: {
+ return "operation failed";
+ }
+ case TTS_SETTING_ERROR_NOT_SUPPORTED: {
+ return "tts is not supported";
+ }
+ }
+
+ return "unknown error";
+}
+
+void TextToSpeech::onSpeedChange(int speed, void *user_data)
+{
+ auto self = static_cast<TextToSpeech *>(user_data);
+ for (auto it : self->speedChangedCallbacks_)
+ if (it)
+ it(speed);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TEXT_TO_SPEECH_HPP
+#define TEXT_TO_SPEECH_HPP
+
+#include "AccessibilitySettingLog.hpp"
+
+#include <functional>
+#include <tts.h>
+#include <tts_setting.h>
+#include <vector>
+
+class TextToSpeech
+{
+ public:
+ struct SpeedRange
+ {
+ size_t min{};
+ size_t normal{};
+ size_t max{};
+ };
+
+ TextToSpeech();
+ ~TextToSpeech();
+
+ void play(const std::string &text);
+ size_t getSpeed();
+ void setSpeed(size_t speed);
+ SpeedRange getSpeedRange();
+ void addSpeedChangedCb(std::function<void(size_t)> onChange);
+ void clearSpeedChangedCallbacks();
+
+ private:
+ std::string ttsErrorToString(int error);
+ std::string ttsSettingErrorToString(int error);
+ static void onSpeedChange(int speed, void *user_data);
+
+ tts_h handle_ = nullptr;
+ std::vector<std::function<void(size_t)>> speedChangedCallbacks_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "UniversalSwitchSentinel.hpp"
+
+#include "UniversalSwitchConstants.hpp"
+
+UniversalSwitchState::UniversalSwitchState()
+{
+ interactionServiceStateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_INTERACTION_SERVICE, false, [this](auto state) {
+ this->vconfInteractionState_ = state;
+ this->syncInteractionServiceState();
+ });
+
+ configurationServiceStateHandle_ = Singleton<VConfInterface>::instance().registerAndGet<bool>(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_CONFIGURATION_SERVICE, false, [this](auto state) {
+ this->vconfConfigurationState_ = state;
+ this->syncConfigurationServiceState();
+ });
+
+ connectionPtr_ = DBus::getDBusConnectionByType(DBus::ConnectionType::SESSION);
+ ownerNameCallbackHandle_ = DBus::registerNameOwnerChangedCallback(connectionPtr_, BUS, [this](std::string oldID, std::string newID) {
+ dbusConfigurationServiceState_ = true;
+ syncInteractionServiceState();
+ syncConfigurationServiceState();
+ });
+}
+
+UniversalSwitchState::~UniversalSwitchState()
+{
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_CONFIGURATION_SERVICE, false);
+}
+
+void UniversalSwitchState::syncInteractionServiceState()
+{
+ auto v = vconfInteractionState_ && dbusConfigurationServiceState_;
+ if (this->interactionServiceState_.value_ != v) {
+ this->interactionServiceState_.value_ = v;
+ this->interactionServiceState_.notify(v);
+ }
+}
+
+void UniversalSwitchState::syncConfigurationServiceState()
+{
+ auto v = vconfConfigurationState_ && dbusConfigurationServiceState_;
+ if (this->configurationServiceState_.value_ != v) {
+ this->configurationServiceState_.value_ = v;
+ this->configurationServiceState_.notify(v);
+ }
+}
+
+void UniversalSwitchState::setInteractionServiceState(bool state)
+{
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_INTERACTION_SERVICE, state);
+}
+
+void UniversalSwitchState::setConfigurationServiceState(bool state)
+{
+ Singleton<VConfInterface>::instance().set(VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_CONFIGURATION_SERVICE, state);
+}
+
+UniversalSwitchSentinel UniversalSwitchSentinelService::getSentinel()
+{
+ if (auto s = sentinel_.lock()) {
+ return s;
+ } else {
+ auto x = std::make_shared<UniversalSwitchState>();
+ sentinel_ = x;
+ return x;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_SENTINEL_HPP
+#define UNIVERSAL_SWITCH_SENTINEL_HPP
+
+#include "DBus.hpp"
+#include "ObservableProperty.hpp"
+#include "VConf.hpp"
+
+#include <memory>
+
+class UniversalSwitchState
+{
+ public:
+ class ReadOnlyProperty : public Observable<bool>
+ {
+ friend class UniversalSwitchState;
+
+ public:
+ ReadOnlyProperty() = default;
+ ReadOnlyProperty(bool val)
+ : value_(val)
+ {}
+
+ bool value() const
+ {
+ return value_;
+ }
+
+ private:
+ bool value_ = false;
+ };
+
+ UniversalSwitchState();
+ ~UniversalSwitchState();
+ ReadOnlyProperty interactionServiceState_;
+ ReadOnlyProperty configurationServiceState_;
+
+ void setInteractionServiceState(bool state);
+ void setConfigurationServiceState(bool state);
+
+ private:
+ void syncInteractionServiceState();
+ void syncConfigurationServiceState();
+
+ VConfInterface::CallbackHandle interactionServiceStateHandle_;
+ VConfInterface::CallbackHandle configurationServiceStateHandle_;
+ DBus::OwnerNameCallbackHandle ownerNameCallbackHandle_;
+ DBus::DBusWrapper::ConnectionPtr connectionPtr_;
+ bool dbusConfigurationServiceState_ = false;
+ bool vconfConfigurationState_ = false;
+ bool vconfInteractionState_ = false;
+};
+
+using UniversalSwitchSentinel = std::shared_ptr<UniversalSwitchState>;
+
+class UniversalSwitchSentinelService
+{
+ public:
+ UniversalSwitchSentinel getSentinel();
+
+ private:
+ std::weak_ptr<UniversalSwitchState> sentinel_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "VConf.hpp"
+
+#include <limits>
+#include <map>
+#include <tuple>
+#include <unordered_map>
+#include <vconf.h>
+
+namespace
+{
+ template <class ValueType>
+ using CallbackMap = std::map<int, std::function<void(ValueType)>>;
+ template <class ValueType>
+ using KeyMap = std::unordered_map<std::string, CallbackMap<ValueType>>;
+ static std::string inCallbackKeyGuard;
+
+ static int idxCurrent = std::numeric_limits<int>::max();
+ static KeyMap<int> intCallbackMap;
+ static KeyMap<bool> boolCallbackMap;
+ static KeyMap<double> doubleCallbackMap;
+ static KeyMap<std::string> stringCallbackMap;
+
+ template <class KeyMapType, class VconfCbType, class CallbackType>
+ inline int vconfRegisterKeyChangedCb(KeyMapType &keyMap, VconfCbType &vconfCb, const std::string &key, CallbackType &&callback)
+ {
+ auto idx = --idxCurrent;
+ auto iterator = keyMap.find(key);
+ if (iterator == keyMap.end()) {
+ iterator = keyMap.emplace(key, typename KeyMapType::mapped_type()).first;
+ if (vconf_notify_key_changed(key.c_str(), vconfCb, &iterator->second) != VCONF_OK) {
+ ERROR("Vconf: cant register callback for key: %s", key.c_str());
+ return idx;
+ }
+ }
+ iterator->second.emplace(idx, callback);
+ return idx;
+ }
+
+ template <class KeyMapType, class VconfCbType>
+ inline void vconfUnregisterCb(KeyMapType &keyMap, VconfCbType &vconfCb, const std::string &key, int idx)
+ {
+ auto iterator = keyMap.find(key);
+ if (iterator == keyMap.end()) {
+ ERROR("Vconf: unregister, key: %s not found", key.c_str());
+ return;
+ }
+ if (iterator->second.erase(idx) != 1)
+ ERROR("Vconf: could not remove callback for key: %s with idx: %d", key.c_str(), idx);
+ if (iterator->second.empty() && inCallbackKeyGuard != key) {
+ keyMap.erase(iterator);
+ if (vconf_ignore_key_changed(key.c_str(), vconfCb) != VCONF_OK) {
+ ERROR("Vconf: cant unregister callback for key: %s", key.c_str());
+ }
+ }
+ }
+
+ template <class KeyMapType, class VconfCbType, class vconfGetType>
+ inline void vconfCbRun(KeyMapType &keyMap,
+ VconfCbType &vconfCb,
+ const vconfGetType &vconfGetFunction,
+ const char *expectedType,
+ int vconfType,
+ keynode_t *keynode,
+ void *data)
+ {
+ std::string key = vconf_keynode_get_name(keynode);
+ if (vconf_keynode_get_type(keynode) != vconfType) {
+ ERROR("vconf error: got '%s' changed with type: %d, expected type: %s",
+ key.c_str(),
+ vconf_keynode_get_type(keynode),
+ expectedType);
+ return;
+ }
+ auto value = vconfGetFunction(keynode);
+ auto callbackMapPtr = (typename KeyMapType::mapped_type *)data;
+ ASSERT(!callbackMapPtr->empty(), "vconf error: no callbacks registered");
+
+ // we allow register and unregister callbacks during a callback call
+ {
+ // make sure we don't delete callbackMap during callbacks execution
+ inCallbackKeyGuard = key;
+ int idx = 0;
+ typename KeyMapType::mapped_type::iterator callbackIterator;
+ while ((callbackIterator = callbackMapPtr->upper_bound(idx)) != callbackMapPtr->end()) {
+ idx = callbackIterator->first;
+ auto callback = callbackIterator->second;
+ callback(value);
+ }
+ inCallbackKeyGuard.clear();
+ if (callbackMapPtr->empty()) {
+ // all callbacks removed
+ keyMap.erase(key);
+ if (vconf_ignore_key_changed(key.c_str(), vconfCb) != VCONF_OK) {
+ ERROR("Vconf: cant unregister callback for key: %s", key.c_str());
+ }
+ }
+ }
+ }
+
+ void vconfIntCb(keynode_t *key, void *data)
+ {
+ vconfCbRun(intCallbackMap, vconfIntCb, vconf_keynode_get_int, "int", VCONF_TYPE_INT, key, data);
+ }
+ void vconfBoolCb(keynode_t *key, void *data)
+ {
+ vconfCbRun(boolCallbackMap, vconfBoolCb, vconf_keynode_get_bool, "bool", VCONF_TYPE_BOOL, key, data);
+ }
+ void vconfDoubleCb(keynode_t *key, void *data)
+ {
+ vconfCbRun(doubleCallbackMap, vconfDoubleCb, vconf_keynode_get_dbl, "double", VCONF_TYPE_DOUBLE, key, data);
+ }
+ void vconfStringCb(keynode_t *key, void *data)
+ {
+ vconfCbRun(stringCallbackMap, vconfStringCb, vconf_keynode_get_str, "char*", VCONF_TYPE_STRING, key, data);
+ }
+} // namespace
+
+class VConfImpl : public VConfInterface
+{
+ public:
+ enum class VConfRecordType
+ {
+ INT,
+ BOOL,
+ DOUBLE,
+ STRING
+ };
+
+ struct Handle : public HandleBase
+ {
+ std::string key;
+ int callbackIdx;
+ VConfRecordType vconfRecordType;
+
+ Handle(std::string key, int callbackIdx, VConfRecordType vconfRecordType)
+ : key{std::move(key)}, callbackIdx{callbackIdx}, vconfRecordType{vconfRecordType}
+ {
+ }
+
+ ~Handle() override
+ {
+ switch (vconfRecordType) {
+ case VConfRecordType::INT:
+ vconfUnregisterCb(intCallbackMap, vconfIntCb, key, callbackIdx);
+ break;
+ case VConfRecordType::BOOL:
+ vconfUnregisterCb(boolCallbackMap, vconfBoolCb, key, callbackIdx);
+ break;
+ case VConfRecordType::DOUBLE:
+ vconfUnregisterCb(doubleCallbackMap, vconfDoubleCb, key, callbackIdx);
+ break;
+ case VConfRecordType::STRING:
+ vconfUnregisterCb(stringCallbackMap, vconfStringCb, key, callbackIdx);
+ break;
+ }
+ }
+ };
+
+ int get(const std::string &key, int value) const override
+ {
+ auto k = keyPrefix + key;
+ if (vconf_get_int(k.c_str(), &value) != VCONF_OK)
+ WARNING("Vconf: cant get value for key: %s, returning default value = %d", k.c_str(), value);
+ return value;
+ }
+
+ bool get(const std::string &key, bool defaultValue) const override
+ {
+ auto k = keyPrefix + key;
+ int value = defaultValue;
+ if (vconf_get_bool(k.c_str(), &value) != VCONF_OK)
+ WARNING(
+ "Vconf: cant get value for key: %s, returning default value = %s", k.c_str(), value ? "true" : "false");
+ return value;
+ }
+
+ double get(const std::string &key, double value) const override
+ {
+ auto k = keyPrefix + key;
+ if (vconf_get_dbl(k.c_str(), &value) != VCONF_OK)
+ WARNING("Vconf: cant get value for key: %s, returning default value = %lf", k.c_str(), value);
+ return value;
+ }
+
+ std::string get(const std::string &key, const std::string &value) const override
+ {
+ auto k = keyPrefix + key;
+ auto vconfStr = vconf_get_str(k.c_str());
+ if (vconfStr) {
+ auto s = std::string{vconfStr};
+ free(vconfStr);
+ return s;
+ }
+
+ WARNING("Vconf: cant get value for key: %s, returning default value = %s", k.c_str(), value.c_str());
+ return value;
+ }
+
+ void set(const std::string &key, int value) override
+ {
+ auto k = keyPrefix + key;
+ auto status = vconf_set_int(k.c_str(), value);
+ if (status != VCONF_OK)
+ ERROR("Vconf error %d: cant set value for key: %s, value = %d", status, k.c_str(), value);
+ }
+
+ void set(const std::string &key, bool value) override
+ {
+ auto k = keyPrefix + key;
+ auto status = vconf_set_bool(k.c_str(), (int)value);
+ if (status != VCONF_OK)
+ ERROR("Vconf error %d: cant set value for key: %s, value = %s", status, k.c_str(), value ? "true" : "false");
+ }
+
+ void set(const std::string &key, double value) override
+ {
+ auto k = keyPrefix + key;
+ auto status = vconf_set_dbl(k.c_str(), value);
+ if (status != VCONF_OK)
+ ERROR("Vconf error %d: cant set value for key: %s, value = %lf", status, k.c_str(), value);
+ }
+
+ void set(const std::string &key, const std::string &value) override
+ {
+ auto k = keyPrefix + key;
+ auto status = vconf_set_str(k.c_str(), value.c_str());
+ if (status != VCONF_OK)
+ ERROR("Vconf error %d: cant set value for key: %s, value = %s", status, k.c_str(), value.c_str());
+ }
+
+ CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(int)> callback) override
+ {
+ auto k = keyPrefix + key;
+ auto idx = vconfRegisterKeyChangedCb(intCallbackMap, vconfIntCb, k, std::move(callback));
+ return CallbackHandle{new Handle{k, idx, VConfRecordType::INT}};
+ }
+
+ CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(bool)> callback) override
+ {
+ auto k = keyPrefix + key;
+ auto idx = vconfRegisterKeyChangedCb(boolCallbackMap, vconfBoolCb, k, std::move(callback));
+ return CallbackHandle{new Handle{k, idx, VConfRecordType::BOOL}};
+ }
+
+ CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(double)> callback) override
+ {
+ auto k = keyPrefix + key;
+ auto idx = vconfRegisterKeyChangedCb(doubleCallbackMap, vconfDoubleCb, k, std::move(callback));
+ return CallbackHandle{new Handle{k, idx, VConfRecordType::DOUBLE}};
+ }
+
+ CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(std::string)> callback) override
+ {
+ auto k = keyPrefix + key;
+ auto idx = vconfRegisterKeyChangedCb(stringCallbackMap, vconfStringCb, k, std::move(callback));
+ return CallbackHandle{new Handle{k, idx, VConfRecordType::STRING}};
+ }
+
+ void setKeyPrefix(const std::string &prefix) override
+ {
+ keyPrefix = prefix;
+ }
+
+ private:
+ std::string keyPrefix;
+};
+
+template <>
+template <>
+std::unique_ptr<VConfInterface> Singleton<VConfInterface>::createImplementation<VConfInterface>()
+{
+ return std::unique_ptr<VConfInterface>{new VConfImpl};
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef VCONF_HPP
+#define VCONF_HPP
+
+#include "AccessibilitySettingLog.hpp"
+#include "Singleton.hpp"
+
+#include <functional>
+#include <memory>
+#include <string>
+#include <type_traits>
+
+/**
+ * Singleton<VConfInterface>::instance() is a c++ singleton wrapper around vconf.
+ *
+ * usage examples:
+ * 1. get key value:
+ * bool enabled = Singleton<VConfInterface>::instance().get("db/setting/accessibility/universal-switch", false);
+ * 2. set key value:
+ * Singleton<VConfInterface>::instance().set("db/setting/accessibility/universal-switch/FEEDBACK_VOICE_SPEECH_VOLUME", 0.50);
+ * 3. register callback on value change:
+ * auto print = [](bool enabled) { std::cout << enabled << std::endl; }
+ * CallbackHandle handle = Singleton<VConfInterface>::instance().registerKeyChangedCb("db/setting/accessibility/universal-switch",
+ * print); callback will be registered until \p handle exists.
+ * 4. register callback on value change and get current value:
+ * auto print = [](bool enabled) { std::cout << enabled << std::endl; }
+ * CallbackHandle handle = Singleton<VConfInterface>::instance().registerAndGet("db/setting/accessibility/universal-switch",
+ * print); callback will be registered until \p handle exists.
+ *
+ */
+
+class VConfInterface
+{
+ public:
+ virtual ~VConfInterface() = default;
+ struct HandleBase
+ {
+ virtual ~HandleBase() = default;
+ };
+
+ using CallbackHandle = std::unique_ptr<HandleBase>;
+
+ virtual int get(const std::string &key, int defaultValue) const = 0;
+
+ virtual bool get(const std::string &key, bool defaultValue) const = 0;
+
+ virtual double get(const std::string &key, double defaultValue) const = 0;
+
+ virtual std::string get(const std::string &key, const std::string &defaultValue) const = 0;
+
+ virtual void set(const std::string &key, int value) = 0;
+
+ virtual void set(const std::string &key, bool value) = 0;
+
+ virtual void set(const std::string &key, double value) = 0;
+
+ virtual void set(const std::string &key, const std::string &value) = 0;
+
+ template <class T>
+ inline void set(const std::string &key, T value, typename std::enable_if<std::is_enum<T>::value>::type * = nullptr)
+ {
+ set(key, static_cast<int>(value));
+ }
+
+ virtual CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(int)> callback) = 0;
+
+ virtual CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(bool)> callback) = 0;
+
+ virtual CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(double)> callback) = 0;
+
+ virtual CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(std::string)> callback) = 0;
+
+ template <class T>
+ inline CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(T)> callback, typename std::enable_if<std::is_enum<T>::value>::type * = nullptr)
+ {
+ return registerKeyChangedCb(key, std::function<void(int)>{[callback](int w) {
+ callback(static_cast<T>(w));
+ }});
+ }
+
+ template <class T>
+ inline CallbackHandle registerKeyChangedCb(const std::string &key, std::function<void(T)> callback, typename std::enable_if<!std::is_enum<T>::value>::type * = nullptr)
+ {
+ return registerKeyChangedCb(key, callback);
+ }
+
+ template <class T>
+ CallbackHandle registerAndGet(const std::string &key, T defaultValue, std::function<void(T)> callback, typename std::enable_if<std::is_enum<T>::value>::type * = nullptr)
+ {
+ auto handle = registerKeyChangedCb(key, std::function<void(int)>{[callback](int w) {
+ callback(static_cast<T>(w));
+ }});
+ callback(static_cast<T>(get(key, static_cast<int>(defaultValue))));
+ return handle;
+ }
+
+ template <class T>
+ CallbackHandle registerAndGet(const std::string &key, T defaultValue, std::function<void(T)> callback, typename std::enable_if<!std::is_enum<T>::value>::type * = nullptr)
+ {
+ auto handle = registerKeyChangedCb(key, callback);
+ callback(get(key, defaultValue));
+ return handle;
+ }
+
+ virtual void setKeyPrefix(const std::string &prefix) = 0;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Box.hpp"
+
+void Box::createEflObject()
+{
+ uniqueObj_.reset(elm_box_add(parent_->getObject()));
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+}
+
+void Box::packEnd(Widget *widget)
+{
+ // Needs to be here as pack_end function does not support show state propagation
+ widget->show();
+ elm_box_pack_end(uniqueObj_.get(), widget->getObject());
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef BOX_HPP
+#define BOX_HPP
+
+#include "Widget.hpp"
+
+class Box : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void packEnd(Widget *widget);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Button.hpp"
+
+void Button::createEflObject()
+{
+ uniqueObj_.reset(elm_button_add(parent_->getObject()));
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ setAlignHint(EVAS_HINT_FILL, 0.5);
+}
+
+void Button::createEflObject(std::function<void()> onClick, const TranslatedString &text, const std::string &style)
+{
+ createEflObject();
+ setText(text);
+ setStyle(style);
+ setEvasSmartCallback("clicked", onClick);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef BUTTON_HPP
+#define BUTTON_HPP
+
+#include "Widget.hpp"
+
+class Button : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ static constexpr const char *BACK_BUTTON_ARROW_STYLE = "naviframe/end_btn/default";
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(std::function<void()> onClick, const TranslatedString &text = {}, const std::string &style = {});
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Check.hpp"
+
+void Check::createEflObject()
+{
+ uniqueObj_.reset(elm_check_add(parent_->getObject()));
+}
+
+void Check::createEflObject(bool state, const std::string &style, std::function<void()> onChanged)
+{
+ createEflObject();
+ setState(state);
+ setStyle(style);
+ setEvasSmartCallback("changed", std::move(onChanged));
+}
+
+void Check::setState(bool state)
+{
+ elm_check_state_set(uniqueObj_.get(), state ? EINA_TRUE : EINA_FALSE);
+}
+
+bool Check::getState() const
+{
+ return elm_check_state_get(uniqueObj_.get()) ? true : false;
+}
+
+void Check::setStatePointer(Eina_Bool *statePtr)
+{
+ if (statePtr)
+ elm_check_state_pointer_set(uniqueObj_.get(), statePtr);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CHECK_HPP
+#define CHECK_HPP
+
+#include "Widget.hpp"
+
+class Check : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setState(bool state);
+ bool getState() const;
+ void setStatePointer(Eina_Bool *statePtr);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(bool state, const std::string &style, std::function<void()> onChanged);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Conformant.hpp"
+
+void Conformant::createEflObject()
+{
+ uniqueObj_.reset(elm_conformant_add(parent_->getObject()));
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CONFORMANT_HPP
+#define CONFORMANT_HPP
+
+#include "Widget.hpp"
+
+class Conformant : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "CtxPopup.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+void CtxPopup::createEflObject()
+{
+ uniqueObj_.reset(elm_ctxpopup_add(parent_->getObject()));
+ show();
+}
+
+void CtxPopup::createEflObject(bool disableAutoHide)
+{
+ createEflObject();
+ setAutoHide(disableAutoHide);
+}
+
+void CtxPopup::setAutoHide(bool autoHide)
+{
+ elm_ctxpopup_auto_hide_disabled_set(uniqueObj_.get(), autoHide ? EINA_FALSE : EINA_TRUE);
+}
+
+void CtxPopup::addItem(const TranslatedString &label, std::function<void()> onClick)
+{
+ auto cbData = std::make_unique<WidgetCallback::Data<CtxPopup, int>>(this, callbacks_.size());
+ auto dataPtr = cbData.get();
+ auto val = WidgetCallback::Value<CtxPopup, int>{std::move(onClick), std::move(cbData)};
+ callbacks_.push_back(std::move(val));
+ elm_ctxpopup_item_append(uniqueObj_.get(), label.c_str(), NULL, callbackMethod, dataPtr);
+}
+
+void CtxPopup::callbackMethod(void *data, Evas_Object *obj, void *event_info)
+{
+ auto cbData = static_cast<WidgetCallback::Data<CtxPopup, int> *>(data);
+
+ try {
+ auto c = cbData->self->callbacks_.at(cbData->eventName).callback;
+ c();
+ } catch (std::out_of_range &error) {
+ ERROR("No callback registered for this event");
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CTX_POPUP_HPP
+#define CTX_POPUP_HPP
+
+#include "Widget.hpp"
+#include "Window.hpp"
+
+class CtxPopup : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void addItem(const TranslatedString &label, std::function<void()> onClick);
+ void setAutoHide(bool disable);
+
+ protected:
+ static void callbackMethod(void *data, Evas_Object *obj, void *event_info);
+ std::vector<WidgetCallback::Value<CtxPopup, int>> callbacks_;
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(bool disableAutoHide);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Entry.hpp"
+
+void Entry::createEflObject()
+{
+ uniqueObj_.reset(elm_entry_add(parent_->getObject()));
+}
+
+void Entry::createEflObject(const std::string &text)
+{
+ createEflObject();
+ setEntryText(text);
+}
+
+void Entry::setEntryText(const TranslatedString &text)
+{
+ elm_entry_entry_set(uniqueObj_.get(), text.c_str());
+}
+
+std::string Entry::getEntryText()
+{
+ auto a = elm_entry_entry_get(uniqueObj_.get());
+ return a ? a : std::string{};
+}
+
+void Entry::moveCursorToEnd()
+{
+ elm_entry_cursor_end_set(uniqueObj_.get());
+}
+
+void Entry::setSingleline(bool singleline)
+{
+ elm_entry_single_line_set(uniqueObj_.get(), singleline ? EINA_TRUE : EINA_FALSE);
+}
+
+bool Entry::isSingleline()
+{
+ return elm_entry_single_line_get(uniqueObj_.get()) != EINA_FALSE;
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ENTRY_HPP
+#define ENTRY_HPP
+
+#include "Widget.hpp"
+
+class Entry : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setEntryText(const TranslatedString &text);
+ std::string getEntryText();
+ void moveCursorToEnd();
+ void setSingleline(bool singleline);
+ bool isSingleline();
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(const std::string &text);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Genlist.hpp"
+
+void Genlist::createEflObject()
+{
+ uniqueObj_.reset(elm_genlist_add(parent_->getObject()));
+}
+
+void Genlist::setMode(Elm_List_Mode mode)
+{
+ elm_genlist_mode_set(uniqueObj_.get(), mode);
+}
+
+void Genlist::clear()
+{
+ elm_genlist_clear(uniqueObj_.get());
+}
+
+size_t Genlist::size()
+{
+ return elm_genlist_items_count(uniqueObj_.get());
+}
+
+GenlistItem *Genlist::appendItem(GenlistItem item, GenlistItem *parent)
+{
+ auto itemPtr = std::make_unique<GenlistItem>(std::move(item));
+ auto itc = itemPtr->generateITCObject();
+ auto type = itemPtr->getItemType();
+ auto parentPtr = parent ? parent->objItem_ : nullptr;
+
+ itemPtr->genlist_ = this;
+ itemPtr->objItem_ = elm_genlist_item_append(
+ uniqueObj_.get(), itc.get(), itemPtr.get(), parentPtr, type, GenlistItem::onItemSelection, itemPtr.get());
+
+ if (!itemPtr->onItemSelection_)
+ elm_genlist_item_select_mode_set(itemPtr->objItem_, ELM_OBJECT_SELECT_MODE_NONE);
+
+ items_.push_back(std::move(itemPtr));
+ return items_.back().get();
+}
+
+GenlistItem *Genlist::getFirst()
+{
+ auto raw = elm_genlist_first_item_get(uniqueObj_.get());
+ return GenlistItem::fromRawItem(raw);
+}
+
+GenlistItem *Genlist::getLast()
+{
+ auto raw = elm_genlist_last_item_get(uniqueObj_.get());
+ return GenlistItem::fromRawItem(raw);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef GENLIST_HPP
+#define GENLIST_HPP
+
+#include "GenlistItem.hpp"
+#include "Scroller.hpp"
+
+class Genlist : public Scroller
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setMode(Elm_List_Mode mode);
+ void clear();
+ size_t size();
+ GenlistItem *appendItem(GenlistItem item, GenlistItem *parent = nullptr);
+ GenlistItem *getFirst();
+ GenlistItem *getLast();
+
+ protected:
+ using Scroller::Scroller;
+
+ private:
+ void createEflObject();
+ std::vector<std::unique_ptr<GenlistItem>> items_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "GenlistItem.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+#include "Check.hpp"
+#include "Entry.hpp"
+#include "Genlist.hpp"
+#include "Icon.hpp"
+#include "Label.hpp"
+#include "Layout.hpp"
+#include "Radio.hpp"
+#include "Slider.hpp"
+
+#include <app.h>
+
+namespace
+{
+ char *percentIndicatorFormat(double val)
+ {
+ auto percent = std::to_string(static_cast<unsigned int>(val * 100));
+ return strdup(percent.c_str());
+ }
+} // namespace
+
+GenlistItem::GenlistItem(std::string style, TranslatedString text, TranslatedString desc, Type type)
+ : style_(std::move(style)), text_(std::move(text)), description_(std::move(desc)), type_(type)
+{}
+
+GenlistItem::GenlistItem(
+ std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onItemSelection,
+ Type type)
+ : style_(std::move(style)), text_(std::move(text)), description_(std::move(desc)), onItemSelection_(std::move(onItemSelection)), type_(type)
+{}
+
+GenlistItem::GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onItemSelection,
+ WidgetType type)
+ : style_(std::move(style)), text_(std::move(text)), description_(std::move(desc)), onItemSelection_(std::move(onItemSelection)), widgetType_(type)
+{}
+
+GenlistItem::GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onItemSelection,
+ std::string iconPath,
+ WidgetType type)
+ : style_(std::move(style)), text_(std::move(text)), description_(std::move(desc)), onItemSelection_(std::move(onItemSelection)), iconPath_(std::move(iconPath)), widgetType_(type)
+{}
+
+GenlistItem::GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onItemSelection,
+ std::function<void(GenlistItem *)> onContentSelection,
+ std::function<void(GenlistItem *)> onContentValueChanged,
+ WidgetType type)
+ : style_(std::move(style)),
+ text_(std::move(text)),
+ description_(std::move(desc)),
+ onItemSelection_(std::move(onItemSelection)),
+ onContentSelection_(std::move(onContentSelection)),
+ onContentValueChanged_(std::move(onContentValueChanged)),
+ widgetType_(type)
+{}
+
+void GenlistItem::setText(const TranslatedString &text)
+{
+ text_ = text;
+ update();
+}
+
+void GenlistItem::setDescription(const TranslatedString &desc)
+{
+ description_ = desc;
+ update();
+}
+
+void GenlistItem::update()
+{
+ elm_genlist_item_update(objItem_);
+}
+
+bool GenlistItem::getState()
+{
+ return state_;
+}
+
+void GenlistItem::setState(bool state)
+{
+ if (state)
+ state_ = EINA_TRUE;
+ else
+ state_ = EINA_FALSE;
+
+ update();
+}
+
+void GenlistItem::disable()
+{
+ elm_object_item_disabled_set(objItem_, EINA_TRUE);
+}
+
+void GenlistItem::enable()
+{
+ elm_object_item_disabled_set(objItem_, EINA_FALSE);
+}
+
+GenlistItem *GenlistItem::next()
+{
+ auto raw = elm_genlist_item_next_get(objItem_);
+ return fromRawItem(raw);
+}
+
+GenlistItem *GenlistItem::prev()
+{
+ auto raw = elm_genlist_item_prev_get(objItem_);
+ return fromRawItem(raw);
+}
+
+double GenlistItem::getValue()
+{
+ return value_;
+}
+
+void GenlistItem::setValue(double val)
+{
+ value_ = val;
+}
+
+void GenlistItem::setRange(std::pair<double, double> range)
+{
+ range_ = std::move(range);
+}
+
+void GenlistItem::setId(size_t id)
+{
+ id_ = id;
+}
+
+void GenlistItem::setStep(double val)
+{
+ step_ = val;
+}
+
+std::string GenlistItem::getEntryText()
+{
+ return entryText_;
+}
+
+void GenlistItem::setEntryText(TranslatedString text)
+{
+ entryText_ = text.str();
+ update();
+}
+
+size_t GenlistItem::getId()
+{
+ return id_;
+}
+
+GenlistItem *GenlistItem::fromRawItem(Elm_Object_Item *raw)
+{
+ if (raw)
+ return static_cast<GenlistItem *>(elm_object_item_data_get(raw));
+ else
+ return nullptr;
+}
+
+GenlistItem::ElmGenlistItemClassPtr GenlistItem::generateITCObject()
+{
+ auto *itc = elm_genlist_item_class_new();
+ itc->item_style = style_.c_str();
+ itc->func.text_get = textRealizator;
+ itc->func.content_get = contentRealizator;
+ itc->func.del = nullptr;
+
+ return ElmGenlistItemClassPtr{itc};
+}
+
+Elm_Genlist_Item_Type GenlistItem::getItemType()
+{
+ switch (type_) {
+ case Type::regular:
+ return ELM_GENLIST_ITEM_NONE;
+
+ case Type::group:
+ return ELM_GENLIST_ITEM_GROUP;
+
+ case Type::tree:
+ return ELM_GENLIST_ITEM_TREE;
+
+ default:
+ return ELM_GENLIST_ITEM_NONE;
+ }
+}
+
+char *GenlistItem::textRealizator(void *data, Evas_Object *obj, const char *part)
+{
+ auto self = static_cast<GenlistItem *>(data);
+ if (self->widgetType_ == WidgetType::slider)
+ return nullptr;
+
+ using namespace std::string_literals;
+
+ if (part == "elm.text"s && !self->text_.empty())
+ return strdup(self->text_.c_str());
+
+ if ((part == "elm.text.sub"s || part == "elm.text.multiline"s) && !self->description_.empty())
+ return strdup(self->description_.c_str());
+
+ return nullptr;
+}
+
+Evas_Object *GenlistItem::contentRealizator(void *data, Evas_Object *obj, const char *part)
+{
+ auto self = static_cast<GenlistItem *>(data);
+ switch (self->widgetType_) {
+ case WidgetType::toggle:
+ return self->realizeToggle(part);
+
+ case WidgetType::check:
+ return self->realizeCheck(part);
+
+ case WidgetType::icon:
+ return self->realizeIcon(part);
+
+ case WidgetType::radio:
+ return self->realizeRadio(part);
+
+ case WidgetType::slider:
+ return self->realizeSlider(part);
+
+ case WidgetType::entry:
+ return self->realizeEntry(part);
+
+ default:
+ break;
+ }
+ return nullptr;
+}
+
+Evas_Object *GenlistItem::realizeToggle(const std::string &part)
+{
+ if (part != "elm.swallow.end")
+ return nullptr;
+
+ auto check = Widget::make<Check>(genlist_);
+ check->setStyle("on&off");
+
+ check->setStatePointer(&state_);
+ check->setPropagateEvents(false);
+ check->setPassEvents(false);
+
+ // TODO replace with class method
+ elm_atspi_accessible_relationship_append(check->getObject(), ELM_ATSPI_RELATION_CONTROLLED_BY, objItem_);
+ elm_atspi_accessible_relationship_append(objItem_, ELM_ATSPI_RELATION_DESCRIBED_BY, check->getObject());
+ elm_atspi_accessible_relationship_append(objItem_, ELM_ATSPI_RELATION_CONTROLLER_FOR, check->getObject());
+
+ check->setEvasSmartCallback("changed", [this]() {
+ if (onContentSelection_)
+ onContentSelection_(this);
+ else
+ onItemSelection_(this);
+ });
+
+ return check->getObject();
+}
+
+Evas_Object *GenlistItem::realizeCheck(const std::string &part)
+{
+ if (part != "elm.swallow.icon")
+ return nullptr;
+
+ auto check = Widget::make<Check>(genlist_);
+ check->setStatePointer(&state_);
+ check->setPropagateEvents(false);
+ check->setPassEvents(true);
+
+ check->setEvasSmartCallback("changed", [this]() {
+ if (onContentSelection_)
+ onContentSelection_(this);
+ else
+ onItemSelection_(this);
+ });
+
+ return check->getObject();
+}
+
+Evas_Object *GenlistItem::realizeIcon(const std::string &part)
+{
+ if (part != "elm.swallow.icon")
+ return nullptr;
+
+ auto icon = Widget::make<Icon>(genlist_);
+ icon->setColor(15, 41, 73, 255);
+ icon->setImageFile(iconPath_);
+ icon->setAspectHint(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+ return icon->getObject();
+}
+
+Evas_Object *GenlistItem::realizeRadio(const std::string &part)
+{
+ if (part != "elm.swallow.icon")
+ return nullptr;
+
+ auto radio = Widget::make<Radio>(genlist_);
+ radio->setValue(state_ ? 0 : -1); // TODO: legacy solution, should be changed
+ radio->setPropagateEvents(false);
+ radio->setPassEvents(false);
+
+ radio->setEvasSmartCallback("changed", [this]() {
+ if (onContentSelection_)
+ onContentSelection_(this);
+ else
+ onItemSelection_(this);
+ });
+
+ return radio->getObject();
+}
+
+Evas_Object *GenlistItem::realizeSlider(const std::string &part)
+{
+ auto layout = Widget::make<Layout>(genlist_, "edje/genlist.edj", "gl_custom_item");
+ if (!text_.empty()) {
+ auto label = Widget::make<Label>(genlist_, text_);
+ layout->setPartContent("elm.text", label);
+ }
+
+ auto slider = Widget::make<Slider>(layout);
+ slider->showIndicator(true);
+ slider->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ slider->setAlignHint(EVAS_HINT_FILL, EVAS_HINT_FILL);
+ slider->setRange(range_.first, range_.second);
+ slider->setValue(value_);
+ slider->setStep(step_);
+ slider->setIndicatorFormatFunction(percentIndicatorFormat);
+ layout->setPartContent("elm.swallow.content", slider);
+
+ slider->setEvasSmartCallback("delay,changed", [=]() {
+ value_ = slider->getValue();
+ if (onContentValueChanged_) {
+ onContentValueChanged_(this);
+ }
+ });
+
+ return layout->getObject();
+}
+
+Evas_Object *GenlistItem::realizeEntry(const std::string &part)
+{
+ auto layout = Widget::make<Layout>(genlist_, "edje/genlist.edj", "gl_custom_item");
+ if (!text_.empty()) {
+ auto label = Widget::make<Label>(genlist_, text_);
+ layout->setPartContent("elm.text", label);
+ }
+
+ auto entry = Widget::make<Entry>(layout);
+ layout->setPartContent("elm.swallow.content", entry);
+ entry->setEntryText(entryText_);
+ entry->setSingleline(true);
+ entry->setEvasSmartCallback("changed,user", [=]() {
+ this->entryText_ = entry->getEntryText();
+ if (onContentValueChanged_) {
+ onContentValueChanged_(this);
+ }
+ });
+
+ return layout->getObject();
+}
+
+void GenlistItem::onItemSelection(void *data, Evas_Object *obj, void *event_info)
+{
+ auto self = static_cast<GenlistItem *>(data);
+
+ if ((self->widgetType_ == WidgetType::toggle || self->widgetType_ == WidgetType::check) && !self->onContentSelection_) {
+ self->state_ = !self->state_;
+ elm_genlist_item_fields_update(self->objItem_, "*", ELM_GENLIST_ITEM_FIELD_CONTENT);
+ }
+
+ if (self->onItemSelection_)
+ self->onItemSelection_(self);
+ elm_genlist_item_selected_set(self->objItem_, EINA_FALSE);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef GENLIST_ITEM_HPP
+#define GENLIST_ITEM_HPP
+
+#include "TranslatedString.hpp"
+#include "utils.hpp"
+
+#include <Elementary.h>
+#include <functional>
+#include <memory>
+
+class Genlist;
+class GenlistItem
+{
+ friend class Genlist;
+
+ public:
+ enum class Type
+ {
+ regular,
+ group,
+ tree
+ };
+ enum class WidgetType
+ {
+ none,
+ check,
+ toggle,
+ radio,
+ icon,
+ slider,
+ entry
+ };
+
+ GenlistItem(std::string style, TranslatedString text, TranslatedString desc = {}, Type type = Type::group);
+ GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onSelection,
+ Type type = Type::regular);
+ GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onSelection,
+ WidgetType type);
+ GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onSelection,
+ std::string iconPath,
+ WidgetType type = WidgetType::icon);
+ GenlistItem(std::string style,
+ TranslatedString text,
+ TranslatedString desc,
+ std::function<void(GenlistItem *)> onItemSelection,
+ std::function<void(GenlistItem *)> onContentSelection,
+ std::function<void(GenlistItem *)> onContentValueChanged,
+ WidgetType type);
+
+ void setText(const TranslatedString &text);
+ void setDescription(const TranslatedString &desc);
+ void update();
+ bool getState();
+ void setState(bool state);
+ void disable();
+ void enable();
+ GenlistItem *next();
+ GenlistItem *prev();
+ double getValue();
+ void setValue(double val);
+ void setRange(std::pair<double, double> range);
+ void setStep(double val);
+ void setEntryText(TranslatedString text);
+ std::string getEntryText();
+
+ // TODO: current implementation does not take advantage from radio groups.
+ // When legacy solution for adding genlist items is completely removed
+ // radio items will be grouped and 'id' field will be replaced with 'value'
+ void setId(size_t id);
+ size_t getId();
+
+ private:
+ static GenlistItem *fromRawItem(Elm_Object_Item *raw);
+ using ElmGenlistItemClassPtr = std::unique_ptr<Elm_Genlist_Item_Class, utils::ElmGenlistItemClassDeleter>;
+ ElmGenlistItemClassPtr generateITCObject();
+ Elm_Genlist_Item_Type getItemType();
+ Evas_Object *realizeToggle(const std::string &part);
+ Evas_Object *realizeCheck(const std::string &part);
+ Evas_Object *realizeIcon(const std::string &part);
+ Evas_Object *realizeRadio(const std::string &part);
+ Evas_Object *realizeSlider(const std::string &part);
+ Evas_Object *realizeEntry(const std::string &part);
+
+ static char *textRealizator(void *data, Evas_Object *obj, const char *part);
+ static Evas_Object *contentRealizator(void *data, Evas_Object *obj, const char *part);
+ static void onItemSelection(void *data, Evas_Object *obj, void *event_info);
+
+ std::string style_;
+ TranslatedString text_;
+ TranslatedString description_;
+ std::function<void(GenlistItem *)> onItemSelection_;
+ std::function<void(GenlistItem *)> onContentSelection_;
+ std::function<void(GenlistItem *)> onContentValueChanged_;
+ Genlist *genlist_ = nullptr;
+ Eina_Bool state_ = EINA_FALSE;
+ std::string iconPath_;
+
+ Elm_Object_Item *objItem_ = nullptr;
+ Type type_ = Type::regular;
+ WidgetType widgetType_ = WidgetType::none;
+ size_t id_ = 0;
+ double value_ = 0.0;
+ std::pair<double, double> range_;
+ double step_ = 0.01;
+ std::string entryText_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Icon.hpp"
+
+void Icon::createEflObject()
+{
+ uniqueObj_.reset(elm_icon_add(parent_->getObject()));
+}
+
+void Icon::setImageFile(std::string path)
+{
+ elm_image_file_set(uniqueObj_.get(), path.c_str(), nullptr);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef ICON_HPP
+#define ICON_HPP
+
+#include "Widget.hpp"
+
+class Icon : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setImageFile(std::string path);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Label.hpp"
+
+void Label::createEflObject()
+{
+ uniqueObj_.reset(elm_label_add(parent_->getObject()));
+}
+
+void Label::createEflObject(const TranslatedString &text)
+{
+ createEflObject();
+ setText(text);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LABEL_HPP
+#define LABEL_HPP
+
+#include "Widget.hpp"
+
+class Label : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(const TranslatedString &text);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Layout.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+#include <app.h>
+
+void Layout::createEflObject()
+{
+ uniqueObj_.reset(elm_layout_add(parent_->getObject()));
+}
+
+void Layout::createEflObject(const std::string &edjeFile, const std::string &group)
+{
+ createEflObject();
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ std::string edjePath;
+ if (auto resPath = app_get_resource_path()) {
+ edjePath = std::string{resPath} + edjeFile;
+ free(resPath);
+ } // TODO refactor to cpp style, maybe use struct or std::function
+ setFile(edjePath, group);
+}
+
+void Layout::setContent(const std::string &swallow, Widget *widget)
+{
+ elm_layout_content_set(uniqueObj_.get(), swallow.c_str(), widget->getObject());
+}
+
+void Layout::setFile(const std::string &edjeFile, const std::string &group)
+{
+ elm_layout_file_set(uniqueObj_.get(), edjeFile.c_str(), group.c_str());
+}
+
+void Layout::setTheme(const std::string &klass, const std::string &group, const std::string &style)
+{
+ elm_layout_theme_set(uniqueObj_.get(), klass.c_str(), group.c_str(), style.c_str());
+}
+
+void Layout::setText(const std::string &part, const TranslatedString &text)
+{
+ if (elm_layout_text_set(uniqueObj_.get(), part.c_str(), text.c_str()) == EINA_FALSE)
+ WARNING("Failed to set text: %s", text.c_str());
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LAYOUT_HPP
+#define LAYOUT_HPP
+
+#include "Widget.hpp"
+
+class Layout : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setContent(const std::string &swallow, Widget *widget);
+ void setFile(const std::string &edjeFile, const std::string &group);
+ void setTheme(const std::string &klass, const std::string &group, const std::string &style);
+ void setText(const std::string &part, const TranslatedString &text);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(const std::string &edjeFile, const std::string &group);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Naviframe.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+#include <efl_extension.h>
+
+NaviframeItem::NaviframeItem(Elm_Object_Item *item)
+ : item_(item)
+{}
+
+void NaviframeItem::setPartContent(const std::string &part, Widget *content)
+{
+ elm_object_item_part_content_set(item_, part.c_str(), content->getObject());
+}
+
+void Naviframe::createEflObject(std::function<void()> onBackButtonPressed)
+{
+ uniqueObj_.reset(elm_naviframe_add(parent_->getObject()));
+ if (onBackButtonPressed)
+ setEextEventCallback(EEXT_CALLBACK_BACK, onBackButtonPressed);
+ else
+ eext_object_event_callback_add(uniqueObj_.get(), EEXT_CALLBACK_BACK, eext_naviframe_back_cb, NULL);
+
+ eext_object_event_callback_add(uniqueObj_.get(), EEXT_CALLBACK_MORE, eext_naviframe_more_cb, NULL);
+ elm_naviframe_content_preserve_on_pop_set(uniqueObj_.get(), EINA_TRUE);
+}
+
+NaviframeItem Naviframe::pushBack(
+ const TranslatedString &title,
+ Widget *content,
+ std::function<void()> onPopCb,
+ Widget *prevBtn,
+ const std::string &style)
+{
+ naviframeStack_.push(std::make_pair(content, prevBtn));
+ auto top = elm_naviframe_item_push(uniqueObj_.get(),
+ title.c_str(),
+ prevBtn ? prevBtn->getObject() : nullptr,
+ nullptr,
+ content->getObject(),
+ style.c_str());
+ if (onPopCb) {
+ naviframeCallbacks_.insert_or_assign(top, std::move(onPopCb));
+ elm_naviframe_item_pop_cb_set(top, callbackMethod, this);
+ }
+ return {top};
+}
+
+NaviframeItem Naviframe::top()
+{
+ return {elm_naviframe_top_item_get(uniqueObj_.get())};
+}
+
+void Naviframe::onPopAnimationEnd(std::function<void()> onPopAnimationEnd)
+{
+ if (naviframeStack_.size()) {
+ auto children = naviframeStack_.top();
+ auto removeFromParent = [](Widget *child) {
+ if (child) {
+ auto parent = child->getParent();
+ parent->removeChild(child);
+ }
+ };
+ removeFromParent(children.first);
+ removeFromParent(children.second);
+ naviframeStack_.pop();
+ onPopAnimationEnd();
+ }
+}
+
+void Naviframe::popBack(NaviframeItem naviItem)
+{
+ if (naviItem)
+ elm_naviframe_item_pop_to(naviItem.item_);
+ else
+ elm_naviframe_item_pop(uniqueObj_.get());
+}
+
+void Naviframe::onPop(Elm_Object_Item *item)
+{
+ setEvasSmartCallback("transition,finished", [this, item]() {
+ removeEvasSmartCallback("transition,finished");
+ auto cb = naviframeCallbacks_.find(item);
+ if (cb == naviframeCallbacks_.end()) {
+ ERROR("No callback registered for this frame");
+ return;
+ }
+ onPopAnimationEnd(cb->second);
+ });
+}
+
+Eina_Bool Naviframe::callbackMethod(void *data, Elm_Object_Item *it)
+{
+ auto self = static_cast<Naviframe *>(data);
+ self->onPop(it);
+ return EINA_TRUE;
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NAVIFRAME_HPP
+#define NAVIFRAME_HPP
+
+#include "Layout.hpp"
+
+#include <stack>
+#include <utility>
+
+class NaviframeItem
+{
+ friend class Naviframe;
+
+ public:
+ NaviframeItem() = default;
+
+ void setPartContent(const std::string &part, Widget *content);
+ operator bool() const
+ {
+ return (item_ != nullptr);
+ }
+ bool operator!() const
+ {
+ return (item_ == nullptr);
+ }
+
+ private:
+ NaviframeItem(Elm_Object_Item *item);
+ Elm_Object_Item *item_ = nullptr;
+};
+
+class Naviframe : public Layout
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ NaviframeItem pushBack(const TranslatedString &title,
+ Widget *content,
+ std::function<void()> onPopCb,
+ Widget *prevBtn = nullptr,
+ const std::string &style = {});
+ void popBack(NaviframeItem naviItem = {});
+ NaviframeItem top();
+
+ protected:
+ using Layout::Layout;
+
+ private:
+ void createEflObject(std::function<void()> onBackButtonPressed = {});
+ void onPop(Elm_Object_Item *item);
+ static Eina_Bool callbackMethod(void *data, Elm_Object_Item *it);
+ void onPopAnimationEnd(std::function<void()> onPopAnimationEnd);
+
+ std::stack<std::pair<Widget *, Widget *>> naviframeStack_;
+ std::unordered_map<Elm_Object_Item *, std::function<void()>> naviframeCallbacks_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Popup.hpp"
+
+void Popup::createEflObject()
+{
+ uniqueObj_.reset(elm_popup_add(parent_->getObject()));
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ show();
+}
+
+void Popup::createEflObject(const TranslatedString &title)
+{
+ createEflObject();
+ setPartText("title,text", title);
+}
+
+void Popup::setOrientation(Elm_Popup_Orient orientation)
+{
+ elm_popup_orient_set(uniqueObj_.get(), orientation);
+}
+
+void Popup::setAlignment(double h, double v)
+{
+ elm_popup_align_set(uniqueObj_.get(), h, v);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef POPUP_HPP
+#define POPUP_HPP
+
+#include "Widget.hpp"
+
+class Popup : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setOrientation(Elm_Popup_Orient orientation);
+ void setAlignment(double h, double v);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ void createEflObject(const TranslatedString &title);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Radio.hpp"
+
+void Radio::createEflObject()
+{
+ uniqueObj_.reset(elm_radio_add(parent_->getObject()));
+}
+
+void Radio::addToGroup(Radio &radio)
+{
+ elm_radio_group_add(uniqueObj_.get(), radio.getObject());
+}
+
+void Radio::setValue(int val)
+{
+ elm_radio_state_value_set(uniqueObj_.get(), val);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef RADIO_HPP
+#define RADIO_HPP
+
+#include "Widget.hpp"
+
+class Radio : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void addToGroup(Radio &radio);
+ void setValue(int val);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Scroller.hpp"
+
+void Scroller::createEflObject()
+{
+ uniqueObj_.reset(elm_scroller_add(parent_->getObject()));
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+}
+
+void Scroller::setScrollbarsVisibility(Elm_Scroller_Policy h, Elm_Scroller_Policy v)
+{
+ elm_scroller_policy_set(uniqueObj_.get(), h, v);
+}
+
+void Scroller::setMinimumSizeLimit(bool h, bool v)
+{
+ elm_scroller_content_min_limit(uniqueObj_.get(), h ? EINA_TRUE : EINA_FALSE, v ? EINA_TRUE : EINA_FALSE);
+}
+
+void Scroller::blockScrolling(Elm_Scroller_Movement_Block direction)
+{
+ elm_scroller_movement_block_set(uniqueObj_.get(), direction);
+}
+
+void Scroller::setRelativeSize(double h, double v)
+{
+ elm_scroller_page_relative_set(uniqueObj_.get(), h, v);
+}
+
+void Scroller::setPageScrollLimit(int h, int v)
+{
+ elm_scroller_page_scroll_limit_set(uniqueObj_.get(), h, v);
+}
+
+size_t Scroller::getCurrentVerticalPage()
+{
+ int pageNum;
+ elm_scroller_current_page_get(uniqueObj_.get(), NULL, &pageNum);
+ return static_cast<size_t>(pageNum);
+}
+
+void Scroller::showVerticalPage(size_t page)
+{
+ elm_scroller_page_show(uniqueObj_.get(), 0, page);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SCROLLER_HPP
+#define SCROLLER_HPP
+
+#include "Widget.hpp"
+
+class Scroller : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setScrollbarsVisibility(Elm_Scroller_Policy h, Elm_Scroller_Policy v);
+ void setMinimumSizeLimit(bool w, bool h);
+ void blockScrolling(Elm_Scroller_Movement_Block direction);
+ void setRelativeSize(double w, double h);
+ void setPageScrollLimit(int h, int v);
+ size_t getCurrentVerticalPage();
+ void showVerticalPage(size_t page);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Slider.hpp"
+
+void Slider::createEflObject()
+{
+ uniqueObj_.reset(elm_slider_add(parent_->getObject()));
+}
+
+void Slider::showIndicator(bool show)
+{
+ elm_slider_indicator_show_set(uniqueObj_.get(), show ? EINA_TRUE : EINA_FALSE);
+}
+
+void Slider::setIndicatorFormat(const std::string &format)
+{
+ elm_slider_indicator_format_set(uniqueObj_.get(), format.c_str());
+}
+
+void Slider::setIndicatorFormatFunction(IndicatorFormatFunction fun)
+{
+ elm_slider_indicator_format_function_set(uniqueObj_.get(), fun, indicatorFree);
+}
+
+void Slider::setRange(double min, double max)
+{
+ elm_slider_min_max_set(uniqueObj_.get(), min, max);
+}
+
+void Slider::setStep(double step)
+{
+ elm_slider_step_set(uniqueObj_.get(), step);
+}
+
+void Slider::setValue(double value)
+{
+ elm_slider_value_set(uniqueObj_.get(), value);
+}
+
+double Slider::getValue()
+{
+ return elm_slider_value_get(uniqueObj_.get());
+}
+
+void Slider::indicatorFree(char *str)
+{
+ free(str);
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SLIDER_HPP
+#define SLIDER_HPP
+
+#include "Widget.hpp"
+
+class Slider : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ using IndicatorFormatFunction = char *(*)(double);
+
+ void showIndicator(bool show);
+ void setIndicatorFormat(const std::string &format);
+ void setIndicatorFormatFunction(IndicatorFormatFunction fun);
+ void setRange(double min, double max);
+ void setStep(double step);
+ void setValue(double value);
+ double getValue();
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+ static void indicatorFree(char *str);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Spinner.hpp"
+
+void Spinner::createEflObject()
+{
+ uniqueObj_.reset(elm_spinner_add(parent_->getObject()));
+ setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ setAlignHint(EVAS_HINT_FILL, -1.0);
+}
+
+void Spinner::setRange(utils::Range<double> range)
+{
+ elm_spinner_min_max_set(uniqueObj_.get(), range.begin, range.end);
+}
+
+void Spinner::setStep(double step)
+{
+ elm_spinner_step_set(uniqueObj_.get(), step);
+}
+
+void Spinner::setEditable(bool editable)
+{
+ elm_spinner_editable_set(uniqueObj_.get(), editable ? EINA_TRUE : EINA_FALSE);
+}
+
+void Spinner::setValue(double val)
+{
+ elm_spinner_value_set(uniqueObj_.get(), val);
+}
+
+double Spinner::getValue()
+{
+ return elm_spinner_value_get(uniqueObj_.get());
+}
+
+void Spinner::setLabelFormat(const std::string &format)
+{
+ elm_spinner_label_format_set(uniqueObj_.get(), format.c_str());
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SPINNER_HPP
+#define SPINNER_HPP
+
+#include "Widget.hpp"
+#include "utils.hpp"
+
+#include <string>
+
+class Spinner : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setRange(utils::Range<double> range);
+ void setStep(double step);
+ void setEditable(bool editable);
+ void setValue(double val);
+ double getValue();
+ void setLabelFormat(const std::string &format);
+
+ protected:
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Toolbar.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+void ToolbarItem::disable(bool disable)
+{
+ elm_object_item_disabled_set(item_, disable ? EINA_TRUE : EINA_FALSE);
+}
+
+ToolbarItem::ToolbarItem(Elm_Object_Item *item)
+ : item_(item)
+{}
+
+void Toolbar::createEflObject()
+{
+ uniqueObj_.reset(elm_toolbar_add(parent_->getObject()));
+ setSelectMode(ELM_OBJECT_SELECT_MODE_NONE);
+ setShrinkMode(ELM_TOOLBAR_SHRINK_EXPAND);
+ expandTransverseLength(true);
+}
+
+void Toolbar::setSelectMode(Elm_Object_Select_Mode mode)
+{
+ elm_toolbar_select_mode_set(uniqueObj_.get(), mode);
+}
+
+void Toolbar::setShrinkMode(Elm_Toolbar_Shrink_Mode mode)
+{
+ elm_toolbar_shrink_mode_set(uniqueObj_.get(), mode);
+}
+
+void Toolbar::expandTransverseLength(bool expand)
+{
+ elm_toolbar_transverse_expanded_set(uniqueObj_.get(), expand ? EINA_TRUE : EINA_FALSE);
+}
+
+ToolbarItem Toolbar::addItem(const TranslatedString &label, std::function<void()> onClick)
+{
+ auto cbData = std::make_unique<WidgetCallback::Data<Toolbar, int>>(this, callbacks_.size());
+ auto dataPtr = cbData.get();
+ auto val = WidgetCallback::Value<Toolbar, int>{std::move(onClick), std::move(cbData)};
+ callbacks_.push_back(std::move(val));
+ auto item = elm_toolbar_item_append(uniqueObj_.get(), NULL, label.c_str(), callbackMethod, dataPtr);
+ return ToolbarItem{static_cast<Elm_Object_Item *>(item)};
+}
+
+void Toolbar::callbackMethod(void *data, Evas_Object *obj, void *event_info)
+{
+ auto cbData = static_cast<WidgetCallback::Data<Toolbar, int> *>(data);
+
+ try {
+ auto c = cbData->self->callbacks_.at(cbData->eventName).callback;
+ c();
+ } catch (std::out_of_range &error) {
+ ERROR("No callback registered for this event");
+ }
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef TOOLBAR_HPP
+#define TOOLBAR_HPP
+
+#include "Widget.hpp"
+
+class ToolbarItem
+{
+ friend class Toolbar;
+
+ public:
+ ToolbarItem() = default;
+ void disable(bool disable);
+
+ operator bool() const
+ {
+ return (item_ != nullptr);
+ }
+ bool operator!() const
+ {
+ return (item_ == nullptr);
+ }
+
+ private:
+ ToolbarItem(Elm_Object_Item *item);
+ Elm_Object_Item *item_ = nullptr;
+};
+
+class Toolbar : public Widget
+{
+ template <typename T, typename... Args>
+ friend T *Widget::make(Widget *parent, Args &&... args);
+
+ public:
+ void setSelectMode(Elm_Object_Select_Mode mode);
+ void setShrinkMode(Elm_Toolbar_Shrink_Mode mode);
+ void expandTransverseLength(bool expand);
+ ToolbarItem addItem(const TranslatedString &label, std::function<void()> onClick);
+
+ protected:
+ static void callbackMethod(void *data, Evas_Object *obj, void *event_info);
+ std::vector<WidgetCallback::Value<Toolbar, int>> callbacks_;
+ using Widget::Widget;
+
+ private:
+ void createEflObject();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Widget.hpp"
+
+#include "AccessibilitySettingLog.hpp"
+
+Widget::Widget(Widget *parent)
+ : parent_(parent)
+{}
+
+Widget::~Widget()
+{
+ for (auto &it : smartCallbacks_) {
+ evas_object_smart_callback_del(getObject(), it.first.c_str(), smartCallbackMethod);
+ }
+}
+
+void Widget::setText(const TranslatedString &text)
+{
+ elm_object_text_set(uniqueObj_.get(), text.c_str());
+}
+
+void Widget::setPartText(const std::string &partName, const TranslatedString &text)
+{
+ elm_object_part_text_set(uniqueObj_.get(), partName.c_str(), text.c_str());
+}
+
+void Widget::setWeightHint(double x, double y)
+{
+ evas_object_size_hint_weight_set(uniqueObj_.get(), x, y);
+}
+
+void Widget::setAlignHint(double x, double y)
+{
+ evas_object_size_hint_align_set(uniqueObj_.get(), x, y);
+}
+
+void Widget::setMinSizeHint(Evas_Coord v, Evas_Coord h)
+{
+ evas_object_size_hint_min_set(uniqueObj_.get(), v, h);
+}
+
+void Widget::setMaxSizeHint(Evas_Coord v, Evas_Coord h)
+{
+ evas_object_size_hint_max_set(uniqueObj_.get(), v, h);
+}
+
+void Widget::setAspectHint(Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h)
+{
+ evas_object_size_hint_aspect_set(uniqueObj_.get(), aspect, w, h);
+}
+
+Rectangle Widget::getGeometry()
+{
+ int x, y, w, h;
+ evas_object_geometry_get(uniqueObj_.get(), &x, &y, &w, &h);
+ return {{x, y}, {w, h}};
+}
+
+void Widget::setPosition(Point anchor)
+{
+ evas_object_move(uniqueObj_.get(), anchor.x, anchor.y);
+}
+
+void Widget::setEvasSmartCallback(const std::string &eventName, std::function<void()> callback)
+{
+ auto cbData = std::make_unique<WidgetCallback::Data<Widget, std::string>>(this, eventName);
+ auto dataPtr = cbData.get();
+ smartCallbacks_.insert_or_assign(eventName, WidgetCallback::Value<Widget, std::string>{std::move(callback), std::move(cbData)});
+ evas_object_smart_callback_add(getObject(), eventName.c_str(), smartCallbackMethod, dataPtr);
+}
+
+void Widget::removeEvasSmartCallback(const std::string &eventName)
+{
+ evas_object_smart_callback_del(uniqueObj_.get(), eventName.c_str(), smartCallbackMethod);
+ smartCallbacks_.erase(eventName);
+}
+
+void Widget::setEextEventCallback(const Eext_Callback_Type type, std::function<void()> callback)
+{
+ auto cbData = std::make_unique<WidgetCallback::Data<Widget, Eext_Callback_Type>>(this, type);
+ auto dataPtr = cbData.get();
+ eextEventCallbacks_.insert_or_assign(
+ type, WidgetCallback::Value<Widget, Eext_Callback_Type>{std::move(callback), std::move(cbData)});
+ eext_object_event_callback_add(getObject(), type, eextEventMethod, dataPtr);
+}
+
+void Widget::setStyle(const std::string &style)
+{
+ elm_object_style_set(uniqueObj_.get(), style.c_str());
+}
+
+void Widget::setColor(int r, int g, int b, int a)
+{
+ evas_object_color_set(uniqueObj_.get(), r, g, b, a);
+}
+
+void Widget::setContent(Widget *widget)
+{
+ elm_object_content_set(uniqueObj_.get(), widget->getObject());
+}
+
+void Widget::setPartContent(const std::string &part, Widget *content)
+{
+ elm_object_part_content_set(uniqueObj_.get(), part.c_str(), content->getObject());
+}
+
+void Widget::setHomogeneousDimensions()
+{
+ elm_box_homogeneous_set(uniqueObj_.get(), EINA_TRUE);
+}
+
+void Widget::setPropagateEvents(bool prop)
+{
+ evas_object_propagate_events_set(uniqueObj_.get(), prop ? EINA_TRUE : EINA_FALSE);
+}
+
+void Widget::disable(bool disable)
+{
+ disable ? elm_object_disabled_set(uniqueObj_.get(), EINA_TRUE) : elm_object_disabled_set(uniqueObj_.get(), EINA_FALSE);
+}
+
+void Widget::emitSignal(const std::string &signal)
+{
+ elm_object_signal_emit(uniqueObj_.get(), signal.c_str(), "");
+}
+
+void Widget::setFocus(bool focus)
+{
+ elm_object_focus_set(uniqueObj_.get(), focus ? EINA_TRUE : EINA_FALSE);
+}
+
+void Widget::show()
+{
+ evas_object_show(uniqueObj_.get());
+}
+
+void Widget::hide()
+{
+ evas_object_hide(uniqueObj_.get());
+}
+
+void Widget::setPassEvents(bool pass)
+{
+ evas_object_pass_events_set(uniqueObj_.get(), pass ? EINA_TRUE : EINA_FALSE);
+}
+
+Evas_Object *Widget::getObject()
+{
+ return uniqueObj_.get();
+}
+
+Widget *Widget::getParent()
+{
+ return parent_;
+}
+
+void Widget::addChild(std::unique_ptr<Widget> child)
+{
+ child->parent_ = this;
+ children_.push_back(std::move(child));
+}
+
+void Widget::removeChild(Widget *child)
+{
+ if (!child)
+ return;
+
+ for (auto it = children_.begin(); it != children_.end(); ++it) {
+ if (it->get() == child) {
+ children_.erase(it);
+ break;
+ }
+ }
+}
+
+void Widget::smartCallbackMethod(void *data, Evas_Object *obj, void *event_info)
+{
+ auto cbData = static_cast<WidgetCallback::Data<Widget, std::string> *>(data);
+
+ auto cb = cbData->self->smartCallbacks_.find(cbData->eventName);
+ if (cb == cbData->self->smartCallbacks_.end()) {
+ ERROR("No callback registered for this event");
+ return;
+ }
+ auto c = cb->second.callback;
+ c();
+}
+
+void Widget::eextEventMethod(void *data, Evas_Object *obj, void *event_info)
+{
+ auto cbData = static_cast<WidgetCallback::Data<Widget, Eext_Callback_Type> *>(data);
+
+ auto cb = cbData->self->eextEventCallbacks_.find(cbData->eventName);
+ if (cb == cbData->self->eextEventCallbacks_.end()) {
+ ERROR("No callback registered for this event");
+ return;
+ }
+ auto c = cb->second.callback;
+ c();
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef WIDGET_HPP
+#define WIDGET_HPP
+
+#include "Geometry.hpp"
+#include "TranslatedString.hpp"
+#include "WidgetCallback.hpp"
+#include "utils.hpp"
+
+#include <Elementary.h>
+#include <efl_extension.h>
+#include <functional>
+#include <memory>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+class Widget
+{
+ public:
+ Widget(const Widget &) = delete;
+ Widget(Widget &&) = delete;
+ virtual ~Widget();
+
+ template <typename T, typename... Args>
+ static T *make(Widget *parent, Args &&... args)
+ {
+ auto raw = new T(parent);
+ parent->addChild(std::unique_ptr<T>(raw));
+ raw->createEflObject(std::forward<Args>(args)...);
+ return raw;
+ }
+
+ void setText(const TranslatedString &text);
+ void setPartText(const std::string &partName, const TranslatedString &text);
+ void setWeightHint(double x, double y);
+ void setAlignHint(double x, double y);
+ void setMinSizeHint(Evas_Coord v, Evas_Coord h);
+ void setMaxSizeHint(Evas_Coord v, Evas_Coord h);
+ void setAspectHint(Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h);
+ Rectangle getGeometry();
+ void setPosition(Point anchor);
+ void setEvasSmartCallback(const std::string &eventName, std::function<void()> callback);
+ void removeEvasSmartCallback(const std::string &eventName);
+ void setEextEventCallback(const Eext_Callback_Type type, std::function<void()> callback);
+ void setStyle(const std::string &style);
+ void setColor(int r, int g, int b, int a);
+ void setContent(Widget *widget);
+ void setPartContent(const std::string &part, Widget *content);
+ void setHomogeneousDimensions();
+ void setPropagateEvents(bool prop);
+ void setFocus(bool focus);
+ void disable(bool disable);
+ void emitSignal(const std::string &signal);
+ void show();
+ void hide();
+ void setPassEvents(bool pass);
+
+ Evas_Object *getObject();
+ Widget *getParent();
+ void addChild(std::unique_ptr<Widget> child);
+ void removeChild(Widget *child);
+
+ protected:
+ Widget() = default;
+ Widget(Widget *parent);
+ static void smartCallbackMethod(void *data, Evas_Object *obj, void *event_info);
+ static void eextEventMethod(void *data, Evas_Object *obj, void *event_info);
+
+ std::unique_ptr<Evas_Object, utils::EvasDeleter> uniqueObj_;
+ Widget *parent_ = nullptr;
+ std::vector<std::unique_ptr<Widget>> children_;
+ std::unordered_map<std::string, WidgetCallback::Value<Widget, std::string>> smartCallbacks_;
+ std::unordered_map<Eext_Callback_Type, WidgetCallback::Value<Widget, Eext_Callback_Type>> eextEventCallbacks_;
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Window.hpp"
+
+Window::Window(const std::string &title)
+{
+ uniqueObj_.reset(elm_win_add(NULL, NULL, ELM_WIN_BASIC));
+
+ elm_win_title_set(uniqueObj_.get(), title.c_str());
+
+ elm_win_indicator_mode_set(uniqueObj_.get(), ELM_WIN_INDICATOR_SHOW);
+ elm_win_indicator_opacity_set(uniqueObj_.get(), ELM_WIN_INDICATOR_OPAQUE);
+}
+
+void Window::setConformant(bool conformant)
+{
+ elm_win_conformant_set(uniqueObj_.get(), conformant ? EINA_TRUE : EINA_FALSE);
+}
+
+void Window::addResizeObject(Widget *widget)
+{
+ elm_win_resize_object_add(uniqueObj_.get(), widget->getObject());
+}
+
+void Window::addAvailableRotations(std::vector<int> rotations)
+{
+ elm_win_wm_rotation_available_rotations_set(uniqueObj_.get(), rotations.data(), rotations.size());
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef WINDOW_HPP
+#define WINDOW_HPP
+
+#include "Widget.hpp"
+
+class Window : public Widget
+{
+ public:
+ Window(const std::string &title);
+
+ void setConformant(bool conformant);
+ void addResizeObject(Widget *widget);
+ void addAvailableRotations(std::vector<int> rotations);
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ACCESSIBILITY_SETTING_LOG_HPP
+#define ACCESSIBILITY_SETTING_LOG_HPP
+
+#include <Ecore.h>
+#include <cassert>
+#include <dlog.h>
+#include <iostream>
+#include <libintl.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "ACCESSIBILITY-SETTING"
+
+#define DEBUG_PRINTING_LEVEL_OFF 0
+#define DEBUG_PRINTING_LEVEL_ERRORS 1
+#define DEBUG_PRINTING_LEVEL_WARNINGS 2
+#define DEBUG_PRINTING_LEVEL_DEBUG 3
+
+#define ASSERT(x, msg...) \
+ do { \
+ if (!(x)) { \
+ ERROR("ASSERT FAILED"); \
+ ERROR(msg); \
+ assert(x); \
+ } \
+ } while (0)
+
+#ifdef ENABLE_COLORS
+#define RED_TEXT(text) "\033[0;31m" text "\033[0m"
+#define YELLOW_TEXT(text) "\033[0;33m" text "\033[0m"
+#define GREEN_TEXT(text) "\033[0;32m" text "\033[0m"
+#else
+#define RED_TEXT(text) text
+#define YELLOW_TEXT(text) text
+#define GREEN_TEXT(text) text
+#endif
+
+// defined in file CMakeList.txt
+#ifndef DEBUG_PRINTING_LEVEL
+#define DEBUG_PRINTING_LEVEL DEBUG_PRINTING_LEVEL_DEBUG
+#endif
+
+#if DEBUG_PRINTING_LEVEL >= DEBUG_PRINTING_LEVEL_ERRORS
+#define ERROR(format, arg...) LOGE(RED_TEXT(format), ##arg)
+#define DEBUG_ERRORS_WANTED
+#else
+#define ERROR(...) \
+ do { \
+ } while (0)
+#endif
+
+#if DEBUG_PRINTING_LEVEL >= DEBUG_PRINTING_LEVEL_WARNINGS
+#define WARNING(format, arg...) LOGW(YELLOW_TEXT(format), ##arg)
+#define DEBUG_WARNINGS_WANTED
+#else
+#define WARNING(...) \
+ do { \
+ } while (0)
+#endif
+
+#if DEBUG_PRINTING_LEVEL >= DEBUG_PRINTING_LEVEL_DEBUG
+#define DEBUG(format, arg...) LOGD(GREEN_TEXT(format), ##arg)
+#define DEBUG_DEBUGS_WANTED
+#else
+#define DEBUG(...) \
+ do { \
+ } while (0)
+#endif
+
+#define RETURN_IF(condition, errorMessage, arg...) \
+ do { \
+ if (condition) { \
+ ERROR(errorMessage, ##arg); \
+ return; \
+ } \
+ } while (0)
+
+#define RETURN_DEFAULT_IF(condition, errorMessage, arg...) \
+ do { \
+ if (condition) { \
+ ERROR(errorMessage, ##arg); \
+ return {}; \
+ } \
+ } while (0)
+
+#endif /* ACCESSIBILITY_SETTING_LOG_HPP */
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "Geometry.hpp"
+
+std::string Point::toString() const
+{
+ std::ostringstream o;
+ o << "x=" << std::setw(4) << x << " y=" << std::setw(4) << y;
+ return o.str();
+}
+
+std::string Size::toString() const
+{
+ std::ostringstream o;
+ o << "w=" << std::setw(4) << width << " h=" << std::setw(4) << height;
+ return o.str();
+}
+
+std::string Rectangle::toString() const
+{
+ return position.toString() + " " + size.toString();
+}
+
+bool Rectangle::contains(Point pt) const
+{
+ return position.x <= pt.x && position.y <= pt.y && position.x + size.width > pt.x && position.y + size.height > pt.y;
+}
+
+Point Rectangle::getCenterPoint() const
+{
+ return {position.x + size.width / 2, position.y + size.height / 2};
+}
+
+Rectangle Rectangle::intersect(const Rectangle first, const Rectangle second)
+{
+ Rectangle rect;
+
+ rect.position.x = std::max(first.position.x, second.position.x);
+ rect.position.y = std::max(first.position.y, second.position.y);
+
+ rect.size.width = std::max(rect.position.x,
+ std::min(first.position.x + first.size.width, second.position.x + second.size.width)) -
+ rect.position.x;
+ rect.size.height = std::max(rect.position.y,
+ std::min(first.position.y + first.size.height, second.position.y + second.size.height)) -
+ rect.position.y;
+
+ return rect;
+}
+
+Rectangle Rectangle::sum(const Rectangle first, const Rectangle second)
+{
+ Rectangle rect;
+
+ rect.position.x = std::min(first.position.x, second.position.x);
+ rect.position.y = std::min(first.position.y, second.position.y);
+
+ rect.size.width = std::max(first.position.x + first.size.width, second.position.x + second.size.width) - rect.position.x;
+ rect.size.height = std::max(first.position.y + first.size.height, second.position.y + second.size.height) - rect.position.y;
+
+ return rect;
+}
+
+Color::Color(int r, int g, int b, int a)
+ : r(r & 0xff), g(g & 0xff), b(b & 0xff), a(a & 0xff)
+{
+}
+
+bool Color::operator==(const Color &other)
+{
+ return toRGBAInt() == other.toRGBAInt();
+}
+
+bool Color::operator!=(const Color &other)
+{
+ return toRGBAInt() != other.toRGBAInt();
+}
+
+int Color::getR() const
+{
+ return r;
+}
+
+int Color::getG() const
+{
+ return g;
+}
+
+int Color::getB() const
+{
+ return b;
+}
+
+int Color::getA() const
+{
+ return a;
+}
+
+int Color::toRGBAInt() const
+{
+ return (r << 24) | (g << 16) | (b << 8) | a;
+}
+
+int Color::toABGRInt() const
+{
+ return (a << 24) | (b << 16) | (g << 8) | r;
+}
+
+Color Color::invert() const
+{
+ return {0xff - r, 0xff - g, 0xff - b, a};
+}
+
+Color Color::fromRGBA(int rgba)
+{
+ return {rgba >> 24, rgba >> 16, rgba >> 8, rgba};
+}
+
+Color Color::fromABGR(int abgr)
+{
+ return {abgr, abgr >> 8, abgr >> 16, abgr >> 24};
+}
+
+const Color Color::RED = Color{255, 0, 0, 255};
+const Color Color::ORANGE = Color{255, 128, 0, 255};
+const Color Color::YELLOW = Color{255, 255, 0, 255};
+const Color Color::GREEN = Color{0, 255, 0, 255};
+const Color Color::BLUE = Color{0, 0, 255, 255};
+const Color Color::GRAY = Color{128, 128, 128, 255};
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef GEOMETRY_HPP
+#define GEOMETRY_HPP
+
+#include <iomanip>
+#include <sstream>
+#include <string>
+
+struct Point
+{
+ int x{};
+ int y{};
+
+ std::string toString() const;
+
+ bool operator==(Point p) const
+ {
+ return x == p.x && y == p.y;
+ }
+ bool operator!=(Point p) const
+ {
+ return !(*this == p);
+ }
+};
+
+struct Size
+{
+ int width{};
+ int height{};
+
+ std::string toString() const;
+ bool isPositive() const
+ {
+ return width > 0 && height > 0;
+ }
+
+ bool operator==(Size p) const
+ {
+ return width == p.width && height == p.height;
+ }
+ bool operator!=(Size p) const
+ {
+ return !(*this == p);
+ }
+};
+
+struct Rectangle
+{
+ Point position;
+ Size size;
+
+ std::string toString() const;
+ bool hasPositiveSize() const
+ {
+ return size.isPositive();
+ }
+ bool contains(Point pt) const;
+ Point getCenterPoint() const;
+
+ static Rectangle intersect(const Rectangle first, const Rectangle second);
+ static Rectangle sum(const Rectangle first, const Rectangle second);
+
+ bool operator==(Rectangle p) const
+ {
+ return position == p.position && size == p.size;
+ }
+ bool operator!=(Rectangle p) const
+ {
+ return !(*this == p);
+ }
+};
+
+class Color
+{
+ public:
+ Color() = default;
+ Color(int r, int g, int b, int a = {});
+ bool operator==(const Color &other);
+ bool operator!=(const Color &other);
+ // static const int RED_RGBAInt = 0xff0000ff;
+ // static const int ORANGE_RGBAInt = 0xff8000ff;
+ // static const int YELLOW_RGBAInt = 0xffff00ff;
+ // static const int GREEN_RGBAInt = 0x00ff00ff;
+ // static const int BLUE_RGBAInt = 0x0000ffff;
+ // static const int GRAY_RGBAInt = 0x808080ff;
+
+ static const Color RED;
+ static const Color ORANGE;
+ static const Color YELLOW;
+ static const Color GREEN;
+ static const Color BLUE;
+ static const Color GRAY;
+
+ int getR() const;
+ int getG() const;
+ int getB() const;
+ int getA() const;
+
+ int toRGBAInt() const;
+ int toABGRInt() const;
+ Color invert() const;
+ static Color fromRGBA(int rgba);
+ static Color fromABGR(int abgr);
+
+ private:
+ int r = 0;
+ int g = 0;
+ int b = 0;
+ int a = 0;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef OBSERVABLE_HPP
+#define OBSERVABLE_HPP
+
+#include <functional>
+#include <vector>
+
+template <typename... ARGS>
+class Observable
+{
+ public:
+ virtual ~Observable() = default;
+
+ void attach(std::function<void(ARGS...)> onChange)
+ {
+ onChangeCallbacks_.push_back(std::move(onChange));
+ }
+
+ protected:
+ void notify(ARGS... args)
+ {
+ for (auto &c : this->onChangeCallbacks_)
+ if (c)
+ c(args...);
+ }
+
+ std::vector<std::function<void(ARGS...)>> onChangeCallbacks_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef OBSERVABLE_PROPERTY_HPP
+#define OBSERVABLE_PROPERTY_HPP
+
+#include "Observable.hpp"
+
+template <typename V>
+class ObservableProperty : public Observable<V>
+{
+ public:
+ ObservableProperty() = default;
+ ObservableProperty(V val)
+ : value_(std::move(val))
+ {}
+
+ V value() const
+ {
+ return value_;
+ }
+
+ ObservableProperty &operator=(V val)
+ {
+ if (value_ == val)
+ return *this;
+
+ value_ = std::move(val);
+ this->notify(value_);
+ return *this;
+ }
+
+ V value_{};
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SINGLETON_HPP
+#define SINGLETON_HPP
+
+#include <memory>
+#include <type_traits>
+
+/*
+ * Classes below provides convenient way to create singletons without writing boilerplate code.
+ * The usage is as follows:
+ * Define function createImplementation if class is derived from interface
+ * Singleton<MyClass>::instance.myMethod();
+ * Class provided as template parameter must contain public empty constructor
+ */
+
+template <class T>
+class Singleton
+{
+ public:
+ static T &instance()
+ {
+ static std::unique_ptr<T> instance{createImplementation()};
+ return *instance;
+ }
+
+ private:
+ Singleton() = default;
+ Singleton(const Singleton &) = delete;
+ Singleton(Singleton &&) = delete;
+ Singleton &operator=(const Singleton &) = delete;
+ Singleton &operator=(Singleton &&) = delete;
+
+ template <class Q = T>
+ static typename std::enable_if<std::is_default_constructible<Q>::value, std::unique_ptr<Q>>::type createImplementation()
+ {
+ return std::unique_ptr<Q>{new Q};
+ }
+
+ template <class Q = T>
+ static typename std::enable_if<!std::is_default_constructible<Q>::value, std::unique_ptr<Q>>::type createImplementation();
+};
+
+#endif
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TranslatedString.hpp"
+
+#include <appcore-common.h>
+#include <cstring>
+
+TranslatedString::TranslatedString(const std::string &str)
+ : value(std::string{gettext(str.c_str())})
+{}
+
+TranslatedString::TranslatedString(const char *str)
+ : value(std::string{gettext(str), strlen(gettext(str))})
+{}
+
+TranslatedString &TranslatedString::operator+=(const TranslatedString &ts)
+{
+ value += ts.value;
+ return *this;
+}
+
+bool TranslatedString::empty() const
+{
+ return value.empty();
+}
+
+std::string TranslatedString::str() const
+{
+ return value;
+}
+
+const char *TranslatedString::c_str() const
+{
+ return value.c_str();
+}
+
+TranslatedString operator+(TranslatedString lString, const TranslatedString &rString)
+{
+ lString += rString;
+ return lString;
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TRANSLATED_STRING_HPP
+#define TRANSLATED_STRING_HPP
+
+#include "AccessibilitySettingLog.hpp"
+
+#include <string>
+/**
+ * Class containing strings translated with usage of internatonalization API
+ *
+ * Main purpose of this class is to distinguish objects containing raw i18n keys
+ * from already translated
+ */
+class TranslatedString
+{
+ public:
+ TranslatedString() = default;
+ TranslatedString(const std::string &str);
+ TranslatedString(const char *str);
+
+ TranslatedString &operator+=(const TranslatedString &ts);
+
+ template <typename... ARGS>
+ static TranslatedString create(const char *str, const ARGS &... args)
+ {
+ char buf[1024] = {0};
+ auto ret = snprintf(buf, sizeof(buf), gettext(str), args...);
+ if (ret > 1024) {
+ ERROR("snprintf failed");
+ return {};
+ }
+ return {buf};
+ }
+
+ bool empty() const;
+
+ std::string str() const;
+ const char *c_str() const;
+
+ private:
+ std::string value;
+};
+
+TranslatedString operator+(TranslatedString lString, const TranslatedString &rString);
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_CONSTANTS_HPP
+#define UNIVERSAL_SWITCH_CONSTANTS_HPP
+
+#define VCONF_MEMORY_TYPE "db/"
+#define VCONF_PROJECT_NAME "setting/accessibility/universal-switch/"
+#define VCONF_PROJECT_PREFIX VCONF_MEMORY_TYPE VCONF_PROJECT_NAME
+
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_ENABLED VCONF_PROJECT_PREFIX "AUTO_SCAN_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCAN_INT VCONF_PROJECT_PREFIX "AUTO_SCAN_INTERVAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_NUM_OF_SCANS VCONF_PROJECT_PREFIX "LOOP_LIMIT_TO_INACTION"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_METHOD VCONF_PROJECT_PREFIX "SCAN_METHOD"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_VERTICAL VCONF_PROJECT_PREFIX "SCAN_DIRECTION_VERTICAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_DIR_HORIZONTA VCONF_PROJECT_PREFIX "SCAN_DIRECTION_HORIZONTAL"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SCAN_PT_SPEED VCONF_PROJECT_PREFIX "SCAN_PT_SPEED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_STATE VCONF_PROJECT_PREFIX "PAUSE_ON_FIRST_ELEMENT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_PAUSE_ON_FIRST_VALUE VCONF_PROJECT_PREFIX "PAUSE_ON_FIRST_ELEMENT_TIME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_STATE VCONF_PROJECT_PREFIX "TAP_DURATION_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_TAP_DURATION_VALUE VCONF_PROJECT_PREFIX "TAP_DURATION_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_STATE VCONF_PROJECT_PREFIX "SGL_INACTION_INT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_SGL_IACTION_INT_VALUE VCONF_PROJECT_PREFIX "SGL_INACTION_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_STATE VCONF_PROJECT_PREFIX "AUTO_TAP_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_VALUE VCONF_PROJECT_PREFIX "AUTO_TAP_WAITING_TIME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_STATE VCONF_PROJECT_PREFIX "AUTO_MOVE_INT_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_MOVE_INT_VALUE VCONF_PROJECT_PREFIX "AUTO_MOVE_INT_VALUE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_TAP_KBD_STATE VCONF_PROJECT_PREFIX "AUTO_TAP_KBD_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_CURSOR_COLOR VCONF_PROJECT_PREFIX "FEEDBACK_CURSOR_COLOR"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_STATE VCONF_PROJECT_PREFIX "FEEDBACK_SOUND_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_SOUND_VOLUME VCONF_PROJECT_PREFIX "FEEDBACK_SOUND_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_STATE VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_RATE VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_SPEECH_RATE"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_FEEDBACK_VOICE_SPEECH_VOLUME VCONF_PROJECT_PREFIX "FEEDBACK_VOICE_SPEECH_VOLUME"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_AUTO_SCROLL_ENABLED VCONF_PROJECT_PREFIX "AUTO_SCROLL_ENABLED"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_GRANULARITY_UNIT VCONF_PROJECT_PREFIX "GRANULARITY_UNIT"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_ACTIONS VCONF_PROJECT_PREFIX "SHOW_ACTIONS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_SETTINGS VCONF_PROJECT_PREFIX "SHOW_SETTINGS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_HOMESCREEN VCONF_PROJECT_PREFIX "SHOW_HOME_SCREEN_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_KEYS VCONF_PROJECT_PREFIX "SHOW_BUTTONS_AND_KEYS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_CONTEXTUAL_MENU VCONF_PROJECT_PREFIX "SHOW_CONTEXTUAL_MENU"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_GESTURES VCONF_PROJECT_PREFIX "SHOW_GESTURES_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_RECENT_APPS VCONF_PROJECT_PREFIX "SHOW_RECENT_APPS_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_SETTINGS_MANAGE_BACK VCONF_PROJECT_PREFIX "SHOW_BACK_MENU_ITEM"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_CONFIGURATION_SERVICE VCONF_PROJECT_PREFIX "configuration-service"
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_UNIVERSAL_SWITCH_INTERACTION_SERVICE VCONF_PROJECT_PREFIX "interaction-service"
+
+#define DEFAULT_AUTO_SCAN_STATE true
+#define DEFAULT_AUTO_SCAN_INTERVAL 2.0
+#define DEFAULT_AUTO_SCAN_NUMBER 5
+#define DEFAULT_SCAN_METHOD ScanMethod::POINT
+#define DEFAULT_SCAN_DIR ScanDirection::TO_BOTTOM
+#define DEFAULT_SCAN_PT_SPEED 10
+#define DEFAULT_PAUSE_ON_FIRST_STATE false
+#define DEFAULT_PAUSE_ON_FIRST_VALUE 1.0
+#define DEFAULT_TAP_DURATION_STATE false
+#define DEFAULT_TAP_DURATION_VALUE 0.5
+#define DEFAULT_SGL_IACTION_INT_STATE false
+#define DEFAULT_SGL_IACTION_INT_VALUE 0.5
+#define DEFAULT_AUTO_TAP_STATE false
+#define DEFAULT_AUTO_TAP_VALUE 1.0
+#define DEFAULT_AUTO_MOVE_INT_STATE false
+#define DEFAULT_AUTO_MOVE_INT_VALUE 1.0
+#define DEFAULT_AUTO_TAP_KEYBOARD_STATE false
+#define DEFAULT_FEEDBACK_CURSOR_COLOR 0xffff0000
+#define DEFAULT_FEEDBACK_SOUND_STATE true
+#define DEFAULT_FEEDBACK_SOUND_VOLUME 0.5
+#define DEFAULT_FEEDBACK_VOICE_STATE false
+#define DEFAULT_FEEDBACK_VOICE_SPEECH_RATE 0.5
+#define DEFAULT_FEEDBACK_VOICE_SPEECH_VOLUME 0.5
+
+#define RANGE_MIN_SCANS_NUM 1
+#define RANGE_MAX_SCANS_NUM 10
+#define RANGE_MIN_SCAN_SPEED 1
+#define RANGE_MAX_SCAN_SPEED 30
+
+#define STEP_SCANS_NUM 1
+#define STEP_SCAN_SPEED 1
+
+#define BUS "org.tizen.UniversalSwitch"
+#define PATH "/org/tizen/UniversalSwitch"
+#define IFACE "org.tizen.UniversalSwitch"
+
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_PLUS_ICON RESDIR "/icons/plus.png"
+
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN_SWITCH_PROVIDER "ScreenSwitchProvider"
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_ACCESSORIES_SWITCH_PROVIDER "AccessoriesSwitchProvider"
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_CAMERA_SWITCH_PROVIDER "CameraSwitchProvider"
+#define ACCESSIBILITY_UNIVERSAL_SWITCH_SCREEN "Screen"
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef UNIVERSAL_SWITCH_TYPES_HPP
+#define UNIVERSAL_SWITCH_TYPES_HPP
+
+#include <string>
+
+enum class ChangeType : int32_t
+{
+ ADD,
+ UPDATE,
+ REMOVE,
+ NONE
+};
+
+enum class ScanMethod
+{
+ POINT = 1,
+ ROW
+};
+
+enum class ScanDirection
+{
+ TO_BOTTOM = 1,
+ TO_TOP
+};
+
+struct SwitchConfigurationItem
+{
+ std::string switchId;
+ std::string userName;
+ std::string activityType;
+};
+
+struct InfoType
+{
+ std::string id;
+ std::string name;
+ std::string description;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef WIDGET_CALLBACK_HPP
+#define WIDGET_CALLBACK_HPP
+
+#include <functional>
+#include <memory>
+#include <unordered_map>
+
+class Widget;
+
+namespace WidgetCallback
+{
+ template <typename S, typename T>
+ struct Data
+ {
+ Data(S *self, const T &name)
+ : self(self), eventName(name)
+ {}
+
+ S *self = nullptr;
+ T eventName{};
+ };
+
+ template <typename S, typename T>
+ struct Value
+ {
+ std::function<void()> callback;
+ std::unique_ptr<Data<S, T>> data;
+ };
+
+} // namespace WidgetCallback
+#endif
--- /dev/null
+/*
+ * Copyright 2018 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef UTILS_HPP
+#define UTILS_HPP
+
+#include "Elementary.h"
+
+#include <sstream>
+#include <vector>
+
+using SettingCallback = void (*)(void *, Evas_Object *, void *);
+
+namespace utils
+{
+ struct EvasDeleter
+ {
+ template <typename T>
+ void operator()(T *t) const
+ {
+ if (t)
+ evas_object_del(t);
+ }
+ };
+
+ struct ElmGenlistItemClassDeleter
+ {
+ void operator()(Elm_Genlist_Item_Class *it) const
+ {
+ if (it)
+ elm_genlist_item_class_free(it);
+ }
+ };
+
+ template <typename T>
+ struct Range
+ {
+ T begin{};
+ T end{};
+ };
+
+ template <typename In, typename Out = double>
+ Out rescale(In value, Range<In> source, Range<Out> target = {0.0, 1.0})
+ {
+ auto denominator = source.end - source.begin;
+ auto rescaledValue = target.begin;
+ if (denominator != 0)
+ rescaledValue += (value - source.begin) * (target.end - target.begin) / denominator;
+
+ return rescaledValue;
+ }
+
+ inline std::string doubleToPercent(double val)
+ {
+ return std::to_string(static_cast<int>(val * 100)) + "%";
+ }
+
+ inline std::string doubleToString(double val, size_t precision)
+ {
+ std::ostringstream out;
+ out.precision(precision);
+
+ out << std::fixed << val;
+
+ return out.str();
+ }
+
+ inline std::vector<std::string> stringSplitByDelimiter(const std::string &s, char delimiter)
+ {
+ std::vector<std::string> tokens;
+ std::string token;
+ std::istringstream tokenStream(s);
+ while (std::getline(tokenStream, token, delimiter)) {
+ tokens.push_back(token);
+ }
+ return tokens;
+ }
+} // namespace utils
+
+#endif
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "LabelView.hpp"
+
+#include "AppContext.hpp"
+#include "Button.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+
+#define EDJ_ACCESSORY "edje/accessibility-smart-switch-accessory.edj"
+#define GRP_ACCESSORY "accessory"
+#define PRT_ACCESSORY_LABEL "accessory_label"
+
+LabelView::LabelView(const NavigationContext &context, Presenter *presenter)
+ : NaviframeView(context), labelPresenter_(static_cast<LabelPresenter *>(presenter))
+{
+ auto naviframe = context.getNaviframe();
+ layout_ = Widget::make<Layout>(naviframe, EDJ_ACCESSORY, GRP_ACCESSORY);
+ layout_->setText(PRT_ACCESSORY_LABEL, labelPresenter_->labelText_.value());
+
+ labelPresenter_->labelText_.attach([this](auto value) {
+ layout_->setText(PRT_ACCESSORY_LABEL, value);
+ });
+ backItem_ = Widget::make<Button>(context.getNaviframe(),
+ []() { Singleton<AppContext>::instance().pop(); },
+ "IDS_ST_BUTTON_BACK",
+ Button::BACK_BUTTON_ARROW_STYLE);
+ naviframeItem_ = naviframe->pushBack(labelPresenter_->getTitle(), layout_, {}, backItem_);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LABEL_VIEW
+#define LABEL_VIEW
+
+#include "Label.hpp"
+#include "LabelPresenter.hpp"
+#include "Layout.hpp"
+#include "NaviframeView.hpp"
+
+class LabelView : public NaviframeView
+{
+ public:
+ LabelView(const NavigationContext &context, Presenter *presenter);
+
+ protected:
+ LabelPresenter *labelPresenter_;
+ Layout *layout_;
+ Widget *backItem_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ListView.hpp"
+
+#include "AppContext.hpp"
+#include "Button.hpp"
+#include "Check.hpp"
+#include "Genlist.hpp"
+#include "ListPresenter.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+
+ListView::ListView(const NavigationContext &context, Presenter *presenter)
+ : NaviframeView(context), listPresenter_(dynamic_cast<ListPresenter *>(presenter))
+{
+ ASSERT(listPresenter_, "ListPresenter required");
+
+ naviframe_ = context.getNaviframe();
+ genlist_ = Widget::make<Genlist>(naviframe_);
+ genlist_->setMode(ELM_LIST_COMPRESS);
+ genlist_->setStyle("dialogue");
+
+ addItemsToGenlist();
+ listPresenter_->setOnListUpdateCallback([this]() {
+ this->itemsMapping_ = {};
+ this->genlist_->clear();
+ addItemsToGenlist();
+ });
+
+ if (!isToolbarNeeded())
+ handleNonToolbarActionsBeforeNaviframePush();
+
+ auto style = isToolbarNeeded() ? "tabbar/notitle" : std::string{};
+ auto ptr = std::make_shared<Toolbar *>(nullptr);
+ naviframeItem_ = naviframe_->pushBack(listPresenter_->getTitle(), genlist_, [ptr]() {
+ if (*ptr) {
+ auto parent = (*ptr)->getParent();
+ parent->removeChild(*ptr);
+ }
+ },
+ backItem_,
+ style);
+
+ if (isToolbarNeeded())
+ handleToolbarActions(ptr);
+ else
+ handleNonToolbarActionsAfterNaviframePush();
+}
+
+ListView::~ListView()
+{
+ if (titleRightButton_) {
+ auto parent = titleRightButton_->getParent();
+ parent->removeChild(titleRightButton_);
+ }
+}
+
+bool ListView::isToolbarNeeded()
+{
+ auto cancelAction = listPresenter_->getAction("cancelAction");
+ auto saveAction = listPresenter_->getAction("saveAction");
+ return cancelAction || saveAction;
+}
+
+void ListView::handleToolbarActions(const std::shared_ptr<Toolbar *> &ptr)
+{
+ auto cancelAction = listPresenter_->getAction("cancelAction");
+ auto saveAction = listPresenter_->getAction("saveAction");
+ toolbar_ = Widget::make<Toolbar>(naviframe_);
+ *ptr = toolbar_;
+ if (cancelAction) {
+ toolbar_->addItem(cancelAction->title_.value(), [=]() {
+ cancelAction->onInvoke_(cancelAction);
+ });
+ }
+ if (saveAction) {
+ auto saveItem = toolbar_->addItem(saveAction->title_.value(), [=]() {
+ saveAction->onInvoke_(saveAction);
+ });
+ saveItem.disable(!saveAction->enabled_.value());
+ saveAction->enabled_.attach([=](auto val) mutable {
+ saveItem.disable(!val);
+ });
+ }
+ if (naviframeItem_)
+ naviframeItem_.setPartContent("tabbar", toolbar_);
+}
+
+void ListView::handleNonToolbarActionsBeforeNaviframePush()
+{
+ if (auto action = listPresenter_->getAction("selectAll")) {
+ auto checkbox = Widget::make<Check>(naviframe_);
+ checkbox->setState(action->state_.value());
+ checkbox->setEvasSmartCallback("changed", [this, action, checkbox]() {
+ action->state_ = checkbox->getState();
+ });
+ action->state_.attach([this, checkbox](auto val) {
+ checkbox->setState(val);
+ });
+ action->enabled_.attach([this, checkbox](auto val) {
+ checkbox->disable(!val);
+ });
+ backItem_ = checkbox;
+ } else {
+ if (auto action = listPresenter_->getAction("previousView")) {
+ auto wrappedOnClick = [this, action]() {
+ action->onInvoke_(action);
+ };
+ backItem_ = Widget::make<Button>(naviframe_,
+ wrappedOnClick,
+ "IDS_ST_BUTTON_BACK",
+ Button::BACK_BUTTON_ARROW_STYLE);
+ action->enabled_.attach([this](auto val) {
+ backItem_->disable(!val);
+ });
+ } else {
+ backItem_ = Widget::make<Button>(naviframe_,
+ []() { Singleton<AppContext>::instance().pop(); },
+ "IDS_ST_BUTTON_BACK",
+ Button::BACK_BUTTON_ARROW_STYLE);
+ }
+ }
+}
+
+void ListView::handleNonToolbarActionsAfterNaviframePush()
+{
+ if (auto action = listPresenter_->getAction("titleRightAction")) {
+ titleRightButton_ = Widget::make<Button>(naviframe_, [this, action]() {
+ action->onInvoke_(action);
+ },
+ "<font_size=30>" + TranslatedString{action->title_.value()}.str() + "</font_size>",
+ "naviframe/title_right");
+ titleRightButton_->disable(!action->enabled_.value());
+ action->title_.attach([this](auto val) {
+ auto formatedText = "<font_size=30>" + TranslatedString{val}.str() + "</font_size>";
+ titleRightButton_->setText(formatedText);
+ });
+ action->enabled_.attach([this](auto val) {
+ titleRightButton_->disable(!val);
+ });
+ naviframe_->setPartContent("title_right_btn", titleRightButton_);
+ }
+}
+
+void ListView::addItemsToGenlist()
+{
+ auto wrappedOnItemSelection = [this](GenlistItem *item) {
+ auto search = itemsMapping_.find(item);
+ ASSERT(search != itemsMapping_.end(), "Item not mapped");
+ search->second->widgetState_ = item->getState();
+ if (search->second->onItemSelection_)
+ search->second->onItemSelection_(search->second);
+ };
+
+ auto wrappedOnWidgetSelection = [this](GenlistItem *item) {
+ auto search = itemsMapping_.find(item);
+ ASSERT(search != itemsMapping_.end(), "Item not mapped");
+ search->second->widgetState_ = item->getState();
+ if (search->second->onWidgetSelection_)
+ search->second->onWidgetSelection_(search->second);
+ };
+
+ auto wrappedOnWidgetChanged = [this](GenlistItem *item) {
+ auto search = itemsMapping_.find(item);
+ ASSERT(search != itemsMapping_.end(), "Item not mapped");
+ search->second->widgetState_ = item->getState();
+ search->second->value_ = item->getValue();
+ search->second->entryText_ = item->getEntryText();
+ if (search->second->onWidgetChanged_) {
+ search->second->onWidgetChanged_(search->second);
+ }
+ };
+
+ for (const auto &g : listPresenter_->getListGroups()) {
+ GenlistItem *groupItem = nullptr;
+ if (!g.name_.empty())
+ groupItem = genlist_->appendItem({"group_index", g.name_});
+
+ for (const auto &it : g.items_) {
+ auto type = translateType(it->widgetType_);
+ auto style = it->description_.value().empty() ? "type1" : "multiline";
+ if (it->widgetType_ == ListItem::WidgetType::slider || it->widgetType_ == ListItem::WidgetType::entry)
+ style = "full";
+ GenlistItem *genlistItem = nullptr;
+ if (it->widgetType_ == ListItem::WidgetType::icon)
+ genlistItem = genlist_->appendItem({style,
+ it->title_.value(),
+ it->description_.value(),
+ it->onItemSelection_ ? wrappedOnItemSelection : std::function<void(GenlistItem *)>{},
+ it->iconPath_,
+ type},
+ groupItem);
+ else
+ genlistItem = genlist_->appendItem({style,
+ it->title_.value(),
+ it->description_.value(),
+ it->onItemSelection_ ? wrappedOnItemSelection : std::function<void(GenlistItem *)>{},
+ it->onWidgetSelection_ ? wrappedOnWidgetSelection : std::function<void(GenlistItem *)>{},
+ wrappedOnWidgetChanged,
+ type},
+ groupItem);
+
+ if (!it->enabled_.value())
+ genlistItem->disable();
+
+ genlistItem->setValue(it->value_);
+ genlistItem->setRange(std::move(it->range_));
+ genlistItem->setStep(it->step_);
+ genlistItem->setEntryText(it->entryText_.value());
+
+ itemsMapping_.emplace(genlistItem, it.get());
+ it->title_.attach([this, gi = genlistItem](auto val) { gi->setText(val); });
+ it->description_.attach([this, gi = genlistItem](auto val) { gi->setDescription(val); });
+ genlistItem->setState(it->widgetState_.value());
+ it->widgetState_.attach([this, gi = genlistItem](auto val) { gi->setState(val); });
+ it->enabled_.attach([this, gi = genlistItem](auto val) {
+ if (val)
+ gi->enable();
+ else
+ gi->disable();
+ });
+ }
+ }
+}
+
+GenlistItem::WidgetType ListView::translateType(ListItem::WidgetType t)
+{
+ switch (t) {
+ case ListItem::WidgetType::none:
+ return GenlistItem::WidgetType::none;
+
+ case ListItem::WidgetType::check:
+ return GenlistItem::WidgetType::check;
+
+ case ListItem::WidgetType::toggle:
+ return GenlistItem::WidgetType::toggle;
+
+ case ListItem::WidgetType::radio:
+ return GenlistItem::WidgetType::radio;
+
+ case ListItem::WidgetType::icon:
+ return GenlistItem::WidgetType::icon;
+
+ case ListItem::WidgetType::slider:
+ return GenlistItem::WidgetType::slider;
+
+ case ListItem::WidgetType::entry:
+ return GenlistItem::WidgetType::entry;
+ }
+ ERROR("Invalid type");
+ return {};
+}
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef LIST_VIEW_HPP
+#define LIST_VIEW_HPP
+
+#include "Button.hpp"
+#include "ListPresenter.hpp"
+#include "NaviframeView.hpp"
+#include "Presenter.hpp"
+#include "Toolbar.hpp"
+
+#include <unordered_map>
+
+class ListView : public NaviframeView
+{
+ public:
+ ListView(const NavigationContext &context, Presenter *presenter);
+ ~ListView();
+
+ private:
+ void addItemsToGenlist();
+ bool isToolbarNeeded();
+ void handleToolbarActions(const std::shared_ptr<Toolbar *> &ptr);
+ void handleNonToolbarActionsBeforeNaviframePush();
+ void handleNonToolbarActionsAfterNaviframePush();
+ GenlistItem::WidgetType translateType(ListItem::WidgetType t);
+
+ ListPresenter *listPresenter_ = nullptr;
+ Genlist *genlist_ = nullptr;
+ std::unordered_map<GenlistItem *, ListItem *> itemsMapping_;
+ Widget *backItem_ = nullptr;
+ Button *titleRightButton_ = nullptr;
+ Toolbar *toolbar_ = nullptr;
+ Naviframe *naviframe_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "ModalView.hpp"
+
+#include "AppContext.hpp"
+#include "Button.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+
+#define EDJ_ACCESSORY_POPUP "edje/accessibility-smart-switch-accessory-popup.edj"
+#define GRP_ACCESSORY_POPUP "accessory_popup"
+#define PRT_ACCESSORY_POPUP_LABEL "accessory_popup_label"
+#define PRT_ACCESSORY_POPUP_ENTRY "accessory_popup_entry"
+
+ModalView::ModalView(const NavigationContext &context, ModalPresenter *presenter)
+ : View(context), presenter_(presenter)
+{
+ auto naviframe = context.getNaviframe();
+ popup_ = Widget::make<Popup>(naviframe, presenter_->getTitle());
+ popup_->setOrientation(ELM_POPUP_ORIENT_CENTER);
+
+ auto text = presenter_->getText();
+ if (auto action = presenter_->getAction("modalEntry")) {
+ layout_ = Widget::make<Layout>(popup_, EDJ_ACCESSORY_POPUP, GRP_ACCESSORY_POPUP);
+ entry_ = Widget::make<Entry>(layout_);
+ entry_->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ if (!text.empty())
+ entry_->setEntryText(text);
+ if (!action->title_.value().empty())
+ entry_->setPartText("guide", action->title_.value());
+ entry_->setEvasSmartCallback("changed,user", [=]() {
+ action->title_ = entry_->getEntryText();
+ if (action->onInvoke_)
+ action->onInvoke_(action);
+ });
+ layout_->setPartContent(PRT_ACCESSORY_POPUP_ENTRY, entry_);
+ popup_->setContent(layout_);
+ entry_->show();
+ entry_->setFocus(true);
+ } else {
+ if (!text.empty())
+ popup_->setText(text);
+ }
+
+ auto removeCb = [this]() {
+ auto cancelAction = presenter_->getAction("cancelAction");
+ if (cancelAction) {
+ auto c = cancelAction->onInvoke_;
+ if (c) {
+ c(cancelAction);
+ return;
+ }
+ }
+ Singleton<AppContext>::instance().popModal();
+ };
+ popup_->setEextEventCallback(EEXT_CALLBACK_BACK, removeCb);
+ popup_->setEvasSmartCallback("dismissed", removeCb);
+ popup_->setEvasSmartCallback("block,clicked", removeCb);
+
+ auto cancelAction = presenter_->getAction("cancelAction");
+ if (cancelAction) {
+ auto cancelBtn = Widget::make<Button>(popup_, removeCb, cancelAction->title_.value(), "bottom");
+ popup_->setPartContent("button1", cancelBtn);
+ cancelBtn->disable(!cancelAction->enabled_.value());
+ cancelAction->enabled_.attach([cancelBtn](auto value) {
+ cancelBtn->disable(!value);
+ });
+ }
+
+ auto doneAction = presenter_->getAction("doneAction");
+ if (doneAction) {
+ auto doneBtn = Widget::make<Button>(popup_, [doneAction]() {
+ auto c = doneAction->onInvoke_;
+ if (c)
+ c(doneAction);
+ else
+ Singleton<AppContext>::instance().popModal();
+ },
+ doneAction->title_.value(),
+ "bottom");
+ popup_->setPartContent(cancelAction ? "button2" : "button1", doneBtn);
+ doneBtn->disable(!doneAction->enabled_.value());
+ doneAction->enabled_.attach([doneBtn](auto value) {
+ doneBtn->disable(!value);
+ });
+ }
+}
+
+ModalView::~ModalView()
+{
+ if (popup_) {
+ auto parent = popup_->getParent();
+ parent->removeChild(popup_);
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef MODAL_VIEW_HPP
+#define MODAL_VIEW_HPP
+
+#include "Entry.hpp"
+#include "Layout.hpp"
+#include "ModalPresenter.hpp"
+#include "Popup.hpp"
+#include "View.hpp"
+
+class ModalView : public View
+{
+ public:
+ ModalView(const NavigationContext &context, ModalPresenter *presenter);
+ ~ModalView();
+
+ protected:
+ Popup *popup_ = nullptr;
+ Layout *layout_ = nullptr;
+ Entry *entry_ = nullptr;
+ ModalPresenter *presenter_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "NaviframeView.hpp"
+
+#include "NavigationContext.hpp"
+
+NaviframeView::NaviframeView(const NavigationContext &context) : View(context)
+{}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NAVIFRAME_VIEW_HPP
+#define NAVIFRAME_VIEW_HPP
+
+#include "Naviframe.hpp"
+#include "View.hpp"
+
+class NaviframeView : public View
+{
+ public:
+ NaviframeView(const NavigationContext &context);
+ NaviframeItem naviframeItem_ = {};
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "NavigationContext.hpp"
+
+#include "AppContext.hpp"
+#include "Conformant.hpp"
+#include "LabelPresenter.hpp"
+#include "LabelView.hpp"
+#include "ListPresenter.hpp"
+#include "ListView.hpp"
+#include "Singleton.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+#include "SpinnerView.hpp"
+#include "SpinnerViewWithToggle.hpp"
+
+NavigationContext::NavigationContext()
+{
+ window_ = std::make_unique<Window>(PACKAGE_NAME);
+ window_->addAvailableRotations({0, 90, 180, 270});
+
+ auto conformant = Widget::make<Conformant>(window_.get());
+ conformant->setWeightHint(EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ window_->setConformant(true);
+ window_->addResizeObject(conformant);
+
+ naviframe_ = Widget::make<Naviframe>(conformant, []() {
+ Singleton<AppContext>::instance().pop();
+ });
+ conformant->setContent(naviframe_);
+
+ conformant->emitSignal("elm,state,virtualkeypad,enable");
+ conformant->emitSignal("elm,state,clipboard,enable");
+
+ conformant->show();
+
+ window_->show();
+
+ Singleton<AppContext>::instance().Observable<Presenter *, size_t>::attach([this](auto presenter, auto count) {
+ if (presenter) {
+ this->emplaceView(presenter);
+ } else {
+ NaviframeItem naviframeItem;
+ for (auto i = 0u; i < count; ++i) {
+ this->popView();
+ naviframeItem = viewsStack_.back()->naviframeItem_;
+ }
+ this->naviframe_->popBack(naviframeItem);
+ }
+ });
+
+ Singleton<AppContext>::instance().Observable<ModalPresenter *>::attach([this](auto presenter) {
+ if (presenter)
+ this->emplaceModalView(presenter);
+ else
+ this->popModalView();
+ });
+}
+
+Window *NavigationContext::getWindow()
+{
+ return window_.get();
+}
+
+Naviframe *NavigationContext::getNaviframe() const
+{
+ return naviframe_;
+}
+
+void NavigationContext::emplaceView(Presenter *presenter)
+{
+ /*
+ * In order to add new Presenter class, one should cast received pointer to derived type
+ * and push proper View on viewStack_
+ */
+
+ if (auto lp = dynamic_cast<ListPresenter *>(presenter)) {
+ viewsStack_.push_back(std::make_unique<ListView>(*this, lp));
+ return;
+ }
+
+ if (auto sp = dynamic_cast<SpinnerPresenterWithToggle *>(presenter)) {
+ viewsStack_.push_back(std::make_unique<SpinnerViewWithToggle>(*this, sp));
+ return;
+ }
+
+ if (auto sp = dynamic_cast<SpinnerPresenter *>(presenter)) {
+ viewsStack_.push_back(std::make_unique<SpinnerView>(*this, sp));
+ return;
+ }
+
+ if (auto lp = dynamic_cast<LabelPresenter *>(presenter)) {
+ viewsStack_.push_back(std::make_unique<LabelView>(*this, lp));
+ return;
+ }
+
+ ASSERT(0, "Presenter not supported");
+}
+
+void NavigationContext::popView()
+{
+ viewsStack_.pop_back();
+}
+
+void NavigationContext::emplaceModalView(ModalPresenter *presenter)
+{
+ modalViewsStack_.push_back(std::make_unique<ModalView>(*this, presenter));
+}
+
+void NavigationContext::popModalView()
+{
+ modalViewsStack_.pop_back();
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef NAVIGATION_CONTEXT_HPP
+#define NAVIGATION_CONTEXT_HPP
+
+#include "ModalView.hpp"
+#include "Naviframe.hpp"
+#include "NaviframeView.hpp"
+#include "Presenter.hpp"
+#include "Window.hpp"
+
+#include <memory>
+
+class View;
+class NavigationContext
+{
+ public:
+ NavigationContext();
+
+ Window *getWindow();
+ Naviframe *getNaviframe() const;
+
+ private:
+ void emplaceView(Presenter *presenter);
+ void popView();
+ void emplaceModalView(ModalPresenter *presenter);
+ void popModalView();
+
+ std::unique_ptr<Window> window_;
+ Naviframe *naviframe_;
+ std::vector<std::unique_ptr<NaviframeView>> viewsStack_;
+ std::vector<std::unique_ptr<ModalView>> modalViewsStack_;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SpinnerView.hpp"
+
+#include "AppContext.hpp"
+#include "Box.hpp"
+#include "Label.hpp"
+#include "Layout.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+
+SpinnerView::SpinnerView(const NavigationContext &context, Presenter *presenter)
+ : NaviframeView(context), spinnerPresenter_(dynamic_cast<SpinnerPresenter *>(presenter))
+{
+ ASSERT(spinnerPresenter_, "SpinnerPresenter required");
+
+ auto naviframe = context.getNaviframe();
+
+ auto layout = Widget::make<Layout>(naviframe, "edje/spinner-layout.edj", "spinner-layout");
+
+ spinner_ = Widget::make<Spinner>(layout);
+ spinner_->setRange(spinnerPresenter_->getRange());
+ spinner_->setStep(spinnerPresenter_->getStep());
+ spinner_->setEditable(spinnerPresenter_->isEditable());
+ spinner_->setLabelFormat(spinnerPresenter_->getFormat());
+ spinner_->setValue(spinnerPresenter_->value_.value());
+ spinner_->setEvasSmartCallback("changed", [this]() {
+ spinnerPresenter_->value_ = spinner_->getValue();
+ });
+ layout->setPartContent("spinner-widget", spinner_);
+ layout->setPartText("accepted-range", spinnerPresenter_->getRangeDescription());
+ layout->setPartText("description", spinnerPresenter_->getLabel());
+
+ backItem_ = Widget::make<Button>(context.getNaviframe(),
+ []() { Singleton<AppContext>::instance().pop(); },
+ "IDS_ST_BUTTON_BACK",
+ Button::BACK_BUTTON_ARROW_STYLE);
+
+ naviframeItem_ = naviframe->pushBack(spinnerPresenter_->getTitle(), layout, {}, backItem_);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SPINNER_VIEW_HPP
+#define SPINNER_VIEW_HPP
+
+#include "Button.hpp"
+#include "NaviframeView.hpp"
+#include "Spinner.hpp"
+#include "SpinnerPresenter.hpp"
+
+class SpinnerView : public NaviframeView
+{
+ public:
+ SpinnerView(const NavigationContext &context, Presenter *presenter);
+
+ protected:
+ Button *titleRightButton_ = nullptr;
+ SpinnerPresenter *spinnerPresenter_ = nullptr;
+ Spinner *spinner_ = nullptr;
+ Widget *backItem_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "SpinnerViewWithToggle.hpp"
+
+#include "AppContext.hpp"
+#include "Layout.hpp"
+#include "NavigationContext.hpp"
+#include "Singleton.hpp"
+
+SpinnerViewWithToggle::SpinnerViewWithToggle(const NavigationContext &context, Presenter *presenter)
+ : NaviframeView(context), spinnerPresenter_(dynamic_cast<SpinnerPresenterWithToggle *>(presenter))
+{
+ ASSERT(spinnerPresenter_, "SpinnerPresenterWithToggle required");
+
+ auto naviframe = context.getNaviframe();
+
+ layout_ = Widget::make<Layout>(naviframe, "edje/spinner-layout-toggle.edj", "spinner-layout-toggle");
+
+ layout_->setPartText("toggle-widget-state", spinnerPresenter_->state_.value() ? "On" : "Off");
+
+ check_ = Widget::make<Check>(layout_, false, "on&off", [this]() {
+ layout_->setPartText("toggle-widget-state", check_->getState() ? "On" : "Off");
+ spinnerPresenter_->state_ = check_->getState();
+ });
+ check_->setState(spinnerPresenter_->state_.value());
+ layout_->setPartContent("toggle-widget", check_);
+
+ spinner_ = Widget::make<Spinner>(layout_);
+ spinner_->setRange(spinnerPresenter_->getRange());
+ spinner_->setStep(spinnerPresenter_->getStep());
+ spinner_->setEditable(spinnerPresenter_->isEditable());
+ spinner_->setLabelFormat(spinnerPresenter_->getFormat());
+ spinner_->setValue(spinnerPresenter_->value_.value());
+ spinner_->setEvasSmartCallback("changed", [this]() {
+ spinnerPresenter_->value_ = spinner_->getValue();
+ });
+ layout_->setPartContent("spinner-widget", spinner_);
+ layout_->setPartText("accepted-range", spinnerPresenter_->getRangeDescription());
+ layout_->setPartText("description", spinnerPresenter_->getLabel());
+
+ backItem_ = Widget::make<Button>(context.getNaviframe(),
+ []() { Singleton<AppContext>::instance().pop(); },
+ "IDS_ST_BUTTON_BACK",
+ Button::BACK_BUTTON_ARROW_STYLE);
+
+ naviframe->pushBack(spinnerPresenter_->getTitle(), layout_, {}, backItem_);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef SPINNER_VIEW_WITH_TOGGLE_HPP_
+#define SPINNER_VIEW_WITH_TOGGLE_HPP_
+
+#include "Button.hpp"
+#include "Check.hpp"
+#include "Layout.hpp"
+#include "NaviframeView.hpp"
+#include "Spinner.hpp"
+#include "SpinnerPresenterWithToggle.hpp"
+
+class SpinnerViewWithToggle : public NaviframeView
+{
+ public:
+ SpinnerViewWithToggle(const NavigationContext &context, Presenter *presenter);
+
+ protected:
+ Button *titleRightButton_ = nullptr;
+ SpinnerPresenterWithToggle *spinnerPresenter_ = nullptr;
+ Spinner *spinner_ = nullptr;
+ Widget *backItem_ = nullptr;
+ Check *check_ = nullptr;
+ Layout *layout_ = nullptr;
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "View.hpp"
+
+#include "NavigationContext.hpp"
+
+View::View(const NavigationContext &context)
+{
+}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2019 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef VIEW_HPP
+#define VIEW_HPP
+
+#include "Presenter.hpp"
+
+class NavigationContext;
+class View
+{
+ public:
+ View(const NavigationContext &context);
+ virtual ~View() = default;
+
+ protected:
+};
+
+#endif
\ No newline at end of file
--- /dev/null
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/utils ${CMAKE_SOURCE_DIR}/src/presenter ${CMAKE_SOURCE_DIR}/src/service ${CMAKE_SOURCE_DIR}/src/ui ${CMAKE_SOURCE_DIR}/src/model)
+
+INSTALL(PROGRAMS VConf_init.sh DESTINATION ${CMAKE_TESTS_INSTALL_PREFIX}/scripts/)
+INSTALL(FILES org.tizen.accessibility-setting-tests.xml DESTINATION ${TZ_SYS_RO_PACKAGES})
+
+ADD_LIBRARY(accessibility-setting-static STATIC $<TARGET_OBJECTS:accessibility-setting-obj>)
+TARGET_LINK_LIBRARIES(accessibility-setting-static ${pkgs_LDFLAGS})
+
+ADD_SUBDIRECTORY(no-ui-scenarios)
--- /dev/null
+#!/bin/bash
+
+VCONFTOOL="vconftool set -f -t"
+
+$VCONFTOOL int VconfImplTest/int/20 20
+$VCONFTOOL string VconfImplTest/string/foo "foo"
+$VCONFTOOL bool VconfImplTest/bool/true 1
+$VCONFTOOL double VconfImplTest/double/3.14 3.14
\ No newline at end of file
--- /dev/null
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <policy user="root">
+ <allow own="itest.itest"/>
+ <allow send_interface="itest.itest"/>
+ <allow send_interface="itest.itest2"/>
+ <allow send_interface="sitest.sitest"/>
+ <allow send_interface="org.freedesktop.DBus.Properties"/>
+ </policy>
+ <policy context="default">
+ <deny own="itest.itest"/>
+ <deny send_destination="itest.itest"/>
+ </policy>
+</busconfig>
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Action.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(Action, testAction)
+{
+ std::string id = "Action id";
+ std::string title = "Action title";
+ bool invoke_called = false;
+ auto onInvoke = [&invoke_called](Action *action) {
+ invoke_called = true;
+ };
+
+ Action action(id,title,onInvoke,true,false);
+
+ EXPECT_EQ(action.actionId_.compare(id), 0);
+ EXPECT_EQ(action.title_.value().compare(title), 0);
+ EXPECT_TRUE(action.enabled_.value());
+ EXPECT_EQ(action.state_.value(), false);
+
+ action.state_ = true;
+
+ EXPECT_TRUE(invoke_called);
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+FILE(GLOB TESTS_SRCS *.cpp)
+
+FOREACH(FILE_NAME ${TESTS_SRCS})
+ GET_FILENAME_COMPONENT(TEST_NAME ${FILE_NAME} NAME_WE)
+
+ ADD_EXECUTABLE(${TEST_NAME} ${FILE_NAME})
+ SET_TARGET_PROPERTIES(${TEST_NAME} PROPERTIES INSTALL_RPATH "${CMAKE_TESTS_INSTALL_PREFIX}/lib/")
+ TARGET_LINK_LIBRARIES(${TEST_NAME} accessibility-setting-static gtest)
+ INSTALL(TARGETS ${TEST_NAME} DESTINATION ${CMAKE_TESTS_INSTALL_PREFIX}/no-ui-scenarios/)
+ENDFOREACH(FILE_NAME)
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "EntryNameModalPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(EntryNameModalPresenter, testConstructor)
+{
+ auto enmp = std::make_unique<EntryNameModalPresenter>("testSwitchID");
+ EXPECT_STRCASEEQ("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH", enmp->getTitle().c_str());
+}
+
+TEST(EntryNameModalPresenter, testAction)
+{
+ auto enmp = std::make_unique<EntryNameModalPresenter>("testSwitchID");
+
+ auto modal_action = enmp->getAction("modalEntry");
+ ASSERT_NE(modal_action, nullptr);
+ EXPECT_EQ(modal_action->actionId_, std::string("modalEntry"));
+ EXPECT_EQ(modal_action->title_.value(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_ADD_SWITCH_NAME"));
+ EXPECT_TRUE(modal_action->enabled_.value());
+ EXPECT_FALSE(modal_action->state_.value());
+
+ auto cancel_action = enmp->getAction("cancelAction");
+
+ ASSERT_NE(cancel_action, nullptr);
+ EXPECT_EQ(cancel_action->actionId_, std::string("cancelAction"));
+ EXPECT_EQ(cancel_action->title_.value(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_CANCEL"));
+ EXPECT_TRUE(cancel_action->enabled_.value());
+ EXPECT_FALSE(cancel_action->state_.value());
+
+ auto save_action = enmp->getAction("doneAction");
+
+ ASSERT_NE(save_action, nullptr);
+ EXPECT_EQ(save_action->actionId_, std::string("doneAction"));
+ EXPECT_EQ(save_action->title_.value(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SAVE"));
+ EXPECT_FALSE(save_action->enabled_.value());
+ EXPECT_FALSE(save_action->state_.value());
+ if (modal_action->onInvoke_)
+ modal_action->onInvoke_(modal_action);
+ EXPECT_TRUE(save_action->enabled_.value());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Geometry.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(Point, testPoint)
+{
+ Point p1{1, 2};
+ Point p2{1, 2};
+ EXPECT_TRUE(p1 == p2);
+
+ p2.x = 2;
+ EXPECT_FALSE(p1 == p2);
+ EXPECT_TRUE(p1 != p2);
+}
+
+TEST(Rectangle, testRectangleToString)
+{
+ Rectangle r1{{20, 50}, {100, 70}};
+ EXPECT_STRCASEEQ("x= 20 y= 50 w= 100 h= 70", r1.toString().c_str());
+}
+
+TEST(Rectangle, testRectangleContains)
+{
+ Rectangle r1{{20, 50}, {100, 70}};
+ Point p1{50, 100};
+
+ EXPECT_TRUE(r1.contains(p1));
+ p1.y = 10;
+ EXPECT_FALSE(r1.contains(p1));
+}
+
+TEST(Rectangle, testRectangleGetCenter)
+{
+ Rectangle r1{{20, 50}, {10, 10}};
+ Point p1{25, 55};
+ EXPECT_TRUE(p1 == r1.getCenterPoint());
+
+ Rectangle r2{{20, 50}, {1, 1}};
+ Point p2{20, 50};
+ EXPECT_TRUE(p2 == r2.getCenterPoint());
+}
+
+TEST(Rectangle, testRectangleSum)
+{
+ Rectangle r1{{20, 50}, {20, 20}};
+ Rectangle r2{{25, 55}, {5, 5}};
+ EXPECT_EQ(Rectangle::sum(r1, r2), r1);
+
+ Rectangle r4{{25, 55}, {20, 5}};
+ EXPECT_EQ((Rectangle{{20, 50}, {25, 20}}), Rectangle::sum(r1, r4));
+}
+
+TEST(Rectangle, testRectangleIntersect)
+{
+ Rectangle r1{{20, 50}, {20, 20}};
+ Rectangle r2{{25, 55}, {5, 5}};
+ EXPECT_EQ(r2, Rectangle::intersect(r1, r2));
+ EXPECT_EQ((Rectangle{{30, 60}, {10, 10}}), Rectangle::intersect(r1, (Rectangle{{30, 60}, {20, 20}})));
+ EXPECT_FALSE(Rectangle::intersect((Rectangle{{30, 60}, {10, 10}}), r2).hasPositiveSize());
+ EXPECT_FALSE(Rectangle::intersect((Rectangle{{31, 61}, {10, 10}}), r2).hasPositiveSize());
+ EXPECT_TRUE(r2.hasPositiveSize());
+}
+
+TEST(Size, testSize)
+{
+ Size s1{2, 5};
+ Size s2{5, 2};
+
+ s2.width = 2;
+ s2.height = 5;
+ EXPECT_EQ(s1, s2);
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ListGroup.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(ListGroup, testListGroup)
+{
+ auto lg = new ListGroup("Very Simple Group");
+ EXPECT_STRCASEEQ("Very Simple Group", lg->name_.c_str());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "ListItem.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(ListItem, testListItem)
+{
+
+ auto li = new ListItem("TestTitle", "testTitle very long description");
+ EXPECT_STRCASEEQ("TestTitle", li->title_.value_.c_str());
+ EXPECT_STRCASEEQ("testTitle very long description", li->description_.value_.c_str());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "NoSwitchesModalPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(NoSwitchesModalPresenter, testConstructor)
+{
+ auto nsmp = new NoSwitchesModalPresenter();
+ EXPECT_STRCASEEQ("IDS_ACCS_UNIVERSAL_SWITCH_NO_SWITCHES_TEXT", nsmp->getText().c_str());
+}
+
+TEST(NoSwitchesModalPresenter, testAction)
+{
+ auto nsmp = new NoSwitchesModalPresenter();
+
+ auto cancel_action = nsmp->getAction("cancelAction");
+
+ ASSERT_NE(cancel_action, nullptr);
+ EXPECT_EQ(cancel_action->actionId_, std::string("cancelAction"));
+ EXPECT_EQ(cancel_action->title_.value(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_CANCEL"));
+ EXPECT_TRUE(cancel_action->enabled_.value());
+ EXPECT_FALSE(cancel_action->state_.value());
+
+ auto done_action = nsmp->getAction("doneAction");
+
+ ASSERT_NE(done_action, nullptr);
+ EXPECT_EQ(done_action->actionId_, std::string("doneAction"));
+ EXPECT_EQ(done_action->title_.value(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_POPUP_ADD"));
+ EXPECT_TRUE(done_action->enabled_.value());
+ EXPECT_FALSE(done_action->state_.value());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/NumberOfAutoScanLoopsPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(NumberOfAutoScanLoopsPresenter, testConstructor)
+{
+ NumberOfAutoScanLoopsPresenter presenter;
+
+ EXPECT_EQ(presenter.getTitle().str(), TranslatedString("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_NUM_OF_SCANS").str());
+}
+
+TEST(NumberOfAutoScanLoopsPresenter, testGetFormat)
+{
+ NumberOfAutoScanLoopsPresenter presenter;
+
+ EXPECT_EQ(presenter.getFormat(), std::string("%d times"));
+}
+
+TEST(NumberOfAutoScanLoopsPresenter, testGetLabel)
+{
+ NumberOfAutoScanLoopsPresenter presenter;
+
+ EXPECT_EQ(presenter.getLabel(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_NUM_OF_SCANS"));
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/PauseOnFirstPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(PauseOnFirstPresenter, testConstructor)
+{
+ PauseOnFirstPresenter presenter;
+
+ EXPECT_EQ(presenter.getTitle().str(), TranslatedString("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST").str());
+}
+
+TEST(PauseOnFirstPresenter, testGetFormat)
+{
+ PauseOnFirstPresenter presenter;
+
+ EXPECT_EQ(presenter.getFormat(), std::string("%1.1f seconds"));
+}
+
+TEST(PauseOnFirstPresenter, testGetLabel)
+{
+ PauseOnFirstPresenter presenter;
+
+ EXPECT_EQ(presenter.getLabel(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_PAUSE_ON_FIRST"));
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/PointScanSpeedPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(PointScanSpeedPresenter, testConstructor)
+{
+ PointScanSpeedPresenter presenter;
+ EXPECT_EQ(presenter.getTitle().str(), TranslatedString("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_SCANNING_PT_SPEED").str());
+}
+
+TEST(PointScanSpeedPresenter, testGetFormat)
+{
+ PointScanSpeedPresenter presenter;
+
+ EXPECT_EQ(presenter.getFormat(), std::string("%d"));
+}
+
+TEST(PointScanSpeedPresenter, testGetLabel)
+{
+ PointScanSpeedPresenter presenter;
+
+ EXPECT_EQ(presenter.getLabel(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SET_VALUE_DESC_SCAN_SPEED"));
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/RemoveSwitchesModalPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+static bool isUniversalSwitchActive_state = false;
+
+//RemoveSwitchesModel Mock implementation
+RemoveSwitchesModel::RemoveSwitchesModel()
+{
+ isUniversalSwitchActive_ = isUniversalSwitchActive_state;
+}
+
+void RemoveSwitchesModel::removeSwitches(std::vector<std::string> &switchesIds)
+{}
+
+TEST(RemoveSwitchesModalPresenter, testConstructor)
+{
+ std::vector<SwitchConfigurationItem> switches;
+ std::vector<std::string> switchesToRemove;
+ isUniversalSwitchActive_state = true;
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getTitle().str(), TranslatedString("IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES").str());
+ EXPECT_EQ(presenter.getText(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC"));
+ }
+
+ switches.push_back(SwitchConfigurationItem());
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getText(), std::string("0 ") + TranslatedString{"IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"}.str());
+ }
+
+ switchesToRemove.push_back("Switch1");
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getText(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_DELETE_ALL_SWITCHES_DESC"));
+ }
+
+ switchesToRemove.push_back("Switch2");
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getText(), std::string("2 ") + TranslatedString{"IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"}.str());
+ }
+
+ switches.clear();
+ switchesToRemove.clear();
+ isUniversalSwitchActive_state = false;
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getText(), std::string("0 ") + TranslatedString{"IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"}.str());
+ }
+
+ switches.push_back(SwitchConfigurationItem());
+ switchesToRemove.push_back("Switch1");
+
+ {
+ RemoveSwitchesModalPresenter presenter(switches, switchesToRemove);
+ EXPECT_EQ(presenter.getText(), std::string("1 ") + TranslatedString{"IDS_ACCS_UNIVERSAL_SWITCH_DELETE_SWITCHES_DESC"}.str());
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/SingleInteractionIntervalPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(SingleInteractionIntervalPresenter, testConstructor)
+{
+ SingleInteractionIntervalPresenter presenter;
+
+ EXPECT_EQ(presenter.getTitle().str(), TranslatedString("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT").str());
+}
+
+TEST(SingleInteractionIntervalPresenter, testGetFormat)
+{
+ SingleInteractionIntervalPresenter presenter;
+
+ EXPECT_EQ(presenter.getFormat(), std::string("%1.1f seconds"));
+}
+
+TEST(SingleInteractionIntervalPresenter, testGetLabel)
+{
+ SingleInteractionIntervalPresenter presenter;
+
+ EXPECT_EQ(presenter.getLabel(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_SGL_IACTION_INT"));
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "Singleton.hpp"
+
+#include <gtest/gtest.h>
+
+struct IntHolder
+{
+ int var = 10;
+};
+
+TEST(Singleton, testSingleton)
+{
+ EXPECT_EQ(10, Singleton<IntHolder>::instance().var);
+ Singleton<IntHolder>::instance().var = 20;
+ EXPECT_EQ(20, Singleton<IntHolder>::instance().var);
+ EXPECT_EQ(&Singleton<IntHolder>::instance(), &Singleton<IntHolder>::instance());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "presenter/TapDurationPresenter.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(TapDurationPresenter, testConstructor)
+{
+ TapDurationPresenter presenter;
+
+ EXPECT_EQ(presenter.getTitle().str(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION"));
+}
+
+TEST(TapDurationPresenter, testGetFormat)
+{
+ TapDurationPresenter presenter;
+
+ EXPECT_EQ(presenter.getFormat(), std::string("%1.1f seconds"));
+}
+
+TEST(TapDurationPresenter, testGetLabel)
+{
+ TapDurationPresenter presenter;
+
+ EXPECT_EQ(presenter.getLabel(), std::string("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_GROUP_ADD_SETTINGS_TAP_DURATION"));
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "TranslatedString.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(TranslatedString, translationExistingKey)
+{
+ EXPECT_TRUE(setlocale(LC_ALL, "C"));
+ EXPECT_EQ(TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"}.str(), std::string{"IDS_MSG_ACBUTTON_DONE_ABB"});
+ EXPECT_TRUE(setlocale(LC_ALL, "en_US.UTF-8"));
+ EXPECT_EQ(TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"}.str(), std::string{"DONE"});
+}
+
+TEST(TranslatedString, translationNotExistingKey)
+{
+ EXPECT_TRUE(setlocale(LC_ALL, "C"));
+ EXPECT_EQ(TranslatedString{"IDS_ACCESSIBILITY_TEST_KEY"}.str(), std::string{"IDS_ACCESSIBILITY_TEST_KEY"});
+ EXPECT_TRUE(setlocale(LC_ALL, "en_US.UTF-8"));
+ EXPECT_EQ(TranslatedString{"IDS_ACCESSIBILITY_TEST_KEY"}.str(), std::string{"IDS_ACCESSIBILITY_TEST_KEY"});
+}
+
+TEST(TranslatedString, createFormatedStringDouble)
+{
+ EXPECT_TRUE(setlocale(LC_ALL, "C"));
+ EXPECT_EQ(TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", 0.11).str(), std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS"});
+ EXPECT_TRUE(setlocale(LC_ALL, "en_GB.UTF-8"));
+ EXPECT_EQ(TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SECONDS", 0.11).str(), std::string{"0.1 seconds"});
+}
+
+TEST(TranslatedString, createFormatedStringInt)
+{
+ EXPECT_TRUE(setlocale(LC_ALL, "C"));
+ EXPECT_EQ(TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", 5).str(), std::string{"IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES"});
+ EXPECT_TRUE(setlocale(LC_ALL, "en_GB.UTF-8"));
+ EXPECT_EQ(TranslatedString::create("IDS_ACCS_UNIVERSAL_SWITCH_SETTINGS_SWITCHES", 5).str(), std::string{"5 Switches"});
+}
+
+TEST(TranslatedString, addTranslatedString)
+{
+ EXPECT_TRUE(setlocale(LC_ALL, "C"));
+ auto sum_1 = TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"} + TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"};
+ sum_1 += TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"};
+ EXPECT_EQ(sum_1.str(), std::string{"IDS_MSG_ACBUTTON_DONE_ABBIDS_MSG_ACBUTTON_DONE_ABBIDS_MSG_ACBUTTON_DONE_ABB"});
+ EXPECT_TRUE(setlocale(LC_ALL, "en_GB.UTF-8"));
+ auto sum_2 = TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"} + TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"};
+ sum_2 += TranslatedString{"IDS_MSG_ACBUTTON_DONE_ABB"};
+ EXPECT_EQ(sum_2.str(), std::string{"DONEDONEDONE"});
+}
+
+int main(int argc, char *argv[])
+{
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "utils.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(utils, testRescale)
+{
+ int scaled_int = utils::rescale<int, int>(2, utils::Range<int>{-1, 3}, utils::Range<int>{0, 11});
+ ASSERT_EQ(8, scaled_int);
+
+ double scaled_double = utils::rescale<int>(1, utils::Range<int>{0, 3}, {0, 100.0});
+ ASSERT_DOUBLE_EQ(100.0 / 3.0, scaled_double);
+
+ ASSERT_NO_THROW(utils::rescale<int>(52, utils::Range<int>{1, 1}));
+}
+
+TEST(utils, testDoubleToPercent)
+{
+ auto str = utils::doubleToPercent(1.6180339);
+ ASSERT_STREQ("161%", str.c_str());
+
+ str = utils::doubleToPercent(-.6);
+ ASSERT_STREQ("-60%", str.c_str());
+}
+
+TEST(utils, testDoubleToString)
+{
+ auto str = utils::doubleToString(1.6180339, 0);
+ ASSERT_STREQ("2", str.c_str());
+
+ str = utils::doubleToString(-1.6180339, 0);
+ ASSERT_STREQ("-2", str.c_str());
+
+ str = utils::doubleToString(1.6180339, 5);
+ ASSERT_STREQ("1.61803", str.c_str());
+
+ str = utils::doubleToString(-1.6180339, 5);
+ ASSERT_STREQ("-1.61803", str.c_str());
+}
+
+TEST(utils, testStringSplitByDelimiter)
+{
+ const std::string str = "Some;sentence ; t\no;test!@#$%^&*()~;";
+ const char *words[] = {"Some", "sentence ", " t\no", "test!@#$%^&*()~"};
+
+ auto vec = utils::stringSplitByDelimiter(str, ';');
+ ASSERT_EQ(4, vec.size());
+ for (size_t i = 0; i < 4; i++) {
+ ASSERT_STREQ(words[i], vec[i].c_str());
+ }
+
+ vec = utils::stringSplitByDelimiter(str, '.');
+ ASSERT_EQ(1, vec.size());
+ ASSERT_STREQ(str.c_str(), vec[0].c_str());
+
+ vec = utils::stringSplitByDelimiter("", ';');
+ ASSERT_EQ(0, vec.size());
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "VConf.hpp"
+
+#include <glib.h>
+#include <gtest/gtest.h>
+#include <iostream>
+
+void restoreDefault()
+{
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 20);
+ Singleton<VConfInterface>::instance().set("VconfImplTest/string/foo", std::string("foo"));
+ Singleton<VConfInterface>::instance().set("VconfImplTest/bool/true", true);
+ Singleton<VConfInterface>::instance().set("VconfImplTest/double/3.14", 3.14);
+}
+
+TEST(VconfImplTest, get)
+{
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("not_defined", 10), 10);
+
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/int/20", 10), 20);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/int/20", true), true);
+
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/string/foo", 10), 10);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/string/foo", std::string("bar")), std::string("foo"));
+
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/bool/true", false), true);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/bool/true", 10.1), 10.1);
+
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/double/3.14", 1.1), 3.14);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/double/3.14", 1), 1);
+}
+
+TEST(VconfImplTest, set)
+{
+ Singleton<VConfInterface>::instance().set("not_defined", 20);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("not_defined", 8), 8);
+
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 13);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/int/20", 7), 13);
+ //change type
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 1.1);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/int/20", 12.6), 1.1);
+
+ Singleton<VConfInterface>::instance().set("VconfImplTest/string/foo", std::string("bar2"));
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/string/foo", std::string("bar1")), std::string("bar2"));
+ //change type
+ Singleton<VConfInterface>::instance().set("VconfImplTest/string/foo", 12);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/string/foo", 13), 12);
+
+ Singleton<VConfInterface>::instance().set("VconfImplTest/bool/true", false);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/bool/true", true), false);
+ Singleton<VConfInterface>::instance().set("VconfImplTest/bool/true", true);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/bool/true", true), true);
+ //change type
+ Singleton<VConfInterface>::instance().set("VconfImplTest/bool/true", 12.1);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/bool/true", 8.1), 12.1);
+
+ Singleton<VConfInterface>::instance().set("VconfImplTest/double/3.14", 12.1);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/double/3.14", 1.1), 12.1);
+ //change type
+ Singleton<VConfInterface>::instance().set("VconfImplTest/double/3.14", 8);
+ EXPECT_EQ(Singleton<VConfInterface>::instance().get("VconfImplTest/double/3.14", 7), 8);
+
+ restoreDefault();
+}
+
+namespace eventLoop
+{
+ std::function<void()> mainFunction;
+ GMainLoop *event_loop;
+
+ void terminate();
+
+ gboolean mainLoopTerminateTimer(gpointer data)
+ {
+ terminate();
+ return G_SOURCE_REMOVE;
+ }
+ void terminate()
+ {
+ g_main_loop_quit(event_loop);
+ }
+ void terminate(int ms)
+ {
+ g_timeout_add(ms, mainLoopTerminateTimer, NULL);
+ }
+
+ gboolean mainLoopIdle(gpointer data)
+ {
+ mainFunction();
+ g_timeout_add_seconds(1, mainLoopTerminateTimer, NULL);
+ return G_SOURCE_REMOVE;
+ }
+
+ void run(std::function<void()> f)
+ {
+ event_loop = g_main_loop_new(NULL, FALSE);
+ mainFunction = f;
+ g_idle_add(mainLoopIdle, NULL);
+ g_main_loop_run(event_loop);
+ g_main_loop_unref(event_loop);
+ }
+} // namespace eventLoop
+
+int testCallbackValue = 0;
+void testCallback(int x)
+{
+ testCallbackValue = x;
+ eventLoop::terminate();
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_int)
+{
+ DEBUG("registerKeyChangedCb_int");
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", testCallback);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 132);
+ });
+ EXPECT_EQ(testCallbackValue, 132);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_int_lambda)
+{
+ int v = 0;
+ int count = 0;
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v = x;
+ count++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 133);
+ });
+ EXPECT_EQ(v, 133);
+ EXPECT_EQ(count, 1);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_bool_lambda)
+{
+ bool v = false;
+ int count = 0;
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<bool>("VconfImplTest/int/20", [&](bool x) {
+ v = x;
+ count++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", true);
+ });
+ EXPECT_EQ(v, true);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", false);
+ });
+ EXPECT_EQ(v, false);
+ EXPECT_EQ(count, 2);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_double_lambda)
+{
+ double v = 0.0;
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<double>("VconfImplTest/int/20", [&](double x) {
+ v = x;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 13.6);
+ });
+ EXPECT_EQ(v, 13.6);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_string_lambda)
+{
+ std::string v;
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<std::string>("VconfImplTest/int/20", [&](std::string x) {
+ v = x;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", std::string("foo2"));
+ });
+ EXPECT_EQ(v, "foo2");
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_int_unregister)
+{
+ int v = 0;
+ int count = 0;
+ {
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v = x;
+ count++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 1);
+ });
+ EXPECT_EQ(v, 1);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 2);
+ });
+ EXPECT_EQ(v, 2);
+ }
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 3);
+ eventLoop::terminate(10);
+ });
+ EXPECT_EQ(v, 2);
+ EXPECT_EQ(count, 2);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_int_unregister_2x)
+{
+ int count = 0;
+ {
+ int v = 0;
+ {
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v = x;
+ count++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 11);
+ });
+ EXPECT_EQ(v, 11);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 12);
+ });
+ EXPECT_EQ(v, 12);
+ }
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 13);
+ eventLoop::terminate(10);
+ });
+ EXPECT_EQ(v, 12);
+ }
+
+ {
+ int v = 0;
+ {
+ auto h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v = x;
+ count++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 21);
+ });
+ EXPECT_EQ(v, 21);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 22);
+ });
+ EXPECT_EQ(v, 22);
+ }
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 23);
+ eventLoop::terminate(10);
+ });
+ EXPECT_EQ(v, 22);
+ }
+
+ EXPECT_EQ(count, 4);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_all)
+{
+ int i = 0;
+ bool b = false;
+ double v = 0.0;
+ std::string s("empty");
+ int count1 = 0, count2 = 0, count3 = 0, count4 = 0;
+
+ auto h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<bool>("VconfImplTest/int/20", [&](bool x) {
+ b = x;
+ count1++;
+ eventLoop::terminate();
+ });
+ auto h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ i = x;
+ count2++;
+ eventLoop::terminate();
+ });
+ auto h3 = Singleton<VConfInterface>::instance().registerKeyChangedCb<double>("VconfImplTest/int/20", [&](double x) {
+ v = x;
+ count3++;
+ eventLoop::terminate();
+ });
+ auto h4 = Singleton<VConfInterface>::instance().registerKeyChangedCb<std::string>("VconfImplTest/int/20", [&](std::string x) {
+ s = x;
+ count4++;
+ eventLoop::terminate();
+ });
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 10);
+ });
+ EXPECT_EQ(i, 10);
+ EXPECT_EQ(b, false);
+ EXPECT_EQ(v, 0.0);
+ EXPECT_EQ(s, "empty");
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 20.2);
+ });
+ EXPECT_EQ(i, 10);
+ EXPECT_EQ(b, false);
+ EXPECT_EQ(v, 20.2);
+ EXPECT_EQ(s, "empty");
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", true);
+ });
+ EXPECT_EQ(i, 10);
+ EXPECT_EQ(b, true);
+ EXPECT_EQ(v, 20.2);
+ EXPECT_EQ(s, "empty");
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", std::string("foo"));
+ });
+ EXPECT_EQ(i, 10);
+ EXPECT_EQ(b, true);
+ EXPECT_EQ(v, 20.2);
+ EXPECT_EQ(s, "foo");
+
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 1);
+ EXPECT_EQ(count3, 1);
+ EXPECT_EQ(count4, 1);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_unregisterInCallback)
+{
+ int v = 0;
+ int count = 0;
+ VConfInterface::CallbackHandle h;
+ h = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v = x;
+ count++;
+ h.reset();
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 13);
+ });
+ EXPECT_EQ(v, 13);
+ EXPECT_EQ(count, 1);
+ EXPECT_EQ(h, nullptr);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_unregisterSecondInCallback)
+{
+ int v1 = 1, v2 = 2, v3 = 3;
+ int count1 = 0, count2 = 0, count3 = 0;
+ VConfInterface::CallbackHandle h1, h2, h3;
+ h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v1 = x;
+ count1++;
+ eventLoop::terminate();
+ });
+ h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v2 = x;
+ count2++;
+ eventLoop::terminate();
+ });
+ h3 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v3 = x;
+ h2.reset();
+ count3++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 14);
+ });
+ EXPECT_EQ(v1, 14);
+ EXPECT_EQ(v2, 2);
+ EXPECT_EQ(v3, 14);
+ EXPECT_NE(h1, nullptr);
+ EXPECT_EQ(h2, nullptr);
+ EXPECT_NE(h3, nullptr);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 0);
+ EXPECT_EQ(count3, 1);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_registerInCallback)
+{
+ int v1 = 1, v2 = 2;
+ int count1 = 0, count2 = 0;
+
+ VConfInterface::CallbackHandle h1, h2;
+ h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v1 = x;
+ count1++;
+ eventLoop::terminate();
+ h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v2 = x;
+ count2++;
+ eventLoop::terminate();
+ });
+ });
+ EXPECT_EQ(h2, nullptr);
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 15);
+ });
+ EXPECT_EQ(v1, 15);
+ EXPECT_EQ(v2, 2);
+ EXPECT_NE(h2, nullptr);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 0);
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 16);
+ });
+
+ EXPECT_EQ(v1, 16);
+ EXPECT_EQ(v2, 16);
+ EXPECT_EQ(count1, 2);
+ EXPECT_EQ(count2, 1);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_unregisterAndRegisterInCallback)
+{
+ int v1 = 1, v2 = 2;
+ int count1 = 0, count2 = 0;
+ VConfInterface::CallbackHandle h1, h2;
+ h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v1 = x;
+ count1++;
+ h1.reset();
+ eventLoop::terminate();
+ h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v2 = x;
+ count2++;
+ eventLoop::terminate();
+ });
+ });
+ EXPECT_EQ(h2, nullptr);
+ eventLoop::run([&]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 115);
+ });
+ EXPECT_NE(h2, nullptr);
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 2);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 0);
+ eventLoop::run([&]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 116);
+ });
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 116);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 1);
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 117);
+ });
+
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 117);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 2);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_registerAndUnregisterInCallback)
+{
+ int v1 = 1, v2 = 2;
+ int count1 = 0, count2 = 0;
+ VConfInterface::CallbackHandle h1, h2;
+ h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v1 = x;
+ count1++;
+ h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v2 = x;
+ count2++;
+ eventLoop::terminate();
+ });
+ h1.reset();
+ eventLoop::terminate();
+ });
+ EXPECT_EQ(h2, nullptr);
+ eventLoop::run([&]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 115);
+ });
+ EXPECT_NE(h2, nullptr);
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 2);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 0);
+ eventLoop::run([&]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 116);
+ });
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 116);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 1);
+
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 117);
+ });
+
+ EXPECT_EQ(v1, 115);
+ EXPECT_EQ(v2, 117);
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 2);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_callbackOrder)
+{
+ int v = 1;
+ int count1 = 0, count2 = 0, count3 = 0;
+ VConfInterface::CallbackHandle h1, h2, h3;
+ h1 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v += 2;
+ v *= 3;
+ count1++;
+ eventLoop::terminate();
+ });
+ h2 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v += 5;
+ v *= 7;
+ count2++;
+ eventLoop::terminate();
+ });
+ h3 = Singleton<VConfInterface>::instance().registerKeyChangedCb<int>("VconfImplTest/int/20", [&](int x) {
+ v += 11;
+ v *= 13;
+ count3++;
+ eventLoop::terminate();
+ });
+ eventLoop::run([]() {
+ Singleton<VConfInterface>::instance().set("VconfImplTest/int/20", 14);
+ });
+ EXPECT_EQ(v, (((((1 + 11) * 13) + 5) * 7) + 2) * 3); //calbacks are called in reverse order
+ EXPECT_EQ(count1, 1);
+ EXPECT_EQ(count2, 1);
+ EXPECT_EQ(count3, 1);
+}
+
+TEST(VconfImplTest, registerKeyChangedCb_restoreDefault)
+{
+ restoreDefault();
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ ERROR("exception during tests execution");
+ return 1;
+ }
+}
--- /dev/null
+/*
+ * Copyright 2017 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WidgetCallback.hpp"
+
+#include <gtest/gtest.h>
+
+TEST(WidgetCallback, testDataConstructor)
+{
+ double data = 2.41234;
+ int name = 4;
+ WidgetCallback::Data<double,int> data_with_name(&data, name);
+
+ ASSERT_EQ(&data, data_with_name.self);
+ ASSERT_EQ(name, data_with_name.eventName);
+}
+
+int main(int argc, char *argv[])
+{
+ try {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+ } catch (...) {
+ return 1;
+ }
+}
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="3.0" package="org.tizen.accessibility-setting-tests" version="1.0.0">
+ <profile name="mobile" />
+ <ui-application appid="org.tizen.accessibility-setting-tests" exec="accessibility-setting-tests" type="capp" multiple="false" taskmanage="false" nodisplay="true">
+ <icon>accessibility-setting.png</icon>
+ <label>accessibility-setting-tests</label>
+ <app-control>
+ <operation name="http://tizen.org/appcontrol/operation/accessibility_setting_tests"/>
+ </app-control>
+ <background-category value="system"/>
+ </ui-application>
+ <privileges>
+ <privilege>http://tizen.org/privilege/window.priority.set</privilege>
+ <privilege>http://tizen.org/privilege/inputgenerator</privilege>
+ <privilege>http://tizen.org/privilege/display</privilege>
+ <privilege>http://tizen.org/privilege/externalstorage</privilege>
+ <privilege>http://tizen.org/privilege/mediastorage</privilege>
+ </privileges>
+
+</manifest>
--- /dev/null
+IndentWidth: 4
+ColumnLimit: 0
+Language: Cpp
+Standard: Cpp11
+
+TabWidth: 4
+UseTab: Always
+BreakBeforeBraces: Custom
+BraceWrapping:
+ SplitEmptyFunction: false
+ AfterClass: true
+ AfterStruct: true
+ AfterFunction: true
+ AfterNamespace: true
+ AfterEnum: true
+AccessModifierOffset: 0
+BreakConstructorInitializers: BeforeColon
+AlignAfterOpenBracket: DontAlign
+BinPackParameters: false
+BinPackArguments: false
+IncludeBlocks: Regroup
+PenaltyExcessCharacter: 1
+AlwaysBreakTemplateDeclarations: true
+Cpp11BracedListStyle: true
+BreakStringLiterals: false
+NamespaceIndentation: All
+AlignEscapedNewlines: Left
+AllowShortFunctionsOnASingleLine: false
+AllowAllParametersOfDeclarationOnNextLine: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
--- /dev/null
+for FILE in $(git diff-index --cached --name-only HEAD | egrep '*.cpp|*.hpp'); do
+ clang-format-6.0 -i -style=file "$FILE"
+ git add "$FILE"
+done
--- /dev/null
+#!/bin/sh
+
+echo "Warning: this script may modify your pre-commit file."
+echo "The hook requieres clang-format tool in version 6.0 (or higher).\nBefore running this script make sure that aforementioned package is already installed."
+echo "Do you want to continue? [Y/n]"
+read decision
+
+toInstall=0
+if [ -z "$decision" ]; then
+ toInstall=1
+else
+ if [ "$decision" = "Y" -o "$decision" = "y" ]; then
+ toInstall=1
+ elif [ "$decision" = "n" ]; then
+ toInstall=0
+ else
+ toInstall=-1
+ fi
+fi
+
+[ $toInstall -lt 0 ] && echo "Invalid argument" && exit 1
+[ $toInstall -eq 0 ] && echo "Installation aborted" && exit 0
+
+HOOK_FILE="../.git/hooks/pre-commit"
+appendMagicLine() {
+ echo "#!/bin/sh\n" >> $HOOK_FILE
+}
+
+cp ".clang-format" ".."
+
+if [ ! -f $HOOK_FILE ]; then
+ touch $HOOK_FILE
+ chmod +x $HOOK_FILE
+ appendMagicLine
+ cat "hook.sh" >> $HOOK_FILE
+else
+ echo "" >> $HOOK_FILE
+ cat "hook.sh" >> $HOOK_FILE
+fi
\ No newline at end of file
--- /dev/null
+#!/bin/bash
+
+VCONF_KEY_PREFIX=$1
+
+if [ -f /etc/tizen-release ]; then
+ VCONFTOOL="vconftool set -f -t"
+else
+ sdb root on
+ VCONFTOOL="sdb shell vconftool set -f -t"
+ sdb -d shell mount -o remount,rw /
+fi
+
+# this path has to be synchronised with VCONF_PROJECT_PATH in src/VConfKeys.hpp
+VCONF_PROJECT_PATH="db/setting/accessibility/accessibility-setting/"
+VCONF_PROJECT_PREFIX=${VCONF_KEY_PREFIX}${VCONF_PROJECT_PATH}