diff --git a/.cirrus.yml b/.cirrus.yml index 8eecda2608927a30629ede91039adb89767a9ac7..e9997bd1367f3ec130e5efa492e57556a215b0aa 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -4,8 +4,9 @@ container: memory: 500M task: - name: Validate Play Store and F-Droid descriptions + name: Validate strings play-stable-script: python3 assets/store_descriptions/generate_and_validate.py play play-beta-script: python3 assets/store_descriptions/generate_and_validate.py playBeta fdroid-stable-script: python3 assets/store_descriptions/generate_and_validate.py fdroid fdroid-beta-script: python3 assets/store_descriptions/generate_and_validate.py fdroidBeta + app-string-script: python3 travis/validate-app-strings.py diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 51ae69d5fedfd32adfc3ccb758285421fdc630e3..d022d6f901806fb614275d29f7989fe00e638eec 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,6 +1,7 @@ --- name: Bug report -about: 'Create a report to help us improve ' +about: 'Create a report to help us improve the openHAB client for Android' +labels: bug --- @@ -46,7 +47,7 @@ Describe us what should happen ### Logs #### App log ``` -Insert your log here +Open the app, go to `Settings` => `View log` and insert the log here. ``` #### openHAB Server log diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e0eaa0a0a0a003360594c9467a83de5024ad21c3..50390962addb7225f752d4896f4d08b40beedc35 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,17 +1,18 @@ --- name: Feature request about: Suggest an idea for the openHAB client for Android +labels: enhancement --- -**Is your feature request related to a problem? Please describe.** +### Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -**Describe the solution you'd like** +### Describe the solution you'd like A clear and concise description of what you want to happen. -**Describe alternatives you've considered** +### Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered. -**Additional context** +### Additional context Add any other context or screenshots about the feature request here. diff --git a/.pullapprove.yml b/.pullapprove.yml deleted file mode 100644 index dbf3182f979d0fca7edebedeef21954eea2a63ac..0000000000000000000000000000000000000000 --- a/.pullapprove.yml +++ /dev/null @@ -1,34 +0,0 @@ -version: 2 - -requirements: - signed_off_by: - required: true - -always_pending: - title_regex: '^(WIP|wip)' - explanation: 'Work in progress...' - -group_defaults: - approve_by_comment: - enabled: true - approve_regex: '^(Approved|LGTM|:shipit:|:\+1:|Engage)' - reject_regex: '^(Rejected|:-1:|Borg)' - reset_on_push: - enabled: true - reset_on_reopened: - enabled: true - author_approval: - ignored: true - -groups: - maintainers: - required: 1 - teams: - - android-maintainers - conditions: - branches: - - master - reject_value: -100 - author_approval: - auto: true - ignored: false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e641e82b10e4e312718d233deeca8e1ebd1c5503..0e08d2a57c52fb78ee24ff49d82974e33914902a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -165,3 +165,71 @@ general guidelines for the community as a whole: respond to an email you are potentially sending to a large number of people. Please consider this before you update. Also remember that nobody likes spam. + +## FAQ + +**Is it fine to go with Kotlin for my contribution?** + +We don't use Kotlin. This is due to the fact, that our server components +are written in pure Java. Even tough the Android community is adapting +Kotlin well, most guys from the Java community are not used to writing +Kotlin code. + +**Is there an architectural design for the presentation layer?** + +There is no MVVM/MVP or MVC in place, because the app is not too complex +and it would not really benefit from something like that right now. + +**Is there an architectural design for the data layer?** + +The data layer is separated to it's own package. + +**Where does the Sitemap rendering happen?** + +WidgetListFragment + (especially) WidgetAdapter + +**How is navigation managed?** + +ContentController manages how fragments are displayed, and MainActivity +commands it what fragments to display. Navigation is too dynamic in our +app (determined by Sitemap) for the navigation architecture component to +be useful. + +**Do we use fragments in our activities? If yes, are they necessary?** + +The answer to the first question is 'it depends'. They should be used +whenever it makes sense to use them. E.g. for very simple activities +like the LogActivity, we don't use fragments, otherwise we do. + +**Should my code be tested? If yes to which degree?** + +Ideally yes, to whatever extent is doable and meaningful. It's not a requirement though. + +**Is there a way I can test all the features against a test server or something similar?** + +Either test against the [demo server](https://demo.openhab.org), or +setup an own server. For the latter case, it's probably useful to do a +checkout of the server side code an run that, following the procedure in +https://www.openhab.org/docs/developer/development/ide.html + +**Do we have guidelines for code style?** + +Yes, Google Java Style Guide: +https://google.github.io/styleguide/javaguide.html + +In addition: Please omit "openHAB" or "My" from class names. + +**How does the CI/CD pipeline work?** + +Service | Shown as | Task | Desired result | How to fix +:----|:----|:----|:----|:---- +Travis CI | continuous-integration/travis-ci/(pr,push) | Runs full build and test suite | Must pass | Look at the build output and try to run the test locally. If the tests are failing even if you haven't changed the particular code, please poke @openhab/android-maintainers and ask them to rerun the job. +Stickler CI | stickler-ci | Runs checkstyle to ensure the Google Java Style Guide is followed | Should pass, but sometimes it reports false-positives | Look at the comments https://github.com/openhab/openhab-android/pull/{pr-number}/files +Cirrus CI | Validate strings | Checks for common mistakes in strings.xml, e.g. wrong spelling of "openHAB" | Must pass | Look at the checks output and fix the issues. +Developer Certificate of Origin | DCO | Checks if commits are signed-of-by | Must pass | `git commit -s --amed` and `git push -f` +WIP | WIP | Checks if the PR name contains "WIP" (Work in progress) | Must pass | Remove "WIP" from the PR title when you're done. + +**Do I have to include Java Doc?** + +It's always nice to see documentation, but as long as your code is +clean, it is not all that important. diff --git a/assets/store_descriptions/ar-SA/strings.xml b/assets/store_descriptions/ar-SA/strings.xml index 89e9b30f8d93d9f9172ea6eba94817ba8f53887c..8613fb7f9773714641e02465e273abed6e5ab56c 100644 --- a/assets/store_descriptions/ar-SA/strings.xml +++ b/assets/store_descriptions/ar-SA/strings.xml @@ -1,11 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro>openHAB - "empowering the smart home" - بغض النظر عن المزودين والتكنلوجيا ، أتمتة البيوت المفتوح المصدر</intro> + <intro>openHAB - "empowering the smart home" - نظام التحكم المنزلي المفتوح المصدر والغير مرتبط بتقنية أو مصنع محدد</intro> <whatis>openHAB مبنية على الجافا ومفتوحة المصدر ، منصة أتمتة البيوت اللتي تتكامل وتدمج نطاق كبير من أنظمة وتكنلوجيا البيوت الذكبة في حل واحد.</whatis> <rules>على قمة الطبقات المجردة الموحدة، جميع الأجهزة المتصلة قابلة لقاعدة محركات أتمتة شاملة و واجهات مستخدم متوعة.</rules> <supported>منتجات مدعومة</supported> <bindings>ما يزيد على 200 من إضافات محددة توفر الدعم لماركات أجهزة وتقنيات وبروتوكولات الاتصال. مثال زد-ويف، فيليبس هيو، أمازون إيكو، كرومكاست، و سونوس. -https://docs.openhab.org/addons/bindings.html. </bindings> +https://docs.openhab.org/addons/bindings.html. أكتشف كل الإضافات المتوفرة والأجهزة المدعومة و/أو الوظائف بزبارة الرابط: +https://www.openhab.org/addons/</bindings> <home_automation_solutions>• حلول أتمتة المنزل: زد-ويف، إنأوشن، نتانتو، هوميتريك، إنستون، ...</home_automation_solutions> <lighting>• الإضاءة: فيليبس هوي ، ترادفري ، ايكيا، ليف، لوتون ، ميليت،...</lighting> @@ -25,12 +26,12 @@ https://docs.openhab.org/addons/bindings.html. </bindings> <about_foundation>مؤسسة openHAB أ. ف. منظمة غير ربحية تحمل على عاتقها مهمة تثقيف الجمهور بخصوص إمكانيات ومزايا حلول المنازل الذكية الحرة والمفتوحة. معرفة المزيد عن المهمة وخدمات المؤسسة في https://www.openhabfoundation.org</about_foundation> <important_note>ملاحظة هامة</important_note> <oh_server>أنت بحاجة إلى خادم openHAB لهذا التطبيق</oh_server> - <short_description/> - <fdroid>إصدارات F-Droid تدعم عرض الخريطة، تراسل سحابة جوجل GCM بينما حذفت تقارير الإنهيار ومن غير الممكن إستقبال الإشعارات من سحابة openHAB.</fdroid> - <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> - <fdroid_anti_features/> - <fdroid_anti_features_text/> - <beta/> - <play_beta/> + <short_description>تكنولوجيا أتمتة المنزل المفتوحة المصدر والغير مرتبطة بتقنية أو مصنع محدد</short_description> + <fdroid/> + <fdroid_beta><![CDATA[يمكنك تثبيت الإصدار التجريبي مع <a href="https://f-droid.org/packages/org.openhab.habdroid/">الإصدار المستقر</a>.]]></fdroid_beta> + <fdroid_privacy_policy>سياسة الخصوصية: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>ميزات غير مقبولة</fdroid_anti_features> + <fdroid_anti_features_text>هذا التطبيق معنون بعلامة "شيء غير مجاني"، لأن رمز أوبينهاب لا يحمل رخصة حرة.</fdroid_anti_features_text> + <beta>جرب الميزات الجديدة واعطنا ملاحظاتك!</beta> + <play_beta>يمكنك تثبيت الإصدار التجريبي بجانب الإصدار المستقر.</play_beta> </strings> diff --git a/assets/store_descriptions/bg-BG/strings.xml b/assets/store_descriptions/bg-BG/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..32a6ede3edec3505bc2744ea3858f844f8497280 100644 --- a/assets/store_descriptions/bg-BG/strings.xml +++ b/assets/store_descriptions/bg-BG/strings.xml @@ -18,7 +18,7 @@ <oss_community/> <forum> </forum> - <report_issues/> + <report_issues>Когато намерите проблем съобщете за това във форума или в https://github.com/openhab/openhab-android/issues</report_issues> <translation/> <foundation/> <about_foundation> </about_foundation> @@ -28,8 +28,8 @@ <fdroid/> <fdroid_beta><![CDATA[]]></fdroid_beta> <fdroid_privacy_policy/> - <fdroid_anti_features/> + <fdroid_anti_features>Анти-функции</fdroid_anti_features> <fdroid_anti_features_text/> - <beta/> + <beta>Опитайте нови функции и дайте ранна обратна връзка!</beta> <play_beta/> </strings> diff --git a/assets/store_descriptions/ca-ES/strings.xml b/assets/store_descriptions/ca-ES/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..b232c0767ddb52e02c7fd683cb1b6026079e8136 100644 --- a/assets/store_descriptions/ca-ES/strings.xml +++ b/assets/store_descriptions/ca-ES/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <strings> <intro/> - <whatis/> + <whatis>openHAB és una plataforma feta en Java per a l'automatització de la llar basada en codi obert, que integra i combina una gran varietat de sistemes i tecnologies per a la llar intel·ligent en una solució única.</whatis> <rules/> <supported/> <bindings> </bindings> diff --git a/assets/store_descriptions/cs-CZ/strings.xml b/assets/store_descriptions/cs-CZ/strings.xml index 1d84de7dac85dd2bb8aacc9bc41f8de8f9642cf4..88cf1f039ff9c9be62ff3fa0f2d5927e534b74cf 100644 --- a/assets/store_descriptions/cs-CZ/strings.xml +++ b/assets/store_descriptions/cs-CZ/strings.xml @@ -25,7 +25,7 @@ <important_note>Důležitá poznámka</important_note> <oh_server>Pro správné fungování aplikace budete potřebovat openHAB server</oh_server> <short_description>Domácí automatizace pro IoT různých výrobců a technologií</short_description> - <fdroid>F-Droid podporuje zobrazení mapy, GCM a notifikace byly odebrány a tedy nelze přijímat push notifikace z openHAB cloudu.</fdroid> + <fdroid>Sestavení pro F-Droid má mapové zobrazení, FCM a reporty o chybách odebrány a nemůže přijímat push notifikace z openHAB Cloud.</fdroid> <fdroid_beta><![CDATA[Můžete nainstalovat beta verzi vedle <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabilní verze</a>.]]></fdroid_beta> <fdroid_privacy_policy>Ochrana osobních údajů: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Potenciálně nechtěné vlastnosti</fdroid_anti_features> diff --git a/assets/store_descriptions/de-DE/strings.xml b/assets/store_descriptions/de-DE/strings.xml index ce6106eed6f57c0b9828ab3ba16eb150fc4b553b..bb92eb97036369e0824550ff399aba186c4768e8 100644 --- a/assets/store_descriptions/de-DE/strings.xml +++ b/assets/store_descriptions/de-DE/strings.xml @@ -25,7 +25,7 @@ <important_note>Wichtiger Hinweis</important_note> <oh_server>Um diese App zu nutzen, benötigen Sie einen openHAB-Server</oh_server> <short_description>Technologie- und herstellerunabhängige, quelloffene Automatisierungslösung</short_description> - <fdroid>In der F-Droid-Version wurden die Unterstützung für Mapview-Elemente, GCM und die Übermittlung von Absturzberichten entfernt. Mit dieser Version können keine Nachrichten von einer openHAB-Cloud-Instanz empfangen werden.</fdroid> + <fdroid>In der F-Droid-Version wurden die Unterstützung für Mapview-Elemente, FCM und die Übermittlung von Absturzberichten entfernt. Mit dieser Version können keine Nachrichten von einer openHAB-Cloud-Instanz empfangen werden.</fdroid> <fdroid_beta><![CDATA[Sie können die Betaversion neben der <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabilen Version</a> installieren.]]></fdroid_beta> <fdroid_privacy_policy>Datenschutzerklärung: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti-Features</fdroid_anti_features> diff --git a/assets/store_descriptions/el-GR/strings.xml b/assets/store_descriptions/el-GR/strings.xml index 29d2676645b79fbf78e5743fbc3b62beea610988..da6cb13be292c223623968962e801b33cae34e3c 100644 --- a/assets/store_descriptions/el-GR/strings.xml +++ b/assets/store_descriptions/el-GR/strings.xml @@ -25,7 +25,7 @@ <important_note>Σημαντική Σημείωση</important_note> <oh_server>Χρειάζεστε έναν διακομιστή openHAB για αυτό το app</oh_server> <short_description>Ανεξάρτητο τεχνολογίας & κατασκευαστή ανοικτό λογισμικό αυτοματοποίησης σπιτιού</short_description> - <fdroid>Στις εκδόσεις στο F-Droid έχει αφαιρεθεί η υποστήριξη για προβολή χάρτη, GCM και αναφοράς σφάλματος και δεν είναι δυνατή η λήψη ενημερώσεων απο το openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Μπορείτε να εγκαταστήσετε την έκδοση beta παράλληλα με την <a href="https://f-droid.org/packages/org.openhab.habdroid/">σταθερή έκδοση</a>.]]></fdroid_beta> <fdroid_privacy_policy>Πολιτική προστασίας προσωπικών δεδομένων: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Μη αποδεκτά xαρακτηριστικά</fdroid_anti_features> diff --git a/assets/store_descriptions/en-US/strings.xml b/assets/store_descriptions/en-US/strings.xml index 36de5397e0ef9e9a9c2ee58693cf954ef774d8a8..4b2ce3052a8f238d6b7be74c36dc5c9de3fb7a34 100644 --- a/assets/store_descriptions/en-US/strings.xml +++ b/assets/store_descriptions/en-US/strings.xml @@ -13,7 +13,7 @@ <security>• Security: ZoneMinder, DSC, ...</security> <open_protocols>• Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ...</open_protocols> <special_useCases>• Special UseCases: Minecraft, Tesla Car, Weather Services, ...</special_useCases> - <empty_point>• ...</empty_point> + <automation_apps>• Automation apps: Includes plugins for Tasker and Locale</automation_apps> <oss_community>Open Source Community</oss_community> <forum>The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org</forum> @@ -25,11 +25,9 @@ <important_note>Important note</important_note> <oh_server>You need an openHAB server for this app</oh_server> <short_description>Vendor and technology agnostic open source home automation</short_description> - <fdroid>The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud.</fdroid> + <fdroid>The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud.</fdroid> <fdroid_beta><![CDATA[You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>.]]></fdroid_beta> <fdroid_privacy_policy>Privacy policy: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> - <fdroid_anti_features>Anti Features</fdroid_anti_features> - <fdroid_anti_features_text>The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license.</fdroid_anti_features_text> <beta>Try out new features and give early feedback!</beta> <play_beta>You can install the beta version alongside the stable version.</play_beta> </strings> diff --git a/assets/store_descriptions/es-ES/strings.xml b/assets/store_descriptions/es-ES/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..9ad18110fc20926061260982a7b7617a2dad58c7 100644 --- a/assets/store_descriptions/es-ES/strings.xml +++ b/assets/store_descriptions/es-ES/strings.xml @@ -1,35 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro/> - <whatis/> - <rules/> - <supported/> - <bindings> </bindings> + <intro>openHAB - "potenciando el hogar inteligente" - automatización del hogar en código abierto independiente del proveedor y la tecnología</intro> + <whatis>openHAB es una plataforma para la automatización del hogar (domótica) basada en código abierto Java, que integra y combina una gran variedad de sistemas y tecnologías para el hogar inteligente en una única solución.</whatis> + <rules>Por encima de la capa unificada de abstracción, todos los dispositivos conectados están disponibles para los motores de reglas generales de automatización y diferentes interfaces de usuario.</rules> + <supported>Productos compatibles</supported> + <bindings>Más de 200 complementos específicos proporcionan soporte para distintas marcas, dispositivos, tecnologías y protocolos de comunicación. Algunos ejemplos son Z-Wave, Philips Hue, Amazon eco, Chromecast y Sonos. Descubra todos los complementos disponibles, dispositivos compatibles y otras funciones en: https://www.openhab.org/addons/</bindings> - <home_automation_solutions/> - <lighting/> - <heating/> - <home_entertainment/> - <security/> - <open_protocols/> - <special_useCases/> - <empty_point/> + <home_automation_solutions>• Soluciones domóticas: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,...</home_automation_solutions> + <lighting>• Iluminación: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> + <heating>• Calefacción: Max!, Nest, Vitotronic, Heatmiser,...</heating> + <home_entertainment>• Entretenimiento: TV Samsung, TV LG, Sonos, AVR Pioneer, Squeezebox, Kodi, Plex,...</home_entertainment> + <security>• Seguridad: ZoneMinder, DSC,...</security> + <open_protocols>• Protocolos abiertos: HTTP, TCP/UDP, MQTT, puerto serie,...</open_protocols> + <special_useCases>• Usos especiales: Minecraft, Tesla coche, servicios,...</special_useCases> + <empty_point>• ...</empty_point> - <oss_community/> - <forum> </forum> + <oss_community>Comunidad de código abierto</oss_community> + <forum>La iniciativa de código abierto openHAB apoya con fuerza a su vibrante comunidad. El foro con más de 13.000 usuarios registrados es un lugar donde puede encontrar orientación, ayuda e inspiración. Únase al foro de la comunidad de openHAB en https://community.openhab.org</forum> - <report_issues/> - <translation/> - <foundation/> - <about_foundation> </about_foundation> - <important_note/> - <oh_server/> - <short_description/> - <fdroid/> - <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> - <fdroid_anti_features/> - <fdroid_anti_features_text/> - <beta/> - <play_beta/> + <report_issues>Cuando encuentre un problema, por favor, repórtelo en el foro o en https://github.com/openhab/openhab-android/issues</report_issues> + <translation>Si quiere traducir la aplicación a su idioma, únase a nosotros en https://crowdin.com/project/openhab-android</translation> + <foundation>fundación openHAB</foundation> + <about_foundation>La openHAB Foundation e.V. es una organización sin ánimo de lucro cuya misión es difundir las posibilidades y ventajas de las soluciones libres y abiertas para los hogares inteligentes. Conozca la misión y los servicios de la fundación en https://www.openhabfoundation.org</about_foundation> + <important_note>Nota importante</important_note> + <oh_server>Usted necesita un servidor openHAB para usar esta aplicación</oh_server> + <short_description>Domótica de código abierto independiente de proveedores y tecnologías</short_description> + <fdroid>Las versiones basadas en F-Droid no tienen soporte para vista de mapa, FCM o informes de errores, y no podrán recibir notificaciones push de openHAB Cloud.</fdroid> + <fdroid_beta><![CDATA[Puede instalar la versión beta junto a la <a href="https://f-droid.org/packages/org.openhab.habdroid/">versión estable</a>.]]></fdroid_beta> + <fdroid_privacy_policy>Política de privacidad: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>Anti Features</fdroid_anti_features> + <fdroid_anti_features_text>La aplicación está marcada con la bandera de "NonFreeAsset" porque el icono de openHAB no está licenciado bajo una licencia libre.</fdroid_anti_features_text> + <beta>¡Pruebe las nuevas características y repórtenos su experiencia!</beta> + <play_beta>Puede instalar la versión beta junto a la versión estable.</play_beta> </strings> diff --git a/assets/store_descriptions/es-US/strings.xml b/assets/store_descriptions/es-US/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ad18110fc20926061260982a7b7617a2dad58c7 --- /dev/null +++ b/assets/store_descriptions/es-US/strings.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="utf-8"?> +<strings> + <intro>openHAB - "potenciando el hogar inteligente" - automatización del hogar en código abierto independiente del proveedor y la tecnología</intro> + <whatis>openHAB es una plataforma para la automatización del hogar (domótica) basada en código abierto Java, que integra y combina una gran variedad de sistemas y tecnologías para el hogar inteligente en una única solución.</whatis> + <rules>Por encima de la capa unificada de abstracción, todos los dispositivos conectados están disponibles para los motores de reglas generales de automatización y diferentes interfaces de usuario.</rules> + <supported>Productos compatibles</supported> + <bindings>Más de 200 complementos específicos proporcionan soporte para distintas marcas, dispositivos, tecnologías y protocolos de comunicación. Algunos ejemplos son Z-Wave, Philips Hue, Amazon eco, Chromecast y Sonos. Descubra todos los complementos disponibles, dispositivos compatibles y otras funciones en: https://www.openhab.org/addons/</bindings> + + <home_automation_solutions>• Soluciones domóticas: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,...</home_automation_solutions> + <lighting>• Iluminación: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> + <heating>• Calefacción: Max!, Nest, Vitotronic, Heatmiser,...</heating> + <home_entertainment>• Entretenimiento: TV Samsung, TV LG, Sonos, AVR Pioneer, Squeezebox, Kodi, Plex,...</home_entertainment> + <security>• Seguridad: ZoneMinder, DSC,...</security> + <open_protocols>• Protocolos abiertos: HTTP, TCP/UDP, MQTT, puerto serie,...</open_protocols> + <special_useCases>• Usos especiales: Minecraft, Tesla coche, servicios,...</special_useCases> + <empty_point>• ...</empty_point> + + <oss_community>Comunidad de código abierto</oss_community> + <forum>La iniciativa de código abierto openHAB apoya con fuerza a su vibrante comunidad. El foro con más de 13.000 usuarios registrados es un lugar donde puede encontrar orientación, ayuda e inspiración. Únase al foro de la comunidad de openHAB en https://community.openhab.org</forum> + + <report_issues>Cuando encuentre un problema, por favor, repórtelo en el foro o en https://github.com/openhab/openhab-android/issues</report_issues> + <translation>Si quiere traducir la aplicación a su idioma, únase a nosotros en https://crowdin.com/project/openhab-android</translation> + <foundation>fundación openHAB</foundation> + <about_foundation>La openHAB Foundation e.V. es una organización sin ánimo de lucro cuya misión es difundir las posibilidades y ventajas de las soluciones libres y abiertas para los hogares inteligentes. Conozca la misión y los servicios de la fundación en https://www.openhabfoundation.org</about_foundation> + <important_note>Nota importante</important_note> + <oh_server>Usted necesita un servidor openHAB para usar esta aplicación</oh_server> + <short_description>Domótica de código abierto independiente de proveedores y tecnologías</short_description> + <fdroid>Las versiones basadas en F-Droid no tienen soporte para vista de mapa, FCM o informes de errores, y no podrán recibir notificaciones push de openHAB Cloud.</fdroid> + <fdroid_beta><![CDATA[Puede instalar la versión beta junto a la <a href="https://f-droid.org/packages/org.openhab.habdroid/">versión estable</a>.]]></fdroid_beta> + <fdroid_privacy_policy>Política de privacidad: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>Anti Features</fdroid_anti_features> + <fdroid_anti_features_text>La aplicación está marcada con la bandera de "NonFreeAsset" porque el icono de openHAB no está licenciado bajo una licencia libre.</fdroid_anti_features_text> + <beta>¡Pruebe las nuevas características y repórtenos su experiencia!</beta> + <play_beta>Puede instalar la versión beta junto a la versión estable.</play_beta> +</strings> diff --git a/assets/store_descriptions/fi-FI/strings.xml b/assets/store_descriptions/fi-FI/strings.xml index 08c1769ef8a4ce957a72410c0b13bef1922ba2c5..0b606451dd61dd91aff88bfc0a3389834880fa83 100644 --- a/assets/store_descriptions/fi-FI/strings.xml +++ b/assets/store_descriptions/fi-FI/strings.xml @@ -25,7 +25,7 @@ <important_note>Tärkeä huomautus</important_note> <oh_server>Tarvitset openHAB palvelimen tätä sovellusta varten</oh_server> <short_description>Toimittaja- ja teknologiariippumatonta avoimen lähdekoodin kotiautomaatiota</short_description> - <fdroid>F-Droid sovelluskaupasta ladatuissa koontiversioissa on tuki karttanäytölle, mutta GCM ja kaatumisilmoitukset ovat pois käytöstä eikä ilmoitukset openHAB pilvestä ole käytettävissä.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Voit asentaa beta version <a href="https://f-droid.org/packages/org.openhab.habdroid/">vakaan version</a> rinnalle.]]></fdroid_beta> <fdroid_privacy_policy>Tietosuojakäytäntö: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti-ominaisuudet</fdroid_anti_features> diff --git a/assets/store_descriptions/fr-FR/strings.xml b/assets/store_descriptions/fr-FR/strings.xml index b5578d3372681177a9ea1d1659e8ff4c2d25ed0e..5ac7aa3e538576608f9c999170a3a708523c7eeb 100644 --- a/assets/store_descriptions/fr-FR/strings.xml +++ b/assets/store_descriptions/fr-FR/strings.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro>openHAB - "empowering the smart home" - une solution très simple de domotique libre pour votre maison connectée</intro> + <intro>openHAB - "empowering the smart home" - une solution de domotique libre et indépendante de tout fournisseur pour votre maison connectée</intro> <whatis>openHAB est une plateforme de domotique open source basée sur Java qui intègre et combine une vaste gamme de produits et technologies pour la maison connectée dans une seule et même solution.</whatis> <rules>S'appuyant sur une couche d'abstraction unifiée, tous les dispositifs connectés sont exposés au moteur de règles d'automatisation centralisé et à différentes interfaces utilisateur.</rules> <supported>Produits pris en charge</supported> @@ -25,9 +25,9 @@ <important_note>Remarque importante</important_note> <oh_server>Un serveur openHAB est nécessaire pour fonctionner avec cette app</oh_server> <short_description/> - <fdroid>Les versions publiées via F-Droid n'incluent pas le système GCM et les rapports de plantage, et elles ne seront pas en mesure de recevoir les notifications push depuis l’openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Vous pouvez installer la version bêta en parallèle de la <a href="https://f-droid.org/packages/org.openhab.habdroid/">version stable</a>.]]></fdroid_beta> - <fdroid_privacy_policy/> + <fdroid_privacy_policy>Politique de Confidentialité : https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Fonctionnalités à usage réservé</fdroid_anti_features> <fdroid_anti_features_text>L'application est marquée comme "NonFreeAsset" car l'icône de openHAB n'est pas sous licence libre.</fdroid_anti_features_text> <beta>Essayer les nouvelles fonctionnalités et donner un premier retour d'expérience !</beta> diff --git a/assets/store_descriptions/generate_and_validate.py b/assets/store_descriptions/generate_and_validate.py index 53bca0bf8149bbc4df26aab1250c97b903c1ffa8..38444be2074775436f53249d95aab1dc4735a92c 100755 --- a/assets/store_descriptions/generate_and_validate.py +++ b/assets/store_descriptions/generate_and_validate.py @@ -21,7 +21,7 @@ def getString(key): string = root.findall(key)[0].text if emptyStringPattern.match(string): string = getEnglishString(key) - except TypeError: + except (TypeError, IndexError): string = getEnglishString(key) return(string) @@ -57,8 +57,8 @@ for file in appStoreStringsFiles: fullDescription += getString('home_entertainment') + "\n" fullDescription += getString('security') + "\n" fullDescription += getString('open_protocols') + "\n" - fullDescription += getString('special_useCases') + "\n" - fullDescription += getString('empty_point') + "\n\n" + fullDescription += getString('automation_apps') + "\n" + fullDescription += getString('special_useCases') + "\n\n" fullDescription += "<b>" + getString('oss_community') + "</b>\n\n" fullDescription += getString('forum') + "\n" fullDescription += getString('report_issues') + "\n" @@ -66,15 +66,9 @@ for file in appStoreStringsFiles: fullDescription += "<b>" + getString('foundation') + "</b>\n\n" fullDescription += getString('about_foundation') + "\n" if "fdroid" in sys.argv[1]: - fullDescription += "\n<b>" + getString('fdroid_anti_features') + "</b>\n\n" - fullDescription += getString('fdroid_anti_features_text') + "\n\n\n" - fullDescription += getString('fdroid_privacy_policy') + fullDescription += "\n\n" + getString('fdroid_privacy_policy') # Validate full description - if getString('empty_point') != "• ..." and getString('empty_point') != "... •": - print("'empty_point' of " + lang + " is incorrect") - exitCode += 1 - openhabOccurences = [m.start() for m in re.finditer("openhab", fullDescription, re.I)] for i in openhabOccurences: openhabString = fullDescription[i:i+7] @@ -120,19 +114,4 @@ for file in appStoreStringsFiles: print("\n\n" + playDevSiteDescription) - -print("\n\nChecking app strings...") -appStringsFiles = glob.glob('mobile/src/main/res/values-*/strings.xml') -for file in appStringsFiles: - lang = file[27:-12] - print("Processing " + lang) - strings = open(file, "r").read() - - openhabOccurences = [m.start() for m in re.finditer("openhab", strings, re.I)] - for i in openhabOccurences: - openhabString = strings[i:i+7] - if openhabString != "openhab" and openhabString != "openHAB": # "openhab" is used in links - print("Incorrect spelling of openHAB in " + lang) - exitCode += 1 - exit(exitCode) diff --git a/assets/store_descriptions/he-IL/strings.xml b/assets/store_descriptions/he-IL/strings.xml index 91226a2c0837ce225f7a742faee04083c1f30917..b8288d1e1ad737aed7c6af33247fc59a0139157c 100644 --- a/assets/store_descriptions/he-IL/strings.xml +++ b/assets/store_descriptions/he-IL/strings.xml @@ -25,7 +25,7 @@ <important_note>הערה חשובה</important_note> <oh_server>יש צורך בשרת openHAB עבור יישום זה</oh_server> <short_description>אוטומציה לבית החכם מבוססת על קוד פתוח ובלתי מוגבלת לטכנולוגיה וחברה מסויימת</short_description> - <fdroid>תוכנות עבור F-Droid מכילות תצוגת מיפוי, GCM ודיווחי שגיאה על התרסקות הוסרו ולא יוכלו לקבל התראות בדחיפה מענן openHAB.</fdroid> + <fdroid>תוכנות עבור F-Droid מכילות תצוגת מיפוי, FCM ודיווחי שגיאה על התרסקות הוסרו ולא יוכלו לקבל התראות בדחיפה מענן openHAB.</fdroid> <fdroid_beta><![CDATA[באפשרותך להתקין את גירסת הבטא לצד <a href="https://f-droid.org/packages/org.openhab.habdroid/">הגרסה היציבה</a>.]]></fdroid_beta> <fdroid_privacy_policy>מדיניות פרטיות: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>תכונות שצריך לשים לב אליהן</fdroid_anti_features> diff --git a/assets/store_descriptions/hu-HU/strings.xml b/assets/store_descriptions/hu-HU/strings.xml index c38ea3b8c2ec9c7b79b9de300105e9755e37fed9..13d0efdb060bd263fa2fdd6bf3d8b260bdad4703 100644 --- a/assets/store_descriptions/hu-HU/strings.xml +++ b/assets/store_descriptions/hu-HU/strings.xml @@ -26,9 +26,9 @@ Több mint 200 külön kiegészítő támogatja a márkákat, eszközöket, tech <important_note>Fontos megjegyzés</important_note> <oh_server>Szükséged van egy openHAB szerverre, hogy tudd használni ezt az alkalmazást</oh_server> <short_description>Szabadgondolkozású technológia, nyílt forráskódú otthonautomatizálás</short_description> - <fdroid>A F-Droidra készült példány tartalmaz map nézetet is, GCM és hibajelentés el lett belőle távolítva és nem képes push értesítések fogadására az openHAB felhőről.</fdroid> + <fdroid>A F-Droidra verziónak van térképnézet támogatása, FCM és hibajelentést el lett belőle távolítva, illetve nem képes push értesítések fogadására az openHAB felhőből.</fdroid> <fdroid_beta><![CDATA[A béta változatot a <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabil verzió</a> mellé is telepítheted.]]></fdroid_beta> - <fdroid_privacy_policy/> + <fdroid_privacy_policy>Adatvédelem: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti funkciók</fdroid_anti_features> <fdroid_anti_features_text>Az alkalmazás meg van jelölve a "NonFreeAsset" zászlóval, mert az openHAB ikon nincs szabad licensz alatt.</fdroid_anti_features_text> <beta>Próbáld ki az új funkciókat és adj korai visszajelzést!</beta> diff --git a/assets/store_descriptions/it-IT/strings.xml b/assets/store_descriptions/it-IT/strings.xml index 8b4ee977413925622cdfe0e373f88816ab9f9366..e7f626364e71a9a7c401566cca15a47849228844 100644 --- a/assets/store_descriptions/it-IT/strings.xml +++ b/assets/store_descriptions/it-IT/strings.xml @@ -4,7 +4,7 @@ <whatis>openHAB e' una piattaforma open-source basata su java, che integra e combina una vasta gamma di diversi smart home systems e tecnologie in un'unica soluzione.</whatis> <rules>Usando un livello unificato di astrazione, tutti i dispositivi collegati sono disponibili per le regole di automazione e per diverse interfacce utente.</rules> <supported>Prodotti supportati</supported> - <bindings>Oltre 200 componenti aggiuntivi forniscono il supporto per marche, dispositivi, tecnologie e protocolli di comunicazione. Esempi sono Z-Wave, Philips Hue, Amazon Eco, Chromecast e Sonos. Scopri tutti i componenti aggiuntivi disponibili, dispositivi supportati e funzionalita' a: https://www.openhab.org/addons/</bindings> + <bindings>Oltre 200 componenti aggiuntivi forniscono il supporto per marche, dispositivi, tecnologie e protocolli di comunicazione. Esempi sono Z-Wave, Philips Hue, Amazon Echo, Chromecast e Sonos. Scopri tutti i componenti aggiuntivi disponibili, dispositivi supportati e funzionalita' a: https://www.openhab.org/addons/</bindings> <home_automation_solutions>• Soluzioni di domotica: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,...</home_automation_solutions> <lighting>• Illuminazione: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> @@ -16,7 +16,7 @@ <empty_point>• ...</empty_point> <oss_community>Comunità Open Source</oss_community> - <forum>L'iniziativa openHAB open source e' sostenuta dalla sua vivace comunità. Il forum con oltre 13.000 utenti registrati è un posto dove trovare la guida, l'aiuto e l'ispirazione. Partecipa al forum della comunità openHAB a https://community.openhab.org</forum> + <forum>L’iniziativa openHAB open source è fortemente supportata dalla sua vivace community. Il forum con oltre 13.000 utenti registrati è un posto dove trovare la guida, l'aiuto e l'ispirazione. Partecipa al forum della comunità openHAB a https://community.openhab.org</forum> <report_issues>Quando si verifica un problema, segnalalo nel forum o al https://github.com/openhab/openhab-android/issues</report_issues> <translation>Se vuoi aiutare a tradurre l'applicazione nella tua lingua, visita https://crowdin.com/project/openhab-android</translation> @@ -24,8 +24,8 @@ <about_foundation>openHAB Foundation e.V. e' una organizzazione nonprofit, con la missione di educare il pubblico sulle possibilita' e benefici di una soluzione domotica libera e aperta. Approfondisci la missione e i servizi della fondazione a https://www.openhabfoundation.org</about_foundation> <important_note>Nota importante</important_note> <oh_server>E' richiesto un server openHAB per questa applicazione</oh_server> - <short_description>Soluzione domotica open source e indipendente dalla tecnologia e dai produttori</short_description> - <fdroid>Il compilato su F-Droid ha il support map-view, GCM e crash reporting rimosso e non sara' in grado di ricevere notifiche da openHAB cloud.</fdroid> + <short_description>Soluzione domotica open source indipendente dalla tecnologia e dai produttori</short_description> + <fdroid>Il compilato su F-Droid ha il supporto per map-view, FCM e crash reporting rimosso e non sara' in grado di ricevere notifiche da openHAB cloud.</fdroid> <fdroid_beta><![CDATA[È possibile installare la versione beta insieme alla <a href="https://f-droid.org/packages/org.openhab.habdroid/">versione stabile</a>.]]></fdroid_beta> <fdroid_privacy_policy>Informativa sulla privacy: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti Features</fdroid_anti_features> diff --git a/assets/store_descriptions/ja-JP/strings.xml b/assets/store_descriptions/ja-JP/strings.xml index 274e16f75822eec207d3d19dc578c5b2e6077581..11353405bdc5c0767732d6fc2470bb24c5ca62a0 100644 --- a/assets/store_descriptions/ja-JP/strings.xml +++ b/assets/store_descriptions/ja-JP/strings.xml @@ -4,7 +4,7 @@ <whatis>openHAB は、Java ベースのオープンソース ホームオートメーション プラットフォームで、広大な範囲の異なるスマートホームシステムや技術を組み合わせたり統合して 1 つのソリューションにします。</whatis> <rules>統一された抽象レイヤーの上で、包括的な自動化ルールエンジンと異なるユーザーインターフェイスの、すべての接続されてたデバイスが利用できます。</rules> <supported>サポートされている製品</supported> - <bindings>200 以上の特定のアドオンは、ブランド、デバイス ・技術・通信プロトコルをサポートします。 例えば、Z-Wave、Philips Hue、アマゾンエコー、Chromecast、Sonos です。 </bindings> + <bindings>200 以上の特定のアドオンは、ブランド、デバイス ・技術・通信プロトコルをサポートします。 例えば、Z-Wave、Philips Hue、アマゾンエコー、Chromecast、Sonos です。 利用可能なアドオンやサポートされているデバイス、および機能は: https://www.openhab.org/addons/</bindings> <home_automation_solutions>• ホームオートメーション ソリューション: Z-Wave、EnOcean、Netatmo、Homematic、Insteon ...</home_automation_solutions> <lighting>• 照明: Philips Hue、Ikea Trådfri、LIFX、lutron社、Milight ...</lighting> @@ -24,10 +24,10 @@ <about_foundation>openHAB 財団は、フリーでオープンなスマートホームソリューションの可能性と利点について一般の人々に教育することを使命とする非営利組織です。 財団の使命とサービスについて学んでください https://www.openhabfoundation.org</about_foundation> <important_note>重要な注意事項</important_note> <oh_server>このアプリは openHAB サーバーが必要です</oh_server> - <short_description/> - <fdroid>F-Droid のビルドは、マップビューのサポート、GCM、クラッシュレポートが削除されていて openHAB クラウドからプッシュ通知を受信することはできません。</fdroid> - <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> + <short_description>ベンダーや技術に依存しないオープンソースのホーム・オートメーション</short_description> + <fdroid/> + <fdroid_beta><![CDATA[<a href="https://f-droid.org/packages/org.openhab.habdroid/">安定版</a> の他、ベータ版をインストールすることができます。]]></fdroid_beta> + <fdroid_privacy_policy>プライバシー ポリシー: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>アンチ機能</fdroid_anti_features> <fdroid_anti_features_text>openHAB アイコンは自由ライセンスではないので、アプリは"非自由資産"にマークされています。</fdroid_anti_features_text> <beta>新しい機能をお試しの上、フィードバックしてください!</beta> diff --git a/assets/store_descriptions/nl-NL/strings.xml b/assets/store_descriptions/nl-NL/strings.xml index 4e8540774a3bbc8b20b7b210dbdce93d16107507..cd0995e42019470c4cf73c4f360a1a36d4462215 100644 --- a/assets/store_descriptions/nl-NL/strings.xml +++ b/assets/store_descriptions/nl-NL/strings.xml @@ -25,7 +25,7 @@ <important_note>Belangrijke opmerking</important_note> <oh_server>U heeft een eigen openHAB server nodig voor deze app</oh_server> <short_description>Leverancier en technologie onafhankelijke open source domotica software</short_description> - <fdroid>Bij de F-Droid versie is kaartweergave ondersteuning, GCM en crash rapportage verwijderd en de app zal geen push-meldingen kunnen ontvangen van de openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[U kunt de beta-versie installeer samen met de <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabiele versie</a>.]]></fdroid_beta> <fdroid_privacy_policy>Privacybeleid: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti Features</fdroid_anti_features> diff --git a/assets/store_descriptions/no-NO/strings.xml b/assets/store_descriptions/no-NO/strings.xml index c34b67a27fb632b175c8e13eaf9561f366011731..9b5ff59d81f372ffced978a2728302990d86c283 100644 --- a/assets/store_descriptions/no-NO/strings.xml +++ b/assets/store_descriptions/no-NO/strings.xml @@ -25,7 +25,7 @@ <important_note>Viktig merknad</important_note> <oh_server>Du trenger en openHAB server for denne appen</oh_server> <short_description>Leverandør og teknologi uavhengig åpen kildekode for hjemme-automasjon</short_description> - <fdroid>Builds på F-Droid har kartvisning-støtte, GCM og krasj-rapportering fjernet og vil ikke kunne motta push varsler fra openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Du kan installere betaversjonen sammen med den <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabile versjonen</a>.]]></fdroid_beta> <fdroid_privacy_policy>Personvern: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti funksjoner</fdroid_anti_features> diff --git a/assets/store_descriptions/pl-PL/strings.xml b/assets/store_descriptions/pl-PL/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..3b01def6307999e39d3825c536131caf411375a5 100644 --- a/assets/store_descriptions/pl-PL/strings.xml +++ b/assets/store_descriptions/pl-PL/strings.xml @@ -1,35 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro/> - <whatis/> - <rules/> - <supported/> - <bindings> </bindings> + <intro>openHAB - "empowering the smart home" - niezależne i otwarte oprogramowanie dla automatyki domowej</intro> + <whatis>openHAB jest otwartą platformą dla automatyki domowej opartą na Javie, która integruje szeroki zakres różnych systemów i technologi "smart home" w jedno rozwiązanie.</whatis> + <rules>Na górnej ujednoliconej warstwie abstrakcji wszystkie połączone urządzenia są dostępne dla silnika reguł a także różnych interfejsów użytkownika.</rules> + <supported>Wspierane Produkty</supported> + <bindings>Ponad 200 dodatków wspierających marki, urządzenia, technologie i protokoły komunikacji. Jednymi z przykładów są Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Odkryj wszystkie dostępne dodatki i obsługiwane urządzenia i/lub funkcje na: https://www.openhab.org/addons/</bindings> - <home_automation_solutions/> - <lighting/> - <heating/> - <home_entertainment/> - <security/> - <open_protocols/> - <special_useCases/> - <empty_point/> + <home_automation_solutions>• Rozwiązania automatyki domowej: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ...</home_automation_solutions> + <lighting>• Oświetlenie: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> + <heating>• Ogrzewanie: Max!, Nest, Vitotronic, Heatmiser,...</heating> + <home_entertainment>• Kina domowego: Samsung TV, LG TV, Sonos, pionier AVR, ściskać, Kodi, Plex,...</home_entertainment> + <security>• Bezpieczeństwo: ZoneMinder, DSC,...</security> + <open_protocols>• Otwarte protokoły: HTTP, TCP/UDP, MQTT, Serial,...</open_protocols> + <special_useCases>Specjalne zastosowania: Minecraft, Samochody Tesla, Prognoza Pogody, ...</special_useCases> + <empty_point>• ...</empty_point> - <oss_community/> - <forum> </forum> + <oss_community>Społeczność Open Source</oss_community> + <forum>Inicjatywa open source openHAB mocno wspiera swoją żywą społeczność. Forum z ponad 13 000 zarejestrowanymi użytkownikami to miejsce, gdzie możesz +znaleźć wskazówki, pomoc i inspirację. Dołącz do forum społeczności openHAB na https://community.openhab.org</forum> - <report_issues/> - <translation/> - <foundation/> - <about_foundation> </about_foundation> - <important_note/> - <oh_server/> + <report_issues>Po znalezieniu problemu złoś go na forum lub na https://github.com/openhab/openhab-android/issues</report_issues> + <translation>Jeśli chcesz przetłumaczyć tę aplikację na swój język dołącz do nas na https://crowdin.com/project/openhab-android</translation> + <foundation>Fundacja openHAB</foundation> + <about_foundation>Fundacja openHAB jest organizacją non-profit z misją informowania o możliwościach i korzyściach z używania wolnych i otwartych rozwiązań dla inteligentnego domu. Dowiedz się więcej o misji i usługach fundacji na https://www.openhabfoundation.org</about_foundation> + <important_note>Istotne kwestie</important_note> + <oh_server>Potrzebujesz serwera openHAB dla tej aplikacji</oh_server> <short_description/> <fdroid/> <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> - <fdroid_anti_features/> + <fdroid_privacy_policy>Polityka prywatności: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>Anty Funkcje</fdroid_anti_features> <fdroid_anti_features_text/> - <beta/> + <beta>Wypróbuj nowe funkcje i dziel się uwagami!</beta> <play_beta/> </strings> diff --git a/assets/store_descriptions/pt-BR/strings.xml b/assets/store_descriptions/pt-BR/strings.xml index d560659fd8071ee31039bf435a29f445bb1c8527..b7b9ca86668ef70c7e8ed64a65ca7e9f0e80724e 100644 --- a/assets/store_descriptions/pt-BR/strings.xml +++ b/assets/store_descriptions/pt-BR/strings.xml @@ -25,7 +25,7 @@ <important_note>Nota importante</important_note> <oh_server>É necessário um servidor openHAB para esse aplicativo</oh_server> <short_description>Fornecedor e tecnologia agnóstica de código aberto de automação residencial</short_description> - <fdroid>As compilaçoes de F-Droid possuem suporte à visualização de mapas, GCM e relatórios de erros removidos não serão capazes de receber notificações do openHAB Cloud.</fdroid> + <fdroid>As compilaçoes de F-Droid possuem suporte à visualização de mapas, FCM e relatórios de erros removidos não serão capazes de receber notificações do openHAB Cloud.</fdroid> <fdroid_beta><![CDATA[Você pode instalar a versão beta junto da <a href="https://f-droid.org/packages/org.openhab.habdroid/">versão estável</a>.]]></fdroid_beta> <fdroid_privacy_policy>Política de privacidade: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti-recursos</fdroid_anti_features> diff --git a/assets/store_descriptions/ro-RO/strings.xml b/assets/store_descriptions/ro-RO/strings.xml index 9d03260a621f85abf473a807d4e67a00668b81f8..24cde2988a130da7fcd3ea8fbb6b1b68cebdc80f 100644 --- a/assets/store_descriptions/ro-RO/strings.xml +++ b/assets/store_descriptions/ro-RO/strings.xml @@ -25,7 +25,7 @@ <important_note>Notă importantă</important_note> <oh_server>Ai nevoie de un server openHAB pentru această aplicație</oh_server> <short_description>Automatizare de locuințe open source, independentă de producători și tehnologii</short_description> - <fdroid>Build-urile F-Droid au suport pentru vizualizarea hărților. Au eliminat GCM, raportarea erorilor și nu vor putea primi notificări de la openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Se poate instala versiunea beta alături de <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>.]]></fdroid_beta> <fdroid_privacy_policy>Politica de confidențialitate: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti Features</fdroid_anti_features> diff --git a/assets/store_descriptions/ru-RU/strings.xml b/assets/store_descriptions/ru-RU/strings.xml index 6ca6eaafe37ffcc25e29538a86aad9eec3e3697a..fab4476cb5367ba9643d6ba0f26084374698e0bd 100644 --- a/assets/store_descriptions/ru-RU/strings.xml +++ b/assets/store_descriptions/ru-RU/strings.xml @@ -4,7 +4,7 @@ <whatis>openHAB - это платформа домашней автоматизации с открытым исходным кодом, основанная на Java и интегрирующая в себе большое количество систем "умного дома" в единое решение.</whatis> <rules>На верхнем уровне абстракции все подключенные устройства доступны для правил автоматизации и различных пользовательских интерфейсов.</rules> <supported>Поддерживаемые продукты</supported> - <bindings>Более 200 надстроек обеспечивают поддержку устройств, технологий и протоколов связи различных производителей. Для примера: Z-Wave, Philips Hue, Amazon Echo, Chromecast и Sonos. Доступные дополнения для устройств и дополнительного функционала можно найти по адресу https://www.openhab.org/addons/</bindings> + <bindings>Более 200 надстроек обеспечивают поддержку устройств, технологий и протоколов связи различных производителей. Для примера: Z-Wave, Philips Hue, Amazon Echo, Chromecast и Sonos. Доступные дополнения, список поддерживаемых устройств и дополнительного функционала можно найти по адресу https://www.openhab.org/addons/</bindings> <home_automation_solutions>• Решения для автоматизации: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ...</home_automation_solutions> <lighting>• Освещение: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> @@ -16,7 +16,7 @@ <empty_point>• ...</empty_point> <oss_community>Сообщество Open Source</oss_community> - <forum>Сообщество openHAB строго придерживается принципов Open Source. Форум, с более чем 13 000 зарегистрированных пользователей - это место, где можно найти рекомендации, помощь и идеи для новых решений. Присоединяйтесь к сообществу openHAB на https://community.openhab.org</forum> + <forum>Сообщество openHAB строго придерживается принципов Open Source. Форум с более чем 13 000 зарегистрированных пользователей - это место, где можно найти рекомендации, помощь и идеи для новых решений. Присоединяйтесь к сообществу openHAB на https://community.openhab.org</forum> <report_issues>Если вы найдете ошибку, пожалуйста, сообщите об этом на форуме или на https://github.com/openhab/openhab-android/issues</report_issues> <translation>Если Вы хотите перевести приложение на свой язык - присоединяйтесь к нам на https://crowdin.com/project/openhab-android</translation> @@ -25,11 +25,11 @@ <important_note>Важное примечание</important_note> <oh_server>Для этого приложения необходим сервер openHAB</oh_server> <short_description>Поставщик технологий с открытым исходным кодом для автоматизации "умного дома"</short_description> - <fdroid>Версия для F-Droid поддерживает просмотр карт. GCM и отчёты о сбоях удалены. Приложение не будет получать уведомления от openHub Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Вы можете установить бета версию параллельно со <a href="https://f-droid.org/packages/org.openhab.habdroid/">стабильной версией</a>.]]></fdroid_beta> <fdroid_privacy_policy>Политика конфиденциальности: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>AntiFeatures</fdroid_anti_features> <fdroid_anti_features_text>Приложение помечено флагом «NonFreeAsset», поскольку логотип openHAB не является свободно используемым.</fdroid_anti_features_text> - <beta>Попробуйте новые функции и быстрее оставьте о них отзыв!</beta> + <beta>Попробуйте новые функции и оставьте о них отзыв!</beta> <play_beta>Вы можете установить бета-версию вместе со стабильной версией.</play_beta> </strings> diff --git a/assets/store_descriptions/sv-SE/strings.xml b/assets/store_descriptions/sv-SE/strings.xml index 3fec314a5039904d9edb3d673db29842e6033561..1ebec6ccc08821fb1dc9f88f7beb2c3b8b1cf0a9 100644 --- a/assets/store_descriptions/sv-SE/strings.xml +++ b/assets/store_descriptions/sv-SE/strings.xml @@ -25,7 +25,7 @@ <important_note>Viktigt meddelande</important_note> <oh_server>Du behöver en openHAB-server för denna app</oh_server> <short_description>Hemautomatisering med öppen källkod oberoende av tillverkare eller teknologi</short_description> - <fdroid>Versionerna på F-Droid har stöd för kartvisning, GCM och kraschrapportering och kan inte ta emot pushnotifieringar ifrån openHAB Cloud.</fdroid> + <fdroid/> <fdroid_beta><![CDATA[Beta-versionen kan installeras parallellt med den <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabila versionen</a>.]]></fdroid_beta> <fdroid_privacy_policy>Integritetspolicy: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>Anti-Features</fdroid_anti_features> diff --git a/assets/store_descriptions/tr-TR/strings.xml b/assets/store_descriptions/tr-TR/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..c5d656d5393ddd6d16f45920da00d6e994963a0e 100644 --- a/assets/store_descriptions/tr-TR/strings.xml +++ b/assets/store_descriptions/tr-TR/strings.xml @@ -1,35 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro/> - <whatis/> - <rules/> - <supported/> - <bindings> </bindings> + <intro>openHAB - "empowering the smart home" - Birbirinden farklı sistemleri destekleyen ve sağlayan açık kaynak kodlu akıllı ev otomasyonu</intro> + <whatis>openHAB, çok çeşitli akıllı ev sistemleri ve teknolojilerini tek bir çözümde entegre eden, Java tabanlı bir açık kaynaklı ev otomasyon platformudur.</whatis> + <rules>Birleşik soyutlama katmanının üstünde, tüm bağlı cihazlar genel otomasyon kural motorları ve farklı kullanıcı arayüzleri için kullanılabilir.</rules> + <supported>Desteklenen Ürünler</supported> + <bindings>200'den fazla özel eklenti, markalar, cihazlar, teknolojiler ve iletişim protokolleri için destek sağlar. Örnekler Z-Wave, Philips Hue, Amazon Echo, Chromecast ve Sonos'tur. Mevcut tüm eklentileri ve desteklenen cihazları ve / veya işlevleri şu adreste keşfedin: https://www.openhab.org/addons/</bindings> - <home_automation_solutions/> - <lighting/> - <heating/> - <home_entertainment/> - <security/> - <open_protocols/> - <special_useCases/> - <empty_point/> + <home_automation_solutions>Ev Otomasyonu Çözümleri: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ...</home_automation_solutions> + <lighting>• Aydınlatma: Philips Hue, IKEA Trådfri, LIFX, Lutron, Milight,...</lighting> + <heating>• Isıtma: Max!, Nest, Vitotronic, Heatmiser,...</heating> + <home_entertainment>• Ev Eğlence: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,...</home_entertainment> + <security>• Güvenlik: ZoneMinder, DSC,...</security> + <open_protocols>• Açık protokoller: HTTP, TCP/UDP, MQTT, Serial,...</open_protocols> + <special_useCases>• Özel Kullanım Örnekleri: Minecraft, Tesla Car, Hava Durumu hizmetleri,...</special_useCases> + <empty_point>• ...</empty_point> - <oss_community/> - <forum> </forum> + <oss_community>Açık Kaynak Topluluğu</oss_community> + <forum>openHAB açık kaynak girişimi, canlı topluluğunu güçlü bir şekilde destekliyor. Forum 13,000 kayıtlı kullanıcı ile rehberlik, yardım ve ilham bulmak için bir yerdir. openHAB topluluk forumu' na katıl: https://community.openhab.org</forum> - <report_issues/> - <translation/> - <foundation/> - <about_foundation> </about_foundation> - <important_note/> - <oh_server/> - <short_description/> + <report_issues>Bir sorun bulduğunuzda lütfen bunu forumda veya https://github.com/openhab/openhab-android/issues adresinde bildirin</report_issues> + <translation>Uygulamayı kendi dilinize çevirmek isterseniz https://crowdin.com/project/openhab-android adresinden bize katılın</translation> + <foundation>openHAB Vakfı</foundation> + <about_foundation>openHAB Vakfı e.V. kamuoyunu serbest ve açık akıllı ev çözümlerinin olanakları ve faydaları hakkında eğitmek misyonu ile kar amacı gütmeyen bir organizasyondur. </about_foundation> + <important_note>Önemli not</important_note> + <oh_server>Bu uygulama için openHAB sunucusuna ihtiyacınız var</oh_server> + <short_description>Satıcı ve teknoloji agnostik açık kaynaklı ev otomasyonu</short_description> <fdroid/> - <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> - <fdroid_anti_features/> - <fdroid_anti_features_text/> - <beta/> - <play_beta/> + <fdroid_beta><![CDATA[Beta sürümünü <a href="https://f-droid.org/packages/org.openhab.habdroid/">kararlı sürüm</a> ile birlikte kurabilirsiniz.]]></fdroid_beta> + <fdroid_privacy_policy>Gizlilik Politikası: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>Anti Özellikleri</fdroid_anti_features> + <fdroid_anti_features_text>openHAB simgesi ücretsiz bir lisans altında olmadığı için uygulama "NonFreeAsset" bayrağıyla işaretlenmiştir.</fdroid_anti_features_text> + <beta>Yeni özellikleri deneyin ve erken geri bildirimde bulunun!</beta> + <play_beta>Beta sürümünü, kararlı sürümün yanında da yükleyebilirsiniz.</play_beta> </strings> diff --git a/assets/store_descriptions/uk-UA/strings.xml b/assets/store_descriptions/uk-UA/strings.xml index 3b5e143e6927287c05d28fc987538faa3cbb8284..b582bfb89304e15ef57a6a4398112097acead2a3 100644 --- a/assets/store_descriptions/uk-UA/strings.xml +++ b/assets/store_descriptions/uk-UA/strings.xml @@ -1,35 +1,35 @@ <?xml version="1.0" encoding="utf-8"?> <strings> - <intro/> - <whatis/> - <rules/> - <supported/> - <bindings> </bindings> + <intro>openHAB - "empowering the smart home" - відкрите ПЗ для автоматизації "розумного будинку", яке не залежить від виробників і технологій</intro> + <whatis>openHAB - платформа домашньої автоматизації з відкритим початковим кодом, створена на базі Java і об'єднуюча велику кількість систем "розумного будинку" в монолітне рішення.</whatis> + <rules>Поверх програмних шарів, усі під'єднані пристрої доступні для глобальних правил автоматизації і різноманітних користувацьких інтерфейсів.</rules> + <supported>Підтримувані продукти</supported> + <bindings>Більше 200 додатків, які забезпечують підтримку пристроїв, технологій і протоколів передачі даних від різних виробників. Наприклад: Z-Wave, Philips Hue, Amazon Echo, Chromecast, Sonos, Zigbee, Google Assistant. Відкрийте для себе усі доступні доповнення, підтримувані пристрої та/або функції на: https://www.openhab.org/addons/</bindings> - <home_automation_solutions/> - <lighting/> - <heating/> - <home_entertainment/> - <security/> - <open_protocols/> - <special_useCases/> - <empty_point/> + <home_automation_solutions>• Рішення для домашньої автоматизації: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ...</home_automation_solutions> + <lighting>• Освітлення: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,...</lighting> + <heating>• Опалення: Max!, Nest, Vitotronic, Heatmiser, ...</heating> + <home_entertainment>• Розважальні мультимедійні системи: Samsung TV, LG TV, Sonos, Pioner AVR, Squeezebox, Kodi, Plex, ...</home_entertainment> + <security>• Безпека: ZoneMinder, DSC, ...</security> + <open_protocols>• Відкриті протоколи: HTTP, TCP/UDP, MQTT, Serial, ...</open_protocols> + <special_useCases>• Додаткові варіанти застосування: Minecraft, Tesla Car, Weather Services, ...</special_useCases> + <empty_point>• ...</empty_point> - <oss_community/> - <forum> </forum> + <oss_community>Open Source спільнота</oss_community> + <forum>Ініціатори openHAB open source максимально підтримують свою спільноту. Форум, на якому зареєстровано більше 13 000 користувачів - те саме місце, де ви зможете знайти вказівки, рекомендації, допомогу і натхнення. Приєднуйтеся до спільноти openHAB на https://community.openhab.org</forum> - <report_issues/> - <translation/> - <foundation/> - <about_foundation> </about_foundation> - <important_note/> - <oh_server/> - <short_description/> - <fdroid/> - <fdroid_beta><![CDATA[]]></fdroid_beta> - <fdroid_privacy_policy/> - <fdroid_anti_features/> - <fdroid_anti_features_text/> - <beta/> - <play_beta/> + <report_issues>Якщо знайдете помилку, будь ласка, повідомте про це на форумі, або на https://github.com/openhab/openhab-android/issues</report_issues> + <translation>Якщо хочете перекласти програму своєю мовою - приєднуйтеся до нас на https://crowdin.com/project/openhab-android</translation> + <foundation>openHAB Foundation</foundation> + <about_foundation>openHAB Foundation - це неприбуткова організація, яка поставила собі за мету розповісти суспільству про можливості і переваги вільних і відкритих рішень "розумного будинку". Дізнайтеся більше про цілі і послуги openHAB Foundation на https://www.openhabfoundation.org</about_foundation> + <important_note>Важлива примітка</important_note> + <oh_server>Для цього додатку вам необхідний сервер openHAB</oh_server> + <short_description>Відкрите ПЗ для домашньої автоматизації, неупереджене до виробників і технологій</short_description> + <fdroid>Версія для F-Droid підтримує перегляд карт, FCM і звіти про падіння видалені, не зможе отримувати сповіщення від openHAB Cloud.</fdroid> + <fdroid_beta><![CDATA[Ви можете встановити бета версію разом зі <a href="https://f-droid.org/packages/org.openhab.habdroid/">стабільною версією</a>.]]></fdroid_beta> + <fdroid_privacy_policy>Політика конфіденційності: https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> + <fdroid_anti_features>Застереження</fdroid_anti_features> + <fdroid_anti_features_text>Додаток помічено як «NonFreeAsset», тому що логотип openHAB не є вільним для використання.</fdroid_anti_features_text> + <beta>Спробуйте нові функції і залиште швидкий відгук!</beta> + <play_beta>Ви можете встановити бета версію разом зі стабільною.</play_beta> </strings> diff --git a/assets/store_descriptions/zh-CN/strings.xml b/assets/store_descriptions/zh-CN/strings.xml index 2de891e97f349c5dc2c92e4765ce8fecb36a9eed..9b142c4a5f7e8f9794f3fee96738dc821d317cf7 100644 --- a/assets/store_descriptions/zh-CN/strings.xml +++ b/assets/store_descriptions/zh-CN/strings.xml @@ -13,7 +13,7 @@ <security>• 安全:ZoneMinder、DSC···</security> <open_protocols>• 开源协议:HTTP、TCP/UDP、MQTT、串口···</open_protocols> <special_useCases>• 特殊用例:我的世界、特斯拉汽车、天气服务···</special_useCases> - <empty_point/> + <empty_point>• ...</empty_point> <oss_community>开源社区</oss_community> <forum>openHAB 的开源鼎力支持了其充满活力的社区。 社区共有超过 13000 位注册用户,是您寻求帮助与灵感的好地方。 在 https://community.openhab.org 处加入 openHAB 社区论坛</forum> @@ -25,7 +25,7 @@ <important_note>重要提示</important_note> <oh_server>您需要 openHAB 服务器以使用此应用程序</oh_server> <short_description>开源家居自动化供应商与技术</short_description> - <fdroid>F-Droid 版本拥有地图预览支持、Google 云信息并移除了崩溃报告且无法从 openHAB 云接收推送信息。</fdroid> + <fdroid/> <fdroid_beta><![CDATA[您可以在安装<a href="https://f-droid.org/packages/org.openhab.habdroid/">稳定版</a>的情况下安装测试版。]]></fdroid_beta> <fdroid_privacy_policy>隐私政策:https://www.openhabfoundation.org/privacy.html</fdroid_privacy_policy> <fdroid_anti_features>不利功能</fdroid_anti_features> diff --git a/build.gradle b/build.gradle index 89efeba46c80a74538f66e2d7002ae3233ccf390..20061efae8e9a6d3efa6d6235491df5a6d1edc2c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,3 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { repositories { mavenCentral() @@ -7,9 +5,6 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' - classpath 'com.dicedmelon.gradle:jacoco-android:0.1.3' - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath 'com.android.tools.build:gradle:3.4.1' } } diff --git a/crowdin.yml b/crowdin.yml index dace96e0404ebd7cd8ca917fbcc340f75d972d4d..e532e4a4984c95c606caa1326cab58260a37e0fa 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -7,6 +7,8 @@ files: he: iw id: in yi: ji + zh-CN: zh-rCN + es-US: es-rUS - source: /assets/store_descriptions/en-US/strings.xml translation: /assets/store_descriptions/%locale%/%original_file_name% - source: /mobile/src/beta/res/values/strings.xml @@ -17,6 +19,8 @@ files: id: in yi: ji he: iw + zh-CN: zh-rCN + es-US: es-rUS - source: /mobile/src/foss/res/values/strings.xml translation: /mobile/src/foss/res/values-%two_letters_code%/%original_file_name% languages_mapping: @@ -25,6 +29,8 @@ files: he: iw id: in yi: ji + zh-CN: zh-rCN + es-US: es-rUS - source: /mobile/src/full/res/values/strings.xml translation: /mobile/src/full/res/values-%two_letters_code%/%original_file_name% languages_mapping: @@ -33,3 +39,5 @@ files: he: iw id: in yi: ji + zh-CN: zh-rCN + es-US: es-rUS diff --git a/docs/USAGE.md b/docs/USAGE.md index a42b546de15a421f0c7677a5bb8534eaf442ea69..47c3acb4f43300f99cb8136ea54e53d3619966d9 100644 --- a/docs/USAGE.md +++ b/docs/USAGE.md @@ -26,16 +26,19 @@ The app follows the basic principles of the other openHAB UIs, like Basic UI, an * Receive notifications through an openHAB Cloud connection, [read more](https://www.openhab.org/docs/configuration/actions.html#cloud-notification-actions) * Change items via NFC tags * Send voice commands to openHAB -* Supports wall mounted tablets +* [Send alarm clock time to openHAB](#alarm-clock) +* [Supports wall mounted tablets](#permanent-deployment) +* [Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm) action plugin included <div class="row"> - <div class="col s12 m6"><img src="images/main-menu.png" alt="Demo Overview"></div> - <div class="col s12 m6"><img src="images/widget-overview.png" alt="Demo Widget Overview"></div> + <img src="images/main-menu.png" alt="Demo Overview" width=200px> <img src="images/widget-overview.png" alt="Widget Overview" width=200px> <img src="images/maps.png" alt="Google Maps Widget" width=200px> </div> ## Getting Started -On first start the app tries to discover your openHAB server. This will only work on local networks and when the server does not enforce either authentication or HTTPS. If it fails, you can click on `Go to settings` and manually enter the server settings. +On first start the app tries to discover your openHAB server. +This will only work on local networks and when the server does not enforce either authentication or HTTPS. +If it fails, you can click on `Go to settings` and manually enter the server settings. The URL field(s) might look like one of the following examples: @@ -55,10 +58,54 @@ There are a number of strategies available to provide [secure remote access]({{b If you want to use openHAB Android on a wall mounted tablet, go to settings and select `Disable display timer` and `Fullscreen`. +## Alarm Clock + +The openHAB app will send the next wake-up time from your alarm clock app to the server. +The time is sent as a number containing the number of milliseconds since the epoch. +The Item name's default is `AlarmClock`, but you can change it in the settings. + +Example item definition: +``` +Number AlarmClock + +``` + +Example rule: +``` +rule "Alarm Trigger" +when + Time cron "*/10 * * * * ?" // Every 10 seconds +then + if (AlarmClock.state as Number == 0) { + // Alarm is turned off + return; + } + val diff = AlarmClock.state as Number - now().millis + if (diff <= 15000) { + // Turn on stuff, e.g. radio or light + logInfo('AlarmLogger', 'Turn on light') + Light.sendCommand(ON) + } + +end + +``` + ## Help and Technical Details Please refer to the [openhab-android project on GitHub](https://github.com/openhab/openhab-android) for more details. +### I don't receive any notifications + +Please have a look at the "Push notification status" on the About screen in the app. +If it claims that your device is successfully registered at FCM, please open an issue on [openhab-android project on GitHub](https://github.com/openhab/openhab-android) or create a thread in the forum. + +### My notifications are delayed + +All notifications are sent as "high priority" messages, which means that the device and the openHAB app are waken up and display the notification. +However vendors/third parties can implement custom "cleanup", "optimization" and "battery saver" apps, which might lead to delayed notifications. +Please have a look at [dontkillmyapp.com](https://dontkillmyapp.com/) how to make an exception for openHAB in these apps. + ## Trademark Disclaimer Google Play and the Google Play logo are trademarks of Google Inc. diff --git a/docs/images/main-menu.png b/docs/images/main-menu.png index ba9ebd332503d838496ae2b4cc897a3781221cec..f65e82aad277194737f57da7a94e92bc58c0a78f 100644 Binary files a/docs/images/main-menu.png and b/docs/images/main-menu.png differ diff --git a/docs/images/maps.png b/docs/images/maps.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf7d1d268a1bb9c451377f595cfb3d579911542 Binary files /dev/null and b/docs/images/maps.png differ diff --git a/docs/images/widget-overview.png b/docs/images/widget-overview.png index f5344f176bb35d7fb85e4c893098f7d888105466..dc818806351821bdbe000bd00f1b886620b20556 100644 Binary files a/docs/images/widget-overview.png and b/docs/images/widget-overview.png differ diff --git a/fastlane/metadata/android/af-ZA/full_description.txt b/fastlane/metadata/android/af-ZA/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/af-ZA/full_description.txt +++ b/fastlane/metadata/android/af-ZA/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ar-SA/full_description.txt b/fastlane/metadata/android/ar-SA/full_description.txt index 2b689a7aa6d816e1ffb06f3128b8f6341732574a..ad4c227073c1368750abeae4be3df80d2da01f19 100644 --- a/fastlane/metadata/android/ar-SA/full_description.txt +++ b/fastlane/metadata/android/ar-SA/full_description.txt @@ -1,8 +1,8 @@ -openHAB - "empowering the smart home" - بغض النظر عن المزودين والتكنلوجيا ، أتمتة البيوت المفتوح المصدر +openHAB - "empowering the smart home" - نظام التحكم المنزلي المفتوح المصدر والغير مرتبط بتقنية أو مصنع محدد -إصدارات F-Droid تدعم عرض الخريطة، تراسل سحابة جوجل GCM بينما حذفت تقارير الإنهيار ومن غير الممكن إستقبال الإشعارات من سحابة openHAB. -Try out new features and give early feedback! -You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +جرب الميزات الجديدة واعطنا ملاحظاتك! +يمكنك تثبيت الإصدار التجريبي مع <a href="https://f-droid.org/packages/org.openhab.habdroid/">الإصدار المستقر</a>. <b>ملاحظة هامة</b> @@ -14,7 +14,8 @@ openHAB مبنية على الجافا ومفتوحة المصدر ، منصة <b>منتجات مدعومة</b> ما يزيد على 200 من إضافات محددة توفر الدعم لماركات أجهزة وتقنيات وبروتوكولات الاتصال. مثال زد-ويف، فيليبس هيو، أمازون إيكو، كرومكاست، و سونوس. -https://docs.openhab.org/addons/bindings.html. +https://docs.openhab.org/addons/bindings.html. أكتشف كل الإضافات المتوفرة والأجهزة المدعومة و/أو الوظائف بزبارة الرابط: +https://www.openhab.org/addons/ • حلول أتمتة المنزل: زد-ويف، إنأوشن، نتانتو، هوميتريك، إنستون، ... • الإضاءة: فيليبس هوي ، ترادفري ، ايكيا، ليف، لوتون ، ميليت،... @@ -22,8 +23,8 @@ https://docs.openhab.org/addons/bindings.html. • الترفيه المنزلي: تلفاز سامسونج، تلفاز ال جي، سونوس، بيونير إي في آر ، سكويزبوكس، كودي، بلكس ،... • الأمن: زونيميندير، دي أس سي،... البروتوكولات المفتوحة: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale حالات إستخدام خاصة: مينكرافت، سيارة تيسلا، خدمات الطقس، ... -• ... <b>مجتمع المصدر المفتوح</b> @@ -35,9 +36,5 @@ openHAB مبادرة المصدر المفتوح مدعومة بقوة من مج مؤسسة openHAB أ. ف. منظمة غير ربحية تحمل على عاتقها مهمة تثقيف الجمهور بخصوص إمكانيات ومزايا حلول المنازل الذكية الحرة والمفتوحة. معرفة المزيد عن المهمة وخدمات المؤسسة في https://www.openhabfoundation.org -<b>Anti Features</b> -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +سياسة الخصوصية: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ar-SA/short_description.txt b/fastlane/metadata/android/ar-SA/short_description.txt index 0879a5320b8950d35351b11e025bdf31c1350f2c..0c810be70eebd47ae23a8c5616558a41bd56f5c0 100644 --- a/fastlane/metadata/android/ar-SA/short_description.txt +++ b/fastlane/metadata/android/ar-SA/short_description.txt @@ -1 +1 @@ -Vendor and technology agnostic open source home automation \ No newline at end of file +تكنولوجيا أتمتة المنزل المفتوحة المصدر والغير مرتبطة بتقنية أو مصنع محدد \ No newline at end of file diff --git a/fastlane/metadata/android/bg-BG/full_description.txt b/fastlane/metadata/android/bg-BG/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..14e3a70f7fb66b5fc9336ec3f7d0e96927a08131 100644 --- a/fastlane/metadata/android/bg-BG/full_description.txt +++ b/fastlane/metadata/android/bg-BG/full_description.txt @@ -1,7 +1,7 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. -Try out new features and give early feedback! +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +Опитайте нови функции и дайте ранна обратна връзка! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. <b>Important note</b> @@ -21,22 +21,18 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org -When you find an issue please report it in the forum or at https://github.com/openhab/openhab-android/issues +Когато намерите проблем съобщете за това във форума или в https://github.com/openhab/openhab-android/issues If you want to translate the app into your language join us at https://crowdin.com/project/openhab-android <b>openHAB Foundation</b> The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ca-ES/full_description.txt b/fastlane/metadata/android/ca-ES/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..17705ce775f8995bdd55894bc52b709fb3debc6b 100644 --- a/fastlane/metadata/android/ca-ES/full_description.txt +++ b/fastlane/metadata/android/ca-ES/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -8,7 +8,7 @@ You can install the beta version alongside the <a href="https://f-droid.org/pack You need an openHAB server for this app -openHAB is a Java-based open-source home automation platform that integrates and combines a vast range of different smart home systems and technologies into one single solution. +openHAB és una plataforma feta en Java per a l'automatització de la llar basada en codi obert, que integra i combina una gran varietat de sistemes i tecnologies per a la llar intel·ligent en una solució única. On top of the unified abstraction layer all connected devices are available for the overarching automation rule engines and different user interfaces. <b>Supported Products</b> @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/cs-CZ/full_description.txt b/fastlane/metadata/android/cs-CZ/full_description.txt index 8ac56701d43fd27f41bdcd5602bfb959eb785ec2..a7c1b132a3798e99348eef8f00afa77e44b00441 100644 --- a/fastlane/metadata/android/cs-CZ/full_description.txt +++ b/fastlane/metadata/android/cs-CZ/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - open source program pro domácí automatizaci IoT zařízení od různých výrobců s různou technologií -F-Droid podporuje zobrazení mapy, GCM a notifikace byly odebrány a tedy nelze přijímat push notifikace z openHAB cloudu. +Sestavení pro F-Droid má mapové zobrazení, FCM a reporty o chybách odebrány a nemůže přijímat push notifikace z openHAB Cloud. Vyzkoušejte nové funkce a dejte nám zpětnou vazbu! Můžete nainstalovat beta verzi vedle <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabilní verze</a>. @@ -21,8 +21,8 @@ Více než 200 doplňků přidává podporu pro značky, zařízení, technologi • Domácí zábava: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Bezpečnost: ZoneMinder, DSC,... • Otevřené protokoly: HTTP, TCP/UDP, MQTT, sériový,... +• Automation apps: Includes plugins for Tasker and Locale • Speciální použití: Minecraft, automobil Tesla, meteorologické služby,... -• ... <b>Open Source komunita</b> @@ -34,9 +34,5 @@ Pokud chcete aplikaci přeložit do vašeho jazyka připojte se k nám na https: openHAB Foundation e.V. je nezisková organizace s posláním vzdělávat veřejnost o možnostech a výhodách svobodných a otevřených chytrých řešeních pro domácí automatizaci. Další informace o poslání a službách nadace naleznete na https://www.openhabfoundation.org -<b>Potenciálně nechtěné vlastnosti</b> - -Aplikace je označena příznakem "NonFreeAsset", protože openHAB ikona není k dispozici pod svobodnou licencí. - Ochrana osobních údajů: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/da-DK/full_description.txt b/fastlane/metadata/android/da-DK/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/da-DK/full_description.txt +++ b/fastlane/metadata/android/da-DK/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/de-DE/full_description.txt b/fastlane/metadata/android/de-DE/full_description.txt index a2715d38e1bd594f7e74e4ba42539a8e678cd438..10515d48806221af5df9c4fe453fddcb4ddac408 100644 --- a/fastlane/metadata/android/de-DE/full_description.txt +++ b/fastlane/metadata/android/de-DE/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - eine technologie- und herstellerunabhängige, quelloffene Automatisierungslösung für Ihr Zuhause -In der F-Droid-Version wurden die Unterstützung für Mapview-Elemente, GCM und die Übermittlung von Absturzberichten entfernt. Mit dieser Version können keine Nachrichten von einer openHAB-Cloud-Instanz empfangen werden. +In der F-Droid-Version wurden die Unterstützung für Mapview-Elemente, FCM und die Übermittlung von Absturzberichten entfernt. Mit dieser Version können keine Nachrichten von einer openHAB-Cloud-Instanz empfangen werden. Testen Sie neue Features und geben Sie früh Feedback! Sie können die Betaversion neben der <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabilen Version</a> installieren. @@ -21,8 +21,8 @@ Aufbauend auf einer vereinheitlichten Abstraktionsschicht sind alle Geräte für • Heimunterhaltung: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Sicherheitstechnik: ZoneMinder, DSC, ... • Offene Protokolle: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Spezielle Anwendungsfälle: Minecraft, Tesla Auto, Wetterdienste,... -• ... <b>Open-Source-Community</b> @@ -34,9 +34,5 @@ Helfen Sie uns, diese App in Ihre Sprache zu übersetzen: https://crowdin.com/pr Die openHAB Foundation e.V. ist ein gemeinnütziger Verein mit dem Ziel, die Öffentlichkeit über die Möglichkeiten und den Nutzen von kostenlosen und offenen Smart Home Lösungen aufzuklären. Erfahren Sie mehr über die Ziele und Angebote der Foundation unter https://www.openhabfoundation.org -<b>Anti-Features</b> - -Die App wurde mit dem "NonFreeAsset"-Anti-Feature markiert, da das openHAB-Icon nicht unter freier Lizenz steht. - Datenschutzerklärung: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/el-GR/full_description.txt b/fastlane/metadata/android/el-GR/full_description.txt index 47c75952765fc0df1de3b8c4e09f8506ee51908c..3ecb5a8ba4aa618cb64733c133498492cf433be9 100644 --- a/fastlane/metadata/android/el-GR/full_description.txt +++ b/fastlane/metadata/android/el-GR/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - Ανοικτού κώδικα, ανεξάρτητο κατασκευαστή και τεχνολογίας λογισμικό αυτοματοποίησης σπιτιού -Στις εκδόσεις στο F-Droid έχει αφαιρεθεί η υποστήριξη για προβολή χάρτη, GCM και αναφοράς σφάλματος και δεν είναι δυνατή η λήψη ενημερώσεων απο το openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Δοκιμάστε νέες δυνατότητες και να δώστε έγκαιρη ανατροφοδότηση! Μπορείτε να εγκαταστήσετε την έκδοση beta παράλληλα με την <a href="https://f-droid.org/packages/org.openhab.habdroid/">σταθερή έκδοση</a>. @@ -21,8 +21,8 @@ openHAB - "empowering the smart home" - Ανοικτού κώδικα, ανεξ • Οικιακή ψυχαγωγία: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Ασφάλεια: ZoneMinder, DSC,... • Ανοικτά πρωτόκολλα: TCP/UDP HTTP, MQTT, σειριακό,... +• Automation apps: Includes plugins for Tasker and Locale • Ειδικές περιπτώσεις χρήσης: Minecraft, αυτοκίνητο Tesla, μετεωρολογικές υπηρεσίες,... -• ... <b>Κοινότητα Ανοικτού Λογισμικού</b> @@ -34,9 +34,5 @@ openHAB - "empowering the smart home" - Ανοικτού κώδικα, ανεξ Το ίδρυμα openHAB είναι ένας μη κερδοσκοπικός οργανισμός με στόχο την ενημέρωση του κοινού για τις δυνατότητες και τα οφέλη των ελεύθερων και ανοικτού λογισμικού λύσεων έξυπνου σπιτιού. Μάθετε περισσότερα για την αποστολή και τις υπηρεσίες του ιδρύματος στο σύνδεσμο https://www.openhabfoundation.org -<b>Μη αποδεκτά xαρακτηριστικά</b> - -Η εφαρμογή έχει χαρακτηριστεί ως "NonFreeAsset", διότι το εικονίδιο του openHAB δεν είναι υπό ελεύθερη άδεια. - Πολιτική προστασίας προσωπικών δεδομένων: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/100.txt b/fastlane/metadata/android/en-US/changelogs/100.txt new file mode 100644 index 0000000000000000000000000000000000000000..711a5f1c91bb683771adffb9143f9b45360dbb67 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/100.txt @@ -0,0 +1,6 @@ +## Added +* Add voice widget w/o app launch shortcut (#1152) + +## Changed +* Enhance status fragments (#1131) +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/101.txt b/fastlane/metadata/android/en-US/changelogs/101.txt new file mode 100644 index 0000000000000000000000000000000000000000..b70a3c35802d10a732d503b5cdebd93dcdfa74ef --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/101.txt @@ -0,0 +1,2 @@ +## Added +* Display HABPanel (#1124) diff --git a/fastlane/metadata/android/en-US/changelogs/102.txt b/fastlane/metadata/android/en-US/changelogs/102.txt new file mode 100644 index 0000000000000000000000000000000000000000..9e56e0bb7eb1d3db4d3b2b5ee8218dc6f106d720 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/102.txt @@ -0,0 +1,2 @@ +## Fixed +* Fix segmented control button (#1175) diff --git a/fastlane/metadata/android/en-US/changelogs/103.txt b/fastlane/metadata/android/en-US/changelogs/103.txt new file mode 100644 index 0000000000000000000000000000000000000000..5166a0d42650a96d4012b22588b1b99877fc780f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/103.txt @@ -0,0 +1,3 @@ +## Fixed +* Fix Units-of-Measurement (UoM) handling (#1146) +* Reload widgets when encountering events for unknown ones. (#1181) diff --git a/fastlane/metadata/android/en-US/changelogs/104.txt b/fastlane/metadata/android/en-US/changelogs/104.txt new file mode 100644 index 0000000000000000000000000000000000000000..8e74b4870da55ff5a8e9972b072c38e3c11a8cd7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/104.txt @@ -0,0 +1,2 @@ +## Changed +* Improve HABPanel viewer (#1172) diff --git a/fastlane/metadata/android/en-US/changelogs/105.txt b/fastlane/metadata/android/en-US/changelogs/105.txt new file mode 100644 index 0000000000000000000000000000000000000000..d5c83456f74d84e65a8e0ed3d78e16afce70faad --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/105.txt @@ -0,0 +1,2 @@ +## Fixed +* Fix section switch button handling (#1185) diff --git a/fastlane/metadata/android/en-US/changelogs/106.txt b/fastlane/metadata/android/en-US/changelogs/106.txt new file mode 100644 index 0000000000000000000000000000000000000000..223a12d5132301ce9e053388c4362306ab4ab73b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/106.txt @@ -0,0 +1,2 @@ +## Fixed +* Allow user added CAs (#1187) diff --git a/fastlane/metadata/android/en-US/changelogs/107.txt b/fastlane/metadata/android/en-US/changelogs/107.txt new file mode 100644 index 0000000000000000000000000000000000000000..dcc478df2f10287a3719d024e2b73f3a5b42152f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/107.txt @@ -0,0 +1,5 @@ +## Fixed +* Scale SVG correctly (#1194) + +## Added +* Add app shortcuts (#1166) diff --git a/fastlane/metadata/android/en-US/changelogs/108.txt b/fastlane/metadata/android/en-US/changelogs/108.txt new file mode 100644 index 0000000000000000000000000000000000000000..0d97db69df9cb816c66b2c01e2821032e4e456e7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/108.txt @@ -0,0 +1,2 @@ +## Fixed +* Fix crash with MapView if item has no state (#1195) diff --git a/fastlane/metadata/android/en-US/changelogs/109.txt b/fastlane/metadata/android/en-US/changelogs/109.txt new file mode 100644 index 0000000000000000000000000000000000000000..707e3b8d30f2bafbd22970cb5767eecf05086e84 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/109.txt @@ -0,0 +1,6 @@ +## Fixed +* Fix webviews to openHAB server with untrusted certificate (#1191) +* Fix crash on startup on Android Kitkat (#1206) + +## Added +* Show hints if using wrong protocol to wrong ports (#1189) diff --git a/fastlane/metadata/android/en-US/changelogs/110.txt b/fastlane/metadata/android/en-US/changelogs/110.txt new file mode 100644 index 0000000000000000000000000000000000000000..1810d7d81c4d1496b34811d536eeef844fd97fe2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/110.txt @@ -0,0 +1,2 @@ +## Changed +* Updated translations diff --git a/fastlane/metadata/android/en-US/changelogs/111.txt b/fastlane/metadata/android/en-US/changelogs/111.txt new file mode 100644 index 0000000000000000000000000000000000000000..edf38ca64c57e79c530df9de8943003ccc461751 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/111.txt @@ -0,0 +1,5 @@ +## Fixed +* Fix selection of HABPanel panel (#1214) + +## Added +* Show shortcut to notification settings for Oreo and above (#1167) diff --git a/fastlane/metadata/android/en-US/changelogs/112.txt b/fastlane/metadata/android/en-US/changelogs/112.txt new file mode 100644 index 0000000000000000000000000000000000000000..a3767190e37d8a20607474070edeb71832712092 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/112.txt @@ -0,0 +1,2 @@ +## Fixed +* Fix NPE in colorpicker (#1220) diff --git a/fastlane/metadata/android/en-US/changelogs/113.txt b/fastlane/metadata/android/en-US/changelogs/113.txt new file mode 100644 index 0000000000000000000000000000000000000000..b7ecf10843e2c90606ae7795149ea801751a9101 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/113.txt @@ -0,0 +1,2 @@ +## Fixed +* Don't play notification sound for summary notification. (#1227) diff --git a/fastlane/metadata/android/en-US/changelogs/114.txt b/fastlane/metadata/android/en-US/changelogs/114.txt new file mode 100644 index 0000000000000000000000000000000000000000..3514f0dd7139748472694f1d9b2c21629c3abde2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/114.txt @@ -0,0 +1,3 @@ +• Add app shortcuts +• Add ability to view HABPanel +• Fix issues with units, visibility and webview widgets diff --git a/fastlane/metadata/android/en-US/changelogs/115.txt b/fastlane/metadata/android/en-US/changelogs/115.txt new file mode 100644 index 0000000000000000000000000000000000000000..c39c32202393912bb2b88090ea671e734ff810d4 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/115.txt @@ -0,0 +1,2 @@ +## Changed +* Enable twopane mode for portrait (#1215) diff --git a/fastlane/metadata/android/en-US/changelogs/116.txt b/fastlane/metadata/android/en-US/changelogs/116.txt new file mode 100644 index 0000000000000000000000000000000000000000..6bff52b24fd80c73f67da054b8a152ec6ef0d84f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/116.txt @@ -0,0 +1,5 @@ +## Fixed +* Catch more exceptions in ParsedState (#1235) + +## Changed +* Migrate from GCM to FCM SDK. (#1226) diff --git a/fastlane/metadata/android/en-US/changelogs/117.txt b/fastlane/metadata/android/en-US/changelogs/117.txt new file mode 100644 index 0000000000000000000000000000000000000000..b2b66cac0611fef62e75a6142b713dc81e716afc --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/117.txt @@ -0,0 +1,6 @@ +## Fixed +* FCM crash (#1246) +* Fix SSE cancel behavior. (#1237) + +## Changed +* Improve log output (#1234) diff --git a/fastlane/metadata/android/en-US/changelogs/118.txt b/fastlane/metadata/android/en-US/changelogs/118.txt new file mode 100644 index 0000000000000000000000000000000000000000..8ba1424ab3982720b2c4159a9d73410878bc24c2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/118.txt @@ -0,0 +1,2 @@ +## Fixed +* Wait up to 2 seconds for connection to become available (#1232) diff --git a/fastlane/metadata/android/en-US/changelogs/119.txt b/fastlane/metadata/android/en-US/changelogs/119.txt new file mode 100644 index 0000000000000000000000000000000000000000..4b323168a93ab6197664609148d334629cdc0427 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/119.txt @@ -0,0 +1,3 @@ +## Fixed +* Fix crashes (#1256, #1251, #1249) +* Fix HABPanel not shown if using authentication (#1254) diff --git a/fastlane/metadata/android/en-US/changelogs/120.txt b/fastlane/metadata/android/en-US/changelogs/120.txt new file mode 100644 index 0000000000000000000000000000000000000000..9bbe46ff3401664428280d6327cf3298f83b7ff0 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/120.txt @@ -0,0 +1,3 @@ +## Fixed +* Improve WebView fragment (#1257) +* Only send unit in Setpoint/Slider updates if needed. (#1250) diff --git a/fastlane/metadata/android/en-US/changelogs/121.txt b/fastlane/metadata/android/en-US/changelogs/121.txt new file mode 100644 index 0000000000000000000000000000000000000000..7f86880de63677cfeea3dffa37e43d0bc069482c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/121.txt @@ -0,0 +1,2 @@ +## Fixed +* Include item value in page title. (#1255) diff --git a/fastlane/metadata/android/en-US/changelogs/122.txt b/fastlane/metadata/android/en-US/changelogs/122.txt new file mode 100644 index 0000000000000000000000000000000000000000..7604c24a4755d4b9bbecee811a8922f7bbbeeda3 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/122.txt @@ -0,0 +1,2 @@ +## Added +* Add "Turn off" action to demo mode snackbar (#1258) diff --git a/fastlane/metadata/android/en-US/changelogs/123.txt b/fastlane/metadata/android/en-US/changelogs/123.txt new file mode 100644 index 0000000000000000000000000000000000000000..577026df43dd35ce7aafd88cfd2bc35cd194e282 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/123.txt @@ -0,0 +1,5 @@ +• Add app shortcuts +• Add ability to view HABPanel +• Fix issues with units, visibility and webview widgets + +(like 2.6.0, but with some bug fixes) diff --git a/fastlane/metadata/android/en-US/changelogs/124.txt b/fastlane/metadata/android/en-US/changelogs/124.txt new file mode 100644 index 0000000000000000000000000000000000000000..7fcee0c797baa0ebf2a8ea1e9db93fc7eee772ad --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/124.txt @@ -0,0 +1,5 @@ +## Added +* Send alarm clock to openHAB (#1137) + +## Fixed +* Prevent swipe-to-refresh if swipe isn't started at top of page. (#1260) diff --git a/fastlane/metadata/android/en-US/changelogs/125.txt b/fastlane/metadata/android/en-US/changelogs/125.txt new file mode 100644 index 0000000000000000000000000000000000000000..b1f7e9fed0e351110adfd1c4e197cbde66611c74 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/125.txt @@ -0,0 +1,2 @@ +## Added +* Change slider size according to screen size (#1259) diff --git a/fastlane/metadata/android/en-US/changelogs/126.txt b/fastlane/metadata/android/en-US/changelogs/126.txt new file mode 100644 index 0000000000000000000000000000000000000000..9f0f700d6b3b3752f1eb0d04a069bc7e291c2126 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/126.txt @@ -0,0 +1,4 @@ +## Fixed +* Improve number handling (#1269) +* Assign correct colors to swipe refresh layouts (#1276) +* Fix crashes (#1277, #1278, #1279) diff --git a/fastlane/metadata/android/en-US/changelogs/127.txt b/fastlane/metadata/android/en-US/changelogs/127.txt new file mode 100644 index 0000000000000000000000000000000000000000..7baa730266513b763e59e1f4065016271dc095db --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/127.txt @@ -0,0 +1,2 @@ +## Added +Add up/down buttons to setpoint widgets (#1052) diff --git a/fastlane/metadata/android/en-US/changelogs/128.txt b/fastlane/metadata/android/en-US/changelogs/128.txt new file mode 100644 index 0000000000000000000000000000000000000000..ef548b540528dd39509df21c40722b8b68471f3f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/128.txt @@ -0,0 +1,5 @@ +## Added +* Support writing NFC tags of Setpoint and Slider (#1283) + +## Changed +* Improve icons (#1218) diff --git a/fastlane/metadata/android/en-US/changelogs/129.txt b/fastlane/metadata/android/en-US/changelogs/129.txt new file mode 100644 index 0000000000000000000000000000000000000000..4ce200a8d789c7dd1d3565646dbb43a93afa9fd7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/129.txt @@ -0,0 +1,2 @@ +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/130.txt b/fastlane/metadata/android/en-US/changelogs/130.txt new file mode 100644 index 0000000000000000000000000000000000000000..4ce200a8d789c7dd1d3565646dbb43a93afa9fd7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/130.txt @@ -0,0 +1,2 @@ +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/131.txt b/fastlane/metadata/android/en-US/changelogs/131.txt new file mode 100644 index 0000000000000000000000000000000000000000..55b2d454f5a3b7c861ca4220b45d885c8b6f756c --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/131.txt @@ -0,0 +1,2 @@ +## Changed +* Report error during load of sitemap back to user (#1292) diff --git a/fastlane/metadata/android/en-US/changelogs/132.txt b/fastlane/metadata/android/en-US/changelogs/132.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c5a86d6067b8b34eac2a22a6d29dec4d0d2d677 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/132.txt @@ -0,0 +1,7 @@ +## Added +* Add failure reason to FCM status (#1316) +* Add retry button to MissingConfigurationFragment (#1311) +* Create "row click" shortcuts for a few widgets (#1285) + +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/133.txt b/fastlane/metadata/android/en-US/changelogs/133.txt new file mode 100644 index 0000000000000000000000000000000000000000..36c6990d14a7d11d41427c9fe10ec6527d5f8724 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/133.txt @@ -0,0 +1,6 @@ +## Fixed +* Commands get executed only on refresh (#1330) +* After installing voice recognition app, widgets still don't work (#1324) + +## Changed +* Updated translations diff --git a/fastlane/metadata/android/en-US/changelogs/134.txt b/fastlane/metadata/android/en-US/changelogs/134.txt new file mode 100644 index 0000000000000000000000000000000000000000..6895f5ce8b769606da198c1b476cbf702610df4d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/134.txt @@ -0,0 +1,3 @@ +## Fixed +* Improve connection check reachability (#1318) +* Full screen mode is exited when opening settings/about (#1312) diff --git a/fastlane/metadata/android/en-US/changelogs/135.txt b/fastlane/metadata/android/en-US/changelogs/135.txt new file mode 100644 index 0000000000000000000000000000000000000000..4a3f7624ac24c86ee1d81bc0257d14afbec4e1aa --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/135.txt @@ -0,0 +1,3 @@ +## Fixed +* Fix PreferencesActivity crash on API < 17 (#1325) +* Fetch about screen information async (#1317) diff --git a/fastlane/metadata/android/en-US/changelogs/136.txt b/fastlane/metadata/android/en-US/changelogs/136.txt new file mode 100644 index 0000000000000000000000000000000000000000..80fd3d07af0d54f83ed3cd49354cbb95738d6140 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/136.txt @@ -0,0 +1,2 @@ +## Fixed +* Improve location parsing (#1345) diff --git a/fastlane/metadata/android/en-US/changelogs/137.txt b/fastlane/metadata/android/en-US/changelogs/137.txt new file mode 100644 index 0000000000000000000000000000000000000000..5f5ae77a81822f248cced56d31fba0c43e9f9bad --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/137.txt @@ -0,0 +1,6 @@ +## Fixed +* Implement row click action for section switch (#1331) +* Crash when using voice recognition (#1302) + +## Changed +* Improve NFC item updates (#1302) diff --git a/fastlane/metadata/android/en-US/changelogs/138.txt b/fastlane/metadata/android/en-US/changelogs/138.txt new file mode 100644 index 0000000000000000000000000000000000000000..179c394e18e9fd862a78c0099ff57df401f3df1a --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/138.txt @@ -0,0 +1,2 @@ +## Fixed +* Open links with target="_blank" in system browser diff --git a/fastlane/metadata/android/en-US/changelogs/139.txt b/fastlane/metadata/android/en-US/changelogs/139.txt new file mode 100644 index 0000000000000000000000000000000000000000..fe38d0820b9d4b442f07ba3e0cfacdf10132ec7f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/139.txt @@ -0,0 +1,6 @@ +## Fixed +* Fix crash in SectionSwitchViewHolder#handleRowClick() (#1361) +* Fix location parsing sanity check. (#1360) + +## Changed +* Updated translations diff --git a/fastlane/metadata/android/en-US/changelogs/140.txt b/fastlane/metadata/android/en-US/changelogs/140.txt new file mode 100644 index 0000000000000000000000000000000000000000..02aa0dd26ad5b14e4286f314dc8dcd9337d5b7b2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/140.txt @@ -0,0 +1,3 @@ +• Send alarm clock time to openHAB server +• Add up and down buttons to Setpoint widgets +• Clicking the widget row now toggles some widgets diff --git a/fastlane/metadata/android/en-US/changelogs/141.txt b/fastlane/metadata/android/en-US/changelogs/141.txt new file mode 100644 index 0000000000000000000000000000000000000000..7909b130bc9998cf9be86dd127cff3ce6df3e1b9 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/141.txt @@ -0,0 +1,3 @@ +## Added +* Support MapView in foss flavor (#1358) +* Add ability to create sitemap shortcuts (#1357) diff --git a/fastlane/metadata/android/en-US/changelogs/142.txt b/fastlane/metadata/android/en-US/changelogs/142.txt new file mode 100644 index 0000000000000000000000000000000000000000..f6982433bd7f9df2bfe2fffe0a16a908f7f36941 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/142.txt @@ -0,0 +1,7 @@ +## Fixed +* Fix crash in SVG parsing (#1352) +* Fix chart and image widget scaling. (#1382) +* Parse missing fields from SSE update events. (#1383) + +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/143.txt b/fastlane/metadata/android/en-US/changelogs/143.txt new file mode 100644 index 0000000000000000000000000000000000000000..5b0748e3f2b762c1e03f07ec701db6a293b871b5 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/143.txt @@ -0,0 +1,2 @@ +## Changed +* Update App Store description (#1350) diff --git a/fastlane/metadata/android/en-US/changelogs/144.txt b/fastlane/metadata/android/en-US/changelogs/144.txt new file mode 100644 index 0000000000000000000000000000000000000000..6c5a1369424dd87127362acc59d86aff924beef1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/144.txt @@ -0,0 +1,2 @@ +## Added +* Add Tasker/Locale action plugin (#1338) diff --git a/fastlane/metadata/android/en-US/changelogs/87.txt b/fastlane/metadata/android/en-US/changelogs/87.txt new file mode 100644 index 0000000000000000000000000000000000000000..7bfb6f462c56bf0a79483d972221849fe1c228f0 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/87.txt @@ -0,0 +1,6 @@ +## Changed +* Decrease font size in selection widget dialog (#1057) +* Treat "height" parameter in webview as max height (#1056) + +## Fixed +* Show sitemap name in action bar if label is not set (#1050) diff --git a/fastlane/metadata/android/en-US/changelogs/88.txt b/fastlane/metadata/android/en-US/changelogs/88.txt new file mode 100644 index 0000000000000000000000000000000000000000..4ce200a8d789c7dd1d3565646dbb43a93afa9fd7 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/88.txt @@ -0,0 +1,2 @@ +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/89.txt b/fastlane/metadata/android/en-US/changelogs/89.txt new file mode 100644 index 0000000000000000000000000000000000000000..fde2b97d436b31bd91d9e205288c4f9dfba0e0e1 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/89.txt @@ -0,0 +1,3 @@ +## Fixed +* Fix slow chart loading issue (#1061) +* Start image refresh after phone comes back from sleep (#1073) diff --git a/fastlane/metadata/android/en-US/changelogs/90.txt b/fastlane/metadata/android/en-US/changelogs/90.txt new file mode 100644 index 0000000000000000000000000000000000000000..ffd3d24cbe58979567f7d20ef344258512badaa3 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/90.txt @@ -0,0 +1,2 @@ +## Fixed +* Fix crash when resetting default sitemap and no connection is available (#1078) diff --git a/fastlane/metadata/android/en-US/changelogs/91.txt b/fastlane/metadata/android/en-US/changelogs/91.txt new file mode 100644 index 0000000000000000000000000000000000000000..c270c3a62bfcb5484922dc1bd4ef86aa8304321b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/91.txt @@ -0,0 +1,9 @@ +## Fixed +* Slow chart loading issue (#1061) +* Start image refresh after phone comes back from sleep (#1073) + +## Changed +* Treat "height" parameter in webview as max height (#1056) + +## Added +* Add support for Server Sent Events (SSE) (#847) diff --git a/fastlane/metadata/android/en-US/changelogs/92.txt b/fastlane/metadata/android/en-US/changelogs/92.txt new file mode 100644 index 0000000000000000000000000000000000000000..74f7ae2fbf8afa536a0f09ad142f8ef229d2fe71 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/92.txt @@ -0,0 +1,3 @@ +## Fixed +* Fix NullPointerException in Setpoint (#1079) +* Webview no longer displays Grafana panels (#1087) diff --git a/fastlane/metadata/android/en-US/changelogs/93.txt b/fastlane/metadata/android/en-US/changelogs/93.txt new file mode 100644 index 0000000000000000000000000000000000000000..ab148fab4831780c3ef7720cae9406ffa3787f82 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/93.txt @@ -0,0 +1,4 @@ +## Fixed +* Fix crash when receiving notification on RTL device (#1085) +* Fix crash when resetting default sitemap and no connection is available. 2nd try (#1092) + diff --git a/fastlane/metadata/android/en-US/changelogs/94.txt b/fastlane/metadata/android/en-US/changelogs/94.txt new file mode 100644 index 0000000000000000000000000000000000000000..95a9d3bf8d1c79e16815964a690f6b801a75859b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/94.txt @@ -0,0 +1,2 @@ +## Fixed +* Hide notification settings when running Oreo or higher (#1101) diff --git a/fastlane/metadata/android/en-US/changelogs/95.txt b/fastlane/metadata/android/en-US/changelogs/95.txt new file mode 100644 index 0000000000000000000000000000000000000000..50a7f84be14ad731eb4e60a82219c638bbae5f43 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/95.txt @@ -0,0 +1,3 @@ +• Fix issue with Grafana graphs +• Hide notification sound settings on Android 8 and above. Please use Notification channels to change it. +• Stability improvements diff --git a/fastlane/metadata/android/en-US/changelogs/96.txt b/fastlane/metadata/android/en-US/changelogs/96.txt new file mode 100644 index 0000000000000000000000000000000000000000..04d7373efb1a30c9109042e8556f6ce6a2686b20 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/96.txt @@ -0,0 +1,7 @@ +## Fixed +* Don't use notification grouping on Android M (API 23) (#1108) +* Fix NegativeArraySizeException in MjpegInputStream (#1080) + +## Changed +* Use switches instead of checkboxes in settings (#1089) +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/97.txt b/fastlane/metadata/android/en-US/changelogs/97.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdc8fe35d46bc9803d6c5d0fa72a3d90d412f50b --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/97.txt @@ -0,0 +1,7 @@ +## Fixed +* Fix back arrow behavior in about (#1122) +* Fix SSE sitemap event handling. (#1109) +* Show correct settings when offline (#1123) + +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/98.txt b/fastlane/metadata/android/en-US/changelogs/98.txt new file mode 100644 index 0000000000000000000000000000000000000000..045b1e78170de50307dc47ca1b661ea32f6138d8 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/98.txt @@ -0,0 +1,8 @@ +## Fixed +* Show URL settings hint when URL is not set (#1138) + +## Added +* Add activity to view and share adb log (#1135) + +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/changelogs/99.txt b/fastlane/metadata/android/en-US/changelogs/99.txt new file mode 100644 index 0000000000000000000000000000000000000000..065349645459f6c4c0683964bcaaec8df382f3f5 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/99.txt @@ -0,0 +1,5 @@ +## Added +* Show hint if a page doesn't contain visible elements (#1145) + +## Changed +* Bump dependencies diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/full_description.txt b/fastlane/metadata/android/es-ES/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..cc06653389d3100ed169fa10b674a351eea3751a 100644 --- a/fastlane/metadata/android/es-ES/full_description.txt +++ b/fastlane/metadata/android/es-ES/full_description.txt @@ -1,42 +1,38 @@ -openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation +openHAB - "potenciando el hogar inteligente" - automatización del hogar en código abierto independiente del proveedor y la tecnología -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. -Try out new features and give early feedback! -You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. +Las versiones basadas en F-Droid no tienen soporte para vista de mapa, FCM o informes de errores, y no podrán recibir notificaciones push de openHAB Cloud. +¡Pruebe las nuevas características y repórtenos su experiencia! +Puede instalar la versión beta junto a la <a href="https://f-droid.org/packages/org.openhab.habdroid/">versión estable</a>. -<b>Important note</b> +<b>Nota importante</b> -You need an openHAB server for this app +Usted necesita un servidor openHAB para usar esta aplicación -openHAB is a Java-based open-source home automation platform that integrates and combines a vast range of different smart home systems and technologies into one single solution. -On top of the unified abstraction layer all connected devices are available for the overarching automation rule engines and different user interfaces. +openHAB es una plataforma para la automatización del hogar (domótica) basada en código abierto Java, que integra y combina una gran variedad de sistemas y tecnologías para el hogar inteligente en una única solución. +Por encima de la capa unificada de abstracción, todos los dispositivos conectados están disponibles para los motores de reglas generales de automatización y diferentes interfaces de usuario. -<b>Supported Products</b> +<b>Productos compatibles</b> -Over 200 specific add-ons provide support for brands, devices, technologies and communication protocols. Examples are Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Discover all available add-ons and supported devices and/or functions at: https://www.openhab.org/addons/ +Más de 200 complementos específicos proporcionan soporte para distintas marcas, dispositivos, tecnologías y protocolos de comunicación. Algunos ejemplos son Z-Wave, Philips Hue, Amazon eco, Chromecast y Sonos. Descubra todos los complementos disponibles, dispositivos compatibles y otras funciones en: https://www.openhab.org/addons/ -• Home Automation Solutions: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... -• Lighting: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight, ... -• Heating: Max!, Nest, Vitotronic, Heatmiser, ... -• Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... -• Security: ZoneMinder, DSC, ... -• Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... -• Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... +• Soluciones domóticas: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,... +• Iluminación: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... +• Calefacción: Max!, Nest, Vitotronic, Heatmiser,... +• Entretenimiento: TV Samsung, TV LG, Sonos, AVR Pioneer, Squeezebox, Kodi, Plex,... +• Seguridad: ZoneMinder, DSC,... +• Protocolos abiertos: HTTP, TCP/UDP, MQTT, puerto serie,... +• Automation apps: Includes plugins for Tasker and Locale +• Usos especiales: Minecraft, Tesla coche, servicios,... -<b>Open Source Community</b> +<b>Comunidad de código abierto</b> -The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org -When you find an issue please report it in the forum or at https://github.com/openhab/openhab-android/issues -If you want to translate the app into your language join us at https://crowdin.com/project/openhab-android +La iniciativa de código abierto openHAB apoya con fuerza a su vibrante comunidad. El foro con más de 13.000 usuarios registrados es un lugar donde puede encontrar orientación, ayuda e inspiración. Únase al foro de la comunidad de openHAB en https://community.openhab.org +Cuando encuentre un problema, por favor, repórtelo en el foro o en https://github.com/openhab/openhab-android/issues +Si quiere traducir la aplicación a su idioma, únase a nosotros en https://crowdin.com/project/openhab-android -<b>openHAB Foundation</b> +<b>fundación openHAB</b> -The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org +La openHAB Foundation e.V. es una organización sin ánimo de lucro cuya misión es difundir las posibilidades y ventajas de las soluciones libres y abiertas para los hogares inteligentes. Conozca la misión y los servicios de la fundación en https://www.openhabfoundation.org -<b>Anti Features</b> -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Política de privacidad: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/short_description.txt b/fastlane/metadata/android/es-ES/short_description.txt index 0879a5320b8950d35351b11e025bdf31c1350f2c..d189e4a459f383aa5a831b8ab1cf61c88f46c866 100644 --- a/fastlane/metadata/android/es-ES/short_description.txt +++ b/fastlane/metadata/android/es-ES/short_description.txt @@ -1 +1 @@ -Vendor and technology agnostic open source home automation \ No newline at end of file +Domótica de código abierto independiente de proveedores y tecnologías \ No newline at end of file diff --git a/fastlane/metadata/android/es-US/full_description.txt b/fastlane/metadata/android/es-US/full_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..cc06653389d3100ed169fa10b674a351eea3751a --- /dev/null +++ b/fastlane/metadata/android/es-US/full_description.txt @@ -0,0 +1,38 @@ +openHAB - "potenciando el hogar inteligente" - automatización del hogar en código abierto independiente del proveedor y la tecnología + +Las versiones basadas en F-Droid no tienen soporte para vista de mapa, FCM o informes de errores, y no podrán recibir notificaciones push de openHAB Cloud. +¡Pruebe las nuevas características y repórtenos su experiencia! +Puede instalar la versión beta junto a la <a href="https://f-droid.org/packages/org.openhab.habdroid/">versión estable</a>. + +<b>Nota importante</b> + +Usted necesita un servidor openHAB para usar esta aplicación + +openHAB es una plataforma para la automatización del hogar (domótica) basada en código abierto Java, que integra y combina una gran variedad de sistemas y tecnologías para el hogar inteligente en una única solución. +Por encima de la capa unificada de abstracción, todos los dispositivos conectados están disponibles para los motores de reglas generales de automatización y diferentes interfaces de usuario. + +<b>Productos compatibles</b> + +Más de 200 complementos específicos proporcionan soporte para distintas marcas, dispositivos, tecnologías y protocolos de comunicación. Algunos ejemplos son Z-Wave, Philips Hue, Amazon eco, Chromecast y Sonos. Descubra todos los complementos disponibles, dispositivos compatibles y otras funciones en: https://www.openhab.org/addons/ + +• Soluciones domóticas: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,... +• Iluminación: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... +• Calefacción: Max!, Nest, Vitotronic, Heatmiser,... +• Entretenimiento: TV Samsung, TV LG, Sonos, AVR Pioneer, Squeezebox, Kodi, Plex,... +• Seguridad: ZoneMinder, DSC,... +• Protocolos abiertos: HTTP, TCP/UDP, MQTT, puerto serie,... +• Automation apps: Includes plugins for Tasker and Locale +• Usos especiales: Minecraft, Tesla coche, servicios,... + +<b>Comunidad de código abierto</b> + +La iniciativa de código abierto openHAB apoya con fuerza a su vibrante comunidad. El foro con más de 13.000 usuarios registrados es un lugar donde puede encontrar orientación, ayuda e inspiración. Únase al foro de la comunidad de openHAB en https://community.openhab.org +Cuando encuentre un problema, por favor, repórtelo en el foro o en https://github.com/openhab/openhab-android/issues +Si quiere traducir la aplicación a su idioma, únase a nosotros en https://crowdin.com/project/openhab-android + +<b>fundación openHAB</b> + +La openHAB Foundation e.V. es una organización sin ánimo de lucro cuya misión es difundir las posibilidades y ventajas de las soluciones libres y abiertas para los hogares inteligentes. Conozca la misión y los servicios de la fundación en https://www.openhabfoundation.org + + +Política de privacidad: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/es-US/short_description.txt b/fastlane/metadata/android/es-US/short_description.txt new file mode 100644 index 0000000000000000000000000000000000000000..d189e4a459f383aa5a831b8ab1cf61c88f46c866 --- /dev/null +++ b/fastlane/metadata/android/es-US/short_description.txt @@ -0,0 +1 @@ +Domótica de código abierto independiente de proveedores y tecnologías \ No newline at end of file diff --git a/fastlane/metadata/android/fi-FI/full_description.txt b/fastlane/metadata/android/fi-FI/full_description.txt index 36188008e533e930a02b381cd2fc535d25e0deed..360c1d1df7315ef4c6932e29e66bb2384eaeb524 100644 --- a/fastlane/metadata/android/fi-FI/full_description.txt +++ b/fastlane/metadata/android/fi-FI/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - Teknologia- ja valmistajariippumatonta, avoimen lähdekoodin kotiautomaatiota -F-Droid sovelluskaupasta ladatuissa koontiversioissa on tuki karttanäytölle, mutta GCM ja kaatumisilmoitukset ovat pois käytöstä eikä ilmoitukset openHAB pilvestä ole käytettävissä. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Kokeilla uusia ominaisuuksia ja anna pian palautetta! Voit asentaa beta version <a href="https://f-droid.org/packages/org.openhab.habdroid/">vakaan version</a> rinnalle. @@ -21,8 +21,8 @@ Yli 200 yksilöllistä lisäosaa antaa tuen erilaisille tuotteille, laitteille, • Viihde: LG TV, Samsung TV, Plex, Pioneer AVR, Squeezebox, Sonos, Kodi, ... • Turvallisuus: ZoneMinder, DSC,... • Avoimet protokollat: TCP/UDP, HTTP, Serial, MQTT... +• Automation apps: Includes plugins for Tasker and Locale • Erikoissovellukset: Minecraft, Tesla auto, sääpalvelut,... -• ... <b>Avoimen lähdekoodin yhteisö</b> @@ -34,9 +34,5 @@ Jos haluat kääntää tämän sovelluksen omalle kielellesi niin liity mukaan o openHAB Säätiö e.V. on yleishyödyllinen järjestö, jonka tehtävänä on kertoa yleisölle ilmaisten ja vapaiden älykotiratkaisuiden mahdollisuuksista ja eduista. Lisätietoja järjestön tehtävästä ja palveluista löydät osoitteesta https://www.openhabfoundation.org -<b>Anti-ominaisuudet</b> - -Sovellus on merkitty lipulla ”NonFreeAsset”, koska openHAB kuvaketta ei ole vapaalla lisenssillä. - Tietosuojakäytäntö: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt index d3833249cac7426ca54f7e16c11b4a6381a9b397..92b48f73a1ce56ade1c0beab0880187823ebc3ee 100644 --- a/fastlane/metadata/android/fr-FR/full_description.txt +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -1,6 +1,6 @@ -openHAB - "empowering the smart home" - une solution très simple de domotique libre pour votre maison connectée +openHAB - "empowering the smart home" - une solution de domotique libre et indépendante de tout fournisseur pour votre maison connectée -Les versions publiées via F-Droid n'incluent pas le système GCM et les rapports de plantage, et elles ne seront pas en mesure de recevoir les notifications push depuis l’openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Essayer les nouvelles fonctionnalités et donner un premier retour d'expérience ! Vous pouvez installer la version bêta en parallèle de la <a href="https://f-droid.org/packages/org.openhab.habdroid/">version stable</a>. @@ -21,8 +21,8 @@ Plus de 200 modules offrant le support de nombreuses marques, équipements, tech • Multimedia : Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Securité : ZoneMinder, DSC, ... • Protocoles ouverts : HTTP, TCP/UDP, MQTT, port série, ... +• Automation apps: Includes plugins for Tasker and Locale • Cas d'utilisation spéciaux : Minecraft, Tesla Car, Weather Services, ... -• ... <b>Communauté open source</b> @@ -34,9 +34,5 @@ Si vous souhaitez traduire l'application dans votre langue, rejoignez-nous sur h La fondation openHAB est une organisation à but non lucratif qui a pour mission d'informer le public sur les possibilités et les bénéfices des solutions domotiques libres et open source. Découvrez les missions et les services de la fondation sur https://www.openhabfoundation.org -<b>Fonctionnalités à usage réservé</b> -L'application est marquée comme "NonFreeAsset" car l'icône de openHAB n'est pas sous licence libre. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Politique de Confidentialité : https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/he-IL/full_description.txt b/fastlane/metadata/android/he-IL/full_description.txt index 0b6a5410be4e74b30c32d71609152844651060f3..f451da895112eea7c9b49915e527688fc2a558ba 100644 --- a/fastlane/metadata/android/he-IL/full_description.txt +++ b/fastlane/metadata/android/he-IL/full_description.txt @@ -1,6 +1,6 @@ openHAB - "העצמת הבית החכם" - אוטומצית הבית החכם לאנשים וחברות בראייה טכנולוגית מתקדמת מבוסס קוד פתוח -תוכנות עבור F-Droid מכילות תצוגת מיפוי, GCM ודיווחי שגיאה על התרסקות הוסרו ולא יוכלו לקבל התראות בדחיפה מענן openHAB. +תוכנות עבור F-Droid מכילות תצוגת מיפוי, FCM ודיווחי שגיאה על התרסקות הוסרו ולא יוכלו לקבל התראות בדחיפה מענן openHAB. נסה תכונות חדשות וספר לנו מה דעתך! באפשרותך להתקין את גירסת הבטא לצד <a href="https://f-droid.org/packages/org.openhab.habdroid/">הגרסה היציבה</a>. @@ -21,8 +21,8 @@ openHAB היא פלטפורמת אוטומציה ביתית מבוססת קוד • בידור ביתי: טלוויזיות סמסונג, טלוויזיות אל-ג'י, Sonos ,AVR, פיוניר ,Squeezebox, Kodi, Plex,... • אבטחה: ZoneMinder, DSC,... • פרוטוקולים פתוחים: HTTP, TCP/UDP, MQTT, יציאה טורית,... +• Automation apps: Includes plugins for Tasker and Locale • שימושים מיוחדים: Minecraft, מכוניות טסלה, שירותי מזג אוויר,... -• ... <b>קהילת הקוד הפתוח</b> @@ -34,9 +34,5 @@ openHAB היא פלטפורמת אוטומציה ביתית מבוססת קוד קרן openHAB הוא ארגון ללא מטרות רווח שמשימתו היא לחנך את הציבור על האפשרויות והיתרונות של שימוש בפתרונות חופשיים ופתוחים של בית חכם. למד אודות משימתו ושירותיו של הארגון ב https://www.openhabfoundation.org -<b>תכונות שצריך לשים לב אליהן</b> - -האפליקציה מסומנת בדגל עם הדגל "NonFreeAsset", כי הצלמית של openHAB אינה תחת רישיון חופשי. - מדיניות פרטיות: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/hu-HU/full_description.txt b/fastlane/metadata/android/hu-HU/full_description.txt index 76a4ec72efea914e175d4df0d83cd9380b172319..e7074a064f30c4869b979c7684658f8f6e463aeb 100644 --- a/fastlane/metadata/android/hu-HU/full_description.txt +++ b/fastlane/metadata/android/hu-HU/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - szállító és technológia független nyílt forráskódú okosotthon vezérlő szoftver -A F-Droidra készült példány tartalmaz map nézetet is, GCM és hibajelentés el lett belőle távolítva és nem képes push értesítések fogadására az openHAB felhőről. +A F-Droidra verziónak van térképnézet támogatása, FCM és hibajelentést el lett belőle távolítva, illetve nem képes push értesítések fogadására az openHAB felhőből. Próbáld ki az új funkciókat és adj korai visszajelzést! A béta változatot a <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabil verzió</a> mellé is telepítheted. @@ -22,8 +22,8 @@ Több mint 200 külön kiegészítő támogatja a márkákat, eszközöket, tech • Otthoni szórakozás: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Biztonság: ZoneMinder, DSC, ... • Nyitott protokollok: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Speciális felhasználói lehetőségek: Minecraft, Tesla Car, Időjárási szolgáltatások, ... -• ... <b>Nyílt forráskódú közösség</b> @@ -35,9 +35,5 @@ Ha szeretnéd az alkamazást lefordítani a saját nyelvedre, akkor csatlakozz h A openHAB Alapítvány e.V. egy nonprofit szervezet, azzal a küldetéssel, hogy megismertesse a közvéleményt a nyílt és okos otthon megoldások előnyeivel és lehetőségeivel. Tudj meg többet az alapítvány küldetéséről és szolgáltatásairól: https://www.openhabfoundation.org -<b>Anti funkciók</b> -Az alkalmazás meg van jelölve a "NonFreeAsset" zászlóval, mert az openHAB ikon nincs szabad licensz alatt. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Adatvédelem: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/id-ID/full_description.txt b/fastlane/metadata/android/id-ID/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/id-ID/full_description.txt +++ b/fastlane/metadata/android/id-ID/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/it-IT/full_description.txt b/fastlane/metadata/android/it-IT/full_description.txt index e77d6490c93b1a3226d9c541d33da0fe89632479..48aa3df0274d2e6293b5a13878eeaa617c90f797 100644 --- a/fastlane/metadata/android/it-IT/full_description.txt +++ b/fastlane/metadata/android/it-IT/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - open source home automation indipendente da tecnologia e produttore -Il compilato su F-Droid ha il support map-view, GCM e crash reporting rimosso e non sara' in grado di ricevere notifiche da openHAB cloud. +Il compilato su F-Droid ha il supporto per map-view, FCM e crash reporting rimosso e non sara' in grado di ricevere notifiche da openHAB cloud. Prova le nuove funzioni e dai un feedback quanto prima! È possibile installare la versione beta insieme alla <a href="https://f-droid.org/packages/org.openhab.habdroid/">versione stabile</a>. @@ -13,7 +13,7 @@ Usando un livello unificato di astrazione, tutti i dispositivi collegati sono di <b>Prodotti supportati</b> -Oltre 200 componenti aggiuntivi forniscono il supporto per marche, dispositivi, tecnologie e protocolli di comunicazione. Esempi sono Z-Wave, Philips Hue, Amazon Eco, Chromecast e Sonos. Scopri tutti i componenti aggiuntivi disponibili, dispositivi supportati e funzionalita' a: https://www.openhab.org/addons/ +Oltre 200 componenti aggiuntivi forniscono il supporto per marche, dispositivi, tecnologie e protocolli di comunicazione. Esempi sono Z-Wave, Philips Hue, Amazon Echo, Chromecast e Sonos. Scopri tutti i componenti aggiuntivi disponibili, dispositivi supportati e funzionalita' a: https://www.openhab.org/addons/ • Soluzioni di domotica: Z-Wave, EnOcean, Netatmo, Homematic, Insteon,... • Illuminazione: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... @@ -21,12 +21,12 @@ Oltre 200 componenti aggiuntivi forniscono il supporto per marche, dispositivi, • Home Entertainment: TV Samsung, TV LG, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Sicurezza: ZoneMinder, DSC,... • Protocolli aperti: HTTP, TCP/UDP, MQTT, seriale,... +• Automation apps: Includes plugins for Tasker and Locale • Funzioni speciali: Minecraft, Tesla Car, servizi meteo,... -• ... <b>Comunità Open Source</b> -L'iniziativa openHAB open source e' sostenuta dalla sua vivace comunità. Il forum con oltre 13.000 utenti registrati è un posto dove trovare la guida, l'aiuto e l'ispirazione. Partecipa al forum della comunità openHAB a https://community.openhab.org +L’iniziativa openHAB open source è fortemente supportata dalla sua vivace community. Il forum con oltre 13.000 utenti registrati è un posto dove trovare la guida, l'aiuto e l'ispirazione. Partecipa al forum della comunità openHAB a https://community.openhab.org Quando si verifica un problema, segnalalo nel forum o al https://github.com/openhab/openhab-android/issues Se vuoi aiutare a tradurre l'applicazione nella tua lingua, visita https://crowdin.com/project/openhab-android @@ -34,9 +34,5 @@ Se vuoi aiutare a tradurre l'applicazione nella tua lingua, visita https://crowd openHAB Foundation e.V. e' una organizzazione nonprofit, con la missione di educare il pubblico sulle possibilita' e benefici di una soluzione domotica libera e aperta. Approfondisci la missione e i servizi della fondazione a https://www.openhabfoundation.org -<b>Anti Features</b> - -L'app è contrassegnata con il flag "NonFreeAsset", perché l'icona di openHAB non è licenza libera. - Informativa sulla privacy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/it-IT/short_description.txt b/fastlane/metadata/android/it-IT/short_description.txt index d9485c57c37801c4dd4cca731ebf02e4223cf9bb..074fb9eba3aa9de81c32f40ac80cf81a68a5d708 100644 --- a/fastlane/metadata/android/it-IT/short_description.txt +++ b/fastlane/metadata/android/it-IT/short_description.txt @@ -1 +1 @@ -Soluzione domotica open source e indipendente dalla tecnologia e dai produttori \ No newline at end of file +Soluzione domotica open source indipendente dalla tecnologia e dai produttori \ No newline at end of file diff --git a/fastlane/metadata/android/ja-JP/full_description.txt b/fastlane/metadata/android/ja-JP/full_description.txt index 2a4247812fcbfdd453c1d6b37c60ec5b419a23da..e2517b9e7f4db830bf6a91bdd6ada7c432a2eb99 100644 --- a/fastlane/metadata/android/ja-JP/full_description.txt +++ b/fastlane/metadata/android/ja-JP/full_description.txt @@ -1,8 +1,8 @@ openHAB - "スマートホームに力を与える" - ベンダーや技術に依存しないオープンソースのホームオートメーション -F-Droid のビルドは、マップビューのサポート、GCM、クラッシュレポートが削除されていて openHAB クラウドからプッシュ通知を受信することはできません。 +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. 新しい機能をお試しの上、フィードバックしてください! -You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. +<a href="https://f-droid.org/packages/org.openhab.habdroid/">安定版</a> の他、ベータ版をインストールすることができます。 <b>重要な注意事項</b> @@ -13,7 +13,7 @@ openHAB は、Java ベースのオープンソース ホームオートメーシ <b>サポートされている製品</b> -200 以上の特定のアドオンは、ブランド、デバイス ・技術・通信プロトコルをサポートします。 例えば、Z-Wave、Philips Hue、アマゾンエコー、Chromecast、Sonos です。 +200 以上の特定のアドオンは、ブランド、デバイス ・技術・通信プロトコルをサポートします。 例えば、Z-Wave、Philips Hue、アマゾンエコー、Chromecast、Sonos です。 利用可能なアドオンやサポートされているデバイス、および機能は: https://www.openhab.org/addons/ • ホームオートメーション ソリューション: Z-Wave、EnOcean、Netatmo、Homematic、Insteon ... • 照明: Philips Hue、Ikea Trådfri、LIFX、lutron社、Milight ... @@ -21,8 +21,8 @@ openHAB は、Java ベースのオープンソース ホームオートメーシ • ホーム エンターテインメント: サムスンのテレビ、LG のテレビ、Sonos、パイオニア AVR、Squeezebox、Kodi、Plex ... • セキュリティ: ZoneMinder、DSC ... • オープンなプロトコル: HTTP、TCP/UDP、MQTT、シリアル ... +• Automation apps: Includes plugins for Tasker and Locale • 特別なユースケース: Minecraft, テスラ自動車, 天気サービス ... -• ... <b>オープンソース コミュニティ</b> @@ -34,9 +34,5 @@ openHAB オープンソース イニシアチブは、その活気に満ちた openHAB 財団は、フリーでオープンなスマートホームソリューションの可能性と利点について一般の人々に教育することを使命とする非営利組織です。 財団の使命とサービスについて学んでください https://www.openhabfoundation.org -<b>アンチ機能</b> -openHAB アイコンは自由ライセンスではないので、アプリは"非自由資産"にマークされています。 - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +プライバシー ポリシー: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ja-JP/short_description.txt b/fastlane/metadata/android/ja-JP/short_description.txt index 0879a5320b8950d35351b11e025bdf31c1350f2c..abe923e31550f9881cd918be311e35d0c194d2b9 100644 --- a/fastlane/metadata/android/ja-JP/short_description.txt +++ b/fastlane/metadata/android/ja-JP/short_description.txt @@ -1 +1 @@ -Vendor and technology agnostic open source home automation \ No newline at end of file +ベンダーや技術に依存しないオープンソースのホーム・オートメーション \ No newline at end of file diff --git a/fastlane/metadata/android/ko-KR/full_description.txt b/fastlane/metadata/android/ko-KR/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/ko-KR/full_description.txt +++ b/fastlane/metadata/android/ko-KR/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/lt-LT/full_description.txt b/fastlane/metadata/android/lt-LT/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/lt-LT/full_description.txt +++ b/fastlane/metadata/android/lt-LT/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/nl-NL/full_description.txt b/fastlane/metadata/android/nl-NL/full_description.txt index d02b00c915b5136fa94229dcc8fbdc97688f876f..688369b899be7519c1f5572acf3f960ce088d1e2 100644 --- a/fastlane/metadata/android/nl-NL/full_description.txt +++ b/fastlane/metadata/android/nl-NL/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - leverancier en technologie onafhankelijke open source domotica software -Bij de F-Droid versie is kaartweergave ondersteuning, GCM en crash rapportage verwijderd en de app zal geen push-meldingen kunnen ontvangen van de openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Probeer nieuwe functies uit en geef alvast feedback! U kunt de beta-versie installeer samen met de <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabiele versie</a>. @@ -21,8 +21,8 @@ Meer dan 200 specifieke add-ons bieden ondersteuning voor merken, apparaten, tec • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Beveiliging: ZoneMinder, DSC,... • Open protocollen: HTTP, TCP/UDP, MQTT, serieel, ... +• Automation apps: Includes plugins for Tasker and Locale • Speciale toepassingen: Minecraft, Tesla auto, weerdiensten,... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ Als u de app wilt vertalen in uw taal bezoek ons dan op https://crowdin.com/proj De openHAB Foundation e.V. is een non-profit organisatie met als doel het publiek inzicht te geven in de mogelijkheden en voordelen van gratis en open smart home oplossingen. Lees meer over de missie en de diensten van de foundation op https://www.openhabfoundation.org -<b>Anti Features</b> - -De app is gemarkeerd als "NonFreeAsset", omdat het openHAB pictogram niet onder een vrije licentie beschikbaar is. - Privacybeleid: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/no-NO/full_description.txt b/fastlane/metadata/android/no-NO/full_description.txt index da5b85ab1a53cc5f9f6780b1e89fb3c7213f526c..5dd4342d4483101ca7379149a66b429f4a5b31ff 100644 --- a/fastlane/metadata/android/no-NO/full_description.txt +++ b/fastlane/metadata/android/no-NO/full_description.txt @@ -1,6 +1,6 @@ openHAB - ”empowering the smart home” - leverandør- og teknikkuavhengig hjemmeautomasjon med åpen kildekode -Builds på F-Droid har kartvisning-støtte, GCM og krasj-rapportering fjernet og vil ikke kunne motta push varsler fra openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Prøv ut nye funksjoner og gi tidlig tilbakemelding! Du kan installere betaversjonen sammen med den <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabile versjonen</a>. @@ -21,8 +21,8 @@ Over 200 tillegg gir support for varemerker, enheter, teknikk og kommunikasjonsp • Hjemmeunderholdning: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Sikkerhet: ZoneMinder, DSC,... • Åpne protokoller: HTTP, TCP/UDP, MQTT, seriell,... +• Automation apps: Includes plugins for Tasker and Locale • Spesielle useCases: Minecraft, Tesla bil, værmeldingstjenester,... -• ... <b>Åpen kildekode Community</b> @@ -34,9 +34,5 @@ Hvis du vil oversette app til ditt språk bli med oss på https://crowdin.com/pr openHAB Foundation e.V. er en ideell organisasjon med oppgave å opplyse offentligheten om mulighetene og fordelene av fri og åpen smarte-hjem løsninger. Lær om oppdraget og tjenestene til stiftelsen under https://www.openhabfoundation.org -<b>Anti funksjoner</b> - -Programmet er flagget med flagget "NonFreeAsset" fordi ikonet openHAB ikke er under en fri lisens. - Personvern: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/pl-PL/full_description.txt b/fastlane/metadata/android/pl-PL/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..14753c9724637db62761ceffb83b2a20393a52c4 100644 --- a/fastlane/metadata/android/pl-PL/full_description.txt +++ b/fastlane/metadata/android/pl-PL/full_description.txt @@ -1,42 +1,39 @@ -openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation +openHAB - "empowering the smart home" - niezależne i otwarte oprogramowanie dla automatyki domowej -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. -Try out new features and give early feedback! +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +Wypróbuj nowe funkcje i dziel się uwagami! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. -<b>Important note</b> +<b>Istotne kwestie</b> -You need an openHAB server for this app +Potrzebujesz serwera openHAB dla tej aplikacji -openHAB is a Java-based open-source home automation platform that integrates and combines a vast range of different smart home systems and technologies into one single solution. -On top of the unified abstraction layer all connected devices are available for the overarching automation rule engines and different user interfaces. +openHAB jest otwartą platformą dla automatyki domowej opartą na Javie, która integruje szeroki zakres różnych systemów i technologi "smart home" w jedno rozwiązanie. +Na górnej ujednoliconej warstwie abstrakcji wszystkie połączone urządzenia są dostępne dla silnika reguł a także różnych interfejsów użytkownika. -<b>Supported Products</b> +<b>Wspierane Produkty</b> -Over 200 specific add-ons provide support for brands, devices, technologies and communication protocols. Examples are Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Discover all available add-ons and supported devices and/or functions at: https://www.openhab.org/addons/ +Ponad 200 dodatków wspierających marki, urządzenia, technologie i protokoły komunikacji. Jednymi z przykładów są Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Odkryj wszystkie dostępne dodatki i obsługiwane urządzenia i/lub funkcje na: https://www.openhab.org/addons/ -• Home Automation Solutions: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... -• Lighting: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight, ... -• Heating: Max!, Nest, Vitotronic, Heatmiser, ... -• Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... -• Security: ZoneMinder, DSC, ... -• Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... -• Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... +• Rozwiązania automatyki domowej: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... +• Oświetlenie: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... +• Ogrzewanie: Max!, Nest, Vitotronic, Heatmiser,... +• Kina domowego: Samsung TV, LG TV, Sonos, pionier AVR, ściskać, Kodi, Plex,... +• Bezpieczeństwo: ZoneMinder, DSC,... +• Otwarte protokoły: HTTP, TCP/UDP, MQTT, Serial,... +• Automation apps: Includes plugins for Tasker and Locale +Specjalne zastosowania: Minecraft, Samochody Tesla, Prognoza Pogody, ... -<b>Open Source Community</b> +<b>Społeczność Open Source</b> -The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org -When you find an issue please report it in the forum or at https://github.com/openhab/openhab-android/issues -If you want to translate the app into your language join us at https://crowdin.com/project/openhab-android +Inicjatywa open source openHAB mocno wspiera swoją żywą społeczność. Forum z ponad 13 000 zarejestrowanymi użytkownikami to miejsce, gdzie możesz +znaleźć wskazówki, pomoc i inspirację. Dołącz do forum społeczności openHAB na https://community.openhab.org +Po znalezieniu problemu złoś go na forum lub na https://github.com/openhab/openhab-android/issues +Jeśli chcesz przetłumaczyć tę aplikację na swój język dołącz do nas na https://crowdin.com/project/openhab-android -<b>openHAB Foundation</b> +<b>Fundacja openHAB</b> -The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org +Fundacja openHAB jest organizacją non-profit z misją informowania o możliwościach i korzyściach z używania wolnych i otwartych rozwiązań dla inteligentnego domu. Dowiedz się więcej o misji i usługach fundacji na https://www.openhabfoundation.org -<b>Anti Features</b> -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Polityka prywatności: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/pt-BR/full_description.txt b/fastlane/metadata/android/pt-BR/full_description.txt index 897518fdb32392e95625d3c90a724b3e68a533ca..4b3e29e15eec0eefd57f9cf8b93fb787b067c70b 100644 --- a/fastlane/metadata/android/pt-BR/full_description.txt +++ b/fastlane/metadata/android/pt-BR/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - fornecedor e tecnologia agnóstica de código aberto de automação residencial -As compilaçoes de F-Droid possuem suporte à visualização de mapas, GCM e relatórios de erros removidos não serão capazes de receber notificações do openHAB Cloud. +As compilaçoes de F-Droid possuem suporte à visualização de mapas, FCM e relatórios de erros removidos não serão capazes de receber notificações do openHAB Cloud. Experimente novos recursos e dê feedback antecipado! Você pode instalar a versão beta junto da <a href="https://f-droid.org/packages/org.openhab.habdroid/">versão estável</a>. @@ -21,8 +21,8 @@ Mais de 200 add-ons específicos fornecem suporte para marcas, dispositivos, tec • Entretenimento: TV Samsung, TV LG, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Segurança: ZoneMinder, DSC,... • Protocolos abertos: HTTP, TCP/UDP, MQTT, Serial,... +• Automation apps: Includes plugins for Tasker and Locale • Especiais: Minecraft, carros Tesla, Serviços Climáticos,... -• ... <b>Comunidade Open Source</b> @@ -34,9 +34,5 @@ Se você quiser traduzir o aplicativo para o seu idioma, junte-se a nós em http A Fundação openHAB e.V. é uma organização sem fins lucrativos com a missão de educar o público sobre as possibilidades e benefícios de soluções de automação residencial gratuitas e abertas. Aprenda sobre a missão e os serviços da fundação em https://www.openhabfoundation.org -<b>Anti-recursos</b> - -O aplicativo é sinalizado com o sinalizador "NonFreeAsset", porque o ícone do openHAB não está sob uma licença gratuita. - Política de privacidade: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/pt-PT/full_description.txt b/fastlane/metadata/android/pt-PT/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/pt-PT/full_description.txt +++ b/fastlane/metadata/android/pt-PT/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ro-RO/full_description.txt b/fastlane/metadata/android/ro-RO/full_description.txt index abe2d6af9e93dd8d090067b58e09e24f00e6d500..b55157f2f9b3993741d6007b518422b2bd3056c3 100644 --- a/fastlane/metadata/android/ro-RO/full_description.txt +++ b/fastlane/metadata/android/ro-RO/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - automatizare de locuințe open source, independent de producatori și tehnologii -Build-urile F-Droid au suport pentru vizualizarea hărților. Au eliminat GCM, raportarea erorilor și nu vor putea primi notificări de la openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Încercați funcții noi și lăsați primele impresii! Se poate instala versiunea beta alături de <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Iluminat: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight, ... • Sisteme de divertisment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Securitate: ZoneMinder, DSC, ... • Protocoale deschise: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Cazuri speciale de utilizare: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Comunitate open source</b> @@ -34,9 +34,5 @@ Dacă vrei să traduci aplicația în limba ta, alătură-te nouă la https://cr Fundația openHAB e.V. este o organizație nonprofit cu misiunea de a educa publicul cu privire la posibilitățile și beneficiile soluțiilor libere și deschise pentru locuințe inteligente. Află mai multe despre misiunea și serviciile fundației la https://www.openhabfoundation.org -<b>Anti Features</b> - -Aplicația este marcată ca "NonFreeAsset", deoarece pictograma openHAB nu are o licență liberă. - Politica de confidențialitate: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/ru-RU/full_description.txt b/fastlane/metadata/android/ru-RU/full_description.txt index 03f23c5155e52ea385dced44cbd142089871605a..9247406066e76a5684d2059a41846ce0a256d87f 100644 --- a/fastlane/metadata/android/ru-RU/full_description.txt +++ b/fastlane/metadata/android/ru-RU/full_description.txt @@ -1,7 +1,7 @@ openHAB - "Empowering the Smart Home" - открытое ПО для автоматизации "умного дома", не зависящее от производителей и технологий -Версия для F-Droid поддерживает просмотр карт. GCM и отчёты о сбоях удалены. Приложение не будет получать уведомления от openHub Cloud. -Попробуйте новые функции и быстрее оставьте о них отзыв! +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +Попробуйте новые функции и оставьте о них отзыв! Вы можете установить бета версию параллельно со <a href="https://f-droid.org/packages/org.openhab.habdroid/">стабильной версией</a>. <b>Важное примечание</b> @@ -13,7 +13,7 @@ openHAB - это платформа домашней автоматизации <b>Поддерживаемые продукты</b> -Более 200 надстроек обеспечивают поддержку устройств, технологий и протоколов связи различных производителей. Для примера: Z-Wave, Philips Hue, Amazon Echo, Chromecast и Sonos. Доступные дополнения для устройств и дополнительного функционала можно найти по адресу https://www.openhab.org/addons/ +Более 200 надстроек обеспечивают поддержку устройств, технологий и протоколов связи различных производителей. Для примера: Z-Wave, Philips Hue, Amazon Echo, Chromecast и Sonos. Доступные дополнения, список поддерживаемых устройств и дополнительного функционала можно найти по адресу https://www.openhab.org/addons/ • Решения для автоматизации: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... • Освещение: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... @@ -21,12 +21,12 @@ openHAB - это платформа домашней автоматизации • Домашняя электроника: Samsung TV, LG TV, Sonos, Pioner AVR, Squeezebox, Kodi, Plex, ... • Охранные системы: ZoneMinder, DSC, ... • Открытые протоколы: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Дополнительно: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Сообщество Open Source</b> -Сообщество openHAB строго придерживается принципов Open Source. Форум, с более чем 13 000 зарегистрированных пользователей - это место, где можно найти рекомендации, помощь и идеи для новых решений. Присоединяйтесь к сообществу openHAB на https://community.openhab.org +Сообщество openHAB строго придерживается принципов Open Source. Форум с более чем 13 000 зарегистрированных пользователей - это место, где можно найти рекомендации, помощь и идеи для новых решений. Присоединяйтесь к сообществу openHAB на https://community.openhab.org Если вы найдете ошибку, пожалуйста, сообщите об этом на форуме или на https://github.com/openhab/openhab-android/issues Если Вы хотите перевести приложение на свой язык - присоединяйтесь к нам на https://crowdin.com/project/openhab-android @@ -34,9 +34,5 @@ openHAB - это платформа домашней автоматизации openHAB Foundation является некоммерческой организацией, информирующей общественность о возможностях и преимущества свободных и открытых решениях "умного дома". Узнайте о задачах openHAB Foundation на https://www.openhabfoundation.org -<b>AntiFeatures</b> - -Приложение помечено флагом «NonFreeAsset», поскольку логотип openHAB не является свободно используемым. - Политика конфиденциальности: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/sr-SP/full_description.txt b/fastlane/metadata/android/sr-SP/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/sr-SP/full_description.txt +++ b/fastlane/metadata/android/sr-SP/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/sv-SE/full_description.txt b/fastlane/metadata/android/sv-SE/full_description.txt index 4b57b2533cd599ab119cb63e7ef2683a4d9c1ce6..269d979e941427f92fe7367cf56036edb07b52bd 100644 --- a/fastlane/metadata/android/sv-SE/full_description.txt +++ b/fastlane/metadata/android/sv-SE/full_description.txt @@ -1,6 +1,6 @@ openHAB - ”empowering the smart home” - leverantörs- och teknikoberoende hemautomation med öppen källkod -Versionerna på F-Droid har stöd för kartvisning, GCM och kraschrapportering och kan inte ta emot pushnotifieringar ifrån openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Testa nya funktioner och ge tidig feedback! Beta-versionen kan installeras parallellt med den <a href="https://f-droid.org/packages/org.openhab.habdroid/">stabila versionen</a>. @@ -21,8 +21,8 @@ Ovanpå det enhetliga abstraktionslagret är alla anslutna enheter tillgängliga • Hemunderhållning: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... • Säkerhet: ZoneMinder, DSC,... • Öppna protokoll: HTTP, TCP/UDP, MQTT, seriell,... +• Automation apps: Includes plugins for Tasker and Locale • Särskilda tillämpningar: Minecraft, Tesla, vädertjänster,... -• ... <b>Öppen källkods-gemenskapen</b> @@ -34,9 +34,5 @@ Om du vill översätta appen till ditt språk gå med oss på https://crowdin.co openHAB Foundation är en icke vinstdrivande organisation som har som mål att utbilda allmänheten kring möjligheterna och fördelarna med friga och öppna hemautomatiseringslösningar. Lär dig mer om uppdraget och tjänsterna på https://www.openhabfoundation.org -<b>Anti-Features</b> - -Appen är markerad som "NonFreeAsset" eftersom ikonen för openHAB inte omfattas av någon fri licens. - Integritetspolicy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/tl-PH/full_description.txt b/fastlane/metadata/android/tl-PH/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/tl-PH/full_description.txt +++ b/fastlane/metadata/android/tl-PH/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/tr-TR/full_description.txt b/fastlane/metadata/android/tr-TR/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..934d459de491cbc71bdc404256aa933efbe0c72c 100644 --- a/fastlane/metadata/android/tr-TR/full_description.txt +++ b/fastlane/metadata/android/tr-TR/full_description.txt @@ -1,42 +1,38 @@ -openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation +openHAB - "empowering the smart home" - Birbirinden farklı sistemleri destekleyen ve sağlayan açık kaynak kodlu akıllı ev otomasyonu -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. -Try out new features and give early feedback! -You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +Yeni özellikleri deneyin ve erken geri bildirimde bulunun! +Beta sürümünü <a href="https://f-droid.org/packages/org.openhab.habdroid/">kararlı sürüm</a> ile birlikte kurabilirsiniz. -<b>Important note</b> +<b>Önemli not</b> -You need an openHAB server for this app +Bu uygulama için openHAB sunucusuna ihtiyacınız var -openHAB is a Java-based open-source home automation platform that integrates and combines a vast range of different smart home systems and technologies into one single solution. -On top of the unified abstraction layer all connected devices are available for the overarching automation rule engines and different user interfaces. +openHAB, çok çeşitli akıllı ev sistemleri ve teknolojilerini tek bir çözümde entegre eden, Java tabanlı bir açık kaynaklı ev otomasyon platformudur. +Birleşik soyutlama katmanının üstünde, tüm bağlı cihazlar genel otomasyon kural motorları ve farklı kullanıcı arayüzleri için kullanılabilir. -<b>Supported Products</b> +<b>Desteklenen Ürünler</b> -Over 200 specific add-ons provide support for brands, devices, technologies and communication protocols. Examples are Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Discover all available add-ons and supported devices and/or functions at: https://www.openhab.org/addons/ +200'den fazla özel eklenti, markalar, cihazlar, teknolojiler ve iletişim protokolleri için destek sağlar. Örnekler Z-Wave, Philips Hue, Amazon Echo, Chromecast ve Sonos'tur. Mevcut tüm eklentileri ve desteklenen cihazları ve / veya işlevleri şu adreste keşfedin: https://www.openhab.org/addons/ -• Home Automation Solutions: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... -• Lighting: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight, ... -• Heating: Max!, Nest, Vitotronic, Heatmiser, ... -• Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... -• Security: ZoneMinder, DSC, ... -• Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... -• Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... +Ev Otomasyonu Çözümleri: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... +• Aydınlatma: Philips Hue, IKEA Trådfri, LIFX, Lutron, Milight,... +• Isıtma: Max!, Nest, Vitotronic, Heatmiser,... +• Ev Eğlence: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex,... +• Güvenlik: ZoneMinder, DSC,... +• Açık protokoller: HTTP, TCP/UDP, MQTT, Serial,... +• Automation apps: Includes plugins for Tasker and Locale +• Özel Kullanım Örnekleri: Minecraft, Tesla Car, Hava Durumu hizmetleri,... -<b>Open Source Community</b> +<b>Açık Kaynak Topluluğu</b> -The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org -When you find an issue please report it in the forum or at https://github.com/openhab/openhab-android/issues -If you want to translate the app into your language join us at https://crowdin.com/project/openhab-android +openHAB açık kaynak girişimi, canlı topluluğunu güçlü bir şekilde destekliyor. Forum 13,000 kayıtlı kullanıcı ile rehberlik, yardım ve ilham bulmak için bir yerdir. openHAB topluluk forumu' na katıl: https://community.openhab.org +Bir sorun bulduğunuzda lütfen bunu forumda veya https://github.com/openhab/openhab-android/issues adresinde bildirin +Uygulamayı kendi dilinize çevirmek isterseniz https://crowdin.com/project/openhab-android adresinden bize katılın -<b>openHAB Foundation</b> +<b>openHAB Vakfı</b> -The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org +openHAB Vakfı e.V. kamuoyunu serbest ve açık akıllı ev çözümlerinin olanakları ve faydaları hakkında eğitmek misyonu ile kar amacı gütmeyen bir organizasyondur. -<b>Anti Features</b> -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Gizlilik Politikası: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/tr-TR/short_description.txt b/fastlane/metadata/android/tr-TR/short_description.txt index 0879a5320b8950d35351b11e025bdf31c1350f2c..5e74eae64f05e8352708c936df7d5effc7178f8c 100644 --- a/fastlane/metadata/android/tr-TR/short_description.txt +++ b/fastlane/metadata/android/tr-TR/short_description.txt @@ -1 +1 @@ -Vendor and technology agnostic open source home automation \ No newline at end of file +Satıcı ve teknoloji agnostik açık kaynaklı ev otomasyonu \ No newline at end of file diff --git a/fastlane/metadata/android/uk-UA/full_description.txt b/fastlane/metadata/android/uk-UA/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..e3dcbc03a0e3bbaa7e166eab6b731f469a565f73 100644 --- a/fastlane/metadata/android/uk-UA/full_description.txt +++ b/fastlane/metadata/android/uk-UA/full_description.txt @@ -1,42 +1,38 @@ -openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation +openHAB - "empowering the smart home" - відкрите ПЗ для автоматизації "розумного будинку", яке не залежить від виробників і технологій -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. -Try out new features and give early feedback! -You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. +Версія для F-Droid підтримує перегляд карт, FCM і звіти про падіння видалені, не зможе отримувати сповіщення від openHAB Cloud. +Спробуйте нові функції і залиште швидкий відгук! +Ви можете встановити бета версію разом зі <a href="https://f-droid.org/packages/org.openhab.habdroid/">стабільною версією</a>. -<b>Important note</b> +<b>Важлива примітка</b> -You need an openHAB server for this app +Для цього додатку вам необхідний сервер openHAB -openHAB is a Java-based open-source home automation platform that integrates and combines a vast range of different smart home systems and technologies into one single solution. -On top of the unified abstraction layer all connected devices are available for the overarching automation rule engines and different user interfaces. +openHAB - платформа домашньої автоматизації з відкритим початковим кодом, створена на базі Java і об'єднуюча велику кількість систем "розумного будинку" в монолітне рішення. +Поверх програмних шарів, усі під'єднані пристрої доступні для глобальних правил автоматизації і різноманітних користувацьких інтерфейсів. -<b>Supported Products</b> +<b>Підтримувані продукти</b> -Over 200 specific add-ons provide support for brands, devices, technologies and communication protocols. Examples are Z-Wave, Philips Hue, Amazon Echo, Chromecast and Sonos. Discover all available add-ons and supported devices and/or functions at: https://www.openhab.org/addons/ +Більше 200 додатків, які забезпечують підтримку пристроїв, технологій і протоколів передачі даних від різних виробників. Наприклад: Z-Wave, Philips Hue, Amazon Echo, Chromecast, Sonos, Zigbee, Google Assistant. Відкрийте для себе усі доступні доповнення, підтримувані пристрої та/або функції на: https://www.openhab.org/addons/ -• Home Automation Solutions: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... -• Lighting: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight, ... -• Heating: Max!, Nest, Vitotronic, Heatmiser, ... -• Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... -• Security: ZoneMinder, DSC, ... -• Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... -• Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... +• Рішення для домашньої автоматизації: Z-Wave, EnOcean, Netatmo, Homematic, Insteon, ... +• Освітлення: Philips Hue, Ikea Trådfri, LIFX, Lutron, Milight,... +• Опалення: Max!, Nest, Vitotronic, Heatmiser, ... +• Розважальні мультимедійні системи: Samsung TV, LG TV, Sonos, Pioner AVR, Squeezebox, Kodi, Plex, ... +• Безпека: ZoneMinder, DSC, ... +• Відкриті протоколи: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale +• Додаткові варіанти застосування: Minecraft, Tesla Car, Weather Services, ... -<b>Open Source Community</b> +<b>Open Source спільнота</b> -The openHAB open source initiative strongly supports its vibrant community. The forum with over 13,000 registered users is a place to find guidance, help and inspiration. Join the openHAB community forum over at https://community.openhab.org -When you find an issue please report it in the forum or at https://github.com/openhab/openhab-android/issues -If you want to translate the app into your language join us at https://crowdin.com/project/openhab-android +Ініціатори openHAB open source максимально підтримують свою спільноту. Форум, на якому зареєстровано більше 13 000 користувачів - те саме місце, де ви зможете знайти вказівки, рекомендації, допомогу і натхнення. Приєднуйтеся до спільноти openHAB на https://community.openhab.org +Якщо знайдете помилку, будь ласка, повідомте про це на форумі, або на https://github.com/openhab/openhab-android/issues +Якщо хочете перекласти програму своєю мовою - приєднуйтеся до нас на https://crowdin.com/project/openhab-android <b>openHAB Foundation</b> -The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org +openHAB Foundation - це неприбуткова організація, яка поставила собі за мету розповісти суспільству про можливості і переваги вільних і відкритих рішень "розумного будинку". Дізнайтеся більше про цілі і послуги openHAB Foundation на https://www.openhabfoundation.org -<b>Anti Features</b> -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - - -Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file +Політика конфіденційності: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/uk-UA/short_description.txt b/fastlane/metadata/android/uk-UA/short_description.txt index 0879a5320b8950d35351b11e025bdf31c1350f2c..418ff0851bcb052a3e992b60ef3e18e120653a0a 100644 --- a/fastlane/metadata/android/uk-UA/short_description.txt +++ b/fastlane/metadata/android/uk-UA/short_description.txt @@ -1 +1 @@ -Vendor and technology agnostic open source home automation \ No newline at end of file +Відкрите ПЗ для домашньої автоматизації, неупереджене до виробників і технологій \ No newline at end of file diff --git a/fastlane/metadata/android/vi-VN/full_description.txt b/fastlane/metadata/android/vi-VN/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/vi-VN/full_description.txt +++ b/fastlane/metadata/android/vi-VN/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/yi-DE/full_description.txt b/fastlane/metadata/android/yi-DE/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/yi-DE/full_description.txt +++ b/fastlane/metadata/android/yi-DE/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/fastlane/metadata/android/zh-CN/full_description.txt index 208dd0ba18e265d40fbadfad2cf569fe09bcb9d0..cb5fc310289f2f74a8550bb4942112253f9fba5c 100644 --- a/fastlane/metadata/android/zh-CN/full_description.txt +++ b/fastlane/metadata/android/zh-CN/full_description.txt @@ -1,6 +1,6 @@ openHAB - "智能化家居" - 开源家居自动化供应商与技术 -F-Droid 版本拥有地图预览支持、Google 云信息并移除了崩溃报告且无法从 openHAB 云接收推送信息。 +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. 尝试新功能并提供早期反馈! 您可以在安装<a href="https://f-droid.org/packages/org.openhab.habdroid/">稳定版</a>的情况下安装测试版。 @@ -21,8 +21,8 @@ openHAB 是一款基于 Java 的开源家居自动化平台,整合了大量不 • 家庭娱乐:三星电视、LG TV、Sonos、Pioneer AVR、Squeezebox、Kodi、Plex··· • 安全:ZoneMinder、DSC··· • 开源协议:HTTP、TCP/UDP、MQTT、串口··· +• Automation apps: Includes plugins for Tasker and Locale • 特殊用例:我的世界、特斯拉汽车、天气服务··· -• ... <b>开源社区</b> @@ -34,9 +34,5 @@ openHAB 的开源鼎力支持了其充满活力的社区。 社区共有超过 1 openHAB 基金会是一个致力于向公共提出开源智能家居解决方案的无限可能与无限优点的非盈利组织。 请在 https://www.openhabfoundation.org 处了解本基金会的任务及服务 -<b>不利功能</b> - -此应用程序被标记为 “非免费资源”,因为 openHAB 并未通过自由许可授权。 - 隐私政策:https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/fastlane/metadata/android/zh-TW/full_description.txt b/fastlane/metadata/android/zh-TW/full_description.txt index 53c6cb6c5d35df8e7a3ffdfa4c9e24f4ee7e05a9..be15c271f0c54ca772adb02b3009493fe21f3ddb 100644 --- a/fastlane/metadata/android/zh-TW/full_description.txt +++ b/fastlane/metadata/android/zh-TW/full_description.txt @@ -1,6 +1,6 @@ openHAB - "empowering the smart home" - vendor and technology agnostic open source home automation -The builds on F-Droid have map view support, GCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. +The builds on F-Droid have FCM and crash reporting removed and will not be able to receive push notifications from openHAB Cloud. Try out new features and give early feedback! You can install the beta version alongside the <a href="https://f-droid.org/packages/org.openhab.habdroid/">stable version</a>. @@ -21,8 +21,8 @@ Over 200 specific add-ons provide support for brands, devices, technologies and • Home Entertainment: Samsung TV, LG TV, Sonos, Pioneer AVR, Squeezebox, Kodi, Plex, ... • Security: ZoneMinder, DSC, ... • Open Protocols: HTTP, TCP/UDP, MQTT, Serial, ... +• Automation apps: Includes plugins for Tasker and Locale • Special UseCases: Minecraft, Tesla Car, Weather Services, ... -• ... <b>Open Source Community</b> @@ -34,9 +34,5 @@ If you want to translate the app into your language join us at https://crowdin.c The openHAB Foundation e.V. is a nonprofit organization with the mission to educate the public about the possibilities and benefits of free and open smart home solutions. Learn about the mission and the services of the foundation under https://www.openhabfoundation.org -<b>Anti Features</b> - -The app is flagged with the "NonFreeAsset" flag, because the openHAB icon is not under a free license. - Privacy policy: https://www.openhabfoundation.org/privacy.html \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 425aeae6a77817d01c336d1dfe88b9ec88ca773f..eafc5c809becf3a18d96f0880e2d6f1d8e76d8a9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ -#Mon Jan 14 23:58:27 CET 2019 +#Fri Apr 19 12:53:26 CEST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip -distributionSha256Sum=9af7345c199f1731c187c96d3fe3d31f5405192a42046bafa71d846c3d9adacb +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip \ No newline at end of file diff --git a/mobile/build.gradle b/mobile/build.gradle index 62b7697066517b842544a9aa47f10b17db1718a2..653393c1b2a126b810d3717493efe8b9cd5e17f8 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -11,18 +11,15 @@ buildscript { jcenter() } dependencies { - classpath 'com.google.gms:google-services:4.1.0' - classpath 'io.fabric.tools:gradle:1.26.1' - classpath files('libs/gradle-witness.jar') + classpath 'com.google.gms:google-services:4.2.0' + classpath 'io.fabric.tools:gradle:1.29.0' } } apply plugin: 'com.android.application' -apply plugin: 'jacoco-android' -if(!isFoss) { +if (!isFoss) { apply plugin: 'io.fabric' } -apply plugin: 'witness' android { buildToolsVersion '28.0.3' @@ -33,8 +30,8 @@ android { applicationId "org.openhab.habdroid" minSdkVersion 16 targetSdkVersion 27 - versionCode 86 - versionName "2.3.6-beta" + versionCode 144 + versionName "2.7.4-beta" multiDexEnabled true testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' } @@ -51,7 +48,6 @@ android { buildConfigField 'boolean', IS_DEVELOPER, 'true' buildConfigField "java.util.Date", "buildTime", "new java.util.Date(" + System.currentTimeMillis() + "L)" pseudoLocalesEnabled true - testCoverageEnabled true } } @@ -59,7 +55,7 @@ android { productFlavors { full { dimension "license" - manifestPlaceholders = [ maps_api_key : project.findProperty("mapsApiKey") ?: "" ] + manifestPlaceholders = [maps_api_key: project.findProperty("mapsApiKey") ?: ""] } foss { dimension "license" @@ -105,65 +101,65 @@ configurations { } dependencies { - implementation 'com.android.support:cardview-v7:28.0.0' -// implementation 'com.android.support:appcompat-v7:28.0.0' - implementation "androidx.appcompat:appcompat:1.0.2" - implementation "androidx.legacy:legacy-support-v4:1.0.0" - implementation "androidx.recyclerview:recyclerview:1.0.0" - implementation "com.google.android.material:material:1.0.0" - implementation 'androidx.multidex:multidex:2.0.0' - implementation 'org.jmdns:jmdns:3.5.4' - implementation 'com.squareup.okhttp3:okhttp:3.11.0' + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.google.android.material:material:1.0.0' + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.work:work-runtime:2.0.1' + implementation 'org.jmdns:jmdns:3.5.5' + implementation 'com.squareup.okhttp3:okhttp:3.12.1' + implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1' implementation 'com.github.heremaps:oksse:0.9.0' implementation 'com.larswerkman:HoloColorPicker:1.5' - implementation 'com.github.BigBadaboom:androidsvg:3511e136498da94018ef9fa438895984ea9b99db' - implementation ('com.github.paolorotolo:appintro:v5.0.1') { + implementation 'com.caverock:androidsvg-aar:1.4' + implementation('com.github.paolorotolo:appintro:v5.1.0') { transitive false exclude group: 'com.intellij', module: 'annotations' } + // MapView support + fullImplementation 'com.google.android.gms:play-services-maps:16.1.0' + fossImplementation 'org.osmdroid:osmdroid-android:6.1.0' - // Google Maps - fullImplementation 'com.google.android.gms:play-services-maps:12.0.1' - // GCM - fullImplementation 'com.google.android.gms:play-services-gcm:12.0.1' + // FCM + fullImplementation 'com.google.firebase:firebase-messaging:18.0.0' // About screen - implementation 'com.github.daniel-stoneuk:material-about-library:2.3.0' + implementation 'com.github.daniel-stoneuk:material-about-library:2.4.2' // Used libraries - implementation('com.mikepenz:aboutlibraries:6.0.8@aar') { + implementation('com.mikepenz:aboutlibraries:6.2.3@aar') { transitive = true } - implementation 'com.github.GrenderG:Toasty:1.3.0' + implementation 'com.github.GrenderG:Toasty:1.4.2' // Crash reporting - fullImplementation('com.crashlytics.sdk.android:crashlytics:2.7.1@aar') { + fullImplementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { transitive = true } - fullImplementation 'com.google.firebase:firebase-core:12.0.1' - - compile 'com.google.auto.value:auto-value-annotations:1.6.2' - annotationProcessor 'com.google.auto.value:auto-value:1.6.2' + implementation 'com.google.auto.value:auto-value-annotations:1.6.5' + annotationProcessor 'com.google.auto.value:auto-value:1.6.5' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' - testImplementation 'org.mockito:mockito-core:2.23.0' + testImplementation 'org.mockito:mockito-core:2.28.2' testImplementation 'junit:junit:4.12' testImplementation 'org.json:json:20180813' - testImplementation 'com.squareup.okhttp3:mockwebserver:3.11.0' + testImplementation 'com.squareup.okhttp3:mockwebserver:3.12.1' // PowerMock - testImplementation 'org.powermock:powermock-core:1.7.4' - testImplementation 'org.powermock:powermock-api-mockito2:1.7.4' - testImplementation 'org.powermock:powermock-module-junit4:1.7.4' + testImplementation 'org.powermock:powermock-core:2.0.2' + testImplementation 'org.powermock:powermock-api-mockito2:2.0.2' + testImplementation 'org.powermock:powermock-module-junit4:2.0.2' // Espresso UI tests - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-beta02', { + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0', { exclude group: 'com.android.support', module: 'support-annotations' } - androidTestImplementation 'androidx.test:runner:1.1.0-beta02' - androidTestImplementation 'androidx.test:rules:1.1.0-beta02' - androidTestImplementation 'androidx.test.espresso:espresso-intents:3.1.0-beta02' - androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.0-beta02', { + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0', { exclude group: 'com.android.support', module: 'support-annotations' } @@ -178,34 +174,6 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.3.0' } -dependencyVerification { - verify = [ - 'com.google.firebase:firebase-core:297f3c1f667e3a288ffcc2d017282679eaec4a54b98b3f538aeb7fbd7dac85a7', - 'com.google.firebase:firebase-analytics:83d08c5c8e58f2aaac8783ae42bc76bedb83435b696e654ecae1b753accced99', - 'com.google.firebase:firebase-analytics-impl:5a9f7c6d01df2fd1e270f812d13e31a72fc4006f548c65beb8370978b17a3732', - 'com.google.firebase:firebase-iid:42f75667d0d9df7c67d70cc0e0a58d2d2d7dbec331ad3c8c4a16945899c5e7dc', - 'com.google.firebase:firebase-common:b36bf28d62fe95069b4eb19eb8ac75c66628bc5045e4b93a783212696b70c419', - 'com.google.android.gms:play-services-tasks:b4c454f75281202789ea244e8c9b4ed15f0c6a0aeed3531ff7bffd9f1d7c4a61', - 'com.google.android.gms:play-services-basement:bfcd288d82e871b626f6325955e80956062f3bcac8d2162216643402d6930c88', - 'com.google.firebase:firebase-analytics-license:4465a2d2b92bddcbc4aa44f5218bd6f700b512b82a4e46821fa768068026b3bb', - 'com.android.support:support-v4:36d8385de1be7791231acb933b757198f97cb53bc7d046e8c4bc403d214caaca', - 'com.google.android.gms:play-services-basement-license:9b16c6e2dc0f9198a036f00f0c66534d5fefc26e94384381284aa867473fa173', - 'com.google.firebase:firebase-common-license:9ebd022ec18e239055de52df77882623cda767734e010d20a70ac5c2ab8b598a', - 'com.google.firebase:firebase-analytics-impl-license:548b70375c927a6b19bc77300c6ed909b94a84417583797dd7b2827e0335a168', - 'com.android.support:support-media-compat:9d8cee7cd40eff22ebdeb90c8e70f5ee96c5bd25cb2c3e3b3940e27285a3e98a', - 'com.android.support:support-fragment:a0ab3369ef40fe199160692f0463a5f63f1277ebfb64dd587c76fdb128d76b32', - 'com.android.support:support-core-utils:4fda6d4eb430971e3b1dad7456988333f374b0f4ba15f99839ca1a0ab5155c8a', - 'com.android.support:support-core-ui:82f538051599335ea881ec264407547cab52be750f16ce099cfb27754fc755ff', - 'com.android.support:support-compat:7d6da01cf9766b1705c6c80cfc12274a895b406c4c287900b07a56145ca6c030', - 'com.google.android.gms:play-services-tasks-license:2dc5a838b1ed8a373d5242dd97173ca6c355f7a6d59fae22c180fed85771b7af', - 'com.google.firebase:firebase-iid-license:cd0df76dabb5bf1a2409373900ebf13f1fad8888b33cf193ddf59a765a800d27', - 'com.android.support:support-annotations:99d6199ad5a09a0e5e8a49a4cc08f818483ddcfd7eedea2f9923412daf982309', - 'android.arch.lifecycle:runtime:e4e34e5d02bd102e8d39ddbc29f9ead8a15a61e367993d02238196ac48509ad8', - 'android.arch.lifecycle:common:86bf301a20ad0cd0a391e22a52e6fbf90575c096ff83233fa9fd0d52b3219121', - 'android.arch.core:common:5192934cd73df32e2c15722ed7fc488dde90baaec9ae030010dd1a80fb4e74e1', - ] -} - -if(!isFoss) { +if (!isFoss) { apply plugin: 'com.google.gms.google-services' } diff --git a/mobile/google-services.json b/mobile/google-services.json index c21132b924f3b1ddee4a1c6935d7aca399b0c6fa..90aa5d3ecf2c3a9e9df91d7007271a0c54bb00d5 100644 --- a/mobile/google-services.json +++ b/mobile/google-services.json @@ -14,6 +14,66 @@ } }, "oauth_client": [ + { + "client_id": "849058498762-079qmadgd5f5hkdve7lkrbubfi842afj.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "org.openhab.habdroid", + "certificate_hash": "28e3a41b7c84483ded3df7b8fc2789b5c912badd" + } + }, + { + "client_id": "849058498762-bc6nbdk0aercq1e5utj1so77e390cr5j.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyBtollIxWyEIm3ni68CaoDJgZuUqoYC2Zw" + } + ], + "services": { + "analytics_service": { + "status": 1 + }, + "appinvite_service": { + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "849058498762-bc6nbdk0aercq1e5utj1so77e390cr5j.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "849058498762-3m681ei7b78ajqt9gmvt2gumah724v7q.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "es.spaphone.openhab", + "app_store_id": "492054521" + } + } + ] + }, + "ads_service": { + "status": 2 + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:849058498762:android:1e73d9e722953c8b", + "android_client_info": { + "package_name": "org.openhab.habdroid.beta" + } + }, + "oauth_client": [ + { + "client_id": "849058498762-b49s5qfketdcojkrue5mo1geh0k5q4pm.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "org.openhab.habdroid.beta", + "certificate_hash": "28e3a41b7c84483ded3df7b8fc2789b5c912badd" + } + }, { "client_id": "849058498762-bc6nbdk0aercq1e5utj1so77e390cr5j.apps.googleusercontent.com", "client_type": 3 @@ -29,8 +89,21 @@ "status": 1 }, "appinvite_service": { - "status": 1, - "other_platform_oauth_client": [] + "status": 2, + "other_platform_oauth_client": [ + { + "client_id": "849058498762-bc6nbdk0aercq1e5utj1so77e390cr5j.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "849058498762-3m681ei7b78ajqt9gmvt2gumah724v7q.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "es.spaphone.openhab", + "app_store_id": "492054521" + } + } + ] }, "ads_service": { "status": 2 diff --git a/mobile/libs/gradle-witness.jar b/mobile/libs/gradle-witness.jar deleted file mode 100644 index 1a9948d494b5e29a5933c96abd3ef58a620828bf..0000000000000000000000000000000000000000 Binary files a/mobile/libs/gradle-witness.jar and /dev/null differ diff --git a/mobile/src/androidTest/java/org/openhab/habdroid/ui/BasicWidgetTest.java b/mobile/src/androidTest/java/org/openhab/habdroid/ui/BasicWidgetTest.java index c3e6a50e71b49d1167597181f963e143874ef979..43d4d816014cd077b06c301b6a2308d53120f227 100644 --- a/mobile/src/androidTest/java/org/openhab/habdroid/ui/BasicWidgetTest.java +++ b/mobile/src/androidTest/java/org/openhab/habdroid/ui/BasicWidgetTest.java @@ -15,7 +15,6 @@ import org.hamcrest.Description; import org.hamcrest.Matcher; import org.junit.Test; import org.junit.runner.RunWith; -import org.openhab.habdroid.BuildConfig; import org.openhab.habdroid.R; import org.openhab.habdroid.TestWithoutIntro; @@ -99,12 +98,10 @@ public class BasicWidgetTest extends TestWithoutIntro { .perform(scrollToPosition(10)) .check(matches(atPositionOnView(10, isDisplayed(), R.id.stop_button))); - if (BuildConfig.FLAVOR.equals("full")) { - // check whether map view is displayed - recyclerView - .perform(scrollToPosition(13)) - .check(matches(atPositionOnView(13, isDisplayed(), "MapView"))); - } + // check whether map view is displayed + recyclerView + .perform(scrollToPosition(13)) + .check(matches(atPositionOnView(13, isDisplayed(), R.id.mapview))); } public interface ChildViewCallback { diff --git a/mobile/src/androidTest/java/org/openhab/habdroid/ui/NfcTest.java b/mobile/src/androidTest/java/org/openhab/habdroid/ui/NfcTest.java index d8853fd2668aba1c70fba961ff3e3c5232d70d3e..2a38d0b6a5bf7e143e98f13bfacc207494ce63be 100644 --- a/mobile/src/androidTest/java/org/openhab/habdroid/ui/NfcTest.java +++ b/mobile/src/androidTest/java/org/openhab/habdroid/ui/NfcTest.java @@ -4,7 +4,6 @@ import android.content.Context; import androidx.annotation.StringRes; import androidx.test.InstrumentationRegistry; import androidx.test.espresso.ViewInteraction; -import androidx.test.espresso.contrib.RecyclerViewActions; import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; @@ -15,6 +14,7 @@ import org.openhab.habdroid.R; import org.openhab.habdroid.TestWithoutIntro; import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.Espresso.pressBack; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.longClick; import static androidx.test.espresso.assertion.ViewAssertions.matches; @@ -32,7 +32,9 @@ public class NfcTest extends TestWithoutIntro { ViewInteraction recyclerView = onView(withId(R.id.recyclerview)); Context context = InstrumentationRegistry.getTargetContext(); - recyclerView.perform(RecyclerViewActions.actionOnItemAtPosition(10, click())); + recyclerView.perform(actionOnItemAtPosition(10, longClick())); + checkViewWithText(context, R.string.nfc_action_to_sitemap_page); + pressBack(); recyclerView.perform(actionOnItemAtPosition(10, click())); @@ -45,7 +47,6 @@ public class NfcTest extends TestWithoutIntro { checkViewWithText(context, R.string.nfc_action_off); checkViewWithText(context, R.string.nfc_action_toggle); - checkViewWithText(context, R.string.nfc_action_to_sitemap_page); ViewInteraction onButton = checkViewWithText(context, R.string.nfc_action_on); onButton.perform(click()); diff --git a/mobile/src/beta/res/values-af/strings.xml b/mobile/src/beta/res/values-af/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-af/strings.xml +++ b/mobile/src/beta/res/values-af/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-ar/strings.xml b/mobile/src/beta/res/values-ar/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..82540ebf0db8e9f0d3a97460ca0f663c3f7bec35 100644 --- a/mobile/src/beta/res/values-ar/strings.xml +++ b/mobile/src/beta/res/values-ar/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB تجريبي</string> </resources> diff --git a/mobile/src/beta/res/values-bg/strings.xml b/mobile/src/beta/res/values-bg/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-bg/strings.xml +++ b/mobile/src/beta/res/values-bg/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-ca/strings.xml b/mobile/src/beta/res/values-ca/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-ca/strings.xml +++ b/mobile/src/beta/res/values-ca/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-cs/strings.xml b/mobile/src/beta/res/values-cs/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-cs/strings.xml +++ b/mobile/src/beta/res/values-cs/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-da/strings.xml b/mobile/src/beta/res/values-da/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-da/strings.xml +++ b/mobile/src/beta/res/values-da/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-de/strings.xml b/mobile/src/beta/res/values-de/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-de/strings.xml +++ b/mobile/src/beta/res/values-de/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-el/strings.xml b/mobile/src/beta/res/values-el/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-el/strings.xml +++ b/mobile/src/beta/res/values-el/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-es-rUS/strings.xml b/mobile/src/beta/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1b3fdfbe46043fbac26c71a7b264d7413528236 --- /dev/null +++ b/mobile/src/beta/res/values-es-rUS/strings.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> +</resources> diff --git a/mobile/src/beta/res/values-es/strings.xml b/mobile/src/beta/res/values-es/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-es/strings.xml +++ b/mobile/src/beta/res/values-es/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-fi/strings.xml b/mobile/src/beta/res/values-fi/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-fi/strings.xml +++ b/mobile/src/beta/res/values-fi/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-fr/strings.xml b/mobile/src/beta/res/values-fr/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-fr/strings.xml +++ b/mobile/src/beta/res/values-fr/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-hu/strings.xml b/mobile/src/beta/res/values-hu/strings.xml index 413bcec854cc0053c9fd2572f388baf68b8b5604..839cf67693ab2a47bcecc284eb644f893d4fb2f5 100644 --- a/mobile/src/beta/res/values-hu/strings.xml +++ b/mobile/src/beta/res/values-hu/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Béta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Béta</string> </resources> diff --git a/mobile/src/beta/res/values-in/strings.xml b/mobile/src/beta/res/values-in/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-in/strings.xml +++ b/mobile/src/beta/res/values-in/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-it/strings.xml b/mobile/src/beta/res/values-it/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-it/strings.xml +++ b/mobile/src/beta/res/values-it/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-iw/strings.xml b/mobile/src/beta/res/values-iw/strings.xml index 655e63f042877e1239974c3b78825c77f8189080..ff40314e8e5c452ca338b0b21457c7fd3594452f 100644 --- a/mobile/src/beta/res/values-iw/strings.xml +++ b/mobile/src/beta/res/values-iw/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB גרסת בטא</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB גרסת בטא</string> </resources> diff --git a/mobile/src/beta/res/values-ja/strings.xml b/mobile/src/beta/res/values-ja/strings.xml index 1473ab3705c7930643b012f970577bb7c79152bb..35d7094e16b6a1835525d1d3baac040f56e5d29b 100644 --- a/mobile/src/beta/res/values-ja/strings.xml +++ b/mobile/src/beta/res/values-ja/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB ベータ版</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB ベータ版</string> </resources> diff --git a/mobile/src/beta/res/values-ji/strings.xml b/mobile/src/beta/res/values-ji/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-ji/strings.xml +++ b/mobile/src/beta/res/values-ji/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-ko/strings.xml b/mobile/src/beta/res/values-ko/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-ko/strings.xml +++ b/mobile/src/beta/res/values-ko/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-lt/strings.xml b/mobile/src/beta/res/values-lt/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-lt/strings.xml +++ b/mobile/src/beta/res/values-lt/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-nl/strings.xml b/mobile/src/beta/res/values-nl/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-nl/strings.xml +++ b/mobile/src/beta/res/values-nl/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-no/strings.xml b/mobile/src/beta/res/values-no/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-no/strings.xml +++ b/mobile/src/beta/res/values-no/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-pl/strings.xml b/mobile/src/beta/res/values-pl/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-pl/strings.xml +++ b/mobile/src/beta/res/values-pl/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-pt-rBR/strings.xml b/mobile/src/beta/res/values-pt-rBR/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-pt-rBR/strings.xml +++ b/mobile/src/beta/res/values-pt-rBR/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-pt/strings.xml b/mobile/src/beta/res/values-pt/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-pt/strings.xml +++ b/mobile/src/beta/res/values-pt/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-ro/strings.xml b/mobile/src/beta/res/values-ro/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-ro/strings.xml +++ b/mobile/src/beta/res/values-ro/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-ru/strings.xml b/mobile/src/beta/res/values-ru/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-ru/strings.xml +++ b/mobile/src/beta/res/values-ru/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-sr/strings.xml b/mobile/src/beta/res/values-sr/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-sr/strings.xml +++ b/mobile/src/beta/res/values-sr/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-sv/strings.xml b/mobile/src/beta/res/values-sv/strings.xml index e6b3da64cc974943f5170297ffe331ea747646cf..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-sv/strings.xml +++ b/mobile/src/beta/res/values-sv/strings.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB Beta</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-tl/strings.xml b/mobile/src/beta/res/values-tl/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-tl/strings.xml +++ b/mobile/src/beta/res/values-tl/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-tr/strings.xml b/mobile/src/beta/res/values-tr/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-tr/strings.xml +++ b/mobile/src/beta/res/values-tr/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-uk/strings.xml b/mobile/src/beta/res/values-uk/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..b1b3fdfbe46043fbac26c71a7b264d7413528236 100644 --- a/mobile/src/beta/res/values-uk/strings.xml +++ b/mobile/src/beta/res/values-uk/strings.xml @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB Beta</string> </resources> diff --git a/mobile/src/beta/res/values-vi/strings.xml b/mobile/src/beta/res/values-vi/strings.xml index 28d0e608ea0239eeba6fa3ef258ac1ba4770a3d6..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-vi/strings.xml +++ b/mobile/src/beta/res/values-vi/strings.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/beta/res/values-zh-rCN/strings.xml b/mobile/src/beta/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5ca3b14f6ade37c97cf2ae127d96e0c44f1520c1 --- /dev/null +++ b/mobile/src/beta/res/values-zh-rCN/strings.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> + <string name="app_name">openHAB 测试版</string> +</resources> diff --git a/mobile/src/beta/res/values-zh/strings.xml b/mobile/src/beta/res/values-zh/strings.xml index a948641988a529272730a74873effef35c885aa9..0488c5d96a4adb8b977fc1d2675fecdf6fcc6595 100644 --- a/mobile/src/beta/res/values-zh/strings.xml +++ b/mobile/src/beta/res/values-zh/strings.xml @@ -1,8 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- Name used for beta builds --> - <string name="app_name">openHAB 测试版</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- Name used for beta builds --> </resources> diff --git a/mobile/src/foss/java/org/openhab/habdroid/core/CloudMessagingHelper.java b/mobile/src/foss/java/org/openhab/habdroid/core/CloudMessagingHelper.java index c0978f4accb0f9c7a51dd6b62a23a0138d853606..c52fcb966ba21c3fbee2723267eba09e5ac94290 100644 --- a/mobile/src/foss/java/org/openhab/habdroid/core/CloudMessagingHelper.java +++ b/mobile/src/foss/java/org/openhab/habdroid/core/CloudMessagingHelper.java @@ -11,7 +11,7 @@ package org.openhab.habdroid.core; import android.content.Context; import android.content.Intent; -import androidx.annotation.StringRes; +import androidx.annotation.DrawableRes; import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.CloudConnection; @@ -23,8 +23,12 @@ public class CloudMessagingHelper { public static void onNotificationSelected(Context context, Intent intent) { } - public static @StringRes int getPushNotificationStatusResId() { - return R.string.info_openhab_notification_status_unavailable; + public static String getPushNotificationStatus(Context context) { + return context.getString(R.string.info_openhab_notification_status_unavailable); + } + + public static @DrawableRes int getPushNotificationIconResId() { + return R.drawable.ic_bell_off_outline_grey_24dp; } public static boolean isSupported() { diff --git a/mobile/src/foss/java/org/openhab/habdroid/ui/MapViewHelper.java b/mobile/src/foss/java/org/openhab/habdroid/ui/MapViewHelper.java index 3b5db246078293321bccba8149c6802aa737b8ff..51a3e910cdc2b7b8fab1c4173995bebc37b63d48 100644 --- a/mobile/src/foss/java/org/openhab/habdroid/ui/MapViewHelper.java +++ b/mobile/src/foss/java/org/openhab/habdroid/ui/MapViewHelper.java @@ -1,13 +1,247 @@ package org.openhab.habdroid.ui; +import android.app.AlertDialog; +import android.content.Context; +import android.content.res.Resources; +import android.location.Location; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.util.Log; import android.view.LayoutInflater; import android.view.ViewGroup; +import androidx.core.content.ContextCompat; +import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.model.ParsedState; +import org.openhab.habdroid.model.Widget; +import org.openhab.habdroid.util.Util; +import org.osmdroid.api.IMapController; +import org.osmdroid.config.Configuration; +import org.osmdroid.events.MapEventsReceiver; +import org.osmdroid.tileprovider.tilesource.TileSourceFactory; +import org.osmdroid.util.BoundingBox; +import org.osmdroid.util.GeoPoint; +import org.osmdroid.views.MapView; +import org.osmdroid.views.overlay.CopyrightOverlay; +import org.osmdroid.views.overlay.MapEventsOverlay; +import org.osmdroid.views.overlay.Marker; + +import java.util.ArrayList; +import java.util.Locale; public class MapViewHelper { + private static final String TAG = MapViewHelper.class.getSimpleName(); + public static WidgetAdapter.ViewHolder createViewHolder(LayoutInflater inflater, ViewGroup parent, Connection connection, WidgetAdapter.ColorMapper colorMapper) { - return new WidgetAdapter.GenericViewHolder(inflater, parent, connection, colorMapper); + Context context = inflater.getContext(); + Configuration.getInstance().load(context, + PreferenceManager.getDefaultSharedPreferences(context)); + return new OsmViewHolder(inflater, parent, connection, colorMapper); + } + + private static class OsmViewHolder extends WidgetAdapter.LabeledItemBaseViewHolder + implements Marker.OnMarkerDragListener { + private final MapView mMapView; + private final Handler mHandler; + private final int mRowHeightPixels; + private Item mBoundItem; + private boolean mStarted; + + public OsmViewHolder(LayoutInflater inflater, ViewGroup parent, + Connection connection, WidgetAdapter.ColorMapper colorMapper) { + super(inflater, parent, R.layout.openhabwidgetlist_mapitem, connection, colorMapper); + mHandler = new Handler(); + mMapView = itemView.findViewById(R.id.mapview); + mMapView.setTileSource(TileSourceFactory.MAPNIK); + + mMapView.setVerticalMapRepetitionEnabled(false); + mMapView.getOverlays().add(new CopyrightOverlay(itemView.getContext())); + mMapView.setBuiltInZoomControls(false); + mMapView.setMultiTouchControls(false); + mMapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() { + @Override + public boolean singleTapConfirmedHelper(GeoPoint p) { + openPopup(); + return true; + } + + @Override + public boolean longPressHelper(GeoPoint p) { + return false; + } + })); + + applyPositionAndLabelWhenReady(mMapView, 15.0f, false, false); + + final Resources res = itemView.getContext().getResources(); + mRowHeightPixels = res.getDimensionPixelSize(R.dimen.row_height); + } + + @Override + public void bind(Widget widget) { + super.bind(widget); + + ViewGroup.LayoutParams lp = mMapView.getLayoutParams(); + int rows = widget.height() > 0 ? widget.height() : 5; + int desiredHeightPixels = rows * mRowHeightPixels; + if (lp.height != desiredHeightPixels) { + lp.height = desiredHeightPixels; + mMapView.setLayoutParams(lp); + } + + mBoundItem = widget.item(); + applyPositionAndLabelWhenReady(mMapView, 15.0f, false, false); + } + + @Override + public void start() { + super.start(); + if (!mStarted) { + mMapView.onResume(); + mStarted = true; + } + } + + @Override + public void stop() { + super.stop(); + if (mStarted) { + mMapView.onPause(); + mStarted = false; + } + } + + @Override + public void onMarkerDragStart(Marker marker) { + // no-op, we're interested in drag end only + } + + @Override + public void onMarkerDrag(Marker marker) { + // no-op, we're interested in drag end only + } + + @Override + public void onMarkerDragEnd(Marker marker) { + String newState = String.format(Locale.US, "%f,%f", + marker.getPosition().getLatitude(), marker.getPosition().getLongitude()); + String item = marker.getId(); + Util.sendItemCommand(mConnection.getAsyncHttpClient(), item, newState); + } + + private void openPopup() { + final MapView mapView = new MapView(itemView.getContext()); + + AlertDialog dialog = new AlertDialog.Builder(itemView.getContext()) + .setView(mapView) + .setCancelable(true) + .setNegativeButton(R.string.close, null) + .create(); + + dialog.setOnDismissListener(dialogInterface -> mapView.onPause()); + dialog.setCanceledOnTouchOutside(true); + dialog.show(); + + mapView.setBuiltInZoomControls(true); + mapView.setMultiTouchControls(true); + mapView.setVerticalMapRepetitionEnabled(false); + mapView.getOverlays().add(new CopyrightOverlay(itemView.getContext())); + mapView.onResume(); + applyPositionAndLabelWhenReady(mapView, 16.0f, true, true); + } + + private void applyPositionAndLabelWhenReady(MapView mapView, float zoomLevel, + boolean allowDrag, boolean allowScroll) { + mHandler.post(() -> applyPositionAndLabel(mapView, zoomLevel, allowDrag, allowScroll)); + } + + private void applyPositionAndLabel(MapView mapView, float zoomLevel, boolean allowDrag, + boolean allowScroll) { + if (mBoundItem == null) { + return; + } + boolean canDragMarker = allowDrag && !mBoundItem.readOnly(); + if (!mBoundItem.members().isEmpty()) { + ArrayList<GeoPoint> positions = new ArrayList<>(); + for (Item item : mBoundItem.members()) { + GeoPoint position = toGeoPoint(item.state()); + if (position != null) { + setMarker(mapView, position, item, item.label(), canDragMarker, + this); + positions.add(position); + } + } + + if (!positions.isEmpty()) { + double north = -90; + double south = 90; + double west = 180; + double east = -180; + for (GeoPoint position : positions) { + north = Math.max(position.getLatitude(), north); + south = Math.min(position.getLatitude(), south); + + west = Math.min(position.getLongitude(), west); + east = Math.max(position.getLongitude(), east); + } + + Log.d(TAG, String.format("North %f, south %f, west %f, east %f", + north, south, west, east)); + BoundingBox boundingBox = new BoundingBox(north, east, south, west); + int extraPixel = (int) Util.convertDpToPixel(24f, mapView.getContext()); + try { + mapView.zoomToBoundingBox(boundingBox, false, extraPixel); + } catch (Exception e) { + Log.d(TAG, "Error applying markers", e); + } + if (!allowScroll) { + mapView.setScrollableAreaLimitLongitude(west, east, extraPixel); + mapView.setScrollableAreaLimitLatitude(north, south, extraPixel); + } + } + } else { + GeoPoint position = toGeoPoint(mBoundItem.state()); + if (position != null) { + setMarker(mapView, position, mBoundItem, mLabelView.getText(), canDragMarker, + this); + moveCamera(mapView, zoomLevel, position); + if (!allowScroll) { + mapView.setScrollableAreaLimitLatitude(position.getLatitude(), + position.getLatitude(), 0); + mapView.setScrollableAreaLimitLongitude(position.getLongitude(), + position.getLongitude(), 0); + } + } + } + } + + private static void moveCamera(MapView mapView, float zoom, GeoPoint geoPoint) { + IMapController mapController = mapView.getController(); + mapController.setZoom(zoom); + mapController.setCenter(geoPoint); + } + + private static void setMarker(MapView mapView, GeoPoint position, Item item, + CharSequence label, boolean canDrag, + Marker.OnMarkerDragListener onMarkerDragListener) { + Marker marker = new Marker(mapView); + marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM); + marker.setDraggable(canDrag); + marker.setPosition(position); + marker.setTitle(label != null ? label.toString() : null); + marker.setId(item.link()); + marker.setOnMarkerDragListener(onMarkerDragListener); + marker.setIcon(ContextCompat.getDrawable(mapView.getContext(), + R.drawable.ic_location_on_red_24dp)); + mapView.getOverlays().add(marker); + } + + private static GeoPoint toGeoPoint(ParsedState state) { + Location location = state != null ? state.asLocation() : null; + return location != null ? new GeoPoint(location) : null; + } } -} +} \ No newline at end of file diff --git a/mobile/src/foss/res/drawable/ic_github_grey_24dp.xml b/mobile/src/foss/res/drawable/ic_github_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..a30c6444474000ac26c1823108ca7b235b004429 --- /dev/null +++ b/mobile/src/foss/res/drawable/ic_github_grey_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/Templarian +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M13,14C9.64,14 8.54,15.35 8.18,16.24C9.25,16.7 10,17.76 10,19A3,3 0,0 1,7 22A3,3 0,0 1,4 19C4,17.69 4.83,16.58 6,16.17V7.83C4.83,7.42 4,6.31 4,5A3,3 0,0 1,7 2A3,3 0,0 1,10 5C10,6.31 9.17,7.42 8,7.83V13.12C8.88,12.47 10.16,12 12,12C14.67,12 15.56,10.66 15.85,9.77C14.77,9.32 14,8.25 14,7A3,3 0,0 1,17 4A3,3 0,0 1,20 7C20,8.34 19.12,9.5 17.91,9.86C17.65,11.29 16.68,14 13,14M7,18A1,1 0,0 0,6 19A1,1 0,0 0,7 20A1,1 0,0 0,8 19A1,1 0,0 0,7 18M7,4A1,1 0,0 0,6 5A1,1 0,0 0,7 6A1,1 0,0 0,8 5A1,1 0,0 0,7 4M17,6A1,1 0,0 0,16 7A1,1 0,0 0,17 8A1,1 0,0 0,18 7A1,1 0,0 0,17 6Z"/> +</vector> diff --git a/mobile/src/foss/res/drawable/ic_location_on_red_24dp.xml b/mobile/src/foss/res/drawable/ic_location_on_red_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a61d96435f9251668da3beb5811a1deaa381136 --- /dev/null +++ b/mobile/src/foss/res/drawable/ic_location_on_red_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="36dp" android:tint="#EA4335" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/> +</vector> diff --git a/mobile/src/foss/res/layout/openhabwidgetlist_mapitem.xml b/mobile/src/foss/res/layout/openhabwidgetlist_mapitem.xml new file mode 100644 index 0000000000000000000000000000000000000000..d03cbffc39b5ac7698fe57052906d3ed4e29737c --- /dev/null +++ b/mobile/src/foss/res/layout/openhabwidgetlist_mapitem.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingLeft="@dimen/widgetlist_item_left_margin" + android:paddingRight="@dimen/widgetlist_item_right_margin" + android:background="?android:activatedBackgroundIndicator" + android:paddingStart="@dimen/widgetlist_item_left_margin" + android:paddingEnd="@dimen/widgetlist_item_right_margin" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <org.openhab.habdroid.ui.widget.WidgetImageView + android:id="@+id/widgeticon" + android:layout_width="32dp" + android:layout_height="32dp" + android:padding="4dp" /> + + <TextView + android:id="@+id/widgetlabel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginLeft="4dp" + android:layout_marginStart="4dp" + android:ellipsize="end" + android:maxLines="1" + android:textAppearance="?android:attr/textAppearanceSmall" /> + + </LinearLayout> + + <org.osmdroid.views.MapView + android:id="@+id/mapview" + android:layout_width="match_parent" + android:layout_height="180dp" + android:layout_margin="4dp" /> + +</LinearLayout> diff --git a/mobile/src/foss/res/values-ar/strings.xml b/mobile/src/foss/res/values-ar/strings.xml index 3f6d3a47278dd6d7186e57d758cab1482f533d87..ccc760a3455e2d174ce28b6fe020ba504511feb4 100644 --- a/mobile/src/foss/res/values-ar/strings.xml +++ b/mobile/src/foss/res/values-ar/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">غير متوفر في الإصدار المجاني والمفتوح المصدر</string> + <string name="info_openhab_notification_status_unavailable">غير متوفر في الإصدار المجاني والمفتوح المصدر</string> </resources> diff --git a/mobile/src/foss/res/values-ca/strings.xml b/mobile/src/foss/res/values-ca/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..7bddcea2b8450c23849bfe70c5e62807c12208f3 100644 --- a/mobile/src/foss/res/values-ca/strings.xml +++ b/mobile/src/foss/res/values-ca/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">No és disponible en la versió lliure i de codi obert</string> +</resources> diff --git a/mobile/src/foss/res/values-cs/strings.xml b/mobile/src/foss/res/values-cs/strings.xml index b93951e3d5b1316993bc3fd1f486921df9caad4c..ddd6a96027466c3747ecb1b0249df74899aedbaa 100644 --- a/mobile/src/foss/res/values-cs/strings.xml +++ b/mobile/src/foss/res/values-cs/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Ve verzi FOSS není k dispozici</string> + <string name="info_openhab_notification_status_unavailable">Ve verzi FOSS není k dispozici</string> </resources> diff --git a/mobile/src/foss/res/values-de/strings.xml b/mobile/src/foss/res/values-de/strings.xml index d6a51cc6361a09e7c820454ba0fd5a86c75b826c..b175a162dfaf536896cd70ab3d3220b9387c8918 100644 --- a/mobile/src/foss/res/values-de/strings.xml +++ b/mobile/src/foss/res/values-de/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">In der FOSS-Version nicht verfügbar</string> + <string name="info_openhab_notification_status_unavailable">In der FOSS-Version nicht verfügbar</string> </resources> diff --git a/mobile/src/foss/res/values-el/strings.xml b/mobile/src/foss/res/values-el/strings.xml index 17f2c52780e70a31b6f9752c02e7a61d1b0e807c..f8e15ba63e03c8f079bddf862f2b0caac37e67b8 100644 --- a/mobile/src/foss/res/values-el/strings.xml +++ b/mobile/src/foss/res/values-el/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Μη διαθέσιμο στην έκδοση FOSS</string> + <string name="info_openhab_notification_status_unavailable">Μη διαθέσιμο στην έκδοση FOSS</string> </resources> diff --git a/mobile/src/foss/res/values-es-rUS/strings.xml b/mobile/src/foss/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..34266f5e4773d96d23e4b12d3875d79b21ed83f4 --- /dev/null +++ b/mobile/src/foss/res/values-es-rUS/strings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">Disponible en la versión FOSS (software libre y de código abierto)</string> +</resources> diff --git a/mobile/src/foss/res/values-es/strings.xml b/mobile/src/foss/res/values-es/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..34266f5e4773d96d23e4b12d3875d79b21ed83f4 100644 --- a/mobile/src/foss/res/values-es/strings.xml +++ b/mobile/src/foss/res/values-es/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">Disponible en la versión FOSS (software libre y de código abierto)</string> +</resources> diff --git a/mobile/src/foss/res/values-fi/strings.xml b/mobile/src/foss/res/values-fi/strings.xml index 089c89fe35c9365403aa700d17466a2ecec34427..7ba235e0f29fd229373772d32a7e7efeef8c0629 100644 --- a/mobile/src/foss/res/values-fi/strings.xml +++ b/mobile/src/foss/res/values-fi/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Ei saatavilla FOSS versiossa</string> + <string name="info_openhab_notification_status_unavailable">Ei saatavilla FOSS versiossa</string> </resources> diff --git a/mobile/src/foss/res/values-fr/strings.xml b/mobile/src/foss/res/values-fr/strings.xml index 5f5cb480159b93a004053c0dc00a6c9ec920ea44..2fd74be2df36b0cffbc5704feed213d687794d8b 100644 --- a/mobile/src/foss/res/values-fr/strings.xml +++ b/mobile/src/foss/res/values-fr/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Indisponible dans la version FOSS</string> + <string name="info_openhab_notification_status_unavailable">Indisponible dans la version FOSS</string> </resources> diff --git a/mobile/src/foss/res/values-hu/strings.xml b/mobile/src/foss/res/values-hu/strings.xml index 296eb1cf8f8f456559f26590a2968ac29cbebe3b..f47299b71a2ef70d12f08c70d336c4a8e36c3585 100644 --- a/mobile/src/foss/res/values-hu/strings.xml +++ b/mobile/src/foss/res/values-hu/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Nem érhető el a FOSS változatban</string> + <string name="info_openhab_notification_status_unavailable">Nem érhető el a FOSS változatban</string> </resources> diff --git a/mobile/src/foss/res/values-it/strings.xml b/mobile/src/foss/res/values-it/strings.xml index 9ec832e40da765708c4f7745fcf7f37fc91532ad..043fb7d5a43106839a46a6bec6d19e7bd3cb8757 100644 --- a/mobile/src/foss/res/values-it/strings.xml +++ b/mobile/src/foss/res/values-it/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Non disponibile nella versione FOSS</string> + <string name="info_openhab_notification_status_unavailable">Non disponibile nella versione FOSS</string> </resources> diff --git a/mobile/src/foss/res/values-iw/strings.xml b/mobile/src/foss/res/values-iw/strings.xml index 651bf00dde6c809d85c59cd75c6ac65e025893df..72c96d0cb5dbdb5172c3b71e43c4f82a4c9ef106 100644 --- a/mobile/src/foss/res/values-iw/strings.xml +++ b/mobile/src/foss/res/values-iw/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">לא זמין בגרסת FOSS</string> + <string name="info_openhab_notification_status_unavailable">לא זמין בגרסת FOSS</string> </resources> diff --git a/mobile/src/foss/res/values-ja/strings.xml b/mobile/src/foss/res/values-ja/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..6352d779119e9b391116554baa16c31346cf0a91 100644 --- a/mobile/src/foss/res/values-ja/strings.xml +++ b/mobile/src/foss/res/values-ja/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">FOSS バージョンでは利用できません</string> +</resources> diff --git a/mobile/src/foss/res/values-nl/strings.xml b/mobile/src/foss/res/values-nl/strings.xml index 2e9a9caa17ef7cd80c4dd3b543d47d90b30af979..0a490f28f7e989257c63f55e5af29e486503dc47 100644 --- a/mobile/src/foss/res/values-nl/strings.xml +++ b/mobile/src/foss/res/values-nl/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Niet beschikbaar in de FOSS versie</string> + <string name="info_openhab_notification_status_unavailable">Niet beschikbaar in de FOSS versie</string> </resources> diff --git a/mobile/src/foss/res/values-no/strings.xml b/mobile/src/foss/res/values-no/strings.xml index eb24fa08f7a5762533048c4b0056c82ed13de7aa..1843b1556e38060381b000a96a0d71b79788fd3c 100644 --- a/mobile/src/foss/res/values-no/strings.xml +++ b/mobile/src/foss/res/values-no/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Ikke tilgjengelig i FOSS versjon</string> + <string name="info_openhab_notification_status_unavailable">Ikke tilgjengelig i FOSS versjon</string> </resources> diff --git a/mobile/src/foss/res/values-pl/strings.xml b/mobile/src/foss/res/values-pl/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..6210c0362846e9a0e2f32e0ffbf5b54d9672c9ea 100644 --- a/mobile/src/foss/res/values-pl/strings.xml +++ b/mobile/src/foss/res/values-pl/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">Nie dostępne w wersji FOSS</string> +</resources> diff --git a/mobile/src/foss/res/values-pt-rBR/strings.xml b/mobile/src/foss/res/values-pt-rBR/strings.xml index 309b42e790419a296f1a31aa27e267f3ebb77a12..8e3e4e800dc6ad8a071d47d1169db11dae274ecc 100644 --- a/mobile/src/foss/res/values-pt-rBR/strings.xml +++ b/mobile/src/foss/res/values-pt-rBR/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Não disponível na versão FOSS</string> + <string name="info_openhab_notification_status_unavailable">Não disponível na versão FOSS</string> </resources> diff --git a/mobile/src/foss/res/values-ro/strings.xml b/mobile/src/foss/res/values-ro/strings.xml index 0f3df6091ee7b61fd0681dc11aadc05453d1a4ea..d97bde919fab480321f377d9d4bacdb31d1e90b9 100644 --- a/mobile/src/foss/res/values-ro/strings.xml +++ b/mobile/src/foss/res/values-ro/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Nu este disponibil în versiunea FOSS (liberă și open source)</string> + <string name="info_openhab_notification_status_unavailable">Nu este disponibil în versiunea FOSS (liberă și open source)</string> </resources> diff --git a/mobile/src/foss/res/values-ru/strings.xml b/mobile/src/foss/res/values-ru/strings.xml index 7723f18a1aa994999715bc6a90be6db662686d83..f7f37490f7f9e4ae5233ac924a89e5e1e18f16bb 100644 --- a/mobile/src/foss/res/values-ru/strings.xml +++ b/mobile/src/foss/res/values-ru/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Недоступно в версии Open Source</string> + <string name="info_openhab_notification_status_unavailable">Недоступно в версии Open Source</string> </resources> diff --git a/mobile/src/foss/res/values-sv/strings.xml b/mobile/src/foss/res/values-sv/strings.xml index 9fc0befdd449aa28ae14bd8fdda4d2ca0c0027e6..f44b4747c401b1c8656509a32d860f27bbf61a13 100644 --- a/mobile/src/foss/res/values-sv/strings.xml +++ b/mobile/src/foss/res/values-sv/strings.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_notification_status_unavailable">Inte tillgängligt i FOSS-versionen</string> + <string name="info_openhab_notification_status_unavailable">Inte tillgängligt i FOSS-versionen</string> </resources> diff --git a/mobile/src/foss/res/values-tr/strings.xml b/mobile/src/foss/res/values-tr/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..b3743f3cb329e92b3bb80f51f10452ee82275ca5 100644 --- a/mobile/src/foss/res/values-tr/strings.xml +++ b/mobile/src/foss/res/values-tr/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">ÖAKK sürümde mevcut değil</string> +</resources> diff --git a/mobile/src/foss/res/values-uk/strings.xml b/mobile/src/foss/res/values-uk/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..778ab9a8daac2afdf1751b0165506742e5c5d62f 100644 --- a/mobile/src/foss/res/values-uk/strings.xml +++ b/mobile/src/foss/res/values-uk/strings.xml @@ -1,3 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">Недоступно в версії FOSS</string> +</resources> diff --git a/mobile/src/foss/res/values-zh-rCN/strings.xml b/mobile/src/foss/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb3f334a5f1efa35ec21c2da3318b82e48ac2add --- /dev/null +++ b/mobile/src/foss/res/values-zh-rCN/strings.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_notification_status_unavailable">在 FOSS 版本中不可用</string> +</resources> diff --git a/mobile/src/full/AndroidManifest.xml b/mobile/src/full/AndroidManifest.xml index ca58433be70ac49c1d4c71e04bbcffc6808f5332..3d42a1169c6940d80e045fcdd8aaf3443bfce2d0 100644 --- a/mobile/src/full/AndroidManifest.xml +++ b/mobile/src/full/AndroidManifest.xml @@ -1,44 +1,24 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.VIBRATE" /> - <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <application> <receiver - android:name="com.google.android.gms.gcm.GcmReceiver" - android:exported="true" - android:permission="com.google.android.c2dm.permission.SEND"> - <intent-filter> - <action android:name="com.google.android.c2dm.intent.RECEIVE" /> - <category android:name="org.openhab.habdroid" /> - </intent-filter> - </receiver> - - <receiver - android:name="org.openhab.habdroid.core.GcmRegistrationService$ProxyReceiver"> + android:name="org.openhab.habdroid.core.FcmRegistrationService$ProxyReceiver"> <intent-filter> <action android:name="org.openhab.habdroid.action.HIDE_NOTIFICATION" /> </intent-filter> </receiver> <service - android:name="org.openhab.habdroid.core.GcmMessageListenerService" - android:exported="false"> - <intent-filter> - <action android:name="com.google.android.c2dm.intent.RECEIVE" /> - </intent-filter> - </service> - - <service - android:name="org.openhab.habdroid.core.GcmInstanceIdListenerService" - android:exported="false"> + android:name="org.openhab.habdroid.core.FcmMessageListenerService"> <intent-filter> - <action android:name="com.google.android.gms.iid.InstanceID" /> + <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <service - android:name="org.openhab.habdroid.core.GcmRegistrationService" + android:name="org.openhab.habdroid.core.FcmRegistrationService" android:permission="android.permission.BIND_JOB_SERVICE" /> <meta-data diff --git a/mobile/src/full/java/org/openhab/habdroid/core/CloudMessagingHelper.java b/mobile/src/full/java/org/openhab/habdroid/core/CloudMessagingHelper.java index c25af4d1c69f7fb410da54be7508b5f78f553db1..e5fbaaafce3ef4f18a0b310481f41f5732f231e5 100644 --- a/mobile/src/full/java/org/openhab/habdroid/core/CloudMessagingHelper.java +++ b/mobile/src/full/java/org/openhab/habdroid/core/CloudMessagingHelper.java @@ -11,8 +11,10 @@ package org.openhab.habdroid.core; import android.content.Context; import android.content.Intent; -import androidx.annotation.StringRes; +import androidx.annotation.DrawableRes; +import com.google.android.gms.common.ConnectionResult; +import com.google.android.gms.common.GoogleApiAvailability; import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.CloudConnection; import org.openhab.habdroid.core.connection.Connection; @@ -25,33 +27,53 @@ public class CloudMessagingHelper { public static void onConnectionUpdated(Context context, CloudConnection connection) { sRegistrationDone = false; if (connection != null) { - GcmRegistrationService.scheduleRegistration(context); + FcmRegistrationService.scheduleRegistration(context); } } public static void onNotificationSelected(Context context, Intent intent) { int notificationId = intent.getIntExtra( - GcmMessageListenerService.EXTRA_NOTIFICATION_ID, -1); + FcmMessageListenerService.EXTRA_NOTIFICATION_ID, -1); if (notificationId >= 0) { - GcmRegistrationService.scheduleHideNotification(context, notificationId); + FcmRegistrationService.scheduleHideNotification(context, notificationId); } } - public static @StringRes int getPushNotificationStatusResId() { + public static String getPushNotificationStatus(Context context) { CloudConnection cloudConnection = (CloudConnection) ConnectionFactory.getConnection(Connection.TYPE_CLOUD); if (cloudConnection == null) { if (ConnectionFactory.getConnection(Connection.TYPE_REMOTE) == null) { - return R.string.info_openhab_gcm_no_remote; + return context.getString(R.string.info_openhab_gcm_no_remote); } else { - return R.string.info_openhab_gcm_unsupported; + return context.getString(R.string.info_openhab_gcm_unsupported); } } else if (!sRegistrationDone) { - return R.string.info_openhab_gcm_in_progress; + return context.getString(R.string.info_openhab_gcm_in_progress); } else if (sRegistrationFailureReason != null) { - return R.string.info_openhab_gcm_failed; + GoogleApiAvailability gaa = GoogleApiAvailability.getInstance(); + int errorCode = gaa.isGooglePlayServicesAvailable(context); + if (errorCode != ConnectionResult.SUCCESS) { + return context.getString(R.string.info_openhab_gcm_failed_with_reason, + gaa.getErrorString(errorCode)); + } + return context.getString(R.string.info_openhab_gcm_failed); + } else { + return context.getString(R.string.info_openhab_gcm_connected); + } + } + + public static @DrawableRes int getPushNotificationIconResId() { + CloudConnection cloudConnection = (CloudConnection) + ConnectionFactory.getConnection(Connection.TYPE_CLOUD); + if (cloudConnection == null) { + return R.drawable.ic_bell_off_outline_grey_24dp; + } else if (!sRegistrationDone) { + return R.drawable.ic_bell_outline_grey_24dp; + } else if (sRegistrationFailureReason != null) { + return R.drawable.ic_bell_off_outline_grey_24dp; } else { - return R.string.info_openhab_gcm_connected; + return R.drawable.ic_bell_ring_outline_grey_24dp; } } diff --git a/mobile/src/full/java/org/openhab/habdroid/core/GcmMessageListenerService.java b/mobile/src/full/java/org/openhab/habdroid/core/FcmMessageListenerService.java similarity index 81% rename from mobile/src/full/java/org/openhab/habdroid/core/GcmMessageListenerService.java rename to mobile/src/full/java/org/openhab/habdroid/core/FcmMessageListenerService.java index 1d31a7785e0f0abdc3ad00de372ccac1c8e7c69a..98c98fa5c79654e8af5c4272836b7888bf209a5b 100644 --- a/mobile/src/full/java/org/openhab/habdroid/core/GcmMessageListenerService.java +++ b/mobile/src/full/java/org/openhab/habdroid/core/FcmMessageListenerService.java @@ -20,48 +20,70 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; -import android.os.Bundle; import android.preference.PreferenceManager; import android.service.notification.StatusBarNotification; import android.text.TextUtils; + +import com.google.firebase.messaging.FirebaseMessagingService; +import com.google.firebase.messaging.RemoteMessage; + import androidx.core.app.NotificationCompat; import androidx.core.content.ContextCompat; -import com.google.android.gms.gcm.GcmListenerService; import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.core.connection.ConnectionFactory; import org.openhab.habdroid.ui.MainActivity; import org.openhab.habdroid.util.Constants; import org.openhab.habdroid.util.SyncHttpClient; +import org.openhab.habdroid.util.Util; import java.util.Locale; +import java.util.Map; -public class GcmMessageListenerService extends GcmListenerService { +public class FcmMessageListenerService extends FirebaseMessagingService { static final String EXTRA_NOTIFICATION_ID = "notificationId"; private static final String CHANNEL_ID_DEFAULT = "default"; private static final String CHANNEL_ID_FORMAT_SEVERITY = "severity-%s"; private static final int SUMMARY_NOTIFICATION_ID = 0; + // Notification grouping is only available on N or higher, as mentioned in + // https://developer.android.com/guide/topics/ui/notifiers/notifications#bundle + private static final boolean HAS_GROUPING_SUPPORT = + Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; + @Override - public void onMessageReceived(String from, Bundle data) { + public void onNewToken(String token) { + super.onNewToken(token); + FcmRegistrationService.scheduleRegistration(this); + } + + @Override + public void onMessageReceived(RemoteMessage message) { NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); - String messageType = data.getString("type", ""); - String notificationIdString = data.getString(EXTRA_NOTIFICATION_ID); + Map<String, String> data = message.getData(); + String messageType = data.get("type"); + if (messageType == null) { + return; + } + + String notificationIdString = data.get(EXTRA_NOTIFICATION_ID); int notificationId = notificationIdString != null ? Integer.parseInt(notificationIdString) : 1; switch (messageType) { case "notification": { - String message = data.getString("message"); - String severity = data.getString("severity"); - String icon = data.getString("icon"); - String persistedId = data.getString("persistedId"); + String messageText = data.get("message"); + String severity = data.get("severity"); + String icon = data.get("icon"); + String persistedId = data.get("persistedId"); // Older versions of openhab-cloud didn't send the notification generation // timestamp, so use the (undocumented) google.sent_time as a time reference // in that case. If that also isn't present, don't show time at all. - long timestamp = data.getLong("timestamp", data.getLong("google.sent_time", 0)); + String timestampString = data.containsKey("timestamp") + ? data.get("timestamp") : data.get("google.sent_time"); + long timestamp = timestampString != null ? Long.valueOf(timestampString) : 0; final String channelId = TextUtils.isEmpty(severity) ? CHANNEL_ID_DEFAULT @@ -73,14 +95,15 @@ public class GcmMessageListenerService extends GcmListenerService { NotificationChannel channel = new NotificationChannel( channelId, name, NotificationManager.IMPORTANCE_DEFAULT); channel.setShowBadge(true); + channel.enableVibration(true); nm.createNotificationChannel(channel); } - Notification n = makeNotification(message, channelId, + Notification n = makeNotification(messageText, channelId, icon, timestamp, persistedId, notificationId); nm.notify(notificationId, n); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (HAS_GROUPING_SUPPORT) { int count = getGcmNotificationCount(nm.getActiveNotifications()); nm.notify(SUMMARY_NOTIFICATION_ID, makeSummaryNotification(count, timestamp)); } @@ -88,7 +111,7 @@ public class GcmMessageListenerService extends GcmListenerService { } case "hideNotification": nm.cancel(notificationId); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (HAS_GROUPING_SUPPORT) { StatusBarNotification[] active = nm.getActiveNotifications(); if (notificationId != SUMMARY_NOTIFICATION_ID && getGcmNotificationCount(active) == 0) { @@ -150,51 +173,37 @@ public class GcmMessageListenerService extends GcmListenerService { .setSound(Uri.parse(toneSetting)) .setContentText(msg) .setContentIntent(contentIntent) - .setDeleteIntent(GcmRegistrationService.createHideNotificationIntent(this, + .setDeleteIntent(FcmRegistrationService.createHideNotificationIntent(this, notificationId)) .setVisibility(NotificationCompat.VISIBILITY_PRIVATE) .setPublicVersion(publicVersion) .build(); } - @TargetApi(23) + @TargetApi(24) private Notification makeSummaryNotification(int subNotificationCount, long timestamp) { CharSequence text = getResources().getQuantityString(R.plurals.summary_notification_text, subNotificationCount, subNotificationCount); PendingIntent clickIntent = makeNotificationClickIntent(null, SUMMARY_NOTIFICATION_ID); Notification publicVersion = makeNotificationBuilder(CHANNEL_ID_DEFAULT, timestamp) - .setGroupSummary(true) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentText(text) .setContentIntent(clickIntent) .build(); return makeNotificationBuilder(CHANNEL_ID_DEFAULT, timestamp) + .setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN) .setGroupSummary(true) + .setGroup("gcm") .setContentText(text) .setPublicVersion(publicVersion) .setContentIntent(clickIntent) - .setDeleteIntent(GcmRegistrationService.createHideNotificationIntent(this, + .setDeleteIntent(FcmRegistrationService.createHideNotificationIntent(this, SUMMARY_NOTIFICATION_ID)) .build(); } private NotificationCompat.Builder makeNotificationBuilder(String channelId, long timestamp) { - long[] vibrationPattern; - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - String vibration = prefs.getString(Constants.PREFERENCE_NOTIFICATION_VIBRATION, ""); - if (getString(R.string.settings_notification_vibration_value_short).equals(vibration)) { - vibrationPattern = new long[] {0, 500, 500}; - } else if (getString(R.string.settings_notification_vibration_value_long) - .equals(vibration)) { - vibrationPattern = new long[] {0, 1000, 1000}; - } else if (getString(R.string.settings_notification_vibration_value_twice) - .equals(vibration)) { - vibrationPattern = new long[] {0, 1000, 1000, 1000, 1000}; - } else { - vibrationPattern = new long[] {0}; - } - return new NotificationCompat.Builder(this, channelId) .setSmallIcon(R.drawable.ic_openhab_appicon_white_24dp) .setContentTitle(getString(R.string.app_name)) @@ -204,7 +213,7 @@ public class GcmMessageListenerService extends GcmListenerService { .setCategory(NotificationCompat.CATEGORY_EVENT) .setAutoCancel(true) .setLights(ContextCompat.getColor(this, R.color.openhab_orange), 3000, 3000) - .setVibrate(vibrationPattern) + .setVibrate(Util.getNotificationVibrationPattern(getApplicationContext())) .setGroup("gcm"); } diff --git a/mobile/src/full/java/org/openhab/habdroid/core/GcmRegistrationService.java b/mobile/src/full/java/org/openhab/habdroid/core/FcmRegistrationService.java similarity index 58% rename from mobile/src/full/java/org/openhab/habdroid/core/GcmRegistrationService.java rename to mobile/src/full/java/org/openhab/habdroid/core/FcmRegistrationService.java index 657b0d5db00ac7e08e21e35787c21a36c4be444d..48113f4e212cbf004dbf1766f304c0c48e304ca8 100644 --- a/mobile/src/full/java/org/openhab/habdroid/core/GcmRegistrationService.java +++ b/mobile/src/full/java/org/openhab/habdroid/core/FcmRegistrationService.java @@ -14,25 +14,30 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Build; -import android.os.Bundle; import android.provider.Settings; +import android.text.TextUtils; import android.util.Log; + +import com.google.firebase.iid.FirebaseInstanceId; +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.RemoteMessage; + import androidx.annotation.NonNull; import androidx.core.app.JobIntentService; -import com.google.android.gms.gcm.GoogleCloudMessaging; -import com.google.android.gms.iid.InstanceID; +import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.CloudConnection; import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.core.connection.ConnectionFactory; import org.openhab.habdroid.util.SyncHttpClient; +import org.openhab.habdroid.util.Util; import java.io.IOException; import java.net.URLEncoder; import java.util.Locale; -public class GcmRegistrationService extends JobIntentService { - private static final String TAG = GcmRegistrationService.class.getSimpleName(); +public class FcmRegistrationService extends JobIntentService { + private static final String TAG = FcmRegistrationService.class.getSimpleName(); private static final int JOB_ID = 1000; @@ -42,13 +47,13 @@ public class GcmRegistrationService extends JobIntentService { private static final String EXTRA_NOTIFICATION_ID = "notificationId"; static void scheduleRegistration(Context context) { - Intent intent = new Intent(context, GcmRegistrationService.class) - .setAction(GcmRegistrationService.ACTION_REGISTER); - JobIntentService.enqueueWork(context, GcmRegistrationService.class, JOB_ID, intent); + Intent intent = new Intent(context, FcmRegistrationService.class) + .setAction(FcmRegistrationService.ACTION_REGISTER); + JobIntentService.enqueueWork(context, FcmRegistrationService.class, JOB_ID, intent); } static void scheduleHideNotification(Context context, int notificationId) { - JobIntentService.enqueueWork(context, GcmRegistrationService.class, JOB_ID, + JobIntentService.enqueueWork(context, FcmRegistrationService.class, JOB_ID, makeHideNotificationIntent(context, notificationId)); } @@ -58,9 +63,9 @@ public class GcmRegistrationService extends JobIntentService { } private static Intent makeHideNotificationIntent(Context context, int notificationId) { - return new Intent(context, GcmRegistrationService.class) - .setAction(GcmRegistrationService.ACTION_HIDE_NOTIFICATION) - .putExtra(GcmRegistrationService.EXTRA_NOTIFICATION_ID, notificationId); + return new Intent(context, FcmRegistrationService.class) + .setAction(FcmRegistrationService.ACTION_HIDE_NOTIFICATION) + .putExtra(FcmRegistrationService.EXTRA_NOTIFICATION_ID, notificationId); } @Override @@ -79,21 +84,17 @@ public class GcmRegistrationService extends JobIntentService { switch (action) { case ACTION_REGISTER: try { - registerGcm(connection); + registerFcm(connection); } catch (IOException e) { CloudMessagingHelper.sRegistrationFailureReason = e; - Log.e(TAG, "GCM registration failed", e); + Log.e(TAG, "FCM registration failed", e); } CloudMessagingHelper.sRegistrationDone = true; break; case ACTION_HIDE_NOTIFICATION: int id = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); if (id >= 0) { - try { - sendHideNotificationRequest(id, connection.getMessagingSenderId()); - } catch (IOException e) { - Log.e(TAG, "Failed sending notification hide message", e); - } + sendHideNotificationRequest(id, connection.getMessagingSenderId()); } break; default: @@ -101,43 +102,71 @@ public class GcmRegistrationService extends JobIntentService { } } - private void registerGcm(CloudConnection connection) throws IOException { - InstanceID instanceId = InstanceID.getInstance(this); - String token = instanceId.getToken(connection.getMessagingSenderId(), - GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); - String deviceModel = URLEncoder.encode(Build.MODEL, "UTF-8"); - String deviceId = - Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); + private void registerFcm(CloudConnection connection) throws IOException { + String token = FirebaseInstanceId.getInstance().getToken(connection.getMessagingSenderId(), + FirebaseMessaging.INSTANCE_ID_SCOPE); + String deviceName = getDeviceName() + + (Util.isFlavorBeta() ? " (" + getString(R.string.beta) + ")" : ""); + String deviceId = Settings.Secure.getString(getContentResolver(), + Settings.Secure.ANDROID_ID) + (Util.isFlavorBeta() ? "-beta" : ""); String regUrl = String.format(Locale.US, "addAndroidRegistration?deviceId=%s&deviceModel=%s®Id=%s", - deviceId, deviceModel, token); + deviceId, URLEncoder.encode(deviceName, "UTF-8"), token); Log.d(TAG, "Register device at openHAB-cloud with URL: " + regUrl); SyncHttpClient.HttpStatusResult result = connection.getSyncHttpClient().get(regUrl).asStatus(); if (result.isSuccessful()) { - Log.d(TAG, "GCM reg id success"); + Log.d(TAG, "FCM reg id success"); } else { - Log.e(TAG, "GCM reg id error: " + result.error); + Log.e(TAG, "FCM reg id error: " + result.error); } CloudMessagingHelper.sRegistrationFailureReason = result.error; } - private void sendHideNotificationRequest(int notificationId, String senderId) - throws IOException { - GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); - Bundle sendBundle = new Bundle(); - sendBundle.putString("type", "hideNotification"); - sendBundle.putString("notificationId", String.valueOf(notificationId)); - gcm.send(senderId + "@gcm.googleapis.com", "1", sendBundle); + /** + * @author https://stackoverflow.com/a/12707479 + */ + private String getDeviceName() { + String manufacturer = Build.MANUFACTURER; + String model = Build.MODEL; + if (model.toLowerCase().startsWith(manufacturer.toLowerCase())) { + return capitalize(model); + } else { + return capitalize(manufacturer) + " " + model; + } + } + + /** + * @author https://stackoverflow.com/a/12707479 + */ + private String capitalize(String s) { + if (TextUtils.isEmpty(s)) { + return ""; + } + char first = s.charAt(0); + if (Character.isUpperCase(first)) { + return s; + } else { + return Character.toUpperCase(first) + s.substring(1); + } + } + + private void sendHideNotificationRequest(int notificationId, String senderId) { + FirebaseMessaging fcm = FirebaseMessaging.getInstance(); + RemoteMessage message = new RemoteMessage.Builder(senderId + "@gcm.googleapis.com") + .addData("type", "hideNotification") + .addData("notificationId", String.valueOf(notificationId)) + .build(); + fcm.send(message); } public static class ProxyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent actual = intent.getParcelableExtra("intent"); - JobIntentService.enqueueWork(context, GcmRegistrationService.class, JOB_ID, actual); + JobIntentService.enqueueWork(context, FcmRegistrationService.class, JOB_ID, actual); } private static PendingIntent wrap(Context context, Intent intent, int id) { diff --git a/mobile/src/full/java/org/openhab/habdroid/core/GcmInstanceIdListenerService.java b/mobile/src/full/java/org/openhab/habdroid/core/GcmInstanceIdListenerService.java deleted file mode 100644 index 7448ae857374084c08b4e85ba6a02d9446a2edce..0000000000000000000000000000000000000000 --- a/mobile/src/full/java/org/openhab/habdroid/core/GcmInstanceIdListenerService.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2010-2018, openHAB.org and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ - -package org.openhab.habdroid.core; - -import com.google.android.gms.iid.InstanceIDListenerService; - -public class GcmInstanceIdListenerService extends InstanceIDListenerService { - @Override - public void onTokenRefresh() { - GcmRegistrationService.scheduleRegistration(this); - } -} diff --git a/mobile/src/full/java/org/openhab/habdroid/ui/MapViewHelper.java b/mobile/src/full/java/org/openhab/habdroid/ui/MapViewHelper.java index 71670038bfa787207b076ca0017132dbaedca3bd..1c0943b8e1f73a404f7fdc0cb6509e79cae2ffca 100644 --- a/mobile/src/full/java/org/openhab/habdroid/ui/MapViewHelper.java +++ b/mobile/src/full/java/org/openhab/habdroid/ui/MapViewHelper.java @@ -2,6 +2,7 @@ package org.openhab.habdroid.ui; import android.app.AlertDialog; import android.content.res.Resources; +import android.location.Location; import android.view.LayoutInflater; import android.view.ViewGroup; @@ -17,6 +18,7 @@ import com.google.android.gms.maps.model.MarkerOptions; import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.model.ParsedState; import org.openhab.habdroid.model.Widget; import org.openhab.habdroid.util.Util; @@ -143,11 +145,14 @@ public class MapViewHelper { } private void applyPositionAndLabel(GoogleMap map, float zoomLevel, boolean allowDrag) { + if (mBoundItem == null) { + return; + } boolean canDragMarker = allowDrag && !mBoundItem.readOnly(); if (!mBoundItem.members().isEmpty()) { ArrayList<LatLng> positions = new ArrayList<>(); for (Item item : mBoundItem.members()) { - LatLng position = parseLocation(item.state()); + LatLng position = toLatLng(item.state()); if (position != null) { setMarker(map, position, item, item.label(), canDragMarker); positions.add(position); @@ -165,7 +170,7 @@ public class MapViewHelper { } } } else { - LatLng position = parseLocation(mBoundItem.state()); + LatLng position = toLatLng(mBoundItem.state()); if (position != null) { setMarker(map, position, mBoundItem, mLabelView.getText(), canDragMarker); map.moveCamera(CameraUpdateFactory.newLatLngZoom(position, zoomLevel)); @@ -182,16 +187,11 @@ public class MapViewHelper { map.addMarker(marker).setTag(item); } - private static LatLng parseLocation(String state) { - String[] splitState = state != null ? state.split(",") : null; - if (splitState != null && splitState.length == 2) { - try { - return new LatLng(Float.valueOf(splitState[0]), Float.valueOf(splitState[1])); - } catch (NumberFormatException e) { - // ignored - } - } - return null; + private static LatLng toLatLng(ParsedState state) { + Location location = state != null ? state.asLocation() : null; + return location != null + ? new LatLng(location.getLatitude(), location.getLongitude()) + : null; } } } \ No newline at end of file diff --git a/mobile/src/main/res/drawable/ic_github_grey_24dp.xml b/mobile/src/full/res/drawable/ic_github_grey_24dp.xml similarity index 100% rename from mobile/src/main/res/drawable/ic_github_grey_24dp.xml rename to mobile/src/full/res/drawable/ic_github_grey_24dp.xml diff --git a/mobile/src/full/res/layout/openhabwidgetlist_mapitem.xml b/mobile/src/full/res/layout/openhabwidgetlist_mapitem.xml index 7ddd9337d15690e4925390972b73ea6fa24fd52a..681078a3e030e7773fb729be90f49145161f805e 100644 --- a/mobile/src/full/res/layout/openhabwidgetlist_mapitem.xml +++ b/mobile/src/full/res/layout/openhabwidgetlist_mapitem.xml @@ -34,13 +34,11 @@ </LinearLayout> - <!-- tag used by unit test, don't remove --> <com.google.android.gms.maps.MapView android:id="@+id/mapview" android:layout_width="match_parent" android:layout_height="180dp" android:layout_margin="4dp" - android:tag="MapView" app:liteMode="true" /> </LinearLayout> diff --git a/mobile/src/full/res/values-ar/strings.xml b/mobile/src/full/res/values-ar/strings.xml index f0d2192fc404ceca6c2e6bd8d38480063c489fd3..361cef376d1645a375e53036464126c6d06aa18e 100644 --- a/mobile/src/full/res/values-ar/strings.xml +++ b/mobile/src/full/res/values-ar/strings.xml @@ -1,7 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_in_progress">جاري تسجيل الجهاز</string> - <string name="info_openhab_gcm_failed">فشل تسجيل الجهاز</string> - <string name="info_openhab_gcm_connected">تم تسجيل الجهاز بنجاح مع Google Cloud Messaging</string> + <string name="info_openhab_gcm_no_remote">غير متوفر، لم يتم ضبط الخادم البعيد</string> + <string name="info_openhab_gcm_unsupported">غير متوفر، الخادم البعيد ليس نموذج سحابي لأوبن-هاب</string> + <string name="info_openhab_gcm_in_progress">جاري تسجيل الجهاز</string> + <string name="info_openhab_gcm_failed">فشل تسجيل الجهاز</string> + <string name="info_openhab_gcm_connected">تم تسجيل الجهاز بنجاح مع Firebase Cloud Messaging</string> + <string name="notification_channel_default">افتراضي</string> + <string name="notification_channel_severity_value">خطورة \'%1$s\'</string> </resources> diff --git a/mobile/src/full/res/values-bg/strings.xml b/mobile/src/full/res/values-bg/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..cbe7d6d78ad3b02e3360d2b87f1be9a3ef0e5ffb 100644 --- a/mobile/src/full/res/values-bg/strings.xml +++ b/mobile/src/full/res/values-bg/strings.xml @@ -1,3 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">Недостъпен, отдалечен сървър не е конфигуриран</string> + <string name="info_openhab_gcm_in_progress">Регистрацията на устройството е в ход</string> + <string name="info_openhab_gcm_failed">Регистрация на устройство е неуспешно</string> + <string name="notification_channel_default">По подразбиране</string> +</resources> diff --git a/mobile/src/full/res/values-ca/strings.xml b/mobile/src/full/res/values-ca/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..ded5ccdc93abe0996def2dca741cd42053ecef8a 100644 --- a/mobile/src/full/res/values-ca/strings.xml +++ b/mobile/src/full/res/values-ca/strings.xml @@ -1,3 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">No disponible, no s\'ha configurat el servidor remot</string> + <string name="info_openhab_gcm_unsupported">No disponible, el servidor remot no és una instància openHAB</string> + <string name="info_openhab_gcm_failed">El registre del dispositiu ha fallat</string> +</resources> diff --git a/mobile/src/full/res/values-cs/strings.xml b/mobile/src/full/res/values-cs/strings.xml index d7ad73e0044a7ee7e90da39e14c3412b90d946ec..e19dc2801ee4cd4e167d42447aae2a66019c42d4 100644 --- a/mobile/src/full/res/values-cs/strings.xml +++ b/mobile/src/full/res/values-cs/strings.xml @@ -1,17 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Nedostupné, vzdálený server není nakonfigurován</string> - <string name="info_openhab_gcm_unsupported">Nedostupné, vzdálený server není openHAB cloud</string> - <string name="info_openhab_gcm_in_progress">Probíhá registrace zařízení</string> - <string name="info_openhab_gcm_failed">Registrace zařízení se nezdařila</string> - <string name="info_openhab_gcm_connected">Zařízení úspěšně zaregistrováno u Google Cloud Messaging</string> - <string name="notification_channel_default">Výchozí</string> - <string name="notification_channel_severity_value">Priorita \"%1$s\"</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d nové oznámení</item> - <item quantity="few">%d nová oznámení</item> - <item quantity="many">%d nových oznámení</item> - <item quantity="other">%d nových oznámení</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Nedostupné, vzdálený server není nakonfigurován</string> + <string name="info_openhab_gcm_unsupported">Nedostupné, vzdálený server není openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">Probíhá registrace zařízení</string> + <string name="info_openhab_gcm_failed">Registrace zařízení se nezdařila</string> + <string name="info_openhab_gcm_failed_with_reason">Registrace zařízení selhala kvůli problému Google Play Services: %s</string> + <string name="info_openhab_gcm_connected">Zařízení bylo úspěšně zaregistrováno u Firebase Cloud Messaging</string> + <string name="notification_channel_default">Výchozí</string> + <string name="notification_channel_severity_value">Priorita \"%1$s\"</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nové oznámení</item> + <item quantity="few">%d nová oznámení</item> + <item quantity="many">%d nových oznámení</item> + <item quantity="other">%d nových oznámení</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-de/strings.xml b/mobile/src/full/res/values-de/strings.xml index 7b08ba081fd934540895b5ad43ad455867df3609..a4c50f50024290cdd8149064a2a3b69c8b48c5cc 100644 --- a/mobile/src/full/res/values-de/strings.xml +++ b/mobile/src/full/res/values-de/strings.xml @@ -1,15 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Nicht verfügbar, da kein Remote-Server konfiguriert ist</string> - <string name="info_openhab_gcm_unsupported">Nicht verfügbar, da kein Remote-Server keine openHAB-Cloud-Instanz ist</string> - <string name="info_openhab_gcm_in_progress">Registriere Gerät</string> - <string name="info_openhab_gcm_failed">Geräteregistrierung fehlgeschlagen</string> - <string name="info_openhab_gcm_connected">Gerät erfolgreich bei Google Cloud Messaging registriert</string> - <string name="notification_channel_default">Standard</string> - <string name="notification_channel_severity_value">Dringlichkeit \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d neue Benachrichtigung</item> - <item quantity="other">%d neue Benachrichtigungen</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Nicht verfügbar, da kein Remote-Server konfiguriert ist</string> + <string name="info_openhab_gcm_unsupported">Nicht verfügbar, da der Remote-Server keine openHAB-Cloud-Instanz ist</string> + <string name="info_openhab_gcm_in_progress">Registriere Gerät</string> + <string name="info_openhab_gcm_failed">Geräteregistrierung fehlgeschlagen</string> + <string name="info_openhab_gcm_failed_with_reason">Geräteregistrierung wegen eines Google-Play-Services-Problems fehlgeschlagen: %s</string> + <string name="info_openhab_gcm_connected">Gerät erfolgreich bei Firebase Cloud Messaging registriert</string> + <string name="notification_channel_default">Standard</string> + <string name="notification_channel_severity_value">Dringlichkeit \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d neue Benachrichtigung</item> + <item quantity="other">%d neue Benachrichtigungen</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-el/strings.xml b/mobile/src/full/res/values-el/strings.xml index 27d60487e89c76da0b1bbdbb116fbf2d4415ef97..981cc6bad4f963a1890f6a674ee1cb4d8ef1e917 100644 --- a/mobile/src/full/res/values-el/strings.xml +++ b/mobile/src/full/res/values-el/strings.xml @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Μη διαθέσιμο, ο απομακρυσμένος διακομιστής δεν έχει ρυθμιστεί</string> - <string name="info_openhab_gcm_unsupported">Μη διαθέσιμο, ο απομακρυσμένος διακομιστής δεν είναι openHAB cloud παρουσία</string> - <string name="info_openhab_gcm_in_progress">Η εγγραφή συσκευής βρίσκεται σε εξέλιξη</string> - <string name="info_openhab_gcm_failed">Η εγγραφή συσκευής απέτυχε</string> - <string name="info_openhab_gcm_connected">Η συσκευή καταχωρήθηκε με επιτυχία στο Google Cloud Messaging</string> - <string name="notification_channel_default">Προεπιλεγμένο</string> - <string name="notification_channel_severity_value">Κρισιμότητα \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d νέα ειδοποίηση</item> - <item quantity="other">%d νέες ειδοποίησεις</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Μη διαθέσιμο, ο απομακρυσμένος διακομιστής δεν έχει ρυθμιστεί</string> + <string name="info_openhab_gcm_unsupported">Μη διαθέσιμο, ο απομακρυσμένος διακομιστής δεν είναι openHAB cloud παρουσία</string> + <string name="info_openhab_gcm_in_progress">Η εγγραφή συσκευής βρίσκεται σε εξέλιξη</string> + <string name="info_openhab_gcm_failed">Η εγγραφή συσκευής απέτυχε</string> + <string name="notification_channel_default">Προεπιλεγμένο</string> + <string name="notification_channel_severity_value">Κρισιμότητα \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d νέα ειδοποίηση</item> + <item quantity="other">%d νέες ειδοποίησεις</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-es-rUS/strings.xml b/mobile/src/full/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a53fdc97c420494aaf6569af56d220310ffce5a --- /dev/null +++ b/mobile/src/full/res/values-es-rUS/strings.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">No disponible, el servidor remoto no está configurado</string> + <string name="info_openhab_gcm_unsupported">No disponible, el servidor remoto no es una instancia de openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">El registro del dispositivo está en progreso</string> + <string name="info_openhab_gcm_failed">Falló el registro del dispositivo</string> + <string name="info_openhab_gcm_failed_with_reason">Falló el registro del dispositivo debido a un problema en los Servicios de Google Play: %s</string> + <string name="info_openhab_gcm_connected">Dispositivo registrado con éxito en Firebase Cloud Messaging</string> + <string name="notification_channel_default">Predeterminado</string> + <string name="notification_channel_severity_value">Gravedad \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nueva notificación</item> + <item quantity="other">%d nuevas notificaciones</item> + </plurals> +</resources> diff --git a/mobile/src/full/res/values-es/strings.xml b/mobile/src/full/res/values-es/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..0a53fdc97c420494aaf6569af56d220310ffce5a 100644 --- a/mobile/src/full/res/values-es/strings.xml +++ b/mobile/src/full/res/values-es/strings.xml @@ -1,3 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">No disponible, el servidor remoto no está configurado</string> + <string name="info_openhab_gcm_unsupported">No disponible, el servidor remoto no es una instancia de openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">El registro del dispositivo está en progreso</string> + <string name="info_openhab_gcm_failed">Falló el registro del dispositivo</string> + <string name="info_openhab_gcm_failed_with_reason">Falló el registro del dispositivo debido a un problema en los Servicios de Google Play: %s</string> + <string name="info_openhab_gcm_connected">Dispositivo registrado con éxito en Firebase Cloud Messaging</string> + <string name="notification_channel_default">Predeterminado</string> + <string name="notification_channel_severity_value">Gravedad \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nueva notificación</item> + <item quantity="other">%d nuevas notificaciones</item> + </plurals> +</resources> diff --git a/mobile/src/full/res/values-fi/strings.xml b/mobile/src/full/res/values-fi/strings.xml index cf0b29d882050d7016429b38a74821682fbc32cc..d45fa4e14000639334f8f570c634be42eda45779 100644 --- a/mobile/src/full/res/values-fi/strings.xml +++ b/mobile/src/full/res/values-fi/strings.xml @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Ei saatavilla, etäpalvelinta ei ole määritetty</string> - <string name="info_openhab_gcm_unsupported">Ei saatavilla, etäpalvelin ei vastaa openHAB pilveä</string> - <string name="info_openhab_gcm_in_progress">Laitteen rekisteröinti on käynnissä</string> - <string name="info_openhab_gcm_failed">Laitteen rekisteröinti epäonnistui</string> - <string name="info_openhab_gcm_connected">Laite rekisteröity onnistuneesti Google Cloud Viestintään (GCM)</string> - <string name="notification_channel_default">Oletus</string> - <string name="notification_channel_severity_value">Vakavuus \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d uusi ilmoitus</item> - <item quantity="other">%d uutta ilmoitusta</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Ei saatavilla, etäpalvelinta ei ole määritetty</string> + <string name="info_openhab_gcm_unsupported">Ei saatavilla, etäpalvelin ei vastaa openHAB pilveä</string> + <string name="info_openhab_gcm_in_progress">Laitteen rekisteröinti on käynnissä</string> + <string name="info_openhab_gcm_failed">Laitteen rekisteröinti epäonnistui</string> + <string name="notification_channel_default">Oletus</string> + <string name="notification_channel_severity_value">Vakavuus \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d uusi ilmoitus</item> + <item quantity="other">%d uutta ilmoitusta</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-fr/strings.xml b/mobile/src/full/res/values-fr/strings.xml index 21b70e5cee64c8ac01f1aac5296091a95fa74dc3..0aa541c121752b94e61c8ee53497779a6cffc72b 100644 --- a/mobile/src/full/res/values-fr/strings.xml +++ b/mobile/src/full/res/values-fr/strings.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Indisponible, serveur distant non configuré</string> - <string name="info_openhab_gcm_unsupported">Indisponible, le serveur distant n\'est pas une instance openHAB Cloud</string> - <string name="info_openhab_gcm_in_progress">Enregistrement de l\'équipement en cours</string> - <string name="info_openhab_gcm_failed">L\'enregistrement de l\'équipement a échoué</string> - <string name="info_openhab_gcm_connected">Enregistrement de l\'équipement réussi auprès de Google Cloud Messaging</string> - <string name="notification_channel_default">Défaut</string> - <string name="notification_channel_severity_value">Gravité «%1$s »</string> + <string name="info_openhab_gcm_no_remote">Indisponible, serveur distant non configuré</string> + <string name="info_openhab_gcm_unsupported">Indisponible, le serveur distant n\'est pas une instance openHAB Cloud</string> + <string name="info_openhab_gcm_in_progress">Enregistrement de l\'équipement en cours</string> + <string name="info_openhab_gcm_failed">L\'enregistrement de l\'équipement a échoué</string> + <string name="notification_channel_default">Défaut</string> + <string name="notification_channel_severity_value">Gravité «%1$s »</string> </resources> diff --git a/mobile/src/full/res/values-hu/strings.xml b/mobile/src/full/res/values-hu/strings.xml index 58dba9aba4687251f0f4b05c70b602358958eb9a..fad770b5636b3283688ea428b3b6b10d58237bc1 100644 --- a/mobile/src/full/res/values-hu/strings.xml +++ b/mobile/src/full/res/values-hu/strings.xml @@ -1,11 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Nem érhető el, a távoli kiszolgáló nincs beállítva</string> - <string name="info_openhab_gcm_unsupported">Nem érhető el, a távoli kiszolgáló nem egy openHAB-cloud példány</string> - <string name="info_openhab_gcm_in_progress">Eszköz regisztrációs folyamatban van</string> - <string name="info_openhab_gcm_failed">Készülék-regisztráció sikertelen</string> - <string name="info_openhab_gcm_connected">Eszköz sikeresen regisztrált a Google Cloud Messaging</string> - <string name="notification_channel_default">Alapértelmezett</string> - <string name="notification_channel_severity_value">Súlyossága \"%1$s\"</string> + <string name="info_openhab_gcm_no_remote">Nem érhető el, a távoli kiszolgáló nincs beállítva</string> + <string name="info_openhab_gcm_unsupported">Nem érhető el, a távoli kiszolgáló nem egy openHAB-cloud példány</string> + <string name="info_openhab_gcm_in_progress">Eszköz regisztrációs folyamatban van</string> + <string name="info_openhab_gcm_failed">Készülék-regisztráció sikertelen</string> + <string name="info_openhab_gcm_connected">Eszköz sikeresen regisztrált a \"Firebase Cloud Messaging\"-be</string> + <string name="notification_channel_default">Alapértelmezett</string> + <string name="notification_channel_severity_value">Súlyossága \"%1$s\"</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d új értesítés</item> + <item quantity="other">%d új értesítés</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-it/strings.xml b/mobile/src/full/res/values-it/strings.xml index c0f9dd01417c69082a6008227312d74f49582709..c43aea591fef110007b7859c41971943fd911662 100644 --- a/mobile/src/full/res/values-it/strings.xml +++ b/mobile/src/full/res/values-it/strings.xml @@ -1,11 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Non disponibile, server remoto non configurato</string> - <string name="info_openhab_gcm_unsupported">Non disponibile, server remoto non e\' un\'istanza openHAB cloud</string> - <string name="info_openhab_gcm_in_progress">Registrazione dispositivo in corso</string> - <string name="info_openhab_gcm_failed">Registrazione dispositivo fallita</string> - <string name="info_openhab_gcm_connected">Dispositivo registrato con successo con Google Cloud Messaging</string> - <string name="notification_channel_default">Predefinito</string> - <string name="notification_channel_severity_value">Gravità \'%1$s\'</string> + <string name="info_openhab_gcm_no_remote">Non disponibile, server remoto non configurato</string> + <string name="info_openhab_gcm_unsupported">Non disponibile, server remoto non e\' un\'istanza openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">Registrazione dispositivo in corso</string> + <string name="info_openhab_gcm_failed">Registrazione dispositivo fallita</string> + <string name="info_openhab_gcm_failed_with_reason">Registrazione del dispositivo non riuscita a causa di un problema Google Play Services: %s</string> + <string name="info_openhab_gcm_connected">Dispositivo registrato con successo con Firebase Cloud Messaging</string> + <string name="notification_channel_default">Predefinito</string> + <string name="notification_channel_severity_value">Gravità \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nuova notifica</item> + <item quantity="other">%d nuove notifiche</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-iw/strings.xml b/mobile/src/full/res/values-iw/strings.xml index faee2b7b39405545908fb22619b33969392f6514..1f360504e9dd3d6139988c7f6eda9fdea81e3f3b 100644 --- a/mobile/src/full/res/values-iw/strings.xml +++ b/mobile/src/full/res/values-iw/strings.xml @@ -1,17 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">לא זמין, לא הוגדר שרת מרוחק</string> - <string name="info_openhab_gcm_unsupported">לא זמין, השרת המרוחק אינו תומך בשירותי הענן של openHAB</string> - <string name="info_openhab_gcm_in_progress">מתבצע רישום ההתקן</string> - <string name="info_openhab_gcm_failed">רישום ההתקן נכשל</string> - <string name="info_openhab_gcm_connected">המכשיר נרשם בהצלחה לשירות העברת הודעות בענן של גוגל</string> - <string name="notification_channel_default">ברירת מחדל</string> - <string name="notification_channel_severity_value">דרגת חומרה \'%1$s \'</string> - <plurals name="summary_notification_text"> - <item quantity="one">התראה חדשה d%</item> - <item quantity="two">d% התראות חדשות</item> - <item quantity="many">d% התראות חדשות</item> - <item quantity="other">d% התראות חדשות</item> - </plurals> + <string name="info_openhab_gcm_no_remote">לא זמין, לא הוגדר שרת מרוחק</string> + <string name="info_openhab_gcm_unsupported">לא זמין, השרת המרוחק אינו תומך בשירותי הענן של openHAB</string> + <string name="info_openhab_gcm_in_progress">מתבצע רישום ההתקן</string> + <string name="info_openhab_gcm_failed">רישום ההתקן נכשל</string> + <string name="info_openhab_gcm_failed_with_reason">רישום ההתקן נכשל עקב בעיית שירותי גוגל: s%</string> + <string name="info_openhab_gcm_connected">המכשיר נרשם בהצלחה לשירות העברת הודעות בענן של גוגל (FCM)</string> + <string name="notification_channel_default">ברירת מחדל</string> + <string name="notification_channel_severity_value">דרגת חומרה \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d התראה חדשה</item> + <item quantity="two">%d התראות חדשות</item> + <item quantity="many">%d התראות חדשות</item> + <item quantity="other">%d התראות חדשות</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-ja/strings.xml b/mobile/src/full/res/values-ja/strings.xml index 0c7381b512933b451fd6b372a61adffb262a0ff4..1c50f5a778c64fbbb32e413b7f5a655a32986f70 100644 --- a/mobile/src/full/res/values-ja/strings.xml +++ b/mobile/src/full/res/values-ja/strings.xml @@ -1,7 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_in_progress">デバイスの登録処理中です</string> - <string name="info_openhab_gcm_failed">デバイス登録に失敗しました</string> - <string name="info_openhab_gcm_connected">デバイスが Google クラウドメッセージングに正常に登録されました</string> + <string name="info_openhab_gcm_no_remote">使用できません。リモートサーバーが設定されていません</string> + <string name="info_openhab_gcm_unsupported">使用できません。リモートサーバーは openHAB クラウドインスタンスではありません</string> + <string name="info_openhab_gcm_in_progress">デバイスの登録処理中です</string> + <string name="info_openhab_gcm_failed">デバイス登録に失敗しました</string> + <string name="notification_channel_default">デフォルト</string> + <string name="notification_channel_severity_value">重要度 \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="other">%d の新しい通知</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-nl/strings.xml b/mobile/src/full/res/values-nl/strings.xml index 87f95a9cc7829609d666e25cab5f2c850d68cba6..b3c3f3e2ae6e637c7a117577ab0f4986033ca378 100644 --- a/mobile/src/full/res/values-nl/strings.xml +++ b/mobile/src/full/res/values-nl/strings.xml @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Niet beschikbaar, remote-server is niet geconfigureerd</string> - <string name="info_openhab_gcm_unsupported">Niet beschikbaar, remote-server is geen openHAB cloud instance</string> - <string name="info_openhab_gcm_in_progress">Apparaat-registratie is bezig</string> - <string name="info_openhab_gcm_failed">Apparaat-registratie mislukt</string> - <string name="info_openhab_gcm_connected">Apparaat registratie bij Google Cloud Messaging gelukt</string> - <string name="notification_channel_default">Standaard</string> - <string name="notification_channel_severity_value">Ernst \'%1$s\'</string> + <string name="info_openhab_gcm_no_remote">Niet beschikbaar, externe server is niet geconfigureerd</string> + <string name="info_openhab_gcm_unsupported">Niet beschikbaar, externe server is geen openHAB cloud instance</string> + <string name="info_openhab_gcm_in_progress">Apparaat-registratie is bezig</string> + <string name="info_openhab_gcm_failed">Apparaat-registratie mislukt</string> + <string name="notification_channel_default">Standaard</string> + <string name="notification_channel_severity_value">Ernst \'%1$s\'</string> </resources> diff --git a/mobile/src/full/res/values-no/strings.xml b/mobile/src/full/res/values-no/strings.xml index 50dabeecb23f3b2c99ace064dee03483f5ae88df..bcb54b8841ee4ac0308a6e53e57283c34b36dc8d 100644 --- a/mobile/src/full/res/values-no/strings.xml +++ b/mobile/src/full/res/values-no/strings.xml @@ -1,11 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Utilgjengelig, ekstern server er ikke konfigurert</string> - <string name="info_openhab_gcm_unsupported">Utilgjengelig, ekstern server er ikke en openHAB cloud instans</string> - <string name="info_openhab_gcm_in_progress">Enhetsregistrering er igang</string> - <string name="info_openhab_gcm_failed">Enhetsregistrering feilet</string> - <string name="info_openhab_gcm_connected">Enhetsregistrering med Google Cloud Messaging vellykket</string> - <string name="notification_channel_default">Standard</string> - <string name="notification_channel_severity_value">Alvorlighetsgrad \'%1$s\'</string> + <string name="info_openhab_gcm_no_remote">Utilgjengelig, ekstern server er ikke konfigurert</string> + <string name="info_openhab_gcm_unsupported">Utilgjengelig, ekstern server er ikke en openHAB cloud instans</string> + <string name="info_openhab_gcm_in_progress">Enhetsregistrering er igang</string> + <string name="info_openhab_gcm_failed">Enhetsregistrering feilet</string> + <string name="notification_channel_default">Standard</string> + <string name="notification_channel_severity_value">Alvorlighetsgrad \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nytt varsel</item> + <item quantity="other">%d nye varsler</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-pl/strings.xml b/mobile/src/full/res/values-pl/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..23ae8fd6a74b8d7684530146c1e5fd2606194985 100644 --- a/mobile/src/full/res/values-pl/strings.xml +++ b/mobile/src/full/res/values-pl/strings.xml @@ -1,3 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">Niedostępny, zdalny serwer nie skonfigurowany</string> + <string name="info_openhab_gcm_unsupported">Niedostępny, zdalny serwer nie jest serwerem openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">W trakcie rejestracji urządzenia</string> + <string name="info_openhab_gcm_failed">Rejestracja urządzenia nie powiodła się</string> + <string name="info_openhab_gcm_connected">Pomyślnie zarejestrowano urządzenie z Firebase Cloud Messaging</string> + <string name="notification_channel_default">Domyślne</string> + <string name="notification_channel_severity_value">Surowość %1$s</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nowe powiadomienie</item> + <item quantity="few">%d nowe powiadomienia</item> + <item quantity="many">%d nowych powiadomień</item> + <item quantity="other">%d nowych powiadomień</item> + </plurals> +</resources> diff --git a/mobile/src/full/res/values-pt-rBR/strings.xml b/mobile/src/full/res/values-pt-rBR/strings.xml index 84143b5d4b9de301b7f2df5601382970ccd2c432..15079d2374375873b29117134cb4f4ab7a596499 100644 --- a/mobile/src/full/res/values-pt-rBR/strings.xml +++ b/mobile/src/full/res/values-pt-rBR/strings.xml @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Indisponível, o servidor remoto não está configurado</string> - <string name="info_openhab_gcm_unsupported">Indisponível, servidor remoto não é um openHAB</string> - <string name="info_openhab_gcm_in_progress">Registo do dispositivo está em andamento</string> - <string name="info_openhab_gcm_failed">Registo de dispositivo falhou</string> - <string name="info_openhab_gcm_connected">Dispositivo registrado com êxito no Google Cloud Messaging</string> - <string name="notification_channel_default">Padrão</string> - <string name="notification_channel_severity_value">Gravidade \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d nova notificação</item> - <item quantity="other">%d novas notificações</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Indisponível, o servidor remoto não está configurado</string> + <string name="info_openhab_gcm_unsupported">Indisponível, servidor remoto não é um openHAB</string> + <string name="info_openhab_gcm_in_progress">Registo do dispositivo está em andamento</string> + <string name="info_openhab_gcm_failed">Registo de dispositivo falhou</string> + <string name="info_openhab_gcm_connected">Dispositivo foi registrado com sucesso no Firebase Cloud Messaging</string> + <string name="notification_channel_default">Padrão</string> + <string name="notification_channel_severity_value">Gravidade \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d nova notificação</item> + <item quantity="other">%d novas notificações</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-ro/strings.xml b/mobile/src/full/res/values-ro/strings.xml index 57adec1f60b469fc4d4443e6e3f92064c785ab48..1ce79e954fad05be92c43b25d7ced8300c17eadf 100644 --- a/mobile/src/full/res/values-ro/strings.xml +++ b/mobile/src/full/res/values-ro/strings.xml @@ -1,16 +1,15 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Indisponibil, serverul distant nu este configurat</string> - <string name="info_openhab_gcm_unsupported">Indisponibil, serverul distant nu este o instanță openHAB cloud</string> - <string name="info_openhab_gcm_in_progress">Înregistrarea dispozitivului este în progres</string> - <string name="info_openhab_gcm_failed">Înregistrarea dispozitivului a eșuat</string> - <string name="info_openhab_gcm_connected">Dispozitivul a fost înregistrat cu succes în serviciul Google Cloud Messaging</string> - <string name="notification_channel_default">Implicit</string> - <string name="notification_channel_severity_value">Severitate \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d Notificare nouă</item> - <item quantity="few">%d Notificări noi</item> - <item quantity="other">%d Notificări noi</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Indisponibil, serverul distant nu este configurat</string> + <string name="info_openhab_gcm_unsupported">Indisponibil, serverul distant nu este o instanță openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">Înregistrarea dispozitivului este în progres</string> + <string name="info_openhab_gcm_failed">Înregistrarea dispozitivului a eșuat</string> + <string name="notification_channel_default">Implicit</string> + <string name="notification_channel_severity_value">Severitate \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d Notificare nouă</item> + <item quantity="few">%d Notificări noi</item> + <item quantity="other">%d Notificări noi</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-ru/strings.xml b/mobile/src/full/res/values-ru/strings.xml index 4eea35e080b94f9131202268a20853c637f18e72..bd35808c201a54456c8950268513d14125f8fbc0 100644 --- a/mobile/src/full/res/values-ru/strings.xml +++ b/mobile/src/full/res/values-ru/strings.xml @@ -1,11 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Недоступно. Удаленный сервер не сконфигурирован</string> - <string name="info_openhab_gcm_unsupported">Недоступно. Удаленный сервер openHAB не подключен к облаку</string> - <string name="info_openhab_gcm_in_progress">Устройство регестрируется...</string> - <string name="info_openhab_gcm_failed">Ошибка регистрации устройства</string> - <string name="info_openhab_gcm_connected">Устройство успешно зарегистрировано в Google Cloud Messaging</string> - <string name="notification_channel_default">По умолчанию</string> - <string name="notification_channel_severity_value">Строго \'%1$s\'</string> + <string name="info_openhab_gcm_no_remote">Недоступно. Удаленный сервер не сконфигурирован</string> + <string name="info_openhab_gcm_unsupported">Недоступно. Удаленный сервер openHAB не подключен к облаку</string> + <string name="info_openhab_gcm_in_progress">Устройство регестрируется...</string> + <string name="info_openhab_gcm_failed">Ошибка регистрации устройства</string> + <string name="notification_channel_default">По умолчанию</string> + <string name="notification_channel_severity_value">Строго \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d уведомление</item> + <item quantity="few">%d уведомления</item> + <item quantity="many">%d уведомлений</item> + <item quantity="other">%d уведомлений</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-sv/strings.xml b/mobile/src/full/res/values-sv/strings.xml index eb8e4ef0089a90ea8d70f8b0a4633b0f4405f083..2b5efc8c25fdda154f123bcb592cdf04ce8affd3 100644 --- a/mobile/src/full/res/values-sv/strings.xml +++ b/mobile/src/full/res/values-sv/strings.xml @@ -1,15 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">Inte tillgängligt, konfiguration för fjärrserver saknas</string> - <string name="info_openhab_gcm_unsupported">Otillgänglig, fjärrserver kör inte openHAB</string> - <string name="info_openhab_gcm_in_progress">Enhetsregistrering pågår</string> - <string name="info_openhab_gcm_failed">Enhetsregistrering misslyckades</string> - <string name="info_openhab_gcm_connected">Enheten är nu registrerad i Google Cloud Messaging</string> - <string name="notification_channel_default">Standard</string> - <string name="notification_channel_severity_value">Felgrad \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="one">%d ny notifiering</item> - <item quantity="other">%d nya notifieringar</item> - </plurals> + <string name="info_openhab_gcm_no_remote">Inte tillgängligt, konfiguration för fjärrserver saknas</string> + <string name="info_openhab_gcm_unsupported">Otillgänglig, fjärrserver kör inte openHAB</string> + <string name="info_openhab_gcm_in_progress">Enhetsregistrering pågår</string> + <string name="info_openhab_gcm_failed">Enhetsregistrering misslyckades</string> + <string name="notification_channel_default">Standard</string> + <string name="notification_channel_severity_value">Felgrad \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d ny notifiering</item> + <item quantity="other">%d nya notifieringar</item> + </plurals> </resources> diff --git a/mobile/src/full/res/values-tr/strings.xml b/mobile/src/full/res/values-tr/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..b4c1a80195decbf52d284bfc95c7b484bb180ec7 100644 --- a/mobile/src/full/res/values-tr/strings.xml +++ b/mobile/src/full/res/values-tr/strings.xml @@ -1,3 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">Kullanılamıyor, uzak sunucu yapılandırılmamış</string> + <string name="info_openhab_gcm_unsupported">Kullanılamıyor, uzak sunucu bir openHAB bulut örneği değil</string> + <string name="info_openhab_gcm_in_progress">Cihaz kaydı devam ediyor</string> + <string name="info_openhab_gcm_failed">Cihaz kaydı başarısız oldu</string> + <string name="info_openhab_gcm_connected">Cihaz Firebase Cloud Messaging’e başarıyla kaydedildi</string> + <string name="notification_channel_default">Varsayılan</string> + <string name="notification_channel_severity_value">Önem derecesi \'%1$s\'</string> +</resources> diff --git a/mobile/src/full/res/values-uk/strings.xml b/mobile/src/full/res/values-uk/strings.xml index 41e2ea5aadbb69885be27911a850ea9122dce430..891413dfd8864ccf489fc424161cd2889f2d7219 100644 --- a/mobile/src/full/res/values-uk/strings.xml +++ b/mobile/src/full/res/values-uk/strings.xml @@ -1,3 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">Недоступно, віддалений сервер не налаштовано</string> + <string name="info_openhab_gcm_unsupported">Недоступно, віддалений сервер не є екземпляром openHAB cloud</string> + <string name="info_openhab_gcm_in_progress">Пристрій реєструється</string> + <string name="info_openhab_gcm_failed">Помилка реєстрації пристрою</string> + <string name="info_openhab_gcm_failed_with_reason">Збій реєстрації пристрою через проблему із сервісами Google Play: %s</string> + <string name="info_openhab_gcm_connected">Пристрій успішно зареєстровано в Firebase Cloud Messaging</string> + <string name="notification_channel_default">За замовчуванням</string> + <string name="notification_channel_severity_value">Строго \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="one">%d сповіщення</item> + <item quantity="few">%d сповіщення</item> + <item quantity="many">%d сповіщень</item> + <item quantity="other">%d сповіщення</item> + </plurals> +</resources> diff --git a/mobile/src/full/res/values-zh-rCN/strings.xml b/mobile/src/full/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5506ee2027621e28298790f6f8f36aed635cd2d6 --- /dev/null +++ b/mobile/src/full/res/values-zh-rCN/strings.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <string name="info_openhab_gcm_no_remote">不可用,未配置远程服务器</string> + <string name="info_openhab_gcm_unsupported">不可用,远程服务器非 openHAB 云端实例</string> + <string name="info_openhab_gcm_in_progress">设备注册正在进行</string> + <string name="info_openhab_gcm_failed">设备注册失败</string> + <string name="info_openhab_gcm_connected">设备已成功注册 Firebase 云消息</string> + <string name="notification_channel_default">默认</string> + <string name="notification_channel_severity_value">严重性 \'%1$s\'</string> + <plurals name="summary_notification_text"> + <item quantity="other">%d 条新消息</item> + </plurals> +</resources> diff --git a/mobile/src/full/res/values-zh/strings.xml b/mobile/src/full/res/values-zh/strings.xml index f99b37ab097c8ce8bc9d52420e484e6f62db37c8..41e2ea5aadbb69885be27911a850ea9122dce430 100644 --- a/mobile/src/full/res/values-zh/strings.xml +++ b/mobile/src/full/res/values-zh/strings.xml @@ -1,14 +1,3 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> -<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <string name="info_openhab_gcm_no_remote">不可用,未配置远程服务器</string> - <string name="info_openhab_gcm_unsupported">不可用,远程服务器非 openHAB 云端实例</string> - <string name="info_openhab_gcm_in_progress">设备注册正在进行</string> - <string name="info_openhab_gcm_failed">设备注册失败</string> - <string name="info_openhab_gcm_connected">设备已成功注册 Google 云消息</string> - <string name="notification_channel_default">默认</string> - <string name="notification_channel_severity_value">严重性 \'%1$s\'</string> - <plurals name="summary_notification_text"> - <item quantity="other">%d 条新消息</item> - </plurals> -</resources> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"></resources> diff --git a/mobile/src/full/res/values/strings.xml b/mobile/src/full/res/values/strings.xml index 3b6d1192d15f3df7d8e0cfe60572d2763c1ceb86..950a73f611c76537cbea536c49321262f77bb205 100644 --- a/mobile/src/full/res/values/strings.xml +++ b/mobile/src/full/res/values/strings.xml @@ -4,7 +4,8 @@ <string name="info_openhab_gcm_unsupported">Unavailable, remote server isn\'t an openHAB cloud instance</string> <string name="info_openhab_gcm_in_progress">Device registration is in progress</string> <string name="info_openhab_gcm_failed">Device registration failed</string> - <string name="info_openhab_gcm_connected">Device successfully registered with Google Cloud Messaging</string> + <string name="info_openhab_gcm_failed_with_reason">Device registration failed due to a Google Play Services issue: %s</string> + <string name="info_openhab_gcm_connected">Device successfully registered with Firebase Cloud Messaging</string> <string name="notification_channel_default">Default</string> <string name="notification_channel_severity_value">Severity \'%1$s\'</string> diff --git a/mobile/src/main/AndroidManifest.xml b/mobile/src/main/AndroidManifest.xml index a47b09a5ae721ec001e47d62ce95b7a3f8c2bf87..c829adccd554640a7a969e5deb7b62611237954b 100644 --- a/mobile/src/main/AndroidManifest.xml +++ b/mobile/src/main/AndroidManifest.xml @@ -2,12 +2,15 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.openhab.habdroid" android:installLocation="internalOnly"> + <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> + <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> + <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-feature android:name="android.hardware.location.gps" @@ -17,86 +20,142 @@ android:required="false" /> <application + android:name=".core.OpenHabApplication" android:allowBackup="false" android:icon="@mipmap/icon" android:label="@string/app_name" + android:networkSecurityConfig="@xml/network_security_config" android:resizeableActivity="true" android:supportsPictureInPicture="false" - android:theme="@style/HABDroid.Light" android:supportsRtl="true" - android:name=".core.HabDroidApplication"> + android:theme="@style/HABDroid.Light"> <activity - android:name="org.openhab.habdroid.ui.PreferencesActivity" + android:name=".ui.PreferencesActivity" android:label="@string/app_preferences_name"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES" /> + <category android:name="android.intent.category.DEFAULT" /> </intent-filter> + <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="org.openhab.habdroid.ui.MainActivity" /> </activity> <activity - android:name="org.openhab.habdroid.ui.AboutActivity" - android:label="@string/about_title"/> + android:name=".ui.AboutActivity" + android:label="@string/about_title" /> <activity android:name="org.openhab.habdroid.ui.RecognitionsActivity" android:label="@string/recognitions_title"/> <activity - android:name="org.openhab.habdroid.ui.MainActivity" + android:name=".ui.LogActivity" + android:label="@string/log" /> + <activity + android:name=".ui.MainActivity" android:label="@string/app_name" android:launchMode="singleTop"> + <!-- for Nougat --> <layout - android:defaultHeight="500dp" android:defaultWidth="600dp" + android:defaultHeight="500dp" android:gravity="top|end" - android:minHeight="80dp" - android:minWidth="80dp" /> + android:minWidth="80dp" + android:minHeight="80dp" /> + <intent-filter> <action android:name="android.intent.action.MAIN" /> - <category android:name="android.intent.category.LAUNCHER" /> - </intent-filter> - <intent-filter> - <action android:name="android.nfc.action.NDEF_DISCOVERED" /> - <category android:name="android.intent.category.DEFAULT" /> - <data android:scheme="openhab" /> - </intent-filter> - <intent-filter> - <action android:name="android.intent.action.VIEW" /> - - <category android:name="android.intent.category.DEFAULT" /> - <category android:name="android.intent.category.BROWSABLE" /> - <data android:scheme="openhab" /> + <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity - android:name="org.openhab.habdroid.ui.WriteTagActivity" + android:name=".ui.WriteTagActivity" android:label="@string/title_activity_openhabwritetag" /> - <activity android:name="org.openhab.habdroid.ui.IntroActivity" - android:label="@string/app_intro"/> - <activity android:name="de.duenndns.ssl.MemorizingActivity" - android:theme="@style/Theme.AppCompat.Translucent" - android:excludeFromRecents="true" /> + <activity + android:name=".ui.IntroActivity" + android:label="@string/app_intro" /> + <activity + android:name="de.duenndns.ssl.MemorizingActivity" + android:excludeFromRecents="true" + android:theme="@style/Theme.AppCompat.Translucent" /> + <activity android:name=".ui.ItemPickerActivity" + android:label="@string/item_picker" > + <intent-filter> + <action android:name="com.twofortyfouram.locale.intent.action.EDIT_CONDITION" /> + <action android:name="com.twofortyfouram.locale.intent.action.EDIT_SETTING" /> + </intent-filter> + </activity> + <service android:name=".core.VoiceService" android:exported="false" /> <receiver - android:name=".ui.VoiceWidget" + android:name=".ui.homescreenwidget.VoiceWidget" android:label="@string/title_voice_widget"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> + <meta-data android:name="android.appwidget.provider" android:resource="@xml/voice_widget_info" /> </receiver> + <receiver + android:name=".ui.homescreenwidget.VoiceWidgetWithIcon" + android:label="@string/title_voice_widget_icon"> + <intent-filter> + <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> + </intent-filter> + + <meta-data + android:name="android.appwidget.provider" + android:resource="@xml/voice_widget_with_icon_info" /> + </receiver> <receiver android:name=".core.OnUpdateBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver> + <receiver + android:name=".background.BackgroundTasksManager" + android:enabled="true" + android:exported="true"> + <intent-filter> + <action android:name="android.app.action.NEXT_ALARM_CLOCK_CHANGED" /> + </intent-filter> + <intent-filter> + <action android:name="android.intent.action.LOCALE_CHANGED" /> + </intent-filter> + <intent-filter> + <action android:name="com.twofortyfouram.locale.intent.action.QUERY_CONDITION" /> + <action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" /> + </intent-filter> + </receiver> + + <activity + android:name=".background.NfcReceiveActivity" + android:launchMode="singleInstance" + android:theme="@android:style/Theme.NoDisplay" + android:noHistory="true"> + <intent-filter> + <action android:name="android.nfc.action.NDEF_DISCOVERED" /> + + <category android:name="android.intent.category.DEFAULT" /> + + <data android:scheme="openhab" /> + </intent-filter> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + + <data android:scheme="openhab" /> + </intent-filter> + </activity> </application> -</manifest> + +</manifest> \ No newline at end of file diff --git a/mobile/src/main/java/de/duenndns/ssl/MemorizingTrustManager.java b/mobile/src/main/java/de/duenndns/ssl/MemorizingTrustManager.java index ea24ac1fc61c0ab2f224b391bc5b5be30627a42b..d63626db0d2b169104e67da840b0a78077350ff8 100644 --- a/mobile/src/main/java/de/duenndns/ssl/MemorizingTrustManager.java +++ b/mobile/src/main/java/de/duenndns/ssl/MemorizingTrustManager.java @@ -60,6 +60,7 @@ import java.security.cert.CertificateExpiredException; import java.security.cert.CertificateParsingException; import java.security.cert.X509Certificate; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Collection; import java.util.Enumeration; import java.util.List; @@ -389,7 +390,7 @@ public class MemorizingTrustManager implements X509TrustManager { } // if the certificate is stored in the app key store, it is considered "known" - private boolean isCertKnown(X509Certificate cert) { + public boolean isCertKnown(Certificate cert) { try { return appKeyStore.getCertificateAlias(cert) != null; } catch (KeyStoreException e) { @@ -418,7 +419,7 @@ public class MemorizingTrustManager implements X509TrustManager { public void checkCertTrusted(X509Certificate[] chain, String authType, boolean isServer) throws CertificateException { - LOGGER.log(Level.FINE, "checkCertTrusted(" + chain + ", " + authType + ", " + isServer + ")"); + LOGGER.log(Level.FINE, "checkCertTrusted(" + chain.length + " certs, " + authType + ", " + isServer + ")"); try { LOGGER.log(Level.FINE, "checkCertTrusted: trying appTrustManager"); if (isServer) diff --git a/mobile/src/main/java/org/openhab/habdroid/background/BackgroundTasksManager.java b/mobile/src/main/java/org/openhab/habdroid/background/BackgroundTasksManager.java new file mode 100644 index 0000000000000000000000000000000000000000..b892224dd154756c7c7a949c623a7e8e14865834 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/background/BackgroundTasksManager.java @@ -0,0 +1,237 @@ +package org.openhab.habdroid.background; + +import android.app.AlarmManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Log; +import android.util.Pair; +import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; +import androidx.work.Constraints; +import androidx.work.NetworkType; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkInfo; +import androidx.work.WorkManager; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.model.NfcTag; +import org.openhab.habdroid.ui.ItemPickerActivity; +import org.openhab.habdroid.ui.widget.ItemUpdatingPreference; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.TaskerIntent; +import org.openhab.habdroid.util.Util; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public class BackgroundTasksManager extends BroadcastReceiver { + private static final String TAG = BackgroundTasksManager.class.getSimpleName(); + + static final String ACTION_RETRY_UPLOAD = + "org.openhab.habdroid.background.action.RETRY_UPLOAD"; + static final String EXTRA_RETRY_INFOS = "retryInfos"; + + private static final String WORKER_TAG_ITEM_UPLOADS = "itemUploads"; + static final String WORKER_TAG_PREFIX_NFC = "nfc-"; + private static final String WORKER_TAG_PREFIX_TASKER = "tasker-"; + + static final List<String> KNOWN_KEYS = Arrays.asList( + Constants.PREFERENCE_ALARM_CLOCK + ); + + private interface ValueGetter { + String getValue(Context context); + } + private static final HashMap<String, ValueGetter> VALUE_GETTER_MAP = new HashMap<>(); + + // need to keep a ref for this to avoid it being GC'ed + // (SharedPreferences only keeps a WeakReference) + private static PrefsListener sPrefsListener; + + public static void initialize(Context context) { + final WorkManager workManager = WorkManager.getInstance(); + LiveData<List<WorkInfo>> infoLiveData = + workManager.getWorkInfosByTagLiveData(WORKER_TAG_ITEM_UPLOADS); + infoLiveData.observeForever(new NotificationUpdateObserver(context)); + + sPrefsListener = new PrefsListener(context); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + prefs.registerOnSharedPreferenceChangeListener(sPrefsListener); + } + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + Log.d(TAG, "onReceive() with intent " + intent.getAction()); + + if (AlarmManager.ACTION_NEXT_ALARM_CLOCK_CHANGED.equals(action)) { + Log.d(TAG, "Alarm clock changed"); + scheduleWorker(context, Constants.PREFERENCE_ALARM_CLOCK); + } else if (Intent.ACTION_LOCALE_CHANGED.equals(action)) { + Log.d(TAG, "Locale changed, recreate notification channels"); + NotificationUpdateObserver.createNotificationChannels(context); + } else if (ACTION_RETRY_UPLOAD.equals(action)) { + List<RetryInfo> retryInfos = intent.getParcelableArrayListExtra(EXTRA_RETRY_INFOS); + for (RetryInfo info : retryInfos) { + enqueueItemUpload(info.mTag, info.mItemName, info.mValue); + } + } else if (TaskerIntent.ACTION_QUERY_CONDITION.equals(action) + || TaskerIntent.ACTION_FIRE_SETTING.equals(action)) { + if (!PreferenceManager.getDefaultSharedPreferences(context) + .getBoolean(Constants.PREFERENCE_TASKER_PLUGIN_ENABLED, false)) { + Log.d(TAG, "Tasker plugin is disabled"); + return; + } + Bundle bundle = intent.getBundleExtra(TaskerIntent.EXTRA_BUNDLE); + if (bundle == null) { + return; + } + String itemName = bundle.getString(ItemPickerActivity.EXTRA_ITEM_NAME); + String state = bundle.getString(ItemPickerActivity.EXTRA_ITEM_STATE); + if (TextUtils.isEmpty(itemName) || TextUtils.isEmpty(state)) { + return; + } + enqueueItemUpload(WORKER_TAG_PREFIX_TASKER + itemName, itemName, state); + } + } + + private static void scheduleWorker(Context context, String key) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + final Pair<Boolean, String> setting; + + if (prefs.getBoolean(Constants.PREFERENCE_DEMOMODE, false)) { + setting = null; // Don't attempt any uploads in demo mode + } else { + setting = ItemUpdatingPreference.parseValue(prefs.getString(key, null)); + } + + if (setting == null || !setting.first) { + WorkManager.getInstance().cancelAllWorkByTag(key); + return; + } + + ValueGetter getter = VALUE_GETTER_MAP.get(key); + if (getter == null) { + return; + } + + String prefix = prefs.getString(Constants.PREFERENCE_SEND_DEVICE_INFO_PREFIX, ""); + enqueueItemUpload(key, prefix + setting.second, getter.getValue(context)); + } + + private static void enqueueItemUpload(String tag, String itemName, String value) { + final Constraints constraints = new Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build(); + final OneTimeWorkRequest workRequest = + new OneTimeWorkRequest.Builder(ItemUpdateWorker.class) + .setConstraints(constraints) + .addTag(tag) + .addTag(WORKER_TAG_ITEM_UPLOADS) + .setInputData(ItemUpdateWorker.buildData(itemName, value)) + .build(); + + final WorkManager workManager = WorkManager.getInstance(); + Log.d(TAG, "Scheduling work for tag " + tag); + workManager.cancelAllWorkByTag(tag); + workManager.enqueue(workRequest); + } + + public static void enqueueNfcUpdateIfNeeded(Context context, @Nullable NfcTag tag) { + if (tag != null && tag.sitemap() == null) { + String message; + if (TextUtils.isEmpty(tag.label())) { + message = context.getString(R.string.nfc_tag_recognized_item, tag.item()); + } else { + message = context.getString(R.string.nfc_tag_recognized_label, tag.label()); + } + Util.showToast(context, message); + enqueueItemUpload(WORKER_TAG_PREFIX_NFC + tag.item(), tag.item(), tag.state()); + } + } + + static class RetryInfo implements Parcelable { + final String mTag; + final String mItemName; + final String mValue; + + RetryInfo(String tag, String itemName, String value) { + mTag = tag; + mItemName = itemName; + mValue = value; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeString(mTag); + out.writeString(mItemName); + out.writeString(mValue); + } + + public static Parcelable.Creator<RetryInfo> CREATOR = new Parcelable.Creator<RetryInfo>() { + @Override + public RetryInfo createFromParcel(Parcel in) { + return new RetryInfo(in.readString(), in.readString(), in.readString()); + } + + @Override + public RetryInfo[] newArray(int size) { + return new RetryInfo[size]; + } + }; + } + + private static class PrefsListener + implements SharedPreferences.OnSharedPreferenceChangeListener { + private final Context mContext; + + private PrefsListener(Context context) { + mContext = context.getApplicationContext(); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { + if (Constants.PREFERENCE_DEMOMODE.equals(key)) { + if (prefs.getBoolean(key, false)) { + // demo mode was enabled -> cancel all uploads and clear DB + // to clear out notifications + final WorkManager wm = WorkManager.getInstance(); + wm.cancelAllWorkByTag(WORKER_TAG_ITEM_UPLOADS); + wm.pruneWork(); + } else { + // demo mode was disabled -> reschedule uploads + for (String knownKey : KNOWN_KEYS) { + scheduleWorker(mContext, knownKey); + } + } + } else if (KNOWN_KEYS.contains(key)) { + scheduleWorker(mContext, key); + } + } + } + + static { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + VALUE_GETTER_MAP.put(Constants.PREFERENCE_ALARM_CLOCK, context -> { + AlarmManager alarmManager = + (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + AlarmManager.AlarmClockInfo info = alarmManager.getNextAlarmClock(); + return String.valueOf(info != null ? info.getTriggerTime() : 0); + }); + } + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/background/ItemUpdateWorker.java b/mobile/src/main/java/org/openhab/habdroid/background/ItemUpdateWorker.java new file mode 100644 index 0000000000000000000000000000000000000000..0fdcbe9a2a232e8be3c0feb3139fa6a38e3ba073 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/background/ItemUpdateWorker.java @@ -0,0 +1,86 @@ +package org.openhab.habdroid.background; + +import android.content.Context; +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.work.Data; +import androidx.work.Worker; +import androidx.work.WorkerParameters; + +import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.core.connection.ConnectionFactory; +import org.openhab.habdroid.core.connection.exception.ConnectionException; +import org.openhab.habdroid.util.SyncHttpClient; + +import java.util.Locale; + +public class ItemUpdateWorker extends Worker { + private static final String TAG = ItemUpdateWorker.class.getSimpleName(); + private static final int MAX_RETRIES = 3; + + private static final String INPUT_DATA_ITEM = "item"; + private static final String INPUT_DATA_VALUE = "value"; + + public static final String OUTPUT_DATA_HAS_CONNECTION = "hasConnection"; + public static final String OUTPUT_DATA_HTTP_STATUS = "httpStatus"; + public static final String OUTPUT_DATA_ITEM = "item"; + public static final String OUTPUT_DATA_VALUE = "value"; + public static final String OUTPUT_DATA_TIMESTAMP = "timestamp"; + + public static Data buildData(String item, String value) { + return new Data.Builder() + .putString(INPUT_DATA_ITEM, item) + .putString(INPUT_DATA_VALUE, value) + .build(); + } + + public ItemUpdateWorker( + @NonNull Context context, + @NonNull WorkerParameters params) { + super(context, params); + } + + @Override + public Result doWork() { + ConnectionFactory.waitForInitialization(); + + final Data data = getInputData(); + Connection connection; + + try { + Log.d(TAG, "Trying to get connection"); + connection = ConnectionFactory.getUsableConnection(); + } catch (ConnectionException e) { + Log.e(TAG, "Got no connection " + e); + return getRunAttemptCount() <= MAX_RETRIES + ? Result.retry() : Result.failure(buildOutputData(false, 0)); + } + + final String item = data.getString(INPUT_DATA_ITEM); + final String value = getInputData().getString(INPUT_DATA_VALUE); + final String url = String.format(Locale.US, "rest/items/%s", item); + final SyncHttpClient.HttpResult result = connection.getSyncHttpClient() + .post(url, value, "text/plain;charset=UTF-8"); + final Data outputData = buildOutputData(true, result.statusCode); + + if (result.isSuccessful()) { + Log.d(TAG, "Item '" + item + "' successfully updated to value " + value); + return Result.success(outputData); + } else { + Log.e(TAG, "Error sending alarm clock. Got HTTP error " + + result.statusCode, result.error); + return Result.failure(outputData); + } + } + + private Data buildOutputData(boolean hasConnection, int httpStatus) { + Data inputData = getInputData(); + return new Data.Builder() + .putBoolean(OUTPUT_DATA_HAS_CONNECTION, hasConnection) + .putInt(OUTPUT_DATA_HTTP_STATUS, httpStatus) + .putString(OUTPUT_DATA_ITEM, inputData.getString(INPUT_DATA_ITEM)) + .putString(OUTPUT_DATA_VALUE, inputData.getString(INPUT_DATA_VALUE)) + .putLong(OUTPUT_DATA_TIMESTAMP, System.currentTimeMillis()) + .build(); + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/background/NfcReceiveActivity.java b/mobile/src/main/java/org/openhab/habdroid/background/NfcReceiveActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..a6ea7906a113eb9b9fe6c6e1b9075847da84d47a --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/background/NfcReceiveActivity.java @@ -0,0 +1,43 @@ +package org.openhab.habdroid.background; + +import android.app.Activity; +import android.content.Intent; +import android.nfc.NfcAdapter; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; + +import org.openhab.habdroid.model.NfcTag; +import org.openhab.habdroid.ui.MainActivity; + +public class NfcReceiveActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + Intent intent = getIntent(); + if (intent == null || intent.getData() == null) { + finish(); + return; + } + + if (Intent.ACTION_VIEW.equals(intent.getAction()) + || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { + NfcTag tag = NfcTag.fromTagData(intent.getData()); + BackgroundTasksManager.enqueueNfcUpdateIfNeeded(this, tag); + if (tag != null && !TextUtils.isEmpty(tag.sitemap())) { + Intent startMainIntent = new Intent(this, MainActivity.class); + startMainIntent.setAction(MainActivity.ACTION_SITEMAP_SELECTED); + startMainIntent.putExtra(MainActivity.EXTRA_SITEMAP_URL, tag.sitemap()); + startActivity(startMainIntent); + } + } + + if (Build.VERSION.SDK_INT >= 21) { + finishAndRemoveTask(); + } else { + finish(); + } + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/background/NotificationUpdateObserver.java b/mobile/src/main/java/org/openhab/habdroid/background/NotificationUpdateObserver.java new file mode 100644 index 0000000000000000000000000000000000000000..847879652c54127893ceb99e4aee8fa641922cb2 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/background/NotificationUpdateObserver.java @@ -0,0 +1,234 @@ +package org.openhab.habdroid.background; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; +import android.os.Build; +import android.preference.PreferenceManager; +import androidx.annotation.StringRes; +import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; +import androidx.core.util.Pair; +import androidx.lifecycle.Observer; +import androidx.work.Data; +import androidx.work.WorkInfo; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.ui.MainActivity; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.Util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +class NotificationUpdateObserver implements Observer<List<WorkInfo>> { + private static final int NOTIFICATION_ID_BACKGROUND_WORK = 1000; + private static final String CHANNEL_ID_BACKGROUND = "background"; + private static final String CHANNEL_ID_BACKGROUND_ERROR = "backgroundError"; + + private final Context mContext; + + NotificationUpdateObserver(Context context) { + mContext = context.getApplicationContext(); + } + @Override + public void onChanged(List<WorkInfo> workInfos) { + // Find latest state for each tag + HashMap<String, WorkInfo> latestInfoByTag = new HashMap<>(); + for (WorkInfo info : workInfos) { + for (String tag : info.getTags()) { + if (BackgroundTasksManager.KNOWN_KEYS.contains(tag) + || tag.startsWith(BackgroundTasksManager.WORKER_TAG_PREFIX_NFC)) { + WorkInfo.State state = info.getState(); + if (state == WorkInfo.State.ENQUEUED || state == WorkInfo.State.RUNNING) { + // Always treat a running job as the 'current' one + latestInfoByTag.put(tag, info); + } else if (state == WorkInfo.State.SUCCEEDED + || state == WorkInfo.State.FAILED) { + // Succeeded and failed tasks have their timestamp in output data, so + // we can use that one to determine the newest one + WorkInfo existing = latestInfoByTag.get(tag); + WorkInfo.State existingState = + existing == null ? null : existing.getState(); + if (existingState == null) { + latestInfoByTag.put(tag, info); + } else if (existingState == WorkInfo.State.SUCCEEDED + || existingState == WorkInfo.State.FAILED) { + long ts = info.getOutputData().getLong( + ItemUpdateWorker.OUTPUT_DATA_TIMESTAMP, 0); + long existingTs = existing.getOutputData().getLong( + ItemUpdateWorker.OUTPUT_DATA_TIMESTAMP, 0); + if (ts > existingTs) { + latestInfoByTag.put(tag, info); + } + } + } + // Stop evaluating tags and advance to next info + break; + } + } + } + // Now, from the map create a list of work items that are either + // - enqueued (not yet running or retrying) + // - running + // - failed + boolean hasEnqueuedWork = false; + boolean hasRunningWork = false; + List<Pair<String, WorkInfo>> failedInfos = new ArrayList<>(); + + for (Map.Entry<String, WorkInfo> entry : latestInfoByTag.entrySet()) { + WorkInfo.State state = entry.getValue().getState(); + if (state == WorkInfo.State.ENQUEUED) { + hasEnqueuedWork = true; + } else if (state == WorkInfo.State.RUNNING) { + hasRunningWork = true; + } else if (state == WorkInfo.State.FAILED) { + failedInfos.add(Pair.create(entry.getKey(), entry.getValue())); + } + } + + final NotificationManager nm = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + + if (!failedInfos.isEmpty()) { + // show error notification + ArrayList<CharSequence> errors = new ArrayList<>(); + ArrayList<BackgroundTasksManager.RetryInfo> retryInfos = new ArrayList<>(); + for (Pair<String, WorkInfo> entry : failedInfos) { + Data data = entry.second.getOutputData(); + final String itemName = data.getString(ItemUpdateWorker.OUTPUT_DATA_ITEM); + final String value = data.getString(ItemUpdateWorker.OUTPUT_DATA_VALUE); + final boolean hadConnection = + data.getBoolean(ItemUpdateWorker.OUTPUT_DATA_HAS_CONNECTION, false); + final int httpStatus = + data.getInt(ItemUpdateWorker.OUTPUT_DATA_HTTP_STATUS, 0); + + retryInfos.add(new BackgroundTasksManager.RetryInfo(entry.first, itemName, value)); + if (hadConnection) { + errors.add(mContext.getString( + R.string.item_update_http_error, itemName, httpStatus)); + } else { + errors.add(mContext.getString( + R.string.item_update_connection_error, itemName)); + } + } + Notification n = createErrorNotification(mContext, errors, retryInfos); + createNotificationChannels(mContext); + nm.notify(NOTIFICATION_ID_BACKGROUND_WORK, n); + } else if (hasRunningWork || hasEnqueuedWork) { + // show waiting notification + @StringRes int messageResId = hasRunningWork + ? R.string.item_upload_in_progress : R.string.waiting_for_item_upload; + Notification n = createProgressNotification(mContext, messageResId); + createNotificationChannels(mContext); + nm.notify(NOTIFICATION_ID_BACKGROUND_WORK, n); + } else { + // clear notification + nm.cancel(NOTIFICATION_ID_BACKGROUND_WORK); + } + } + + /** + * Creates notification channels for background tasks. + * @param context + */ + static void createNotificationChannels(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return; + } + + NotificationManager nm = context.getSystemService(NotificationManager.class); + + String name = context.getString(R.string.notification_channel_background); + String description = + context.getString(R.string.notification_channel_background_description); + NotificationChannel channel = new NotificationChannel(CHANNEL_ID_BACKGROUND, name, + NotificationManager.IMPORTANCE_MIN); + channel.setDescription(description); + nm.createNotificationChannel(channel); + + name = context.getString(R.string.notification_channel_background_error); + description = + context.getString(R.string.notification_channel_background_error_description); + channel = new NotificationChannel(CHANNEL_ID_BACKGROUND_ERROR, name, + NotificationManager.IMPORTANCE_DEFAULT); + channel.setDescription(description); + channel.enableVibration(true); + channel.setLightColor(ContextCompat.getColor(context, R.color.openhab_orange)); + channel.enableLights(true); + nm.createNotificationChannel(channel); + } + + private static Notification createProgressNotification(Context context, + @StringRes int messageResId) { + return createBaseBuilder(context, CHANNEL_ID_BACKGROUND) + .setContentText(context.getString(messageResId)) + .setCategory(NotificationCompat.CATEGORY_PROGRESS) + .setOngoing(true) + .setPriority(NotificationCompat.PRIORITY_MIN) + .build(); + } + + private static Notification createErrorNotification(Context context, + ArrayList<CharSequence> errors, + ArrayList<BackgroundTasksManager.RetryInfo> retryInfos) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String text = context.getResources().getQuantityString(R.plurals.item_update_error_title, + errors.size(), errors.size()); + + NotificationCompat.Builder nb = createBaseBuilder(context, CHANNEL_ID_BACKGROUND_ERROR) + .setContentText(text) + .setCategory(NotificationCompat.CATEGORY_ERROR) + .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setLights(ContextCompat.getColor(context, R.color.openhab_orange), 3000, 3000) + .setSound(Uri.parse(prefs.getString(Constants.PREFERENCE_TONE, ""))) + .setVibrate(Util.getNotificationVibrationPattern(context)); + + if (errors.size() > 1) { + NotificationCompat.InboxStyle style = new NotificationCompat.InboxStyle(); + for (CharSequence error : errors) { + style.addLine(error); + } + nb.setStyle(style); + } else { + nb.setStyle(new NotificationCompat.BigTextStyle() + .bigText(errors.get(0)) + .setBigContentTitle(text)); + } + + if (!retryInfos.isEmpty()) { + Intent retryIntent = new Intent(context, BackgroundTasksManager.class) + .setAction(BackgroundTasksManager.ACTION_RETRY_UPLOAD) + .putExtra(BackgroundTasksManager.EXTRA_RETRY_INFOS, retryInfos); + PendingIntent retryPendingIntent = PendingIntent.getBroadcast(context, 0, + retryIntent, PendingIntent.FLAG_UPDATE_CURRENT); + nb.addAction(new NotificationCompat.Action(R.drawable.ic_refresh_grey_24dp, + context.getString(R.string.retry), retryPendingIntent)); + } + + return nb.build(); + } + + private static NotificationCompat.Builder createBaseBuilder(Context context, + String channelId) { + Intent notificationIntent = new Intent(context, MainActivity.class) + .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + PendingIntent contentIntent = PendingIntent.getActivity(context, 0, + notificationIntent, 0); + + return new NotificationCompat.Builder(context, channelId) + .setSmallIcon(R.drawable.ic_openhab_appicon_white_24dp) + .setContentTitle(context.getString(R.string.app_name)) + .setWhen(System.currentTimeMillis()) + .setAutoCancel(true) + .setContentIntent(contentIntent) + .setColor(ContextCompat.getColor(context, R.color.openhab_orange)); + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/core/HabDroidApplication.java b/mobile/src/main/java/org/openhab/habdroid/core/OpenHabApplication.java similarity index 69% rename from mobile/src/main/java/org/openhab/habdroid/core/HabDroidApplication.java rename to mobile/src/main/java/org/openhab/habdroid/core/OpenHabApplication.java index b40c8bc216df5bfc2f7aad07d4ec4504976d6bc0..f5c2576c39b041e294e8c5b826801b32cb51d140 100644 --- a/mobile/src/main/java/org/openhab/habdroid/core/HabDroidApplication.java +++ b/mobile/src/main/java/org/openhab/habdroid/core/OpenHabApplication.java @@ -2,13 +2,15 @@ package org.openhab.habdroid.core; import androidx.multidex.MultiDexApplication; +import org.openhab.habdroid.background.BackgroundTasksManager; import org.openhab.habdroid.core.connection.ConnectionFactory; -public class HabDroidApplication extends MultiDexApplication { +public class OpenHabApplication extends MultiDexApplication { @Override public void onCreate() { super.onCreate(); ConnectionFactory.initialize(this); + BackgroundTasksManager.initialize(this); } @Override diff --git a/mobile/src/main/java/org/openhab/habdroid/core/VoiceService.java b/mobile/src/main/java/org/openhab/habdroid/core/VoiceService.java index 952d0c388238306c39bdb143f03e0db0b574c3c7..9db1300cdb247706ea931a78ceca27a238fdde13 100644 --- a/mobile/src/main/java/org/openhab/habdroid/core/VoiceService.java +++ b/mobile/src/main/java/org/openhab/habdroid/core/VoiceService.java @@ -15,16 +15,14 @@ import android.os.Handler; import android.os.Looper; import android.speech.RecognizerIntent; import android.util.Log; -import android.widget.Toast; import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import es.dmoral.toasty.Toasty; import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.core.connection.ConnectionFactory; import org.openhab.habdroid.core.connection.exception.ConnectionException; import org.openhab.habdroid.util.SyncHttpClient; +import org.openhab.habdroid.util.Util; import java.util.HashMap; import java.util.List; @@ -35,7 +33,6 @@ import java.util.Locale; */ public class VoiceService extends IntentService { private static final String TAG = VoiceService.class.getSimpleName(); - private Handler mHandler = new Handler(Looper.getMainLooper()); public VoiceService() { super("VoiceService"); @@ -60,7 +57,7 @@ public class VoiceService extends IntentService { if (connection != null) { sendVoiceCommand(connection.getSyncHttpClient(), voiceCommand); } else { - showToast(getString(R.string.error_couldnt_determine_openhab_url)); + Util.showToast(this, getString(R.string.error_couldnt_determine_openhab_url)); } } @@ -71,7 +68,7 @@ public class VoiceService extends IntentService { voiceCommand = textMatchList.get(0); } Log.i(TAG, "Recognized text: " + voiceCommand); - showToast(getString(R.string.info_voice_recognized_text, voiceCommand)); + Util.showToast(this, getString(R.string.info_voice_recognized_text, voiceCommand)); return voiceCommand; } @@ -91,10 +88,4 @@ public class VoiceService extends IntentService { Log.e(TAG, "Sending voice command failed", result.error); } } - - private void showToast(CharSequence text) { - mHandler.post(() -> Toasty.custom(this, text, R.drawable.ic_openhab_appicon_24dp, - ContextCompat.getColor(this, R.color.openhab_orange), Toast.LENGTH_SHORT, - true, true).show()); - } } diff --git a/mobile/src/main/java/org/openhab/habdroid/core/connection/AbstractConnection.java b/mobile/src/main/java/org/openhab/habdroid/core/connection/AbstractConnection.java index e64d166a58b3255f9fc5236ede276569481eaf07..4d8b5a4ce623f082350c71cd3b4786fc521c9600 100644 --- a/mobile/src/main/java/org/openhab/habdroid/core/connection/AbstractConnection.java +++ b/mobile/src/main/java/org/openhab/habdroid/core/connection/AbstractConnection.java @@ -7,8 +7,10 @@ import okhttp3.OkHttpClient; import org.openhab.habdroid.util.AsyncHttpClient; import org.openhab.habdroid.util.SyncHttpClient; +import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; +import java.net.SocketTimeoutException; import java.net.URL; public abstract class AbstractConnection implements Connection { @@ -84,14 +86,37 @@ public abstract class AbstractConnection implements Connection { } else if (url.getProtocol().equals("https") && checkPort == -1) { checkPort = 443; } - Socket s = new Socket(); - s.connect(new InetSocketAddress(url.getHost(), checkPort), 1000); - Log.d(TAG, "Socket connected"); + Socket s = createConnectedSocket(new InetSocketAddress(url.getHost(), checkPort)); + if (s == null) { + return false; + } s.close(); return true; } catch (Exception e) { - Log.e(TAG, e.getMessage()); + Log.d(TAG, e.getMessage()); return false; } } + + private Socket createConnectedSocket(InetSocketAddress socketAddress) { + Socket s = new Socket(); + for (int retries = 0; retries < 10; retries++) { + try { + s.connect(socketAddress, 1000); + Log.d(TAG, "Socket connected (attempt " + retries + ")"); + return s; + } catch (SocketTimeoutException e) { + Log.d(TAG, "Socket timeout after " + retries + " retries"); + retries += 5; + } catch (IOException e) { + Log.d(TAG, "Socket creation failed (attempt " + retries + ")"); + try { + Thread.sleep(200); + } catch (InterruptedException ignored) { + // ignored + } + } + } + return null; + } } diff --git a/mobile/src/main/java/org/openhab/habdroid/core/connection/ConnectionFactory.java b/mobile/src/main/java/org/openhab/habdroid/core/connection/ConnectionFactory.java index 74b060a07af365dedd05df8c5461772680aa6e33..2c3634a5e0f1a7d87b01dd100684122f274802bf 100644 --- a/mobile/src/main/java/org/openhab/habdroid/core/connection/ConnectionFactory.java +++ b/mobile/src/main/java/org/openhab/habdroid/core/connection/ConnectionFactory.java @@ -17,11 +17,13 @@ import android.security.KeyChain; import android.security.KeyChainException; import android.util.Log; import androidx.annotation.VisibleForTesting; +import androidx.annotation.WorkerThread; import androidx.core.util.Pair; import de.duenndns.ssl.MemorizingTrustManager; import okhttp3.OkHttpClient; import okhttp3.internal.tls.OkHostnameVerifier; +import okhttp3.logging.HttpLoggingInterceptor; import org.openhab.habdroid.core.CloudMessagingHelper; import org.openhab.habdroid.core.connection.exception.ConnectionException; import org.openhab.habdroid.core.connection.exception.NetworkNotAvailableException; @@ -78,6 +80,7 @@ public final class ConnectionFactory extends BroadcastReceiver implements private final Context mContext; private final SharedPreferences mPrefs; private final MemorizingTrustManager mTrustManager; + private HttpLoggingInterceptor mHttpLogger; private OkHttpClient mHttpClient; private String mLastClientCertAlias; @@ -107,13 +110,21 @@ public final class ConnectionFactory extends BroadcastReceiver implements mPrefs = prefs; prefs.registerOnSharedPreferenceChangeListener(this); + mHttpLogger = new HttpLoggingInterceptor(); + updateHttpLoggerSettings(); + mTrustManager = new MemorizingTrustManager(context); mHttpClient = new OkHttpClient.Builder() .cache(CacheManager.getInstance(context).getHttpCache()) + .addInterceptor(mHttpLogger) .hostnameVerifier(mTrustManager.wrapHostnameVerifier(OkHostnameVerifier.INSTANCE)) .build(); updateHttpClientForClientCert(true); + // Relax per-host connection limit, as the default limit (max 5 connections per host) is + // too low considering SSE connections count against that limit. + mHttpClient.dispatcher().setMaxRequestsPerHost(mHttpClient.dispatcher().getMaxRequests()); + IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); // Make sure to ignore the initial sticky broadcast, as we're only interested in changes mIgnoreNextConnectivityChange = context.registerReceiver(null, filter) != null; @@ -149,7 +160,9 @@ public final class ConnectionFactory extends BroadcastReceiver implements * * It MUST NOT be called from the main thread. */ + @WorkerThread public static void waitForInitialization() { + sInstance.triggerConnectionUpdateIfNeededAndPending(); synchronized (sInstance.mInitializationLock) { while (!sInstance.mAvailableInitialized || !sInstance.mCloudInitialized) { try { @@ -170,10 +183,8 @@ public final class ConnectionFactory extends BroadcastReceiver implements if (l instanceof Activity) { mTrustManager.bindDisplayActivity((Activity) l); } - if (mNeedsUpdate) { - triggerConnectionUpdateIfNeeded(); - mNeedsUpdate = false; - } else if (mLocalConnection != null && mListeners.size() == 1) { + if (!triggerConnectionUpdateIfNeededAndPending() + && mLocalConnection != null && mListeners.size() == 1) { // When coming back from background, re-do connectivity check for // local connections, as the reachability of the local server might have // changed since we went to background @@ -197,6 +208,9 @@ public final class ConnectionFactory extends BroadcastReceiver implements @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (Constants.PREFERENCE_DEBUG_MESSAGES.equals(key)) { + updateHttpLoggerSettings(); + } if (CLIENT_CERT_UPDATE_TRIGGERING_KEYS.contains(key)) { updateHttpClientForClientCert(false); } @@ -221,10 +235,7 @@ public final class ConnectionFactory extends BroadcastReceiver implements * network connectivity, the respective exception is thrown. */ public static Connection getUsableConnection() throws ConnectionException { - if (sInstance.mNeedsUpdate) { - restartNetworkCheck(); - sInstance.mNeedsUpdate = false; - } + sInstance.triggerConnectionUpdateIfNeededAndPending(); if (sInstance.mConnectionFailureReason != null) { throw sInstance.mConnectionFailureReason; } @@ -265,7 +276,10 @@ public final class ConnectionFactory extends BroadcastReceiver implements // listener registration. mAvailableConnection = null; mConnectionFailureReason = null; - mNeedsUpdate = true; + synchronized (mInitializationLock) { + mAvailableInitialized = false; + mNeedsUpdate = true; + } } else { triggerConnectionUpdateIfNeeded(); } @@ -346,7 +360,7 @@ public final class ConnectionFactory extends BroadcastReceiver implements // Else if we are on Wifi, Ethernet, WIMAX or VPN network if (LOCAL_CONNECTION_TYPES.contains(info.getType())) { - // If local URL is configured and rechable + // If local URL is configured and reachable if (local != null && local.checkReachabilityInBackground()) { Log.d(TAG, "Connecting to local URL"); @@ -391,6 +405,16 @@ public final class ConnectionFactory extends BroadcastReceiver implements } } + private void updateHttpLoggerSettings() { + if (mPrefs.getBoolean(Constants.PREFERENCE_DEBUG_MESSAGES, false)) { + mHttpLogger.redactHeader("Authorization"); + mHttpLogger.redactHeader("set-cookie"); + mHttpLogger.setLevel(HttpLoggingInterceptor.Level.HEADERS); + } else { + mHttpLogger.setLevel(HttpLoggingInterceptor.Level.NONE); + } + } + private void updateHttpClientForClientCert(boolean forceUpdate) { String clientCertAlias = mPrefs.getBoolean(Constants.PREFERENCE_DEMOMODE, false) ? null // No client cert in demo mode @@ -457,6 +481,17 @@ public final class ConnectionFactory extends BroadcastReceiver implements } } + private boolean triggerConnectionUpdateIfNeededAndPending() { + synchronized (mInitializationLock) { + if (!mNeedsUpdate) { + return false; + } + mNeedsUpdate = false; + triggerConnectionUpdateIfNeeded(); + } + return true; + } + private void triggerConnectionUpdateIfNeeded() { mUpdateHandler.removeMessages(MSG_UPDATE_AVAILABLE); mUpdateHandler.removeMessages(MSG_UPDATE_CLOUD); diff --git a/mobile/src/main/java/org/openhab/habdroid/model/Item.java b/mobile/src/main/java/org/openhab/habdroid/model/Item.java index 2481e4919273616ff06d26125e7ce7012b88c5e9..17291ca4ec33f990af1d97d0395e5cbea860ac69 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/Item.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/Item.java @@ -21,8 +21,6 @@ import org.w3c.dom.NodeList; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * This is a class to hold basic information about openHAB Item. @@ -40,6 +38,7 @@ public abstract class Item implements Parcelable { Image, Location, Number, + NumberWithDimension, Player, Rollershutter, StringItem, @@ -48,6 +47,8 @@ public abstract class Item implements Parcelable { public abstract String name(); public abstract String label(); + @Nullable + public abstract String category(); public abstract Type type(); @Nullable public abstract Type groupType(); @@ -58,14 +59,7 @@ public abstract class Item implements Parcelable { @Nullable public abstract List<LabeledValue> options(); @Nullable - public abstract String state(); - public abstract boolean stateAsBoolean(); - public abstract float stateAsFloat(); - @SuppressWarnings("mutable") - @Nullable - public abstract float[] stateAsHsv(); - @Nullable - public abstract Integer stateAsBrightness(); + public abstract ParsedState state(); public boolean isOfTypeOrGroupType(Type type) { return type() == type || groupType() == type; @@ -75,103 +69,15 @@ public abstract class Item implements Parcelable { abstract static class Builder { public abstract Builder name(String name); public abstract Builder label(String label); + public abstract Builder category(String category); public abstract Builder type(Type type); public abstract Builder groupType(Type type); - public abstract Builder state(@Nullable String state); + public abstract Builder state(@Nullable ParsedState state); public abstract Builder link(@Nullable String link); public abstract Builder readOnly(boolean readOnly); public abstract Builder members(List<Item> members); public abstract Builder options(@Nullable List<LabeledValue> options); - - public Item build() { - String state = state(); - return stateAsBoolean(parseAsBoolean(state)) - .stateAsFloat(parseAsFloat(state)) - .stateAsHsv(parseAsHsv(state)) - .stateAsBrightness(parseAsBrightness(state)) - .autoBuild(); - } - - abstract String state(); - abstract Builder stateAsBoolean(boolean state); - abstract Builder stateAsFloat(float state); - abstract Builder stateAsHsv(float[] hsv); - abstract Builder stateAsBrightness(@Nullable Integer brightness); - abstract Item autoBuild(); - - private static boolean parseAsBoolean(String state) { - // For uninitialized/null state return false - if (state == null) { - return false; - } - // If state is ON for switches return True - if (state.equals("ON")) { - return true; - } - - Integer brightness = parseAsBrightness(state); - if (brightness != null) { - return brightness != 0; - } - try { - int decimalValue = Integer.valueOf(state); - return decimalValue > 0; - } catch (NumberFormatException e) { - return false; - } - } - - private static float parseAsFloat(String state) { - // For uninitialized/null state return zero - if (state == null) { - return 0f; - } else if ("ON".equals(state)) { - return 100f; - } else if ("OFF".equals(state)) { - return 0f; - } else { - try { - return Float.parseFloat(state); - } catch (NumberFormatException e) { - return 0f; - } - } - } - - private static float[] parseAsHsv(String state) { - if (state != null) { - String[] stateSplit = state.split(","); - if (stateSplit.length == 3) { // We need exactly 3 numbers to operate this - try { - return new float[]{ - Float.parseFloat(stateSplit[0]), - Float.parseFloat(stateSplit[1]) / 100, - Float.parseFloat(stateSplit[2]) / 100 - }; - } catch (NumberFormatException e) { - // fall through to returning null - } - } - } - return null; - } - - public static Integer parseAsBrightness(String state) { - if (state != null) { - Matcher hsbMatcher = HSB_PATTERN.matcher(state); - if (hsbMatcher.find()) { - try { - return Float.valueOf(hsbMatcher.group(3)).intValue(); - } catch (NumberFormatException e) { - // fall through - } - } - } - return null; - } - - private static final Pattern HSB_PATTERN = - Pattern.compile("^([0-9]*\\.?[0-9]+),([0-9]*\\.?[0-9]+),([0-9]*\\.?[0-9]+)$"); + public abstract Item build(); } private static Type parseType(String type) { @@ -182,9 +88,17 @@ public abstract class Item implements Parcelable { if (type.endsWith("Item")) { type = type.substring(0, type.length() - 4); } + // types can have subtypes (e.g. 'Number:Temperature'); split off those + int colonPos = type.indexOf(':'); + if (colonPos > 0) { + type = type.substring(0, colonPos); + } if ("String".equals(type)) { return Type.StringItem; } + if ("Number".equals(type) && colonPos > 0) { + return Type.NumberWithDimension; + } try { return Type.valueOf(type); } catch (IllegalArgumentException e) { @@ -210,12 +124,16 @@ public abstract class Item implements Parcelable { } } + if ("Uninitialized".equals(state) || "Undefined".equals(state)) { + state = null; + } + return new AutoValue_Item.Builder() .type(type) .groupType(groupType) .name(name) .label(name) - .state("Unitialized".equals(state) ? null : state) + .state(ParsedState.from(state, null)) .members(new ArrayList<>()) .link(link) .readOnly(false) @@ -273,15 +191,19 @@ public abstract class Item implements Parcelable { } } + String numberPattern = stateDescription != null + ? stateDescription.optString("pattern") : null; + return new AutoValue_Item.Builder() .type(parseType(jsonObject.getString("type"))) .groupType(parseType(jsonObject.optString("groupType"))) .name(name) .label(jsonObject.optString("label", name)) .link(jsonObject.optString("link", null)) + .category(jsonObject.optString("category", null)) .members(members) .options(options) - .state(state) + .state(ParsedState.from(state, numberPattern)) .readOnly(readOnly); } } diff --git a/mobile/src/main/java/org/openhab/habdroid/model/LinkedPage.java b/mobile/src/main/java/org/openhab/habdroid/model/LinkedPage.java index ecc0bd3ebc50a42f58176a47087d7908a03bf2ab..56072e9a1da84e675dcbcbcd35ba447488d6965c 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/LinkedPage.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/LinkedPage.java @@ -25,6 +25,7 @@ public abstract class LinkedPage implements Parcelable { public abstract String id(); public abstract String title(); public abstract String icon(); + public abstract String iconPath(); public abstract String link(); @AutoValue.Builder @@ -32,6 +33,7 @@ public abstract class LinkedPage implements Parcelable { public abstract Builder id(String id); public abstract Builder title(String title); public abstract Builder icon(String icon); + public abstract Builder iconPath(String iconPath); public abstract Builder link(String link); public LinkedPage build() { @@ -67,6 +69,7 @@ public abstract class LinkedPage implements Parcelable { .id(id) .title(title) .icon(icon) + .iconPath(String.format("images/%s.png", icon)) .link(link) .build(); } @@ -75,10 +78,12 @@ public abstract class LinkedPage implements Parcelable { if (jsonObject == null) { return null; } + String icon = jsonObject.optString("icon", null); return new AutoValue_LinkedPage.Builder() .id(jsonObject.optString("id", null)) .title(jsonObject.optString("title", null)) - .icon(jsonObject.optString("icon", null)) + .icon(icon) + .iconPath(String.format("icon/%s", icon)) .link(jsonObject.optString("link", null)) .build(); } diff --git a/mobile/src/main/java/org/openhab/habdroid/model/NfcTag.java b/mobile/src/main/java/org/openhab/habdroid/model/NfcTag.java new file mode 100644 index 0000000000000000000000000000000000000000..b71842d0e0936eaef39eadb3436aee9499285afa --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/model/NfcTag.java @@ -0,0 +1,63 @@ +package org.openhab.habdroid.model; + +import android.net.Uri; +import android.text.TextUtils; +import androidx.annotation.Nullable; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class NfcTag { + public static final String SCHEME = "openhab"; + public static final String QUERY_PARAMETER_ITEM_NAME = "i"; + public static final String DEPRECATED_QUERY_PARAMETER_ITEM_NAME = "item"; + public static final String QUERY_PARAMETER_STATE = "s"; + public static final String DEPRECATED_QUERY_PARAMETER_STATE = "command"; + public static final String QUERY_PARAMETER_MAPPED_STATE = "m"; + public static final String QUERY_PARAMETER_ITEM_LABEL = "l"; + + @Nullable + public abstract String sitemap(); + @Nullable + public abstract String item(); + @Nullable + public abstract String label(); + @Nullable + public abstract String state(); + @Nullable + public abstract String mappedState(); + + @AutoValue.Builder + abstract static class Builder { + abstract Builder sitemap(String sitemap); + abstract Builder item(String item); + abstract Builder label(String label); + abstract Builder state(String state); + abstract Builder mappedState(String mappedState); + + abstract NfcTag build(); + } + + public static @Nullable NfcTag fromTagData(Uri uri) { + if (uri == null || !SCHEME.equals(uri.getScheme())) { + return null; + } + String sitemap = uri.getPath(); + String item = TextUtils.isEmpty(uri.getQueryParameter(DEPRECATED_QUERY_PARAMETER_ITEM_NAME)) + ? uri.getQueryParameter(QUERY_PARAMETER_ITEM_NAME) + : uri.getQueryParameter(DEPRECATED_QUERY_PARAMETER_ITEM_NAME); + String label = uri.getQueryParameter(QUERY_PARAMETER_ITEM_LABEL); + String state = TextUtils.isEmpty(uri.getQueryParameter(DEPRECATED_QUERY_PARAMETER_STATE)) + ? uri.getQueryParameter(QUERY_PARAMETER_STATE) + : uri.getQueryParameter(DEPRECATED_QUERY_PARAMETER_STATE); + String mappedState = uri.getQueryParameter(QUERY_PARAMETER_MAPPED_STATE); + + return new AutoValue_NfcTag.Builder() + .sitemap(!TextUtils.isEmpty(sitemap) && TextUtils.isEmpty(item) ? sitemap : null) + .item(item) + .label(label) + .state(state) + .mappedState(mappedState) + .build(); + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/model/ParsedState.java b/mobile/src/main/java/org/openhab/habdroid/model/ParsedState.java new file mode 100644 index 0000000000000000000000000000000000000000..344e0373f3cf53db1a1343115a4b5977add2e527 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/model/ParsedState.java @@ -0,0 +1,259 @@ +package org.openhab.habdroid.model; + +import android.location.Location; +import android.os.Parcel; +import android.os.Parcelable; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.auto.value.AutoValue; + +import java.util.IllegalFormatException; +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@AutoValue +public abstract class ParsedState implements Parcelable { + public static class NumberState implements Parcelable { + public final Number mValue; + public final String mUnit; + public final String mFormat; + + public NumberState(int value) { + this(new Integer(value), null, null); + } + + public NumberState(float value) { + this(new Float(value), null, null); + } + + private NumberState(@NonNull Number value, String unit, String format) { + assert value instanceof Float || value instanceof Integer; + mValue = value; + mUnit = unit; + mFormat = format; + } + + /** + * Returns a new NumberState instance, basing its contents on the passed-in previous state. + * In particular, unit, format and number type (float/integer) will be taken from the + * previous state. If previous state is integer, the new value will be rounded accordingly. + * @param state Previous state to base on + * @param value New numeric value + * @return new NumberState instance + */ + public static NumberState withValue(NumberState state, float value) { + if (state == null) { + return new NumberState(value); + } + // Cast is important here to suppress automatic type conversion + // (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25) + @SuppressWarnings("RedundantCast") + final Number number = state.mValue instanceof Integer + ? (Number) new Integer(Math.round(value)) + : (Number) new Float(value); + return new NumberState(number, state.mUnit, state.mFormat); + } + + @Override + public String toString() { + return toString(Locale.getDefault()); + } + + /** + * Like {@link #toString() toString}, but using a specific locale for formatting. + */ + public String toString(Locale locale) { + if (mFormat != null && !mFormat.isEmpty()) { + final String actualFormat = mFormat.replace("%unit%", mUnit != null ? mUnit : ""); + try { + return String.format(locale, actualFormat, mValue); + } catch (IllegalFormatException e) { + // State format pattern doesn't match the actual data type + // -> ignore and fall back to our own formatting + } + } + if (mUnit == null) { + return formatValue(); + } + return formatValue() + " " + mUnit; + } + + public String formatValue() { + return mValue.toString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) { + if (mValue instanceof Float) { + parcel.writeInt(1); + parcel.writeFloat(mValue.floatValue()); + } else { + parcel.writeInt(0); + parcel.writeInt(mValue.intValue()); + } + parcel.writeString(mUnit); + parcel.writeString(mFormat); + } + + public static final Parcelable.Creator<NumberState> CREATOR = + new Parcelable.Creator<NumberState>() { + @Override + public NumberState createFromParcel(Parcel in) { + Number value = in.readInt() != 0 ? in.readFloat() : in.readInt(); + return new NumberState(value, in.readString(), in.readString()); + } + @Override + public NumberState[] newArray(int size) { + return new NumberState[size]; + } + }; + } + + @AutoValue.Builder + abstract static class Builder { + abstract Builder asString(String state); + abstract Builder asBoolean(boolean bool); + abstract Builder asNumber(@Nullable NumberState number); + abstract Builder asHsv(@Nullable float[] hsv); + abstract Builder asBrightness(@Nullable Integer brightness); + abstract Builder asLocation(@Nullable Location location); + abstract ParsedState build(); + } + + /** + * Parses a state string into the parsed representation. + * + * @param state State string to parse + * @param numberPattern Format to use when parsing the input as number + * @return null if state string is null, parsed representation otherwise + */ + public static ParsedState from(String state, String numberPattern) { + if (state == null) { + return null; + } + return new AutoValue_ParsedState.Builder() + .asString(state) + .asBoolean(parseAsBoolean(state)) + .asNumber(parseAsNumber(state, numberPattern)) + .asHsv(parseAsHsv(state)) + .asBrightness(parseAsBrightness(state)) + .asLocation(parseAsLocation(state)) + .build(); + } + + public abstract String asString(); + public abstract boolean asBoolean(); + @Nullable + public abstract NumberState asNumber(); + @SuppressWarnings("mutable") + @Nullable + public abstract float[] asHsv(); + @Nullable + public abstract Integer asBrightness(); + @Nullable + public abstract Location asLocation(); + + private static boolean parseAsBoolean(String state) { + // If state is ON for switches return True + if (state.equals("ON")) { + return true; + } + + Integer brightness = parseAsBrightness(state); + if (brightness != null) { + return brightness != 0; + } + try { + int decimalValue = Integer.valueOf(state); + return decimalValue > 0; + } catch (NumberFormatException e) { + return false; + } + } + + private static NumberState parseAsNumber(String state, String format) { + if ("ON".equals(state)) { + return new NumberState(100); + } else if ("OFF".equals(state)) { + return new NumberState(0); + } else { + int spacePos = state.indexOf(' '); + String number = spacePos >= 0 ? state.substring(0, spacePos) : state; + String unit = spacePos >= 0 ? state.substring(spacePos + 1) : null; + try { + // Cast is important here to suppress automatic type conversion + // (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.25) + @SuppressWarnings("RedundantCast") + final Number parsedNumber = number.indexOf('.') >= 0 + ? (Number) new Float(Float.parseFloat(number)) + : (Number) new Integer(Integer.parseInt(number)); + return new NumberState(parsedNumber, unit, format); + } catch (NumberFormatException e) { + return null; + } + } + } + + private static float[] parseAsHsv(String state) { + String[] stateSplit = state.split(","); + if (stateSplit.length == 3) { // We need exactly 3 numbers to operate this + try { + return new float[]{ + Float.parseFloat(stateSplit[0]), + Float.parseFloat(stateSplit[1]) / 100, + Float.parseFloat(stateSplit[2]) / 100 + }; + } catch (NumberFormatException e) { + // fall through + } + } + return null; + } + + private static Location parseAsLocation(String state) { + String[] splitState = state.split(","); + // Valid states are either "latitude,longitude" or "latitude,longitude,elevation", + if (splitState.length == 2 || splitState.length == 3) { + try { + Location l = new Location("openhab"); + l.setLatitude(Double.valueOf(splitState[0])); + l.setLongitude(Double.valueOf(splitState[1])); + l.setTime(System.currentTimeMillis()); + if (splitState.length == 3) { + l.setAltitude(Double.valueOf(splitState[2])); + } + // Do our best to avoid parsing e.g. HSV values into location by + // sanity checking the values + if (Math.abs(l.getLatitude()) <= 90 && Math.abs(l.getLongitude()) <= 180) { + return l; + } + } catch (NumberFormatException e) { + // ignored + } + } + return null; + } + + private static Integer parseAsBrightness(String state) { + Matcher hsbMatcher = HSB_PATTERN.matcher(state); + if (hsbMatcher.find()) { + try { + return Float.valueOf(hsbMatcher.group(3)).intValue(); + } catch (NumberFormatException e) { + // fall through + } + } + return null; + } + + private static final Pattern HSB_PATTERN = + Pattern.compile("^([0-9]*\\.?[0-9]+),([0-9]*\\.?[0-9]+),([0-9]*\\.?[0-9]+)$"); +} diff --git a/mobile/src/main/java/org/openhab/habdroid/model/ServerProperties.java b/mobile/src/main/java/org/openhab/habdroid/model/ServerProperties.java index 480ce49c8313dee07b62875f00997ebf7c2e2d73..e864fc3b22730c44782a116efb226d215e06c9ab 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/ServerProperties.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/ServerProperties.java @@ -34,6 +34,7 @@ public abstract class ServerProperties implements Parcelable { public static final int SERVER_FLAG_SSE_SUPPORT = 1 << 1; public static final int SERVER_FLAG_ICON_FORMAT_SUPPORT = 1 << 2; public static final int SERVER_FLAG_CHART_SCALING_SUPPORT = 1 << 3; + public static final int SERVER_FLAG_HABPANEL_INSTALLED = 1 << 4; public static class UpdateHandle { public void cancel() { @@ -66,6 +67,10 @@ public abstract class ServerProperties implements Parcelable { return (flags() & SERVER_FLAG_SSE_SUPPORT) != 0; } + public boolean hasHabpanelInstalled() { + return (flags() & SERVER_FLAG_HABPANEL_INSTALLED) != 0; + } + abstract Builder toBuilder(); @AutoValue.Builder @@ -119,6 +124,20 @@ public abstract class ServerProperties implements Parcelable { } catch (NumberFormatException nfe) { // ignored: older versions without SSE support didn't return a number } + + JSONArray linksJsonArray = result.optJSONArray("links"); + if (linksJsonArray == null) { + Log.e(TAG, "No 'links' array available"); + } else { + for (int i = 0; i < linksJsonArray.length(); i++) { + JSONObject extensionJson = linksJsonArray.getJSONObject(i); + if ("habpanel".equals(extensionJson.getString("type"))) { + flags |= SERVER_FLAG_HABPANEL_INSTALLED; + break; + } + } + } + handle.builder.flags(flags); fetchSitemaps(client, handle, successCb, failureCb); } catch (JSONException e) { diff --git a/mobile/src/main/java/org/openhab/habdroid/model/Widget.java b/mobile/src/main/java/org/openhab/habdroid/model/Widget.java index 6c485ee66623a99bd221837fe391c5ef28fc68c4..a2c860c7c070e0bc5733695b4898d7e9572adabf 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/Widget.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/Widget.java @@ -56,6 +56,8 @@ public abstract class Widget implements Parcelable { @Nullable public abstract String icon(); public abstract String iconPath(); + @Nullable + public abstract ParsedState state(); public abstract Type type(); @Nullable public abstract String url(); @@ -80,6 +82,7 @@ public abstract class Widget implements Parcelable { public abstract String service(); @Nullable public abstract Boolean legend(); + public abstract boolean switchSupport(); public abstract int height(); public boolean hasMappings() { @@ -106,6 +109,7 @@ public abstract class Widget implements Parcelable { public abstract Builder icon(@Nullable String icon); public abstract Builder iconPath(String iconPath); public abstract Builder type(Type type); + public abstract Builder state(@Nullable ParsedState state); public abstract Builder url(@Nullable String url); public abstract Builder item(@Nullable Item item); public abstract Builder linkedPage(@Nullable LinkedPage linkedPage); @@ -121,6 +125,7 @@ public abstract class Widget implements Parcelable { public abstract Builder period(String period); public abstract Builder service(String service); public abstract Builder legend(@Nullable Boolean legend); + public abstract Builder switchSupport(boolean switchSupport); public abstract Builder height(int height); public Widget build() { @@ -158,6 +163,7 @@ public abstract class Widget implements Parcelable { String id = null, label = null, icon = null, url = null; String period = "", service = "", encoding = null; String iconColor = null, labelColor = null, valueColor = null; + boolean switchSupport = false; Type type = Type.Unknown; float minValue = 0f, maxValue = 100f, step = 1f; int refresh = 0, height = 0; @@ -188,6 +194,8 @@ public abstract class Widget implements Parcelable { case "valuecolor": valueColor = childNode.getTextContent(); break; case "labelcolor": labelColor = childNode.getTextContent(); break; case "encoding": encoding = childNode.getTextContent(); break; + case "switchSupport": + switchSupport = Boolean.valueOf(childNode.getTextContent()); break; case "mapping": NodeList mappingChildNodes = childNode.getChildNodes(); String mappingCommand = ""; @@ -221,6 +229,7 @@ public abstract class Widget implements Parcelable { .id(id) .parentId(parent != null ? parent.id() : null) .type(type) + .state(item != null ? item.state() : null) .label(label) .icon(icon) .iconPath(String.format("images/%s.png", icon)) @@ -239,6 +248,7 @@ public abstract class Widget implements Parcelable { .valueColor(valueColor) .encoding(encoding) .mappings(mappings) + .switchSupport(switchSupport) .build(); allWidgets.add(widget); @@ -273,6 +283,7 @@ public abstract class Widget implements Parcelable { .linkedPage(LinkedPage.fromJson(widgetJson.optJSONObject("linkedPage"))) .mappings(mappings) .type(type) + .state(determineWidgetState(widgetJson.optString("state", null), item)) .label(widgetJson.optString("label", null)) .icon(icon) .iconPath(determineOH2IconPath(item, type, icon, iconFormat, !mappings.isEmpty())) @@ -284,6 +295,8 @@ public abstract class Widget implements Parcelable { .period(widgetJson.optString("period", "D")) .service(widgetJson.optString("service", "")) .legend(widgetJson.has("legend") ? widgetJson.getBoolean("legend") : null) + .switchSupport(widgetJson.has("switchSupport") + ? widgetJson.getBoolean("switchSupport") : false) .height(widgetJson.optInt("height")) .iconColor(widgetJson.optString("iconcolor", null)) .labelColor(widgetJson.optString("labelcolor", null)) @@ -305,33 +318,51 @@ public abstract class Widget implements Parcelable { String iconFormat) throws JSONException { Item item = Item.updateFromEvent( source.item(), eventPayload.getJSONObject("item")); + + String icon = eventPayload.optString("icon", source.icon()); String iconPath = determineOH2IconPath(item, source.type(), - source.icon(), iconFormat, !source.mappings().isEmpty()); + icon, iconFormat, !source.mappings().isEmpty()); return source.toBuilder() .label(eventPayload.optString("label", source.label())) + .state(determineWidgetState(eventPayload.optString("state", null), item)) + .labelColor(eventPayload.optString("labelcolor", source.labelColor())) + .valueColor(eventPayload.optString("valuecolor", source.valueColor())) .item(item) + .icon(icon) .iconPath(iconPath) .build(); } + private static ParsedState determineWidgetState(String state, Item item) { + ParsedState itemState = item != null ? item.state() : null; + ParsedState.NumberState numberState = itemState != null ? itemState.asNumber() : null; + String numberPattern = numberState != null ? numberState.mFormat : null; + ParsedState parsedState = ParsedState.from(state, numberPattern); + if (parsedState != null) { + return parsedState; + } + return itemState; + } + private static String determineOH2IconPath(Item item, Type type, String icon, String iconFormat, boolean hasMappings) { - String itemState = item != null ? item.state() : null; + final ParsedState itemState = item != null ? item.state() : null; + String iconState = itemState != null ? itemState.asString() : ""; if (itemState != null) { if (item.isOfTypeOrGroupType(Item.Type.Color)) { // For items that control a color item fetch the correct icon if (type == Type.Slider || (type == Type.Switch && !hasMappings)) { try { - itemState = String.valueOf(item.stateAsBrightness()); + iconState = String.valueOf(itemState.asBrightness()); if (type == Type.Switch) { - itemState = itemState.equals("0") ? "OFF" : "ON"; + iconState = iconState.equals("0") ? "OFF" : "ON"; } } catch (Exception e) { - itemState = "OFF"; + iconState = "OFF"; } - } else if (item.stateAsHsv() != null) { - int color = Color.HSVToColor(item.stateAsHsv()); - itemState = String.format(Locale.US, "#%02x%02x%02x", + } else if (itemState.asHsv() != null) { + int color = Color.HSVToColor(itemState.asHsv()); + iconState = String.format(Locale.US, "#%02x%02x%02x", Color.red(color), Color.green(color), Color.blue(color)); } } else if (type == Type.Switch && !hasMappings @@ -339,11 +370,12 @@ public abstract class Widget implements Parcelable { // For switch items without mappings (just ON and OFF) that control a dimmer item // and which are not ON or OFF already, set the state to "OFF" instead of 0 // or to "ON" to fetch the correct icon - itemState = itemState.equals("0") || itemState.equals("OFF") ? "OFF" : "ON"; + iconState = itemState.asString().equals("0") || itemState.asString().equals("OFF") + ? "OFF" : "ON"; } } - return String.format("icon/%s?state=%s&format=%s", icon, itemState, iconFormat); + return String.format("icon/%s?state=%s&format=%s", icon, iconState, iconFormat); } private static Type parseType(String type) { diff --git a/mobile/src/main/java/org/openhab/habdroid/model/WidgetDataSource.java b/mobile/src/main/java/org/openhab/habdroid/model/WidgetDataSource.java index 50aca0484528148dbcd8209ef4c083fc649b0167..3ffa535cd63a3cd66069bc2d4a61ab4cc86341cf 100644 --- a/mobile/src/main/java/org/openhab/habdroid/model/WidgetDataSource.java +++ b/mobile/src/main/java/org/openhab/habdroid/model/WidgetDataSource.java @@ -41,7 +41,6 @@ public class WidgetDataSource { } public void setSourceNode(Node rootNode) { - Log.i(TAG, "Loading new data"); if (rootNode == null) { return; } @@ -62,7 +61,6 @@ public class WidgetDataSource { } public void setSourceJson(JSONObject jsonObject) { - Log.d(TAG, jsonObject.toString()); if (!jsonObject.has("widgets")) { return; } @@ -72,8 +70,8 @@ public class WidgetDataSource { JSONObject widgetJson = jsonWidgetArray.getJSONObject(i); Widget.parseJson(mAllWidgets, null, widgetJson, mIconFormat); } - mTitle = jsonObject.optString("title", null); mId = jsonObject.optString("id", null); + mTitle = jsonObject.optString("title", mId); mIcon = jsonObject.optString("icon", null); mLink = jsonObject.optString("link", null); } catch (JSONException e) { @@ -99,11 +97,7 @@ public class WidgetDataSource { } public String getTitle() { - if (mTitle != null) { - String[] splitString = mTitle.split("\\[|\\]"); - return splitString.length > 0 ? splitString[0] : mTitle; - } - return ""; + return mTitle != null ? mTitle : ""; } public String getId() { diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/AboutActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/AboutActivity.java index b721921c91997d16e3b6756e592482f6c07d3dda..09db206e217e01ddeadccd3c89daa6eed7cb3e16 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/AboutActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/AboutActivity.java @@ -1,8 +1,6 @@ package org.openhab.habdroid.ui; import android.content.Context; -import android.content.Intent; -import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; @@ -12,7 +10,6 @@ import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; import androidx.annotation.StringRes; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -24,6 +21,8 @@ import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem; import com.danielstone.materialaboutlibrary.model.MaterialAboutCard; import com.danielstone.materialaboutlibrary.model.MaterialAboutList; import com.mikepenz.aboutlibraries.LibsBuilder; +import okhttp3.Headers; +import okhttp3.Request; import org.json.JSONException; import org.json.JSONObject; import org.openhab.habdroid.BuildConfig; @@ -33,7 +32,7 @@ import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.core.connection.ConnectionFactory; import org.openhab.habdroid.core.connection.exception.ConnectionException; import org.openhab.habdroid.model.ServerProperties; -import org.openhab.habdroid.util.SyncHttpClient; +import org.openhab.habdroid.util.AsyncHttpClient; import org.openhab.habdroid.util.Util; import java.text.DateFormat; @@ -43,11 +42,10 @@ import java.util.Locale; import static org.openhab.habdroid.util.Util.obfuscateString; -public class AboutActivity extends AppCompatActivity implements +public class AboutActivity extends AbstractBaseActivity implements FragmentManager.OnBackStackChangedListener { @Override public void onCreate(Bundle savedInstanceState) { - Util.setActivityTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); @@ -73,18 +71,17 @@ public class AboutActivity extends AppCompatActivity implements @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { - finish(); + FragmentManager fragmentManager = getSupportFragmentManager(); + if (fragmentManager.getBackStackEntryCount() > 0) { + fragmentManager.popBackStack(); + } else { + finish(); + } return true; } return super.onOptionsItemSelected(item); } - @Override - public void finish() { - super.finish(); - Util.overridePendingTransition(this, true); - } - @Override public void onBackStackChanged() { updateTitle(); @@ -148,7 +145,7 @@ public class AboutActivity extends AppCompatActivity implements .build()); appCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.about_issues) - .icon(R.drawable.ic_bug_report_grey_24dp) + .icon(R.drawable.ic_bug_outline_grey_24dp) .setOnClickAction(clickRedirect(URL_TO_GITHUB + "/issues")) .build()); appCard.addItem(new MaterialAboutActionItem.Builder() @@ -159,7 +156,7 @@ public class AboutActivity extends AppCompatActivity implements .build()); appCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.title_activity_libraries) - .icon(R.drawable.ic_developer_mode_grey_24dp) + .icon(R.drawable.ic_code_braces_grey_24dp) .setOnClickAction(() -> { Fragment f = new LibsBuilder() .withFields(R.string.class.getFields()) @@ -188,67 +185,128 @@ public class AboutActivity extends AppCompatActivity implements if (mConnection == null || mServerProperties == null) { ohServerCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.error_about_no_conn) - .icon(R.drawable.ic_info_outline) + .icon(R.drawable.ic_info_outline_grey_24dp) .build()); } else { - String apiVersion = getApiVersion(); - if (TextUtils.isEmpty(apiVersion)) { - apiVersion = context.getString(R.string.unknown); - } - ohServerCard.addItem(new MaterialAboutActionItem.Builder() + AsyncHttpClient httpClient = mConnection.getAsyncHttpClient(); + + MaterialAboutActionItem apiVersionItem = new MaterialAboutActionItem.Builder() .text(R.string.info_openhab_apiversion_label) - .subText(apiVersion) - .icon(R.drawable.ic_info_outline) - .build()); + .subText(R.string.list_loading_message) + .icon(R.drawable.ic_info_outline_grey_24dp) + .build(); + ohServerCard.addItem(apiVersionItem); + String versionUrl = useJsonApi() ? "rest" : "static/version"; + httpClient.get(versionUrl, new AsyncHttpClient.StringResponseHandler() { + @Override + public void onFailure(Request request, int statusCode, Throwable error) { + Log.e(TAG, "Could not rest API version " + error); + apiVersionItem.setSubText(getString(R.string.error_about_no_conn)); + refreshMaterialAboutList(); + } - String uuid = getServerUuid(); - if (TextUtils.isEmpty(uuid)) { - uuid = context.getString(R.string.unknown); - } - ohServerCard.addItem(new MaterialAboutActionItem.Builder() + @Override + public void onSuccess(String body, Headers headers) { + String version = ""; + if (!useJsonApi()) { + version = body; + } else { + try { + JSONObject pageJson = new JSONObject(body); + version = pageJson.getString("version"); + } catch (JSONException e) { + Log.e(TAG, "Problem fetching version string", e); + } + } + + if (TextUtils.isEmpty(version)) { + version = getString(R.string.unknown); + } + + Log.d(TAG, "Got api version " + version); + apiVersionItem.setSubText(version); + refreshMaterialAboutList(); + } + }); + + MaterialAboutActionItem uuidItem = new MaterialAboutActionItem.Builder() .text(R.string.info_openhab_uuid_label) - .subText(uuid) - .icon(R.drawable.ic_info_outline) - .build()); + .subText(R.string.list_loading_message) + .icon(R.drawable.ic_info_outline_grey_24dp) + .build(); + ohServerCard.addItem(uuidItem); + String uuidUrl = useJsonApi() ? "rest/uuid" : "static/uuid"; + httpClient.get(uuidUrl, new AsyncHttpClient.StringResponseHandler() { + @Override + public void onFailure(Request request, int statusCode, Throwable error) { + Log.e(TAG, "Could not fetch uuid " + error); + uuidItem.setSubText(getString(R.string.error_about_no_conn)); + refreshMaterialAboutList(); + } - if (!useJsonApi()) { - String secret = getServerSecret(); - if (!TextUtils.isEmpty(secret)) { - ohServerCard.addItem(new MaterialAboutActionItem.Builder() - .text(R.string.info_openhab_secret_label) - .subText(secret) - .icon(R.drawable.ic_info_outline) - .build()); + @Override + public void onSuccess(String body, Headers headers) { + Log.d(TAG, "Got uuid " + obfuscateString(body)); + uuidItem.setSubText(TextUtils.isEmpty(body) + ? getString(R.string.unknown) + : body); + refreshMaterialAboutList(); } + }); + + if (!useJsonApi()) { + MaterialAboutActionItem secretItem = new MaterialAboutActionItem.Builder() + .text(R.string.info_openhab_secret_label) + .subText(R.string.list_loading_message) + .icon(R.drawable.ic_info_outline_grey_24dp) + .build(); + ohServerCard.addItem(secretItem); + httpClient.get("static/secret", new AsyncHttpClient.StringResponseHandler() { + @Override + public void onFailure(Request request, int statusCode, Throwable error) { + Log.e(TAG, "Could not fetch server secret " + error); + secretItem.setSubText(getString(R.string.error_about_no_conn)); + refreshMaterialAboutList(); + } + + @Override + public void onSuccess(String body, Headers headers) { + Log.d(TAG, "Got secret " + obfuscateString(body)); + secretItem.setSubText(TextUtils.isEmpty(body) + ? getString(R.string.unknown) + : body); + refreshMaterialAboutList(); + } + }); } } ohServerCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.info_openhab_push_notification_label) - .subText(CloudMessagingHelper.getPushNotificationStatusResId()) - .icon(R.drawable.ic_info_outline) + .subText(CloudMessagingHelper.getPushNotificationStatus(context)) + .icon(CloudMessagingHelper.getPushNotificationIconResId()) .build()); MaterialAboutCard.Builder ohCommunityCard = new MaterialAboutCard.Builder(); ohCommunityCard.title(R.string.about_community); ohCommunityCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.about_docs) - .icon(R.drawable.ic_collections_bookmark_grey_24dp) + .icon(R.drawable.ic_file_document_box_multiple_outline_grey_24dp) .setOnClickAction(clickRedirect("https://www.openhab.org/docs/")) .build()); ohCommunityCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.about_community_forum) - .icon(R.drawable.ic_forum_grey_24dp) + .icon(R.drawable.ic_forum_outline_grey_24dp) .setOnClickAction(clickRedirect("https://community.openhab.org/")) .build()); ohCommunityCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.about_translation) - .icon(R.drawable.ic_language_grey_24dp) + .icon(R.drawable.ic_translate_grey_24dp) .setOnClickAction(clickRedirect("https://crowdin.com/profile/openhab-bot")) .build()); ohCommunityCard.addItem(new MaterialAboutActionItem.Builder() .text(R.string.about_foundation) - .icon(R.drawable.ic_people_grey_24dp) + .icon(R.drawable.ic_people_outline_grey_24dp) .setOnClickAction(clickRedirect("https://www.openhabfoundation.org/")) .build()); @@ -266,61 +324,12 @@ public class AboutActivity extends AppCompatActivity implements private MaterialAboutItemOnClickAction clickRedirect(final String url) { return () -> { - Uri uri = Uri.parse(url); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - startActivity(intent); + Util.openInBrowser(getContext(), url); }; } - private String getServerSecret() { - SyncHttpClient.HttpTextResult result = - mConnection.getSyncHttpClient().get("static/secret").asText(); - if (result.isSuccessful()) { - Log.d(TAG, "Got secret " + obfuscateString(result.response)); - return result.response; - } else { - Log.e(TAG, "Could not fetch server secret " + result.error); - return null; - } - } - private boolean useJsonApi() { return mServerProperties != null && mServerProperties.hasJsonApi(); } - - private String getServerUuid() { - final String uuidUrl = useJsonApi() ? "rest/uuid" : "static/uuid"; - SyncHttpClient.HttpTextResult result = - mConnection.getSyncHttpClient().get(uuidUrl).asText(); - if (result.isSuccessful()) { - Log.d(TAG, "Got uuid " + obfuscateString(result.response)); - return result.response; - } else { - Log.e(TAG, "Could not fetch server uuid " + result.error); - return null; - } - } - - private String getApiVersion() { - String versionUrl = useJsonApi() ? "rest" : "static/version"; - Log.d(TAG, "url = " + versionUrl); - SyncHttpClient.HttpTextResult result = - mConnection.getSyncHttpClient().get(versionUrl).asText(); - if (!result.isSuccessful()) { - Log.e(TAG, "Could not fetch rest API version " + result.error); - } else { - if (!useJsonApi()) { - return result.response; - } else { - try { - JSONObject pageJson = new JSONObject(result.response); - return pageJson.getString("version"); - } catch (JSONException e) { - Log.e(TAG, "Problem fetching version string", e); - } - } - } - return null; - } } } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/AbstractBaseActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/AbstractBaseActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..144a9268f53f6ecff8858555eba84c958d2bc0ab --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/AbstractBaseActivity.java @@ -0,0 +1,79 @@ +package org.openhab.habdroid.ui; + +import android.app.ActivityManager; +import android.graphics.BitmapFactory; +import android.os.Build; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.util.TypedValue; +import android.view.View; +import androidx.annotation.CallSuper; +import androidx.appcompat.app.AppCompatActivity; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.Util; + +public abstract class AbstractBaseActivity extends AppCompatActivity { + private static final String TAG = AbstractBaseActivity.class.getSimpleName(); + private boolean mForceNonFullscreen = false; + + @Override + @CallSuper + protected void onCreate(Bundle savedInstanceState) { + setTheme(Util.getActivityThemeId(this)); + checkFullscreen(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + TypedValue typedValue = new TypedValue(); + getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true); + setTaskDescription(new ActivityManager.TaskDescription( + getString(R.string.app_name), + BitmapFactory.decodeResource(getResources(), R.mipmap.icon), + typedValue.data)); + } + + super.onCreate(savedInstanceState); + } + + @Override + protected void onResume() { + super.onResume(); + checkFullscreen(); + } + + /** + * Activities, that aren't called from an app component directly, e.g. through a third-party app + * can use this function to avoid being shown in full screen. Must be called before + * {@link #onCreate(Bundle)} + */ + protected void forceNonFullscreen() { + mForceNonFullscreen = true; + } + + protected void checkFullscreen() { + checkFullscreen(isFullscreenEnabled()); + } + + protected void checkFullscreen(boolean isEnabled) { + int uiOptions = getWindow().getDecorView().getSystemUiVisibility(); + final int flags = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + | View.SYSTEM_UI_FLAG_FULLSCREEN; + if (isEnabled && !mForceNonFullscreen) { + uiOptions |= flags; + } else { + uiOptions &= ~flags; + } + getWindow().getDecorView().setSystemUiVisibility(uiOptions); + } + + protected boolean isFullscreenEnabled() { + // If we are 4.4 we can use fullscreen mode and Daydream features + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + return false; + } + return PreferenceManager.getDefaultSharedPreferences(this) + .getBoolean(Constants.PREFERENCE_FULLSCREEN, false); + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/AnchorWebViewClient.java b/mobile/src/main/java/org/openhab/habdroid/ui/AnchorWebViewClient.java index b9c6d14cc6ffaabc7ed72f6eb4f17f31fb243f50..800ed53dad319e88dc042665e38caf245c9a18fc 100755 --- a/mobile/src/main/java/org/openhab/habdroid/ui/AnchorWebViewClient.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/AnchorWebViewClient.java @@ -10,21 +10,38 @@ package org.openhab.habdroid.ui; +import android.content.Context; +import android.net.http.SslCertificate; +import android.net.http.SslError; +import android.os.Bundle; +import android.util.Base64; import android.util.Log; import android.webkit.HttpAuthHandler; +import android.webkit.SslErrorHandler; import android.webkit.WebView; import android.webkit.WebViewClient; -class AnchorWebViewClient extends WebViewClient { +import de.duenndns.ssl.MemorizingTrustManager; +import org.openhab.habdroid.R; +import org.openhab.habdroid.util.Util; + +import java.io.ByteArrayInputStream; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; + +public class AnchorWebViewClient extends WebViewClient { private static final String TAG = AnchorWebViewClient.class.getSimpleName(); private String mAnchor; private String mUserName; private String mPassword; + private String mHost; public AnchorWebViewClient(String url, String username, String password) { mUserName = username; mPassword = password; + mHost = Util.getHostFromUrl(url); int pos = url.lastIndexOf("#") + 1; if (pos != 0 && pos < url.length()) { mAnchor = url.substring(pos); @@ -47,4 +64,59 @@ class AnchorWebViewClient extends WebViewClient { view.loadUrl("javascript:location.hash = '#" + mAnchor + "';"); } } + + @Override + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { + Context context = view.getContext(); + SslCertificate sslCertificate = error.getCertificate(); + Certificate cert = getX509Certificate(sslCertificate); + MemorizingTrustManager mtm = new MemorizingTrustManager(context); + if (cert != null && mtm.isCertKnown(cert)) { + Log.d(TAG, "Invalid certificate, but the same one as the main connection"); + handler.proceed(); + } else { + Log.e(TAG, "Invalid certificate"); + handler.cancel(); + String errorMessage; + switch (error.getPrimaryError()) { + case SslError.SSL_NOTYETVALID: + errorMessage = context.getString(R.string.error_certificate_not_valid_yet); + break; + case SslError.SSL_EXPIRED: + errorMessage = context.getString(R.string.error_certificate_expired); + break; + case SslError.SSL_IDMISMATCH: + errorMessage = context.getString(R.string.error_certificate_wrong_host, mHost); + break; + case SslError.SSL_DATE_INVALID: + errorMessage = context.getString(R.string.error_certificate_invalid_date); + break; + default: + errorMessage = context.getString(R.string.webview_ssl); + } + + String encodedHtml = Base64.encodeToString(("<html><body><p>" + errorMessage + "</p><p>" + + sslCertificate.toString() + "</p></body></html>").getBytes(), + Base64.NO_PADDING); + view.loadData(encodedHtml, "text/html; charset=UTF-8", "base64"); + } + } + + /** + * @author Heath Borders at https://stackoverflow.com/questions/20228800/how-do-i-validate-an-android-net-http-sslcertificate-with-an-x509trustmanager + */ + private Certificate getX509Certificate(SslCertificate sslCertificate) { + Bundle bundle = SslCertificate.saveState(sslCertificate); + byte[] bytes = bundle.getByteArray("x509-certificate"); + if (bytes == null) { + return null; + } else { + try { + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + return certFactory.generateCertificate(new ByteArrayInputStream(bytes)); + } catch (CertificateException e) { + return null; + } + } + } } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/CloudNotificationAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/CloudNotificationAdapter.java index 22c448dcaf06b6cdc8b15c253520caf5a3935cb9..a21f2e49b4bd42646b1b2c7eed77ff115b63fc92 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/CloudNotificationAdapter.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/CloudNotificationAdapter.java @@ -154,7 +154,8 @@ public class CloudNotificationAdapter extends RecyclerView.Adapter<RecyclerView. Connection conn = ConnectionFactory.getConnection(Connection.TYPE_CLOUD); String iconUrl = String.format(Locale.US, "images/%s.png", Uri.encode(notification.icon())); - mIconView.setImageUrl(conn, iconUrl, 2000); + mIconView.setImageUrl(conn, iconUrl, mIconView.getResources() + .getDimensionPixelSize(R.dimen.notificationlist_icon_size), 2000); } else { mIconView.setImageResource(R.drawable.ic_openhab_appicon_24dp); } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/IntroActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/IntroActivity.java index d97325196d97386f46095edf2dba38fac86bc812..92cbc9f3fb633c7ad6e2e60b32e3c8c3e1243721 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/IntroActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/IntroActivity.java @@ -23,10 +23,10 @@ public class IntroActivity extends AppIntro { R.drawable.ic_openhab_appicon_340dp); addSlide(R.string.intro_themes, R.string.intro_themes_description, - R.drawable.ic_color_lens_orange_340dp); + R.drawable.ic_palette_outline_orange_340dp); addSlide(R.string.mainmenu_openhab_voice_recognition, R.string.intro_voice_description, - R.drawable.ic_mic_orange_340dp); + R.drawable.ic_microphone_outline_orange_340dp); addSlide(R.string.intro_nfc, R.string.intro_nfc_description, R.drawable.ic_nfc_orange_340dp); diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..fe2635ba31a3cd8b4923d40f37a2738ac3212c0a --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerActivity.java @@ -0,0 +1,322 @@ +package org.openhab.habdroid.ui; + +import android.app.AlertDialog; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; +import android.widget.EditText; +import android.widget.TextView; +import androidx.annotation.StringRes; +import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; +import androidx.core.view.MenuItemCompat; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import okhttp3.Call; +import okhttp3.Headers; +import okhttp3.Request; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.openhab.habdroid.R; +import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.core.connection.ConnectionFactory; +import org.openhab.habdroid.core.connection.exception.ConnectionException; +import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.ui.widget.DividerItemDecoration; +import org.openhab.habdroid.util.AsyncHttpClient; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.SuggestedCommandsFactory; +import org.openhab.habdroid.util.TaskerIntent; +import org.openhab.habdroid.util.Util; + +import java.util.ArrayList; +import java.util.List; + +public class ItemPickerActivity extends AbstractBaseActivity + implements SwipeRefreshLayout.OnRefreshListener, View.OnClickListener, + ItemPickerAdapter.ItemClickListener, SearchView.OnQueryTextListener { + private static final String TAG = ItemPickerActivity.class.getSimpleName(); + + public static final String EXTRA_ITEM_NAME = "itemName"; + public static final String EXTRA_ITEM_STATE = "itemState"; + + private Call mRequestHandle; + private String mInitialHightlightItemName; + private ItemPickerAdapter mItemPickerAdapter; + private RecyclerView mRecyclerView; + private LinearLayoutManager mLayoutManager; + private SwipeRefreshLayout mSwipeLayout; + private View mEmptyView; + private TextView mEmptyMessage; + private TextView mRetryButton; + private SuggestedCommandsFactory mSuggestedCommandsFactory; + private boolean mIsDisabled; + private SharedPreferences mSharedPreferences; + + @Override + protected void onCreate(Bundle savedInstanceState) { + forceNonFullscreen(); + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_item_picker); + + Toolbar toolbar = findViewById(R.id.openhab_toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + mSwipeLayout = findViewById(R.id.swipe_container); + mSwipeLayout.setOnRefreshListener(this); + Util.applySwipeLayoutColors(mSwipeLayout, R.attr.colorPrimary, R.attr.colorAccent); + + mRecyclerView = findViewById(android.R.id.list); + mEmptyView = findViewById(android.R.id.empty); + mEmptyMessage = findViewById(R.id.empty_message); + mRetryButton = findViewById(R.id.retry_button); + mRetryButton.setOnClickListener(this); + + mItemPickerAdapter = new ItemPickerAdapter(this, this); + mLayoutManager = new LinearLayoutManager(this); + + mRecyclerView.setLayoutManager(mLayoutManager); + mRecyclerView.addItemDecoration(new DividerItemDecoration(this)); + mRecyclerView.setAdapter(mItemPickerAdapter); + + Bundle editItem = getIntent().getBundleExtra(TaskerIntent.EXTRA_BUNDLE); + if (editItem != null && !TextUtils.isEmpty(editItem.getString(EXTRA_ITEM_NAME))) { + mInitialHightlightItemName = editItem.getString(EXTRA_ITEM_NAME); + } + + mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + + if (!mSharedPreferences.getBoolean(Constants.PREFERENCE_TASKER_PLUGIN_ENABLED, false)) { + mIsDisabled = true; + updateViewVisibility(false, false, true); + } + } + + @Override + public void onResume() { + super.onResume(); + Log.d(TAG, "onResume()"); + loadItems(); + } + + @Override + public void onPause() { + super.onPause(); + Log.d(TAG, "onPause()"); + // Cancel request for items if there was any + if (mRequestHandle != null) { + mRequestHandle.cancel(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.item_picker, menu); + + final MenuItem searchItem = menu.findItem(R.id.app_bar_search); + final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); + searchView.setOnQueryTextListener(this); + + return true; + } + + public boolean onOptionsItemSelected(MenuItem item) { + Log.d(TAG, "onOptionsItemSelected()"); + if (item.getItemId() == android.R.id.home) { + finish(false, null, null); + return true; + } + return super.onOptionsItemSelected(item); + } + + private void loadItems() { + if (mIsDisabled) { + return; + } + Connection connection; + try { + connection = ConnectionFactory.getUsableConnection(); + } catch (ConnectionException e) { + connection = null; + } + if (connection == null) { + updateViewVisibility(false, true, false); + return; + } + + mItemPickerAdapter.clear(); + updateViewVisibility(true, false, false); + + final AsyncHttpClient client = connection.getAsyncHttpClient(); + mRequestHandle = client.get("rest/items", new AsyncHttpClient.StringResponseHandler() { + @Override + public void onSuccess(String responseBody, Headers headers) { + try { + ArrayList<Item> items = new ArrayList<>(); + JSONArray jsonArray = new JSONArray(responseBody); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject itemJson = jsonArray.getJSONObject(i); + Item item = Item.fromJson(itemJson); + if (!item.readOnly()) { + items.add(item); + } + } + Log.d(TAG, "Item request success, got " + items.size() + " items"); + mItemPickerAdapter.setItems(items); + handleInitialHighlight(); + updateViewVisibility(false, false, false); + } catch (JSONException e) { + Log.d(TAG, "Item response could not be parsed", e); + updateViewVisibility(false, true, false); + } + } + + @Override + public void onFailure(Request request, int statusCode, Throwable error) { + updateViewVisibility(false, true, false); + Log.e(TAG, "Item request failure", error); + } + }); + } + + @Override + public void onClick(View view) { + if (view == mRetryButton) { + if (mIsDisabled) { + mSharedPreferences + .edit() + .putBoolean(Constants.PREFERENCE_TASKER_PLUGIN_ENABLED, true) + .apply(); + mIsDisabled = false; + } + loadItems(); + } + } + + @Override + public void onItemClicked(Item item) { + if (item == null) { + return; + } + + if (mSuggestedCommandsFactory == null) { + mSuggestedCommandsFactory = new SuggestedCommandsFactory(this, true); + } + + SuggestedCommandsFactory.SuggestedCommands suggestedCommands = + mSuggestedCommandsFactory.fill(item); + + List<String> labels = suggestedCommands.labels; + List<String> commands = suggestedCommands.commands; + + if (suggestedCommands.shouldShowCustom) { + labels.add(getString(R.string.item_picker_custom)); + } + + final String[] labelArray = labels.toArray(new String[0]); + new AlertDialog.Builder(this) + .setTitle(R.string.item_picker_dialog_title) + .setItems(labelArray, (dialog, which) -> { + if (which == labelArray.length - 1 && suggestedCommands.shouldShowCustom) { + final EditText input = new EditText(this); + input.setInputType(suggestedCommands.inputTypeFlags); + AlertDialog customDialog = new AlertDialog.Builder(this) + .setTitle(getString(R.string.item_picker_custom)) + .setView(input) + .setPositiveButton(android.R.string.ok, (dialog1, which1) -> { + finish(true, item, input.getText().toString()); + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + input.setOnFocusChangeListener((v, hasFocus) -> { + int mode = hasFocus + ? WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE + : WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN; + customDialog.getWindow().setSoftInputMode(mode); + }); + } else { + finish(true, item, commands.get(which)); + } + }) + .show(); + } + + private void finish(boolean success, Item item, String state) { + Intent intent = new Intent(); + + if (success) { + String blurb = getString(R.string.item_picker_blurb, item.label(), item.name(), state); + intent.putExtra(TaskerIntent.EXTRA_STRING_BLURB, blurb); + + Bundle bundle = new Bundle(); + bundle.putString(EXTRA_ITEM_NAME, item.name()); + bundle.putString(EXTRA_ITEM_STATE, state); + intent.putExtra(TaskerIntent.EXTRA_BUNDLE, bundle); + } + + int resultCode = success ? RESULT_OK : RESULT_CANCELED; + setResult(resultCode, intent); + finish(); + } + + @Override + public void onRefresh() { + loadItems(); + } + + private void handleInitialHighlight() { + if (TextUtils.isEmpty(mInitialHightlightItemName)) { + return; + } + + final int position = mItemPickerAdapter.findPositionForName(mInitialHightlightItemName); + if (position >= 0) { + mLayoutManager.scrollToPositionWithOffset(position, 0); + mRecyclerView.postDelayed(() -> mItemPickerAdapter.highlightItem(position), 600); + } + + mInitialHightlightItemName = null; + } + + private void updateViewVisibility(boolean loading, boolean loadError, boolean isDisabled) { + boolean showEmpty = isDisabled + || (!loading && (mItemPickerAdapter.getItemCount() == 0 || loadError)); + mRecyclerView.setVisibility(showEmpty ? View.GONE : View.VISIBLE); + mEmptyView.setVisibility(showEmpty ? View.VISIBLE : View.GONE); + mSwipeLayout.setRefreshing(loading); + @StringRes int message; + if (loadError) { + message = R.string.item_picker_list_error; + } else if (isDisabled) { + message = R.string.settings_tasker_plugin_summary; + } else { + message = R.string.item_picker_list_empty; + } + mEmptyMessage.setText(message); + mRetryButton.setText(isDisabled ? R.string.turn_on : R.string.try_again_button); + mRetryButton.setVisibility(loadError || isDisabled ? View.VISIBLE : View.GONE); + } + + @Override + public boolean onQueryTextSubmit(String query) { + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + mItemPickerAdapter.filter(newText); + return true; + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..a9ef0d7b8a5cf9b7e23c2a2ad2c5debf6f7f3225 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/ItemPickerAdapter.java @@ -0,0 +1,174 @@ +package org.openhab.habdroid.ui; + +import android.content.Context; +import android.net.Uri; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.recyclerview.widget.RecyclerView; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.core.connection.ConnectionFactory; +import org.openhab.habdroid.core.connection.exception.ConnectionException; +import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.ui.widget.WidgetImageView; +import org.openhab.habdroid.util.Constants; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +public class ItemPickerAdapter extends RecyclerView.Adapter<ItemPickerAdapter.ItemViewHolder> + implements View.OnClickListener { + public interface ItemClickListener { + void onItemClicked(Item item); + } + + private ArrayList<Item> mFilteredItems = new ArrayList<>(); + private ArrayList<Item> mAllItems = new ArrayList<>(); + private ItemClickListener mItemClickListener; + private final LayoutInflater mInflater; + private int mHighlightedPosition = -1; + private static String mIconFormat; + + public ItemPickerAdapter(Context context, ItemClickListener itemClickListener) { + super(); + mIconFormat = PreferenceManager.getDefaultSharedPreferences(context) + .getString(Constants.PREFERENCE_ICON_FORMAT, ""); + mInflater = LayoutInflater.from(context); + mItemClickListener = itemClickListener; + } + + public void setItems(List<Item> items) { + mFilteredItems.clear(); + mFilteredItems.addAll(items); + Collections.sort(mFilteredItems, new ItemNameComparator()); + mAllItems.clear(); + mAllItems.addAll(mFilteredItems); + notifyDataSetChanged(); + } + + public void filter(String filter) { + mFilteredItems.clear(); + String searchTerm = filter.toLowerCase(); + for (Item item : mAllItems) { + if (item.name().toLowerCase().contains(searchTerm) + || item.label().toLowerCase().contains(searchTerm) + || item.type().toString().toLowerCase().contains(searchTerm)) { + mFilteredItems.add(item); + } + } + notifyDataSetChanged(); + } + + private class ItemNameComparator implements Comparator<Item> { + public int compare(Item left, Item right) { + return left.name().compareToIgnoreCase(right.name()); + } + } + + public void clear() { + mFilteredItems.clear(); + notifyDataSetChanged(); + } + + public int findPositionForName(String name) { + for (int i = 0; i < mFilteredItems.size(); i++) { + if (TextUtils.equals(mFilteredItems.get(i).name(), name)) { + return i; + } + } + return -1; + } + + public void highlightItem(int position) { + mHighlightedPosition = position; + notifyItemChanged(position); + } + + @NonNull + @Override + public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new ItemViewHolder(mInflater, parent); + } + + @Override + public void onBindViewHolder(ItemViewHolder holder, int position) { + holder.bind(mFilteredItems.get(position)); + holder.itemView.setOnClickListener(mItemClickListener != null ? this : null); + + if (position == mHighlightedPosition) { + final View v = holder.itemView; + v.post(() -> { + if (v.getBackground() != null) { + final int centerX = v.getWidth() / 2; + final int centerY = v.getHeight() / 2; + DrawableCompat.setHotspot(v.getBackground(), centerX, centerY); + } + v.setPressed(true); + v.setPressed(false); + mHighlightedPosition = -1; + }); + } + } + + @Override + public int getItemCount() { + return mFilteredItems.size(); + } + + public static class ItemViewHolder extends RecyclerView.ViewHolder { + final TextView mItemNameView; + final TextView mItemLabelView; + final WidgetImageView mIconView; + final TextView mItemTypeView; + + public ItemViewHolder(LayoutInflater inflater, ViewGroup parent) { + super(inflater.inflate(R.layout.itempickerlist_item, parent, false)); + mItemNameView = itemView.findViewById(R.id.itemName); + mItemLabelView = itemView.findViewById(R.id.itemLabel); + mItemTypeView = itemView.findViewById(R.id.itemType); + mIconView = itemView.findViewById(R.id.itemIcon); + itemView.setTag(this); + } + + public void bind(Item item) { + mItemNameView.setText(item.name()); + mItemLabelView.setText(item.label()); + mItemTypeView.setText(item.type().toString()); + + Connection connection; + try { + connection = ConnectionFactory.getUsableConnection(); + } catch (ConnectionException e) { + connection = null; + } + if (item.category() != null && connection != null) { + String iconUrl = String.format(Locale.US, "images/%s.%s", + Uri.encode(item.category()), + TextUtils.isEmpty(mIconFormat) ? "png" : mIconFormat); + mIconView.setImageUrl(connection, iconUrl, mIconView.getResources() + .getDimensionPixelSize(R.dimen.notificationlist_icon_size), 2000); + } else { + mIconView.setImageResource(R.drawable.ic_openhab_appicon_24dp); + } + } + } + + @Override + public void onClick(View view) { + ItemPickerAdapter.ItemViewHolder holder = (ItemPickerAdapter.ItemViewHolder) view.getTag(); + int position = holder.getAdapterPosition(); + if (position != RecyclerView.NO_POSITION) { + mItemClickListener.onItemClicked(mFilteredItems.get(position)); + } + } +} \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/LogActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/LogActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..67da2fb20edaeb7b2da9b5904aff5fbac321a460 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/LogActivity.java @@ -0,0 +1,167 @@ +package org.openhab.habdroid.ui; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.ScrollView; +import android.widget.TextView; +import androidx.appcompat.widget.Toolbar; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import org.openhab.habdroid.R; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.Util; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class LogActivity extends AbstractBaseActivity { + private static final String TAG = LogActivity.class.getSimpleName(); + + private ProgressBar mProgressBar; + private TextView mLogTextView; + private FloatingActionButton mFab; + private ScrollView mScrollView; + private LinearLayout mEmptyView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_log); + + Toolbar toolbar = findViewById(R.id.openhab_toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + mFab = findViewById(R.id.shareFab); + mLogTextView = findViewById(R.id.log); + mProgressBar = findViewById(R.id.progressBar); + mScrollView = findViewById(R.id.scrollview); + mEmptyView = findViewById(android.R.id.empty); + + mFab.setOnClickListener(v -> { + Intent sendIntent = new Intent(); + sendIntent.setAction(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_TEXT, mLogTextView.getText()); + sendIntent.setType("text/plain"); + startActivity(sendIntent); + }); + + setUiState(true, false); + } + + @Override + protected void onResume() { + super.onResume(); + setUiState(true, false); + new GetLogFromAdbTask().execute(false); + } + + private void setUiState(boolean isLoading, boolean isEmpty) { + mProgressBar.setVisibility(isLoading && !isEmpty ? View.VISIBLE : View.GONE); + mLogTextView.setVisibility(isLoading && !isEmpty ? View.GONE : View.VISIBLE); + mEmptyView.setVisibility(isEmpty ? View.VISIBLE : View.GONE); + if (isLoading || isEmpty) { + mFab.hide(); + } else { + mFab.show(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + Log.d(TAG, "onCreateOptionsMenu()"); + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.log_menu, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + Log.d(TAG, "onOptionsItemSelected()"); + switch (item.getItemId()) { + case R.id.delete_log: + setUiState(true, false); + new GetLogFromAdbTask().execute(true); + return true; + case android.R.id.home: + finish(); + // fallthrough + default: + return super.onOptionsItemSelected(item); + } + } + + private class GetLogFromAdbTask extends AsyncTask<Boolean, Void, String> { + @Override + protected String doInBackground(Boolean... clear) { + StringBuilder logBuilder = new StringBuilder(); + String separator = System.getProperty("line.separator"); + Process process = null; + try { + if (clear[0]) { + Log.d(TAG, "Clear log"); + Runtime.getRuntime().exec("logcat -b all -c"); + return ""; + } + process = Runtime.getRuntime().exec("logcat -b all -v threadtime -d"); + } catch (Exception e) { + Log.e(TAG, "Error reading process", e); + return Log.getStackTraceString(e); + } + if (process == null) { + return "Process is null"; + } + try (InputStreamReader reader = new InputStreamReader(process.getInputStream()); + BufferedReader bufferedReader = new BufferedReader(reader)) { + String line; + while ((line = bufferedReader.readLine()) != null) { + logBuilder.append(line); + logBuilder.append(separator); + } + } catch (Exception e) { + Log.e(TAG, "Error reading log", e); + return Log.getStackTraceString(e); + } + + String log = logBuilder.toString(); + SharedPreferences sharedPreferences = + PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + log = redactHost(log, + sharedPreferences.getString(Constants.PREFERENCE_LOCAL_URL, ""), + "<openhab-local-address>"); + log = redactHost(log, + sharedPreferences.getString(Constants.PREFERENCE_REMOTE_URL, ""), + "<openhab-remote-address>"); + return log; + } + + @Override + protected void onPostExecute(String log) { + mLogTextView.setText(log); + setUiState(false, TextUtils.isEmpty(log)); + mScrollView.post(() -> mScrollView.fullScroll(View.FOCUS_DOWN)); + } + } + + private String redactHost(String text, String url, String replacement) { + if (!TextUtils.isEmpty(url)) { + String host = Util.getHostFromUrl(url); + if (host != null) { + return text.replaceAll(host, replacement); + } + } + return text; + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java index f487538c0a61184207cf3e3d1a6c3ca3a10d3b1a..81fadbceecb64323c794eff7e97846cab2ef2c05 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/MainActivity.java @@ -14,20 +14,26 @@ import android.app.Dialog; import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; import android.content.res.ColorStateList; import android.content.res.Configuration; -import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.PorterDuff; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.graphics.drawable.Icon; import android.net.NetworkInfo; import android.net.Uri; +import android.net.wifi.WifiManager; import android.nfc.NfcAdapter; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; @@ -47,12 +53,12 @@ import android.view.View; import android.view.ViewStub; import android.view.WindowManager; import android.widget.ProgressBar; -import android.widget.Toast; import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; @@ -62,10 +68,10 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.navigation.NavigationView; import com.google.android.material.snackbar.Snackbar; -import es.dmoral.toasty.Toasty; import okhttp3.Headers; import okhttp3.Request; import org.openhab.habdroid.R; +import org.openhab.habdroid.background.BackgroundTasksManager; import org.openhab.habdroid.core.CloudMessagingHelper; import org.openhab.habdroid.core.OnUpdateBroadcastReceiver; import org.openhab.habdroid.core.VoiceService; @@ -74,42 +80,43 @@ import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.core.connection.ConnectionFactory; import org.openhab.habdroid.core.connection.DemoConnection; import org.openhab.habdroid.core.connection.exception.ConnectionException; +import org.openhab.habdroid.core.connection.exception.NetworkNotAvailableException; import org.openhab.habdroid.core.connection.exception.NetworkNotSupportedException; import org.openhab.habdroid.core.connection.exception.NoUrlInformationException; import org.openhab.habdroid.model.LinkedPage; +import org.openhab.habdroid.model.NfcTag; import org.openhab.habdroid.model.ServerProperties; import org.openhab.habdroid.model.Sitemap; import org.openhab.habdroid.model.Widget; import org.openhab.habdroid.ui.activity.ContentController; +import org.openhab.habdroid.ui.homescreenwidget.VoiceWidget; +import org.openhab.habdroid.ui.homescreenwidget.VoiceWidgetWithIcon; import org.openhab.habdroid.util.AsyncHttpClient; import org.openhab.habdroid.util.AsyncServiceResolver; import org.openhab.habdroid.util.Constants; import org.openhab.habdroid.util.Util; import java.lang.reflect.Constructor; -import java.net.ConnectException; -import java.net.SocketTimeoutException; -import java.net.UnknownHostException; import java.nio.charset.Charset; -import java.security.cert.CertPathValidatorException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; -import java.security.cert.CertificateRevokedException; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Locale; import javax.jmdns.ServiceInfo; -import javax.net.ssl.SSLException; -import javax.net.ssl.SSLPeerUnverifiedException; -import static org.openhab.habdroid.util.Util.exceptionHasCause; -import static org.openhab.habdroid.util.Util.getHostFromUrl; +import static org.openhab.habdroid.util.Constants.PREV_SERVER_FLAGS; -public class MainActivity extends AppCompatActivity implements +public class MainActivity extends AbstractBaseActivity implements AsyncServiceResolver.Listener, ConnectionFactory.UpdateListener { public static final String ACTION_NOTIFICATION_SELECTED = "org.openhab.habdroid.action.NOTIFICATION_SELECTED"; + public static final String ACTION_HABPANEL_SELECTED = + "org.openhab.habdroid.action.HABPANEL_SELECTED"; + public static final String ACTION_VOICE_RECOGNITION_SELECTED = + "org.openhab.habdroid.action.VOICE_SELECTED"; + public static final String ACTION_SITEMAP_SELECTED = + "org.openhab.habdroid.action.SITEMAP_SELECTED"; + public static final String EXTRA_SITEMAP_URL = "sitemapUrl"; public static final String EXTRA_PERSISTED_NOTIFICATION_ID = "persistedNotificationId"; private static final String TAG = MainActivity.class.getSimpleName(); @@ -134,13 +141,16 @@ public class MainActivity extends AppCompatActivity implements private Snackbar mLastSnackbar; private Connection mConnection; - private Uri mPendingNfcData; + private String mPendingOpenSitemapUrl; private String mPendingOpenedNotificationId; + private boolean mShouldOpenHabpanel; + private boolean mShouldLaunchVoiceRecognition; private Sitemap mSelectedSitemap; private ContentController mController; private ServerProperties mServerProperties; private ServerProperties.UpdateHandle mPropsUpdateHandle; private boolean mStarted; + private ShortcutManager mShortcutManager; private ArrayList<Widget> mWidgets = new ArrayList<>(); @@ -180,8 +190,6 @@ public class MainActivity extends AppCompatActivity implements getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } - // Set the theme to one from preferences - Util.setActivityTheme(this); super.onCreate(savedInstanceState); String controllerClassName = getResources().getString(R.string.controller_class); @@ -240,11 +248,10 @@ public class MainActivity extends AppCompatActivity implements IntentFilter filter = new IntentFilter(Intent.ACTION_DREAMING_STARTED); filter.addAction(Intent.ACTION_DREAMING_STOPPED); registerReceiver(mDreamReceiver, filter); - checkFullscreen(); } // Create a new boolean and preference and set it to true - boolean isFirstStart = mPrefs.getBoolean("firstStart", true); + boolean isFirstStart = mPrefs.getBoolean(Constants.PREFERENCE_FIRST_START, true); SharedPreferences.Editor prefsEditor = mPrefs.edit(); // If the activity has never started before... @@ -253,10 +260,27 @@ public class MainActivity extends AppCompatActivity implements final Intent i = new Intent(MainActivity.this, IntroActivity.class); startActivityForResult(i, INTRO_REQUEST_CODE); - prefsEditor.putBoolean("firstStart", false); + prefsEditor.putBoolean(Constants.PREFERENCE_FIRST_START, false); } OnUpdateBroadcastReceiver.updateComparableVersion(prefsEditor); prefsEditor.apply(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { + mShortcutManager = getSystemService(ShortcutManager.class); + } + + final boolean isSpeechRecognizerAvailable = SpeechRecognizer.isRecognitionAvailable(this); + new AsyncTask<Void, Void, Void>() { + @Override + protected Void doInBackground(Void... voids) { + manageVoiceRecognitionShortcut(isSpeechRecognizerAvailable); + setVoiceWidgetComponentEnabledSetting(VoiceWidget.class, + isSpeechRecognizerAvailable); + setVoiceWidgetComponentEnabledSetting(VoiceWidgetWithIcon.class, + isSpeechRecognizerAvailable); + return null; + } + }.execute(); } public void updateWidgets(List<Widget> widgets) { @@ -266,7 +290,7 @@ public class MainActivity extends AppCompatActivity implements private void handleConnectionChange() { if (mConnection instanceof DemoConnection) { - showSnackbar(R.string.info_demo_mode_short); + showDemoModeHintSnackbar(); } else { boolean hasLocalAndRemote = ConnectionFactory.getConnection(Connection.TYPE_LOCAL) != null @@ -281,6 +305,14 @@ public class MainActivity extends AppCompatActivity implements queryServerProperties(); } + public void enableWifiAndIndicateStartup() { + WifiManager wifiManager = + (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); + wifiManager.setWifiEnabled(true); + mController.updateConnection(null, getString(R.string.waiting_for_wifi), + R.drawable.ic_wifi_strength_outline_black_24dp); + } + public void retryServerPropertyQuery() { mController.clearServerCommunicationFailure(); queryServerProperties(); @@ -292,7 +324,7 @@ public class MainActivity extends AppCompatActivity implements } ServerProperties.UpdateSuccessCallback successCb = props -> { mServerProperties = props; - updateSitemapDrawerItems(); + updateSitemapAndHabpanelDrawerItems(); if (props.sitemaps().isEmpty()) { Log.e(TAG, "openHAB returned empty sitemap list"); mController.indicateServerCommunicationFailure( @@ -305,6 +337,15 @@ public class MainActivity extends AppCompatActivity implements showSitemapSelectionDialog(); } } + if (!(getConnection() instanceof DemoConnection)) { + PreferenceManager.getDefaultSharedPreferences(this) + .edit() + .putInt(PREV_SERVER_FLAGS, props.flags()) + .apply(); + } + openHabpanelIfNeeded(); + launchVoiceRecognitionIfNeeded(); + openPendingSitemapIfNeeded(); }; mPropsUpdateHandle = ServerProperties.fetch(mConnection, successCb, this::handlePropertyFetchFailure); @@ -318,8 +359,10 @@ public class MainActivity extends AppCompatActivity implements String serverUrl = "https://" + serviceInfo.getHostAddresses()[0] + ":" + String.valueOf(serviceInfo.getPort()) + "/"; - PreferenceManager.getDefaultSharedPreferences(this).edit() - .putString(Constants.PREFERENCE_LOCAL_URL, serverUrl).apply(); + PreferenceManager.getDefaultSharedPreferences(this) + .edit() + .putString(Constants.PREFERENCE_LOCAL_URL, serverUrl) + .apply(); // We'll get a connection update later mServiceResolver = null; } @@ -337,13 +380,30 @@ public class MainActivity extends AppCompatActivity implements switch (action) { case NfcAdapter.ACTION_NDEF_DISCOVERED: case Intent.ACTION_VIEW: - mPendingNfcData = intent.getData(); - openPendingNfcPageIfNeeded(); + NfcTag tag = NfcTag.fromTagData(intent.getData()); + BackgroundTasksManager.enqueueNfcUpdateIfNeeded(this, tag); + + if (tag != null && !TextUtils.isEmpty(tag.sitemap())) { + mPendingOpenSitemapUrl = tag.sitemap(); + openPendingSitemapIfNeeded(); + } + break; case ACTION_NOTIFICATION_SELECTED: CloudMessagingHelper.onNotificationSelected(this, intent); onNotificationSelected(intent); break; + case ACTION_HABPANEL_SELECTED: + mShouldOpenHabpanel = true; + openHabpanelIfNeeded(); + break; + case ACTION_VOICE_RECOGNITION_SELECTED: + mShouldLaunchVoiceRecognition = true; + launchVoiceRecognitionIfNeeded(); + break; + case ACTION_SITEMAP_SELECTED: + mPendingOpenSitemapUrl = intent.getStringExtra(EXTRA_SITEMAP_URL); + openPendingSitemapIfNeeded(); default: break; } @@ -369,7 +429,7 @@ public class MainActivity extends AppCompatActivity implements } @Override - public void onResume() { + protected void onResume() { Log.d(TAG, "onResume()"); super.onResume(); @@ -382,7 +442,6 @@ public class MainActivity extends AppCompatActivity implements } updateTitle(); - checkFullscreen(); } @Override @@ -421,44 +480,54 @@ public class MainActivity extends AppCompatActivity implements mSelectedSitemap = null; // Handle pending NFC tag if initial connection determination finished - openPendingNfcPageIfNeeded(); + openPendingSitemapIfNeeded(); + openHabpanelIfNeeded(); + launchVoiceRecognitionIfNeeded(); if (newConnection != null) { handleConnectionChange(); - mController.updateConnection(newConnection, null); + mController.updateConnection(newConnection, null, 0); } else { if (failureReason instanceof NoUrlInformationException) { NoUrlInformationException nuie = (NoUrlInformationException) failureReason; // Attempt resolving only if we're connected locally and - // no local connection is configured yes + // no local connection is configured yet if (nuie.wouldHaveUsedLocalConnection() && ConnectionFactory.getConnection(Connection.TYPE_LOCAL) == null) { if (mServiceResolver == null) { mServiceResolver = new AsyncServiceResolver(this, this, getString(R.string.openhab_service_type)); mServiceResolver.start(); - mController.updateConnection(null, getString(R.string.resolving_openhab)); + mController.updateConnection(null, + getString(R.string.resolving_openhab), + R.drawable.ic_openhab_appicon_340dp /*FIXME?*/); } } else { mController.indicateMissingConfiguration(false); } } else if (failureReason != null) { - final String message; + WifiManager wifiManager = (WifiManager) + getApplicationContext().getSystemService(Context.WIFI_SERVICE); if (failureReason instanceof NetworkNotSupportedException) { NetworkInfo info = ((NetworkNotSupportedException) failureReason).getNetworkInfo(); - message = getString(R.string.error_network_type_unsupported, - info.getTypeName()); + mController.indicateNoNetwork( + getString(R.string.error_network_type_unsupported, info.getTypeName()), + false); + } else if (failureReason instanceof NetworkNotAvailableException + && !wifiManager.isWifiEnabled()) { + mController.indicateNoNetwork( + getString(R.string.error_wifi_not_available), true); } else { - message = getString(R.string.error_network_not_available); + mController.indicateNoNetwork(getString(R.string.error_network_not_available), + false); } - mController.indicateNoNetwork(message); } else { - mController.updateConnection(null, null); + mController.updateConnection(null, null, 0); } } mViewPool.clear(); - updateSitemapDrawerItems(); + updateSitemapAndHabpanelDrawerItems(); invalidateOptionsMenu(); updateTitle(); } @@ -485,8 +554,10 @@ public class MainActivity extends AppCompatActivity implements mController.clearServerCommunicationFailure(); queryServerProperties(); } - openPendingNfcPageIfNeeded(); + openPendingSitemapIfNeeded(); openNotificationsPageIfNeeded(); + openHabpanelIfNeeded(); + launchVoiceRecognitionIfNeeded(); } @Override @@ -514,9 +585,10 @@ public class MainActivity extends AppCompatActivity implements private void setupToolbar() { Toolbar toolbar = findViewById(R.id.openhab_toolbar); setSupportActionBar(toolbar); - if (getSupportActionBar() != null) { - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setHomeButtonEnabled(true); } // ProgressBar layout params inside the toolbar have to be done programmatically @@ -538,7 +610,11 @@ public class MainActivity extends AppCompatActivity implements if (mServerProperties != null && mPropsUpdateHandle == null) { mPropsUpdateHandle = ServerProperties.updateSitemaps(mServerProperties, mConnection, - props -> { mServerProperties = props; updateSitemapDrawerItems(); }, + props -> { + mServerProperties = props; + openPendingSitemapIfNeeded(); + updateSitemapAndHabpanelDrawerItems(); + }, MainActivity.this::handlePropertyFetchFailure); } } @@ -565,6 +641,9 @@ public class MainActivity extends AppCompatActivity implements case R.id.notifications: openNotifications(null); return true; + case R.id.habpanel: + openHabpanel(); + return true; case R.id.settings: Intent settingsIntent = new Intent(MainActivity.this, PreferencesActivity.class); @@ -593,15 +672,22 @@ public class MainActivity extends AppCompatActivity implements private void updateNotificationDrawerItem() { MenuItem notificationsItem = mDrawerMenu.findItem(R.id.notifications); - notificationsItem.setVisible( - ConnectionFactory.getConnection(Connection.TYPE_CLOUD) != null); + boolean hasCloudConnection = ConnectionFactory.getConnection(Connection.TYPE_CLOUD) != null; + notificationsItem.setVisible(hasCloudConnection); + if (hasCloudConnection) { + manageNotificationShortcut(true); + } } - private void updateSitemapDrawerItems() { + private void updateSitemapAndHabpanelDrawerItems() { MenuItem sitemapItem = mDrawerMenu.findItem(R.id.sitemaps); + MenuItem habpanelItem = mDrawerMenu.findItem(R.id.habpanel); if (mServerProperties == null) { sitemapItem.setVisible(false); + habpanelItem.setVisible(false); } else { + habpanelItem.setVisible(mServerProperties.hasHabpanelInstalled()); + manageHabpanelShortcut(mServerProperties.hasHabpanelInstalled()); final String defaultSitemapName = mPrefs.getString(Constants.PREFERENCE_SITEMAP_NAME, ""); final List<Sitemap> sitemaps = mServerProperties.sitemaps(); @@ -628,21 +714,22 @@ public class MainActivity extends AppCompatActivity implements Drawable defaultIcon = ContextCompat.getDrawable(this, R.drawable.ic_openhab_appicon_24dp); item.setIcon(applyDrawerIconTint(defaultIcon)); - if (url != null) { - mConnection.getAsyncHttpClient().get(url, - new AsyncHttpClient.BitmapResponseHandler(defaultIcon.getIntrinsicWidth()) { - @Override - public void onFailure(Request request, int statusCode, Throwable error) { - Log.w(TAG, "Could not fetch icon for sitemap " + sitemap.name()); - } - @Override - public void onSuccess(Bitmap bitmap, Headers headers) { - if (bitmap != null) { - item.setIcon(new BitmapDrawable(bitmap)); - } - } - }); + if (url == null || mConnection == null) { + return; } + mConnection.getAsyncHttpClient().get(url, + new AsyncHttpClient.BitmapResponseHandler(defaultIcon.getIntrinsicWidth(), true) { + @Override + public void onFailure(Request request, int statusCode, Throwable error) { + Log.w(TAG, "Could not fetch icon for sitemap " + sitemap.name()); + } + @Override + public void onSuccess(Bitmap bitmap, Headers headers) { + if (bitmap != null) { + item.setIcon(new BitmapDrawable(bitmap)); + } + } + }); } private Drawable applyDrawerIconTint(Drawable icon) { @@ -662,31 +749,26 @@ public class MainActivity extends AppCompatActivity implements } } - private void openPendingNfcPageIfNeeded() { - if (mPendingNfcData == null || mConnection == null || !mStarted) { - return; + private void openHabpanelIfNeeded() { + if (mStarted && mShouldOpenHabpanel && mServerProperties != null + && mServerProperties.hasHabpanelInstalled()) { + openHabpanel(); + mShouldOpenHabpanel = false; } + } - Log.d(TAG, "NFC Scheme = " + mPendingNfcData.getScheme()); - Log.d(TAG, "NFC Host = " + mPendingNfcData.getHost()); - Log.d(TAG, "NFC Path = " + mPendingNfcData.getPath()); - String nfcItem = mPendingNfcData.getQueryParameter("item"); - String nfcCommand = mPendingNfcData.getQueryParameter("command"); - - // If there is no item parameter it means tag contains only sitemap page url - if (TextUtils.isEmpty(nfcItem)) { - Log.d(TAG, "This is a sitemap tag without parameters"); - // Form the new sitemap page url - String newPageUrl = String.format(Locale.US, - "rest/sitemaps%s", mPendingNfcData.getPath()); - mController.openPage(newPageUrl); - } else { - Log.d(TAG, "Target item = " + nfcItem); - String url = String.format(Locale.US, "rest/items/%s", nfcItem); - Util.sendItemCommand(mConnection.getAsyncHttpClient(), url, nfcCommand); - finish(); + private void launchVoiceRecognitionIfNeeded() { + if (mStarted && mShouldLaunchVoiceRecognition && mServerProperties != null) { + launchVoiceRecognition(); + mShouldLaunchVoiceRecognition = false; + } + } + + private void openPendingSitemapIfNeeded() { + if (mStarted && mPendingOpenSitemapUrl != null && mServerProperties != null) { + buildUrlAndOpenSitemap(mPendingOpenSitemapUrl); + mPendingOpenSitemapUrl = null; } - mPendingNfcData = null; } private void openAbout() { @@ -694,7 +776,6 @@ public class MainActivity extends AppCompatActivity implements aboutIntent.putExtra("serverProperties", mServerProperties); startActivityForResult(aboutIntent, INFO_REQUEST_CODE); - Util.overridePendingTransition(this, false); } private void openRecognitions() { @@ -777,6 +858,11 @@ public class MainActivity extends AppCompatActivity implements mDrawerToggle.setDrawerIndicatorEnabled(false); } + private void openHabpanel() { + mController.showHabpanel(); + mDrawerToggle.setDrawerIndicatorEnabled(false); + } + private void openSitemap(Sitemap sitemap) { Log.i(TAG, "Opening sitemap " + sitemap + ", currently selected " + mSelectedSitemap); if (mSelectedSitemap != null && mSelectedSitemap.equals(sitemap)) { @@ -786,6 +872,11 @@ public class MainActivity extends AppCompatActivity implements mController.openSitemap(sitemap); } + private void buildUrlAndOpenSitemap(String partUrl) { + String newPageUrl = String.format(Locale.US, "rest/sitemaps%s", partUrl); + mController.openPage(newPageUrl); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { Log.d(TAG, "onCreateOptionsMenu()"); @@ -799,10 +890,8 @@ public class MainActivity extends AppCompatActivity implements Log.d(TAG, "onPrepareOptionsMenu()"); MenuItem voiceRecognitionItem = menu.findItem(R.id.mainmenu_voice_recognition); @ColorInt int iconColor = ContextCompat.getColor(this, R.color.light); - voiceRecognitionItem.setVisible( - mConnection != null && SpeechRecognizer.isRecognitionAvailable(this)); + voiceRecognitionItem.setVisible(mConnection != null); voiceRecognitionItem.getIcon().setColorFilter(iconColor, PorterDuff.Mode.SRC_IN); - return true; } @@ -839,7 +928,8 @@ public class MainActivity extends AppCompatActivity implements if (data == null) { break; } - if (data.getBooleanExtra(PreferencesActivity.RESULT_EXTRA_SITEMAP_CLEARED, false)) { + if (data.getBooleanExtra(PreferencesActivity.RESULT_EXTRA_SITEMAP_CLEARED, false) + && getConnection() != null && mServerProperties != null) { Sitemap sitemap = selectConfiguredSitemapFromList(); if (sitemap != null) { openSitemap(sitemap); @@ -934,13 +1024,14 @@ public class MainActivity extends AppCompatActivity implements try { startActivity(speechIntent); } catch (ActivityNotFoundException speechRecognizerNotFoundException) { - try { - startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse("market://details?id=com.google.android.googlequicksearchbox"))); - } catch (ActivityNotFoundException appStoreNotFoundException) { - Toasty.error(this, getString(R.string.error_no_app_store_found), - Toast.LENGTH_LONG, true).show(); - } + showSnackbar(R.string.error_no_speech_to_text_app_found, R.string.install, v -> { + try { + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse( + "market://details?id=com.google.android.googlequicksearchbox"))); + } catch (ActivityNotFoundException appStoreNotFoundException) { + Util.openInBrowser(this, "http://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox"); + } + }); } } @@ -950,19 +1041,35 @@ public class MainActivity extends AppCompatActivity implements return; } - mLastSnackbar = Snackbar.make(findViewById(android.R.id.content), - R.string.swipe_to_refresh_description, Snackbar.LENGTH_LONG); - mLastSnackbar.setAction(R.string.swipe_to_refresh_dismiss, v -> { + showSnackbar(R.string.swipe_to_refresh_description, R.string.swipe_to_refresh_dismiss, + v -> { prefs.edit() .putBoolean(Constants.PREFERENCE_SWIPE_REFRESH_EXPLAINED, true) .apply(); }); - mLastSnackbar.show(); + } + + public void showDemoModeHintSnackbar() { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + showSnackbar(R.string.info_demo_mode_short, R.string.turn_off, v -> { + prefs.edit() + .putBoolean(Constants.PREFERENCE_DEMOMODE, false) + .apply(); + }); } private void showSnackbar(@StringRes int messageResId) { - mLastSnackbar = Snackbar.make(findViewById(android.R.id.content), - messageResId, Snackbar.LENGTH_LONG); + showSnackbar(messageResId, 0, null); + } + + private void showSnackbar(@StringRes int messageResId, @StringRes int actionResId, + View.OnClickListener onClickListener) { + hideSnackbar(); + mLastSnackbar = Snackbar.make(findViewById(android.R.id.content), messageResId, + Snackbar.LENGTH_LONG); + if (actionResId != 0 && onClickListener != null) { + mLastSnackbar.setAction(actionResId, onClickListener); + } mLastSnackbar.show(); } @@ -974,50 +1081,10 @@ public class MainActivity extends AppCompatActivity implements } private void handlePropertyFetchFailure(Request request, int statusCode, Throwable error) { - Log.e(TAG, "Error: " + error.toString()); + Log.e(TAG, "Error: " + error.toString(), error); Log.e(TAG, "HTTP status code: " + statusCode); - CharSequence message; - if (statusCode >= 400) { - if (error.getMessage().equals("openHAB is offline")) { - message = getString(R.string.error_openhab_offline); - } else { - int resourceId; - try { - resourceId = getResources().getIdentifier( - "error_http_code_" + statusCode, - "string", getPackageName()); - message = getString(resourceId); - } catch (Resources.NotFoundException e) { - message = getString(R.string.error_http_connection_failed, statusCode); - } - } - } else if (error instanceof UnknownHostException) { - Log.e(TAG, "Unable to resolve hostname"); - message = getString(R.string.error_unable_to_resolve_hostname); - } else if (error instanceof SSLException) { - // if ssl exception, check for some common problems - if (exceptionHasCause(error, CertPathValidatorException.class)) { - message = getString(R.string.error_certificate_not_trusted); - } else if (exceptionHasCause(error, CertificateExpiredException.class)) { - message = getString(R.string.error_certificate_expired); - } else if (exceptionHasCause(error, CertificateNotYetValidException.class)) { - message = getString(R.string.error_certificate_not_valid_yet); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N - && exceptionHasCause(error, CertificateRevokedException.class)) { - message = getString(R.string.error_certificate_revoked); - } else if (exceptionHasCause(error, SSLPeerUnverifiedException.class)) { - message = String.format(getString(R.string.error_certificate_wrong_host), - getHostFromUrl(request.url().toString())); - } else { - message = getString(R.string.error_connection_sslhandshake_failed); - } - } else if (error instanceof ConnectException || error instanceof SocketTimeoutException) { - message = getString(R.string.error_connection_failed); - } else { - Log.e(TAG, "REST call to " + request.url() + " failed", error); - message = error.getMessage(); - } - + CharSequence message = Util.getHumanReadableErrorMessage(this, + request.url().toString(), statusCode, error); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); if (settings.getBoolean(Constants.PREFERENCE_DEBUG_MESSAGES, false)) { @@ -1068,29 +1135,51 @@ public class MainActivity extends AppCompatActivity implements return mConnection; } - /** - * If fullscreen is enabled and we are on at least android 4.4 set - * the system visibility to fullscreen + immersive + noNav - * - * @author Dan Cunningham - */ - protected void checkFullscreen() { - if (isFullscreenEnabled()) { - int uiOptions = getWindow().getDecorView().getSystemUiVisibility() - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY - | View.SYSTEM_UI_FLAG_FULLSCREEN; - getWindow().getDecorView().setSystemUiVisibility(uiOptions); - } + private void manageHabpanelShortcut(boolean visible) { + manageShortcut(visible, "habpanel", ACTION_HABPANEL_SELECTED, + R.string.mainmenu_openhab_habpanel, R.mipmap.ic_shortcut_habpanel, + R.string.app_shortcut_diabled_habpanel); } - /** - * If we are 4.4 we can use fullscreen mode and Daydream features - */ - protected boolean isFullscreenEnabled() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { - return false; + private void manageNotificationShortcut(boolean visible) { + manageShortcut(visible, "notification", ACTION_NOTIFICATION_SELECTED, + R.string.app_notifications, R.mipmap.ic_shortcut_notifications, + R.string.app_shortcut_diabled_notifications);; + } + + private void manageVoiceRecognitionShortcut(boolean visible) { + manageShortcut(visible, "voice_recognition", ACTION_VOICE_RECOGNITION_SELECTED, + R.string.mainmenu_openhab_voice_recognition, + R.mipmap.ic_shortcut_voice_recognition, + R.string.app_shortcut_diabled_voice_recognition); + } + + private void manageShortcut(boolean visible, String id, String action, + @StringRes int shortLabel, @DrawableRes int icon, @StringRes int disableMessage) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) { + return; + } + if (visible) { + Intent intent = new Intent(this, MainActivity.class); + intent.setAction(action); + ShortcutInfo shortcut = new ShortcutInfo.Builder(this, id) + .setShortLabel(getString(shortLabel)) + .setIcon(Icon.createWithResource(this, icon)) + .setIntent(intent) + .build(); + mShortcutManager.addDynamicShortcuts(Collections.singletonList(shortcut)); + } else { + mShortcutManager.disableShortcuts(Collections.singletonList(id), + getString(disableMessage)); } - return mPrefs.getBoolean(Constants.PREFERENCE_FULLSCREEN, false); + } + + private void setVoiceWidgetComponentEnabledSetting(Class<?> component, + boolean isSpeechRecognizerAvailable) { + ComponentName voiceWidget = new ComponentName(this, component); + PackageManager pm = getPackageManager(); + int newState = isSpeechRecognizerAvailable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED + : PackageManager.COMPONENT_ENABLED_STATE_DISABLED; + pm.setComponentEnabledSetting(voiceWidget, newState, PackageManager.DONT_KILL_APP); } } \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/PreferencesActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/PreferencesActivity.java index 5548b677ff80571fdc1596e67d3e3e1997fd59f7..b58d59f46093fed1914b6cc65be69a3fb13b37b8 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/PreferencesActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/PreferencesActivity.java @@ -12,6 +12,7 @@ package org.openhab.habdroid.ui; import android.app.FragmentManager; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.media.Ringtone; import android.media.RingtoneManager; @@ -22,8 +23,10 @@ import android.preference.Preference; import android.preference.PreferenceFragment; import android.preference.PreferenceGroup; import android.preference.PreferenceScreen; +import android.provider.Settings; import android.text.TextUtils; import android.util.Log; +import android.util.Pair; import android.view.MenuItem; import android.widget.EditText; import android.widget.Toast; @@ -32,29 +35,28 @@ import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.app.NavUtils; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import org.openhab.habdroid.R; -import org.openhab.habdroid.core.CloudMessagingHelper; import org.openhab.habdroid.model.ServerProperties; +import org.openhab.habdroid.ui.widget.ItemUpdatingPreference; import org.openhab.habdroid.util.CacheManager; import org.openhab.habdroid.util.Constants; -import org.openhab.habdroid.util.Util; import java.net.MalformedURLException; import java.net.URL; import java.util.BitSet; +import static org.openhab.habdroid.util.Constants.PREV_SERVER_FLAGS; import static org.openhab.habdroid.util.Util.getHostFromUrl; /** * This is a class to provide preferences activity for application. */ -public class PreferencesActivity extends AppCompatActivity { +public class PreferencesActivity extends AbstractBaseActivity { public static final String RESULT_EXTRA_THEME_CHANGED = "theme_changed"; public static final String RESULT_EXTRA_SITEMAP_CLEARED = "sitemap_cleared"; public static final String START_EXTRA_SERVER_PROPERTIES = "server_properties"; @@ -65,7 +67,6 @@ public class PreferencesActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { - Util.setActivityTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_prefs); @@ -94,6 +95,9 @@ public class PreferencesActivity extends AppCompatActivity { @Override public boolean onOptionsItemSelected(MenuItem item) { + if (isFinishing()) { + return true; + } switch (item.getItemId()) { case android.R.id.home: FragmentManager fm = getFragmentManager(); @@ -108,12 +112,6 @@ public class PreferencesActivity extends AppCompatActivity { } } - @Override - public void finish() { - super.finish(); - Util.overridePendingTransition(this, true); - } - public void handleThemeChange() { mResultIntent.putExtra(RESULT_EXTRA_THEME_CHANGED, true); recreate(); @@ -157,6 +155,22 @@ public class PreferencesActivity extends AppCompatActivity { return getPreferenceScreen().getSharedPreferences().getString(prefKey, defValue); } + protected int getPreferenceInt(Preference preference, int defValue) { + return getPreferenceInt(preference.getKey(), defValue); + } + + protected int getPreferenceInt(String prefKey, int defValue) { + return getPreferenceScreen().getSharedPreferences().getInt(prefKey, defValue); + } + + protected boolean getPreferenceBool(Preference preference, boolean defValue) { + return getPreferenceBool(preference.getKey(), defValue); + } + + protected boolean getPreferenceBool(String prefKey, boolean defValue) { + return getPreferenceScreen().getSharedPreferences().getBoolean(prefKey, defValue); + } + protected boolean isConnectionHttps(String url) { return url.startsWith("https://"); } @@ -230,6 +244,7 @@ public class PreferencesActivity extends AppCompatActivity { protected void updateAndInitPreferences() { addPreferencesFromResource(R.xml.preferences); + final Preference demoModePref = findPreference(Constants.PREFERENCE_DEMOMODE); final Preference localConnPref = findPreference(Constants.SUBSCREEN_LOCAL_CONNECTION); final Preference remoteConnPref = findPreference(Constants.SUBSCREEN_REMOTE_CONNECTION); final Preference themePref = findPreference(Constants.PREFERENCE_THEME); @@ -238,8 +253,19 @@ public class PreferencesActivity extends AppCompatActivity { final Preference clearDefaultSitemapPref = findPreference(Constants.PREFERENCE_CLEAR_DEFAULT_SITEMAP); final Preference ringtonePref = findPreference(Constants.PREFERENCE_TONE); + final Preference fullscreenPreference = findPreference(Constants.PREFERENCE_FULLSCREEN); + final Preference sendDeviceInfoPrefixPref = + findPreference(Constants.PREFERENCE_SEND_DEVICE_INFO_PREFIX); + final Preference alarmClockPrefCat = + findPreference(Constants.PREFERENCE_SEND_DEVICE_INFO_CAT); + final Preference alarmClockPref = findPreference(Constants.PREFERENCE_ALARM_CLOCK); + final Preference taskerPref = + findPreference(Constants.PREFERENCE_TASKER_PLUGIN_ENABLED); final Preference vibrationPref = findPreference(Constants.PREFERENCE_NOTIFICATION_VIBRATION); + final Preference ringtoneVibrationPref = + findPreference(Constants.PREFERENCE_NOTIFICATION_TONE_VIBRATION); + final Preference viewLogPref = findPreference(Constants.PREFERENCE_LOG); final SharedPreferences prefs = getPreferenceScreen().getSharedPreferences(); String currentDefaultSitemap = prefs.getString(Constants.PREFERENCE_SITEMAP_NAME, ""); @@ -312,6 +338,10 @@ public class PreferencesActivity extends AppCompatActivity { return true; }); + if (!getPreferenceBool(taskerPref, false) && !isAutomationAppInstalled()) { + getParent(taskerPref).removePreference(taskerPref); + } + ringtonePref.setOnPreferenceChangeListener((pref, newValue) -> { updateRingtonePreferenceSummary(pref, newValue); return true; @@ -322,23 +352,72 @@ public class PreferencesActivity extends AppCompatActivity { return true; }); + ringtoneVibrationPref.setOnPreferenceClickListener(preference -> { + Intent i = new Intent(android.provider.Settings.ACTION_SETTINGS); + i.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); + i.putExtra(Settings.EXTRA_APP_PACKAGE, getActivity().getPackageName()); + startActivity(i); + return true; + }); + + viewLogPref.setOnPreferenceClickListener(preference -> { + Intent logIntent = new Intent(preference.getContext(), LogActivity.class); + startActivity(logIntent); + return true; + }); + final PreferenceScreen ps = getPreferenceScreen(); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) { Log.d(TAG, "Removing fullscreen pref as device isn't running Kitkat or higher"); - Preference fullscreenPreference = ps.findPreference(Constants.PREFERENCE_FULLSCREEN); getParent(fullscreenPreference).removePreference(fullscreenPreference); + } else { + fullscreenPreference.setOnPreferenceChangeListener((preference, newValue) -> { + ((AbstractBaseActivity) getActivity()).checkFullscreen((boolean) newValue); + return true; + }); } - if (!CloudMessagingHelper.isSupported()) { - Log.d(TAG, "Removing full-only prefs"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + Log.d(TAG, "Removing notification prefs for < 25"); getParent(ringtonePref).removePreference(ringtonePref); getParent(vibrationPref).removePreference(vibrationPref); + } else { + Log.d(TAG, "Removing notification prefs for >= 25"); + getParent(ringtoneVibrationPref).removePreference(ringtoneVibrationPref); + } + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + Log.d(TAG, "Removing alarm clock pref"); + getPreferenceScreen().removePreference(alarmClockPref); + } else { + updateAlarmClockPreferenceIcon(alarmClockPref, + ItemUpdatingPreference.parseValue( + getPreferenceString(alarmClockPref, null))); + updateAlarmClockPreferenceSummary(alarmClockPref, + getPreferenceString(sendDeviceInfoPrefixPref, ""), + ItemUpdatingPreference.parseValue( + getPreferenceString(alarmClockPref, null))); + alarmClockPref.setOnPreferenceChangeListener((preference, newValue) -> { + String prefix = getPreferenceString(sendDeviceInfoPrefixPref, ""); + updateAlarmClockPreferenceIcon(preference, newValue); + Pair<Boolean, String> value = (Pair<Boolean, String>) newValue; + updateAlarmClockPreferenceSummary(preference, prefix, value); + return true; + }); } + sendDeviceInfoPrefixPref.setOnPreferenceChangeListener((preference, newValue) -> { + Pair<Boolean, String> item = + ItemUpdatingPreference.parseValue(getPreferenceString(alarmClockPref, null)); + updateAlarmClockPreferenceSummary(alarmClockPref, (String) newValue, item); + return true; + }); + final ServerProperties props = getActivity().getIntent().getParcelableExtra(START_EXTRA_SERVER_PROPERTIES); - final int flags = props != null ? props.flags() : 0; + final int flags = props != null ? props.flags() : + getPreferenceScreen().getSharedPreferences().getInt(PREV_SERVER_FLAGS, 0); if ((flags & ServerProperties.SERVER_FLAG_ICON_FORMAT_SUPPORT) == 0) { Preference iconFormatPreference = @@ -352,6 +431,23 @@ public class PreferencesActivity extends AppCompatActivity { } } + private boolean isAutomationAppInstalled() { + String[] packageNames = {"net.dinglisch.android.taskerm", "com.twofortyfouram.locale"}; + + for (String packageName : packageNames) { + try { + if (getActivity().getPackageManager().getApplicationInfo(packageName, 0) + .enabled) { + return true; + } + } catch (PackageManager.NameNotFoundException ignored) { + // ignored + } + } + + return false; + } + /** * @author https://stackoverflow.com/a/17633389 */ @@ -386,10 +482,10 @@ public class PreferencesActivity extends AppCompatActivity { private void updateRingtonePreferenceSummary(Preference pref, Object newValue) { String value = (String) newValue; if (TextUtils.isEmpty(value)) { - pref.setIcon(R.drawable.ic_notifications_off_grey_24dp); + pref.setIcon(R.drawable.ic_bell_off_outline_grey_24dp); pref.setSummary(R.string.settings_ringtone_none); } else { - pref.setIcon(R.drawable.ic_notifications_active_grey_24dp); + pref.setIcon(R.drawable.ic_bell_ring_outline_grey_24dp); Ringtone ringtone = RingtoneManager.getRingtone(getActivity(), Uri.parse(value)); if (ringtone != null) { pref.setSummary(ringtone.getTitle(getActivity())); @@ -401,7 +497,22 @@ public class PreferencesActivity extends AppCompatActivity { boolean noVibration = newValue.equals( getString(R.string.settings_notification_vibration_value_off)); pref.setIcon(noVibration - ? R.drawable.ic_smartphone_grey_24dp : R.drawable.ic_vibration_grey_24dp); + ? R.drawable.ic_vibrate_off_grey_24dp : R.drawable.ic_vibration_grey_24dp); + } + + private void updateAlarmClockPreferenceSummary(Preference pref, String prefix, Pair item) { + Pair<Boolean, String> value = (Pair<Boolean, String>) item; + pref.setSummary(value != null && value.first + ? getString(R.string.settings_alarm_clock_summary_on, + (prefix + value.second)) + : getString(R.string.settings_alarm_clock_summary_off)); + } + + private void updateAlarmClockPreferenceIcon(Preference pref, Object newValue) { + Pair<Boolean, String> value = (Pair<Boolean, String>) newValue; + pref.setIcon(value != null && value.first + ? R.drawable.ic_alarm_grey_24dp + : R.drawable.ic_alarm_off_grey_24dp); } private boolean updateOpenLichtUrlPreference(Preference pref) { @@ -453,14 +564,14 @@ public class PreferencesActivity extends AppCompatActivity { String passwordPrefKey, @StringRes int urlSummaryFormatResId) { mUrlPreference = initEditor(urlPrefKey, R.drawable.ic_earth_grey_24dp, value -> { if (TextUtils.isEmpty(value)) { - return getString(R.string.info_not_set); + value = getString(R.string.info_not_set); } return getString(urlSummaryFormatResId, value); }); - mUserNamePreference = initEditor(userNamePrefKey, R.drawable.ic_person_grey_24dp, + mUserNamePreference = initEditor(userNamePrefKey, R.drawable.ic_person_outline_grey_24dp, value -> TextUtils.isEmpty(value) ? getString(R.string.info_not_set) : value); mPasswordPreference = initEditor(passwordPrefKey, - R.drawable.ic_security_grey_24dp, value -> { + R.drawable.ic_shield_key_outline_grey_24dp, value -> { @StringRes int resId = TextUtils.isEmpty(value) ? R.string.info_not_set : isWeakPassword(value) ? R.string.settings_openhab_password_summary_weak : R.string.settings_openhab_password_summary_strong; diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java index bbeef3f097efd03f32bf0d0e5d46133b830a3b5a..f1cefe49733f74acfc516c3ec4d7c47bdafa1d12 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetAdapter.java @@ -65,7 +65,7 @@ import org.openhab.habdroid.R; import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.model.Item; import org.openhab.habdroid.model.LabeledValue; -import org.openhab.habdroid.model.Recognition; +import org.openhab.habdroid.model.ParsedState; import org.openhab.habdroid.model.Widget; import org.openhab.habdroid.ui.widget.DividerItemDecoration; import org.openhab.habdroid.ui.widget.ExtendedSpinner; @@ -78,24 +78,25 @@ import org.openhab.habdroid.util.RetrofitClientInstance; import org.openhab.habdroid.util.Util; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Random; +import static org.openhab.habdroid.util.Constants.PREFERENCE_CHART_HQ; + /** * This class provides openHAB widgets adapter for list view. */ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener { - private static final String TAG = "WidgetAdapter"; + private static final String TAG = WidgetAdapter.class.getSimpleName(); public interface ItemClickListener { - void onItemClicked(Widget item); - void onItemLongClicked(Widget item); + boolean onItemClicked(Widget item); // returns whether click was handled + boolean onItemLongClicked(Widget item); } private static final int TYPE_GENERICITEM = 0; @@ -343,7 +344,9 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder ViewHolder holder = (ViewHolder) view.getTag(); int position = holder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { - mItemClickListener.onItemClicked(mItems.get(position)); + if (!mItemClickListener.onItemClicked(mItems.get(position))) { + holder.handleRowClick(); + } } } @@ -352,7 +355,7 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder ViewHolder holder = (ViewHolder) view.getTag(); int position = holder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { - mItemClickListener.onItemLongClicked(mItems.get(position)); + return mItemClickListener.onItemLongClicked(mItems.get(position)); } return false; } @@ -393,7 +396,8 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder } // This is needed to escape possible spaces and everything according to rfc2396 String iconUrl = Uri.encode(widget.iconPath(), "/?=&"); - iconView.setImageUrl(mConnection, iconUrl); + iconView.setImageUrl(mConnection, iconUrl, iconView.getResources() + .getDimensionPixelSize(R.dimen.notificationlist_icon_size)); Integer iconColor = mColorMapper.mapColor(widget.iconColor()); if (iconColor != null) { iconView.setColorFilter(iconColor); @@ -401,6 +405,8 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder iconView.clearColorFilter(); } } + + protected void handleRowClick() {} } public abstract static class LabeledItemBaseViewHolder extends ViewHolder { @@ -509,17 +515,27 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder public void bind(Widget widget) { super.bind(widget); mBoundItem = widget.item(); - mSwitch.setChecked(mBoundItem != null && mBoundItem.stateAsBoolean()); + ParsedState state = mBoundItem != null ? mBoundItem.state() : null; + mSwitch.setChecked(state != null && state.asBoolean()); + } + + @Override + protected void handleRowClick() { + toggleSwitch(); } @Override public boolean onTouch(View v, MotionEvent motionEvent) { if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) { - Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundItem, - mSwitch.isChecked() ? "OFF" : "ON"); + toggleSwitch(); } return false; } + + private void toggleSwitch() { + Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundItem, + mSwitch.isChecked() ? "OFF" : "ON"); + } } public static class TextViewHolder extends LabeledItemBaseViewHolder { @@ -541,7 +557,7 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder public static class SliderViewHolder extends LabeledItemBaseViewHolder implements SeekBar.OnSeekBarChangeListener { private final SeekBar mSeekBar; - private Item mBoundItem; + private Widget mBoundWidget; SliderViewHolder(LayoutInflater inflater, ViewGroup parent, Connection conn, ColorMapper colorMapper) { @@ -553,23 +569,45 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder @Override public void bind(Widget widget) { super.bind(widget); - mBoundItem = widget.item(); - if (mBoundItem != null) { - int progress; - if (mBoundItem.isOfTypeOrGroupType(Item.Type.Color)) { - Integer brightness = mBoundItem.stateAsBrightness(); - progress = brightness != null ? brightness : 0; - } else { - progress = (int) mBoundItem.stateAsFloat(); + mBoundWidget = widget; + + float stepCount = (widget.maxValue() - widget.minValue()) / widget.step(); + mSeekBar.setMax((int) Math.ceil(stepCount)); + mSeekBar.setProgress(0); + + Item item = widget.item(); + ParsedState state = item != null ? item.state() : null; + if (item == null || state == null) { + return; + } + + if (item.isOfTypeOrGroupType(Item.Type.Color)) { + Integer brightness = state.asBrightness(); + if (brightness != null) { + mSeekBar.setMax(100); + mSeekBar.setProgress(brightness); } - mSeekBar.setProgress(progress); } else { - mSeekBar.setProgress(0); + ParsedState.NumberState number = state.asNumber(); + if (number != null) { + float progress = + (number.mValue.floatValue() - widget.minValue()) / widget.step(); + mSeekBar.setProgress(Math.round(progress)); + } + } + } + + @Override + protected void handleRowClick() { + if (mBoundWidget.switchSupport()) { + Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundWidget.item(), + mSeekBar.getProgress() == 0 ? "ON" : "OFF"); } } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + // no-op } @Override @@ -579,9 +617,17 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder @Override public void onStopTrackingTouch(SeekBar seekBar) { - Log.d(TAG, "onStopTrackingTouch position = " + seekBar.getProgress()); - Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundItem, - String.valueOf(seekBar.getProgress())); + int progress = seekBar.getProgress(); + Log.d(TAG, "onStopTrackingTouch position = " + progress); + Item item = mBoundWidget.item(); + if (item == null) { + return; + } + float newValue = mBoundWidget.minValue() + mBoundWidget.step() * progress; + final ParsedState.NumberState previousState = + item.state() != null ? item.state().asNumber() : null; + Util.sendItemCommand(mConnection.getAsyncHttpClient(), item, + ParsedState.NumberState.withValue(previousState, newValue)); } } @@ -599,8 +645,8 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder @Override public void bind(Widget widget) { - Item item = widget.item(); - final String state = item != null ? item.state() : null; + ParsedState state = widget.state(); + final String value = state != null ? state.asString() : null; // Make sure images fit into the content frame by scaling // them at max 90% of the available height @@ -608,14 +654,14 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder ? Math.round(0.9f * mParentView.getHeight()) : Integer.MAX_VALUE; mImageView.setMaxHeight(maxHeight); - if (state != null && state.matches("data:image/.*;base64,.*")) { - final String dataString = state.substring(state.indexOf(",") + 1); + if (value != null && value.matches("data:image/.*;base64,.*")) { + final String dataString = value.substring(value.indexOf(",") + 1); byte[] data = Base64.decode(dataString, Base64.DEFAULT); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); mImageView.setImageBitmap(bitmap); mRefreshRate = 0; } else { - mImageView.setImageUrl(mConnection, widget.url()); + mImageView.setImageUrl(mConnection, widget.url(), mParentView.getWidth()); mRefreshRate = widget.refresh(); } } @@ -657,12 +703,13 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder int spinnerSelectedIndex = -1; ArrayList<String> spinnerArray = new ArrayList<>(); - String state = mBoundItem != null ? mBoundItem.state() : null; + ParsedState state = mBoundItem != null ? mBoundItem.state() : null; + String stateString = state != null ? state.asString() : null; for (LabeledValue mapping : mBoundMappings) { String command = mapping.value(); spinnerArray.add(mapping.label()); - if (command != null && command.equals(state)) { + if (command != null && command.equals(stateString)) { spinnerSelectedIndex = spinnerArray.size() - 1; } } @@ -673,13 +720,18 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(itemView.getContext(), android.R.layout.simple_spinner_item, spinnerArray); - spinnerAdapter.setDropDownViewResource(android.R.layout.select_dialog_singlechoice); + spinnerAdapter.setDropDownViewResource(R.layout.select_dialog_singlechoice); mSpinner.setPrompt(mLabelView.getText()); mSpinner.setAdapter(spinnerAdapter); mSpinner.setSelectionWithoutUpdateCallback(spinnerSelectedIndex); } + @Override + protected void handleRowClick() { + mSpinner.performClick(); + } + @Override public void onSelectionUpdated(int position) { Log.d(TAG, "Spinner item click on index " + position); @@ -720,13 +772,14 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder mRadioGroup.addView(view); } // bind views + final String state = mBoundItem != null && mBoundItem.state() != null + ? mBoundItem.state().asString() : null; for (int i = 0; i < mappings.size(); i++) { SegmentedControlButton button = (SegmentedControlButton) mRadioGroup.getChildAt(i); String command = mappings.get(i).value(); button.setText(mappings.get(i).label()); button.setTag(command); - button.setChecked(mBoundItem != null && command != null - && command.equals(mBoundItem.state())); + button.setChecked(state != null && TextUtils.equals(state, command)); button.setVisibility(View.VISIBLE); } // hide spare views @@ -735,6 +788,35 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder } } + @Override + protected void handleRowClick() { + int visibleChildCount = getVisibleViewCount(); + if (visibleChildCount == 1) { + onClick(mRadioGroup.getChildAt(0)); + } else if (visibleChildCount == 2) { + ParsedState parsedState = mBoundItem.state(); + if (parsedState == null) { + return; + } + String state = parsedState.asString(); + if (state.equals(mRadioGroup.getChildAt(0).getTag().toString())) { + onClick(mRadioGroup.getChildAt(1)); + } else if (state.equals(mRadioGroup.getChildAt(1).getTag().toString())) { + onClick(mRadioGroup.getChildAt(0)); + } + } + } + + private int getVisibleViewCount() { + int count = 0; + for (int i = 0; i < mRadioGroup.getChildCount(); i++) { + if (mRadioGroup.getChildAt(i).getVisibility() == View.VISIBLE) { + count++; + } + } + return count; + } + @Override public void onClick(View view) { final String cmd = (String) view.getTag(); @@ -788,8 +870,11 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder mValueView.setOnClickListener(this); mInflater = inflater; - ImageView dropdownArrow = itemView.findViewById(R.id.down_arrow); - dropdownArrow.setOnClickListener(this); + // Dialog + itemView.findViewById(R.id.down_arrow).setOnClickListener(this); + // Up/Down buttons + itemView.findViewById(R.id.up_button).setOnClickListener(this); + itemView.findViewById(R.id.down_button).setOnClickListener(this); } @Override @@ -798,54 +883,71 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder mBoundWidget = widget; } + @Override + protected void handleRowClick() { + onClick(itemView); + } + @Override public void onClick(final View view) { + if (mBoundWidget.state() == null) { + Log.d(TAG, "mBoundWidget.state() is null"); + return; + } + + ParsedState.NumberState state = mBoundWidget.state().asNumber(); float minValue = mBoundWidget.minValue(); float maxValue = mBoundWidget.maxValue(); // This prevents an exception below, but could lead to // user confusion if this case is ever encountered. float stepSize = minValue == maxValue ? 1 : mBoundWidget.step(); - final int stepCount = ((int) (Math.abs(maxValue - minValue) / stepSize)) + 1; - final String[] stepValues = new String[stepCount]; - for (int i = 0; i < stepValues.length; i++) { - // Check if step size is a whole integer. - if (stepSize == Math.ceil(stepSize)) { - // Cast to int to prevent .0 being added to all values in picker - stepValues[i] = String.valueOf((int) (minValue + (i * stepSize))); - } else { - stepValues[i] = String.valueOf(minValue + (i * stepSize)); + final Float stateValue = state != null ? state.mValue.floatValue() : null; + + if (view.getId() == R.id.up_button || view.getId() == R.id.down_button) { + if (stateValue == null) { + return; + } + float newValue = view.getId() == R.id.up_button + ? stateValue + stepSize : stateValue - stepSize; + if (newValue >= minValue && newValue <= maxValue) { + Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundWidget.item(), + ParsedState.NumberState.withValue(state, newValue)); + } + } else { + final int stepCount = ((int) (Math.abs(maxValue - minValue) / stepSize)) + 1; + final ParsedState.NumberState[] stepValues = new ParsedState.NumberState[stepCount]; + final String[] stepValueLabels = new String[stepCount]; + int closestIndex = 0; + float closestDelta = Float.MAX_VALUE; + + for (int i = 0; i < stepValues.length; i++) { + float stepValue = minValue + i * stepSize; + stepValues[i] = ParsedState.NumberState.withValue(state, stepValue); + stepValueLabels[i] = stepValues[i].toString(); + if (stateValue != null && Math.abs(stateValue - stepValue) < closestDelta) { + closestIndex = i; + closestDelta = Math.abs(stateValue - stepValue); + } } - } - final View dialogView = mInflater.inflate(R.layout.dialog_numberpicker, null); - final NumberPicker numberPicker = dialogView.findViewById(R.id.numberpicker); - - numberPicker.setMinValue(0); - numberPicker.setMaxValue(stepValues.length - 1); - numberPicker.setDisplayedValues(stepValues); - - // Find the closest value in the calculated step value - String stateString = Float.toString(mBoundWidget.item().stateAsFloat()); - int stepIndex = Arrays.binarySearch(stepValues, stateString, - (lhs, rhs) -> Float.valueOf(lhs).compareTo(Float.valueOf(rhs))); - if (stepIndex < 0) { - // Use the returned insertion point if value is not - // found and select the closest value. - stepIndex = -(stepIndex + 1); - // Handle case where insertion would be larger than the array - stepIndex = Math.min(stepIndex, stepValues.length - 1); + final View dialogView = mInflater.inflate(R.layout.dialog_numberpicker, null); + final NumberPicker numberPicker = dialogView.findViewById(R.id.numberpicker); + + numberPicker.setMinValue(0); + numberPicker.setMaxValue(stepValues.length - 1); + numberPicker.setDisplayedValues(stepValueLabels); + numberPicker.setValue(closestIndex); + + new AlertDialog.Builder(view.getContext()) + .setTitle(mLabelView.getText()) + .setView(dialogView) + .setPositiveButton(R.string.set, (dialog, which) -> { + Util.sendItemCommand(mConnection.getAsyncHttpClient(), + mBoundWidget.item(), stepValues[numberPicker.getValue()]); + }) + .setNegativeButton(R.string.cancel, null) + .show(); } - numberPicker.setValue(stepIndex); - - new AlertDialog.Builder(view.getContext()) - .setTitle(mLabelView.getText()) - .setView(dialogView) - .setPositiveButton(R.string.set, (dialog, which) -> { - Util.sendItemCommand(mConnection.getAsyncHttpClient(), mBoundWidget.item(), - stepValues[numberPicker.getValue()]); - }) - .setNegativeButton(R.string.cancel, null) - .show(); } } @@ -879,7 +981,9 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder Item item = widget.item(); if (item != null) { - float scalingFactor = mPrefs.getFloat(Constants.PREFERENCE_CHART_SCALING, 1.0f); + float scalingFactor = mPrefs.getFloat(Constants.PREFERENCE_CHART_SCALING, + 1.0f); + boolean requestHighResChart = mPrefs.getBoolean(PREFERENCE_CHART_HQ, true); float actualDensity = (float) mDensity / scalingFactor; StringBuilder chartUrl = new StringBuilder("chart?") @@ -887,7 +991,8 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder .append(item.name()) .append("&period=").append(widget.period()) .append("&random=").append(mRandom.nextInt()) - .append("&dpi=").append((int) actualDensity); + .append("&dpi=").append(requestHighResChart ? (int) actualDensity : + (int) actualDensity / 2); if (!TextUtils.isEmpty(widget.service())) { chartUrl.append("&service=").append(widget.service()); } @@ -900,13 +1005,15 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder int parentWidth = mParentView.getWidth(); if (parentWidth > 0) { - chartUrl.append("&w=").append(parentWidth); - chartUrl.append("&h=").append(parentWidth / 2); + chartUrl.append("&w=").append(requestHighResChart ? parentWidth : + parentWidth / 2); + chartUrl.append("&h=").append(requestHighResChart ? parentWidth / 2 : + parentWidth / 4); } Log.d(TAG, "Chart url = " + chartUrl); - mImageView.setImageUrl(mConnection, chartUrl.toString(), true); + mImageView.setImageUrl(mConnection, chartUrl.toString(), parentWidth, true); mRefreshRate = widget.refresh(); } else { Log.e(TAG, "Chart item is null"); @@ -949,7 +1056,7 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder && videoItem != null && videoItem.type() == Item.Type.StringItem && videoItem.state() != null) { - videoUrl = videoItem.state(); + videoUrl = videoItem.state().asString(); } else { videoUrl = widget.url(); } @@ -994,13 +1101,11 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder mWebView.setLayoutParams(lp); } - HttpUrl url = mConnection.getAsyncHttpClient().buildUrl(widget.url()); - - mWebView.setWebViewClient(new AnchorWebViewClient(url.toString(), + String url = mConnection.getAsyncHttpClient().buildUrl(widget.url()).toString(); + Util.initWebView(mWebView, mConnection, url); + mWebView.setWebViewClient(new AnchorWebViewClient(url, mConnection.getUsername(), mConnection.getPassword())); - mWebView.getSettings().setDomStorageEnabled(true); - mWebView.getSettings().setJavaScriptEnabled(true); - mWebView.loadUrl(url.toString()); + mWebView.loadUrl(url); } } @@ -1067,6 +1172,11 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder mBoundItem = widget.item(); } + @Override + protected void handleRowClick() { + showColorPickerDialog(); + } + @Override public boolean onTouch(View v, MotionEvent motionEvent) { if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) { @@ -1112,8 +1222,8 @@ public class WidgetAdapter extends RecyclerView.Adapter<WidgetAdapter.ViewHolder colorPicker.setOnColorSelectedListener(color -> mColorChanged = true); saturationBar.setOnSaturationChangedListener(saturation -> mColorChanged = true); valueBar.setOnValueChangedListener(value -> mColorChanged = true); - - float[] initialColor = mBoundItem.stateAsHsv(); + float[] initialColor = mBoundItem != null && mBoundItem.state() != null + ? mBoundItem.state().asHsv() : null; if (initialColor != null) { colorPicker.setColor(Color.HSVToColor(initialColor)); diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java index 84fa58260756bd309e377cc24329c212d32959b4..fc3a3da3e2062e1311372f13a29ac8da77a9783f 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/WidgetListFragment.java @@ -9,26 +9,46 @@ package org.openhab.habdroid.ui; +import android.annotation.SuppressLint; import android.app.AlertDialog; +import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.drawable.AdaptiveIconDrawable; +import android.net.Uri; +import android.os.AsyncTask; import android.os.Bundle; +import android.preference.PreferenceManager; +import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.drawable.IconCompat; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import es.dmoral.toasty.Toasty; import org.openhab.habdroid.R; +import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.core.connection.ConnectionFactory; +import org.openhab.habdroid.core.connection.exception.ConnectionException; import org.openhab.habdroid.model.Item; import org.openhab.habdroid.model.LabeledValue; import org.openhab.habdroid.model.LinkedPage; import org.openhab.habdroid.model.Widget; +import org.openhab.habdroid.ui.widget.RecyclerViewSwipeRefreshLayout; import org.openhab.habdroid.util.CacheManager; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.SuggestedCommandsFactory; import org.openhab.habdroid.util.Util; import java.lang.reflect.Array; @@ -47,21 +67,20 @@ public class WidgetListFragment extends Fragment @VisibleForTesting public RecyclerView mRecyclerView; + private LinearLayout mEmptyPageView; private LinearLayoutManager mLayoutManager; private WidgetAdapter mAdapter; // Url of current sitemap page displayed private String mPageUrl; // parent activity private MainActivity mActivity; - private boolean mIsVisible = false; private String mTitle; - private SwipeRefreshLayout mRefreshLayout; + private RecyclerViewSwipeRefreshLayout mRefreshLayout; private String mHighlightedPageLink; + private SuggestedCommandsFactory mSuggestedCommandsFactory; @Override public void onCreate(Bundle savedInstanceState) { - Log.d(TAG, "onCreate()"); - Log.d(TAG, "isAdded = " + isAdded()); super.onCreate(savedInstanceState); Bundle args = getArguments(); @@ -78,8 +97,7 @@ public class WidgetListFragment extends Fragment @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - Log.d(TAG, "onActivityCreated()"); - Log.d(TAG, "isAdded = " + isAdded()); + Log.d(TAG, "onActivityCreated() " + mPageUrl); mActivity = (MainActivity) getActivity(); mActivity.updateWidgets(mWidgets); mAdapter = new WidgetAdapter(mActivity, mActivity.getConnection(), this); @@ -100,95 +118,73 @@ public class WidgetListFragment extends Fragment } @Override - public void onItemClicked(Widget widget) { + public boolean onItemClicked(Widget widget) { LinkedPage linkedPage = widget.linkedPage(); if (mActivity != null && linkedPage != null) { mActivity.onWidgetSelected(linkedPage, WidgetListFragment.this); + return true; } + return false; } @Override - public void onItemLongClicked(final Widget widget) { - Log.d(TAG, "Widget type = " + widget.type()); - - ArrayList<String> labels = new ArrayList<>(); - ArrayList<String> commands = new ArrayList<>(); - - if (widget.item() != null) { - // If the widget has mappings, we will populate names and commands with - // values from those mappings - if (widget.hasMappingsOrItemOptions()) { - for (LabeledValue mapping : widget.getMappingsOrItemOptions()) { - labels.add(mapping.label()); - commands.add(mapping.value()); - } - // Else we only can do it for Switch widget with On/Off/Toggle commands - } else if (widget.type() == Widget.Type.Switch) { - Item item = widget.item(); - if (item.isOfTypeOrGroupType(Item.Type.Switch)) { - labels.add(getString(R.string.nfc_action_on)); - commands.add("ON"); - labels.add(getString(R.string.nfc_action_off)); - commands.add("OFF"); - labels.add(getString(R.string.nfc_action_toggle)); - commands.add("TOGGLE"); - } else if (item.isOfTypeOrGroupType(Item.Type.Rollershutter)) { - labels.add(getString(R.string.nfc_action_up)); - commands.add("UP"); - labels.add(getString(R.string.nfc_action_down)); - commands.add("DOWN"); - labels.add(getString(R.string.nfc_action_toggle)); - commands.add("TOGGLE"); - } - } else if (widget.type() == Widget.Type.Colorpicker) { - labels.add(getString(R.string.nfc_action_on)); - commands.add("ON"); - labels.add(getString(R.string.nfc_action_off)); - commands.add("OFF"); - labels.add(getString(R.string.nfc_action_toggle)); - commands.add("TOGGLE"); - labels.add(getString(R.string.nfc_action_current_color)); - commands.add(widget.item().state()); + public boolean onItemLongClicked(final Widget widget) { + if (mSuggestedCommandsFactory == null) { + mSuggestedCommandsFactory = new SuggestedCommandsFactory(getContext(), false); + } + SuggestedCommandsFactory.SuggestedCommands suggestedCommands = + mSuggestedCommandsFactory.fill(widget); + + List<String> labels = suggestedCommands.labels; + List<String> commands = suggestedCommands.commands; + + if (widget.linkedPage() != null) { + labels.add(getString(R.string.nfc_action_to_sitemap_page)); + if (ShortcutManagerCompat.isRequestPinShortcutSupported(getContext())) { + labels.add(getString(R.string.home_shortcut_pin_to_home)); } } - labels.add(getString(R.string.nfc_action_to_sitemap_page)); - - final String[] labelArray = labels.toArray(new String[0]); - new AlertDialog.Builder(getActivity()) - .setTitle(R.string.nfc_dialog_title) - .setItems(labelArray, (dialog, which) -> { - Intent writeTagIntent = new Intent(getActivity(), WriteTagActivity.class); - writeTagIntent.putExtra("sitemapPage", mPageUrl); - - if (which < labelArray.length - 1) { - writeTagIntent.putExtra("item", widget.item().name()); - writeTagIntent.putExtra("itemType", widget.item().type()); - writeTagIntent.putExtra("command", commands.get(which)); - } - startActivityForResult(writeTagIntent, 0); - Util.overridePendingTransition(getActivity(), false); - }) - .show(); + + if (!labels.isEmpty()) { + final String[] labelArray = labels.toArray(new String[0]); + new AlertDialog.Builder(getActivity()) + .setTitle(R.string.nfc_dialog_title) + .setItems(labelArray, (dialog, which) -> { + if (which < commands.size()) { + startActivity(WriteTagActivity.createItemUpdateIntent( + getActivity(), widget.item().name(), commands.get(which), + labels.get(which), widget.item().label())); + } else if (which == commands.size()) { + startActivity(WriteTagActivity.createSitemapNavigationIntent( + getActivity(), widget.linkedPage().link())); + } else { + createShortcut(widget.linkedPage()); + } + }) + .show(); + + return true; + } + return false; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - Log.i(TAG, "onCreateView"); - Log.d(TAG, "isAdded = " + isAdded()); return inflater.inflate(R.layout.fragment_widgetlist, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { - Log.d(TAG, "onViewCreated"); - Log.d(TAG, "isAdded = " + isAdded()); + Log.d(TAG, "onViewCreated() " + mPageUrl); super.onViewCreated(view, savedInstanceState); mRecyclerView = view.findViewById(R.id.recyclerview); - mRefreshLayout = getView().findViewById(R.id.swiperefresh); + mEmptyPageView = view.findViewById(android.R.id.empty); + mRefreshLayout = view.findViewById(R.id.swiperefresh); Util.applySwipeLayoutColors(mRefreshLayout, R.attr.colorPrimary, R.attr.colorAccent); + mRefreshLayout.setRecyclerView(mRecyclerView); mRefreshLayout.setOnRefreshListener(() -> { mActivity.showRefreshHintSnackbarIfNeeded(); CacheManager.getInstance(getActivity()).clearCache(); @@ -200,30 +196,124 @@ public class WidgetListFragment extends Fragment @Override public void onStart() { - Log.d(TAG, "onStart"); + Log.d(TAG, "onStart() " + mPageUrl); super.onStart(); mActivity.triggerPageUpdate(mPageUrl, false); + if (mAdapter != null) { + startOrStopVisibleViewHolders(true); + } } @Override public void onPause() { super.onPause(); Log.d(TAG, "onPause() " + mPageUrl); - Log.d(TAG, "isAdded = " + isAdded()); if (mAdapter != null) { - stopVisibleViewHolders(); + startOrStopVisibleViewHolders(false); } } - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - super.setUserVisibleHint(isVisibleToUser); - mIsVisible = isVisibleToUser; - Log.d(TAG, String.format("isVisibleToUser(%B)", isVisibleToUser)); + @SuppressLint("StaticFieldLeak") + private void createShortcut(LinkedPage linkedPage) { + String iconFormat = PreferenceManager.getDefaultSharedPreferences(getContext()) + .getString(Constants.PREFERENCE_ICON_FORMAT, "png"); + new AsyncTask<Void, Void, IconCompat>() { + + @Override + protected IconCompat doInBackground(Void... voids) { + Context context = getContext(); + String url = null; + if (!TextUtils.isEmpty(linkedPage.iconPath())) { + url = new Uri.Builder() + .appendEncodedPath(linkedPage.iconPath()) + .appendQueryParameter("format", iconFormat) + .toString(); + } + IconCompat icon = null; + Connection connection = null; + try { + connection = ConnectionFactory.getUsableConnection(); + } catch (ConnectionException e) { + // ignored + } + + if (context == null || connection == null) { + return null; + } + + if (url != null) { + /** + * Icon size is defined in {@link AdaptiveIconDrawable}. Foreground size of + * 46dp instead of 72dp adds enough border to the icon. + * 46dp foreground + 2 * 31dp border = 108dp + **/ + int foregroundSize = (int) Util.convertDpToPixel(46, context); + Bitmap bitmap = connection.getSyncHttpClient().get(url) + .asBitmap(foregroundSize, true).response; + if (bitmap != null) { + bitmap = addBackgroundAndBorder(bitmap, + (int) Util.convertDpToPixel(31, context)); + icon = IconCompat.createWithAdaptiveBitmap(bitmap); + } + } + + if (icon == null) { + // Fall back to openHAB icon + icon = IconCompat.createWithResource(context, R.mipmap.icon); + } + + return icon; + } + + @Override + protected void onPostExecute(IconCompat icon) { + Context context = getContext(); + if (icon == null || context == null) { + return; + } + + Uri sitemapUri = Uri.parse(linkedPage.link()); + String shortSitemapUri = sitemapUri.getPath().substring(14); + + Intent startIntent = new Intent(context, MainActivity.class); + startIntent.setAction(MainActivity.ACTION_SITEMAP_SELECTED); + startIntent.putExtra(MainActivity.EXTRA_SITEMAP_URL, shortSitemapUri); + startActivity(startIntent); + + String name = linkedPage.title(); + if (TextUtils.isEmpty(name)) { + name = getString(R.string.app_name); + } + + ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(context, + shortSitemapUri + '-' + System.currentTimeMillis()) + .setShortLabel(name) + .setIcon(icon) + .setIntent(startIntent) + .build(); + + if (ShortcutManagerCompat.requestPinShortcut(context, shortcutInfo, null)) { + Toasty.success(context,R.string.home_shortcut_success_pinning).show(); + } else { + Toasty.error(context,R.string.home_shortcut_error_pinning).show(); + } + } + }.execute(); + } + + /** + * @author https://stackoverflow.com/a/15525394 + */ + private Bitmap addBackgroundAndBorder(Bitmap bitmap, int borderSize) { + Bitmap bitmapWithBackground = Bitmap.createBitmap(bitmap.getWidth() + borderSize * 2, + bitmap.getHeight() + borderSize * 2, bitmap.getConfig()); + Canvas canvas = new Canvas(bitmapWithBackground); + canvas.drawColor(Color.WHITE); + canvas.drawBitmap(bitmap, borderSize, borderSize, null); + return bitmapWithBackground; } public static WidgetListFragment withPage(String pageUrl, String pageTitle) { - Log.d(TAG, "withPage(" + pageUrl + ")"); WidgetListFragment fragment = new WidgetListFragment(); Bundle args = new Bundle(); args.putString("displayPageUrl", pageUrl); @@ -252,19 +342,22 @@ public class WidgetListFragment extends Fragment mAdapter.setSelectedPosition(-1); } - public ArrayList<Widget> mWidgets = new ArrayList<>(); - public void update(String pageTitle, List<Widget> widgets) { - mTitle = pageTitle; - mWidgets.addAll(widgets); + public void updateTitle(String pageTitle) { + mTitle = pageTitle.replaceAll("[\\[\\]]", ""); + if (mActivity != null) { + mActivity.updateTitle(); + } + } + + public void updateWidgets(List<Widget> widgets) { if (mAdapter != null) { mAdapter.update(widgets, mRefreshLayout.isRefreshing()); + boolean emptyPage = widgets.size() == 0; + mRecyclerView.setVisibility(emptyPage ? View.GONE : View.VISIBLE); + mEmptyPageView.setVisibility(emptyPage ? View.VISIBLE : View.GONE); setHighlightedPageLink(mHighlightedPageLink); mRefreshLayout.setRefreshing(false); } - if (mActivity != null && mIsVisible) { - mActivity.updateTitle(); - mActivity.updateWidgets(widgets); - } } public void updateWidget(Widget widget) { @@ -284,14 +377,18 @@ public class WidgetListFragment extends Fragment return getArguments().getString("title"); } - private void stopVisibleViewHolders() { + private void startOrStopVisibleViewHolders(boolean start) { final int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition(); final int lastVisibleItemPosition = mLayoutManager.findLastVisibleItemPosition(); for (int i = firstVisibleItemPosition; i <= lastVisibleItemPosition; ++i) { WidgetAdapter.ViewHolder holder = (WidgetAdapter.ViewHolder) mRecyclerView.findViewHolderForAdapterPosition(i); if (holder != null) { - holder.stop(); + if (start) { + holder.start(); + } else { + holder.stop(); + } } } } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/WriteTagActivity.java b/mobile/src/main/java/org/openhab/habdroid/ui/WriteTagActivity.java index b7c601e5eebd26c1f76ecc0b49b0b744ae10fcc6..41545cccf5a7a0d6cb5582bab827a077eefa9973 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/WriteTagActivity.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/WriteTagActivity.java @@ -14,6 +14,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.nfc.FormatException; import android.nfc.NdefMessage; import android.nfc.NdefRecord; @@ -22,6 +23,7 @@ import android.nfc.NfcManager; import android.nfc.Tag; import android.nfc.tech.Ndef; import android.nfc.tech.NdefFormatable; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Handler; @@ -33,32 +35,67 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import org.openhab.habdroid.R; -import org.openhab.habdroid.util.Util; +import org.openhab.habdroid.model.NfcTag; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -public class WriteTagActivity extends AppCompatActivity { +public class WriteTagActivity extends AbstractBaseActivity { private static final String TAG = WriteTagActivity.class.getSimpleName(); + private static final String EXTRA_LONG_URI = "longUri"; + private static final String EXTRA_SHORT_URI = "shortUri"; private NfcAdapter mNfcAdapter; - private String mSitemapPage; - private String mItem; - private String mCommand; + private Uri mLongUri; + private Uri mShortUri; + + public static Intent createItemUpdateIntent(Context context, String itemName, String state, + String mappedState, String label) { + if (TextUtils.isEmpty(itemName) || TextUtils.isEmpty(state)) { + throw new IllegalArgumentException("Item name or state is empty"); + } + Uri.Builder uriBuilder = new Uri.Builder() + .scheme(NfcTag.SCHEME) + .authority("") + .appendQueryParameter(NfcTag.QUERY_PARAMETER_ITEM_NAME, itemName) + .appendQueryParameter(NfcTag.QUERY_PARAMETER_STATE, state); + + Uri shortUri = uriBuilder.build(); + Uri longUri = uriBuilder + .appendQueryParameter(NfcTag.QUERY_PARAMETER_MAPPED_STATE, mappedState) + .appendQueryParameter(NfcTag.QUERY_PARAMETER_ITEM_LABEL, label) + .build(); + + return new Intent(context, WriteTagActivity.class) + .putExtra(EXTRA_SHORT_URI, shortUri) + .putExtra(EXTRA_LONG_URI, longUri); + } + + public static Intent createSitemapNavigationIntent(Context context, String sitemapUrl) { + Uri sitemapUri = Uri.parse(sitemapUrl); + if (!sitemapUri.getPath().startsWith("/rest/sitemaps")) { + throw new IllegalArgumentException("Expected a sitemap URL"); + } + Uri longUri = new Uri.Builder() + .scheme(NfcTag.SCHEME) + .authority("") + .appendEncodedPath(sitemapUri.getPath().substring(15)) + .build(); + return new Intent(context, WriteTagActivity.class) + .putExtra(EXTRA_LONG_URI, longUri); + } @Override protected void onCreate(Bundle savedInstanceState) { - Util.setActivityTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_writetag); @@ -78,12 +115,9 @@ public class WriteTagActivity extends AppCompatActivity { setResult(RESULT_OK); - mSitemapPage = getIntent().getStringExtra("sitemapPage"); - Log.d(TAG, "Got sitemapPage = " + mSitemapPage); - mItem = getIntent().getStringExtra("item"); - Log.d(TAG, "Got item = " + mItem); - mCommand = getIntent().getStringExtra("command"); - Log.d(TAG, "Got command = " + mCommand); + mLongUri = getIntent().getParcelableExtra(EXTRA_LONG_URI); + mShortUri = getIntent().getParcelableExtra(EXTRA_SHORT_URI); + Log.d(TAG, "Got URL " + mLongUri + " (short URI " + mShortUri + ")"); } private Fragment getFragment() { @@ -134,88 +168,109 @@ public class WriteTagActivity extends AppCompatActivity { @Override public void onNewIntent(Intent intent) { - if (mSitemapPage == null) { - return; - } - - Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); - Log.d(TAG, "NFC TAG = " + tagFromIntent.toString()); - Log.d(TAG, "Writing page " + mSitemapPage + " to tag"); + new AsyncTask<Void, Integer, Boolean>() { + @Override + protected void onPreExecute() { + TextView writeTagMessage = findViewById(R.id.write_tag_message); + writeTagMessage.setText(R.string.info_write_tag_progress); + } - TextView writeTagMessage = findViewById(R.id.write_tag_message); + @Override + protected Boolean doInBackground(Void... voids) { + Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); + Log.d(TAG, "NFC TAG = " + tag.toString()); + Log.d(TAG, "Writing URL " + mLongUri + " to tag"); + + NdefMessage longMessage = getNdefMessage(mLongUri); + NdefMessage shortMessage = getNdefMessage(mShortUri); + + NdefFormatable ndefFormatable = NdefFormatable.get(tag); + + if (ndefFormatable != null) { + Log.d(TAG, "Tag is uninitialized, formating"); + try { + ndefFormatable.connect(); + try { + ndefFormatable.format(longMessage); + } catch (IOException e) { + if (shortMessage != null) { + Log.d(TAG, "Try with short uri"); + ndefFormatable.format(shortMessage); + } + } + return true; + } catch (IOException | FormatException e) { + Log.e(TAG, "Writing to unformatted tag failed: " + e); + } finally { + try { + ndefFormatable.close(); + } catch (IOException e) { + Log.e(TAG, "Closing ndefFormatable failed", e); + } + } + } else { + Log.d(TAG, "Tag is initialized, writing"); + Ndef ndef = Ndef.get(tag); + if (ndef != null) { + try { + Log.d(TAG, "Connecting"); + ndef.connect(); + Log.d(TAG, "Writing"); + if (ndef.isWritable()) { + try { + ndef.writeNdefMessage(longMessage); + } catch (IOException e) { + if (shortMessage != null) { + Log.d(TAG, "Try with short uri"); + ndef.writeNdefMessage(shortMessage); + } + } + } + return true; + } catch (IOException | FormatException e) { + Log.e(TAG, "Writing to formatted tag failed", e); + } finally { + try { + ndef.close(); + } catch (IOException e) { + Log.e(TAG, "Closing ndef failed", e); + } + } + } else { + Log.e(TAG, "Ndef == null"); + } + } - try { - URI sitemapUri = new URI(mSitemapPage); - if (!sitemapUri.getPath().startsWith("/rest/sitemaps")) { - throw new URISyntaxException(mSitemapPage, "Expected a sitemap URL"); + return false; } - StringBuilder uriToWrite = new StringBuilder("openhab://sitemaps"); - uriToWrite.append(sitemapUri.getPath().substring(14)); - if (!TextUtils.isEmpty(mItem) && !TextUtils.isEmpty(mCommand)) { - uriToWrite.append("?item=").append(mItem).append("&command=").append(mCommand); - } - writeTagMessage.setText(R.string.info_write_tag_progress); - writeTag(tagFromIntent, uriToWrite.toString()); - } catch (URISyntaxException e) { - Log.e(TAG, e.getMessage()); - writeTagMessage.setText(R.string.info_write_failed); - } - } - private void writeTag(Tag tag, String uri) { - Log.d(TAG, "Creating tag object for URI " + uri); - TextView writeTagMessage = findViewById(R.id.write_tag_message); - - NdefRecord[] ndefRecords = new NdefRecord[] { NdefRecord.createUri(uri) }; - NdefMessage message = new NdefMessage(ndefRecords); - NdefFormatable ndefFormatable = NdefFormatable.get(tag); - - if (ndefFormatable != null) { - Log.d(TAG, "Tag is uninitialized, formating"); - try { - ndefFormatable.connect(); - ndefFormatable.format(message); - ndefFormatable.close(); - writeTagMessage.setText(R.string.info_write_tag_finished); - autoCloseActivity(); - } catch (IOException | FormatException e) { - Log.e(TAG, "Writing to unformatted tag failed: " + e); - writeTagMessage.setText(R.string.info_write_failed); - } - } else { - Log.d(TAG, "Tag is initialized, writing"); - Ndef ndef = Ndef.get(tag); - if (ndef != null) { - try { - Log.d(TAG, "Connecting"); - ndef.connect(); - Log.d(TAG, "Writing"); - if (ndef.isWritable()) { - ndef.writeNdefMessage(message); - } - Log.d(TAG, "Closing"); - ndef.close(); + @Override + protected void onPostExecute(Boolean success) { + TextView writeTagMessage = findViewById(R.id.write_tag_message); + + if (success) { + ProgressBar progressBar = findViewById(R.id.nfc_wait_progress); + progressBar.setVisibility(View.INVISIBLE); + + ImageView watermark = findViewById(R.id.nfc_watermark); + watermark.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), + R.drawable.ic_nfc_black_180dp)); + writeTagMessage.setText(R.string.info_write_tag_finished); - autoCloseActivity(); - } catch (IOException | FormatException e) { - Log.e(TAG, "Writing to formatted tag failed: " + e); + new Handler().postDelayed(WriteTagActivity.this::finish, 2000); + } else { writeTagMessage.setText(R.string.info_write_failed); } - } else { - Log.e(TAG, "Ndef == null"); - writeTagMessage.setText(R.string.info_write_failed); } - } + }.execute(); } - @Override - public void finish() { - super.finish(); - Util.overridePendingTransition(this, true); - } - - private void autoCloseActivity() { - new Handler().postDelayed(this::finish, 2000); + private NdefMessage getNdefMessage(Uri uri) { + if (uri == null) { + return null; + } + NdefRecord[] longNdefRecords = new NdefRecord[] { NdefRecord.createUri(uri) }; + return new NdefMessage(longNdefRecords); } public abstract static class AbstractNfcFragment extends Fragment { @@ -225,7 +280,7 @@ public class WriteTagActivity extends AppCompatActivity { final View view = inflater.inflate(R.layout.fragment_writenfc, container, false); final ImageView watermark = view.findViewById(R.id.nfc_watermark); - Drawable nfcIcon = getResources().getDrawable(R.drawable.ic_nfc_black_180dp); + Drawable nfcIcon = ContextCompat.getDrawable(getContext(), getWatermarkIcon()); nfcIcon.setColorFilter( ContextCompat.getColor(getActivity(), R.color.empty_list_text_color), PorterDuff.Mode.SRC_IN); @@ -237,6 +292,8 @@ public class WriteTagActivity extends AppCompatActivity { protected TextView getMessageTextView(View view) { return view.findViewById(R.id.write_tag_message); } + + protected abstract @DrawableRes int getWatermarkIcon(); } public static class NfcUnsupportedFragment extends AbstractNfcFragment { @@ -248,6 +305,11 @@ public class WriteTagActivity extends AppCompatActivity { getMessageTextView(view).setText(R.string.info_write_tag_unsupported); return view; } + + @Override + protected @DrawableRes int getWatermarkIcon() { + return R.drawable.ic_nfc_off_black_180dp; + } } public static class NfcDisabledFragment extends AbstractNfcFragment { @@ -270,6 +332,11 @@ public class WriteTagActivity extends AppCompatActivity { return view; } + + @Override + protected @DrawableRes int getWatermarkIcon() { + return R.drawable.ic_nfc_off_black_180dp; + } } public static class NfcWriteTagFragment extends AbstractNfcFragment { @@ -282,5 +349,10 @@ public class WriteTagActivity extends AppCompatActivity { return view; } + + @Override + protected @DrawableRes int getWatermarkIcon() { + return R.drawable.ic_nfc_search_black_180dp; + } } } \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/activity/ContentController.java b/mobile/src/main/java/org/openhab/habdroid/ui/activity/ContentController.java index 470cfb279769fa1a27edbf41fbb79fb5f4674e44..4d6ed19991b7bb9e51c295927629d1ee5c5b2f9b 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/activity/ContentController.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/activity/ContentController.java @@ -14,6 +14,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.net.wifi.WifiManager; import android.os.Bundle; import android.preference.PreferenceManager; import android.text.TextUtils; @@ -28,6 +29,7 @@ import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.AnimRes; import androidx.annotation.DrawableRes; +import androidx.annotation.IdRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; @@ -48,6 +50,8 @@ import org.openhab.habdroid.ui.CloudNotificationListFragment; import org.openhab.habdroid.ui.MainActivity; import org.openhab.habdroid.ui.PreferencesActivity; import org.openhab.habdroid.ui.WidgetListFragment; +import org.openhab.habdroid.util.Constants; +import org.openhab.habdroid.util.Util; import java.util.ArrayList; import java.util.HashSet; @@ -87,7 +91,7 @@ public abstract class ContentController implements PageConnectionHolderFragment. mConnectionFragment = new PageConnectionHolderFragment(); mFm.beginTransaction().add(mConnectionFragment, "connections").commit(); } - mDefaultProgressFragment = ProgressFragment.newInstance(null, false); + mDefaultProgressFragment = ProgressFragment.newInstance(null, 0); mConnectionFragment.setCallback(this); } @@ -215,19 +219,33 @@ public abstract class ContentController implements PageConnectionHolderFragment. mActivity.updateTitle(); } else { // we didn't find it - showTemporaryPage(WidgetListFragment.withPage(url, null)); + mTemporaryPage = WidgetListFragment.withPage(url, null); + // no fragment update yet; fragment state will be updated when data arrives + handleNewWidgetFragment((WidgetListFragment) mTemporaryPage); + mActivity.setProgressIndicatorVisible(true); } } + public void showHabpanel() { + showTemporaryPage(WebViewFragment.newInstance(R.string.mainmenu_openhab_habpanel, + R.string.habpanel_error, + "/habpanel/index.html", "/rest/events")); + } + /** - * Indicate to the user that no network connectivity is present + * Indicate to the user that no network connectivity is present. * * @param message Error message to show + * @param shouldSuggestEnablingWifi */ - public void indicateNoNetwork(CharSequence message) { + public void indicateNoNetwork(CharSequence message, boolean shouldSuggestEnablingWifi) { Log.d(TAG, "Indicate no network (message " + message + ")"); resetState(); - mNoConnectionFragment = NoNetworkFragment.newInstance(message); + if (shouldSuggestEnablingWifi) { + mNoConnectionFragment = EnableWifiNetworkFragment.newInstance(message); + } else { + mNoConnectionFragment = NoNetworkFragment.newInstance(message); + } updateFragmentState(FragmentUpdateReason.PAGE_UPDATE); mActivity.updateTitle(); } @@ -238,10 +256,13 @@ public abstract class ContentController implements PageConnectionHolderFragment. * @param resolveAttempted Indicate if discovery was attempted, but not successful */ public void indicateMissingConfiguration(boolean resolveAttempted) { - Log.d(TAG, "Indicate missing configuration (resolveAttempted " + resolveAttempted + ")"); + Log.d(TAG, "Indicate missing configuration (resolveAttempted " + + resolveAttempted + ")"); resetState(); - mNoConnectionFragment = - MissingConfigurationFragment.newInstance(mActivity, resolveAttempted); + WifiManager wifiManager = (WifiManager) + mActivity.getApplicationContext().getSystemService(Context.WIFI_SERVICE); + mNoConnectionFragment = MissingConfigurationFragment + .newInstance(mActivity, resolveAttempted, wifiManager.isWifiEnabled()); updateFragmentState(FragmentUpdateReason.PAGE_UPDATE); mActivity.updateTitle(); } @@ -276,11 +297,11 @@ public abstract class ContentController implements PageConnectionHolderFragment. * @param connection New connection to use; might be null if none is currently available * @param progressMessage Message to show to the user if no connection is available */ - public void updateConnection(Connection connection, CharSequence progressMessage) { + public void updateConnection(Connection connection, CharSequence progressMessage, + @DrawableRes int icon) { Log.d(TAG, "Update to connection " + connection + " (message " + progressMessage + ")"); if (connection == null) { - mNoConnectionFragment = ProgressFragment.newInstance(progressMessage, - progressMessage != null); + mNoConnectionFragment = ProgressFragment.newInstance(progressMessage, icon); } else { mNoConnectionFragment = null; } @@ -346,6 +367,8 @@ public abstract class ContentController implements PageConnectionHolderFragment. return mActivity.getString(R.string.app_notifications); } else if (mTemporaryPage instanceof WidgetListFragment) { return ((WidgetListFragment) mTemporaryPage).getTitle(); + } else if (mTemporaryPage instanceof WebViewFragment) { + return mActivity.getString(((WebViewFragment) mTemporaryPage).getTitleResId()); } return null; } else { @@ -370,6 +393,12 @@ public abstract class ContentController implements PageConnectionHolderFragment. * @return true if back key was consumed, false otherwise */ public boolean goBack() { + if (mTemporaryPage instanceof WebViewFragment) { + WebViewFragment wvf = (WebViewFragment) mTemporaryPage; + if (wvf.goBack()) { + return true; + } + } if (mTemporaryPage != null) { mTemporaryPage = null; mActivity.updateTitle(); @@ -402,23 +431,38 @@ public abstract class ContentController implements PageConnectionHolderFragment. @Override public String getIconFormat() { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity); - return prefs.getString("iconFormatType","PNG"); + return prefs.getString(Constants.PREFERENCE_ICON_FORMAT, "PNG"); + } + + @Override + public boolean isDetailedLoggingEnabled() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivity); + return prefs.getBoolean(Constants.PREFERENCE_DEBUG_MESSAGES, false); } @Override public void onPageUpdated(String pageUrl, String pageTitle, List<Widget> widgets) { Log.d(TAG, "Got update for URL " + pageUrl + ", pending " + mPendingDataLoadUrls); + WidgetListFragment fragmentForUrl = null; for (WidgetListFragment f : collectWidgetFragments()) { if (pageUrl.equals(f.getDisplayPageUrl())) { - f.update(pageTitle, widgets); + f.updateTitle(pageTitle); + f.updateWidgets(widgets); + fragmentForUrl = f; break; } } if (mPendingDataLoadUrls.remove(pageUrl) && mPendingDataLoadUrls.isEmpty()) { mActivity.setProgressIndicatorVisible(false); mActivity.updateTitle(); - updateFragmentState(mPageStack.isEmpty() - ? FragmentUpdateReason.PAGE_UPDATE : FragmentUpdateReason.PAGE_ENTER); + + if (fragmentForUrl != null && fragmentForUrl == mTemporaryPage) { + updateFragmentState(FragmentUpdateReason.TEMPORARY_PAGE); + } else if (mPageStack.isEmpty()) { + updateFragmentState(FragmentUpdateReason.PAGE_UPDATE); + } else { + updateFragmentState(FragmentUpdateReason.PAGE_ENTER); + } } } @@ -432,6 +476,27 @@ public abstract class ContentController implements PageConnectionHolderFragment. } } + @Override + public void onPageTitleUpdated(String pageUrl, String title) { + for (WidgetListFragment f : collectWidgetFragments()) { + if (pageUrl.equals(f.getDisplayPageUrl())) { + f.updateTitle(title); + break; + } + } + } + + @Override + public void onLoadFailure(String url, int statusCode, Throwable e) { + String errorMessage = Util.getHumanReadableErrorMessage(mActivity, url, statusCode, e) + .toString(); + + mNoConnectionFragment = CommunicationFailureFragment.newInstance( + mActivity.getString(R.string.error_sitemap_generic_load_error, errorMessage)); + updateFragmentState(FragmentUpdateReason.PAGE_UPDATE); + mActivity.updateTitle(); + } + protected abstract void executeStateUpdate(FragmentUpdateReason reason, boolean allowStateLoss); protected abstract WidgetListFragment getFragmentForTitle(); @@ -543,8 +608,9 @@ public abstract class ContentController implements PageConnectionHolderFragment. public static class CommunicationFailureFragment extends StatusFragment { public static CommunicationFailureFragment newInstance(CharSequence message) { CommunicationFailureFragment f = new CommunicationFailureFragment(); - f.setArguments(buildArgs(message, R.drawable.ic_openhab_appicon_24dp /* FIXME */, - R.string.try_again_button, false)); + f.setArguments(buildArgs(message, R.string.try_again_button, + R.drawable.ic_openhab_appicon_340dp /* FIXME */, + false)); return f; } @@ -555,25 +621,23 @@ public abstract class ContentController implements PageConnectionHolderFragment. } public static class ProgressFragment extends StatusFragment { - public static ProgressFragment newInstance(CharSequence message, boolean showImage) { + public static ProgressFragment newInstance(CharSequence message, @DrawableRes int image) { ProgressFragment f = new ProgressFragment(); - f.setArguments(buildArgs(message, - showImage ? R.drawable.ic_openhab_appicon_24dp : 0, - 0, true)); + f.setArguments(buildArgs(message, 0, image, true)); return f; } @Override public void onClick(View view) { - // no-op, we don't show the button + // No-op, we don't show the button } } public static class NoNetworkFragment extends StatusFragment { public static NoNetworkFragment newInstance(CharSequence message) { NoNetworkFragment f = new NoNetworkFragment(); - f.setArguments(buildArgs(message, R.drawable.ic_signal_cellular_off_black_24dp, - R.string.try_again_button, false)); + f.setArguments(buildArgs(message, R.string.try_again_button, + R.drawable.ic_network_strength_off_outline_black_24dp, false)); return f; } @@ -584,47 +648,106 @@ public abstract class ContentController implements PageConnectionHolderFragment. } } + public static class EnableWifiNetworkFragment extends StatusFragment { + public static EnableWifiNetworkFragment newInstance(CharSequence message) { + EnableWifiNetworkFragment f = new EnableWifiNetworkFragment(); + f.setArguments(buildArgs(message, R.string.enable_wifi_button, + R.drawable.ic_wifi_strength_off_outline_black_24dp, false)); + return f; + } + + @Override + public void onClick(View view) { + ((MainActivity) getActivity()).enableWifiAndIndicateStartup(); + } + } + public static class MissingConfigurationFragment extends StatusFragment { public static MissingConfigurationFragment newInstance(Context context, - boolean resolveAttempted) { + boolean resolveAttempted, boolean hasWifiEnabled) { MissingConfigurationFragment f = new MissingConfigurationFragment(); - @StringRes int textResId = - resolveAttempted ? R.string.configuration_missing : R.string.no_remote_server; - f.setArguments(buildArgs(context.getString(textResId), - R.drawable.ic_openhab_appicon_24dp, /* FIXME? */ - R.string.go_to_settings_button, false)); + final Bundle args; + if (resolveAttempted) { + args = buildArgs(context.getString(R.string.configuration_missing), + R.string.go_to_settings_button, R.string.enable_demo_mode_button, + R.drawable.ic_openhab_appicon_340dp /* FIXME */, false); + } else if (hasWifiEnabled) { + args = buildArgs(context.getString(R.string.no_remote_server), + R.string.go_to_settings_button, R.string.try_again_button, + R.drawable.ic_network_strength_off_outline_black_24dp, false); + } else { + args = buildArgs(context.getString(R.string.no_remote_server), + R.string.go_to_settings_button, R.string.enable_wifi_button, + R.drawable.ic_wifi_strength_off_outline_black_24dp, false); + } + args.putBoolean(KEY_RESOLVE_ATTEMPTED, resolveAttempted); + args.putBoolean(KEY_WIFI_ENABLED, hasWifiEnabled); + f.setArguments(args); + return f; } @Override public void onClick(View view) { - Intent preferencesIntent = new Intent(getActivity(), PreferencesActivity.class); - TaskStackBuilder.create(getActivity()) - .addNextIntentWithParentStack(preferencesIntent) - .startActivities(); + if (view.getId() == R.id.button1) { + // Primary button always goes to settings + Intent preferencesIntent = new Intent(getActivity(), PreferencesActivity.class); + TaskStackBuilder.create(getActivity()) + .addNextIntentWithParentStack(preferencesIntent) + .startActivities(); + } else if (getArguments().getBoolean(KEY_RESOLVE_ATTEMPTED)) { + // If we attempted resolving, secondary button enables demo mode + PreferenceManager.getDefaultSharedPreferences(getContext()) + .edit() + .putBoolean(Constants.PREFERENCE_DEMOMODE, true) + .apply(); + } else if (getArguments().getBoolean(KEY_WIFI_ENABLED)) { + // If Wifi is enabled, secondary button suggests retrying + ConnectionFactory.restartNetworkCheck(); + getActivity().recreate(); + } else { + // If Wifi is disabled, secondary button suggests enabling Wifi + ((MainActivity) getActivity()).enableWifiAndIndicateStartup(); + } } } private abstract static class StatusFragment extends Fragment implements View.OnClickListener { - protected static Bundle buildArgs(CharSequence message, @DrawableRes int drawableResId, - @StringRes int buttonTextResId, boolean showProgress) { + protected static final String KEY_MESSAGE = "message"; + protected static final String KEY_DRAWABLE = "drawable"; + protected static final String KEY_BUTTON_1_TEXT = "button1text"; + protected static final String KEY_BUTTON_2_TEXT = "button2text"; + protected static final String KEY_PROGRESS = "progress"; + protected static final String KEY_RESOLVE_ATTEMPTED = "resolveAttempted"; + protected static final String KEY_WIFI_ENABLED = "wifiEnabled"; + + protected static Bundle buildArgs(CharSequence message, @StringRes int buttonTextResId, + @DrawableRes int drawableResId, boolean showProgress) { + return buildArgs(message, buttonTextResId, + 0, drawableResId, showProgress); + } + + protected static Bundle buildArgs(CharSequence message, + @StringRes int button1TextResId, @StringRes int button2TextResId, + @DrawableRes int drawableResId, boolean showProgress) { Bundle args = new Bundle(); - args.putCharSequence("message", message); - args.putInt("drawable", drawableResId); - args.putInt("buttontext", buttonTextResId); - args.putBoolean("progress", showProgress); + args.putCharSequence(KEY_MESSAGE, message); + args.putInt(KEY_DRAWABLE, drawableResId); + args.putInt(KEY_BUTTON_1_TEXT, button1TextResId); + args.putInt(KEY_BUTTON_2_TEXT, button2TextResId); + args.putBoolean(KEY_PROGRESS, showProgress); return args; } @Override - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { Bundle arguments = getArguments(); View view = inflater.inflate(R.layout.fragment_status, container, false); TextView descriptionText = view.findViewById(R.id.description); - CharSequence message = arguments.getCharSequence("message"); + CharSequence message = arguments.getCharSequence(KEY_MESSAGE); if (!TextUtils.isEmpty(message)) { descriptionText.setText(message); } else { @@ -632,10 +755,10 @@ public abstract class ContentController implements PageConnectionHolderFragment. } view.findViewById(R.id.progress).setVisibility( - arguments.getBoolean("progress") ? View.VISIBLE : View.GONE); + arguments.getBoolean(KEY_PROGRESS) ? View.VISIBLE : View.GONE); final ImageView watermark = view.findViewById(R.id.image); - @DrawableRes int drawableResId = arguments.getInt("drawable"); + @DrawableRes int drawableResId = arguments.getInt(KEY_DRAWABLE); if (drawableResId != 0) { Drawable drawable = ContextCompat.getDrawable(getActivity(), drawableResId); drawable.setColorFilter( @@ -646,16 +769,29 @@ public abstract class ContentController implements PageConnectionHolderFragment. watermark.setVisibility(View.GONE); } - final Button button = view.findViewById(R.id.button); - int buttonTextResId = arguments.getInt("buttontext"); + initButton(arguments, view, R.id.button1, KEY_BUTTON_1_TEXT); + initButton(arguments, view, R.id.button2, KEY_BUTTON_2_TEXT); + + return view; + } + + /** + * Set button text and tag or hide button. + * + * @return true if button is shown, false if not. + */ + private boolean initButton(Bundle arguments, View view, @IdRes int buttonId, + String titleKey) { + final Button button = view.findViewById(buttonId); + int buttonTextResId = arguments.getInt(titleKey); if (buttonTextResId != 0) { button.setText(buttonTextResId); button.setOnClickListener(this); + return true; } else { button.setVisibility(View.GONE); + return false; } - - return view; } } } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/activity/PageConnectionHolderFragment.java b/mobile/src/main/java/org/openhab/habdroid/ui/activity/PageConnectionHolderFragment.java index 855555e899bfc21d4e6e316e3a01e4bcf2153a7d..c0cf6e6682e60ea7d55899d16ea32f738b1c3a2b 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/activity/PageConnectionHolderFragment.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/activity/PageConnectionHolderFragment.java @@ -71,6 +71,13 @@ public class PageConnectionHolderFragment extends Fragment { */ String getIconFormat(); + /** + * Ask parent whether logging should include detailed output + * + * @return true if logging should be detailed + */ + boolean isDetailedLoggingEnabled(); + /** * Let parent know about an update to the widget list for a given URL. * @@ -87,6 +94,19 @@ public class PageConnectionHolderFragment extends Fragment { * @param widget Updated widget */ void onWidgetUpdated(String pageUrl, Widget widget); + + /** + * Let parent know about an update to the page title + * + * @param pageUrl URL of the page the updated title belongs to + * @param title Updated title + */ + void onPageTitleUpdated(String pageUrl, String title); + + /** + * Let parent know about a failure during the load of data. + */ + void onLoadFailure(String url, int statusCode, Throwable error); } private Map<String, ConnectionHandler> mConnections = new HashMap<>(); @@ -222,6 +242,8 @@ public class PageConnectionHolderFragment extends Fragment { if (segments.size() > 2) { String sitemap = segments.get(segments.size() - 2); String pageId = segments.get(segments.size() - 1); + Log.d(TAG, "Creating new SSE helper for sitemap " + sitemap + + ", page " + pageId); mEventHelper = new EventHelper(mHttpClient, sitemap, pageId, this::handleUpdateEvent, this::handleSseSubscriptionFailure); } @@ -262,7 +284,7 @@ public class PageConnectionHolderFragment extends Fragment { return; } - Log.d(TAG, "Loading data for " + mUrl); + Log.d(TAG, "Loading data for " + mUrl + ", long polling " + mLongPolling); Map<String, String> headers = new HashMap<>(); if (!mCallback.serverReturnsJson()) { headers.put("Accept", "application/xml"); @@ -293,7 +315,7 @@ public class PageConnectionHolderFragment extends Fragment { Log.d(TAG, "Data load for " + mUrl + " failed", error); mAtmosphereTrackingId = null; mLongPolling = false; - load(); + mCallback.onLoadFailure(request.url().toString(), statusCode, error); } @Override @@ -331,7 +353,13 @@ public class PageConnectionHolderFragment extends Fragment { widgetList.add(w); } - Log.d(TAG, "Updated page data for URL " + mUrl + ": widget list " + widgetList); + Log.d(TAG, "Updated page data for URL " + mUrl + + " (" + widgetList.size() + " widgets)"); + if (mCallback.isDetailedLoggingEnabled()) { + for (int i = 0; i < widgetList.size(); i++) { + Log.d(TAG, "Widget " + (i + 1) + ": " + widgetList.get(i)); + } + } mLastPageTitle = dataSource.getTitle(); mLastWidgetList = widgetList; mCallback.onPageUpdated(mUrl, mLastPageTitle, mLastWidgetList); @@ -380,13 +408,30 @@ public class PageConnectionHolderFragment extends Fragment { } } - boolean handleUpdateEvent(String payload) { + void handleUpdateEvent(String pageId, String payload) { if (mLastWidgetList == null) { - return false; + return; } try { JSONObject object = new JSONObject(payload); + + String eventType = object.optString("TYPE"); + if ("SITEMAP_CHANGED".equals(eventType)) { + Log.d(TAG, "Got SITEMAP_CHANGED event, reload sitemap"); + cancel(); + load(); + return; + } else if ("ALIVE".equals(eventType)) { + // We ignore 'server alive' events + Log.d(TAG, "Got ALIVE event"); + return; + } + String widgetId = object.getString("widgetId"); + if (TextUtils.equals(widgetId, pageId)) { + mCallback.onPageTitleUpdated(mUrl, object.getString("label")); + return; + } for (int i = 0; i < mLastWidgetList.size(); i++) { Widget widget = mLastWidgetList.get(i); if (widgetId.equals(widget.id())) { @@ -394,16 +439,23 @@ public class PageConnectionHolderFragment extends Fragment { object, mCallback.getIconFormat()); mLastWidgetList.set(i, updatedWidget); mCallback.onWidgetUpdated(mUrl, updatedWidget); - return true; + return; } } + + // We didn't find the widget, so the widget in question probably + // just became visible. Reload the page in that case. + if (object.optBoolean("visibility")) { + cancel(); + load(); + } } catch (JSONException e) { Log.w(TAG, "Could not parse SSE event ('" + payload + "')", e); } - return false; } void handleSseSubscriptionFailure() { + Log.w(TAG, "SSE processing failed for " + mUrl + ", using long polling"); mEventHelper = null; if (mLongPolling) { load(); @@ -416,7 +468,7 @@ public class PageConnectionHolderFragment extends Fragment { } interface UpdateCallback { - void handleUpdateEvent(String message); + void handleUpdateEvent(String pageId, String message); } private static final int MAX_RETRIES = 10; @@ -470,11 +522,7 @@ public class PageConnectionHolderFragment extends Fragment { .addQueryParameter("sitemap", mSitemap) .addQueryParameter("pageid", mPageId) .build(); - Request request = new Request.Builder() - .url(u) - .build(); - mEventStream = mClient.makeSseClient() - .newServerSentEvent(request, EventHelper.this); + mEventStream = mClient.makeSse(u, EventHelper.this); } catch (JSONException e) { Log.w(TAG, "Failed parsing SSE subscription", e); mFailureCb.handleFailure(); @@ -502,7 +550,7 @@ public class PageConnectionHolderFragment extends Fragment { @Override public void onMessage(ServerSentEvent sse, String id, String event, String message) { - mHandler.post(() -> mUpdateCb.handleUpdateEvent(message)); + mHandler.post(() -> mUpdateCb.handleUpdateEvent(mPageId, message)); } @Override @@ -517,13 +565,22 @@ public class PageConnectionHolderFragment extends Fragment { @Override public boolean onRetryError(ServerSentEvent sse, Throwable throwable, Response response) { + int statusCode = response != null ? response.code() : 0; + Log.w(TAG, "SSE stream failed for page " + mPageId + + " with status " + statusCode + " (retry " + mRetries + ")"); // Stop retrying after maximum amount of subsequent retries is reached return ++mRetries < MAX_RETRIES; } @Override public void onClosed(ServerSentEvent sse) { - mFailureCb.handleFailure(); + // We're only interested in permanent failure here, not in callbacks we caused + // ourselves by calling close(), so check for both + // - the reporter matching our expectations (mismatch means shutdown was called) + // - retry count exhaustion + if (mRetries >= MAX_RETRIES && sse == mEventStream) { + mFailureCb.handleFailure(); + } } @Override diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/activity/WebViewFragment.java b/mobile/src/main/java/org/openhab/habdroid/ui/activity/WebViewFragment.java new file mode 100644 index 0000000000000000000000000000000000000000..bf26fd75689b1d1b76b009e3bc98366071b16433 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/activity/WebViewFragment.java @@ -0,0 +1,199 @@ +package org.openhab.habdroid.ui.activity; + +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.RequiresApi; +import androidx.annotation.StringRes; +import androidx.fragment.app.Fragment; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.core.connection.CloudConnection; +import org.openhab.habdroid.core.connection.Connection; +import org.openhab.habdroid.core.connection.ConnectionFactory; +import org.openhab.habdroid.core.connection.exception.ConnectionException; +import org.openhab.habdroid.ui.AnchorWebViewClient; +import org.openhab.habdroid.util.Util; + +public class WebViewFragment extends Fragment implements ConnectionFactory.UpdateListener { + private static final String TAG = WebViewFragment.class.getSimpleName(); + + private static final String KEY_CURRENT_URL = "url"; + private static final String KEY_PAGE_TITLE = "page_title"; + private static final String KEY_ERROR = "error"; + private static final String KEY_URL_LOAD = "url_load"; + private static final String KEY_URL_ERROR = "url_error"; + + private String mUrltoLoad; + private String mUrlForError; + private Connection mConnection; + private WebView mWebView; + + public static WebViewFragment newInstance(@StringRes int pageTitle, + @StringRes int errorMessage, String urltoLoad, String urlForError) { + WebViewFragment f = new WebViewFragment(); + Bundle args = new Bundle(); + args.putInt(KEY_PAGE_TITLE, pageTitle); + args.putInt(KEY_ERROR, errorMessage); + args.putString(KEY_URL_LOAD, urltoLoad); + args.putString(KEY_URL_ERROR, urlForError); + f.setArguments(args); + return f; + } + + public @StringRes int getTitleResId() { + return getArguments().getInt(KEY_PAGE_TITLE); + } + + public boolean goBack() { + if (mWebView != null && mWebView.canGoBack()) { + mWebView.goBack(); + return true; + } + return false; + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.fragment_fullscreenwebview, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + Bundle args = getArguments(); + mUrltoLoad = args.getString(KEY_URL_LOAD); + mUrlForError = args.getString(KEY_URL_ERROR); + + TextView retryButton = view.findViewById(R.id.retry_button); + retryButton.setOnClickListener(v -> loadWebsite()); + TextView error = view.findViewById(R.id.empty_message); + error.setText(getString(args.getInt(KEY_ERROR))); + + if (savedInstanceState != null) { + loadWebsite(savedInstanceState.getString(KEY_CURRENT_URL, mUrltoLoad)); + } else { + loadWebsite(); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (mWebView != null) { + mWebView.destroy(); + mWebView = null; + } + } + + @Override + public void onResume() { + super.onResume(); + if (mWebView != null) { + mWebView.onResume(); + mWebView.resumeTimers(); + } + } + + @Override + public void onPause() { + super.onPause(); + if (mWebView != null) { + mWebView.onPause(); + mWebView.pauseTimers(); + } + } + + @Override + public void onSaveInstanceState(@NonNull Bundle outState) { + if (mWebView != null) { + outState.putString(KEY_CURRENT_URL, mWebView.getUrl()); + } + } + + private void loadWebsite() { + loadWebsite(mUrltoLoad); + } + + private void loadWebsite(String urlToLoad) { + View view = getView(); + if (view == null) { + return; + } + try { + mConnection = ConnectionFactory.getUsableConnection(); + } catch (ConnectionException e) { + updateViewVisibility(true, false); + return; + } + + if (mConnection == null) { + updateViewVisibility(true, false); + return; + } + updateViewVisibility(false, true); + + String url = mConnection.getAsyncHttpClient().buildUrl(urlToLoad).toString(); + + mWebView = view.findViewById(R.id.webview); + + mWebView.setWebViewClient(new AnchorWebViewClient(url, + mConnection.getUsername(), mConnection.getPassword()) { + @Override + public void onPageFinished(WebView view, String url) { + updateViewVisibility(false, false); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public void onReceivedError(WebView view, WebResourceRequest request, + WebResourceError error) { + String url = request.getUrl().toString(); + Log.e(TAG, "onReceivedError() on URL: " + url); + if (url.endsWith(mUrlForError)) { + updateViewVisibility(true, false); + } + } + + @Override + public void onReceivedError(WebView view, int errorCode, String description, + String failingUrl) { + Log.e(TAG, "onReceivedError() (deprecated) on URL: " + failingUrl); + updateViewVisibility(true, false); + } + }); + Util.initWebView(mWebView, mConnection, url); + mWebView.loadUrl(url); + mWebView.setBackgroundColor(Color.TRANSPARENT); + } + + private void updateViewVisibility(boolean error, boolean loading) { + View view = getView(); + if (view == null) { + return; + } + view.findViewById(R.id.webview).setVisibility(error ? View.GONE : View.VISIBLE); + view.findViewById(android.R.id.empty).setVisibility(error ? View.VISIBLE : View.GONE); + view.findViewById(R.id.progress).setVisibility(loading ? View.VISIBLE : View.GONE); + } + + @Override + public void onAvailableConnectionChanged() { + loadWebsite(); + } + + @Override + public void onCloudConnectionChanged(CloudConnection connection) { + // no-op + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/VoiceWidget.java b/mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidget.java similarity index 54% rename from mobile/src/main/java/org/openhab/habdroid/ui/VoiceWidget.java rename to mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidget.java index b6bb92ea15075681bfb80dcaeab70b723de112ea..5dac352f43291ee364ef2e49af5ac76eea940cfe 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/VoiceWidget.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidget.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html */ -package org.openhab.habdroid.ui; +package org.openhab.habdroid.ui.homescreenwidget; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; @@ -15,7 +15,9 @@ import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.speech.RecognizerIntent; +import android.util.Log; import android.widget.RemoteViews; +import androidx.annotation.LayoutRes; import org.openhab.habdroid.R; import org.openhab.habdroid.core.VoiceService; @@ -24,6 +26,8 @@ import org.openhab.habdroid.core.VoiceService; * Implementation of App Widget functionality. */ public class VoiceWidget extends AppWidgetProvider { + private static final String TAG = VoiceWidget.class.getSimpleName(); + @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // There may be multiple widgets active, so update all of them @@ -32,43 +36,40 @@ public class VoiceWidget extends AppWidgetProvider { } } - @Override - public void onEnabled(Context context) { - // Enter relevant functionality for when the first widget is created - } - - @Override - public void onDisabled(Context context) { - // Enter relevant functionality for when the last widget is disabled - } - - private void updateAppWidget(Context context, - AppWidgetManager appWidgetManager, int appWidgetId) { + private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, + int appWidgetId) { // Construct the RemoteViews object - RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_voice); + RemoteViews views = new RemoteViews(context.getPackageName(), getLayoutRes()); + Log.d(TAG, "Voice recognizer available, build speech intent"); Intent callbackIntent = new Intent(context, VoiceService.class); - PendingIntent callbackPendingIntent = PendingIntent.getService(context, + final PendingIntent callbackPendingIntent = PendingIntent.getService(context, 9, callbackIntent, 0); - Intent speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // Display an hint to the user about what he should say. - speechIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, + intent.putExtra(RecognizerIntent.EXTRA_PROMPT, context.getString(R.string.info_voice_input)); - speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, + intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); - speechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); - speechIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - speechIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, callbackPendingIntent); + intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, callbackPendingIntent); - PendingIntent speechPendingIntent = PendingIntent.getActivity(context, 6, speechIntent, 0); - views.setOnClickPendingIntent(R.id.btn_mic, speechPendingIntent); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 6, intent, 0); + views.setOnClickPendingIntent(R.id.outer_layout, pendingIntent); - Intent mainIntent = new Intent(context, MainActivity.class); - PendingIntent mainPendingIntent = PendingIntent.getActivity(context, 8, mainIntent, 0); - views.setOnClickPendingIntent(R.id.btn_open_main, mainPendingIntent); + setupOpenhabIcon(context, views); // Instruct the widget manager to update the widget appWidgetManager.updateAppWidget(appWidgetId, views); } + + void setupOpenhabIcon(Context context, RemoteViews views) { + // This widget has no openHAB icon displayed. + } + + @LayoutRes int getLayoutRes() { + return R.layout.widget_voice; + } } \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidgetWithIcon.java b/mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidgetWithIcon.java new file mode 100644 index 0000000000000000000000000000000000000000..66aea91c236a985af391ea987d5e5541ee658010 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/homescreenwidget/VoiceWidgetWithIcon.java @@ -0,0 +1,26 @@ +package org.openhab.habdroid.ui.homescreenwidget; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.widget.RemoteViews; +import androidx.annotation.LayoutRes; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.ui.MainActivity; + +public class VoiceWidgetWithIcon extends VoiceWidget { + private static final String TAG = VoiceWidgetWithIcon.class.getSimpleName(); + + @Override + void setupOpenhabIcon(Context context, RemoteViews views) { + Intent mainIntent = new Intent(context, MainActivity.class); + PendingIntent mainPendingIntent = PendingIntent.getActivity(context, 8, mainIntent, 0); + views.setOnClickPendingIntent(R.id.btn_open_main, mainPendingIntent); + } + + @Override + @LayoutRes int getLayoutRes() { + return R.layout.widget_voice_with_icon; + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/HelpIconShowingPreferenceUtil.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/HelpIconShowingPreferenceUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..fc1a28517d414061a3b7dd34be330a386842c958 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/HelpIconShowingPreferenceUtil.java @@ -0,0 +1,30 @@ +package org.openhab.habdroid.ui.widget; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.view.View; +import android.widget.ImageView; +import androidx.appcompat.widget.TooltipCompat; + +public class HelpIconShowingPreferenceUtil { + public static void setupHelpIcon(Context context, ImageView helpIcon, + String url, String contentDescription) { + final Uri howToUri = Uri.parse(url); + final Intent intent = new Intent(Intent.ACTION_VIEW, howToUri); + + if (intent.resolveActivity(context.getPackageManager()) != null) { + helpIcon.setOnClickListener(v -> context.startActivity(intent)); + helpIcon.setContentDescription(contentDescription); + TooltipCompat.setTooltipText(helpIcon, contentDescription); + } else { + helpIcon.setVisibility(View.GONE); + } + } + + public static void updateHelpIconAlpha(ImageView helpIcon, boolean isEnabled) { + if (helpIcon != null) { + helpIcon.setAlpha(isEnabled ? 1.0f : 0.5f); + } + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/ItemUpdatingPreference.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/ItemUpdatingPreference.java new file mode 100644 index 0000000000000000000000000000000000000000..70e22bebf22601db3b85186f28f45c1ef2e6f0cc --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/ItemUpdatingPreference.java @@ -0,0 +1,214 @@ +package org.openhab.habdroid.ui.widget; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.os.Bundle; +import android.preference.DialogPreference; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.AttributeSet; +import android.util.Pair; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.SwitchCompat; + +import com.google.android.material.textfield.TextInputLayout; +import org.openhab.habdroid.R; + +public class ItemUpdatingPreference extends DialogPreference implements + TextWatcher, SwitchCompat.OnCheckedChangeListener { + private String mHowtoHint; + private String mHowtoUrl; + private String mSummaryOn; + private String mSummaryOff; + private Pair<Boolean, String> mValue; + + private ImageView mHelpIcon; + private SwitchCompat mSwitch; + private TextInputLayout mEditorWrapper; + private EditText mEditor; + private Button mOkButton; + + public ItemUpdatingPreference(Context context, AttributeSet attrs) { + super(context, attrs); + if (attrs != null) { + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.ItemUpdatingPreference); + initAttributes(a); + a.recycle(); + } + } + + public ItemUpdatingPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + if (attrs != null) { + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.ItemUpdatingPreference); + initAttributes(a); + a.recycle(); + } + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public ItemUpdatingPreference(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + if (attrs != null) { + TypedArray a = context.obtainStyledAttributes(attrs, + R.styleable.ItemUpdatingPreference, defStyleAttr, defStyleRes); + initAttributes(a); + a.recycle(); + } + } + + private void initAttributes(TypedArray attrs) { + mHowtoHint = attrs.getString(R.styleable.ItemUpdatingPreference_helpHint); + mHowtoUrl = attrs.getString(R.styleable.ItemUpdatingPreference_helpUrl); + mSummaryOn = attrs.getString(R.styleable.ItemUpdatingPreference_summaryEnabled); + mSummaryOff = attrs.getString(R.styleable.ItemUpdatingPreference_summaryDisabled); + + setDialogTitle(null); + setPositiveButtonText(android.R.string.ok); + setNegativeButtonText(android.R.string.cancel); + } + + @Override + protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { + if (restorePersistedValue) { + mValue = parseValue(getPersistedString(null)); + } else { + mValue = (Pair<Boolean, String>) defaultValue; + // XXX: persist if not yet present + } + updateSummary(); + } + + @Override + protected Object onGetDefaultValue(TypedArray a, int index) { + return parseValue(a.getString(index)); + } + + @Override + protected View onCreateDialogView() { + LayoutInflater inflater = LayoutInflater.from(getContext()); + View v = inflater.inflate(R.layout.item_updating_pref_dialog, null); + + mSwitch = v.findViewById(R.id.enabled); + mSwitch.setOnCheckedChangeListener(this); + mEditor = v.findViewById(R.id.itemName); + mEditor.addTextChangedListener(this); + mEditorWrapper = v.findViewById(R.id.itemNameWrapper); + + TextView label = v.findViewById(R.id.enabledLabel); + label.setText(getTitle()); + + if (mValue != null) { + mSwitch.setChecked(mValue.first); + mEditor.setText(mValue.second); + } + + mHelpIcon = v.findViewById(R.id.help_icon); + HelpIconShowingPreferenceUtil.setupHelpIcon(getContext(), + mHelpIcon, mHowtoUrl, mHowtoHint); + + onCheckedChanged(mSwitch, mSwitch.isChecked()); + + return v; + } + + @Override + protected void showDialog(Bundle state) { + super.showDialog(state); + if (getDialog() instanceof AlertDialog) { + AlertDialog dialog = (AlertDialog) getDialog(); + mOkButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE); + } + updateOkButtonState(); + } + + @Override + protected void onDialogClosed(boolean positiveResult) { + super.onDialogClosed(positiveResult); + if (positiveResult) { + Pair<Boolean, String> newValue = Pair.create( + mSwitch.isChecked(), mEditor.getText().toString()); + if (callChangeListener(newValue)) { + if (shouldPersist()) { + String persistedValue = Boolean.valueOf(newValue.first) + + "|" + newValue.second; + persistString(persistedValue); + } + mValue = newValue; + updateSummary(); + } + } + } + + @Override + public void onCheckedChanged(CompoundButton button, boolean checked) { + mEditorWrapper.setEnabled(checked); + mEditorWrapper.setEnabled(checked); + HelpIconShowingPreferenceUtil.updateHelpIconAlpha(mHelpIcon, checked); + updateOkButtonState(); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + // no-op + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // no-op + } + + @Override + public void afterTextChanged(Editable s) { + String value = s.toString(); + boolean valid = true; + if (TextUtils.isEmpty(value.trim()) || value.contains(" ") || value.contains("\n")) { + mEditor.setError( + getContext().getString(R.string.error_sending_alarm_clock_item_empty)); + } else { + mEditor.setError(null); + } + updateOkButtonState(); + } + + private void updateOkButtonState() { + if (mEditor != null && mOkButton != null) { + mOkButton.setEnabled(!mEditor.isEnabled() || mEditor.getError() == null); + } + } + + private void updateSummary() { + if (mValue == null) { + return; + } + String summary = mValue.first ? mSummaryOn : mSummaryOff; + if (summary != null) { + setSummary(String.format(summary, mValue.second)); + } + } + + public static Pair<Boolean, String> parseValue(String value) { + if (value == null) { + return null; + } + int pos = value.indexOf('|'); + if (pos < 0) { + return null; + } + return Pair.create(Boolean.parseBoolean(value.substring(0, pos)), + value.substring(pos + 1)); + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/RecyclerViewSwipeRefreshLayout.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/RecyclerViewSwipeRefreshLayout.java new file mode 100644 index 0000000000000000000000000000000000000000..3a616568e958a55b4f487cd447cc27d97f422b93 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/RecyclerViewSwipeRefreshLayout.java @@ -0,0 +1,142 @@ +package org.openhab.habdroid.ui.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import androidx.core.view.NestedScrollingChildHelper; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +public class RecyclerViewSwipeRefreshLayout extends SwipeRefreshLayout { + private final int mTouchSlop; + private float mDownX; + private float mDownY; + private boolean mChildScrollableOnDown; + private final int[] mParentOffsetInWindow = new int[2]; + private final NestedScrollingChildHelper mNestedScrollingChildHelper; + private boolean mHorizontalSwipe; + private boolean mIsOrWasUpSwipe; + private RecyclerView mRecyclerView; + + + public RecyclerViewSwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + mNestedScrollingChildHelper = new NestedScrollingChildHelper(this); + setNestedScrollingEnabled(true); + } + + public void setRecyclerView(RecyclerView view) { + mRecyclerView = view; + } + + @Override + public boolean canChildScrollUp() { + if (mRecyclerView != null) { + return mRecyclerView.canScrollVertically(-1); + } + return super.canChildScrollUp(); + } + + @Override + public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) { + return false; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (event.getAction() != MotionEvent.ACTION_DOWN && shouldPreventRefresh()) { + return false; + } + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mDownX = event.getX(); + mDownY = event.getY(); + mHorizontalSwipe = false; + mIsOrWasUpSwipe = false; + mChildScrollableOnDown = canChildScrollUp(); + break; + case MotionEvent.ACTION_MOVE: + final float xDiff = Math.abs(event.getX() - mDownX); + final float yDiff = event.getY() - mDownY; + + if (yDiff < -mTouchSlop) { + mIsOrWasUpSwipe = true; + } + if (mHorizontalSwipe || xDiff > mTouchSlop) { + mHorizontalSwipe = true; + return false; + } + break; + } + + return super.onInterceptTouchEvent(event); + } + + @Override + public void setNestedScrollingEnabled(boolean enabled) { + if (mNestedScrollingChildHelper != null) { + mNestedScrollingChildHelper.setNestedScrollingEnabled(enabled); + } + } + + @Override + public boolean isNestedScrollingEnabled() { + return mNestedScrollingChildHelper.isNestedScrollingEnabled(); + } + + @Override + public boolean startNestedScroll(int axes) { + return mNestedScrollingChildHelper.startNestedScroll(axes); + } + + @Override + public void stopNestedScroll() { + mNestedScrollingChildHelper.stopNestedScroll(); + } + + @Override + public boolean hasNestedScrollingParent() { + return mNestedScrollingChildHelper.hasNestedScrollingParent(); + } + + @Override + public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, + int dyUnconsumed, int[] offsetInWindow) { + return mNestedScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, + dxUnconsumed, dyUnconsumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { + return mNestedScrollingChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { + return mNestedScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); + } + + @Override + public boolean dispatchNestedPreFling(float velocityX, float velocityY) { + return mNestedScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY); + } + + @Override + public void onNestedScroll(final View target, final int dxConsumed, final int dyConsumed, + final int dxUnconsumed, final int dyUnconsumed) { + if (shouldPreventRefresh()) { + dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, + mParentOffsetInWindow); + } else { + super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); + } + } + + private boolean shouldPreventRefresh() { + return mChildScrollableOnDown || mIsOrWasUpSwipe; + } +} \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/SegmentedControlButton.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/SegmentedControlButton.java index d721dbb2ea27641c281fd0ba2b713715db2b4f5d..97fe9a71cc50af75467ad94e0e98f224f831f5af 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/widget/SegmentedControlButton.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/SegmentedControlButton.java @@ -23,6 +23,8 @@ import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.drawable.Drawable; import android.util.AttributeSet; +import androidx.annotation.ColorInt; +import androidx.annotation.IdRes; import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.widget.AppCompatRadioButton; @@ -31,9 +33,6 @@ import org.openhab.habdroid.R; /** @author benjamin ferrari */ public class SegmentedControlButton extends AppCompatRadioButton { private int mLineHeight; - - private float mX; - private int mTextDistanceFromLine; private Paint mTextPaint; @@ -54,9 +53,8 @@ public class SegmentedControlButton extends AppCompatRadioButton { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SegmentedControlButton); - int lineColor = a.getColor(R.styleable.SegmentedControlButton_lineColor, 0); mLineHeight = a.getDimensionPixelSize( - R.styleable.SegmentedControlButton_lineHeight, 0); + R.styleable.SegmentedControlButton_underlineHeight, 0); mTextDistanceFromLine = a.getDimensionPixelSize( R.styleable.SegmentedControlButton_textDistanceFromLine, 0); @@ -65,11 +63,13 @@ public class SegmentedControlButton extends AppCompatRadioButton { mTextPaint.setTextSize(getTextSize()); mTextPaint.setTextAlign(Paint.Align.CENTER); + @ColorInt int lineColor = + a.getColor(R.styleable.SegmentedControlButton_underlineColor, 0); mLinePaint = new Paint(); mLinePaint.setColor(lineColor); mLinePaint.setStyle(Style.FILL); - int bgColorResId = a.getResourceId( + @IdRes int bgColorResId = a.getResourceId( R.styleable.SegmentedControlButton_backgroundColor, 0); if (bgColorResId != 0) { mBackgroundColorList = @@ -85,8 +85,11 @@ public class SegmentedControlButton extends AppCompatRadioButton { protected void drawableStateChanged() { super.drawableStateChanged(); if (mBackgroundColorList != null) { - mBackgroundPaint.setColor( - mBackgroundColorList.getColorForState(getDrawableState(), 0)); + @ColorInt int newColor = mBackgroundColorList.getColorForState(getDrawableState(), 0); + if (newColor != mBackgroundPaint.getColor()) { + mBackgroundPaint.setColor(newColor); + invalidate(); + } } } @@ -96,11 +99,12 @@ public class SegmentedControlButton extends AppCompatRadioButton { } @Override - public void onDraw(Canvas canvas) { - String text = getText().toString(); - int textHeightPos = getHeight() - mLineHeight - mTextDistanceFromLine; - float x = mX; + public int getCompoundPaddingBottom() { + return Math.max(super.getCompoundPaddingBottom(), mLineHeight + mTextDistanceFromLine); + } + @Override + public void onDraw(Canvas canvas) { if (mBackgroundPaint != null) { canvas.drawRect(0, 0, getWidth(), getHeight(), mBackgroundPaint); } @@ -111,17 +115,14 @@ public class SegmentedControlButton extends AppCompatRadioButton { background.draw(canvas); } + String text = getText().toString(); + int textHeightPos = getHeight() - getCompoundPaddingBottom(); + mTextPaint.setColor(getCurrentTextColor()); - canvas.drawText(text, x, textHeightPos, mTextPaint); + canvas.drawText(text, getWidth() / 2, textHeightPos, mTextPaint); if (mLineHeight > 0) { canvas.drawRect(0, getHeight() - mLineHeight, getWidth(), getHeight(), mLinePaint); } } - - @Override - protected void onSizeChanged(int w, int h, int ow, int oh) { - super.onSizeChanged(w, h, ow, oh); - mX = w * 0.5f; // remember the center of the screen - } } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/SslClientCertificatePreference.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/SslClientCertificatePreference.java index e56d91ba1f30151b9563ef9999bc43913ade9d88..588950f912bf0d92af6f04d8e195efbf17247ea2 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/widget/SslClientCertificatePreference.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/SslClientCertificatePreference.java @@ -3,8 +3,6 @@ package org.openhab.habdroid.ui.widget; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; -import android.content.Intent; -import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.preference.Preference; @@ -16,7 +14,6 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import androidx.appcompat.widget.TooltipCompat; import org.openhab.habdroid.R; @@ -47,7 +44,7 @@ public class SslClientCertificatePreference extends Preference { private void init(Context context) { assert context instanceof Activity; mActivity = (Activity) context; - setWidgetLayoutResource(R.layout.ssl_client_cert_pref); + setWidgetLayoutResource(R.layout.help_icon_pref); } @Override @@ -55,20 +52,10 @@ public class SslClientCertificatePreference extends Preference { View view = super.onCreateView(parent); mHelpIcon = view.findViewById(R.id.help_icon); - - final Context context = getContext(); - final Uri howToUri = Uri.parse( - context.getString(R.string.settings_openhab_sslclientcert_howto_url)); - final Intent intent = new Intent(Intent.ACTION_VIEW, howToUri); - - if (intent.resolveActivity(context.getPackageManager()) != null) { - mHelpIcon.setOnClickListener(v -> context.startActivity(intent)); - TooltipCompat.setTooltipText(mHelpIcon, - context.getString(R.string.settings_openhab_sslclientcert_howto_summary)); - updateHelpIconAlpha(); - } else { - mHelpIcon.setVisibility(View.GONE); - } + HelpIconShowingPreferenceUtil.setupHelpIcon(getContext(), mHelpIcon, + getContext().getString(R.string.settings_openhab_sslclientcert_howto_url), + getContext().getString(R.string.settings_openhab_sslclientcert_howto_summary)); + HelpIconShowingPreferenceUtil.updateHelpIconAlpha(mHelpIcon, isEnabled()); return view; } @@ -91,13 +78,7 @@ public class SslClientCertificatePreference extends Preference { @Override public void onDependencyChanged(Preference dependency, boolean disableDependent) { super.onDependencyChanged(dependency, disableDependent); - updateHelpIconAlpha(); - } - - private void updateHelpIconAlpha() { - if (mHelpIcon != null) { - mHelpIcon.setAlpha(isEnabled() ? 1.0f : 0.5f); - } + HelpIconShowingPreferenceUtil.updateHelpIconAlpha(mHelpIcon, isEnabled()); } private void handleAliasChosen(String alias) { diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/UrlInputPreference.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/UrlInputPreference.java index 38879342511d9f7260c42059088913a72aff8207..1618d7f8da202d8fad21c5c76aa9ff7d3d5712e9 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/widget/UrlInputPreference.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/UrlInputPreference.java @@ -11,6 +11,7 @@ import android.util.AttributeSet; import android.view.View; import android.widget.Button; import android.widget.EditText; +import androidx.annotation.StringRes; import org.openhab.habdroid.R; @@ -56,23 +57,35 @@ public class UrlInputPreference extends EditTextPreference implements TextWatche @Override public void afterTextChanged(Editable editable) { + boolean portSeemsInvalid = false; if (TextUtils.isEmpty(editable)) { mUrlIsValid = true; } else { - String url = editable.toString(); - if (url.contains("\n") || url.contains(" ")) { + String value = editable.toString(); + if (value.contains("\n") || value.contains(" ")) { mUrlIsValid = false; } else { try { - new URL(url); + URL url = new URL(value); mUrlIsValid = true; + if (url.getProtocol().equals("http")) { + portSeemsInvalid = url.getPort() == 443 || url.getPort() == 8443; + } + if (url.getProtocol().equals("https")) { + portSeemsInvalid = url.getPort() == 80 || url.getPort() == 8080; + } } catch (MalformedURLException e) { mUrlIsValid = false; } } } - mEditor.setError(mUrlIsValid - ? null : mEditor.getResources().getString(R.string.error_invalid_url)); + @StringRes int error = 0; + if (!mUrlIsValid) { + error = R.string.error_invalid_url; + } else if (portSeemsInvalid) { + error = R.string.error_port_seems_invalid; + } + mEditor.setError(error == 0 ? null : mEditor.getResources().getString(error)); updateOkButtonState(); } diff --git a/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java b/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java index 683c7dcb593c790f7008ae256d40c72a3136671d..7ecff3a05ca4e060fcf760fb1cc285c15e016cd9 100644 --- a/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java +++ b/mobile/src/main/java/org/openhab/habdroid/ui/widget/WidgetImageView.java @@ -87,24 +87,23 @@ public class WidgetImageView extends AppCompatImageView { a.recycle(); } - mDefaultSvgSize = - context.getResources().getDimensionPixelSize(R.dimen.svg_image_default_size); + mDefaultSvgSize = context.getResources().getDimensionPixelSize(R.dimen.svg_image_default_size); mRefreshHandler = new RefreshHandler(this); } - public void setImageUrl(Connection connection, String url) { - setImageUrl(connection, url, false); + public void setImageUrl(Connection connection, String url, Integer size) { + setImageUrl(connection, url, size, false); } - public void setImageUrl(Connection connection, String url, long timeoutMillis) { - setImageUrl(connection, url, timeoutMillis, false); + public void setImageUrl(Connection connection, String url, Integer size, long timeoutMillis) { + setImageUrl(connection, url, size, timeoutMillis, false); } - public void setImageUrl(Connection connection, String url, boolean forceLoad) { - setImageUrl(connection, url, AsyncHttpClient.DEFAULT_TIMEOUT_MS, forceLoad); + public void setImageUrl(Connection connection, String url, Integer size, boolean forceLoad) { + setImageUrl(connection, url, size, AsyncHttpClient.DEFAULT_TIMEOUT_MS, forceLoad); } - public void setImageUrl(Connection connection, String url, + public void setImageUrl(Connection connection, String url, Integer size, long timeoutMillis, boolean forceLoad) { AsyncHttpClient client = connection.getAsyncHttpClient(); HttpUrl actualUrl = client.buildUrl(url); @@ -124,7 +123,11 @@ public class WidgetImageView extends AppCompatImageView { Bitmap cached = CacheManager.getInstance(getContext()).getCachedBitmap(actualUrl); - mLastRequest = new HttpImageRequest(client, actualUrl, timeoutMillis); + if (size == null) { + size = mDefaultSvgSize; + } + + mLastRequest = new HttpImageRequest(size, client, actualUrl, timeoutMillis); if (cached != null) { setBitmapInternal(cached); @@ -269,8 +272,8 @@ public class WidgetImageView extends AppCompatImageView { private final long mTimeoutMillis; private Call mCall; - public HttpImageRequest(AsyncHttpClient client, HttpUrl url, long timeoutMillis) { - super(mDefaultSvgSize); + public HttpImageRequest(int size, AsyncHttpClient client, HttpUrl url, long timeoutMillis) { + super(size, false); mClient = client; mUrl = url; mTimeoutMillis = timeoutMillis; @@ -292,7 +295,7 @@ public class WidgetImageView extends AppCompatImageView { } public void execute(boolean avoidCache) { - Log.i(TAG, "Refreshing image at " + mUrl); + Log.i(TAG, "Refreshing image at " + mUrl + ", avoidCache " + avoidCache); HttpClient.CachingMode cachingMode = avoidCache ? HttpClient.CachingMode.AVOID_CACHE : HttpClient.CachingMode.FORCE_CACHE_IF_POSSIBLE; diff --git a/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java index a0815183cbb70cbbe9bc5e5a769655472f9a2616..84ae662e5818dec6bb03a753078b0fd354db5f88 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/AsyncHttpClient.java @@ -10,28 +10,19 @@ package org.openhab.habdroid.util; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.RectF; import android.os.Handler; import android.os.Looper; import androidx.annotation.NonNull; -import com.caverock.androidsvg.SVG; -import com.caverock.androidsvg.SVGParseException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.Headers; -import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; import java.io.IOException; -import java.io.InputStream; import java.util.Map; public class AsyncHttpClient extends HttpClient { @@ -50,49 +41,17 @@ public class AsyncHttpClient extends HttpClient { } public abstract static class BitmapResponseHandler implements ResponseHandler<Bitmap> { - private final int mDefaultSize; + private final int mSize; + private final boolean mEnforceSize; - public BitmapResponseHandler(int defaultSizePx) { - mDefaultSize = defaultSizePx; + public BitmapResponseHandler(int sizePx, boolean enforceSize) { + mSize = sizePx; + mEnforceSize = enforceSize; } @Override public Bitmap convertBodyInBackground(ResponseBody body) throws IOException { - MediaType contentType = body.contentType(); - boolean isSvg = contentType != null - && contentType.type().equals("image") - && contentType.subtype().contains("svg"); - InputStream is = body.byteStream(); - if (isSvg) { - try { - return getBitmapFromSvgInputstream(is); - } catch (SVGParseException e) { - throw new IOException("SVG decoding failed", e); - } - } else { - Bitmap bitmap = BitmapFactory.decodeStream(is); - if (bitmap != null) { - return bitmap; - } - throw new IOException("Bitmap decoding failed"); - } - } - - private Bitmap getBitmapFromSvgInputstream(InputStream is) throws SVGParseException { - SVG svg = SVG.getFromInputStream(is); - RectF viewBox = svg.getDocumentViewBox(); - double width = viewBox != null ? viewBox.width() : mDefaultSize; - double height = viewBox != null ? viewBox.height() : mDefaultSize; - - svg.setDocumentHeight("100%"); - svg.setDocumentWidth("100%"); - - Bitmap bitmap = Bitmap.createBitmap( - (int) Math.ceil(width), (int) Math.ceil(height), Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); - svg.renderToCanvas(canvas); - return bitmap; + return getBitmapFromResponseBody(body, mSize, mEnforceSize); } } diff --git a/mobile/src/main/java/org/openhab/habdroid/util/Constants.java b/mobile/src/main/java/org/openhab/habdroid/util/Constants.java index 9ee7d48e74778d2206b17ea02df8eae7529e14f5..edffd632cfedc2df0d622f240ecdb19aade0f29c 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/Constants.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/Constants.java @@ -21,23 +21,32 @@ public class Constants { public static final String PREFERENCE_LOCAL_URL = "default_openhab_url"; public static final String PREFERENCE_OPENLICHT_URL = "default_openlicht_url"; public static final String PREFERENCE_THEME = "default_openhab_theme"; - public static final String PREFERENCE_ANIMATION = "default_openhab_animation"; public static final String PREFERENCE_DEMOMODE = "default_openhab_demomode"; public static final String PREFERENCE_FULLSCREEN = "default_openhab_fullscreen"; public static final String PREFERENCE_TONE = "default_openhab_alertringtone"; public static final String PREFERENCE_NOTIFICATION_VIBRATION = "default_openhab_notification_vibration"; + public static final String PREFERENCE_NOTIFICATION_TONE_VIBRATION = + "default_openhab_alertringtone_vibration"; public static final String PREFERENCE_CLEAR_CACHE = "default_openhab_cleacache"; public static final String PREFERENCE_SSLCLIENTCERT = "default_openhab_sslclientcert"; public static final String PREFERENCE_DEBUG_MESSAGES = "default_openhab_debug_messages"; + public static final String PREFERENCE_LOG = "default_openhab_log"; public static final String PREFERENCE_CLEAR_DEFAULT_SITEMAP = "default_openhab_clear_default_sitemap"; public static final String PREFERENCE_COMPAREABLEVERSION = "versionAsInt"; public static final String PREFERENCE_FIRST_START = "firstStart"; public static final String PREFERENCE_SWIPE_REFRESH_EXPLAINED = "swipToRefreshExplained"; public static final String PREFERENCE_CHART_SCALING = "chartScalingFactor"; + public static final String PREFERENCE_CHART_HQ = "default_openhab_chart_hq"; public static final String PREFERENCE_ICON_FORMAT = "iconFormatType"; + public static final String PREFERENCE_ALARM_CLOCK = "alarmClock"; + public static final String PREFERENCE_SEND_DEVICE_INFO_PREFIX = "sendDeviceInfoPrefix"; + public static final String PREFERENCE_SEND_DEVICE_INFO_CAT = "sendDeviceInfoCat"; + public static final String PREFERENCE_TASKER_PLUGIN_ENABLED = "taskerPlugin"; + + public static final String PREV_SERVER_FLAGS = "prevServerFlags"; public static final String SUBSCREEN_LOCAL_CONNECTION = "default_openhab_local_connection"; public static final String SUBSCREEN_REMOTE_CONNECTION = "default_openhab_remote_connection"; -} \ No newline at end of file +} diff --git a/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java index 82e85629d9abdd3676493b1c59cde711df767527..3996cf806600c5cdaee26c7f2bae96155bf3fd2b 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/HttpClient.java @@ -9,9 +9,17 @@ package org.openhab.habdroid.util; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.util.DisplayMetrics; import androidx.annotation.VisibleForTesting; +import com.caverock.androidsvg.SVG; +import com.caverock.androidsvg.SVGParseException; import com.here.oksse.OkSse; +import com.here.oksse.ServerSentEvent; import okhttp3.CacheControl; import okhttp3.Call; import okhttp3.Credentials; @@ -20,7 +28,10 @@ import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import java.io.IOException; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -45,8 +56,15 @@ public abstract class HttpClient { mClient = client; } - public OkSse makeSseClient() { - return new OkSse(mClient); + public ServerSentEvent makeSse(HttpUrl url, ServerSentEvent.Listener listener) { + Request request = makeAuthenticatedRequestBuilder() + .url(url) + .build(); + OkHttpClient client = mClient.newBuilder() + .readTimeout(0, TimeUnit.SECONDS) + .retryOnConnectionFailure(true) + .build(); + return new OkSse(client).newServerSentEvent(request, listener); } public HttpUrl buildUrl(String url) { @@ -66,12 +84,8 @@ public abstract class HttpClient { protected Call prepareCall(String url, String method, Map<String, String> additionalHeaders, String requestBody, String mediaType, long timeoutMillis, CachingMode caching) { - Request.Builder requestBuilder = new Request.Builder(); - requestBuilder.url(buildUrl(url)); - requestBuilder.addHeader("User-Agent", "openHAB client for Android"); - if (mAuthHeader != null) { - requestBuilder.addHeader("Authorization", mAuthHeader); - } + Request.Builder requestBuilder = makeAuthenticatedRequestBuilder() + .url(buildUrl(url)); if (additionalHeaders != null) { for (Map.Entry<String, String> entry : additionalHeaders.entrySet()) { requestBuilder.addHeader(entry.getKey(), entry.getValue()); @@ -98,4 +112,87 @@ public abstract class HttpClient { : mClient; return client.newCall(request); } + + private Request.Builder makeAuthenticatedRequestBuilder() { + Request.Builder builder = new Request.Builder() + .addHeader("User-Agent", "openHAB client for Android"); + if (mAuthHeader != null) { + builder.addHeader("Authorization", mAuthHeader); + } + return builder; + } + + protected static Bitmap getBitmapFromResponseBody(ResponseBody body, + int size, boolean enforceSize) throws IOException { + MediaType contentType = body.contentType(); + boolean isSvg = contentType != null + && contentType.type().equals("image") + && contentType.subtype().contains("svg"); + InputStream is = body.byteStream(); + if (isSvg) { + try { + return getBitmapFromSvgInputstream(Resources.getSystem(), is, size); + } catch (SVGParseException e) { + throw new IOException("SVG decoding failed", e); + } + } else { + Bitmap bitmap = BitmapFactory.decodeStream(is); + if (bitmap != null) { + return enforceSize + ? Bitmap.createScaledBitmap(bitmap, size, size, false) + : bitmap; + } + throw new IOException("Bitmap decoding failed"); + } + } + + private static Bitmap getBitmapFromSvgInputstream(Resources res, InputStream is, int size) + throws SVGParseException { + SVG svg = SVG.getFromInputStream(is); + svg.setRenderDPI(DisplayMetrics.DENSITY_DEFAULT); + Float density = res.getDisplayMetrics().density; + svg.setDocumentHeight("100%"); + svg.setDocumentWidth("100%"); + int docWidth = (int) (svg.getDocumentWidth() * density); + int docHeight = (int) (svg.getDocumentHeight() * density); + if (docWidth < 0 || docHeight < 0) { + float aspectRatio = svg.getDocumentAspectRatio(); + if (aspectRatio > 0) { + float heightForAspect = (float) size / aspectRatio; + float widthForAspect = (float) size * aspectRatio; + if (widthForAspect < heightForAspect) { + docWidth = Math.round(widthForAspect); + docHeight = size; + } else { + docWidth = size; + docHeight = Math.round(heightForAspect); + } + } else { + docWidth = size; + docHeight = size; + } + + // we didn't take density into account anymore when calculating docWidth + // and docHeight, so don't scale with it and just let the renderer + // figure out the scaling + density = null; + } + + if (docWidth != size || docHeight != size) { + float scaleWidth = (float) size / docWidth; + float scaleHeigth = (float) size / docHeight; + density = (scaleWidth + scaleHeigth) / 2; + + docWidth = size; + docHeight = size; + } + + Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + if (density != null) { + canvas.scale(density, density); + } + svg.renderToCanvas(canvas); + return bitmap; + } } diff --git a/mobile/src/main/java/org/openhab/habdroid/util/MjpegInputStream.java b/mobile/src/main/java/org/openhab/habdroid/util/MjpegInputStream.java index 7721b3d808b983fe71951b586c94a1f44064263a..face5ea01f0ec203f57e4cb50b1ede63f394573d 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/MjpegInputStream.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/MjpegInputStream.java @@ -63,6 +63,10 @@ public class MjpegInputStream extends DataInputStream { int headerLen = getStartOfSequence(this, SOI_MARKER); reset(); + if (headerLen < 0) { + return null; + } + byte[] header = new byte[headerLen]; readFully(header); @@ -76,6 +80,10 @@ public class MjpegInputStream extends DataInputStream { reset(); skipBytes(headerLen); + if (contentLength < 0) { + return null; + } + byte[] frameData = new byte[contentLength]; readFully(frameData); diff --git a/mobile/src/main/java/org/openhab/habdroid/util/SuggestedCommandsFactory.java b/mobile/src/main/java/org/openhab/habdroid/util/SuggestedCommandsFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8e888178f25c32bd2b190b1f8906101e78455674 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/util/SuggestedCommandsFactory.java @@ -0,0 +1,174 @@ +package org.openhab.habdroid.util; + +import android.content.Context; +import android.text.InputType; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; + +import org.openhab.habdroid.R; +import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.model.LabeledValue; +import org.openhab.habdroid.model.ParsedState; +import org.openhab.habdroid.model.Widget; + +import java.util.ArrayList; +import java.util.List; + +public class SuggestedCommandsFactory { + private static final int INPUT_TYPE_DECIMAL_NUMBER = InputType.TYPE_CLASS_NUMBER + | InputType.TYPE_NUMBER_FLAG_DECIMAL; + private static final int INPUT_TYPE_SINGED_DECIMAL_NUMBER = INPUT_TYPE_DECIMAL_NUMBER + | InputType.TYPE_NUMBER_FLAG_SIGNED; + private Context mContext; + private boolean mShowUndef; + + public SuggestedCommandsFactory(Context context, boolean showUndef) { + mContext = context; + mShowUndef = showUndef; + } + + public SuggestedCommands fill(@Nullable Widget widget) { + SuggestedCommands suggestedCommands = new SuggestedCommands(); + if (widget == null || widget.item() == null) { + return suggestedCommands; + } + + if (widget.hasMappingsOrItemOptions()) { + for (LabeledValue mapping : widget.getMappingsOrItemOptions()) { + add(suggestedCommands, mapping.value(), mapping.label()); + } + } + + if (widget.type() == Widget.Type.Setpoint || widget.type() == Widget.Type.Slider) { + if (widget.state() != null && widget.state().asNumber() != null) { + ParsedState.NumberState state = widget.state().asNumber(); + add(suggestedCommands, state.toString()); + add(suggestedCommands, ParsedState.NumberState.withValue(state, + widget.minValue()).toString()); + add(suggestedCommands, ParsedState.NumberState.withValue(state, + widget.maxValue()).toString()); + if (widget.switchSupport()) { + addOnOffCommands(suggestedCommands); + } + } + } + + return fill(widget.item(), suggestedCommands); + } + + public SuggestedCommands fill(@Nullable Item item) { + return fill(item, null); + } + + private SuggestedCommands fill(@Nullable Item item, SuggestedCommands suggestedCommands) { + if (suggestedCommands == null) { + suggestedCommands = new SuggestedCommands(); + } + if (item == null) { + return suggestedCommands; + } + + if (item.isOfTypeOrGroupType(Item.Type.Color)) { + addOnOffCommands(suggestedCommands); + addIncreaseDecreaseCommands(suggestedCommands); + if (item.state() != null) { + add(suggestedCommands, item.state().asString(), R.string.nfc_action_current_color); + } + addCommonPercentCommands(suggestedCommands); + } else if (item.isOfTypeOrGroupType(Item.Type.Contact)) { + // Contact items cannot receive commands + suggestedCommands.shouldShowCustom = false; + } else if (item.isOfTypeOrGroupType(Item.Type.Dimmer)) { + addOnOffCommands(suggestedCommands); + addIncreaseDecreaseCommands(suggestedCommands); + addCommonPercentCommands(suggestedCommands); + suggestedCommands.inputTypeFlags = INPUT_TYPE_SINGED_DECIMAL_NUMBER; + } else if (item.isOfTypeOrGroupType(Item.Type.Number)) { + // Don't suggest numbers that might be totally out of context if there's already + // at least one command + if (suggestedCommands.commands.isEmpty()) { + addCommonNumberCommands(suggestedCommands); + } + suggestedCommands.inputTypeFlags = INPUT_TYPE_SINGED_DECIMAL_NUMBER; + } else if (item.isOfTypeOrGroupType(Item.Type.NumberWithDimension)) { + if (item.state() != null && item.state().asNumber() != null) { + add(suggestedCommands, item.state().asNumber().toString()); + } + } else if (item.isOfTypeOrGroupType(Item.Type.Player)) { + add(suggestedCommands, "PLAY", R.string.nfc_action_play); + add(suggestedCommands, "PAUSE", R.string.nfc_action_pause); + add(suggestedCommands, "NEXT", R.string.nfc_action_next); + add(suggestedCommands, "PREVIOUS", R.string.nfc_action_previous); + add(suggestedCommands, "REWIND", R.string.nfc_action_rewind); + add(suggestedCommands, "FASTFORWARD", R.string.nfc_action_fastforward); + suggestedCommands.shouldShowCustom = false; + } else if (item.isOfTypeOrGroupType(Item.Type.Rollershutter)) { + add(suggestedCommands, "UP", R.string.nfc_action_up); + add(suggestedCommands, "DOWN", R.string.nfc_action_down); + add(suggestedCommands, "TOGGLE", R.string.nfc_action_toggle); + add(suggestedCommands, "MOVE", R.string.nfc_action_move); + add(suggestedCommands, "STOP", R.string.nfc_action_stop); + addCommonPercentCommands(suggestedCommands); + suggestedCommands.inputTypeFlags = INPUT_TYPE_DECIMAL_NUMBER; + } else if (item.isOfTypeOrGroupType(Item.Type.StringItem)) { + if (mShowUndef) { + add(suggestedCommands, "", R.string.nfc_action_empty_string); + add(suggestedCommands, "UNDEF", R.string.nfc_action_undefined); + } + } else if (item.isOfTypeOrGroupType(Item.Type.Switch)) { + addOnOffCommands(suggestedCommands); + suggestedCommands.shouldShowCustom = false; + } else { + if (mShowUndef) { + add(suggestedCommands, "UNDEF", R.string.nfc_action_undefined); + } + } + + return suggestedCommands; + } + + private void add(SuggestedCommands suggestedCommands, String commandAndLabel) { + add(suggestedCommands, commandAndLabel, commandAndLabel); + } + + private void add(SuggestedCommands suggestedCommands, String command, @StringRes int label) { + add(suggestedCommands, command, mContext.getString(label)); + } + + private void add(SuggestedCommands suggestedCommands, String command, String label) { + if (!suggestedCommands.commands.contains(command)) { + suggestedCommands.commands.add(command); + suggestedCommands.labels.add(label); + } + } + + private void addCommonNumberCommands(SuggestedCommands suggestedCommands) { + for (String command : new String[]{"0", "33", "50", "66", "100"}) { + add(suggestedCommands, command); + } + } + + private void addCommonPercentCommands(SuggestedCommands suggestedCommands) { + for (String command : new String[]{"0", "33", "50", "66", "100"}) { + add(suggestedCommands, command, String.format("%s %%", command)); + } + } + + private void addOnOffCommands(SuggestedCommands suggestedCommands) { + add(suggestedCommands, "ON", R.string.nfc_action_on); + add(suggestedCommands, "OFF", R.string.nfc_action_off); + add(suggestedCommands, "TOGGLE", R.string.nfc_action_toggle); + } + + private void addIncreaseDecreaseCommands(SuggestedCommands suggestedCommands) { + add(suggestedCommands, "INCREASE", R.string.nfc_action_increase); + add(suggestedCommands, "DECREASE", R.string.nfc_action_decrease); + } + + public class SuggestedCommands { + public List<String> commands = new ArrayList<>(); + public List<String> labels = new ArrayList<>(); + public boolean shouldShowCustom = true; + public int inputTypeFlags = InputType.TYPE_CLASS_TEXT; + } +} diff --git a/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java b/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java index 61834a39b9c10a208cc871068ba3f3b6dd203512..e75e4d1b732c996cd84a1ddb2bbe86b8ff637727 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/SyncHttpClient.java @@ -9,6 +9,8 @@ package org.openhab.habdroid.util; +import android.graphics.Bitmap; + import okhttp3.Call; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -61,6 +63,10 @@ public class SyncHttpClient extends HttpClient { return new HttpTextResult(this); } + public HttpBitmapResult asBitmap(int sizeInPixels, boolean enforceSize) { + return new HttpBitmapResult(this, sizeInPixels, enforceSize); + } + public HttpStatusResult asStatus() { return new HttpStatusResult(this); } @@ -112,6 +118,33 @@ public class SyncHttpClient extends HttpClient { } } + public static class HttpBitmapResult { + public final Request request; + public final Bitmap response; + public final Throwable error; + public final int statusCode; + + HttpBitmapResult(HttpResult result, int size, boolean enforceSize) { + this.request = result.request; + this.statusCode = result.statusCode; + if (result.response == null) { + this.response = null; + this.error = result.error; + } else { + Bitmap response = null; + Throwable error = result.error; + try { + response = getBitmapFromResponseBody(result.response, size, enforceSize); + } catch (IOException e) { + error = e; + } + this.response = response; + this.error = error; + } + result.close(); + } + } + public SyncHttpClient(OkHttpClient client, String baseUrl, String username, String password) { super(client, baseUrl, username, password); } diff --git a/mobile/src/main/java/org/openhab/habdroid/util/TaskerIntent.java b/mobile/src/main/java/org/openhab/habdroid/util/TaskerIntent.java new file mode 100644 index 0000000000000000000000000000000000000000..ed60889f4735cb214dc02dfd4a693013442b10e5 --- /dev/null +++ b/mobile/src/main/java/org/openhab/habdroid/util/TaskerIntent.java @@ -0,0 +1,292 @@ +/* + * android-plugin-api-for-locale https://github.com/twofortyfouram/android-plugin-api-for-locale + * Copyright 2014 two forty four a.m. LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.openhab.habdroid.util; + +import androidx.annotation.NonNull; + +/** + * Contains Intent constants necessary for interacting with the plug-in API for Locale. + */ +public class TaskerIntent { + /** + * <p>{@code Intent} action sent by the host to create or + * edit a plug-in condition. When the host sends this {@code Intent}, it + * will be explicit (i.e. sent directly to the package and class of the plug-in's + * {@code Activity}).</p> + * <p>The {@code Intent} MAY contain + * {@link #EXTRA_BUNDLE} and {@link #EXTRA_STRING_BLURB} that was previously set by the {@code + * Activity} result of ACTION_EDIT_CONDITION.</p> + * <p>There SHOULD be only one {@code Activity} per APK that implements this + * {@code Intent}. If a single APK wishes to export multiple plug-ins, it + * MAY implement multiple Activity instances that implement this + * {@code Intent}, however there must only be a single + * {@link #ACTION_QUERY_CONDITION} receiver. In such a scenario, it is the + * responsibility of the Activity to store enough data in + * {@link #EXTRA_BUNDLE} to allow this receiver to disambiguate which + * "plug-in" is being queried. To avoid user confusion, it is recommended + * that only a single plug-in be implemented per APK.</p> + * + * @see TaskerIntent#EXTRA_BUNDLE + * @see TaskerIntent#EXTRA_STRING_BREADCRUMB + */ + @NonNull + public static final String ACTION_EDIT_CONDITION + = "com.twofortyfouram.locale.intent.action.EDIT_CONDITION"; //$NON-NLS-1$ + + /** + * <p>Ordered {@code Intent} action broadcast by the host to query + * a plug-in condition. When the host broadcasts this {@code Intent}, it will + * be explicit (i.e. directly to the package and class of the plug-in's + * {@code BroadcastReceiver}).</p> + * <p>The {@code Intent} MUST contain a + * {@link #EXTRA_BUNDLE} that was previously set by the {@code Activity} + * result of {@link #ACTION_EDIT_CONDITION}. + * </p> + * <p> + * Since this is an ordered broadcast, the plug-in's receiver MUST set an + * appropriate result code from {@link #RESULT_CONDITION_SATISFIED}, + * {@link #RESULT_CONDITION_UNSATISFIED}, or + * {@link #RESULT_CONDITION_UNKNOWN}.</p> + * <p> + * There MUST be only one {@code BroadcastReceiver} per APK that implements + * an Intent-filter for this action. + * </p> + * + * @see TaskerIntent#EXTRA_BUNDLE + * @see TaskerIntent#RESULT_CONDITION_SATISFIED + * @see TaskerIntent#RESULT_CONDITION_UNSATISFIED + * @see TaskerIntent#RESULT_CONDITION_UNKNOWN + */ + @NonNull + public static final String ACTION_QUERY_CONDITION + = "com.twofortyfouram.locale.intent.action.QUERY_CONDITION"; //$NON-NLS-1$ + + /** + * <p> + * {@code Intent} action sent by the host to create or + * edit a plug-in setting. When the host sends this {@code Intent}, it + * will be sent explicit (i.e. sent directly to the package and class of the plug-in's + * {@code Activity}).</p> + * <p>The {@code Intent} MAY contain a {@link #EXTRA_BUNDLE} and {@link + * #EXTRA_STRING_BLURB} + * that was previously set by the {@code Activity} result of + * ACTION_EDIT_SETTING.</p> + * <p> + * There SHOULD be only one {@code Activity} per APK that implements this + * {@code Intent}. If a single APK wishes to export multiple plug-ins, it + * MAY implement multiple Activity instances that implement this + * {@code Intent}, however there must only be a single + * {@link #ACTION_FIRE_SETTING} receiver. In such a scenario, it is the + * responsibility of the Activity to store enough data in + * {@link #EXTRA_BUNDLE} to allow this receiver to disambiguate which + * "plug-in" is being fired. To avoid user confusion, it is recommended that + * only a single plug-in be implemented per APK. + * </p> + * + * @see TaskerIntent#EXTRA_BUNDLE + * @see TaskerIntent#EXTRA_STRING_BREADCRUMB + */ + @NonNull + public static final String ACTION_EDIT_SETTING + = "com.twofortyfouram.locale.intent.action.EDIT_SETTING"; //$NON-NLS-1$ + + /** + * <p> + * {@code Intent} action broadcast by the host to fire a + * plug-in setting. When the host broadcasts this {@code Intent}, it will be + * explicit (i.e. sent directly to the package and class of the plug-in's + * {@code BroadcastReceiver}).</p> + * <p>The {@code Intent} MUST contain a + * {@link #EXTRA_BUNDLE} that was previously set by the {@code Activity} + * result of {@link #ACTION_EDIT_SETTING}.</p> + * <p>There MUST be only one {@code BroadcastReceiver} per APK that implements + * an Intent-filter for this action.</p> + * + * @see TaskerIntent#EXTRA_BUNDLE + */ + @NonNull + public static final String ACTION_FIRE_SETTING + = "com.twofortyfouram.locale.intent.action.FIRE_SETTING"; //$NON-NLS-1$ + + /** + * <p>Implicit broadcast {@code Intent} action to notify the host(s) that a plug-in + * condition is requesting a query it via + * {@link #ACTION_QUERY_CONDITION}. This merely serves as a hint to the host + * that a condition wants to be queried. There is no guarantee as to when or + * if the plug-in will be queried after this action is broadcast. If + * the host does not respond to the plug-in condition after a + * ACTION_REQUEST_QUERY Intent is sent, the plug-in SHOULD shut + * itself down and stop requesting requeries. A lack of response from the host + * indicates that the host is not currently interested in this plug-in. When + * the host becomes interested in the plug-in again, the host will send + * {@link #ACTION_QUERY_CONDITION}.</p> + * <p> + * The extra {@link #EXTRA_STRING_ACTIVITY_CLASS_NAME} MUST be included, otherwise the host will + * ignore this {@code Intent}. + * </p> + * <p> + * Plug-in conditions SHOULD NOT use this unless there is some sort of + * asynchronous event that has occurred, such as a broadcast {@code Intent} + * being received by the plug-in. Plug-ins SHOULD NOT periodically request a + * requery as a way of implementing polling behavior. + * </p> + * <p> + * Hosts MAY throttle plug-ins that request queries too frequently. + * </p> + * + * @see TaskerIntent#EXTRA_STRING_ACTIVITY_CLASS_NAME + */ + @NonNull + public static final String ACTION_REQUEST_QUERY + = "com.twofortyfouram.locale.intent.action.REQUEST_QUERY"; //$NON-NLS-1$ + + /** + * <p> + * Type: {@code String}. + * </p> + * <p> + * Maps to a {@code String} that represents the {@code Activity} bread crumb + * path. + * </p> + */ + @NonNull + public static final String EXTRA_STRING_BREADCRUMB + = "com.twofortyfouram.locale.intent.extra.BREADCRUMB"; //$NON-NLS-1$ + + /** + * <p> + * Type: {@code String}. + * </p> + * <p> + * Maps to a {@code String} that represents a blurb. This is returned as an + * {@code Activity} result extra from the Activity started with {@link #ACTION_EDIT_CONDITION} + * or + * {@link #ACTION_EDIT_SETTING}. + * </p> + * <p> + * The blurb is a concise description displayed to the user of what the + * plug-in is configured to do. + * </p> + */ + @NonNull + public static final String EXTRA_STRING_BLURB = "com.twofortyfouram.locale.intent.extra.BLURB"; + //$NON-NLS-1$ + + /** + * <p> + * Type: {@code Bundle}. + * </p> + * <p> + * Maps to a {@code Bundle} that contains all of a plug-in's extras to later be used when + * querying or firing the plug-in. + * </p> + * <p> + * Plug-ins MUST NOT store {@link android.os.Parcelable} objects in this {@code Bundle} + * , because {@code Parcelable} is not a long-term storage format.</p> + * <p> + * Plug-ins MUST NOT store any serializable object that is not exposed by + * the Android SDK. Plug-ins SHOULD NOT store any serializable object that is not available + * across all Android API levels that the plug-in supports. Doing could cause previously saved + * plug-ins to fail during backup and restore. + * </p> + * <p> + * When the Bundle is serialized by the host, the maximum size of the serialized Bundle MUST be + * less than 25 kilobytes (base-10). While the serialization mechanism used by the host is + * opaque to the plug-in, in general plug-ins should just make their Bundle reasonably compact. + * In Android, Intent extras are limited to about 500 kilobytes, although the exact + * size is not specified by the Android public API. If an Intent exceeds that size, the extras + * will be silently dropped by Android. In Android 4.4 KitKat, the maximum amount of data that + * can be written to a ContentProvider during a ContentProviderOperation was reduced to + * less than 300 kilobytes. The maximum bundle size here was chosen to allow several large + * plug-ins to be added to a single batch of operations before overflow occurs. + * </p> + * <p>If a plug-in needs to store large amounts of data, the plug-in should consider + * implementing its own internal storage mechanism. The Bundle can then contain a small token + * that the plug-in uses as a lookup key in its own internal storage mechanism.</p> + */ + @NonNull + public static final String EXTRA_BUNDLE = "com.twofortyfouram.locale.intent.extra.BUNDLE"; + //$NON-NLS-1$ + + /** + * <p> + * Type: {@code String}. + * </p> + * <p> + * Maps to a {@code String} that is the fully qualified class name of a plug-in's + * {@code Activity}. + * </p> + * + * @see TaskerIntent#ACTION_REQUEST_QUERY + */ + @NonNull + public static final String EXTRA_STRING_ACTIVITY_CLASS_NAME = + "com.twofortyfouram.locale.intent.extra.ACTIVITY"; + //$NON-NLS-1$ + + /** + * Ordered broadcast result code indicating that a plug-in condition's state + * is satisfied (true). + * + * @see TaskerIntent#ACTION_QUERY_CONDITION + */ + public static final int RESULT_CONDITION_SATISFIED = 16; + + /** + * Ordered broadcast result code indicating that a plug-in condition's state + * is not satisfied (false). + * + * @see TaskerIntent#ACTION_QUERY_CONDITION + */ + public static final int RESULT_CONDITION_UNSATISFIED = 17; + + /** + * <p> + * Ordered broadcast result code indicating that a plug-in condition's state + * is unknown (neither true nor false). + * </p> + * <p> + * If a condition returns UNKNOWN, then the host will use the last known + * return value on a best-effort basis. Best-effort means that the host may + * not persist known values forever (e.g. last known values could + * hypothetically be cleared after a device reboot or a restart of the + * host's process. If there is no last known return value, then unknown is + * treated as not satisfied (false). + * </p> + * <p> + * The purpose of an UNKNOWN result is to allow a plug-in condition more + * than 10 seconds to process a query. A {@code BroadcastReceiver} MUST + * return within 10 seconds, otherwise it will be killed by Android. A + * plug-in that needs more than 10 seconds might initially return + * RESULT_CONDITION_UNKNOWN, subsequently request a requery, and + * then return either {@link #RESULT_CONDITION_SATISFIED} or + * {@link #RESULT_CONDITION_UNSATISFIED}. + * </p> + * + * @see TaskerIntent#ACTION_QUERY_CONDITION + */ + public static final int RESULT_CONDITION_UNKNOWN = 18; + + /** + * Private constructor prevents instantiation. + * + * @throws UnsupportedOperationException because this class cannot be + * instantiated. + */ + private TaskerIntent() { + throw new UnsupportedOperationException("This class is non-instantiable"); //$NON-NLS-1$ + } +} \ No newline at end of file diff --git a/mobile/src/main/java/org/openhab/habdroid/util/Util.java b/mobile/src/main/java/org/openhab/habdroid/util/Util.java index d6bcbfc6afc6537abed8459ab1d21e684e8d18d7..55831ca1d3f49ff4c42d579d0a882cfe6996f023 100644 --- a/mobile/src/main/java/org/openhab/habdroid/util/Util.java +++ b/mobile/src/main/java/org/openhab/habdroid/util/Util.java @@ -10,54 +10,67 @@ package org.openhab.habdroid.util; import android.app.Activity; -import android.app.ActivityManager; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; -import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.util.DisplayMetrics; import android.util.Log; import android.util.TypedValue; -import androidx.annotation.AnimRes; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import android.webkit.WebViewDatabase; import androidx.annotation.AttrRes; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.StyleRes; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import es.dmoral.toasty.Toasty; import okhttp3.Headers; import okhttp3.Request; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.openhab.habdroid.BuildConfig; import org.openhab.habdroid.R; +import org.openhab.habdroid.core.connection.Connection; import org.openhab.habdroid.model.Item; +import org.openhab.habdroid.model.ParsedState; import org.openhab.habdroid.model.Sitemap; import org.w3c.dom.Document; import org.w3c.dom.NodeList; +import java.io.EOFException; +import java.io.IOException; +import java.net.ConnectException; import java.net.MalformedURLException; +import java.net.SocketTimeoutException; import java.net.URL; +import java.net.UnknownHostException; +import java.security.cert.CertPathValidatorException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.CertificateRevokedException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Locale; + +import javax.net.ssl.SSLException; +import javax.net.ssl.SSLPeerUnverifiedException; public class Util { private static final String TAG = Util.class.getSimpleName(); - public static void overridePendingTransition(Activity activity, boolean reverse) { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity); - if (!prefs.getString(Constants.PREFERENCE_ANIMATION, "android").equals("android")) { - if (prefs.getString(Constants.PREFERENCE_ANIMATION, "android").equals("ios")) { - @AnimRes int enterAnim = reverse ? R.anim.slide_in_left : R.anim.slide_in_right; - @AnimRes int exitAnim = reverse ? R.anim.slide_out_right : R.anim.slide_out_left; - activity.overridePendingTransition(enterAnim, exitAnim); - } else { - activity.overridePendingTransition(0, 0); - } - } - } - public static String normalizeUrl(String sourceUrl) { String normalizedUrl = ""; try { @@ -69,7 +82,7 @@ public class Util { normalizedUrl = normalizedUrl + "/"; } } catch (MalformedURLException e) { - Log.e(TAG, "normalizeUrl: invalid URL"); + Log.d(TAG, "normalizeUrl(): Invalid URL '" + sourceUrl + "'"); } return normalizedUrl; } @@ -137,23 +150,6 @@ public class Util { return null; } - public static void setActivityTheme(@NonNull final Activity activity) { - setActivityTheme(activity, null); - } - - public static void setActivityTheme(@NonNull final Activity activity, String theme) { - activity.setTheme(getActivityThemeId(activity, theme)); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - TypedValue typedValue = new TypedValue(); - activity.getTheme().resolveAttribute(R.attr.colorPrimary, typedValue, true); - activity.setTaskDescription(new ActivityManager.TaskDescription( - activity.getString(R.string.app_name), - BitmapFactory.decodeResource(activity.getResources(), R.mipmap.icon_round), - typedValue.data)); - } - } - public static @StyleRes int getActivityThemeId(@NonNull final Activity activity) { return getActivityThemeId(activity, null); } @@ -190,6 +186,20 @@ public class Util { return false; } + public static void sendItemCommand(AsyncHttpClient client, Item item, + ParsedState.NumberState state) { + if (item == null || state == null) { + return; + } + if (item.isOfTypeOrGroupType(Item.Type.NumberWithDimension)) { + // For number items, include unit (if present) in command + sendItemCommand(client, item, state.toString(Locale.US)); + } else { + // For all other items, send the plain value + sendItemCommand(client, item, state.formatValue()); + } + } + public static void sendItemCommand(AsyncHttpClient client, Item item, String command) { if (item == null) { return; @@ -207,12 +217,13 @@ public class Util { new AsyncHttpClient.StringResponseHandler() { @Override public void onFailure(Request request, int statusCode, Throwable error) { - Log.e(TAG, "Got command error " + error.getMessage()); + Log.e(TAG, "Sending command '" + command + + "' to " + itemUrl + " failed: status " + statusCode, error); } @Override public void onSuccess(String response, Headers headers) { - Log.d(TAG, "Command was sent successfully"); + Log.d(TAG, "Command '" + command + "' was sent successfully to " + itemUrl); } }); } @@ -251,9 +262,158 @@ public class Util { int[] colors = new int[colorAttrIds.length]; for (int i = 0; i < colorAttrIds.length; i++) { - theme.resolveAttribute(R.attr.colorPrimary, typedValue, true); + theme.resolveAttribute(colorAttrIds[i], typedValue, true); colors[i] = typedValue.data; } swipeLayout.setColorSchemeColors(colors); } + + public static boolean isFlavorStable() { + return BuildConfig.FLAVOR.toLowerCase().contains("stable"); + } + + public static boolean isFlavorBeta() { + return !isFlavorStable(); + } + + public static boolean isFlavorFull() { + return BuildConfig.FLAVOR.toLowerCase().contains("full"); + } + + public static boolean isFlavorFoss() { + return !isFlavorFull(); + } + + public static void initWebView(WebView webView, Connection connection, String url) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + WebViewDatabase webViewDatabase = WebViewDatabase.getInstance(webView.getContext()); + webViewDatabase.setHttpAuthUsernamePassword(Util.getHostFromUrl(url), "", + connection.getUsername(), connection.getPassword()); + } else { + webView.setHttpAuthUsernamePassword(Util.getHostFromUrl(url), "", + connection.getUsername(), connection.getPassword()); + } + + webView.getSettings().setDomStorageEnabled(true); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setSupportMultipleWindows(true); + + webView.setWebChromeClient(new WebChromeClient() { + @Override + public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, + Message resultMsg) { + Message href = view.getHandler().obtainMessage(); + view.requestFocusNodeHref(href); + String url = href.getData().getString("url"); + openInBrowser(view.getContext(), url); + return false; + } + }); + } + + public static void openInBrowser(Context context, @Nullable String url) { + if (TextUtils.isEmpty(url)) { + Log.e(TAG, "Got empty url"); + return; + } + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + try { + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + Toasty.error(context, R.string.error_no_browser_found, Toasty.LENGTH_LONG).show(); + } + } + + /** + * Returns vibration pattern for notifications that can be passed to + * {@link androidx.core.app.NotificationCompat.Builder#setVibrate(long[] pattern}. + * + * @param context + * @return Vibration pattern + */ + public static long[] getNotificationVibrationPattern(Context context) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + String vibration = + prefs.getString(Constants.PREFERENCE_NOTIFICATION_VIBRATION, ""); + if (context.getString(R.string.settings_notification_vibration_value_short).equals(vibration)) { + return new long[] {0, 500, 500}; + } else if (context.getString(R.string.settings_notification_vibration_value_long).equals(vibration)) { + return new long[] {0, 1000, 1000}; + } else if (context.getString(R.string.settings_notification_vibration_value_twice).equals(vibration)) { + return new long[] {0, 1000, 1000, 1000, 1000}; + } else { + return new long[] {0}; + } + } + + public static CharSequence getHumanReadableErrorMessage(Context context, String url, + int statusCode, Throwable error) { + CharSequence message; + if (statusCode >= 400) { + if (error.getMessage().equals("openHAB is offline")) { + return context.getString(R.string.error_openhab_offline); + } else { + int resourceId; + try { + resourceId = context.getResources().getIdentifier( + "error_http_code_" + statusCode, + "string", context.getPackageName()); + return context.getString(resourceId); + } catch (Resources.NotFoundException e) { + return context.getString(R.string.error_http_connection_failed, statusCode); + } + } + } else if (error instanceof UnknownHostException) { + Log.e(TAG, "Unable to resolve hostname"); + return context.getString(R.string.error_unable_to_resolve_hostname); + } else if (error instanceof SSLException) { + // if ssl exception, check for some common problems + if (Util.exceptionHasCause(error, CertPathValidatorException.class)) { + return context.getString(R.string.error_certificate_not_trusted); + } else if (Util.exceptionHasCause(error, CertificateExpiredException.class)) { + return context.getString(R.string.error_certificate_expired); + } else if (Util.exceptionHasCause(error, CertificateNotYetValidException.class)) { + return context.getString(R.string.error_certificate_not_valid_yet); + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N + && Util.exceptionHasCause(error, CertificateRevokedException.class)) { + return context.getString(R.string.error_certificate_revoked); + } else if (Util.exceptionHasCause(error, SSLPeerUnverifiedException.class)) { + return String.format(context.getString(R.string.error_certificate_wrong_host), + Util.getHostFromUrl(url)); + } else { + return context.getString(R.string.error_connection_sslhandshake_failed); + } + } else if (error instanceof ConnectException || error instanceof SocketTimeoutException) { + return context.getString(R.string.error_connection_failed); + } else if (error instanceof IOException + && Util.exceptionHasCause(error, EOFException.class)) { + return context.getString(R.string.error_http_to_https_port); + } else { + Log.e(TAG, "REST call to " + url + " failed", error); + return error.getMessage(); + } + } + + /** + * Shows an orange Toast with the openHAB icon. Can be called from the background. + */ + public static void showToast(Context context, CharSequence message) { + new Handler(Looper.getMainLooper()).post(() -> Toasty.custom(context, message, + R.drawable.ic_openhab_appicon_24dp, R.color.openhab_orange, Toasty.LENGTH_SHORT, + true, true).show()); + } + + /** + * This method converts dp unit to equivalent pixels, depending on device density. + * + * @param dp A value in dp (density independent pixels) unit. Which we need to convert into + * pixels + * @param context Context to get resources and device specific display metrics + * @return A float value to represent px equivalent to dp depending on device density + * @author https://stackoverflow.com/a/9563438 + */ + public static float convertDpToPixel(float dp, Context context) { + return dp * ((float) context.getResources().getDisplayMetrics().densityDpi + / DisplayMetrics.DENSITY_DEFAULT); + } } diff --git a/mobile/src/main/res/drawable/ic_alarm_grey_24dp.xml b/mobile/src/main/res/drawable/ic_alarm_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..8818f7219366258a2fc7e1f5f5c03db06f4d9909 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_alarm_grey_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M22,5.72l-4.6,-3.86 -1.29,1.53 4.6,3.86L22,5.72zM7.88,3.39L6.6,1.86 2,5.71l1.29,1.53 4.59,-3.85zM12.5,8L11,8v6l4.75,2.85 0.75,-1.23 -4,-2.37L12.5,8zM12,4c-4.97,0 -9,4.03 -9,9s4.02,9 9,9c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,20c-3.87,0 -7,-3.13 -7,-7s3.13,-7 7,-7 7,3.13 7,7 -3.13,7 -7,7z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_alarm_off_grey_24dp.xml b/mobile/src/main/res/drawable/ic_alarm_off_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..ee82a793988fe2b88a8ac372157d6221bd12e242 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_alarm_off_grey_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M12,6c3.87,0 7,3.13 7,7 0,0.84 -0.16,1.65 -0.43,2.4l1.52,1.52c0.58,-1.19 0.91,-2.51 0.91,-3.92 0,-4.97 -4.03,-9 -9,-9 -1.41,0 -2.73,0.33 -3.92,0.91L9.6,6.43C10.35,6.16 11.16,6 12,6zM22,5.72l-4.6,-3.86 -1.29,1.53 4.6,3.86L22,5.72zM2.92,2.29L1.65,3.57 2.98,4.9l-1.11,0.93 1.42,1.42 1.11,-0.94 0.8,0.8C3.83,8.69 3,10.75 3,13c0,4.97 4.02,9 9,9 2.25,0 4.31,-0.83 5.89,-2.2l2.2,2.2 1.27,-1.27L3.89,3.27l-0.97,-0.98zM16.47,18.39C15.26,19.39 13.7,20 12,20c-3.87,0 -7,-3.13 -7,-7 0,-1.7 0.61,-3.26 1.61,-4.47l9.86,9.86zM8.02,3.28L6.6,1.86l-0.86,0.71 1.42,1.42 0.86,-0.71z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_bell_off_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_bell_off_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..c91cfe78241949978504a5459c66d38cd06dad06 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_bell_off_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M22.11,21.46L2.39,1.73L1.11,3L5.83,7.72C5.29,8.73 5,9.86 5,11V17L3,19V20H18.11L20.84,22.73L22.11,21.46M7,18V11C7,10.39 7.11,9.79 7.34,9.23L16.11,18H7M10,21H14A2,2 0,0 1,12 23A2,2 0,0 1,10 21M8.29,5.09C8.82,4.75 9.4,4.5 10,4.29C10,4.19 10,4.1 10,4A2,2 0,0 1,12 2A2,2 0,0 1,14 4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V15.8L17,13.8V11A5,5 0,0 0,12 6C11.22,6 10.45,6.2 9.76,6.56L8.29,5.09Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_bell_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_bell_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..752f6644daa586bcbe80270083683341cae1b30a --- /dev/null +++ b/mobile/src/main/res/drawable/ic_bell_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M16,17H7V10.5C7,8 9,6 11.5,6C14,6 16,8 16,10.5M18,16V10.5C18,7.43 15.86,4.86 13,4.18V3.5A1.5,1.5 0,0 0,11.5 2A1.5,1.5 0,0 0,10 3.5V4.18C7.13,4.86 5,7.43 5,10.5V16L3,18V19H20V18M11.5,22A2,2 0,0 0,13.5 20H9.5A2,2 0,0 0,11.5 22Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_bell_ring_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_bell_ring_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..7582df1fe7c8cf284f682ae80062765951392599 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_bell_ring_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M10,21H14A2,2 0,0 1,12 23A2,2 0,0 1,10 21M21,19V20H3V19L5,17V11C5,7.9 7.03,5.17 10,4.29C10,4.19 10,4.1 10,4A2,2 0,0 1,12 2A2,2 0,0 1,14 4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V17L21,19M17,11A5,5 0,0 0,12 6A5,5 0,0 0,7 11V18H17V11M19.75,3.19L18.33,4.61C20.04,6.3 21,8.6 21,11H23C23,8.07 21.84,5.25 19.75,3.19M1,11H3C3,8.6 3.96,6.3 5.67,4.61L4.25,3.19C2.16,5.25 1,8.07 1,11Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_bug_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_bug_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e2f2159386bf1950874f6306efaa1312eb65684 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_bug_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M20,8H17.19C16.74,7.2 16.12,6.5 15.37,6L17,4.41L15.59,3L13.42,5.17C12.96,5.06 12.5,5 12,5C11.5,5 11.05,5.06 10.59,5.17L8.41,3L7,4.41L8.62,6C7.87,6.5 7.26,7.21 6.81,8H4V10H6.09C6.03,10.33 6,10.66 6,11V12H4V14H6V15C6,15.34 6.03,15.67 6.09,16H4V18H6.81C8.47,20.87 12.14,21.84 15,20.18C15.91,19.66 16.67,18.9 17.19,18H20V16H17.91C17.97,15.67 18,15.34 18,15V14H20V12H18V11C18,10.66 17.97,10.33 17.91,10H20V8M16,15A4,4 0,0 1,12 19A4,4 0,0 1,8 15V11A4,4 0,0 1,12 7A4,4 0,0 1,16 11V15M14,10V12H10V10H14M10,14H14V16H10V14Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_bug_report_grey_24dp.xml b/mobile/src/main/res/drawable/ic_bug_report_grey_24dp.xml deleted file mode 100644 index 3b5c01e0203562c492d115e37b38e07e1db1a68e..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_bug_report_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_clear_all_grey_24dp.xml b/mobile/src/main/res/drawable/ic_clear_all_grey_24dp.xml deleted file mode 100644 index 00e15ea3148f2fbbbc6ed3e3871808df4c10be2d..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_clear_all_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M5,13h14v-2L5,11v2zM3,17h14v-2L3,15v2zM7,7v2h14L21,7L7,7z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_code_braces_grey_24dp.xml b/mobile/src/main/res/drawable/ic_code_braces_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..44c01ab74e777300b272f7faed4f086c04c94762 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_code_braces_grey_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/XT3000 +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M8,3A2,2 0,0 0,6 5V9A2,2 0,0 1,4 11H3V13H4A2,2 0,0 1,6 15V19A2,2 0,0 0,8 21H10V19H8V14A2,2 0,0 0,6 12A2,2 0,0 0,8 10V5H10V3M16,3A2,2 0,0 1,18 5V9A2,2 0,0 0,20 11H21V13H20A2,2 0,0 0,18 15V19A2,2 0,0 1,16 21H14V19H16V14A2,2 0,0 1,18 12A2,2 0,0 1,16 10V5H14V3H16Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_collections_bookmark_grey_24dp.xml b/mobile/src/main/res/drawable/ic_collections_bookmark_grey_24dp.xml deleted file mode 100644 index 52c783a698b299d3de5b519b5d5f45a3f430131a..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_collections_bookmark_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,12l-2.5,-1.5L15,12L15,4h5v8z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_color_lens_black_24dp.xml b/mobile/src/main/res/drawable/ic_color_lens_black_24dp.xml deleted file mode 100644 index 1d1d402cdcdd564b30625823fdf85e8ebcd40eea..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_color_lens_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#000000" - android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_color_lens_grey_24dp.xml b/mobile/src/main/res/drawable/ic_color_lens_grey_24dp.xml deleted file mode 100644 index 9006b1690d8de960d713802ee94ee4aac8e9b4e6..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_color_lens_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_color_lens_white_24dp.xml b/mobile/src/main/res/drawable/ic_color_lens_white_24dp.xml deleted file mode 100644 index 64bd51ae74ceb2aad862cdf21ead1ea6963bfc95..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_color_lens_white_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#FFFFFF" - android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_delete_outline_white_24dp.xml b/mobile/src/main/res/drawable/ic_delete_outline_white_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..5094d4d391be8c7179f04e2aca4ec9884e656bc3 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_delete_outline_white_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFF" + android:pathData="M6,19A2,2 0,0 0,8 21H16A2,2 0,0 0,18 19V7H6V19M8,9H16V19H8V9M15.5,4L14.5,3H9.5L8.5,4H5V6H19V4H15.5Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_developer_mode_grey_24dp.xml b/mobile/src/main/res/drawable/ic_developer_mode_grey_24dp.xml deleted file mode 100644 index 2e9c07c507ce7c0b5d155b3db574d13bdb91d748..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_developer_mode_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M7,5h10v2h2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99L7,1c-1.1,0 -2,0.9 -2,2v4h2L7,5zM15.41,16.59L20,12l-4.59,-4.59L14,8.83 17.17,12 14,15.17l1.41,1.42zM10,15.17L6.83,12 10,8.83 8.59,7.41 4,12l4.59,4.59L10,15.17zM17,19L7,19v-2L5,17v4c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2v-4h-2v2z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_eye_off_outline_grey_120dp.xml b/mobile/src/main/res/drawable/ic_eye_off_outline_grey_120dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..025159d48c755b11f36e9f47ab7f4179e9eaf67f --- /dev/null +++ b/mobile/src/main/res/drawable/ic_eye_off_outline_grey_120dp.xml @@ -0,0 +1,17 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/Templarian +--> + +<vector android:height="120dp" android:viewportHeight="24" + android:viewportWidth="24" android:width="120dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#757575" android:pathData="M2,5.27L3.28,4L20,20.72L18.73,22L15.65,18.92C14.5,19.3 13.28,19.5 12,19.5C7,19.5 2.73,16.39 1,12C1.69,10.24 2.79,8.69 4.19,7.46L2,5.27M12,9A3,3 0,0 1,15 12C15,12.35 14.94,12.69 14.83,13L11,9.17C11.31,9.06 11.65,9 12,9M12,4.5C17,4.5 21.27,7.61 23,12C22.18,14.08 20.79,15.88 19,17.19L17.58,15.76C18.94,14.82 20.06,13.54 20.82,12C19.17,8.64 15.76,6.5 12,6.5C10.91,6.5 9.84,6.68 8.84,7L7.3,5.47C8.74,4.85 10.33,4.5 12,4.5M3.18,12C4.83,15.36 8.24,17.5 12,17.5C12.69,17.5 13.37,17.43 14,17.29L11.72,15C10.29,14.85 9.15,13.71 9,12.28L5.6,8.87C4.61,9.72 3.78,10.78 3.18,12Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_theater_grey_24dp.xml b/mobile/src/main/res/drawable/ic_file_document_box_multiple_outline_grey_24dp.xml similarity index 71% rename from mobile/src/main/res/drawable/ic_theater_grey_24dp.xml rename to mobile/src/main/res/drawable/ic_file_document_box_multiple_outline_grey_24dp.xml index 94669817a566bbc3537dc505387cd5d4523a12f3..1e13abb747886de3d7b0273dd762ccb715112991 100644 --- a/mobile/src/main/res/drawable/ic_theater_grey_24dp.xml +++ b/mobile/src/main/res/drawable/ic_file_document_box_multiple_outline_grey_24dp.xml @@ -18,5 +18,5 @@ android:viewportHeight="24"> <path android:fillColor="#757575" - android:pathData="M4,15H6A2,2 0,0 1,8 17V19H9V17A2,2 0,0 1,11 15H13A2,2 0,0 1,15 17V19H16V17A2,2 0,0 1,18 15H20A2,2 0,0 1,22 17V19H23V22H1V19H2V17A2,2 0,0 1,4 15M11,7L15,10L11,13V7M4,2H20A2,2 0,0 1,22 4V13.54C21.41,13.19 20.73,13 20,13V4H4V13C3.27,13 2.59,13.19 2,13.54V4A2,2 0,0 1,4 2Z"/> + android:pathData="M16,15H9V13H16V15M19,11H9V9H19V11M19,7H9V5H19V7M3,5V21H19V23H3A2,2 0,0 1,1 21V5H3M21,1A2,2 0,0 1,23 3V17C23,18.11 22.11,19 21,19H7A2,2 0,0 1,5 17V3C5,1.89 5.89,1 7,1H21M7,3V17H21V3H7Z"/> </vector> diff --git a/mobile/src/main/res/drawable/ic_forum_grey_24dp.xml b/mobile/src/main/res/drawable/ic_forum_grey_24dp.xml deleted file mode 100644 index 52ff682cbbc1150a855b50f33eac86cd98403970..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_forum_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M21,6h-2v9L6,15v2c0,0.55 0.45,1 1,1h11l4,4L22,7c0,-0.55 -0.45,-1 -1,-1zM17,12L17,3c0,-0.55 -0.45,-1 -1,-1L3,2c-0.55,0 -1,0.45 -1,1v14l4,-4h10c0.55,0 1,-0.45 1,-1z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_forum_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_forum_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..3820b5b353a417b4b30da1b2e07066d13b1d5e68 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_forum_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M4,2A2,2 0,0 0,2 4V17L6,13H15A2,2 0,0 0,17 11V4A2,2 0,0 0,15 2H4M4,4H15V11H6L4,13V4M19,6V8H20V18L18,16H8V15H6V16A2,2 0,0 0,8 18H18L22,22V8A2,2 0,0 0,20 6H19Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_fullscreen_grey_24dp.xml b/mobile/src/main/res/drawable/ic_fullscreen_grey_24dp.xml deleted file mode 100644 index 7864102f8a1082d2c5586d95189fbcdda3bc9bef..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_fullscreen_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M7,14L5,14v5h5v-2L7,17v-3zM5,10h2L7,7h3L10,5L5,5v5zM17,17h-3v2h5v-5h-2v3zM14,5v2h3v3h2L19,5h-5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_home_grey_24dp.xml b/mobile/src/main/res/drawable/ic_home_grey_24dp.xml deleted file mode 100644 index 6ec1b5ab5e90d35d9a39837ea258e4affe37a495..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_home_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_file_document_box_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_home_outline_grey_24dp.xml similarity index 76% rename from mobile/src/main/res/drawable/ic_file_document_box_outline_grey_24dp.xml rename to mobile/src/main/res/drawable/ic_home_outline_grey_24dp.xml index b15d65bdc22def63087bdf4946a5f747854a9a0f..7aca9ea856454f528b05c855c51b7e9b9dbaccb6 100644 --- a/mobile/src/main/res/drawable/ic_file_document_box_outline_grey_24dp.xml +++ b/mobile/src/main/res/drawable/ic_home_outline_grey_24dp.xml @@ -8,7 +8,7 @@ This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - Author: twitter.com/greenturtwig + Author: https://twitter.com/Templarian --> <vector xmlns:android="http://schemas.android.com/apk/res/android" @@ -18,5 +18,5 @@ android:viewportHeight="24"> <path android:fillColor="#757575" - android:pathData="M5,3C3.89,3 3,3.89 3,5V19C3,20.11 3.89,21 5,21H19C20.11,21 21,20.11 21,19V5C21,3.89 20.11,3 19,3H5M5,5H19V19H5V5M7,7V9H17V7H7M7,11V13H17V11H7M7,15V17H14V15H7Z"/> + android:pathData="M9,19V13H11L13,13H15V19H18V10.91L12,4.91L6,10.91V19H9M12,2.09L21.91,12H20V21H13V15H11V21H4V12H2.09L12,2.09Z"/> </vector> diff --git a/mobile/src/main/res/drawable/ic_image_grey_24dp.xml b/mobile/src/main/res/drawable/ic_image_grey_24dp.xml deleted file mode 100644 index 9bb0098036330722d1489e3e7b4f235785d4f476..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_image_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_image_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_image_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..51e42341dcdb9324a0e9e3b17a00cf0e3cd52fe8 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_image_outline_grey_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/greenturtwig +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M19,19H5V5H19M19,3H5A2,2 0,0 0,3 5V19A2,2 0,0 0,5 21H19A2,2 0,0 0,21 19V5A2,2 0,0 0,19 3M13.96,12.29L11.21,15.83L9.25,13.47L6.5,17H17.5L13.96,12.29Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_info_outline.xml b/mobile/src/main/res/drawable/ic_info_outline_grey_24dp.xml similarity index 100% rename from mobile/src/main/res/drawable/ic_info_outline.xml rename to mobile/src/main/res/drawable/ic_info_outline_grey_24dp.xml diff --git a/mobile/src/main/res/drawable/ic_keyboard_arrow_right_black_24dp.xml b/mobile/src/main/res/drawable/ic_keyboard_arrow_right_black_24dp.xml index 2907b9fdb19618aaa0c2227806de0e8ed1f5a03e..7c1f68bb2ee0fb72c4c8ec876cda373215ef21a6 100644 --- a/mobile/src/main/res/drawable/ic_keyboard_arrow_right_black_24dp.xml +++ b/mobile/src/main/res/drawable/ic_keyboard_arrow_right_black_24dp.xml @@ -1,4 +1,5 @@ <vector xmlns:android="http://schemas.android.com/apk/res/android" + android:autoMirrored="true" android:width="24dp" android:height="24dp" android:viewportWidth="24.0" diff --git a/mobile/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml b/mobile/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml index 48a1a50fa2f23610558909e01aa95ebdf8e4ac4c..cdee0e3e19f18e3d828efe4fd3109a5bc84d78d5 100644 --- a/mobile/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml +++ b/mobile/src/main/res/drawable/ic_keyboard_arrow_right_white_24dp.xml @@ -1,5 +1,11 @@ -<vector android:height="24dp" android:tint="#B2FFFFFF" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:autoMirrored="true" + android:tint="#B2FFFFFF" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#89000000" + android:pathData="M8.59,16.34l4.58,-4.59 -4.58,-4.59L10,5.75l6,6 -6,6z"/> </vector> diff --git a/mobile/src/main/res/drawable/ic_language_grey_24dp.xml b/mobile/src/main/res/drawable/ic_language_grey_24dp.xml deleted file mode 100644 index bab25e93daa0b365805e5f8080ba84e1110496b1..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_language_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#757575" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM18.92,8h-2.95c-0.32,-1.25 -0.78,-2.45 -1.38,-3.56 1.84,0.63 3.37,1.91 4.33,3.56zM12,4.04c0.83,1.2 1.48,2.53 1.91,3.96h-3.82c0.43,-1.43 1.08,-2.76 1.91,-3.96zM4.26,14C4.1,13.36 4,12.69 4,12s0.1,-1.36 0.26,-2h3.38c-0.08,0.66 -0.14,1.32 -0.14,2 0,0.68 0.06,1.34 0.14,2L4.26,14zM5.08,16h2.95c0.32,1.25 0.78,2.45 1.38,3.56 -1.84,-0.63 -3.37,-1.9 -4.33,-3.56zM8.03,8L5.08,8c0.96,-1.66 2.49,-2.93 4.33,-3.56C8.81,5.55 8.35,6.75 8.03,8zM12,19.96c-0.83,-1.2 -1.48,-2.53 -1.91,-3.96h3.82c-0.43,1.43 -1.08,2.76 -1.91,3.96zM14.34,14L9.66,14c-0.09,-0.66 -0.16,-1.32 -0.16,-2 0,-0.68 0.07,-1.35 0.16,-2h4.68c0.09,0.65 0.16,1.32 0.16,2 0,0.68 -0.07,1.34 -0.16,2zM14.59,19.56c0.6,-1.11 1.06,-2.31 1.38,-3.56h2.95c-0.96,1.65 -2.49,2.93 -4.33,3.56zM16.36,14c0.08,-0.66 0.14,-1.32 0.14,-2 0,-0.68 -0.06,-1.34 -0.14,-2h3.38c0.16,0.64 0.26,1.31 0.26,2s-0.1,1.36 -0.26,2h-3.38z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_local_cafe_grey_24dp.xml b/mobile/src/main/res/drawable/ic_local_cafe_grey_24dp.xml deleted file mode 100644 index 474d01e8a697085740ca93807aaed1b9ac2d632f..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_local_cafe_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M20,3L4,3v10c0,2.21 1.79,4 4,4h6c2.21,0 4,-1.79 4,-4v-3h2c1.11,0 2,-0.89 2,-2L22,5c0,-1.11 -0.89,-2 -2,-2zM20,8h-2L18,5h2v3zM2,21h18v-2L2,19v2z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_mic_black_24dp.xml b/mobile/src/main/res/drawable/ic_mic_black_24dp.xml deleted file mode 100644 index 4f0dc0445a69ed5c3f23c6c6fae8db6ad355762f..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_mic_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#FF000000" - android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_mic_orange_340dp.xml b/mobile/src/main/res/drawable/ic_mic_orange_340dp.xml deleted file mode 100644 index 175ac8f1612532ac1ef58ed4f7fd1c6437d6698c..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_mic_orange_340dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="340dp" - android:height="340dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#E64A19" - android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_mic_white_24dp.xml b/mobile/src/main/res/drawable/ic_mic_white_24dp.xml deleted file mode 100644 index c0633e87af8880740cb81c8b3cff89fdd51a38b3..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_mic_white_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#FFFFFFFF" - android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_microphone_outline_black_24dp.xml b/mobile/src/main/res/drawable/ic_microphone_outline_black_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad81cf90da853435bca208bff8d07cd5126ed21e --- /dev/null +++ b/mobile/src/main/res/drawable/ic_microphone_outline_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M17.3,11C17.3,14 14.76,16.1 12,16.1C9.24,16.1 6.7,14 6.7,11H5C5,14.41 7.72,17.23 11,17.72V21H13V17.72C16.28,17.23 19,14.41 19,11M10.8,4.9C10.8,4.24 11.34,3.7 12,3.7C12.66,3.7 13.2,4.24 13.2,4.9L13.19,11.1C13.19,11.76 12.66,12.3 12,12.3C11.34,12.3 10.8,11.76 10.8,11.1M12,14A3,3 0,0 0,15 11V5A3,3 0,0 0,12 2A3,3 0,0 0,9 5V11A3,3 0,0 0,12 14Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_microphone_outline_orange_340dp.xml b/mobile/src/main/res/drawable/ic_microphone_outline_orange_340dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..dfb5597ff8a00cb08e71f7190639ff0e225efcc4 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_microphone_outline_orange_340dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="340dp" + android:height="340dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#E64A19" + android:pathData="M17.3,11C17.3,14 14.76,16.1 12,16.1C9.24,16.1 6.7,14 6.7,11H5C5,14.41 7.72,17.23 11,17.72V21H13V17.72C16.28,17.23 19,14.41 19,11M10.8,4.9C10.8,4.24 11.34,3.7 12,3.7C12.66,3.7 13.2,4.24 13.2,4.9L13.19,11.1C13.19,11.76 12.66,12.3 12,12.3C11.34,12.3 10.8,11.76 10.8,11.1M12,14A3,3 0,0 0,15 11V5A3,3 0,0 0,12 2A3,3 0,0 0,9 5V11A3,3 0,0 0,12 14Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_microphone_outline_white_120dp.xml b/mobile/src/main/res/drawable/ic_microphone_outline_white_120dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..fc496847d20bf026f1905e58acfeab5ca3b0fe28 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_microphone_outline_white_120dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="120dp" + android:height="120dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M17.3,11C17.3,14 14.76,16.1 12,16.1C9.24,16.1 6.7,14 6.7,11H5C5,14.41 7.72,17.23 11,17.72V21H13V17.72C16.28,17.23 19,14.41 19,11M10.8,4.9C10.8,4.24 11.34,3.7 12,3.7C12.66,3.7 13.2,4.24 13.2,4.9L13.19,11.1C13.19,11.76 12.66,12.3 12,12.3C11.34,12.3 10.8,11.76 10.8,11.1M12,14A3,3 0,0 0,15 11V5A3,3 0,0 0,12 2A3,3 0,0 0,9 5V11A3,3 0,0 0,12 14Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_certificate_grey_24dp.xml b/mobile/src/main/res/drawable/ic_network_strength_off_outline_black_24dp.xml similarity index 55% rename from mobile/src/main/res/drawable/ic_certificate_grey_24dp.xml rename to mobile/src/main/res/drawable/ic_network_strength_off_outline_black_24dp.xml index b84f56b0ca4fd5411672156bf8a8e50ed47e6a6c..cc944f96767f7e02d5fd628bffadd8a86630e72a 100644 --- a/mobile/src/main/res/drawable/ic_certificate_grey_24dp.xml +++ b/mobile/src/main/res/drawable/ic_network_strength_off_outline_black_24dp.xml @@ -11,10 +11,12 @@ Author: https://twitter.com/XT3000 --> -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> <path android:fillColor="#FF000000" - android:pathData="M4,3C2.89,3 2,3.89 2,5V15A2,2 0,0 0,4 17H12V22L15,19L18,22V17H20A2,2 0,0 0,22 15V8L22,6V5A2,2 0,0 0,20 3H16V3H4M12,5L15,7L18,5V8.5L21,10L18,11.5V15L15,13L12,15V11.5L9,10L12,8.5V5M4,5H9V7H4V5M4,9H7V11H4V9M4,13H9V15H4V13Z"/> + android:pathData="M21,1L12.4,9.6L13.85,11.05L19,5.83V16.19L21,18.19M4.77,4.5L3.5,5.77L9.86,12.13L1,21H18.73L20.73,23L22,21.73M11.33,13.6L16.73,19H6"/> </vector> diff --git a/mobile/src/main/res/drawable/ic_nfc_off_black_180dp.xml b/mobile/src/main/res/drawable/ic_nfc_off_black_180dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..bbacc8d4b9bbd9d6ca582005a83e01135718f920 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_nfc_off_black_180dp.xml @@ -0,0 +1,17 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://github.com/TheChilliPL +--> + +<vector android:height="180dp" android:viewportHeight="24" + android:viewportWidth="24" android:width="180dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M1.25,2.05L21.95,22.75L20.7,24L18.7,22L4,22C2.903,22 2,21.097 2,20L2,5.3L0,3.3L1.25,2.05ZM3.809,2.009C3.872,2.003 3.936,2 4,2L20,2C21.11,2 22,2.89 22,4L22,20C22,20.064 21.997,20.128 21.991,20.191L20,18.2L20,4L5.8,4L3.809,2.009ZM6,9.3L4.422,7.722L4.397,7.697L4.251,7.551L4.155,7.455L4.131,7.431L4,7.3L4,20L16.7,20L14.7,18L6,18L6,9.3ZM18,16.2L16,14.2L16,8L13,8L13,10.28C13.6,10.62 14,11.26 14,12C14,12.064 13.997,12.128 13.991,12.191L11,9.2L11,8C11,6.903 11.903,6 13,6L18,6L18,16.2ZM8,16L12.7,16L8,11.3L8,16ZM10,8L9.8,8L7.8,6L10,6L10,8Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_nfc_search_black_180dp.xml b/mobile/src/main/res/drawable/ic_nfc_search_black_180dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..c689fbdbbc960d314a0daaf5583247bb2f543652 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_nfc_search_black_180dp.xml @@ -0,0 +1,19 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://github.com/terreng +--> + +<vector android:height="180dp" android:viewportHeight="24" + android:viewportWidth="24" android:width="180dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillAlpha="1" android:fillColor="#000000" + android:pathData="M16.51,12C19.01,12 21.01,14 21.01,16.5C21.01,17.38 20.76,18.21 20.32,18.9L23.4,22L22.01,23.39L18.89,20.32C18.2,20.75 17.38,21 16.51,21C14.01,21 12.01,19 12.01,16.5C12.01,14 14.01,12 16.51,12ZM16.51,14C15.13,14 14.01,15.12 14.01,16.5C14.01,17.88 15.13,19 16.51,19C17.89,19 19.01,17.88 19.01,16.5C19.01,15.12 17.89,14 16.51,14ZM18,6L18,10.1752C17.33,10.0156 16.6565,9.9667 16,10.0175L16,8L13,8L13,10.277L13.5282,10.7191C12.3444,11.3278 11.3474,12.2974 10.7154,13.533C10.278,13.166 10,12.6153 10,12C10,11.262 10.405,10.624 11,10.277L11,8C11,6.896 11.895,6 13,6L18,6ZM6,18L6,6L8,6L10,6L10,8L8,8L8,16L10.0179,16C9.9647,16.6808 10.0207,17.3547 10.1744,18L6,18ZM20,4L4,4L4,20L11.0226,20C11.5302,20.7951 12.2115,21.4829 13.0328,22L4,22C2.895,22 2,21.104 2,20L2,4C2,2.896 2.895,2 4,2L20,2C21.104,2 22,2.896 22,4L22,13.0357C21.4969,12.2361 20.8189,11.5433 20,11.0208L20,4Z" + android:strokeLineJoin="round" android:strokeWidth="0.2"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_none.png b/mobile/src/main/res/drawable/ic_none.png new file mode 100644 index 0000000000000000000000000000000000000000..ab730090692b445e5d6e90105c6e688e9f1e0b7c Binary files /dev/null and b/mobile/src/main/res/drawable/ic_none.png differ diff --git a/mobile/src/main/res/drawable/ic_notifications_active_grey_24dp.xml b/mobile/src/main/res/drawable/ic_notifications_active_grey_24dp.xml deleted file mode 100644 index 3bcf2020a807efecc2607561987d3c57059039e4..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_notifications_active_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M7.58,4.08L6.15,2.65C3.75,4.48 2.17,7.3 2.03,10.5h2c0.15,-2.65 1.51,-4.97 3.55,-6.42zM19.97,10.5h2c-0.15,-3.2 -1.73,-6.02 -4.12,-7.85l-1.42,1.43c2.02,1.45 3.39,3.77 3.54,6.42zM18,11c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2v-5zM12,22c0.14,0 0.27,-0.01 0.4,-0.04 0.65,-0.14 1.18,-0.58 1.44,-1.18 0.1,-0.24 0.15,-0.5 0.15,-0.78h-4c0.01,1.1 0.9,2 2.01,2z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_notifications_grey_24dp.xml b/mobile/src/main/res/drawable/ic_notifications_grey_24dp.xml deleted file mode 100644 index d3908cc5e5c7bd5bd119bcf20d5b3ea002584c22..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_notifications_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_notifications_off_grey_24dp.xml b/mobile/src/main/res/drawable/ic_notifications_off_grey_24dp.xml deleted file mode 100644 index 425fff0cf0b17a7461bef3068bd45074ab45a724..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_notifications_off_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M20,18.69L7.84,6.14 5.27,3.49 4,4.76l2.8,2.8v0.01c-0.52,0.99 -0.8,2.16 -0.8,3.42v5l-2,2v1h13.73l2,2L21,19.72l-1,-1.03zM12,22c1.11,0 2,-0.89 2,-2h-4c0,1.11 0.89,2 2,2zM18,14.68L18,11c0,-3.08 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68c-0.15,0.03 -0.29,0.08 -0.42,0.12 -0.1,0.03 -0.2,0.07 -0.3,0.11h-0.01c-0.01,0 -0.01,0 -0.02,0.01 -0.23,0.09 -0.46,0.2 -0.68,0.31 0,0 -0.01,0 -0.01,0.01L18,14.68z"/> -</vector> diff --git a/mobile/src/full/res/drawable/ic_openhab_appicon_white_24dp.xml b/mobile/src/main/res/drawable/ic_openhab_appicon_white_24dp.xml similarity index 100% rename from mobile/src/full/res/drawable/ic_openhab_appicon_white_24dp.xml rename to mobile/src/main/res/drawable/ic_openhab_appicon_white_24dp.xml diff --git a/mobile/src/main/res/drawable/ic_palette_outline_black_24dp.xml b/mobile/src/main/res/drawable/ic_palette_outline_black_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1bc2624c2280f983085e7ec28095d29a4dd6c82 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_palette_outline_black_24dp.xml @@ -0,0 +1,21 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22C6.49,22 2,17.51 2,12S6.49,2 12,2s10,4.04 10,9c0,3.31 -2.69,6 -6,6h-1.77c-0.28,0 -0.5,0.22 -0.5,0.5 0,0.12 0.05,0.23 0.13,0.33 0.41,0.47 0.64,1.06 0.64,1.67 0,1.38 -1.12,2.5 -2.5,2.5zM12,4c-4.41,0 -8,3.59 -8,8s3.59,8 8,8c0.28,0 0.5,-0.22 0.5,-0.5 0,-0.16 -0.08,-0.28 -0.14,-0.35 -0.41,-0.46 -0.63,-1.05 -0.63,-1.65 0,-1.38 1.12,-2.5 2.5,-2.5L16,15c2.21,0 4,-1.79 4,-4 0,-3.86 -3.59,-7 -8,-7z"/> + <path + android:fillColor="#FF000000" + android:pathData="M6.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M9.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M14.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M17.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_palette_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_palette_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..93312ebf876b36f27c89b1de8605ebbc471f6e70 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_palette_outline_grey_24dp.xml @@ -0,0 +1,22 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:tint="#757575" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22C6.49,22 2,17.51 2,12S6.49,2 12,2s10,4.04 10,9c0,3.31 -2.69,6 -6,6h-1.77c-0.28,0 -0.5,0.22 -0.5,0.5 0,0.12 0.05,0.23 0.13,0.33 0.41,0.47 0.64,1.06 0.64,1.67 0,1.38 -1.12,2.5 -2.5,2.5zM12,4c-4.41,0 -8,3.59 -8,8s3.59,8 8,8c0.28,0 0.5,-0.22 0.5,-0.5 0,-0.16 -0.08,-0.28 -0.14,-0.35 -0.41,-0.46 -0.63,-1.05 -0.63,-1.65 0,-1.38 1.12,-2.5 2.5,-2.5L16,15c2.21,0 4,-1.79 4,-4 0,-3.86 -3.59,-7 -8,-7z"/> + <path + android:fillColor="#FF000000" + android:pathData="M6.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M9.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M14.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M17.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_palette_outline_orange_340dp.xml b/mobile/src/main/res/drawable/ic_palette_outline_orange_340dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d91946b9f7c22a89030467e5147f61554bbebd4 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_palette_outline_orange_340dp.xml @@ -0,0 +1,22 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="340dp" + android:height="340dp" + android:tint="#E64A19" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22C6.49,22 2,17.51 2,12S6.49,2 12,2s10,4.04 10,9c0,3.31 -2.69,6 -6,6h-1.77c-0.28,0 -0.5,0.22 -0.5,0.5 0,0.12 0.05,0.23 0.13,0.33 0.41,0.47 0.64,1.06 0.64,1.67 0,1.38 -1.12,2.5 -2.5,2.5zM12,4c-4.41,0 -8,3.59 -8,8s3.59,8 8,8c0.28,0 0.5,-0.22 0.5,-0.5 0,-0.16 -0.08,-0.28 -0.14,-0.35 -0.41,-0.46 -0.63,-1.05 -0.63,-1.65 0,-1.38 1.12,-2.5 2.5,-2.5L16,15c2.21,0 4,-1.79 4,-4 0,-3.86 -3.59,-7 -8,-7z"/> + <path + android:fillColor="#FF000000" + android:pathData="M6.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M9.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M14.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M17.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_palette_outline_white_24dp.xml b/mobile/src/main/res/drawable/ic_palette_outline_white_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ddf1b660bd4ed5149ad0c897ef153ba359d67a8 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_palette_outline_white_24dp.xml @@ -0,0 +1,22 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:tint="#ffffff" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M12,22C6.49,22 2,17.51 2,12S6.49,2 12,2s10,4.04 10,9c0,3.31 -2.69,6 -6,6h-1.77c-0.28,0 -0.5,0.22 -0.5,0.5 0,0.12 0.05,0.23 0.13,0.33 0.41,0.47 0.64,1.06 0.64,1.67 0,1.38 -1.12,2.5 -2.5,2.5zM12,4c-4.41,0 -8,3.59 -8,8s3.59,8 8,8c0.28,0 0.5,-0.22 0.5,-0.5 0,-0.16 -0.08,-0.28 -0.14,-0.35 -0.41,-0.46 -0.63,-1.05 -0.63,-1.65 0,-1.38 1.12,-2.5 2.5,-2.5L16,15c2.21,0 4,-1.79 4,-4 0,-3.86 -3.59,-7 -8,-7z"/> + <path + android:fillColor="#FF000000" + android:pathData="M6.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M9.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M14.5,7.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> + <path + android:fillColor="#FF000000" + android:pathData="M17.5,11.5m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_people_grey_24dp.xml b/mobile/src/main/res/drawable/ic_people_grey_24dp.xml deleted file mode 100644 index caef1697f8ea21209cf04b8dcccf34f9a86102db..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_people_grey_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#757575" - android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM8,11c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5C6.34,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5L1,19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45L17,19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_people_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_people_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..84c580902eaa43a60344ca71b88f1f541dea9a6b --- /dev/null +++ b/mobile/src/main/res/drawable/ic_people_outline_grey_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M16.5,13c-1.2,0 -3.07,0.34 -4.5,1 -1.43,-0.67 -3.3,-1 -4.5,-1C5.33,13 1,14.08 1,16.25L1,19h22v-2.75c0,-2.17 -4.33,-3.25 -6.5,-3.25zM12.5,17.5h-10v-1.25c0,-0.54 2.56,-1.75 5,-1.75s5,1.21 5,1.75v1.25zM21.5,17.5L14,17.5v-1.25c0,-0.46 -0.2,-0.86 -0.52,-1.22 0.88,-0.3 1.96,-0.53 3.02,-0.53 2.44,0 5,1.21 5,1.75v1.25zM7.5,12c1.93,0 3.5,-1.57 3.5,-3.5S9.43,5 7.5,5 4,6.57 4,8.5 5.57,12 7.5,12zM7.5,6.5c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2zM16.5,12c1.93,0 3.5,-1.57 3.5,-3.5S18.43,5 16.5,5 13,6.57 13,8.5s1.57,3.5 3.5,3.5zM16.5,6.5c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_person_grey_24dp.xml b/mobile/src/main/res/drawable/ic_person_grey_24dp.xml deleted file mode 100644 index b0ddd3e69c4a762dbaa87bebeddccfca3223cb64..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_person_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#757575" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_person_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_person_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..c69565bccc7386f9e43471fe68c3cc1cf7f3dc31 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_person_outline_grey_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#757575" android:pathData="M12,5.9c1.16,0 2.1,0.94 2.1,2.1s-0.94,2.1 -2.1,2.1S9.9,9.16 9.9,8s0.94,-2.1 2.1,-2.1m0,9c2.97,0 6.1,1.46 6.1,2.1v1.1L5.9,18.1L5.9,17c0,-0.64 3.13,-2.1 6.1,-2.1M12,4C9.79,4 8,5.79 8,8s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM12,13c-2.67,0 -8,1.34 -8,4v3h16v-3c0,-2.66 -5.33,-4 -8,-4z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_playlist_remove_black_120dp.xml b/mobile/src/main/res/drawable/ic_playlist_remove_black_120dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..350dcef2f3f7403cb95a333b833e298cf336e931 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_playlist_remove_black_120dp.xml @@ -0,0 +1,17 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: twitter.com/XT3000 +--> + +<vector android:height="120dp" android:viewportHeight="24" + android:viewportWidth="24" android:width="120dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M2,6V8H14V6H2M2,10V12H11V10H2M14.17,10.76L12.76,12.17L15.59,15L12.76,17.83L14.17,19.24L17,16.41L19.83,19.24L21.24,17.83L18.41,15L21.24,12.17L19.83,10.76L17,13.59L14.17,10.76M2,14V16H11V14H2Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_refresh_grey_24dp.xml b/mobile/src/main/res/drawable/ic_refresh_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..80bfc4f9c9f72ce49a9a2b0244f14cb94b171ecb --- /dev/null +++ b/mobile/src/main/res/drawable/ic_refresh_grey_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#757575" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_search_white_24dp.xml b/mobile/src/main/res/drawable/ic_search_white_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..c927d3d226214bab4c9d3c29eb406b16abd7fddb --- /dev/null +++ b/mobile/src/main/res/drawable/ic_search_white_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FFFFFF" + android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_settings_black_24dp.xml b/mobile/src/main/res/drawable/ic_settings_black_24dp.xml deleted file mode 100644 index ace746c40eed65dfe0291e475271d25427219100..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_settings_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#FF000000" - android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_settings_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_settings_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..15c2c15fa4de58989c322dd499135e4790dccb89 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_settings_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M19.43,12.97L21.54,14.63C21.73,14.78 21.78,15.05 21.66,15.27L19.66,18.73C19.54,18.95 19.27,19.03 19.05,18.95L16.56,17.94C16.04,18.34 15.5,18.67 14.87,18.93L14.5,21.58C14.46,21.82 14.25,22 14,22H10C9.75,22 9.54,21.82 9.5,21.58L9.13,18.93C8.5,18.68 7.96,18.34 7.44,17.94L4.95,18.95C4.73,19.03 4.46,18.95 4.34,18.73L2.34,15.27C2.21,15.05 2.27,14.78 2.46,14.63L4.57,12.97L4.5,12L4.57,11L2.46,9.37C2.27,9.22 2.21,8.95 2.34,8.73L4.34,5.27C4.46,5.05 4.73,4.96 4.95,5.05L7.44,6.05C7.96,5.66 8.5,5.32 9.13,5.07L9.5,2.42C9.54,2.18 9.75,2 10,2H14C14.25,2 14.46,2.18 14.5,2.42L14.87,5.07C15.5,5.32 16.04,5.66 16.56,6.05L19.05,5.05C19.27,4.96 19.54,5.05 19.66,5.27L21.66,8.73C21.78,8.95 21.73,9.22 21.54,9.37L19.43,11L19.5,12L19.43,12.97M6.5,12C6.5,12.58 6.59,13.13 6.75,13.66L4.68,15.36L5.43,16.66L7.95,15.72C8.69,16.53 9.68,17.12 10.8,17.37L11.24,20H12.74L13.18,17.37C14.3,17.13 15.3,16.54 16.05,15.73L18.56,16.67L19.31,15.37L17.24,13.67C17.41,13.14 17.5,12.58 17.5,12C17.5,11.43 17.41,10.87 17.25,10.35L19.31,8.66L18.56,7.36L16.06,8.29C15.31,7.47 14.31,6.88 13.19,6.63L12.75,4H11.25L10.81,6.63C9.69,6.88 8.69,7.47 7.94,8.29L5.44,7.35L4.69,8.65L6.75,10.35C6.59,10.87 6.5,11.43 6.5,12M12,8.5A3.5,3.5 0,0 1,15.5 12A3.5,3.5 0,0 1,12 15.5A3.5,3.5 0,0 1,8.5 12A3.5,3.5 0,0 1,12 8.5M12,10.5A1.5,1.5 0,0 0,10.5 12A1.5,1.5 0,0 0,12 13.5A1.5,1.5 0,0 0,13.5 12A1.5,1.5 0,0 0,12 10.5Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_share_white_24dp.xml b/mobile/src/main/res/drawable/ic_share_white_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..045bbc0c0e0460bb7b515c1d80914a253bc7efc3 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_share_white_24dp.xml @@ -0,0 +1,5 @@ +<vector android:height="24dp" android:tint="#FFFFFF" + android:viewportHeight="24.0" android:viewportWidth="24.0" + android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + <path android:fillColor="#FF000000" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_shield_key_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_shield_key_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..534b05c3d3b88283d43f6fb6c9af7493655164c4 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_shield_key_outline_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M21,11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1L21,5V11M12,21C15.75,20 19,15.54 19,11.22V6.3L12,3.18L5,6.3V11.22C5,15.54 8.25,20 12,21M12,6A3,3 0,0 1,15 9C15,10.31 14.17,11.42 13,11.83V14H15V16H13V18H11V11.83C9.83,11.42 9,10.31 9,9A3,3 0,0 1,12 6M12,8A1,1 0,0 0,11 9A1,1 0,0 0,12 10A1,1 0,0 0,13 9A1,1 0,0 0,12 8Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_shortcut_habpanel_foreground.xml b/mobile/src/main/res/drawable/ic_shortcut_habpanel_foreground.xml new file mode 100644 index 0000000000000000000000000000000000000000..26206f7f2f9599e7b3efdfee6d68a8b252d3908b --- /dev/null +++ b/mobile/src/main/res/drawable/ic_shortcut_habpanel_foreground.xml @@ -0,0 +1,12 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="108dp" + android:height="108dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <group android:translateX="12" + android:translateY="12"> + <path + android:pathData="M19,5V7H15V5H19M9,5V11H5V5H9M19,13V19H15V13H19M9,17V19H5V17H9M21,3H13V9H21V3M11,3H3V13H11V3M21,11H13V21H21V11M11,15H3V21H11V15Z" + android:fillColor="#ff5722"/> + </group> +</vector> diff --git a/mobile/src/main/res/drawable/ic_shortcut_notifications_foreground.xml b/mobile/src/main/res/drawable/ic_shortcut_notifications_foreground.xml new file mode 100644 index 0000000000000000000000000000000000000000..5a262795dda3aec97d5570769c5d80f76c65c084 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_shortcut_notifications_foreground.xml @@ -0,0 +1,12 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="108dp" + android:height="108dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <group android:translateX="12" + android:translateY="12"> + <path + android:pathData="M16,17H7V10.5C7,8 9,6 11.5,6C14,6 16,8 16,10.5M18,16V10.5C18,7.43 15.86,4.86 13,4.18V3.5A1.5,1.5 0,0 0,11.5 2A1.5,1.5 0,0 0,10 3.5V4.18C7.13,4.86 5,7.43 5,10.5V16L3,18V19H20V18M11.5,22A2,2 0,0 0,13.5 20H9.5A2,2 0,0 0,11.5 22Z" + android:fillColor="#ff5722"/> + </group> +</vector> diff --git a/mobile/src/main/res/drawable/ic_shortcut_voice_recognition_foreground.xml b/mobile/src/main/res/drawable/ic_shortcut_voice_recognition_foreground.xml new file mode 100644 index 0000000000000000000000000000000000000000..5cde42831130151f9e54d143d83f767c5dba9543 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_shortcut_voice_recognition_foreground.xml @@ -0,0 +1,12 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="108dp" + android:height="108dp" + android:viewportWidth="48" + android:viewportHeight="48"> + <group android:translateX="12" + android:translateY="12"> + <path + android:pathData="M17.3,11C17.3,14 14.76,16.1 12,16.1C9.24,16.1 6.7,14 6.7,11H5C5,14.41 7.72,17.23 11,17.72V21H13V17.72C16.28,17.23 19,14.41 19,11M10.8,4.9C10.8,4.24 11.34,3.7 12,3.7C12.66,3.7 13.2,4.24 13.2,4.9L13.19,11.1C13.19,11.76 12.66,12.3 12,12.3C11.34,12.3 10.8,11.76 10.8,11.1M12,14A3,3 0,0 0,15 11V5A3,3 0,0 0,12 2A3,3 0,0 0,9 5V11A3,3 0,0 0,12 14Z" + android:fillColor="#ff5722"/> + </group> +</vector> diff --git a/mobile/src/main/res/drawable/ic_signal_cellular_off_black_24dp.xml b/mobile/src/main/res/drawable/ic_signal_cellular_off_black_24dp.xml deleted file mode 100644 index 57d9df1d0cbd00b054b212157955f2a1bce26d1a..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_signal_cellular_off_black_24dp.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> - <path - android:fillColor="#FF000000" - android:pathData="M21,1l-8.59,8.59L21,18.18V1zM4.77,4.5L3.5,5.77l6.36,6.36L1,21h17.73l2,2L22,21.73 4.77,4.5z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_smartphone_grey_24dp.xml b/mobile/src/main/res/drawable/ic_smartphone_grey_24dp.xml deleted file mode 100644 index b2f153245e3bc2330469348632f085abdc611aed..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_smartphone_grey_24dp.xml +++ /dev/null @@ -1,5 +0,0 @@ -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#FF000000" android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z"/> -</vector> diff --git a/mobile/src/main/res/drawable/ic_translate_grey_24dp.xml b/mobile/src/main/res/drawable/ic_translate_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..825905709e31e7881930506f6c1a33bec04a64e7 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_translate_grey_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M12.87,15.07L10.33,12.56L10.36,12.53C12.1,10.59 13.34,8.36 14.07,6H17V4H10V2H8V4H1V6H12.17C11.5,7.92 10.44,9.75 9,11.35C8.07,10.32 7.3,9.19 6.69,8H4.69C5.42,9.63 6.42,11.17 7.67,12.56L2.58,17.58L4,19L9,14L12.11,17.11L12.87,15.07M18.5,10H16.5L12,22H14L15.12,19H19.87L21,22H23L18.5,10M15.88,17L17.5,12.67L19.12,17H15.88Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_tree_grey_24dp.xml b/mobile/src/main/res/drawable/ic_tree_grey_24dp.xml deleted file mode 100644 index afce241bfb605a01b6387352c0c8255bea4c4c29..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/drawable/ic_tree_grey_24dp.xml +++ /dev/null @@ -1,18 +0,0 @@ -<!-- - Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), - with Reserved Font Name Material Design Icons. - Copyright (c) 2014, Google (http://www.google.com/design/) - uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE - - This Font Software is licensed under the SIL Open Font License, Version 1.1. - This license is copied below, and is also available with a FAQ at: - http://scripts.sil.org/OFL - - Author: https://twitter.com/Templarian ---> - -<vector android:height="24dp" android:tint="#757575" - android:viewportHeight="24.0" android:viewportWidth="24.0" - android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#000" android:pathData="M11,21V16.74C10.53,16.91 10.03,17 9.5,17C7,17 5,15 5,12.5C5,11.23 5.5,10.09 6.36,9.27C6.13,8.73 6,8.13 6,7.5C6,5 8,3 10.5,3C12.06,3 13.44,3.8 14.25,5C14.33,5 14.41,5 14.5,5A5.5,5.5 0 0,1 20,10.5A5.5,5.5 0 0,1 14.5,16C14,16 13.5,15.93 13,15.79V21H11Z" /> -</vector> \ No newline at end of file diff --git a/mobile/src/main/res/drawable/ic_tree_outline_grey_24dp.xml b/mobile/src/main/res/drawable/ic_tree_outline_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..837e55c7e8ea38ca09c71ae32f3edc675aa58ddb --- /dev/null +++ b/mobile/src/main/res/drawable/ic_tree_outline_grey_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/XT3000 +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M10.5,3C8,3 6,5 6,7.5C6,8.11 6.13,8.71 6.37,9.27C5.5,10.12 5,11.28 5,12.5C5,15 7,17 9.5,17C10,17 10.5,16.89 11,16.72V21H13V15.77C13.5,15.91 14,16 14.5,16A5.5,5.5 0,0 0,20 10.5A5.5,5.5 0,0 0,14.5 5C14.41,5 14.33,5 14.24,5C13.41,3.76 12,3 10.5,3M10.5,5C11.82,5 12.91,6.03 13,7.35C13.46,7.12 14,7 14.5,7A3.5,3.5 0,0 1,18 10.5A3.5,3.5 0,0 1,14.5 14C13.54,14 12.63,13.61 11.96,12.91C11.76,14.12 10.72,15 9.5,15A2.5,2.5 0,0 1,7 12.5C7,11.12 7.8,10.54 9,9.79C8.2,8.76 8,8.16 8,7.5A2.5,2.5 0,0 1,10.5 5Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_vibrate_off_grey_24dp.xml b/mobile/src/main/res/drawable/ic_vibrate_off_grey_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..72b553475a8375db7ec66cb18837e0fd32145fb7 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_vibrate_off_grey_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/MrGrigri +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#757575" + android:pathData="M8.2,5L6.55,3.35C6.81,3.12 7.15,3 7.5,3H16.5A1.5,1.5 0,0 1,18 4.5V14.8L16,12.8V5H8.2M0,15H2V9H0V15M21,17V7H19V15.8L20.2,17H21M3,17H5V7H3V17M18,17.35L22.11,21.46L20.84,22.73L18,19.85C17.83,20.54 17.21,21 16.5,21H7.5A1.5,1.5 0,0 1,6 19.5V7.89L1.11,3L2.39,1.73L6.09,5.44L8,7.34L16,15.34L18,17.34V17.35M16,17.89L8,9.89V19H16V17.89M22,9V15H24V9H22Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_view_dashboard_outline_black_24dp.xml b/mobile/src/main/res/drawable/ic_view_dashboard_outline_black_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..683e101a5bad2fbb54ef8bc95daf53420e89810d --- /dev/null +++ b/mobile/src/main/res/drawable/ic_view_dashboard_outline_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M19,5V7H15V5H19M9,5V11H5V5H9M19,13V19H15V13H19M9,17V19H5V17H9M21,3H13V9H21V3M11,3H3V13H11V3M21,11H13V21H21V11M11,15H3V21H11V15Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_wifi_strength_off_outline_black_24dp.xml b/mobile/src/main/res/drawable/ic_wifi_strength_off_outline_black_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..d5c833eaa096c4c7c3f8472a39a6270759dae5da --- /dev/null +++ b/mobile/src/main/res/drawable/ic_wifi_strength_off_outline_black_24dp.xml @@ -0,0 +1,22 @@ +<!-- + Copyright (c) 2014, Austin Andrews (http://materialdesignicons.com/), + with Reserved Font Name Material Design Icons. + Copyright (c) 2014, Google (http://www.google.com/design/) + uses the license at https://github.com/google/material-design-icons/blob/master/LICENSE + + This Font Software is licensed under the SIL Open Font License, Version 1.1. + This license is copied below, and is also available with a FAQ at: + http://scripts.sil.org/OFL + + Author: https://twitter.com/XT3000 +--> + +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M3.27,1.44L2,2.72L4.05,4.77C2.75,5.37 1.5,6.11 0.38,7C4.2,11.8 8.14,16.67 12,21.5L15.91,16.63L19.23,19.95L20.5,18.68C14.87,13.04 3.27,1.44 3.27,1.44M12,3C10.6,3 9.21,3.17 7.86,3.5L9.56,5.19C10.37,5.07 11.18,5 12,5C15.07,5 18.09,5.86 20.71,7.45L16.76,12.38L18.18,13.8C20.08,11.43 22,9 23.65,7C20.32,4.41 16.22,3 12,3M5.57,6.29L14.5,15.21L12,18.3L3.27,7.44C4,7 4.78,6.61 5.57,6.29Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/ic_wifi_strength_outline_black_24dp.xml b/mobile/src/main/res/drawable/ic_wifi_strength_outline_black_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..8511f7761b8bffbddc460be1122478ef207d4468 --- /dev/null +++ b/mobile/src/main/res/drawable/ic_wifi_strength_outline_black_24dp.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:fillColor="#FF000000" + android:pathData="M12,3C7.79,3 3.7,4.41 0.38,7H0.36C4.24,11.83 8.13,16.66 12,21.5C15.89,16.66 19.77,11.83 23.64,7H23.65C20.32,4.41 16.22,3 12,3M12,5C15.07,5 18.09,5.86 20.71,7.45L12,18.3L3.27,7.44C5.9,5.85 8.92,5 12,5Z"/> +</vector> diff --git a/mobile/src/main/res/drawable/voice_widget_preview.png b/mobile/src/main/res/drawable/voice_widget_preview.png index 7cb874d7d6823f0687be35f3ea663304f0bf5a32..73ec65f9f011294461dab74312df06a2da5991ab 100644 Binary files a/mobile/src/main/res/drawable/voice_widget_preview.png and b/mobile/src/main/res/drawable/voice_widget_preview.png differ diff --git a/mobile/src/main/res/drawable/voice_widget_preview_with_icon.png b/mobile/src/main/res/drawable/voice_widget_preview_with_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9c02ee766c3200fa6a3c55bf0c8fff01ba81099a Binary files /dev/null and b/mobile/src/main/res/drawable/voice_widget_preview_with_icon.png differ diff --git a/mobile/src/main/res/layout/activity_item_picker.xml b/mobile/src/main/res/layout/activity_item_picker.xml new file mode 100644 index 0000000000000000000000000000000000000000..6bcc42524441117bf1a2449d658c7f7f7059c3b4 --- /dev/null +++ b/mobile/src/main/res/layout/activity_item_picker.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <androidx.appcompat.widget.Toolbar + android:id="@+id/openhab_toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:elevation="8dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light" + app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> + + <androidx.swiperefreshlayout.widget.SwipeRefreshLayout + android:id="@+id/swipe_container" + android:layout_width="match_parent" + android:layout_height="0dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/openhab_toolbar"> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@android:id/list" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:visibility="gone" /> + + <LinearLayout + android:id="@android:id/empty" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:orientation="vertical" + tools:visibility="visible"> + + <androidx.appcompat.widget.AppCompatImageView + android:id="@+id/watermark" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + app:tint="@color/empty_list_text_color" + app:tintMode="src_in" + app:srcCompat="@drawable/ic_connection_error" /> + + <TextView + android:id="@+id/empty_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="@color/empty_list_text_color" + android:textAlignment="center" + tools:text="Some error occured" /> + + <TextView + android:id="@+id/retry_button" + style="?attr/buttonBarButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + tools:text="@string/try_again_button" /> + + </LinearLayout> + </FrameLayout> + </androidx.swiperefreshlayout.widget.SwipeRefreshLayout> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/activity_log.xml b/mobile/src/main/res/layout/activity_log.xml new file mode 100644 index 0000000000000000000000000000000000000000..584dd1715b3e68400cc8bdfb92f4d63520fc77fc --- /dev/null +++ b/mobile/src/main/res/layout/activity_log.xml @@ -0,0 +1,98 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <androidx.appcompat.widget.Toolbar + android:id="@+id/openhab_toolbar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:background="?attr/colorPrimary" + android:elevation="8dp" + app:popupTheme="@style/ThemeOverlay.AppCompat.Light" + app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> + + <com.google.android.material.floatingactionbutton.FloatingActionButton + android:id="@+id/shareFab" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end|bottom" + android:layout_marginEnd="16dp" + android:layout_marginRight="16dp" + android:layout_marginBottom="16dp" + app:fabSize="normal" + android:src="@drawable/ic_share_white_24dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + android:visibility="gone" + tools:visibility="visible" /> + + <ScrollView + android:id="@+id/scrollview" + android:layout_width="match_parent" + android:layout_height="0dp" + android:fillViewport="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintTop_toBottomOf="@+id/openhab_toolbar"> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + tools:context=".ui.LogActivity"> + + <TextView + android:id="@+id/log" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:clickable="true" + android:focusable="true" + android:textSize="12sp" + android:typeface="monospace" + app:fontFamily="monospace" + tools:text="D/WidgetListFragment: onCreate()\nD/WidgetListFragment: isAdded = false\nI/WidgetListFragment: onCreateView" /> + + <ProgressBar + android:id="@+id/progressBar" + style="?attr/indeterminateProgressStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:layout_gravity="center" + android:visibility="visible"/> + + <LinearLayout + android:id="@android:id/empty" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:orientation="vertical" + android:visibility="gone" + tools:visibility="visible"> + + <androidx.appcompat.widget.AppCompatImageView + android:id="@+id/watermark" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + app:tint="@color/empty_list_text_color" + app:tintMode="src_in" + android:src="@drawable/ic_playlist_remove_black_120dp" /> + + <TextView + android:id="@+id/empty_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="@color/empty_list_text_color" + android:text="@string/empty_log" /> + </LinearLayout> + </FrameLayout> + </ScrollView> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/fragment_fullscreenwebview.xml b/mobile/src/main/res/layout/fragment_fullscreenwebview.xml new file mode 100644 index 0000000000000000000000000000000000000000..881eab5848a85ea665d6d83fe3e263a2c74ca8f4 --- /dev/null +++ b/mobile/src/main/res/layout/fragment_fullscreenwebview.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + <WebView + android:id="@+id/webview" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:visibility="gone"/> + + <LinearLayout + android:id="@android:id/empty" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:orientation="vertical" + android:visibility="gone" + tools:visibility="visible"> + + <androidx.appcompat.widget.AppCompatImageView + android:id="@+id/watermark" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + app:tint="@color/empty_list_text_color" + app:tintMode="src_in" + android:src="@drawable/ic_connection_error" /> + + <TextView + android:id="@+id/empty_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="@color/empty_list_text_color" + tools:text="Some error occured" /> + + <TextView + android:id="@+id/retry_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + style="?attr/buttonBarButtonStyle" + android:text="@string/try_again_button" /> + + </LinearLayout> + + <ProgressBar + android:id="@+id/progress" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center"/> + +</FrameLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/fragment_status.xml b/mobile/src/main/res/layout/fragment_status.xml index cd30820c156bec53a29dba6e0a6f94fa8a7f2bff..50da39dda0dd7621a2b0da2078f08ca85c7d41ed 100644 --- a/mobile/src/main/res/layout/fragment_status.xml +++ b/mobile/src/main/res/layout/fragment_status.xml @@ -1,48 +1,66 @@ -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="center_horizontal|center_vertical" - android:orientation="vertical"> - <ImageView - android:id="@+id/image" - android:layout_width="100dp" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:adjustViewBounds="true" - android:gravity="center" - android:scaleType="fitXY" - android:src="@drawable/ic_signal_cellular_off_black_24dp" - tools:ignore="contentDescription"/> +<ScrollView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:fillViewport="true" + android:layout_width="match_parent" + android:layout_height="match_parent" > + <LinearLayout + android:gravity="center_horizontal|center_vertical" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="match_parent"> + <ImageView + android:id="@+id/image" + android:paddingTop="4dp" + android:layout_width="100dp" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:adjustViewBounds="true" + android:gravity="center" + android:scaleType="fitXY" + android:src="@drawable/ic_network_strength_off_outline_black_24dp" + tools:ignore="contentDescription"/> - <TextView - android:id="@+id/description" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:gravity="center" - android:padding="16dp" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="@color/empty_list_text_color" - tools:text="Some status message" /> + <TextView + android:id="@+id/description" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:padding="16dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="@color/empty_list_text_color" + tools:text="Some status message" /> - <ProgressBar - android:id="@+id/progress" - style="?attr/indeterminateProgressStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_margin="8dp" - android:layout_gravity="center_horizontal" /> + <ProgressBar + android:id="@+id/progress" + style="?attr/indeterminateProgressStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_margin="8dp" + android:layout_gravity="center_horizontal" /> - <Button - android:id="@+id/button" - style="?attr/buttonBarButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:clickable="true" - android:focusable="true" - android:gravity="center" - tools:text="Some action" /> + <Button + android:id="@+id/button1" + style="?attr/buttonBarButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:clickable="true" + android:focusable="true" + android:gravity="center" + tools:text="Some action" /> -</LinearLayout> \ No newline at end of file + <Button + android:id="@+id/button2" + style="?attr/buttonBarButtonStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:clickable="true" + android:focusable="true" + android:gravity="center" + tools:text="Some other action" /> + + </LinearLayout> +</ScrollView> \ No newline at end of file diff --git a/mobile/src/main/res/layout/fragment_widgetlist.xml b/mobile/src/main/res/layout/fragment_widgetlist.xml index a51313217168800c223e43527c8b9b2f5905b6d9..73dc6c5e60754a2ec860029eba026e2c48a3bff5 100644 --- a/mobile/src/main/res/layout/fragment_widgetlist.xml +++ b/mobile/src/main/res/layout/fragment_widgetlist.xml @@ -1,13 +1,51 @@ <?xml version="1.0" encoding="utf-8"?> -<androidx.swiperefreshlayout.widget.SwipeRefreshLayout - xmlns:android="http://schemas.android.com/apk/res/android" +<org.openhab.habdroid.ui.widget.RecyclerViewSwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent"> - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/recyclerview" + <FrameLayout android:layout_width="match_parent" - android:layout_height="match_parent" /> + android:layout_height="match_parent"> -</androidx.swiperefreshlayout.widget.SwipeRefreshLayout> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recyclerview" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:visibility="gone" /> + + <LinearLayout + android:id="@android:id/empty" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:orientation="vertical" + tools:visibility="visible"> + + <androidx.appcompat.widget.AppCompatImageView + android:id="@+id/watermark" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + app:tint="@color/empty_list_text_color" + app:tintMode="src_in" + android:src="@drawable/ic_eye_off_outline_grey_120dp" /> + + <TextView + android:id="@+id/empty_message" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:padding="16dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="@color/empty_list_text_color" + android:gravity="center" + android:text="@string/empty_page" /> + </LinearLayout> + + </FrameLayout> + +</org.openhab.habdroid.ui.widget.RecyclerViewSwipeRefreshLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/fragment_writenfc.xml b/mobile/src/main/res/layout/fragment_writenfc.xml index 89e791833b453f91e137405aadef68b1a96e0950..90a0a2cc314cc07c15497986ced3cc73b960d052 100644 --- a/mobile/src/main/res/layout/fragment_writenfc.xml +++ b/mobile/src/main/res/layout/fragment_writenfc.xml @@ -1,66 +1,60 @@ <?xml version="1.0" encoding="utf-8"?> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="center_horizontal|center_vertical" - android:orientation="vertical"> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_horizontal|center_vertical" + android:orientation="vertical"> <LinearLayout - android:layout_width="wrap_content" + android:id="@android:id/empty" + android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_gravity="center_vertical" android:orientation="vertical" - android:gravity="center_horizontal|center_vertical" - android:layout_weight="6"> - <ImageView + tools:visibility="visible"> + + <androidx.appcompat.widget.AppCompatImageView android:id="@+id/nfc_watermark" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" - android:adjustViewBounds="true" - android:gravity="center" - android:scaleType="fitXY" - android:src="@drawable/ic_nfc_black_180dp" - tools:ignore="contentDescription"/> + android:layout_gravity="center_horizontal" + android:padding="16dp" + app:tint="@color/empty_list_text_color" + app:tintMode="src_in" + android:src="@drawable/ic_nfc_black_180dp" /> <TextView android:id="@+id/write_tag_message" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" - android:gravity="center" - android:paddingLeft="20dp" - android:paddingRight="20dp" - android:text="@string/info_write_tag" + android:layout_gravity="center_horizontal" + android:padding="16dp" android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="@color/empty_list_text_color"/> - <Button + android:textColor="@color/empty_list_text_color" + android:text="@string/info_write_tag" /> + + <TextView android:id="@+id/nfc_activate" - style="?android:attr/buttonBarButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="center" - android:clickable="true" - android:focusable="true" - android:gravity="center" + android:layout_gravity="center_horizontal" + style="?attr/buttonBarButtonStyle" android:text="@string/nfc_activate" - android:textAppearance="?android:attr/textAppearanceMedium" - android:textColor="?android:attr/textColorLink" - android:visibility="gone"/> - </LinearLayout> - <LinearLayout - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:orientation="vertical" - android:gravity="center_horizontal" - android:layout_weight="3"> + android:visibility="gone" + tools:visibility="visible" /> + <ProgressBar android:id="@+id/nfc_wait_progress" - style="?android:attr/progressBarStyleSmall" + style="?attr/indeterminateProgressStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_margin="8dp" android:layout_gravity="center_horizontal" - android:gravity="center_horizontal" - android:visibility="gone"/> + android:visibility="gone" + tools:visibility="visible" /> + </LinearLayout> </LinearLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/ssl_client_cert_pref.xml b/mobile/src/main/res/layout/help_icon_pref.xml similarity index 80% rename from mobile/src/main/res/layout/ssl_client_cert_pref.xml rename to mobile/src/main/res/layout/help_icon_pref.xml index 00458a4d07fe65f064e756d25892f143d60bc84d..e79383d7bb43332dc56e813fa42d22a2d6baaa3a 100644 --- a/mobile/src/main/res/layout/ssl_client_cert_pref.xml +++ b/mobile/src/main/res/layout/help_icon_pref.xml @@ -5,5 +5,4 @@ android:layout_height="48dp" android:src="@drawable/ic_help_circle_outline" android:background="?attr/selectableItemBackgroundBorderless" - android:contentDescription="@string/settings_openhab_sslclientcert_howto_summary" android:scaleType="center" /> \ No newline at end of file diff --git a/mobile/src/main/res/layout/item_updating_pref_dialog.xml b/mobile/src/main/res/layout/item_updating_pref_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..44908f1a97b485d1310d5d9cfa806ea90250a51a --- /dev/null +++ b/mobile/src/main/res/layout/item_updating_pref_dialog.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8"?> +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:clipToPadding="false" + android:padding="?attr/dialogPreferredPadding"> + + <androidx.appcompat.widget.SwitchCompat + android:id="@+id/enabled" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + <ImageView + android:id="@+id/help_icon" + android:layout_width="48dp" + android:layout_height="48dp" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_marginEnd="-12dp" + android:layout_marginRight="-12dp" + android:layout_marginTop="-12dp" + android:src="@drawable/ic_help_circle_outline" + android:background="?attr/selectableItemBackgroundBorderless" + android:scaleType="center" /> + + <TextView + android:id="@+id/enabledLabel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_toEndOf="@id/enabled" + android:layout_toRightOf="@id/enabled" + android:layout_toStartOf="@id/help_icon" + android:layout_toLeftOf="@id/help_icon" + android:layout_marginStart="4dp" + android:layout_marginLeft="4dp" + android:layout_alignBaseline="@id/enabled" /> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/itemNameWrapper" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_below="@id/enabled" + android:layout_marginTop="12dp" + android:hint="@string/settings_item_pref_item_name"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/itemName" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:singleLine="true" /> + + </com.google.android.material.textfield.TextInputLayout> + +</RelativeLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/itempickerlist_item.xml b/mobile/src/main/res/layout/itempickerlist_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..f773a988061aaacb7ea1d97154170c65fff9387e --- /dev/null +++ b/mobile/src/main/res/layout/itempickerlist_item.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="?attr/listPreferredItemHeight" + android:background="?attr/selectableItemBackground" + android:focusable="false" + android:orientation="horizontal"> + + <org.openhab.habdroid.ui.widget.WidgetImageView + android:id="@+id/itemIcon" + android:layout_width="@dimen/notificationlist_icon_size" + android:layout_height="@dimen/notificationlist_icon_size" + android:layout_marginLeft="16dp" + android:layout_marginRight="16dp" + android:layout_gravity="center_vertical" + android:scaleType="centerInside" + app:progressIndicator="@drawable/ic_openhab_appicon_24dp" + app:fallback="@drawable/ic_openhab_appicon_24dp" + tools:src="@drawable/ic_openhab_appicon_24dp" /> + + <RelativeLayout + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="1" + android:layout_gravity="center_vertical" + android:layout_marginRight="16dp" + android:layout_marginEnd="16dp"> + + <TextView + android:id="@+id/itemName" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textAppearance="@style/TextAppearance.AppCompat.Body1" + tools:text="AndroidAlarmClock" /> + + <TextView + android:id="@+id/itemLabel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/itemName" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:textAppearance="@style/TextAppearance.AppCompat.Caption" + tools:text="Alarm clock" /> + + <TextView + android:id="@+id/itemType" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_below="@id/itemName" + android:layout_toEndOf="@id/itemLabel" + android:layout_toRightOf="@id/itemLabel" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:gravity="end|right" + android:textAppearance="@style/TextAppearance.AppCompat.Caption" + android:textStyle="bold" + tools:text="Number" /> + + </RelativeLayout> + +</LinearLayout> diff --git a/mobile/src/main/res/layout/notificationlist_item.xml b/mobile/src/main/res/layout/notificationlist_item.xml index af1706d92ffc118c3bd5f17d8793f26641b05bce..0bce18c7da46b9e61687ccb69d6c04f5b68120e3 100644 --- a/mobile/src/main/res/layout/notificationlist_item.xml +++ b/mobile/src/main/res/layout/notificationlist_item.xml @@ -11,8 +11,8 @@ <org.openhab.habdroid.ui.widget.WidgetImageView android:id="@+id/notificationImage" - android:layout_width="40dp" - android:layout_height="40dp" + android:layout_width="@dimen/notificationlist_icon_size" + android:layout_height="@dimen/notificationlist_icon_size" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_gravity="center_vertical" diff --git a/mobile/src/main/res/layout/select_dialog_singlechoice.xml b/mobile/src/main/res/layout/select_dialog_singlechoice.xml new file mode 100644 index 0000000000000000000000000000000000000000..797eca0a0d845c7bcce7aafc59cffa1787029e02 --- /dev/null +++ b/mobile/src/main/res/layout/select_dialog_singlechoice.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2008 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@android:id/text1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="48dp" + android:textAppearance="?android:attr/textAppearanceMedium" + android:textColor="?android:attr/textColorAlertDialogListItem" + android:gravity="center_vertical" + android:paddingLeft="12dp" + android:paddingStart="12dp" + android:paddingRight="7dp" + android:paddingEnd="7dp" + android:drawableLeft="?android:attr/listChoiceIndicatorSingle" + android:drawableStart="?android:attr/listChoiceIndicatorSingle" + android:drawablePadding="12dp" + android:ellipsize="marquee" /> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widget_voice.xml b/mobile/src/main/res/layout/widget_voice.xml index ef2b976a59709800090d2da9e703e74ecc36f1b3..c8b12e67bc8ac4bc2c7d58f19933686c28ada885 100644 --- a/mobile/src/main/res/layout/widget_voice.xml +++ b/mobile/src/main/res/layout/widget_voice.xml @@ -1,26 +1,30 @@ -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:padding="@dimen/widget_margin" - android:orientation="vertical" - android:weightSum="100" - android:background="#6333" > - <ImageView - android:id="@+id/btn_mic" - android:layout_width="fill_parent" - android:layout_height="0dp" - android:layout_weight="70" - android:src="@drawable/ic_mic_white_24dp" - android:contentDescription="@string/info_voice_input" /> +<FrameLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="@dimen/widget_margin" + android:background="#6333" + android:id="@+id/outer_layout"> <ImageView - android:id="@+id/btn_open_main" - android:layout_width="fill_parent" - android:layout_height="20dp" - android:layout_weight="30" - android:padding="0dp" - android:scaleType="fitCenter" - android:src="@mipmap/icon" - android:background="#C333" - android:contentDescription="@string/content_description_open_openhab" /> -</LinearLayout> \ No newline at end of file + android:id="@+id/btn_open_main" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_margin="4dp" + android:padding="0dp" + android:alpha="0.3" + android:scaleType="fitCenter" + android:src="@mipmap/icon" + tools:ignore="ContentDescription"/> + <ImageView + android:id="@+id/btn_mic" + android:layout_margin="16dp" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@drawable/ic_microphone_outline_white_120dp" + android:contentDescription="@string/info_voice_input" + android:scaleType="fitCenter"/> + +</FrameLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widget_voice_with_icon.xml b/mobile/src/main/res/layout/widget_voice_with_icon.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b53e71b5be1ee7312d3f1e82627fa5f0a80aff4 --- /dev/null +++ b/mobile/src/main/res/layout/widget_voice_with_icon.xml @@ -0,0 +1,34 @@ +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="@dimen/widget_margin" + android:orientation="vertical" + android:weightSum="100" + android:background="#6333" + android:id="@+id/outer_layout"> + <ImageView + android:id="@+id/btn_mic" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="70" + android:src="@drawable/ic_microphone_outline_white_120dp" + android:contentDescription="@string/info_voice_input" /> + + <FrameLayout + android:id="@+id/btn_open_main" + android:layout_width="fill_parent" + android:layout_height="20dp" + android:layout_weight="30" + android:padding="0dp" + android:scaleType="fitCenter" + android:background="#C333" + android:contentDescription="@string/content_description_open_openhab"> + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:src="@mipmap/icon" + android:layout_margin="4dp" + android:scaleType="fitCenter" /> + </FrameLayout> +</LinearLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widgetlist_frameitem.xml b/mobile/src/main/res/layout/widgetlist_frameitem.xml index bfae81068a3f8bbbaac1c31b1fcaef0729523a09..4a5e2f0aad12ac33823a8d289147e8b32448489d 100644 --- a/mobile/src/main/res/layout/widgetlist_frameitem.xml +++ b/mobile/src/main/res/layout/widgetlist_frameitem.xml @@ -27,6 +27,7 @@ <TextView android:id="@+id/widgetlabel" + android:textDirection="locale" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="8dp" diff --git a/mobile/src/main/res/layout/widgetlist_iconsmallvaluetext.xml b/mobile/src/main/res/layout/widgetlist_iconsmallvaluetext.xml index 42d2806d0a0dff9317a079983428cf48c56d6acd..e8de2b1731eab0073d14c9f46dc37271de5684f3 100644 --- a/mobile/src/main/res/layout/widgetlist_iconsmallvaluetext.xml +++ b/mobile/src/main/res/layout/widgetlist_iconsmallvaluetext.xml @@ -11,6 +11,7 @@ android:layout_gravity="center_vertical" android:paddingLeft="4dp" android:paddingRight="4dp" + android:textDirection="locale" android:textAppearance="?android:attr/textAppearanceSmall" /> </merge> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widgetlist_icontext.xml b/mobile/src/main/res/layout/widgetlist_icontext.xml index 4189f1b22813e1986b43651724fe7eaff7e1538b..a8bf652b3ae2e283a12664654fff953507a22b52 100644 --- a/mobile/src/main/res/layout/widgetlist_icontext.xml +++ b/mobile/src/main/res/layout/widgetlist_icontext.xml @@ -4,13 +4,13 @@ android:id="@+id/widgeticon" android:paddingTop="6dip" android:paddingBottom="6dip" - android:layout_width="50dip" - android:layout_height="50dip" + android:layout_width="@dimen/widgetlist_icon_size" + android:layout_height="@dimen/widgetlist_icon_size" android:layout_gravity="center_vertical" - android:maxWidth="50dip" - android:minWidth="50dip" - android:maxHeight="50dip" - android:minHeight="50dip" /> + android:maxWidth="@dimen/widgetlist_icon_size" + android:minWidth="@dimen/widgetlist_icon_size" + android:maxHeight="@dimen/widgetlist_icon_size" + android:minHeight="@dimen/widgetlist_icon_size" /> <TextView android:id="@+id/widgetlabel" @@ -20,6 +20,7 @@ android:layout_weight="1" android:ellipsize="end" android:maxLines="1" + android:textDirection="locale" android:textAppearance="?android:attr/textAppearanceMedium" /> </merge> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widgetlist_iconvaluetext.xml b/mobile/src/main/res/layout/widgetlist_iconvaluetext.xml index fbbfa19ace33e1cb735e5e7afe7e876a4f9044dd..8515f25119969e84b5f5d605aba6ca88aeb65594 100644 --- a/mobile/src/main/res/layout/widgetlist_iconvaluetext.xml +++ b/mobile/src/main/res/layout/widgetlist_iconvaluetext.xml @@ -11,6 +11,7 @@ android:layout_gravity="center_vertical" android:paddingLeft="8dp" android:paddingRight="8dp" + android:textDirection="anyRtl" android:textAppearance="?android:attr/textAppearanceMedium" /> </merge> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widgetlist_sectionswitchitem_button.xml b/mobile/src/main/res/layout/widgetlist_sectionswitchitem_button.xml index 0847559ac8c1e960143c5c92b5aa6cb5f51c513e..ad647b35a73d1c1da1c9a8e60edc00898cb60dde 100644 --- a/mobile/src/main/res/layout/widgetlist_sectionswitchitem_button.xml +++ b/mobile/src/main/res/layout/widgetlist_sectionswitchitem_button.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <org.openhab.habdroid.ui.widget.SegmentedControlButton xmlns:android="http://schemas.android.com/apk/res/android" - style="@style/sectionButtonStyle" + style="@style/SectionButton" android:text="" android:focusable="false" android:focusableInTouchMode="false" /> diff --git a/mobile/src/main/res/layout/widgetlist_setpointitem.xml b/mobile/src/main/res/layout/widgetlist_setpointitem.xml index 35c5fecf19ad4c4c1b4a41340e92633881febca3..da668ccdabb2537336ac53c979c1acd9d234f565 100644 --- a/mobile/src/main/res/layout/widgetlist_setpointitem.xml +++ b/mobile/src/main/res/layout/widgetlist_setpointitem.xml @@ -8,11 +8,25 @@ <ImageView android:id="@+id/down_arrow" - android:layout_width="48dp" - android:layout_height="30dp" + android:layout_width="24dp" + android:layout_height="24dp" android:layout_gravity="center_vertical" android:scaleType="center" android:src="?themedSpinnerCaret" android:contentDescription="@string/content_description_open_number_picker" /> + <ImageButton + style="@style/ActionButton" + android:id="@+id/up_button" + android:padding="4dp" + android:contentDescription="@string/content_description_increase_item_value" + android:src="?themedArrowUpIcon" /> + + <ImageButton + style="@style/ActionButton" + android:id="@+id/down_button" + android:padding="4dp" + android:contentDescription="@string/content_description_decrease_item_value" + android:src="?themedArrowDownIcon" /> + </LinearLayout> \ No newline at end of file diff --git a/mobile/src/main/res/layout/widgetlist_slideritem.xml b/mobile/src/main/res/layout/widgetlist_slideritem.xml index d06a08469731352d926ec8488b9643adaab092a6..e5cac56f935a62442243273ad6efd8c43e005595 100644 --- a/mobile/src/main/res/layout/widgetlist_slideritem.xml +++ b/mobile/src/main/res/layout/widgetlist_slideritem.xml @@ -8,7 +8,7 @@ <SeekBar android:id="@+id/seekbar" - android:layout_width="130dp" + android:layout_width="@dimen/widgetlist_slider_width" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:max="100" /> diff --git a/mobile/src/main/res/menu/item_picker.xml b/mobile/src/main/res/menu/item_picker.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1791ec6b0e0ebdb7d09d690354576c4c349c80b --- /dev/null +++ b/mobile/src/main/res/menu/item_picker.xml @@ -0,0 +1,10 @@ +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <item + android:id="@+id/app_bar_search" + android:icon="@drawable/ic_search_white_24dp" + android:title="@string/search" + app:showAsAction="always" + app:actionViewClass="androidx.appcompat.widget.SearchView" /> +</menu> \ No newline at end of file diff --git a/mobile/src/main/res/menu/left_drawer.xml b/mobile/src/main/res/menu/left_drawer.xml index 9ddf2bd0fb61727cf8f58c201d3b262a976d351d..402f84199c0cc9060d48af892ec89e990094b9ea 100644 --- a/mobile/src/main/res/menu/left_drawer.xml +++ b/mobile/src/main/res/menu/left_drawer.xml @@ -11,17 +11,21 @@ android:icon="@drawable/ic_new_releases_black_24dp" android:title="@string/mainmenu_openhab_recognitions" /> + <item + android:id="@+id/habpanel" + android:icon="@drawable/ic_view_dashboard_outline_black_24dp" + android:title="@string/mainmenu_openhab_habpanel" /> <item android:id="@+id/notifications" - android:icon="@drawable/ic_notifications_grey_24dp" + android:icon="@drawable/ic_bell_outline_grey_24dp" android:title="@string/app_notifications" /> <item android:id="@+id/settings" - android:icon="@drawable/ic_settings_black_24dp" + android:icon="@drawable/ic_settings_outline_grey_24dp" android:title="@string/mainmenu_openhab_preferences" /> <item android:id="@+id/about" - android:icon="@drawable/ic_info_outline" + android:icon="@drawable/ic_info_outline_grey_24dp" android:title="@string/about_title" /> </menu> \ No newline at end of file diff --git a/mobile/src/main/res/menu/log_menu.xml b/mobile/src/main/res/menu/log_menu.xml new file mode 100644 index 0000000000000000000000000000000000000000..448985fb80cb91f231ac6282fc716dde7b76b1ab --- /dev/null +++ b/mobile/src/main/res/menu/log_menu.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<menu xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <item + android:id="@+id/delete_log" + android:icon="@drawable/ic_delete_outline_white_24dp" + android:title="@string/clear_log" + app:showAsAction="always" /> +</menu> \ No newline at end of file diff --git a/mobile/src/main/res/menu/main_menu.xml b/mobile/src/main/res/menu/main_menu.xml index 24b2b0a6a8595cd81867025186533207d9fe4568..615c439063ea6f7889c71a5ebdaebf5561a1e627 100644 --- a/mobile/src/main/res/menu/main_menu.xml +++ b/mobile/src/main/res/menu/main_menu.xml @@ -4,7 +4,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/mainmenu_voice_recognition" - android:icon="@drawable/ic_mic_black_24dp" + android:icon="@drawable/ic_microphone_outline_black_24dp" android:orderInCategory="100" android:title="@string/mainmenu_openhab_voice_recognition" app:showAsAction="always" /> diff --git a/mobile/src/main/res/mipmap-anydpi-v26/icon_round.xml b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_habpanel.xml similarity index 71% rename from mobile/src/main/res/mipmap-anydpi-v26/icon_round.xml rename to mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_habpanel.xml index 036d09bc5fd523323794379703c4a111d1e28a04..392497aef70458fe197b86c08fbb20bd42ac82ec 100644 --- a/mobile/src/main/res/mipmap-anydpi-v26/icon_round.xml +++ b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_habpanel.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <background android:drawable="@color/ic_launcher_background"/> - <foreground android:drawable="@mipmap/ic_launcher_foreground"/> + <foreground android:drawable="@drawable/ic_shortcut_habpanel_foreground"/> </adaptive-icon> \ No newline at end of file diff --git a/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_notifications.xml b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_notifications.xml new file mode 100644 index 0000000000000000000000000000000000000000..94cfd0ebee56bc27d1c5abcf5268b79d89f33071 --- /dev/null +++ b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_notifications.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@drawable/ic_shortcut_notifications_foreground"/> +</adaptive-icon> \ No newline at end of file diff --git a/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_voice_recognition.xml b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_voice_recognition.xml new file mode 100644 index 0000000000000000000000000000000000000000..69c5b4ce805fba11096aa06957fe937050ea9533 --- /dev/null +++ b/mobile/src/main/res/mipmap-anydpi-v26/ic_shortcut_voice_recognition.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> + <background android:drawable="@color/ic_launcher_background"/> + <foreground android:drawable="@drawable/ic_shortcut_voice_recognition_foreground"/> +</adaptive-icon> \ No newline at end of file diff --git a/mobile/src/main/res/mipmap-hdpi/ic_shortcut_habpanel.png b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_habpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..43d4c02353f3c89f950ae820a72d8797321fc6e3 Binary files /dev/null and b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_habpanel.png differ diff --git a/mobile/src/main/res/mipmap-hdpi/ic_shortcut_notifications.png b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..b047d6d85323f50b2c53b848c6fbae7a029f728b Binary files /dev/null and b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_notifications.png differ diff --git a/mobile/src/main/res/mipmap-hdpi/ic_shortcut_voice_recognition.png b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_voice_recognition.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa752c69b6f38392fa5d5b1f3f56c8edbcae016 Binary files /dev/null and b/mobile/src/main/res/mipmap-hdpi/ic_shortcut_voice_recognition.png differ diff --git a/mobile/src/main/res/mipmap-mdpi/ic_shortcut_habpanel.png b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_habpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..43ed04fc9d9fcb6923acc1853b3854834cd57359 Binary files /dev/null and b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_habpanel.png differ diff --git a/mobile/src/main/res/mipmap-mdpi/ic_shortcut_notifications.png b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5629ebf18e934cb0372c6ce95af2333cec9141 Binary files /dev/null and b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_notifications.png differ diff --git a/mobile/src/main/res/mipmap-mdpi/ic_shortcut_voice_recognition.png b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_voice_recognition.png new file mode 100644 index 0000000000000000000000000000000000000000..972b2f4b27cce37cb96c3541e15ebd437477ba97 Binary files /dev/null and b/mobile/src/main/res/mipmap-mdpi/ic_shortcut_voice_recognition.png differ diff --git a/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_habpanel.png b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_habpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..56682939ef4206b8db4682603f8dda22116abebb Binary files /dev/null and b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_habpanel.png differ diff --git a/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_notifications.png b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..a31e3ade1ab33f244db1b21339077963230d5491 Binary files /dev/null and b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_notifications.png differ diff --git a/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_voice_recognition.png b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_voice_recognition.png new file mode 100644 index 0000000000000000000000000000000000000000..c811be62ed4f2dc642518cc43a4b0c1c03cb21e7 Binary files /dev/null and b/mobile/src/main/res/mipmap-xhdpi/ic_shortcut_voice_recognition.png differ diff --git a/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_habpanel.png b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_habpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..02aca23c294f6df28c83032e1ca5e17ddb69e116 Binary files /dev/null and b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_habpanel.png differ diff --git a/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_notifications.png b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6eb1691c7e5658b0f7889f8bc1ba2ecba50048 Binary files /dev/null and b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_notifications.png differ diff --git a/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_voice_recognition.png b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_voice_recognition.png new file mode 100644 index 0000000000000000000000000000000000000000..7af352e30c2440bd7ec2aa97d702f630affcc3d0 Binary files /dev/null and b/mobile/src/main/res/mipmap-xxhdpi/ic_shortcut_voice_recognition.png differ diff --git a/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_habpanel.png b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_habpanel.png new file mode 100644 index 0000000000000000000000000000000000000000..455d157dfd570d27c0e78bdd60df8841e31aa49c Binary files /dev/null and b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_habpanel.png differ diff --git a/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_notifications.png b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..156fa2b1200fd4429b8c6e7c20f8b214e512f28e Binary files /dev/null and b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_notifications.png differ diff --git a/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_voice_recognition.png b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_voice_recognition.png new file mode 100644 index 0000000000000000000000000000000000000000..49adebb216857e41e171f529e2d0eeef1185e8f4 Binary files /dev/null and b/mobile/src/main/res/mipmap-xxxhdpi/ic_shortcut_voice_recognition.png differ diff --git a/mobile/src/main/res/values-af/strings.xml b/mobile/src/main/res/values-af/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-af/strings.xml +++ b/mobile/src/main/res/values-af/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-ar/strings.xml b/mobile/src/main/res/values-ar/strings.xml index 664d6707c7aed3ff22942b6654b9f4fc6daede52..e7b4ad22cb17b541084d4e8c5499e3633f384b09 100644 --- a/mobile/src/main/res/values-ar/strings.xml +++ b/mobile/src/main/res/values-ar/strings.xml @@ -1,136 +1,172 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">إعدادات</string> - <string name="app_notifications">إشعارات</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">إعدادات</string> - <string name="mainmenu_openhab_clearcache">إزالة الصور المؤقته</string> - <!-- App settings strings --> - <string name="settings_connection_title">اتصال</string> - <string name="settings_display_title">عرض</string> - <string name="settings_misc_title">متفرقات</string> - <string name="settings_openhab_url">عنوان الخادم المحلي</string> - <string name="settings_openhab_url_summary">إن إعداد عنوان لوحة مراقة أوبينهاب (معتمد على اسم المضيف أو IP). سيعطل الإستكشاف الآلي. الإعداد الحالي: %s</string> - <string name="settings_openhab_alturl">عنوان الخادم البعيد</string> - <string name="settings_openhab_alturl_summary">عنوان لوحة مراقة أوبنهاب يسخدم حين تعذر العنوان المحلي. الضبط الحالي: %s</string> - <string name="settings_openhab_username">اسم المستخدم</string> - <string name="settings_openhab_password">كلمة المرور</string> - <string name="settings_openhab_sslclientcert">شهادة SSL العميل</string> - <string name="settings_openhab_sslclientcert_howto_summary">اضغط هنا للحصول على بعض التلميحات والتوضيحات حول كيفية إعداد مصادقة شهادة عميل SSL</string> - <string name="settings_openhab_screentimeroff">تعطيل عرض المؤقت</string> - <string name="settings_openhab_screentimeroff_summary">تعطيل عرض إيقاف المؤقت عند تشغيل openHAB</string> - <string name="settings_openhab_demomode">الوضع التجريبي</string> - <string name="settings_openhab_demomode_summary">تشغيل في الوضع التجريبي</string> - <string name="settings_openhab_theme">السمة</string> - <string name="settings_openhab_fullscreen">ملء الشاشة</string> - <string name="settings_openhab_fullscreen_summary">عرض في وضع ملء الشاشة</string> - <string name="settings_openhab_icon_format">تنسيق الرمز</string> - <string name="settings_openhab_icon_format_png">صورة نقطية</string> - <string name="settings_openhab_icon_format_svg">صورة خطية</string> - <string name="settings_ringtone">نغمة الإشعار</string> - <string name="settings_openhab_alt_connection">بعيد</string> - <string name="settings_openhab_connection">محلي</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB، تحت أمرك!</string> - <string name="info_voice_recognized_text">أمر مُعرف: %1$s</string> - <string name="info_demo_mode_short">تشغيل في الوضع التجريبي</string> - <string name="info_conn_url">الاتصال بالعنوان المحلي</string> - <string name="info_conn_rem_url">الاتصال بالعنوان البعيد</string> - <!-- Error messages --> - <string name="error_network_not_available">شبكة غير متاحة</string> - <string name="error_invalid_url">الرجاء إدخال محدد موقع معلومات صالح في \'http(s)://host(:port)/\' النموذج</string> - <string name="error_connection_failed">فشل الإتصال بالمضيف</string> - <string name="error_unable_to_resolve_hostname">غير قادر على معالجة المضيف</string> - <string name="error_connection_sslhandshake_failed">فشل مصافحة SSL</string> - <string name="error_certificate_wrong_host">شهادة SSL غير صالح ل %s</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">شهادة عميل SSL مطلوبة (رمز استجابة HTTP 496)</string> - <string name="error_http_code_502">حصل الوكيل العكسي على رد خاطيء من openHAB (رمز استجابة HTTP 502)</string> - <string name="error_http_code_503">خادم openHAB غير متوفر مؤقتاً (رمز استجابة HTTP 503)</string> - <string name="error_http_code_507">خادم openHAB لا يمتلك مساحة خالية كافية (رمز استجابة HTTP 507)</string> - <string name="error_http_code_511">يتطلب مصادقة الشبكة (رمز استجابة HTTP 511)</string> - <string name="error_about_no_conn">حدث خطأ أثناء جلب معلومات خادم openHAB</string> - <string name="title_activity_openhabwritetag">أكتب وسم NFC</string> - <string name="info_write_tag">إلمس العلامة واجعله قريبا حتى تظهر رسالة التأكيد</string> - <string name="info_write_tag_progress">كتابة الوسم</string> - <string name="info_write_tag_finished">أنهاء بنجاح</string> - <string name="info_write_failed">خطأ كتابة الوسم</string> - <string name="info_write_tag_unsupported">هذا الجهاز لا بدعم NFC</string> - <string name="info_write_tag_disabled">NFC معطل. الرجاء تفعيلها من قائمة إعدادات الجهاز.</string> - <string name="info_openhab_apiversion_label">إصدار Rest API openHAB</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">سر openHAB</string> - <string name="info_openhab_push_notification_label">حالة التنبيهات الصادرة</string> - <string name="action_settings">إعدادات</string> - <string name="nfc_dialog_title">أكتب وسم فعل NFC لهذا العنصر</string> - <string name="info_not_set">لم يُعين</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">مرة</string> - <string name="mtm_decision_abort">انهاء</string> - <string name="mtm_notification">التحقق من الشهادة</string> - <!-- Themes --> - <string name="theme_name_light">خفيف</string> - <string name="theme_name_dark">داكن</string> - <string name="theme_name_black">أسود/شاشة لمس</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI داكنة</string> - <!-- NFC --> - <string name="nfc_action_on">تشغيل</string> - <string name="nfc_action_up">أعلى</string> - <string name="nfc_action_off">إغلاق</string> - <string name="nfc_action_down">أسفل</string> - <string name="nfc_action_toggle">بدّل</string> - <string name="nfc_activate">تفعيل</string> - <string name="nfc_action_current_color">اللون الحالي</string> - <!-- Drawer --> - <string name="drawer_open">درج Sitemap مفتوح</string> - <string name="drawer_close">درج Sitemap مغلق</string> - <string name="mainmenu_openhab_voice_recognition">تمييز الصوت</string> - <!-- About --> - <string name="about_title">حول</string> - <string name="about_license_title">الترخيص</string> - <string name="about_changelog">سِجل التغييرات</string> - <string name="about_issues">أبلغ عن مشكلة</string> - <string name="about_docs">التوثيق</string> - <string name="about_community_forum">منتدى المجتمع</string> - <string name="about_foundation">مؤسسة openHAB</string> - <string name="about_community">مجتمع openHAB</string> - <string name="about_server">خادم openHAB</string> - <string name="about_translation">ساعدنا في ترجمة openHAB</string> - <string name="error_couldnt_determine_openhab_url">لا يمكن تحديد عنوان openHAB</string> - <string name="unknown">غير معروف</string> - <string name="error_network_type_unsupported">نوع الشبكة (%s) غير مدعوم</string> - <string name="set">تعيين</string> - <string name="cancel">إلغاء</string> - <string name="close">إغلاق</string> - <string name="try_again_button">أعد المحاولة</string> - <string name="go_to_settings_button">اذهب إلى الإعدادات</string> - <string name="resolving_openhab">يحاول إكتشاف نموذج خادم openHAB \u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">إفتح الإسطوانة</string> - <string name="content_description_stop_roller_shutter">أوقف الإسطوانة</string> - <string name="content_description_close_roller_shutter">أغلق الإسطوانة</string> - <string name="content_description_open_color_wheel">أفتح دائرة الألوان</string> - <string name="content_description_color_up">تشغيل أو تعليق تشغيل زيادة السطوع</string> - <string name="content_description_color_down">إيقاف أو تعليق تشغيل تقليل السطوع</string> - <string name="content_description_open_number_picker">فتح منتقي الرقم</string> - <string name="content_description_video">فيديو</string> - <string name="content_description_open_openhab">افتح openHAB</string> - <string name="swipe_to_refresh_dismiss">أعي ذلك!</string> - <!-- Intro strings --> - <string name="app_intro">مقدمة</string> - <string name="intro_welcome">مرحبا في openHAB</string> - <string name="intro_whatis">مهما تكن التكنلوجيا والمزود برنامج أتمتة مفتوح المصدر لأجل منزلك</string> - <string name="intro_themes">السمات</string> - <string name="intro_themes_description">اختار من بين السمات</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">تخطي</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">تم</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">إعدادات</string> + <string name="app_notifications">إشعارات</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">إعدادات</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">حدث خطأ أثناء تحميل HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">حدد Sitemap الافتراضي</string> + <string name="mainmenu_openhab_clearcache">إزالة الصور المؤقته</string> + <!-- App settings strings --> + <string name="settings_connection_title">اتصال</string> + <string name="settings_display_title">عرض</string> + <string name="settings_misc_title">متفرقات</string> + <string name="settings_openhab_url">عنوان الخادم المحلي</string> + <string name="settings_openhab_url_summary">إن إعداد عنوان لوحة مراقة أوبينهاب (معتمد على اسم المضيف أو IP). سيعطل الإستكشاف الآلي. الإعداد الحالي: %s</string> + <string name="settings_openhab_alturl">عنوان الخادم البعيد</string> + <string name="settings_openhab_alturl_summary">عنوان لوحة مراقة أوبنهاب يسخدم حين تعذر العنوان المحلي. الضبط الحالي: %s</string> + <string name="settings_openhab_username">اسم المستخدم</string> + <string name="settings_openhab_password">كلمة المرور</string> + <string name="settings_openhab_password_summary_weak">رمز المرور ضعيف</string> + <string name="settings_openhab_password_summary_strong">تعيين رمز مرور قوي</string> + <string name="settings_openhab_sslclientcert">شهادة SSL العميل</string> + <string name="settings_openhab_sslclientcert_howto_summary">اضغط هنا للحصول على بعض التلميحات والتوضيحات حول كيفية إعداد مصادقة شهادة عميل SSL</string> + <string name="settings_openhab_screentimeroff">تعطيل عرض المؤقت</string> + <string name="settings_openhab_screentimeroff_summary">تعطيل عرض إيقاف المؤقت عند تشغيل openHAB</string> + <string name="settings_openhab_demomode">الوضع التجريبي</string> + <string name="settings_openhab_demomode_summary">إذا لم يكن لديك ملقم openHAB، فعل وضع العرض التجريبي لتصور أمكانيات وقدرات openHAB.</string> + <string name="settings_openhab_theme">السمة</string> + <string name="settings_openhab_fullscreen">ملء الشاشة</string> + <string name="settings_openhab_fullscreen_summary">عرض في وضع ملء الشاشة</string> + <string name="settings_openhab_icon_format">تنسيق الرمز</string> + <string name="settings_openhab_icon_format_png">صورة نقطية</string> + <string name="settings_openhab_icon_format_svg">صورة خطية</string> + <string name="settings_chart_scaling">توسيع المخطط</string> + <string name="settings_chart_scaling_summary">ملاحظة: الحجم الأصغر يؤدي إلى تقليص حجم الحروف وعرض الخطوط، فهناك مساحة كبيرة للرسم البياني، لكن الأحرف قد تصبح غير مقروءة.</string> + <string name="settings_chart_scaling_value_xs">صغير حدا</string> + <string name="settings_chart_scaling_value_s">صغير</string> + <string name="settings_chart_scaling_value_m">افتراضي</string> + <string name="settings_chart_scaling_value_l">كبير</string> + <string name="settings_openhab_chart_hq">رسوم بيانية عالية الدقة</string> + <string name="settings_openhab_chart_hq_summary">تكوين النماذج قد يؤثر على الخادم. إذا واجهت بطئا في تحميل النماذج عدة مرات وخادمك ليس قويا، عطل هذه الخاصية لتحسين مدة التحميل.</string> + <string name="settings_ringtone">نغمة الإشعار</string> + <string name="settings_ringtone_none">لا يوجد</string> + <string name="settings_clear_default_sitemap">تصفية Sitemap الإفتراضية</string> + <string name="settings_openhab_alt_connection">بعيد</string> + <string name="settings_openhab_connection">محلي</string> + <string name="settings_notification_vibration_off">إغلاق</string> + <string name="settings_notification_vibration_short">قصير</string> + <string name="settings_notification_vibration_long">طويل</string> + <string name="settings_notification_vibration_twice">مرتين</string> + <string name="settings_notification_ringtone_vibration">إعدادات الإشعارات</string> + <string name="settings_connection_summary">متصل بـ %s</string> + <string name="settings_insecure_connection_summary">أتصال غير آمن بـ %s</string> + <string name="beta">إصدار تجريبي</string> + <!-- App messages strings --> + <string name="title_voice_widget">الأوامر الصوتية</string> + <string name="title_voice_widget_icon">الأوامر الصوتية واختصار التطبيق</string> + <string name="info_voice_input">openHAB، تحت أمرك!</string> + <string name="info_voice_recognized_text">أمر مُعرف: %1$s</string> + <string name="info_demo_mode_short">تشغيل في الوضع التجريبي</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">إيقاف</string> + <string name="info_conn_url">الاتصال بالعنوان المحلي</string> + <string name="info_conn_rem_url">الاتصال بالعنوان البعيد</string> + <string name="app_shortcut_diabled_notifications">الملقم البعيد غير متوفر</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB يُرجع قائمة sitemap خالية</string> + <string name="error_network_not_available">شبكة غير متاحة</string> + <string name="error_wifi_not_available">تم ايقاف الواي فاي</string> + <string name="error_invalid_url">الرجاء إدخال محدد موقع معلومات صالح في \'http(s)://host(:port)/\' النموذج</string> + <string name="error_connection_failed">فشل الإتصال بالمضيف</string> + <string name="error_unable_to_resolve_hostname">غير قادر على معالجة المضيف</string> + <string name="error_connection_sslhandshake_failed">فشل مصافحة SSL</string> + <string name="error_certificate_wrong_host">شهادة SSL غير صالح ل %s</string> + <string name="error_http_code_426">مطلوب HTTPS. الرجاء تغيير عنوان URL (رمز استجابة HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_496">شهادة عميل SSL مطلوبة (رمز استجابة HTTP 496)</string> + <string name="error_http_code_502">حصل الوكيل العكسي على رد خاطيء من openHAB (رمز استجابة HTTP 502)</string> + <string name="error_http_code_503">خادم openHAB غير متوفر مؤقتاً (رمز استجابة HTTP 503)</string> + <string name="error_http_code_507">خادم openHAB لا يمتلك مساحة خالية كافية (رمز استجابة HTTP 507)</string> + <string name="error_http_code_511">يتطلب مصادقة الشبكة (رمز استجابة HTTP 511)</string> + <string name="error_about_no_conn">حدث خطأ أثناء جلب معلومات خادم openHAB</string> + <string name="title_activity_openhabwritetag">أكتب وسم NFC</string> + <string name="title_activity_libraries">المكتبات المستخدمة</string> + <string name="info_write_tag">إلمس العلامة واجعله قريبا حتى تظهر رسالة التأكيد</string> + <string name="info_write_tag_progress">كتابة الوسم</string> + <string name="info_write_tag_finished">أنهاء بنجاح</string> + <string name="info_write_failed">خطأ كتابة الوسم</string> + <string name="info_write_tag_unsupported">هذا الجهاز لا بدعم NFC</string> + <string name="info_write_tag_disabled">NFC معطل. الرجاء تفعيلها من قائمة إعدادات الجهاز.</string> + <string name="info_openhab_apiversion_label">إصدار Rest API openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">سر openHAB</string> + <string name="info_openhab_push_notification_label">حالة التنبيهات الصادرة</string> + <string name="action_settings">إعدادات</string> + <string name="nfc_dialog_title">أكتب وسم فعل NFC لهذا العنصر</string> + <string name="info_not_set">لم يُعين</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">لم يتم إرسال أي إشعارات حتى الآن</string> + <string name="notification_list_error">حدث خطأ أثناء تحميل الإشعارات</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_decision_once">مرة</string> + <string name="mtm_decision_abort">انهاء</string> + <string name="mtm_notification">التحقق من الشهادة</string> + <!-- Themes --> + <string name="theme_name_light">خفيف</string> + <string name="theme_name_dark">داكن</string> + <string name="theme_name_black">أسود/شاشة لمس</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI داكنة</string> + <!-- NFC --> + <string name="nfc_action_on">تشغيل</string> + <string name="nfc_action_up">أعلى</string> + <string name="nfc_action_off">إغلاق</string> + <string name="nfc_action_down">أسفل</string> + <string name="nfc_action_toggle">بدّل</string> + <string name="nfc_activate">تفعيل</string> + <string name="nfc_action_current_color">اللون الحالي</string> + <!-- Drawer --> + <string name="drawer_open">درج Sitemap مفتوح</string> + <string name="drawer_close">درج Sitemap مغلق</string> + <string name="mainmenu_openhab_voice_recognition">تمييز الصوت</string> + <!-- About --> + <string name="about_title">حول</string> + <string name="about_license_title">الترخيص</string> + <string name="about_changelog">سِجل التغييرات</string> + <string name="about_issues">أبلغ عن مشكلة</string> + <string name="about_docs">التوثيق</string> + <string name="about_community_forum">منتدى المجتمع</string> + <string name="about_foundation">مؤسسة openHAB</string> + <string name="about_community">مجتمع openHAB</string> + <string name="about_server">خادم openHAB</string> + <string name="about_translation">ساعدنا في ترجمة openHAB</string> + <string name="error_couldnt_determine_openhab_url">لا يمكن تحديد عنوان openHAB</string> + <string name="unknown">غير معروف</string> + <string name="error_network_type_unsupported">نوع الشبكة (%s) غير مدعوم</string> + <string name="set">تعيين</string> + <string name="cancel">إلغاء</string> + <string name="close">إغلاق</string> + <string name="try_again_button">أعد المحاولة</string> + <string name="go_to_settings_button">اذهب إلى الإعدادات</string> + <string name="resolving_openhab">يحاول إكتشاف نموذج خادم openHAB \u2026</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">إفتح الإسطوانة</string> + <string name="content_description_stop_roller_shutter">أوقف الإسطوانة</string> + <string name="content_description_close_roller_shutter">أغلق الإسطوانة</string> + <string name="content_description_open_color_wheel">أفتح دائرة الألوان</string> + <string name="content_description_color_up">تشغيل أو تعليق تشغيل زيادة السطوع</string> + <string name="content_description_color_down">إيقاف أو تعليق تشغيل تقليل السطوع</string> + <string name="content_description_open_number_picker">فتح منتقي الرقم</string> + <string name="content_description_video">فيديو</string> + <string name="content_description_open_openhab">افتح openHAB</string> + <string name="swipe_to_refresh_dismiss">أعي ذلك!</string> + <!-- Intro strings --> + <string name="app_intro">مقدمة</string> + <string name="intro_welcome">مرحبا في openHAB</string> + <string name="intro_whatis">مهما تكن التكنلوجيا والمزود برنامج أتمتة مفتوح المصدر لأجل منزلك</string> + <string name="intro_themes">السمات</string> + <string name="intro_themes_description">اختار من بين السمات</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">تخطي</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">تم</string> </resources> diff --git a/mobile/src/main/res/values-bg/strings.xml b/mobile/src/main/res/values-bg/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..dfb66c015353bf035b2404e1cd777a961ee25ca2 100644 --- a/mobile/src/main/res/values-bg/strings.xml +++ b/mobile/src/main/res/values-bg/strings.xml @@ -1,22 +1,161 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Настройки</string> + <string name="app_notifications">Известия</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_preferences">Настройки</string> + <string name="mainmenu_openhab_clearcache">Изчисти кеша на изображенията</string> + <!-- App settings strings --> + <string name="settings_connection_title">Връзка</string> + <string name="settings_display_title">Изглед</string> + <string name="settings_misc_title">Други</string> + <string name="settings_openhab_url">Адрес на локален сървър</string> + <string name="settings_openhab_url_summary">URL на openHAB (базиран хост или IP). Ако e ръчно конфигуриран, автоматичното откриване е изключено. Текущата настройка: %s</string> + <string name="settings_openhab_alturl">Адрес на отдалечен сървър</string> + <string name="settings_openhab_alturl_summary">URL на openHAB табло се използва, когато локалният адрес е недостъпна. Текущата настройка: %s</string> + <string name="settings_openhab_username">Потребителско име</string> + <string name="settings_openhab_password">Парола</string> + <string name="settings_openhab_sslclientcert">SSL сертификат на клиент</string> + <string name="settings_openhab_screentimeroff">Изключване на дисплей таймер</string> + <string name="settings_openhab_screentimeroff_summary">Изключва таймера за гасене на дисплея, когато openHAB се изпълнява</string> + <string name="settings_openhab_demomode">Демонстрационен режим</string> + <string name="settings_openhab_theme">Тема</string> + <string name="settings_openhab_fullscreen">Пълен екран</string> + <string name="settings_openhab_fullscreen_summary">Показване в режим на цял екран</string> + <string name="settings_openhab_icon_format">Формат на иконите</string> + <string name="settings_openhab_icon_format_png">Растерна графика</string> + <string name="settings_openhab_icon_format_svg">Вектор</string> + <string name="settings_chart_scaling">Мащабиране на диаграмата</string> + <string name="settings_chart_scaling_summary">Забележка: Малките мащаби свиват шрифтовете и ширината на линиите, така че има повече пространство за графиката, но четливостта на шрифта може да пострада.</string> + <string name="settings_chart_scaling_value_xs">Много малък</string> + <string name="settings_chart_scaling_value_s">Малък</string> + <string name="settings_chart_scaling_value_m">По подразбиране</string> + <string name="settings_chart_scaling_value_l">Голям</string> + <string name="settings_ringtone">Уведомителна мелодия</string> + <string name="settings_ringtone_none">Няма</string> + <string name="settings_openhab_alt_connection">Дистанционно</string> + <string name="settings_openhab_connection">Локално</string> + <string name="settings_notification_vibration">Уведомителна вибрация</string> + <string name="settings_notification_vibration_off">Изключено</string> + <string name="settings_notification_vibration_short">Кратка</string> + <string name="settings_notification_vibration_long">Продължителна</string> + <string name="settings_notification_vibration_twice">Двойна</string> + <string name="settings_connection_summary">Свързан към %s</string> + <string name="settings_insecure_connection_summary">Несигурно свързан към %s</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB на ваше командване!</string> + <string name="info_voice_recognized_text">Разпозната команда: %1$s</string> + <string name="info_demo_mode_short">Работи в демо режим</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Свързване към местен URL</string> + <string name="info_conn_rem_url">Свързване към отдалечен URL</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB връща празен сайнмап списък</string> + <string name="error_network_not_available">Не е налична мрежа</string> + <string name="error_http_connection_failed">Връзката е неуспешна. Получен е неочакван отговор при опит за свързване към конфигурирания openHAB сървър (получени код на HTTP отговор: %d).</string> + <string name="error_connection_failed">Връзката с хоста е неуспешно</string> + <string name="error_unable_to_resolve_hostname">Не може да се свържи с домейна</string> + <string name="error_connection_sslhandshake_failed">SSL handshake е неуспешно</string> + <string name="error_certificate_not_trusted">SSL сертификатът не е надежден. Моля внесете главен сертификат или приемете сертификат по време на SSL хендшейк.</string> + <string name="error_certificate_expired">SSL сертификатът е изтекъл. Моля получите нов сертификат или приемете сертификат по време на SSL ръкостискане.</string> + <string name="error_certificate_not_valid_yet">SSL сертификат не е валиден все още. Моля получете правилния сертификат или приемете сертификат по време на SSL ръкостискане. Също така проверете дали часовникът на вашето устройство е настроен правилно.</string> + <string name="error_certificate_revoked">SSL сертификатът е анулиран. Моля вземете нов сертификат или приемете сертификат по време на SSL ръкостискане.</string> + <string name="error_certificate_wrong_host">SSL сертификат не е валиден за %s</string> + <string name="error_http_code_401">Неуспешно удостоверяване. Проверете конфигурираните username и парола съответно предоставения SSL сертификат на клиента (отговор HTTP код 401).</string> + <string name="error_http_code_403">Неуспешно удостоверяване. Проверете конфигурираните потребителско име и парола съответно предоставения SSL сертификат на клиента (HTTP отговор 403).</string> + <string name="error_http_code_407">Неуспешно удостоверяване. Проверете конфигурираните потребителско име и парола съответно предоставения SSL сертификат на клиента (HTTP отговор 407).</string> + <string name="error_http_code_414">URL Адресът е твърде дълъг. Моля, използвайте IP адреса или по-кратък URL адрес (HTTP отговор 414).</string> + <string name="error_http_code_426">Изисква се HTTPS. Моля, променете URL адреса (HTTP отговор 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Неуспешно удостоверяване. Моля, проверете предоставения SSL сертификат на клиент (HTTP отговор 495).</string> + <string name="error_http_code_496">SSL сертификат на клиент е задължителен (HTTP отговор 496)</string> + <string name="error_http_code_503">openHAB сървъра е временно недостъпен (HTTP отговор 503)</string> + <string name="error_http_code_507">openHAB сървъра няма достатъчно свободно място (HTTP отговор 507)</string> + <string name="error_http_code_511">Изисква се мрежово удостоверяване (HTTP отговор 511)</string> + <string name="error_about_no_conn">Грешка при извличане на информация от openHAB сървъра</string> + <string name="title_activity_openhabwritetag">Запиши NFC етикет</string> + <string name="title_activity_libraries">Използвани библиотеки</string> + <string name="info_write_tag">Докосни етикета и задръжте докато съобщението за потвърждение се появи</string> + <string name="info_write_tag_progress">Записване на етикета</string> + <string name="info_write_tag_finished">Успешен край</string> + <string name="info_write_failed">Грешка на писане на етикет</string> + <string name="info_write_tag_unsupported">Устройството не поддържа NFC</string> + <string name="info_write_tag_disabled">NFC е изключено. Моля включете го от менюто за настройки на устройството.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API версия</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB секрет</string> + <string name="info_openhab_push_notification_label">Статус на известия</string> + <string name="action_settings">Настройки</string> + <string name="nfc_dialog_title">Запиши NFC етикет за действие на този елемент</string> + <string name="info_not_set">Не е зададено</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_error">Възникна грешка при зареждането на известията</string> + <string name="list_loading_message">Зарежда се\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Приемане на непознат сертификат?</string> + <string name="mtm_trust_anchor">Сертификатът на сървъра не е подписан от известен сертифициращ орган</string> + <string name="mtm_cert_expired">Сертификатът на сървъра е с изтекъл срок</string> + <string name="mtm_accept_servername">Приемете несъответствие в името на сървъра?</string> + <string name="mtm_hostname_mismatch">Сървърът не можа да се удостовери като \"%s\". Сертификатът е валиден само за:</string> + <string name="mtm_connect_anyway">Все пак искате ли да продължите?</string> + <string name="mtm_cert_details">Данни за сертификата:</string> + <string name="mtm_decision_always">Приемам</string> + <string name="mtm_decision_once">Един път</string> + <string name="mtm_decision_abort">Прекъсване</string> + <string name="mtm_notification">Проверка на сертификата</string> + <string name="settings_openhab_none">Няма</string> + <!-- Themes --> + <string name="theme_name_light">Светло</string> + <string name="theme_name_dark">Тъмно</string> + <string name="theme_name_black">Черно/AMOLED</string> + <!-- NFC --> + <string name="nfc_action_on">Включено</string> + <string name="nfc_action_up">Нагоре</string> + <string name="nfc_action_off">Изключено</string> + <string name="nfc_action_down">Надолу</string> + <string name="nfc_action_toggle">Превключи</string> + <string name="nfc_activate">Активиране</string> + <string name="nfc_action_current_color">Текущ цвят</string> + <string name="nfc_action_to_sitemap_page">Отидете на сйтмап страницата</string> + <!-- Drawer --> + <string name="mainmenu_openhab_voice_recognition">Разпознаване на глас</string> + <!-- About --> + <string name="about_title">Относно</string> + <string name="about_license_title">Лиценз</string> + <string name="about_changelog">Списък на промените</string> + <string name="about_source_code">Изходен код</string> + <string name="about_issues">Съобщи за проблем</string> + <string name="about_docs">Документация</string> + <string name="about_community_forum">Форум на Общността</string> + <string name="about_foundation">openHAB фондация</string> + <string name="about_community">openHAB Общност</string> + <string name="about_server">openHAB сървър</string> + <string name="about_translation">Помогнете ни в превеждането на openHAB</string> + <string name="about_privacy_policy">Декларация за поверителност</string> + <string name="settings_debug_messages_title">Покажи информация за отстраняване на неизправности</string> + <string name="error_couldnt_determine_openhab_url">Не можеше да определи openHAB URL адрес</string> + <string name="unknown">Неизвестен</string> + <string name="error_network_type_unsupported">Мрежовия тип (%s) не се поддържа</string> + <string name="set">Задай</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_color_up">Включи или задръж за да увеличиш осветеността</string> + <string name="content_description_color_down">Изключи или задръж за да намалиш осветеността</string> + <string name="content_description_open_number_picker">Отвори избора на цифри</string> + <string name="content_description_video">Видео</string> + <string name="content_description_open_openhab">Отвори openHAB</string> + <string name="swipe_to_refresh_description">Тази програма се обновява автоматично, нормално не е необходимо да го правите ръчно</string> + <string name="swipe_to_refresh_dismiss">Разбрах!</string> + <!-- Intro strings --> + <string name="intro_voice_description">Управлявайте гласово вашия дом</string> + <string name="intro_nfc">NFC</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">Пропусни</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">Готово</string> </resources> diff --git a/mobile/src/main/res/values-ca/strings.xml b/mobile/src/main/res/values-ca/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-ca/strings.xml +++ b/mobile/src/main/res/values-ca/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-cs/strings.xml b/mobile/src/main/res/values-cs/strings.xml index dd943fb1f506b403511e2c34d1e2fb3eaa243f33..40ec5fdfe652cbac8b23957202f56776219681d2 100644 --- a/mobile/src/main/res/values-cs/strings.xml +++ b/mobile/src/main/res/values-cs/strings.xml @@ -1,195 +1,245 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Nastavení</string> - <string name="app_notifications">Oznámení</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Nastavení</string> - <string name="mainmenu_openhab_selectsitemap">Vyberte výchozí Sitemap</string> - <string name="mainmenu_openhab_clearcache">Vyčistit vyrovnávací paměť obrázků</string> - <!-- App settings strings --> - <string name="settings_connection_title">Připojení</string> - <string name="settings_display_title">Zobrazení</string> - <string name="settings_misc_title">Různé</string> - <string name="settings_openhab_url">URL adresa lokálního serveru</string> - <string name="settings_openhab_url_summary">Adresa URL Vašeho openHAB serveru (název hostitele nebo IP). Je-li adresa zvolena ručně, automatické hledání adresy je vypnuto. Aktuální nastavení: %s</string> - <string name="settings_openhab_alturl">URL adresa vzdáleného serveru</string> - <string name="settings_openhab_alturl_summary">Tato adresa openHAB serveru se použije, pokud server na lokální adrese není k dispozici. Aktuální nastavení: %s</string> - <string name="settings_openhab_username">Uživatelské jméno</string> - <string name="settings_openhab_password">Heslo</string> - <string name="settings_openhab_password_summary_weak">Slabé heslo</string> - <string name="settings_openhab_password_summary_strong">Silné heslo</string> - <string name="settings_openhab_sslclientcert">Klientský certifikát SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Klepnutím sem získáte informace o tom, jak nastavit ověřování klientských certifikátů SSL</string> - <string name="settings_openhab_screentimeroff">Nezhasínat displej</string> - <string name="settings_openhab_screentimeroff_summary">Zabránit systému zhasnout automaticky displej pokud je aplikace openHAB spuštěna</string> - <string name="settings_openhab_demomode">Ukázkový režim</string> - <string name="settings_openhab_demomode_summary">Spustit v ukázkovém režimu</string> - <string name="settings_openhab_theme">Motivy vzhledu</string> - <string name="settings_openhab_fullscreen">Na celou obrazovku</string> - <string name="settings_openhab_fullscreen_summary">Zobrazit v režimu celé obrazovky</string> - <string name="settings_openhab_icon_format">Formát ikon</string> - <string name="settings_openhab_icon_format_png">Bitmapa</string> - <string name="settings_openhab_icon_format_svg">Vektor</string> - <string name="settings_chart_scaling">Měřítko grafu</string> - <string name="settings_chart_scaling_summary">Poznámka: Menší měřítko zmenší písmo a šířky čar, takže je více místa pro graf, ale čitelnost písma se může zhoršit.</string> - <string name="settings_chart_scaling_value_xs">Velmi malé</string> - <string name="settings_chart_scaling_value_s">Malé</string> - <string name="settings_chart_scaling_value_m">Výchozí</string> - <string name="settings_chart_scaling_value_l">Velké</string> - <string name="settings_ringtone">Tón oznámení</string> - <string name="settings_ringtone_none">Žádné</string> - <string name="settings_clear_default_sitemap">Vymazat výchozí Sitemap</string> - <string name="settings_no_default_sitemap">Žádná výchozí Sitemap nebyla vybrána</string> - <string name="settings_current_default_sitemap">Aktuální výchozí Sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Vzdálený</string> - <string name="settings_openhab_connection">Lokální</string> - <string name="settings_notification_vibration">Vibrace</string> - <string name="settings_notification_vibration_off">Vypnuto</string> - <string name="settings_notification_vibration_short">Krátce</string> - <string name="settings_notification_vibration_long">Dlouze</string> - <string name="settings_notification_vibration_twice">Dvakrát</string> - <string name="settings_connection_summary">Připojen k %s</string> - <string name="settings_insecure_connection_summary">Připojen k %s nezabezpečenou komunikací</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB hlasové příkazy</string> - <string name="info_voice_input">openHAB, k Vašim službám!</string> - <string name="info_voice_recognized_text">Rozpoznán příkaz: %1$s</string> - <string name="info_demo_mode_short">Spuštěno v ukázkovém režimu</string> - <string name="info_conn_url">Připojuji se k lokální URL</string> - <string name="info_conn_rem_url">Připojuji se ke vzdálené URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB vrátil prázdný seznam Sitemap</string> - <string name="error_network_not_available">Síť není k dispozici</string> - <string name="error_http_connection_failed">Připojení se nezdařilo. Byla přijata neočekávaná odpověď při pokusu o připojení k serveru openHAB (HTTP kód odpovědi: %d).</string> - <string name="error_invalid_url">Zadejte platnou adresu URL ve formátu \'http(s)://host(:port) /\'</string> - <string name="error_connection_failed">Připojení k serveru se nezdařilo</string> - <string name="error_unable_to_resolve_hostname">Nelze zjistit název hostitele</string> - <string name="error_connection_sslhandshake_failed">Ověření SSL metodou handshake se nezdařilo</string> - <string name="error_certificate_not_trusted">SSL certifikát není důvěryhodný. Importujte kořenový certifikát nebo akceptujte certifikát během SSL handshake.</string> - <string name="error_certificate_expired">Vypršela platnost certifikátu SSL. Získejte nový certifikát nebo akceptujte ověření certifikátu během SSL handshake.</string> - <string name="error_certificate_not_valid_yet">SSL certifikát ještě není platný. Získejte správný certifikát nebo akceptujte ověření certifikátu během ověření SSL metodou handshake. Také zkontrolujte, jestli je správně nastaven čas na vašem zařízení.</string> - <string name="error_certificate_revoked">Certifikát SSL byl odvolán. Získejte nový certifikát nebo akceptujte ověření certifikátu během SSL handshake.</string> - <string name="error_certificate_wrong_host">Certifikát SSL není platný pro %s</string> - <string name="error_http_code_401">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 401).</string> - <string name="error_http_code_403">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 403).</string> - <string name="error_http_code_407">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 407).</string> - <string name="error_http_code_414">Adresa URL je příliš dlouhá. Použijte IP adresu a nebo kratší adresu URL (kód odpovědi HTTP 414).</string> - <string name="error_http_code_426">Vyžaduje se HTTPS. Změňte adresu URL (kód odpovědi HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Ověření se nezdařilo. Zkontrolujte klientský certifikát SSL (kód odpovědi HTTP 495).</string> - <string name="error_http_code_496">Vyžaduje se SSL certifikát (kód odpovědi HTTP 496)</string> - <string name="error_http_code_502">Vaše reverse proxy obdržela chybnou odpověď ze serveru openHAB (kód odpovědi HTTP 502)</string> - <string name="error_http_code_503">Server openHAB je dočasně nedostupný (kód odpovědi HTTP 503)</string> - <string name="error_http_code_504">Gateway time-out. Zdá se, že Vaše reverse proxy běží, ale nemůže získat odpověď od serveru openHAB (kód odpovědi HTTP 504).</string> - <string name="error_http_code_507">Server openHAB má nedostatek volného místa (kód odpovědi HTTP 507)</string> - <string name="error_http_code_511">Vyžaduje se síťové ověření (kód odpovědi HTTP 511)</string> - <string name="error_about_no_conn">Chyba při získávání informací ze serveru openHAB</string> - <string name="error_openhab_offline">Váš openHAB server je offline, zatímco cloud funguje</string> - <string name="error_no_app_store_found">Nenalezen obchod s aplikacemi, kde by bylo možné nainstalovat aplikaci pro rozpoznávání hlasu</string> - <string name="title_activity_openhabwritetag">Zapsat do NFC tagu</string> - <string name="title_activity_libraries">Použité knihovny</string> - <string name="info_write_tag">Dotkněte se tagu a počkejte na potvrzovací zprávu</string> - <string name="info_write_tag_progress">Zapisování do tagu</string> - <string name="info_write_tag_finished">Úspěšně dokončeno</string> - <string name="info_write_failed">Chyba při zápisu do tagu</string> - <string name="info_write_tag_unsupported">Zařízení nepodporuje NFC</string> - <string name="info_write_tag_disabled">NFC je zakázáno. Povolte jej v nastavení zařízení.</string> - <string name="info_openhab_apiversion_label">Verze openHAB Rest API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Secret</string> - <string name="info_openhab_push_notification_label">Stav push notifikací</string> - <string name="action_settings">Nastavení</string> - <string name="nfc_dialog_title">Zapsat akci do NFC tagu</string> - <string name="info_not_set">Není nastaveno</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Zatím nebylo zaslané žádné oznámení</string> - <string name="notification_list_error">Při načítání oznámení došlo k chybě</string> - <string name="list_loading_message">Načítá se\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Akceptovat neznámý certifikát?</string> - <string name="mtm_trust_anchor">Certifikát serveru nebyl podepsán známou certifikační autoritou</string> - <string name="mtm_cert_expired">Certifikát serveru vypršel</string> - <string name="mtm_accept_servername">Přijmout neodpovídající jméno serveru?</string> - <string name="mtm_hostname_mismatch">Server se nemohl prokázat jako \"%s\" Certifikát je platný jen pro:</string> - <string name="mtm_connect_anyway">Chcete se i přesto připojit?</string> - <string name="mtm_cert_details">Detaily certifikátu:</string> - <string name="mtm_decision_always">Přijmout</string> - <string name="mtm_decision_once">Jednou</string> - <string name="mtm_decision_abort">Zrušit</string> - <string name="mtm_notification">Ověření certifikátu</string> - <string name="settings_openhab_none">Žádný</string> - <!-- Themes --> - <string name="theme_name_light">Světlý</string> - <string name="theme_name_dark">Tmavý</string> - <string name="theme_name_black">Černý / AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI tmavý</string> - <!-- NFC --> - <string name="nfc_action_on">Zapnout</string> - <string name="nfc_action_up">Nahoru</string> - <string name="nfc_action_off">Vypnout</string> - <string name="nfc_action_down">Dolů</string> - <string name="nfc_action_toggle">Přepnout</string> - <string name="nfc_activate">Aktivovat</string> - <string name="nfc_action_current_color">Současná barva</string> - <string name="nfc_action_to_sitemap_page">Přejít na stránku Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Boční menu Sitemap vysunuté</string> - <string name="drawer_close">Boční menu Sitemap zasunuté</string> - <string name="mainmenu_openhab_voice_recognition">Rozpoznání hlasu</string> - <!-- About --> - <string name="about_title">O aplikaci</string> - <string name="about_license_title">Licence</string> - <string name="about_changelog">Seznam změn</string> - <string name="about_source_code">Zdrojový kód</string> - <string name="about_issues">Nahlásit problém</string> - <string name="about_docs">Dokumentace</string> - <string name="about_community_forum">Komunitní fórum</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">komunita openHAB</string> - <string name="about_server">openHAB server</string> - <string name="about_translation">Pomozte nám přeložit openHAB</string> - <string name="about_privacy_policy">Ochrana osobních údajů</string> - <string name="settings_debug_messages_title">Zobrazit informace pro řešení potíží</string> - <string name="error_couldnt_determine_openhab_url">Nemohu najít URL adresu openHAB</string> - <string name="unknown">Neznámý</string> - <string name="error_network_type_unsupported">Typ sítě (%s) není podporován</string> - <string name="set">Nastavit</string> - <string name="cancel">Zrušit</string> - <string name="close">Zavřít</string> - <string name="try_again_button">Zkusit znovu</string> - <string name="go_to_settings_button">Přejít do nastavení</string> - <string name="configuration_missing">Nepodařilo se automaticky nalézt openHAB server. V nastavení serveru nakonfigurujte jeho IP adresu nebo název hostitele.</string> - <string name="no_remote_server">Připojení k místní síti je nedostupné a vzdálený server nemáte nastavený</string> - <string name="resolving_openhab">Hledám openHAB server\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Otevřít ovládání rolet</string> - <string name="content_description_stop_roller_shutter">Zastavit roletu</string> - <string name="content_description_close_roller_shutter">Zavřít ovládání rolet</string> - <string name="content_description_open_color_wheel">Otevřít výběr barev</string> - <string name="content_description_color_up">Zapnout, nebo držením zvýšit jas</string> - <string name="content_description_color_down">Vypnout, nebo držením snížit jas</string> - <string name="content_description_open_number_picker">Otevřít výběr čísla</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Spustit openHAB</string> - <string name="swipe_to_refresh_description">Aplikace se aktualizuje automaticky, obvykle není třeba to dělat ručně</string> - <string name="swipe_to_refresh_dismiss">Rozumím!</string> - <!-- Intro strings --> - <string name="app_intro">Úvod</string> - <string name="intro_welcome">Vítejte v openHAB</string> - <string name="intro_whatis">Open source program pro domácí automatizaci</string> - <string name="intro_themes">Motivy vzhledu</string> - <string name="intro_themes_description">Vyberte si mezi několika motivy</string> - <string name="intro_voice_description">Ovládejte svůj domov hlasem</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Ovládání Item můžete přiřadit k NFC tagu dlouhým podržením Item</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">PŘESKOČIT</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">HOTOVO</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Nastavení</string> + <string name="app_notifications">Oznámení</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Nastavení</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Při načítání HABPanel došlo k chybě</string> + <string name="mainmenu_openhab_selectsitemap">Vyberte výchozí Sitemap</string> + <string name="mainmenu_openhab_clearcache">Vyčistit vyrovnávací paměť obrázků</string> + <!-- App settings strings --> + <string name="settings_connection_title">Připojení</string> + <string name="settings_display_title">Zobrazení</string> + <string name="settings_misc_title">Různé</string> + <string name="settings_openhab_url">URL adresa lokálního serveru</string> + <string name="settings_openhab_url_summary">Adresa URL Vašeho openHAB serveru (název hostitele nebo IP). Je-li adresa zvolena ručně, automatické hledání adresy je vypnuto. Aktuální nastavení: %s</string> + <string name="settings_openhab_alturl">URL adresa vzdáleného serveru</string> + <string name="settings_openhab_alturl_summary">Tato adresa openHAB serveru se použije, pokud server na lokální adrese není k dispozici. Aktuální nastavení: %s</string> + <string name="settings_openhab_username">Uživatelské jméno</string> + <string name="settings_openhab_password">Heslo</string> + <string name="settings_openhab_password_summary_weak">Slabé heslo</string> + <string name="settings_openhab_password_summary_strong">Silné heslo</string> + <string name="settings_openhab_sslclientcert">Klientský certifikát SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Klepnutím sem získáte informace o tom, jak nastavit ověřování klientských certifikátů SSL</string> + <string name="settings_openhab_screentimeroff">Nezhasínat displej</string> + <string name="settings_openhab_screentimeroff_summary">Zabránit systému zhasnout automaticky displej pokud je aplikace openHAB spuštěna</string> + <string name="settings_openhab_demomode">Ukázkový režim</string> + <string name="settings_openhab_demomode_summary">Pokud nemáte openHAB server, povolte režim demo abyste získali představu o možnostech openHAB.</string> + <string name="settings_openhab_theme">Motivy vzhledu</string> + <string name="settings_openhab_fullscreen">Na celou obrazovku</string> + <string name="settings_openhab_fullscreen_summary">Zobrazit v režimu celé obrazovky</string> + <string name="settings_openhab_icon_format">Formát ikon</string> + <string name="settings_openhab_icon_format_png">Bitmapa</string> + <string name="settings_openhab_icon_format_svg">Vektor</string> + <string name="settings_chart_scaling">Měřítko grafu</string> + <string name="settings_chart_scaling_summary">Poznámka: Menší měřítko zmenší písmo a šířky čar, takže je více místa pro graf, ale čitelnost písma se může zhoršit.</string> + <string name="settings_chart_scaling_value_xs">Velmi malé</string> + <string name="settings_chart_scaling_value_s">Malé</string> + <string name="settings_chart_scaling_value_m">Výchozí</string> + <string name="settings_chart_scaling_value_l">Velké</string> + <string name="settings_openhab_chart_hq">Grafy ve vysokém rozlišením</string> + <string name="settings_openhab_chart_hq_summary">Generování grafů může být náročné na server. Pokud dochází k pomalému načítání grafů a váš server je slabší, zakažte tuto možnost aby se zlepšila doba načítání.</string> + <string name="settings_ringtone">Tón oznámení</string> + <string name="settings_ringtone_none">Žádné</string> + <string name="settings_clear_default_sitemap">Vymazat výchozí Sitemap</string> + <string name="settings_no_default_sitemap">Žádná výchozí Sitemap nebyla vybrána</string> + <string name="settings_current_default_sitemap">Aktuální výchozí Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Vzdálený</string> + <string name="settings_openhab_connection">Lokální</string> + <string name="settings_notification_vibration">Vibrace</string> + <string name="settings_notification_vibration_off">Vypnuto</string> + <string name="settings_notification_vibration_short">Krátce</string> + <string name="settings_notification_vibration_long">Dlouze</string> + <string name="settings_notification_vibration_twice">Dvakrát</string> + <string name="settings_notification_ringtone_vibration">Nastavení oznámení</string> + <string name="settings_connection_summary">Připojen k %s</string> + <string name="settings_insecure_connection_summary">Připojen k %s nezabezpečenou komunikací</string> + <string name="beta">Zkušební verze</string> + <!-- App messages strings --> + <string name="title_voice_widget">Hlasové příkazy</string> + <string name="title_voice_widget_icon">Hlasové příkazy a zástupce aplikace</string> + <string name="info_voice_input">openHAB, k Vašim službám!</string> + <string name="info_voice_recognized_text">Rozpoznán příkaz: %1$s</string> + <string name="info_demo_mode_short">Spuštěno v ukázkovém režimu</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Vypnout</string> + <string name="info_conn_url">Připojuji se k lokální URL</string> + <string name="info_conn_rem_url">Připojuji se ke vzdálené URL</string> + <string name="app_shortcut_diabled_habpanel">Na Vašem serveru není nainstalován HABPanel</string> + <string name="app_shortcut_diabled_notifications">Vzdálený server není dostupný</string> + <string name="app_shortcut_diabled_voice_recognition">Na Vašem zařízení nemáte nainstalovanou aplikaci k převodu řeči na text</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB vrátil prázdný seznam Sitemap</string> + <string name="error_sitemap_generic_load_error">Nelze načíst Sitemap. Došlo k následující chybě: %1$s</string> + <string name="error_network_not_available">Síť není k dispozici</string> + <string name="error_wifi_not_available">Wi-Fi je vypnuta</string> + <string name="error_http_connection_failed">Připojení se nezdařilo. Byla přijata neočekávaná odpověď při pokusu o připojení k serveru openHAB (HTTP kód odpovědi: %d).</string> + <string name="error_invalid_url">Zadejte platnou adresu URL ve formátu \'http(s)://host(:port) /\'</string> + <string name="error_port_seems_invalid">Port, který jste zadali, se zdá být neplatný pro vybraný protokol</string> + <string name="error_connection_failed">Připojení k serveru se nezdařilo</string> + <string name="error_unable_to_resolve_hostname">Nelze zjistit název hostitele</string> + <string name="error_connection_sslhandshake_failed">Ověření SSL metodou handshake se nezdařilo</string> + <string name="error_certificate_not_trusted">SSL certifikát není důvěryhodný. Importujte kořenový certifikát nebo akceptujte certifikát během SSL handshake.</string> + <string name="error_certificate_expired">Vypršela platnost certifikátu SSL. Získejte nový certifikát nebo akceptujte ověření certifikátu během SSL handshake.</string> + <string name="error_certificate_not_valid_yet">SSL certifikát ještě není platný. Získejte správný certifikát nebo akceptujte ověření certifikátu během ověření SSL metodou handshake. Také zkontrolujte, jestli je správně nastaven čas na vašem zařízení.</string> + <string name="error_certificate_invalid_date">SSL certifikát vypršel. Vyžádejte si platný certifikát a zkontrolujte, jestli máte na zařízení správně nastavený čas.</string> + <string name="error_certificate_revoked">Certifikát SSL byl odvolán. Získejte nový certifikát nebo akceptujte ověření certifikátu během SSL handshake.</string> + <string name="error_certificate_wrong_host">Certifikát SSL není platný pro %s</string> + <string name="error_http_to_https_port">Neočekávaný konec datového proudu. Snažíte se připojit k HTTPS portu pomocí HTTP?</string> + <string name="webview_ssl">V současné době tato aplikace nepodporuje vlastnoručně podepsané SSL certifikáty pro Webview widgety</string> + <string name="error_http_code_401">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 401).</string> + <string name="error_http_code_403">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 403).</string> + <string name="error_http_code_407">Ověření se nezdařilo. Zkontrolujte uživatelské jméno a heslo, případně klientský certifikát SSL (kód odpovědi HTTP 407).</string> + <string name="error_http_code_414">Adresa URL je příliš dlouhá. Použijte IP adresu a nebo kratší adresu URL (kód odpovědi HTTP 414).</string> + <string name="error_http_code_426">Vyžaduje se HTTPS. Změňte adresu URL (kód odpovědi HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Ověření se nezdařilo. Zkontrolujte klientský certifikát SSL (kód odpovědi HTTP 495).</string> + <string name="error_http_code_496">Vyžaduje se SSL certifikát (kód odpovědi HTTP 496)</string> + <string name="error_http_code_502">Vaše reverse proxy obdržela chybnou odpověď ze serveru openHAB (kód odpovědi HTTP 502)</string> + <string name="error_http_code_503">Server openHAB je dočasně nedostupný (kód odpovědi HTTP 503)</string> + <string name="error_http_code_504">Gateway time-out. Zdá se, že Vaše reverse proxy běží, ale nemůže získat odpověď od serveru openHAB (kód odpovědi HTTP 504).</string> + <string name="error_http_code_507">Server openHAB má nedostatek volného místa (kód odpovědi HTTP 507)</string> + <string name="error_http_code_511">Vyžaduje se síťové ověření (kód odpovědi HTTP 511)</string> + <string name="error_about_no_conn">Chyba při získávání informací ze serveru openHAB</string> + <string name="error_openhab_offline">Váš openHAB server je offline, zatímco cloud funguje</string> + <string name="error_no_browser_found">Na Vašem zařízení nebyl nalezen žádný prohlížeč</string> + <string name="error_no_speech_to_text_app_found">Aplikace k převodu řeči na text nenalezena</string> + <string name="install">Nainstalovat</string> + <string name="title_activity_openhabwritetag">Zapsat do NFC tagu</string> + <string name="title_activity_libraries">Použité knihovny</string> + <string name="info_write_tag">Dotkněte se tagu a počkejte na potvrzovací zprávu</string> + <string name="info_write_tag_progress">Zapisování do tagu</string> + <string name="info_write_tag_finished">Úspěšně dokončeno</string> + <string name="info_write_failed">Chyba při zápisu do tagu</string> + <string name="info_write_tag_unsupported">Zařízení nepodporuje NFC</string> + <string name="info_write_tag_disabled">NFC je zakázáno. Povolte jej v nastavení zařízení.</string> + <string name="info_openhab_apiversion_label">Verze openHAB Rest API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Secret</string> + <string name="info_openhab_push_notification_label">Stav push notifikací</string> + <string name="action_settings">Nastavení</string> + <string name="nfc_dialog_title">Zapsat akci do NFC tagu</string> + <string name="info_not_set">Není nastaveno</string> + <string name="empty_page">Tato stránka neobsahuje žádné widgety, které jsou nastaveny na viditelné</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Odeslat informace o zařízení na server</string> + <string name="send_device_info_item_prefix">Prefix názvu Item</string> + <string name="send_device_info_item_prefix_summary">Názvy Item s těmito vlastnostmi mají tento prefix</string> + <string name="settings_alarm_clock">Odeslat budík do openHAB</string> + <string name="settings_alarm_clock_summary_on">Odeslat čas budíku do Item \'%1$s\'</string> + <string name="settings_alarm_clock_summary_off">Neodesílat čas budíku na server</string> + <string name="settings_alarm_clock_howto_summary">Klikněte sem pro nápovědu jak nastavit tuto vlastnost na straně serveru</string> + <string name="settings_item_pref_item_name">Jméno Item</string> + <string name="waiting_for_item_upload">Čekám na síť abych mohl odeslat aktualizaci Item</string> + <string name="item_upload_in_progress">Items se právě aktualizují</string> + <string name="notification_channel_background">Pozadí</string> + <string name="notification_channel_background_description">Slouží k zobrazení úkolů čekajících na pozadí</string> + <string name="notification_channel_background_error">Chyba v úkolech na pozadí</string> + <string name="notification_channel_background_error_description">Slouží k upozornění na chyby úkolů na pozadí</string> + <string name="item_update_http_error">Chyba aktualizace Item \'%1$s\' (HTTP chyba %2$d)</string> + <string name="item_update_connection_error">Chyba aktualizace Item \'%1$s\' (Žádné připojení)</string> + <string name="error_sending_alarm_clock_item_empty">Vyplňte prosím platný název Item</string> + <string name="retry">Opakovat</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Zatím nebylo zaslané žádné oznámení</string> + <string name="notification_list_error">Při načítání oznámení došlo k chybě</string> + <string name="list_loading_message">Načítá se\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Akceptovat neznámý certifikát?</string> + <string name="mtm_trust_anchor">Certifikát serveru nebyl podepsán známou certifikační autoritou</string> + <string name="mtm_cert_expired">Certifikát serveru vypršel</string> + <string name="mtm_accept_servername">Přijmout neodpovídající jméno serveru?</string> + <string name="mtm_hostname_mismatch">Server se nemohl prokázat jako \"%s\" Certifikát je platný jen pro:</string> + <string name="mtm_connect_anyway">Chcete se i přesto připojit?</string> + <string name="mtm_cert_details">Detaily certifikátu:</string> + <string name="mtm_decision_always">Přijmout</string> + <string name="mtm_decision_once">Jednou</string> + <string name="mtm_decision_abort">Zrušit</string> + <string name="mtm_notification">Ověření certifikátu</string> + <string name="settings_openhab_none">Žádný</string> + <!-- Themes --> + <string name="theme_name_light">Světlý</string> + <string name="theme_name_dark">Tmavý</string> + <string name="theme_name_black">Černý / AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI tmavý</string> + <!-- NFC --> + <string name="nfc_action_on">Zapnout</string> + <string name="nfc_action_up">Nahoru</string> + <string name="nfc_action_off">Vypnout</string> + <string name="nfc_action_down">Dolů</string> + <string name="nfc_action_toggle">Přepnout</string> + <string name="nfc_activate">Aktivovat</string> + <string name="nfc_action_current_color">Současná barva</string> + <string name="nfc_action_to_sitemap_page">Přejít na stránku Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Boční menu Sitemap vysunuté</string> + <string name="drawer_close">Boční menu Sitemap zasunuté</string> + <string name="mainmenu_openhab_voice_recognition">Rozpoznání hlasu</string> + <!-- About --> + <string name="about_title">O aplikaci</string> + <string name="about_license_title">Licence</string> + <string name="about_changelog">Seznam změn</string> + <string name="about_source_code">Zdrojový kód</string> + <string name="about_issues">Nahlásit problém</string> + <string name="about_docs">Dokumentace</string> + <string name="about_community_forum">Komunitní fórum</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">komunita openHAB</string> + <string name="about_server">openHAB server</string> + <string name="about_translation">Pomozte nám přeložit openHAB</string> + <string name="about_privacy_policy">Ochrana osobních údajů</string> + <string name="settings_debug_messages_title">Zobrazit informace pro řešení potíží</string> + <string name="error_couldnt_determine_openhab_url">Nemohu najít URL adresu openHAB</string> + <string name="unknown">Neznámý</string> + <string name="error_network_type_unsupported">Typ sítě (%s) není podporován</string> + <string name="set">Nastavit</string> + <string name="cancel">Zrušit</string> + <string name="close">Zavřít</string> + <string name="try_again_button">Zkusit znovu</string> + <string name="enable_wifi_button">Zapnout Wi-Fi</string> + <string name="go_to_settings_button">Přejít do nastavení</string> + <string name="enable_demo_mode_button">Spustit v ukázkovém režimu</string> + <string name="configuration_missing">Ve vaší síti jsme nenašli openHAB server. Pokud již máte server, nakonfigurujte jeho IP adresu nebo název hostitele v nastavení serveru. Pokud ještě server nemáte, můžete spustit ukázkový režim, abyste viděl, jaké jsou možosti openHAB.</string> + <string name="no_remote_server">Připojení k místnímu serveru selhalo a vzdálený server není nakonfigurovaný</string> + <string name="resolving_openhab">Hledám openHAB server\u2026</string> + <string name="waiting_for_wifi">Čekám než Wi-Fi naváže spojení\u2026</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Zobrazit log</string> + <string name="clear_log">Vymazat log</string> + <string name="empty_log">Log je prázný</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Otevřít ovládání rolet</string> + <string name="content_description_stop_roller_shutter">Zastavit roletu</string> + <string name="content_description_close_roller_shutter">Zavřít ovládání rolet</string> + <string name="content_description_open_color_wheel">Otevřít výběr barev</string> + <string name="content_description_color_up">Zapnout, nebo držením zvýšit jas</string> + <string name="content_description_color_down">Vypnout, nebo držením snížit jas</string> + <string name="content_description_open_number_picker">Otevřít výběr čísla</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Spustit openHAB</string> + <string name="content_description_increase_item_value">Zvýšit hodnotu Item</string> + <string name="content_description_decrease_item_value">Snížit hodnotu Item</string> + <string name="swipe_to_refresh_description">Aplikace se aktualizuje automaticky, obvykle není třeba to dělat ručně</string> + <string name="swipe_to_refresh_dismiss">Rozumím!</string> + <!-- Intro strings --> + <string name="app_intro">Úvod</string> + <string name="intro_welcome">Vítejte v openHAB</string> + <string name="intro_whatis">Open source program pro domácí automatizaci</string> + <string name="intro_themes">Motivy vzhledu</string> + <string name="intro_themes_description">Vyberte si mezi několika motivy</string> + <string name="intro_voice_description">Ovládejte svůj domov hlasem</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Ovládání Item můžete přiřadit k NFC tagu dlouhým podržením Item</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">PŘESKOČIT</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">HOTOVO</string> </resources> diff --git a/mobile/src/main/res/values-da/strings.xml b/mobile/src/main/res/values-da/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-da/strings.xml +++ b/mobile/src/main/res/values-da/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-de/strings.xml b/mobile/src/main/res/values-de/strings.xml index 371d923a86f55bb00c3d18f09e5058fe3347edf5..835151394392801fb381e99cb854d49a1f0a3c06 100644 --- a/mobile/src/main/res/values-de/strings.xml +++ b/mobile/src/main/res/values-de/strings.xml @@ -1,195 +1,250 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Einstellungen</string> - <string name="app_notifications">Benachrichtigungen</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Einstellungen</string> - <string name="mainmenu_openhab_selectsitemap">Standard-Sitemap auswählen</string> - <string name="mainmenu_openhab_clearcache">Bilder-Cache leeren</string> - <!-- App settings strings --> - <string name="settings_connection_title">Verbindung</string> - <string name="settings_display_title">Anzeige</string> - <string name="settings_misc_title">Verschiedenes</string> - <string name="settings_openhab_url">Lokale Server-URL</string> - <string name="settings_openhab_url_summary">Die Adresse des openHAB-Dashboards (basierend auf Rechnername oder IP). Setzen dieser Option deaktiviert die automatische Ermittlung. Aktueller Wert: %s</string> - <string name="settings_openhab_alturl">Server-URL für Fernzugiff</string> - <string name="settings_openhab_alturl_summary">Adresse des Dashboards eines openHAB-Servers außerhalb des lokalen Netzwerks. Sie wird verwendet, wenn die lokale Adresse nicht erreichbar ist. Aktueller Wert: %s</string> - <string name="settings_openhab_username">Benutzername</string> - <string name="settings_openhab_password">Passwort</string> - <string name="settings_openhab_password_summary_weak">Schwaches Passwort gesetzt</string> - <string name="settings_openhab_password_summary_strong">Starkes Passwort gesetzt</string> - <string name="settings_openhab_sslclientcert">SSL-Client-Zertifikat</string> - <string name="settings_openhab_sslclientcert_howto_summary">Für Hinweise und Erläuterungen zur SSL-Authentifizierung mittels Client-Zertifikat hier tippen</string> - <string name="settings_openhab_screentimeroff">Ruhezustand deaktivieren</string> - <string name="settings_openhab_screentimeroff_summary">Schaltet das automatische Aktivieren des Ruhezustands nach Inaktivität ab, wenn die openHAB-App läuft</string> - <string name="settings_openhab_demomode">Demomodus</string> - <string name="settings_openhab_demomode_summary">Demo-Daten an Stelle von realen Server-Daten verwenden</string> - <string name="settings_openhab_theme">Design</string> - <string name="settings_openhab_fullscreen">Vollbild</string> - <string name="settings_openhab_fullscreen_summary">Geräte-Statusleiste während der Verwendung der App ausblenden</string> - <string name="settings_openhab_icon_format">Symbol-Format</string> - <string name="settings_openhab_icon_format_png">Pixelgrafik</string> - <string name="settings_openhab_icon_format_svg">Vektorgrafik</string> - <string name="settings_chart_scaling">Diagrammskalierung</string> - <string name="settings_chart_scaling_summary">Hinweis: Kleinere Skalierungen verkleinern die Schrift- und Liniengröße, sodass mehr Platz für den Graphen entsteht. Allerdings wird die Schrift schlechter lesbar sein.</string> - <string name="settings_chart_scaling_value_xs">Sehr klein</string> - <string name="settings_chart_scaling_value_s">Klein</string> - <string name="settings_chart_scaling_value_m">Standard</string> - <string name="settings_chart_scaling_value_l">Groß</string> - <string name="settings_ringtone">Benachrichtigungston</string> - <string name="settings_ringtone_none">Keiner</string> - <string name="settings_clear_default_sitemap">Standard-Sitemap zurücksetzen</string> - <string name="settings_no_default_sitemap">Keine Standard-Sitemap festgelegt</string> - <string name="settings_current_default_sitemap">Aktuelle Standard-Sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Fernzugriff</string> - <string name="settings_openhab_connection">Lokal</string> - <string name="settings_notification_vibration">Benachrichtigungsvibration</string> - <string name="settings_notification_vibration_off">Aus</string> - <string name="settings_notification_vibration_short">Kurz</string> - <string name="settings_notification_vibration_long">Lang</string> - <string name="settings_notification_vibration_twice">Zweimal</string> - <string name="settings_connection_summary">Verbunden mit %s</string> - <string name="settings_insecure_connection_summary">Unsicher verbunden mit %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB-Sprachbefehle</string> - <string name="info_voice_input">openHAB, zu Ihren Diensten!</string> - <string name="info_voice_recognized_text">Erkannter Befehl: %1$s</string> - <string name="info_demo_mode_short">Läuft im Demomodus</string> - <string name="info_conn_url">Verbinde mit lokaler URL</string> - <string name="info_conn_rem_url">Verbinde mit Remote-URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB lieferte eine leere Sitemap-Liste</string> - <string name="error_network_not_available">Netzwerk nicht verfügbar</string> - <string name="error_http_connection_failed">Verbindung fehlgeschlagen. Es wurde eine unerwartete Antwort während des Verbindungsversuches mit dem konfigurierten openHAB-Server empfangen. (HTTP Statuscode: %d).</string> - <string name="error_invalid_url">Bitte geben Sie eine gültige URL im Format \'http(s)://Adresse(:Port)/\' an</string> - <string name="error_connection_failed">Verbindung fehlgeschlagen</string> - <string name="error_unable_to_resolve_hostname">Fehler beim Auflösen des Hostnamens</string> - <string name="error_connection_sslhandshake_failed">SSL-Handshake fehlgeschlagen</string> - <string name="error_certificate_not_trusted">Das SSL-Zertifikat ist nicht vertrauenswürdig. Bitte importieren Sie das Root-Zertifikat oder akzeptieren Sie das Zertifakt während des Verbindungsaufbaus.</string> - <string name="error_certificate_expired">SSL-Zertifikat abgelaufen. Bitte erstellen Sie ein neues Zertifikat oder akzeptieren Sie das Zertifakt während des Verbindungsaufbaus.</string> - <string name="error_certificate_not_valid_yet">SSL-Zertifikat noch nicht gültig. Bitte erstellen Sie ein gültiges Zertifikat oder akzeptieren Sie das Zertifakt während des Verbindungsaufbaus. Überprüfen Sie auch die auf Ihrem Gerät eingestellte Uhrzeit.</string> - <string name="error_certificate_revoked">SSL-Zertifikat widerrufen. Bitte erstellen Sie ein neues Zertifikat oder akzeptieren Sie das Zertifakt während des Verbindungsaufbaus.</string> - <string name="error_certificate_wrong_host">Das Zertifikat ist nicht gültig für %s</string> - <string name="error_http_code_401">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 401).</string> - <string name="error_http_code_403">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 403).</string> - <string name="error_http_code_407">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 407).</string> - <string name="error_http_code_414">URL ist zu lang. Bitte verwenden Sie die IP-Adresse oder eine kürzere URL (HTTP-Statuscode 414).</string> - <string name="error_http_code_426">HTTPS wird gefordert. Bitte ändern Sie die openHAB-URL (HTTP-Statuscode 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie das bereitgestellte SSL Client-Zertifikat (HTTP-Statuscode 495).</string> - <string name="error_http_code_496">Client-Zertifikat wird gefordert (HTTP-Statuscode 496)</string> - <string name="error_http_code_502">Ihr Reverse-Proxy bekam eine ungültige Antwort vom openHAB-Server (HTTP-Statuscode 502)</string> - <string name="error_http_code_503">Der openHAB-Server steht temporär nicht zur Verfügung (HTTP-Statuscode 503)</string> - <string name="error_http_code_504">Gateway Time-out. Ihr Reverse-Proxy läuft, aber bekam keine Antwort vom openHAB-Server (HTTP-Statuscode 504).</string> - <string name="error_http_code_507">Der openHAB-Server hat nicht genug freien Speicher (HTTP-Statuscode 507)</string> - <string name="error_http_code_511">Netzwerkauthentifizierung wird gefordert (HTTP-Statuscode 511)</string> - <string name="error_about_no_conn">Fehler beim Abrufen der openHAB-Server-Informationen</string> - <string name="error_openhab_offline">Die openHAB-Cloud-Instanz funktioniert, aber Ihr openHAB-Server ist offline</string> - <string name="error_no_app_store_found">Kein Appstore gefunden um eine Spracherkennungsapp zu installieren</string> - <string name="title_activity_openhabwritetag">NFC-Tag beschreiben</string> - <string name="title_activity_libraries">Verwendete Bibliotheken</string> - <string name="info_write_tag">Berühren Sie den NFC-Tag und warten Sie auf die Bestätigungsmitteilung</string> - <string name="info_write_tag_progress">Schreibe NFC-Tag</string> - <string name="info_write_tag_finished">Erfolgreich abgeschlossen</string> - <string name="info_write_failed">Fehler beim Schreiben des NFC-Tags</string> - <string name="info_write_tag_unsupported">Dieses Gerät unterstützt kein NFC</string> - <string name="info_write_tag_disabled">NFC ist deaktiviert. Bitte aktivieren Sie es im Einstellungsmenü Ihres Gerätes.</string> - <string name="info_openhab_apiversion_label">openHAB-Rest-API-Version</string> - <string name="info_openhab_uuid_label">openHAB-UUID</string> - <string name="info_openhab_secret_label">openHAB-Secret</string> - <string name="info_openhab_push_notification_label">Push-Benachrichtigungsstatus</string> - <string name="action_settings">Einstellungen</string> - <string name="nfc_dialog_title">Schreibe eine Aktion für dieses Element in einen NFC Tag</string> - <string name="info_not_set">Nicht gesetzt</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Keine Benachrichtigungen bisher versendet</string> - <string name="notification_list_error">Beim Laden der Benachrichtigungen ist ein Fehler aufgetreten</string> - <string name="list_loading_message">Wird geladen\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Unbekanntes Zertifikat akzeptieren?</string> - <string name="mtm_trust_anchor">Das Serverzertifikat wurde nicht von einer bekannten Zertifizierungsstelle signiert</string> - <string name="mtm_cert_expired">Das Serverzertifikat ist abgelaufen</string> - <string name="mtm_accept_servername">Nicht übereinstimmenden Servernamen akzeptieren?</string> - <string name="mtm_hostname_mismatch">Server konnte sich nicht als \"%s\" authentifizieren. Das Zertifikat ist nur gültig für:</string> - <string name="mtm_connect_anyway">Möchtest du trotzdem eine Verbindung herstellen?</string> - <string name="mtm_cert_details">Zertifikatdetails:</string> - <string name="mtm_decision_always">Akzeptieren</string> - <string name="mtm_decision_once">Einmalig</string> - <string name="mtm_decision_abort">Abbrechen</string> - <string name="mtm_notification">Unbekanntes Zertifikat</string> - <string name="settings_openhab_none">Keins</string> - <!-- Themes --> - <string name="theme_name_light">Hell</string> - <string name="theme_name_dark">Dunkel</string> - <string name="theme_name_black">Schwarz/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI dunkel</string> - <!-- NFC --> - <string name="nfc_action_on">An</string> - <string name="nfc_action_up">Hoch</string> - <string name="nfc_action_off">Aus</string> - <string name="nfc_action_down">Runter</string> - <string name="nfc_action_toggle">Umschalten</string> - <string name="nfc_activate">Aktivieren</string> - <string name="nfc_action_current_color">Momentane Farbe</string> - <string name="nfc_action_to_sitemap_page">Zur entsprechenden Sitemap navigieren</string> - <!-- Drawer --> - <string name="drawer_open">Sitemap-Bereich öffnen</string> - <string name="drawer_close">Sitemap-Bereich schließen</string> - <string name="mainmenu_openhab_voice_recognition">Sprachbefehl</string> - <!-- About --> - <string name="about_title">Über</string> - <string name="about_license_title">Lizenz</string> - <string name="about_changelog">Änderungsprotokoll</string> - <string name="about_source_code">Quelltext</string> - <string name="about_issues">Einen Fehler melden</string> - <string name="about_docs">Dokumentation</string> - <string name="about_community_forum">Community-Forum</string> - <string name="about_foundation">openHAB Foundation e.V.</string> - <string name="about_community">openHAB-Community</string> - <string name="about_server">openHAB-Server</string> - <string name="about_translation">Helfen Sie uns bei der Übersetzung von openHAB</string> - <string name="about_privacy_policy">Datenschutzerklärung</string> - <string name="settings_debug_messages_title">Zeige Informationen zur Fehlerbehebung</string> - <string name="error_couldnt_determine_openhab_url">Konnte openHAB-URL nicht ermitteln</string> - <string name="unknown">Unbekannt</string> - <string name="error_network_type_unsupported">Netzwerktyp (%s) wird nicht unterstützt</string> - <string name="set">Setzen</string> - <string name="cancel">Abbrechen</string> - <string name="close">Schließen</string> - <string name="try_again_button">Erneut versuchen</string> - <string name="go_to_settings_button">Einstellungen öffnen</string> - <string name="configuration_missing">Ihr openHAB-Server konnte nicht automatisch ermittelt werden. Konfigurieren Sie in den Servereinstellungen die IP-Adresse oder den Host-Namen.</string> - <string name="no_remote_server">Lokales Netzwerk ist nicht verfügbar und Sie haben keinen Server für den Fernzugriff konfiguriert</string> - <string name="resolving_openhab">Versuche openHAB-Server-Instanz zu finden\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Rollladen öffnen</string> - <string name="content_description_stop_roller_shutter">Rollladenbewegung stoppen</string> - <string name="content_description_close_roller_shutter">Rollladen schließen</string> - <string name="content_description_open_color_wheel">Farbauswahl öffnen</string> - <string name="content_description_color_up">Ein oder Halten zum Erhöhen der Helligkeit</string> - <string name="content_description_color_down">Aus oder Halten zum Verringern der Helligkeit</string> - <string name="content_description_open_number_picker">Zahlenauswahl öffnen</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">openHAB öffnen</string> - <string name="swipe_to_refresh_description">Die Inhalte werden automatisch aktualisiert, Sie müssen das normalerweise nicht manuell tun</string> - <string name="swipe_to_refresh_dismiss">Verstanden!</string> - <!-- Intro strings --> - <string name="app_intro">Einführung</string> - <string name="intro_welcome">Willkommen bei openHAB</string> - <string name="intro_whatis">Eine technologie- und herstellerunabhängige, quelloffene Automatisierungslösung für Ihr Zuhause</string> - <string name="intro_themes">Designs</string> - <string name="intro_themes_description">Wählen Sie zwischen verschiedenen Designs</string> - <string name="intro_voice_description">Steuern Sie Ihr Zuhause mit Ihrer Stimme</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Die Steuerung eines Items kann durch langes Tippen des Items an NFC-Tags gebunden werden</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">ÜBERSPRINGEN</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">FERTIG</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Einstellungen</string> + <string name="app_notifications">Benachrichtigungen</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Einstellungen</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Beim Laden von HABPanel ist ein Fehler aufgetreten</string> + <string name="mainmenu_openhab_selectsitemap">Standard-Sitemap auswählen</string> + <string name="mainmenu_openhab_clearcache">Bilder-Cache leeren</string> + <!-- App settings strings --> + <string name="settings_connection_title">Verbindung</string> + <string name="settings_display_title">Anzeige</string> + <string name="settings_misc_title">Verschiedenes</string> + <string name="settings_openhab_url">Lokale Server-URL</string> + <string name="settings_openhab_url_summary">Die Adresse des openHAB-Dashboards (basierend auf Rechnername oder IP). Setzen dieser Option deaktiviert die automatische Ermittlung. Aktueller Wert: %s</string> + <string name="settings_openhab_alturl">Server-URL für Fernzugiff</string> + <string name="settings_openhab_alturl_summary">Adresse des Dashboards eines openHAB-Servers außerhalb des lokalen Netzwerks. Sie wird verwendet, wenn die lokale Adresse nicht erreichbar ist. Aktueller Wert: %s</string> + <string name="settings_openhab_username">Benutzername</string> + <string name="settings_openhab_password">Passwort</string> + <string name="settings_openhab_password_summary_weak">Schwaches Passwort gesetzt</string> + <string name="settings_openhab_password_summary_strong">Starkes Passwort gesetzt</string> + <string name="settings_openhab_sslclientcert">SSL-Client-Zertifikat</string> + <string name="settings_openhab_sslclientcert_howto_summary">Für Hinweise und Erläuterungen zur SSL-Authentifizierung mittels Client-Zertifikat hier tippen</string> + <string name="settings_openhab_screentimeroff">Ruhezustand deaktivieren</string> + <string name="settings_openhab_screentimeroff_summary">Schaltet das automatische Aktivieren des Ruhezustands nach Inaktivität ab, wenn die openHAB-App läuft</string> + <string name="settings_openhab_demomode">Demomodus</string> + <string name="settings_openhab_demomode_summary">Aktivieren Sie den Demomodus, um auch ohne eigenen Server eine Vorstellung davon zu bekommen, wozu openHAB in der Lage ist.</string> + <string name="settings_openhab_theme">Design</string> + <string name="settings_openhab_fullscreen">Vollbild</string> + <string name="settings_openhab_fullscreen_summary">Geräte-Statusleiste während der Verwendung der App ausblenden</string> + <string name="settings_openhab_icon_format">Symbol-Format</string> + <string name="settings_openhab_icon_format_png">Pixelgrafik</string> + <string name="settings_openhab_icon_format_svg">Vektorgrafik</string> + <string name="settings_chart_scaling">Diagrammskalierung</string> + <string name="settings_chart_scaling_summary">Hinweis: Kleinere Skalierungen verkleinern die Schrift- und Liniengröße, sodass mehr Platz für den Graphen entsteht. Allerdings wird die Schrift schlechter lesbar sein.</string> + <string name="settings_chart_scaling_value_xs">Sehr klein</string> + <string name="settings_chart_scaling_value_s">Klein</string> + <string name="settings_chart_scaling_value_m">Standard</string> + <string name="settings_chart_scaling_value_l">Groß</string> + <string name="settings_openhab_chart_hq">Hochauflösende Diagramme</string> + <string name="settings_openhab_chart_hq_summary">Diagramme zu erstellen kann anstrengend für den Server sein. Falls Sie merken, dass die Diagramme lange laden und Ihr Server nicht leistungsfähig ist, können Sie diese Option deaktivieren, um die Ladezeiten zu verkürzen.</string> + <string name="settings_ringtone">Benachrichtigungston</string> + <string name="settings_ringtone_none">Keiner</string> + <string name="settings_clear_default_sitemap">Standard-Sitemap zurücksetzen</string> + <string name="settings_no_default_sitemap">Keine Standard-Sitemap festgelegt</string> + <string name="settings_current_default_sitemap">Aktuelle Standard-Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Fernzugriff</string> + <string name="settings_openhab_connection">Lokal</string> + <string name="settings_notification_vibration">Benachrichtigungsvibration</string> + <string name="settings_notification_vibration_off">Aus</string> + <string name="settings_notification_vibration_short">Kurz</string> + <string name="settings_notification_vibration_long">Lang</string> + <string name="settings_notification_vibration_twice">Zweimal</string> + <string name="settings_notification_ringtone_vibration">Benachrichtigungseinstellungen</string> + <string name="settings_connection_summary">Verbunden mit %s</string> + <string name="settings_insecure_connection_summary">Unsicher verbunden mit %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Sprachbefehle</string> + <string name="title_voice_widget_icon">Sprachbefehle und Startbildschirm-Verknüpfung</string> + <string name="info_voice_input">openHAB, zu Ihren Diensten!</string> + <string name="info_voice_recognized_text">Erkannter Befehl: %1$s</string> + <string name="info_demo_mode_short">Läuft im Demomodus</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Ausschalten</string> + <string name="info_conn_url">Verbinde mit lokaler URL</string> + <string name="info_conn_rem_url">Verbinde mit Remote-URL</string> + <string name="app_shortcut_diabled_habpanel">Ihr Server hat kein HABPanel installiert</string> + <string name="app_shortcut_diabled_notifications">Ihr Server für den Fernzugriff ist nicht verfügbar</string> + <string name="app_shortcut_diabled_voice_recognition">Ihr Gerät hat keine Spracherkennungs-App installiert</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB lieferte eine leere Sitemap-Liste</string> + <string name="error_sitemap_generic_load_error">Die Sitemap konnte nicht geladen werden. Der folgende Fehler ist aufgetreten: %1$s</string> + <string name="error_network_not_available">Netzwerk nicht verfügbar</string> + <string name="error_wifi_not_available">WLAN ist ausgeschaltet</string> + <string name="error_http_connection_failed">Verbindung fehlgeschlagen. Es wurde eine unerwartete Antwort während des Verbindungsversuches mit dem konfigurierten openHAB-Server empfangen. (HTTP-Statuscode: %d).</string> + <string name="error_invalid_url">Bitte geben Sie eine gültige URL im Format \'http(s)://Adresse(:Port)/\' an</string> + <string name="error_port_seems_invalid">Der eingegebene Port erscheint für das ausgewählte Protokoll ungültig</string> + <string name="error_connection_failed">Verbindung fehlgeschlagen</string> + <string name="error_unable_to_resolve_hostname">Fehler beim Auflösen des Hostnamens</string> + <string name="error_connection_sslhandshake_failed">SSL-Handshake fehlgeschlagen</string> + <string name="error_certificate_not_trusted">Das SSL-Zertifikat ist nicht vertrauenswürdig. Bitte importieren Sie das Root-Zertifikat oder akzeptieren Sie das Zertifikat während des Verbindungsaufbaus.</string> + <string name="error_certificate_expired">SSL-Zertifikat abgelaufen. Bitte erstellen Sie ein neues Zertifikat oder akzeptieren Sie das Zertifikat während des Verbindungsaufbaus.</string> + <string name="error_certificate_not_valid_yet">SSL-Zertifikat noch nicht gültig. Bitte erstellen Sie ein gültiges Zertifikat oder akzeptieren Sie das Zertifikat während des Verbindungsaufbaus. Überprüfen Sie auch die auf Ihrem Gerät eingestellte Uhrzeit.</string> + <string name="error_certificate_invalid_date">SSL-Zertifikat hat ein ungültiges Datum. Bitte erstellen Sie ein gültiges Zertifikat und überprüfen Sie, ob die Uhr auf Ihrem Gerät korrekt eingestellt ist.</string> + <string name="error_certificate_revoked">SSL-Zertifikat widerrufen. Bitte erstellen Sie ein neues Zertifikat oder akzeptieren Sie das Zertifikat während des Verbindungsaufbaus.</string> + <string name="error_certificate_wrong_host">Das Zertifikat ist für %s nicht gültig</string> + <string name="error_http_to_https_port">Unerwartetes Ende des Streams. Versuchen Sie, über HTTP eine Verbindung zu einem HTTPS-Port herzustellen?</string> + <string name="webview_ssl">Derzeit unterstützt diese App keine selbstsignierten SSL-Zertifikate für Webview-Widgets</string> + <string name="error_http_code_401">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 401).</string> + <string name="error_http_code_403">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 403).</string> + <string name="error_http_code_407">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie den konfigurierten Nutzer und das Passwort bzw. das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 407).</string> + <string name="error_http_code_414">URL ist zu lang. Bitte verwenden Sie die IP-Adresse oder eine kürzere URL (HTTP-Statuscode 414).</string> + <string name="error_http_code_426">HTTPS wird gefordert. Bitte ändern Sie die openHAB-URL (HTTP-Statuscode 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Authentifizierung fehlgeschlagen. Bitte überprüfen Sie das bereitgestellte SSL-Client-Zertifikat (HTTP-Statuscode 495).</string> + <string name="error_http_code_496">Client-Zertifikat wird gefordert (HTTP-Statuscode 496)</string> + <string name="error_http_code_502">Ihr Reverse-Proxy bekam eine ungültige Antwort vom openHAB-Server (HTTP-Statuscode 502)</string> + <string name="error_http_code_503">Der openHAB-Server steht temporär nicht zur Verfügung (HTTP-Statuscode 503)</string> + <string name="error_http_code_504">Gateway Time-out. Ihr Reverse-Proxy läuft, aber bekam keine Antwort vom openHAB-Server (HTTP-Statuscode 504).</string> + <string name="error_http_code_507">Der openHAB-Server hat nicht genug freien Speicher (HTTP-Statuscode 507)</string> + <string name="error_http_code_511">Netzwerkauthentifizierung wird gefordert (HTTP-Statuscode 511)</string> + <string name="error_about_no_conn">Fehler beim Abrufen der openHAB-Server-Informationen</string> + <string name="error_openhab_offline">Die openHAB-Cloud-Instanz funktioniert, aber Ihr openHAB-Server ist offline</string> + <string name="error_no_browser_found">Es wurde kein Browser auf Ihrem Gerät gefunden</string> + <string name="error_no_speech_to_text_app_found">Keine Spracherkennungs-App gefunden</string> + <string name="install">Installieren</string> + <string name="title_activity_openhabwritetag">NFC-Tag beschreiben</string> + <string name="title_activity_libraries">Verwendete Bibliotheken</string> + <string name="info_write_tag">Berühren Sie den NFC-Tag und warten Sie auf die Bestätigungsmitteilung</string> + <string name="info_write_tag_progress">Schreibe NFC-Tag</string> + <string name="info_write_tag_finished">Erfolgreich abgeschlossen</string> + <string name="info_write_failed">Fehler beim Schreiben des NFC-Tags</string> + <string name="info_write_tag_unsupported">Dieses Gerät unterstützt kein NFC</string> + <string name="info_write_tag_disabled">NFC ist deaktiviert. Bitte aktivieren Sie es im Einstellungsmenü Ihres Gerätes.</string> + <string name="info_openhab_apiversion_label">openHAB-Rest-API-Version</string> + <string name="info_openhab_uuid_label">openHAB-UUID</string> + <string name="info_openhab_secret_label">openHAB-Secret</string> + <string name="info_openhab_push_notification_label">Push-Benachrichtigungsstatus</string> + <string name="action_settings">Einstellungen</string> + <string name="nfc_dialog_title">Schreibe eine Aktion für dieses Element in einen NFC Tag</string> + <string name="nfc_tag_recognized_label">NFC-Tag für \"%s\" erkannt</string> + <string name="nfc_tag_recognized_item">NFC-Tag für Item \"%s\" erkannt</string> + <string name="info_not_set">Nicht gesetzt</string> + <string name="empty_page">Diese Seite beinhaltet keine sichtbaren Widgets</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Geräteinformationen an Server senden</string> + <string name="send_device_info_item_prefix">Präfix des Item-Namens</string> + <string name="send_device_info_item_prefix_summary">Die Item-Namen der folgenden Funktionen haben dieses Präfix</string> + <string name="settings_alarm_clock">Weckzeit an openHAB senden</string> + <string name="settings_alarm_clock_summary_on">Sendet Weckzeit an Item \'%1$s\'</string> + <string name="settings_alarm_clock_summary_off">Weckzeit wird nicht an den Server gesendet</string> + <string name="settings_item_pref_item_name">Item-Name</string> + <string name="waiting_for_item_upload">Warte auf Netzwerk um Item-Aktualisierungen zu senden</string> + <string name="item_upload_in_progress">Items werden gerade aktualisiert</string> + <string name="notification_channel_background">Hintergrund</string> + <string name="notification_channel_background_description">Wird verwendet, um ausstehende Hintergrundaufgaben anzuzeigen</string> + <string name="notification_channel_background_error">Fehler bei Hintergrundaufgaben</string> + <string name="notification_channel_background_error_description">Wird verwendet, um Fehler bei Hintergrundaufgaben anzuzeigen</string> + <plurals name="item_update_error_title"> + <item quantity="one">%d Item konnte nicht aktualisiert werden</item> + <item quantity="other">%d Items konnten nicht aktualisiert werden</item> + </plurals> + <string name="item_update_http_error">Update von Item \'%1$s\' fehlgeschlagen (HTTP-Fehler %2$d)</string> + <string name="item_update_connection_error">Update von Item \'%1$s\' fehlgeschlagen (Keine Verbindung)</string> + <string name="error_sending_alarm_clock_item_empty">Bitte geben Sie einen gültigen Item-Namen an</string> + <string name="retry">Erneut versuchen</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Keine Benachrichtigungen bisher versendet</string> + <string name="notification_list_error">Beim Laden der Benachrichtigungen ist ein Fehler aufgetreten</string> + <string name="list_loading_message">Wird geladen\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Unbekanntes Zertifikat akzeptieren?</string> + <string name="mtm_trust_anchor">Das Serverzertifikat wurde nicht von einer bekannten Zertifizierungsstelle signiert</string> + <string name="mtm_cert_expired">Das Serverzertifikat ist abgelaufen</string> + <string name="mtm_accept_servername">Nicht übereinstimmenden Servernamen akzeptieren?</string> + <string name="mtm_hostname_mismatch">Server konnte sich nicht als \"%s\" authentifizieren. Das Zertifikat ist nur gültig für:</string> + <string name="mtm_connect_anyway">Möchten Sie trotzdem eine Verbindung herstellen?</string> + <string name="mtm_cert_details">Zertifikatdetails:</string> + <string name="mtm_decision_always">Akzeptieren</string> + <string name="mtm_decision_once">Einmalig</string> + <string name="mtm_decision_abort">Abbrechen</string> + <string name="mtm_notification">Unbekanntes Zertifikat</string> + <string name="settings_openhab_none">Keins</string> + <!-- Themes --> + <string name="theme_name_light">Hell</string> + <string name="theme_name_dark">Dunkel</string> + <string name="theme_name_black">Schwarz/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI dunkel</string> + <!-- NFC --> + <string name="nfc_action_on">An</string> + <string name="nfc_action_up">Hoch</string> + <string name="nfc_action_off">Aus</string> + <string name="nfc_action_down">Runter</string> + <string name="nfc_action_toggle">Umschalten</string> + <string name="nfc_activate">Aktivieren</string> + <string name="nfc_action_current_color">Momentane Farbe</string> + <string name="nfc_action_to_sitemap_page">Zur entsprechenden Sitemap navigieren</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap-Bereich öffnen</string> + <string name="drawer_close">Sitemap-Bereich schließen</string> + <string name="mainmenu_openhab_voice_recognition">Sprachbefehl</string> + <!-- About --> + <string name="about_title">Über</string> + <string name="about_license_title">Lizenz</string> + <string name="about_changelog">Änderungsprotokoll</string> + <string name="about_source_code">Quelltext</string> + <string name="about_issues">Einen Fehler melden</string> + <string name="about_docs">Dokumentation</string> + <string name="about_community_forum">Community-Forum</string> + <string name="about_foundation">openHAB Foundation e.V.</string> + <string name="about_community">openHAB-Community</string> + <string name="about_server">openHAB-Server</string> + <string name="about_translation">Helfen Sie uns bei der Übersetzung von openHAB</string> + <string name="about_privacy_policy">Datenschutzerklärung</string> + <string name="settings_debug_messages_title">Zeige Informationen zur Fehlerbehebung</string> + <string name="error_couldnt_determine_openhab_url">Konnte openHAB-URL nicht ermitteln</string> + <string name="unknown">Unbekannt</string> + <string name="error_network_type_unsupported">Netzwerktyp (%s) wird nicht unterstützt</string> + <string name="set">Setzen</string> + <string name="cancel">Abbrechen</string> + <string name="close">Schließen</string> + <string name="try_again_button">Erneut versuchen</string> + <string name="enable_wifi_button">WLAN aktivieren</string> + <string name="go_to_settings_button">Einstellungen öffnen</string> + <string name="enable_demo_mode_button">Demomodus aktivieren</string> + <string name="configuration_missing">Wir konnten keinen openHAB-Server in Ihrem Netzwerk finden. Wenn sie bereits einen Server zur Verfügung haben, konfigurieren Sie ihn in den Einstellungen. Anderenfalls können Sie den Demomodus aktivieren, um eine Vorstellung davon zu bekommen, wozu openHAB in der Lage ist.</string> + <string name="no_remote_server">Verbindung zu lokalem Server fehlgeschlagen und Sie haben keinen Server für den Fernzugriff konfiguriert</string> + <string name="resolving_openhab">Versuche openHAB-Server-Instanz zu finden\u2026</string> + <string name="waiting_for_wifi">Warte auf WLAN-Verbindung\u2026</string> + <!-- Log --> + <string name="log">Protokoll</string> + <string name="view_log">Protokoll anzeigen</string> + <string name="clear_log">Protokoll löschen</string> + <string name="empty_log">Protokoll ist leer</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Rollladen öffnen</string> + <string name="content_description_stop_roller_shutter">Rollladenbewegung stoppen</string> + <string name="content_description_close_roller_shutter">Rollladen schließen</string> + <string name="content_description_open_color_wheel">Farbauswahl öffnen</string> + <string name="content_description_color_up">Ein oder Halten zum Erhöhen der Helligkeit</string> + <string name="content_description_color_down">Aus oder Halten zum Verringern der Helligkeit</string> + <string name="content_description_open_number_picker">Zahlenauswahl öffnen</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">openHAB öffnen</string> + <string name="content_description_increase_item_value">Item-Status erhöhen</string> + <string name="content_description_decrease_item_value">Item-Status verringern</string> + <string name="swipe_to_refresh_description">Die Inhalte werden automatisch aktualisiert, Sie müssen das normalerweise nicht manuell tun</string> + <string name="swipe_to_refresh_dismiss">Verstanden!</string> + <!-- Intro strings --> + <string name="app_intro">Einführung</string> + <string name="intro_welcome">Willkommen bei openHAB</string> + <string name="intro_whatis">Eine technologie- und herstellerunabhängige, quelloffene Automatisierungslösung für Ihr Zuhause</string> + <string name="intro_themes">Designs</string> + <string name="intro_themes_description">Wählen Sie zwischen verschiedenen Designs</string> + <string name="intro_voice_description">Steuern Sie Ihr Zuhause mit Ihrer Stimme</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Die Steuerung eines Items kann durch langes Tippen des Items an NFC-Tags gebunden werden</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">ÜBERSPRINGEN</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">FERTIG</string> </resources> diff --git a/mobile/src/main/res/values-el/strings.xml b/mobile/src/main/res/values-el/strings.xml index e6bb39ff5e391ea0811b8b56571e87091f1aff89..8e90728b1f88df66090a2bc6483c0539bdf5b4e4 100644 --- a/mobile/src/main/res/values-el/strings.xml +++ b/mobile/src/main/res/values-el/strings.xml @@ -1,195 +1,193 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Ρυθμίσεις</string> - <string name="app_notifications">Ειδοποιήσεις</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Χάρτες Χώρου</string> - <string name="mainmenu_openhab_preferences">Ρυθμίσεις</string> - <string name="mainmenu_openhab_selectsitemap">Επιλέξτε προεπιλεγμένο Sitemap</string> - <string name="mainmenu_openhab_clearcache">Καθάρισμα κρυφής μνήμης</string> - <!-- App settings strings --> - <string name="settings_connection_title">Σύνδεση</string> - <string name="settings_display_title">Εμφάνιση</string> - <string name="settings_misc_title">Διάφορα</string> - <string name="settings_openhab_url">Διεύθυνση openHAB</string> - <string name="settings_openhab_url_summary">Η διεύθυνση του openHAB (όνομα διακομιστή ή IP). Αν ρυθμιστεί, απενεργοποιεί την αυτόματη εύρεση. Τρέχουσα ρύθμιση: %s</string> - <string name="settings_openhab_alturl">Απομακρυσμένη διεύθυνση openHAB</string> - <string name="settings_openhab_alturl_summary">Η διεύθυνση του openHAB όταν η τοπική διεύθυνση δεν είναι διαθέσιμη. Τρέχουσα ρύθμιση: %s</string> - <string name="settings_openhab_username">Όνομα χρήστη</string> - <string name="settings_openhab_password">Κωδικός</string> - <string name="settings_openhab_password_summary_weak">Ασθενής κωδικός πρόσβασης</string> - <string name="settings_openhab_password_summary_strong">Ισχυρός κωδικός πρόσβασης</string> - <string name="settings_openhab_sslclientcert">Πιστοποιητικό SSL πελάτη</string> - <string name="settings_openhab_sslclientcert_howto_summary">Πατήστε εδώ για να ενημερωθείτε για το πως θα ορίσετε πιστοποίηση με πιστοποιητικό SSL πελάτη</string> - <string name="settings_openhab_screentimeroff">Απενεργοποίηση αδρανοποίησης</string> - <string name="settings_openhab_screentimeroff_summary">Απενεργοποίηση σβησίματος οθόνης όταν τρέχει το openHAB</string> - <string name="settings_openhab_demomode">Κατάσταση επίδειξης</string> - <string name="settings_openhab_demomode_summary">Εκτέλεση σε κατάσταση επίδειξης</string> - <string name="settings_openhab_theme">Θέμα</string> - <string name="settings_openhab_fullscreen">Πλήρης Οθόνη</string> - <string name="settings_openhab_fullscreen_summary">Προβολή σε πλήρη οθόνη</string> - <string name="settings_openhab_icon_format">Μορφή εικονιδίου</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Διάνυσμα</string> - <string name="settings_chart_scaling">Κλιμακοποίηση διαγράμματος</string> - <string name="settings_chart_scaling_summary">Σημείωση: Η μικρότερη κλίμακα, συρρικνώνει τις γραμματοσειρές και το πλάτος των γραμμών, ώστε να υπάρχει περισσότερος χώρος για το γράφημα, αλλά η ευανάγνωση των γραμματοσειρών να μειωθεί.</string> - <string name="settings_chart_scaling_value_xs">Πολύ μικρό</string> - <string name="settings_chart_scaling_value_s">Μικρό</string> - <string name="settings_chart_scaling_value_m">Προεπιλογή</string> - <string name="settings_chart_scaling_value_l">Μεγάλο</string> - <string name="settings_ringtone">Ήχος κλήσης ειδοποίησης</string> - <string name="settings_ringtone_none">Κανένα</string> - <string name="settings_clear_default_sitemap">Καθαρισμός προεπιλεγμένου Sitemap</string> - <string name="settings_no_default_sitemap">Δεν έχει επιλεγεί προκαθορισμένο sitemap</string> - <string name="settings_current_default_sitemap">Τρέχον προκαθορισμένο sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Απομακρυσμένo</string> - <string name="settings_openhab_connection">Τοπικό</string> - <string name="settings_notification_vibration">Δόνηση ειδοποιήσεων</string> - <string name="settings_notification_vibration_off">Σβηστό</string> - <string name="settings_notification_vibration_short">Σύντομη</string> - <string name="settings_notification_vibration_long">Παρατεταμένη</string> - <string name="settings_notification_vibration_twice">Δύο φορές</string> - <string name="settings_connection_summary">Συνδεδεμένο σε %s</string> - <string name="settings_insecure_connection_summary">Μη ασφαλής σύνδεση σε %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">Φωνητικές εντολές openHAB</string> - <string name="info_voice_input">openHAB, στις προσταγές σας!</string> - <string name="info_voice_recognized_text">Αναγνωρισμένη εντολή: %1$s</string> - <string name="info_demo_mode_short">Εκτέλεση σε κατάσταση παρουσίασης (demo)</string> - <string name="info_conn_url">Σύνδεση στην τοπική διεύθυνση</string> - <string name="info_conn_rem_url">Σύνδεση στην απομακρυσμένη διεύθυνση</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">Το openHAB επέστρεψε μια άδεια λίστα Sitemap</string> - <string name="error_network_not_available">Το δίκτυο δεν είναι διαθέσιμο</string> - <string name="error_http_connection_failed">Η σύνδεση απέτυχε. Λήψη μη αναμενόμενης απάντησης κατά την προσπάθεια σύνδεσης με το διακομιστή openHAB (κωδικός απόκρισης HTTP: %d).</string> - <string name="error_invalid_url">Παρακαλώ εισάγετε ενα σωστό URL της μορφής \'πρωτόκολλο://διακομιστής:πόρτα/\'</string> - <string name="error_connection_failed">Η σύνδεση στον διακομιστή απέτυχε</string> - <string name="error_unable_to_resolve_hostname">Αδυναμία ανεύρεσης ονόματος διακομιστή</string> - <string name="error_connection_sslhandshake_failed">Η διαδικασία SSL Handshake απέτυχε</string> - <string name="error_certificate_not_trusted">Το πιστοποιητικό SSL δεν είναι έμπιστο. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την την διαδικασία εγκαθίδρυσης SSL.</string> - <string name="error_certificate_expired">Το πιστοποιητικό SSL έχει λήξει. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL.</string> - <string name="error_certificate_not_valid_yet">Το πιστοποιητικό SSL δεν είναι έγκυρο ακόμα. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL. Επίσης, ελέγξτε ότι το ρολόι στην συσκευή σας είναι ρυθμισμένο σωστά.</string> - <string name="error_certificate_revoked">Το πιστοποιητικό SSL έχει ανακληθεί. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL.</string> - <string name="error_certificate_wrong_host">Το πιστοποιητικό SSL δεν είναι έγκυρο για %s</string> - <string name="error_http_code_401">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 401).</string> - <string name="error_http_code_403">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 403).</string> - <string name="error_http_code_407">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 407).</string> - <string name="error_http_code_414">Το URL είναι πολύ μακρύ. Παρακαλώ χρησιμοποιήστε το IP ή ένα πιο μικρό URL (κωδικός απόκρισης HTTP 414).</string> - <string name="error_http_code_426">Απαιτείται χρήση HTTPS. Παρακαλώ αλλάξτε το URL (κωδικός απόκρισης HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 495).</string> - <string name="error_http_code_496">Απαιτείται SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 496)</string> - <string name="error_http_code_502">Ο reverse proxy σας έλαβε λάθος απάντηση από το openHAB (κωδικός απόκρισης HTTP 502)</string> - <string name="error_http_code_503">Το openHAB είναι προσωρινά μη διαθέσιμο (κωδικός απόκρισης HTTP 503)</string> - <string name="error_http_code_504">Τέλος χρόνου Πύλης (Gateway). Φαίνεται ότι ο reverse proxy είναι σε λειτουργία αλλά δε μπορούσε να λάβει απάντηση από το openHAB (κωδικός απόκρισης HTTP 504).</string> - <string name="error_http_code_507">Tο openHAB δεν έχει αρκετό ελεύθερο χώρο (κωδικός απόκρισης HTTP 507)</string> - <string name="error_http_code_511">Απαιτείται πιστοποίηση δικτύου (κωδικός απόκρισης HTTP 511)</string> - <string name="error_about_no_conn">Σφάλμα κατά τη λήψη των πληροφοριών διακομιστή openHAB</string> - <string name="error_openhab_offline">Ο openHAB διακομιστής σας βρίσκεται εκτός σύνδεσης ενώ εκτελείται η παρουσία στο cloud</string> - <string name="error_no_app_store_found">Δεν βρέθηκε app store για την εγκατάσταση εφαρμογής αναγνώρισης φωνής</string> - <string name="title_activity_openhabwritetag">Εγγραφή ετικέτας NFC</string> - <string name="title_activity_libraries">Χρησιμοποιημένες βιβλιοθήκες</string> - <string name="info_write_tag">Αγγίξτε την ετικέτα NFC και κρατήστε την κοντά μέχρι να εμφανιστεί το μήνυμα επιβεβαίωσης</string> - <string name="info_write_tag_progress">Εγγραφή ετικέτας NFC</string> - <string name="info_write_tag_finished">Ολοκληρώθηκε με επιτυχία</string> - <string name="info_write_failed">Σφάλμα στην εγγραφή της ετικέτας NFC</string> - <string name="info_write_tag_unsupported">Αυτή η συσκευή δεν υποστηρίζει NFC</string> - <string name="info_write_tag_disabled">Το NFC είναι απενεργοποιημένο. Παρακαλώ ενεργοποιήστε το από το μενού ρυθμίσεων συσκευής.</string> - <string name="info_openhab_apiversion_label">Έκδοση openHAB Rest API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">Μυστικό openHAB</string> - <string name="info_openhab_push_notification_label">Κατάσταση ειδοποιήσεων</string> - <string name="action_settings">Ρυθμίσεις</string> - <string name="nfc_dialog_title">Παρακαλώ επιλέξτε ενέργεια για την ετικέτα NFC</string> - <string name="info_not_set">Δεν έχει ρυθμιστεί</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Καμία ειδοποίηση δεν έχει σταλεί ως τώρα</string> - <string name="notification_list_error">Παρουσιάστηκε σφάλμα κατά την φόρτωση των ειδοποιήσεων</string> - <string name="list_loading_message">Φόρτωση\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Αποδοχή άγνωστου πιστοποιητικού;</string> - <string name="mtm_trust_anchor">Το πιστοποιητικό του διακομιστή δεν είναι υπογεγραμμένο από κάποια γνωστή Αρχή Έκδοσης Πιστοποιητικών (CA)</string> - <string name="mtm_cert_expired">Το πιστοποιητικό είναι ληγμένο</string> - <string name="mtm_accept_servername">Αποδοχή μη αντιστοιχούντος ονόματος διακομιστή;</string> - <string name="mtm_hostname_mismatch">Διακομιστή δεν θα μπορούσε να πραγματοποιήσει έλεγχο ταυτότητας ως \"%s\". Το πιστοποιητικό ισχύει μόνο για:</string> - <string name="mtm_connect_anyway">Θέλετε να συνδεθείτε οπωσδήποτε;</string> - <string name="mtm_cert_details">Λεπτομέρειες πιστοποιητικού:</string> - <string name="mtm_decision_always">Αποδοχή</string> - <string name="mtm_decision_once">Μία φορά</string> - <string name="mtm_decision_abort">Διακοπή</string> - <string name="mtm_notification">Επιβεβαίωση πιστοποιητικού</string> - <string name="settings_openhab_none">Κανένα</string> - <!-- Themes --> - <string name="theme_name_light">Ανοιχτόχρωμο</string> - <string name="theme_name_dark">Σκοτεινό</string> - <string name="theme_name_black">Μαύρο/AMOLED</string> - <string name="theme_name_basic_ui">Βασικό UI</string> - <string name="theme_name_basic_ui_dark">Βασικό σκοτεινό UI</string> - <!-- NFC --> - <string name="nfc_action_on">Αναμμένο</string> - <string name="nfc_action_up">Πάνω</string> - <string name="nfc_action_off">Σβηστό</string> - <string name="nfc_action_down">Κάτω</string> - <string name="nfc_action_toggle">Μεταβολή</string> - <string name="nfc_activate">Ενεργοποίηση</string> - <string name="nfc_action_current_color">Τρέχον χρώμα</string> - <string name="nfc_action_to_sitemap_page">Μεταβείτε στη σελίδα του Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Συρτάρι-ανοικτό</string> - <string name="drawer_close">Συρτάρι-κλειστό</string> - <string name="mainmenu_openhab_voice_recognition">Αναγνώριση φωνής</string> - <!-- About --> - <string name="about_title">Σχετικά</string> - <string name="about_license_title">Άδεια</string> - <string name="about_changelog">Αρχείο αλλαγών</string> - <string name="about_source_code">Πηγαίος κώδικας</string> - <string name="about_issues">Αναφορά προβλήματος</string> - <string name="about_docs">Τεκμηρίωση</string> - <string name="about_community_forum">Φόρουμ κοινότητας</string> - <string name="about_foundation">Ίδρυμα openHAB</string> - <string name="about_community">Κοινότητα openHAB</string> - <string name="about_server">Διακομιστής openHAB</string> - <string name="about_translation">Βοηθείστε μας να μεταφράσουμε το openHAB</string> - <string name="about_privacy_policy">Πολιτική Απορρήτου</string> - <string name="settings_debug_messages_title">Εμφάνιση πληροφοριών για την αντιμετώπιση προβλημάτων</string> - <string name="error_couldnt_determine_openhab_url">Αδυναμία προσδιορισμού του openHAB URL</string> - <string name="unknown">Άγνωστο</string> - <string name="error_network_type_unsupported">Ο τύπος δικτύου (%s) δεν υποστηρίζεται</string> - <string name="set">Ορισμός</string> - <string name="cancel">Άκυρο</string> - <string name="close">Κλείσιμο</string> - <string name="try_again_button">Προσπαθήστε ξανά</string> - <string name="go_to_settings_button">Μετάβαση στις ρυθμίσεις</string> - <string name="configuration_missing">Δεν ήταν δυνατό να γίνει αυτόματη εύρεση του διακομιστή openHAB. Παρακαλώ ρυθμίστε την IP διεύθυνση ή το όνομα υπολογιστή στις ρυθμίσεις διακομιστή.</string> - <string name="no_remote_server">Το τοπικό δίκτυο δεν είναι διαθέσιμο και δεν έχετε διαμορφώσει έναν απομακρυσμένο διακομιστή</string> - <string name="resolving_openhab">Προσπάθεια εύρεσης του διακομιστή openHAB</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Άνοιγμα ρολών</string> - <string name="content_description_stop_roller_shutter">Σταμάτημα ρολών</string> - <string name="content_description_close_roller_shutter">Κλείσιμο ρολών</string> - <string name="content_description_open_color_wheel">Άνοιγμα επιλογέα χρώματος</string> - <string name="content_description_color_up">Ενεργοποίηση ή κράτηστε για την αύξηση της φωτεινότητας</string> - <string name="content_description_color_down">Απενενεργοποίηση ή κράτηστε για την μείωση της φωτεινότητας</string> - <string name="content_description_open_number_picker">Άνοιγμα επιλογέα αριθμών</string> - <string name="content_description_video">Βίντεο</string> - <string name="content_description_open_openhab">Άνοιγμα openHAB</string> - <string name="swipe_to_refresh_description">Η εφαρμογή ανανεώνεται αυτόματα, κανονικά δε χρειάζεται να το κάνετε με το χέρι</string> - <string name="swipe_to_refresh_dismiss">Το κατάλαβα!</string> - <!-- Intro strings --> - <string name="app_intro">Εισαγωγή</string> - <string name="intro_welcome">Καλώς ήρθατε στο openHAB</string> - <string name="intro_whatis">Λογισμικό ανοιχτού κώδικα αυτοματοποίησης, ανεξάρτητο κατασκευαστή και τεχνολογίας, για το σπίτι σας.</string> - <string name="intro_themes">Θέματα</string> - <string name="intro_themes_description">Επιλέξτε μεταξύ διαφόρων θεμάτων</string> - <string name="intro_voice_description">Ελέγξτε το σπίτι σας με την φωνή σας</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Το στοιχείο ελέγχου μπορεί να συνδεθεί σε ετικέτες NFC κρατώντας πατημένο το στοιχείο</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">ΠΑΡΑΛΕΙΨΗ</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">ETOIMO</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Ρυθμίσεις</string> + <string name="app_notifications">Ειδοποιήσεις</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Χάρτες Χώρου</string> + <string name="mainmenu_openhab_preferences">Ρυθμίσεις</string> + <string name="mainmenu_openhab_selectsitemap">Επιλέξτε προεπιλεγμένο Sitemap</string> + <string name="mainmenu_openhab_clearcache">Καθάρισμα κρυφής μνήμης</string> + <!-- App settings strings --> + <string name="settings_connection_title">Σύνδεση</string> + <string name="settings_display_title">Εμφάνιση</string> + <string name="settings_misc_title">Διάφορα</string> + <string name="settings_openhab_url">Διεύθυνση openHAB</string> + <string name="settings_openhab_url_summary">Η διεύθυνση του openHAB (όνομα διακομιστή ή IP). Αν ρυθμιστεί, απενεργοποιεί την αυτόματη εύρεση. Τρέχουσα ρύθμιση: %s</string> + <string name="settings_openhab_alturl">Απομακρυσμένη διεύθυνση openHAB</string> + <string name="settings_openhab_alturl_summary">Η διεύθυνση του openHAB όταν η τοπική διεύθυνση δεν είναι διαθέσιμη. Τρέχουσα ρύθμιση: %s</string> + <string name="settings_openhab_username">Όνομα χρήστη</string> + <string name="settings_openhab_password">Κωδικός</string> + <string name="settings_openhab_password_summary_weak">Ασθενής κωδικός πρόσβασης</string> + <string name="settings_openhab_password_summary_strong">Ισχυρός κωδικός πρόσβασης</string> + <string name="settings_openhab_sslclientcert">Πιστοποιητικό SSL πελάτη</string> + <string name="settings_openhab_sslclientcert_howto_summary">Πατήστε εδώ για να ενημερωθείτε για το πως θα ορίσετε πιστοποίηση με πιστοποιητικό SSL πελάτη</string> + <string name="settings_openhab_screentimeroff">Απενεργοποίηση αδρανοποίησης</string> + <string name="settings_openhab_screentimeroff_summary">Απενεργοποίηση σβησίματος οθόνης όταν τρέχει το openHAB</string> + <string name="settings_openhab_demomode">Κατάσταση επίδειξης</string> + <string name="settings_openhab_theme">Θέμα</string> + <string name="settings_openhab_fullscreen">Πλήρης Οθόνη</string> + <string name="settings_openhab_fullscreen_summary">Προβολή σε πλήρη οθόνη</string> + <string name="settings_openhab_icon_format">Μορφή εικονιδίου</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Διάνυσμα</string> + <string name="settings_chart_scaling">Κλιμακοποίηση διαγράμματος</string> + <string name="settings_chart_scaling_summary">Σημείωση: Η μικρότερη κλίμακα, συρρικνώνει τις γραμματοσειρές και το πλάτος των γραμμών, ώστε να υπάρχει περισσότερος χώρος για το γράφημα, αλλά η ευανάγνωση των γραμματοσειρών να μειωθεί.</string> + <string name="settings_chart_scaling_value_xs">Πολύ μικρό</string> + <string name="settings_chart_scaling_value_s">Μικρό</string> + <string name="settings_chart_scaling_value_m">Προεπιλογή</string> + <string name="settings_chart_scaling_value_l">Μεγάλο</string> + <string name="settings_ringtone">Ήχος κλήσης ειδοποίησης</string> + <string name="settings_ringtone_none">Κανένα</string> + <string name="settings_clear_default_sitemap">Καθαρισμός προεπιλεγμένου Sitemap</string> + <string name="settings_no_default_sitemap">Δεν έχει επιλεγεί προκαθορισμένο sitemap</string> + <string name="settings_current_default_sitemap">Τρέχον προκαθορισμένο sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Απομακρυσμένo</string> + <string name="settings_openhab_connection">Τοπικό</string> + <string name="settings_notification_vibration">Δόνηση ειδοποιήσεων</string> + <string name="settings_notification_vibration_off">Σβηστό</string> + <string name="settings_notification_vibration_short">Σύντομη</string> + <string name="settings_notification_vibration_long">Παρατεταμένη</string> + <string name="settings_notification_vibration_twice">Δύο φορές</string> + <string name="settings_connection_summary">Συνδεδεμένο σε %s</string> + <string name="settings_insecure_connection_summary">Μη ασφαλής σύνδεση σε %s</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, στις προσταγές σας!</string> + <string name="info_voice_recognized_text">Αναγνωρισμένη εντολή: %1$s</string> + <string name="info_demo_mode_short">Εκτέλεση σε κατάσταση παρουσίασης (demo)</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Σύνδεση στην τοπική διεύθυνση</string> + <string name="info_conn_rem_url">Σύνδεση στην απομακρυσμένη διεύθυνση</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">Το openHAB επέστρεψε μια άδεια λίστα Sitemap</string> + <string name="error_network_not_available">Το δίκτυο δεν είναι διαθέσιμο</string> + <string name="error_http_connection_failed">Η σύνδεση απέτυχε. Λήψη μη αναμενόμενης απάντησης κατά την προσπάθεια σύνδεσης με το διακομιστή openHAB (κωδικός απόκρισης HTTP: %d).</string> + <string name="error_invalid_url">Παρακαλώ εισάγετε ενα σωστό URL της μορφής \'πρωτόκολλο://διακομιστής:πόρτα/\'</string> + <string name="error_connection_failed">Η σύνδεση στον διακομιστή απέτυχε</string> + <string name="error_unable_to_resolve_hostname">Αδυναμία ανεύρεσης ονόματος διακομιστή</string> + <string name="error_connection_sslhandshake_failed">Η διαδικασία SSL Handshake απέτυχε</string> + <string name="error_certificate_not_trusted">Το πιστοποιητικό SSL δεν είναι έμπιστο. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την την διαδικασία εγκαθίδρυσης SSL.</string> + <string name="error_certificate_expired">Το πιστοποιητικό SSL έχει λήξει. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL.</string> + <string name="error_certificate_not_valid_yet">Το πιστοποιητικό SSL δεν είναι έγκυρο ακόμα. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL. Επίσης, ελέγξτε ότι το ρολόι στην συσκευή σας είναι ρυθμισμένο σωστά.</string> + <string name="error_certificate_revoked">Το πιστοποιητικό SSL έχει ανακληθεί. Παρακαλώ λάβετε καινούριο πιστοποιητικό ή αποδεχτείτε το πιστοποιητικό κατά την διαδικασία εγκαθίδρυσης SSL.</string> + <string name="error_certificate_wrong_host">Το πιστοποιητικό SSL δεν είναι έγκυρο για %s</string> + <string name="error_http_code_401">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 401).</string> + <string name="error_http_code_403">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 403).</string> + <string name="error_http_code_407">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το όνομα χρήστη και κωδικό, αντίστοιχα και το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 407).</string> + <string name="error_http_code_414">Το URL είναι πολύ μακρύ. Παρακαλώ χρησιμοποιήστε το IP ή ένα πιο μικρό URL (κωδικός απόκρισης HTTP 414).</string> + <string name="error_http_code_426">Απαιτείται χρήση HTTPS. Παρακαλώ αλλάξτε το URL (κωδικός απόκρισης HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Η πιστοποίηση του χρήστη απέτυχε. Παρακαλώ ελέγξτε το SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 495).</string> + <string name="error_http_code_496">Απαιτείται SSL πιστοποιητικό πελάτη (κωδικός απόκρισης HTTP 496)</string> + <string name="error_http_code_502">Ο reverse proxy σας έλαβε λάθος απάντηση από το openHAB (κωδικός απόκρισης HTTP 502)</string> + <string name="error_http_code_503">Το openHAB είναι προσωρινά μη διαθέσιμο (κωδικός απόκρισης HTTP 503)</string> + <string name="error_http_code_504">Τέλος χρόνου Πύλης (Gateway). Φαίνεται ότι ο reverse proxy είναι σε λειτουργία αλλά δε μπορούσε να λάβει απάντηση από το openHAB (κωδικός απόκρισης HTTP 504).</string> + <string name="error_http_code_507">Tο openHAB δεν έχει αρκετό ελεύθερο χώρο (κωδικός απόκρισης HTTP 507)</string> + <string name="error_http_code_511">Απαιτείται πιστοποίηση δικτύου (κωδικός απόκρισης HTTP 511)</string> + <string name="error_about_no_conn">Σφάλμα κατά τη λήψη των πληροφοριών διακομιστή openHAB</string> + <string name="error_openhab_offline">Ο openHAB διακομιστής σας βρίσκεται εκτός σύνδεσης ενώ εκτελείται η παρουσία στο cloud</string> + <string name="title_activity_openhabwritetag">Εγγραφή ετικέτας NFC</string> + <string name="title_activity_libraries">Χρησιμοποιημένες βιβλιοθήκες</string> + <string name="info_write_tag">Αγγίξτε την ετικέτα NFC και κρατήστε την κοντά μέχρι να εμφανιστεί το μήνυμα επιβεβαίωσης</string> + <string name="info_write_tag_progress">Εγγραφή ετικέτας NFC</string> + <string name="info_write_tag_finished">Ολοκληρώθηκε με επιτυχία</string> + <string name="info_write_failed">Σφάλμα στην εγγραφή της ετικέτας NFC</string> + <string name="info_write_tag_unsupported">Αυτή η συσκευή δεν υποστηρίζει NFC</string> + <string name="info_write_tag_disabled">Το NFC είναι απενεργοποιημένο. Παρακαλώ ενεργοποιήστε το από το μενού ρυθμίσεων συσκευής.</string> + <string name="info_openhab_apiversion_label">Έκδοση openHAB Rest API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">Μυστικό openHAB</string> + <string name="info_openhab_push_notification_label">Κατάσταση ειδοποιήσεων</string> + <string name="action_settings">Ρυθμίσεις</string> + <string name="nfc_dialog_title">Παρακαλώ επιλέξτε ενέργεια για την ετικέτα NFC</string> + <string name="info_not_set">Δεν έχει ρυθμιστεί</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Καμία ειδοποίηση δεν έχει σταλεί ως τώρα</string> + <string name="notification_list_error">Παρουσιάστηκε σφάλμα κατά την φόρτωση των ειδοποιήσεων</string> + <string name="list_loading_message">Φόρτωση\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Αποδοχή άγνωστου πιστοποιητικού;</string> + <string name="mtm_trust_anchor">Το πιστοποιητικό του διακομιστή δεν είναι υπογεγραμμένο από κάποια γνωστή Αρχή Έκδοσης Πιστοποιητικών (CA)</string> + <string name="mtm_cert_expired">Το πιστοποιητικό είναι ληγμένο</string> + <string name="mtm_accept_servername">Αποδοχή μη αντιστοιχούντος ονόματος διακομιστή;</string> + <string name="mtm_hostname_mismatch">Διακομιστή δεν θα μπορούσε να πραγματοποιήσει έλεγχο ταυτότητας ως \"%s\". Το πιστοποιητικό ισχύει μόνο για:</string> + <string name="mtm_connect_anyway">Θέλετε να συνδεθείτε οπωσδήποτε;</string> + <string name="mtm_cert_details">Λεπτομέρειες πιστοποιητικού:</string> + <string name="mtm_decision_always">Αποδοχή</string> + <string name="mtm_decision_once">Μία φορά</string> + <string name="mtm_decision_abort">Διακοπή</string> + <string name="mtm_notification">Επιβεβαίωση πιστοποιητικού</string> + <string name="settings_openhab_none">Κανένα</string> + <!-- Themes --> + <string name="theme_name_light">Ανοιχτόχρωμο</string> + <string name="theme_name_dark">Σκοτεινό</string> + <string name="theme_name_black">Μαύρο/AMOLED</string> + <string name="theme_name_basic_ui">Βασικό UI</string> + <string name="theme_name_basic_ui_dark">Βασικό σκοτεινό UI</string> + <!-- NFC --> + <string name="nfc_action_on">Αναμμένο</string> + <string name="nfc_action_up">Πάνω</string> + <string name="nfc_action_off">Σβηστό</string> + <string name="nfc_action_down">Κάτω</string> + <string name="nfc_action_toggle">Μεταβολή</string> + <string name="nfc_activate">Ενεργοποίηση</string> + <string name="nfc_action_current_color">Τρέχον χρώμα</string> + <string name="nfc_action_to_sitemap_page">Μεταβείτε στη σελίδα του Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Συρτάρι-ανοικτό</string> + <string name="drawer_close">Συρτάρι-κλειστό</string> + <string name="mainmenu_openhab_voice_recognition">Αναγνώριση φωνής</string> + <!-- About --> + <string name="about_title">Σχετικά</string> + <string name="about_license_title">Άδεια</string> + <string name="about_changelog">Αρχείο αλλαγών</string> + <string name="about_source_code">Πηγαίος κώδικας</string> + <string name="about_issues">Αναφορά προβλήματος</string> + <string name="about_docs">Τεκμηρίωση</string> + <string name="about_community_forum">Φόρουμ κοινότητας</string> + <string name="about_foundation">Ίδρυμα openHAB</string> + <string name="about_community">Κοινότητα openHAB</string> + <string name="about_server">Διακομιστής openHAB</string> + <string name="about_translation">Βοηθείστε μας να μεταφράσουμε το openHAB</string> + <string name="about_privacy_policy">Πολιτική Απορρήτου</string> + <string name="settings_debug_messages_title">Εμφάνιση πληροφοριών για την αντιμετώπιση προβλημάτων</string> + <string name="error_couldnt_determine_openhab_url">Αδυναμία προσδιορισμού του openHAB URL</string> + <string name="unknown">Άγνωστο</string> + <string name="error_network_type_unsupported">Ο τύπος δικτύου (%s) δεν υποστηρίζεται</string> + <string name="set">Ορισμός</string> + <string name="cancel">Άκυρο</string> + <string name="close">Κλείσιμο</string> + <string name="try_again_button">Προσπαθήστε ξανά</string> + <string name="go_to_settings_button">Μετάβαση στις ρυθμίσεις</string> + <string name="resolving_openhab">Προσπάθεια εύρεσης του διακομιστή openHAB</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Άνοιγμα ρολών</string> + <string name="content_description_stop_roller_shutter">Σταμάτημα ρολών</string> + <string name="content_description_close_roller_shutter">Κλείσιμο ρολών</string> + <string name="content_description_open_color_wheel">Άνοιγμα επιλογέα χρώματος</string> + <string name="content_description_color_up">Ενεργοποίηση ή κράτηστε για την αύξηση της φωτεινότητας</string> + <string name="content_description_color_down">Απενενεργοποίηση ή κράτηστε για την μείωση της φωτεινότητας</string> + <string name="content_description_open_number_picker">Άνοιγμα επιλογέα αριθμών</string> + <string name="content_description_video">Βίντεο</string> + <string name="content_description_open_openhab">Άνοιγμα openHAB</string> + <string name="swipe_to_refresh_description">Η εφαρμογή ανανεώνεται αυτόματα, κανονικά δε χρειάζεται να το κάνετε με το χέρι</string> + <string name="swipe_to_refresh_dismiss">Το κατάλαβα!</string> + <!-- Intro strings --> + <string name="app_intro">Εισαγωγή</string> + <string name="intro_welcome">Καλώς ήρθατε στο openHAB</string> + <string name="intro_whatis">Λογισμικό ανοιχτού κώδικα αυτοματοποίησης, ανεξάρτητο κατασκευαστή και τεχνολογίας, για το σπίτι σας.</string> + <string name="intro_themes">Θέματα</string> + <string name="intro_themes_description">Επιλέξτε μεταξύ διαφόρων θεμάτων</string> + <string name="intro_voice_description">Ελέγξτε το σπίτι σας με την φωνή σας</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Το στοιχείο ελέγχου μπορεί να συνδεθεί σε ετικέτες NFC κρατώντας πατημένο το στοιχείο</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">ΠΑΡΑΛΕΙΨΗ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">ETOIMO</string> </resources> diff --git a/mobile/src/main/res/values-es-rUS/strings.xml b/mobile/src/main/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6f6800128e7a3a8cb04f5cc0d821c7655b13bf71 --- /dev/null +++ b/mobile/src/main/res/values-es-rUS/strings.xml @@ -0,0 +1,247 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Configuración</string> + <string name="app_notifications">Notificaciones</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Configuración</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Error al cargar HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Seleccionar el Sitemap por defecto</string> + <string name="mainmenu_openhab_clearcache">Borrar la caché de imágenes</string> + <!-- App settings strings --> + <string name="settings_connection_title">Conexión</string> + <string name="settings_display_title">Pantalla</string> + <string name="settings_misc_title">Varios</string> + <string name="settings_openhab_url">Dirección URL del servidor local</string> + <string name="settings_openhab_url_summary">La dirección URL de la consola de openHAB (basada en el nombre de host o IP). Si está configurada, se desactiva la detección automática. Valor actual: %s</string> + <string name="settings_openhab_alturl">Dirección URL del servidor remoto</string> + <string name="settings_openhab_alturl_summary">La dirección URL de la consola de openHAB cuando la dirección local no está disponible. Valor actual: %s</string> + <string name="settings_openhab_username">Nombre de usuario</string> + <string name="settings_openhab_password">Contraseña</string> + <string name="settings_openhab_password_summary_weak">Contraseña poco segura</string> + <string name="settings_openhab_password_summary_strong">Contraseña segura</string> + <string name="settings_openhab_sslclientcert">Certificado de cliente SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Clic aquí para obtener sugerencias y explicaciones sobre cómo configurar la autenticación del certificado de cliente SSL</string> + <string name="settings_openhab_screentimeroff">Deshabilitar apagado de pantalla</string> + <string name="settings_openhab_screentimeroff_summary">Deshabilita el temporizador que apaga la pantalla mientras se está ejecutando</string> + <string name="settings_openhab_demomode">Modo demo</string> + <string name="settings_openhab_demomode_summary">Si no dispone de un servidor de openHAB, habilite el modo demo para ver todo lo que puede hacer openHAB</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Pantalla completa</string> + <string name="settings_openhab_fullscreen_summary">Mostrar a pantalla completa</string> + <string name="settings_openhab_icon_format">Formato de los iconos</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vector</string> + <string name="settings_chart_scaling">Escala gráfica</string> + <string name="settings_chart_scaling_summary">Nota: Una escala más pequeña reduce las fuentes y el ancho de línea, por lo que hay más espacio para el gráfico, pero la legibilidad de la fuente puede verse afectada.</string> + <string name="settings_chart_scaling_value_xs">Muy pequeño</string> + <string name="settings_chart_scaling_value_s">Pequeño</string> + <string name="settings_chart_scaling_value_m">Predeterminado</string> + <string name="settings_chart_scaling_value_l">Grande</string> + <string name="settings_openhab_chart_hq">Gráficos en alta resolución</string> + <string name="settings_openhab_chart_hq_summary">La generación de gráficos puede generar gran carga para el servidor. Si experimenta tiempos de carga de gráficos lentos y su servidor no es potente, desactive esta opción para mejorar los tiempos de carga.</string> + <string name="settings_ringtone">Tono de notificación</string> + <string name="settings_ringtone_none">Ninguno</string> + <string name="settings_clear_default_sitemap">Quitar el Sitemap por defecto</string> + <string name="settings_no_default_sitemap">No se ha seleccionado ningún Sitemap por defecto</string> + <string name="settings_current_default_sitemap">Sitemap predeterminado actual: %1$s</string> + <string name="settings_openhab_alt_connection">Remota</string> + <string name="settings_openhab_connection">Local</string> + <string name="settings_notification_vibration">Notificaciones mediante vibración</string> + <string name="settings_notification_vibration_off">Apagado</string> + <string name="settings_notification_vibration_short">Corta</string> + <string name="settings_notification_vibration_long">Larga</string> + <string name="settings_notification_vibration_twice">Dos veces</string> + <string name="settings_notification_ringtone_vibration">Configuración de las notificaciones</string> + <string name="settings_connection_summary">Conectado a %s</string> + <string name="settings_insecure_connection_summary">Conectado a %s de forma no segura</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Comandos de voz</string> + <string name="title_voice_widget_icon">Comandos de voz y acceso directo a la aplicación</string> + <string name="info_voice_input">openHAB, ¡a tus órdenes!</string> + <string name="info_voice_recognized_text">Comando reconocido: %1$s</string> + <string name="info_demo_mode_short">Ejecutando en modo demo</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Desactivar</string> + <string name="info_conn_url">Conectando a la URL local</string> + <string name="info_conn_rem_url">Conectando a la URL remota</string> + <string name="app_shortcut_diabled_habpanel">El servidor no tiene instalado HABPanel</string> + <string name="app_shortcut_diabled_notifications">El servidor remoto no está disponible</string> + <string name="app_shortcut_diabled_voice_recognition">Su dispositivo no tiene una aplicación de reconocimiento de voz instalada</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB devolvió una lista de Sitemaps vacía</string> + <string name="error_sitemap_generic_load_error">No se pudo cargar el Sitemap. Ocurrió el siguiente error: %1$s</string> + <string name="error_network_not_available">La conexión de red no está disponible</string> + <string name="error_wifi_not_available">Wi-Fi está desactivada</string> + <string name="error_http_connection_failed">Conexión sin éxito. Se ha recibido una respuesta inesperada al intentar conectar con el servidor openHAB configurado (código de respuesta HTTP recibido: %d).</string> + <string name="error_invalid_url">Por favor, introducir una URL válida con formato \'http(s)://host(:puerto)/\'</string> + <string name="error_port_seems_invalid">El puerto introducido no es válido para el protocolo seleccionado</string> + <string name="error_connection_failed">Ha fallado la conexión con el host</string> + <string name="error_unable_to_resolve_hostname">No se puede resolver el nombre de host</string> + <string name="error_connection_sslhandshake_failed">Falló el inicio del protocolo SSL (handshake)</string> + <string name="error_certificate_not_trusted">El certificado SSL no es de confianza. Por favor, importa el certificado raíz o deshabilita la validación del certificado durante la negociación SSL.</string> + <string name="error_certificate_expired">El certificado SSL ha caducado. Por favor, obtén un nuevo certificado o acepta el certificado durante la negociación SSL.</string> + <string name="error_certificate_not_valid_yet">El certificado SSL todavía no es válido. Por favor, obtenga un certificado correcto o deshabilite la validación del certificado durante la negociación SSL. Verifique también si la hora de su dispositivo es correcta.</string> + <string name="error_certificate_invalid_date">El certificado SSL tiene una fecha inválida. Por favor, obtenga un certificado correcto y compruebe si el reloj en su dispositivo está configurado correctamente.</string> + <string name="error_certificate_revoked">El certificado SSL ha sido revocado. Por favor, obtenga un certificado nuevo o deshabilite la validación del certificado durante la negociación SSL.</string> + <string name="error_certificate_wrong_host">El certificado no es válido para %s</string> + <string name="error_http_to_https_port">Final inesperado de secuencia. ¿Está Ud. tratando de conectar a un puerto HTTPS por HTTP?</string> + <string name="webview_ssl">Esta aplicación no soporta actualmente certificados SSL auto-firmados para widgets de Webview</string> + <string name="error_http_code_401">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 401).</string> + <string name="error_http_code_403">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 403).</string> + <string name="error_http_code_407">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 407).</string> + <string name="error_http_code_414">La URL es demasiado larga. Por favor, utilice la dirección IP o una URL más corta (código de respuesta HTTP 414).</string> + <string name="error_http_code_426">Se requiere HTTPS. Por favor cambie la URL (código de respuesta HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autenticación fallida. Por favor, compruebe el certificado de cliente SSL proporcionado (código de respuesta HTTP 495).</string> + <string name="error_http_code_496">SSL client certificate is required (Código de respuesta HTTP 496)</string> + <string name="error_http_code_502">Tu proxy inverso obtuvo una respuesta inválida del servidor openHAB (código de respuesta HTTP 502)</string> + <string name="error_http_code_503">El servidor openHAB no está disponible temporalmente (código de respuesta HTTP 503)</string> + <string name="error_http_code_504">Agotado el tiempo de espera de la puerta de enlace. Parece que su proxy inverso se está ejecutando, pero no pudo obtener una respuesta del servidor openHAB (código de respuesta HTTP 504).</string> + <string name="error_http_code_507">El servidor openHAB no tiene suficiente espacio libre (código de respuesta HTTP 507)</string> + <string name="error_http_code_511">Se requiere autenticación de red (Código de respuesta HTTP 511)</string> + <string name="error_about_no_conn">Error al obtener información del servidor openHAB</string> + <string name="error_openhab_offline">Su servidor openHAB está fuera de línea mientras se ejecuta la instancia de la nube</string> + <string name="error_no_browser_found">No se encontró ningún navegador en su dispositivo</string> + <string name="error_no_speech_to_text_app_found">No se encontró ninguna aplicación de reconocimiento de voz</string> + <string name="install">Instalar</string> + <string name="title_activity_openhabwritetag">Escribir etiqueta NFC</string> + <string name="title_activity_libraries">Librerías usadas</string> + <string name="info_write_tag">Aproximar el teléfono y mantener presionada la etiqueta hasta que aparezca un mensaje de confirmación</string> + <string name="info_write_tag_progress">Escribiendo la etiqueta</string> + <string name="info_write_tag_finished">Finalizado correctamente</string> + <string name="info_write_failed">Error al escribir la etiqueta</string> + <string name="info_write_tag_unsupported">Este dispositivo no soporta NFC</string> + <string name="info_write_tag_disabled">NFC está deshabilitado. Por favor, activar en el menú de configuración del dispositivo.</string> + <string name="info_openhab_apiversion_label">Versión Rest API openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">Clave secreta de openHAB</string> + <string name="info_openhab_push_notification_label">Estado de notificaciones Push</string> + <string name="action_settings">Configuración</string> + <string name="nfc_dialog_title">Acción a grabar en la etiqueta NFC para este elemento</string> + <string name="nfc_tag_recognized_label">Reconocida etiqueta NFC para \"%s\"</string> + <string name="nfc_tag_recognized_item">Reconocida etiqueta NFC para el Ítem \"%s\"</string> + <string name="info_not_set">Sin establecer</string> + <string name="empty_page">Esta pagina no contiene ningún widget que pueda ser visible</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Enviar información del dispositivo al servidor</string> + <string name="send_device_info_item_prefix">Prefijo del nombre del ítem</string> + <string name="send_device_info_item_prefix_summary">Los nombres de los ítems de las siguientes características tienen este prefijo</string> + <string name="settings_alarm_clock">Enviar alarma a openHAB</string> + <string name="settings_alarm_clock_summary_on">Envía la hora de la alarma al elemento \'%1$s\'</string> + <string name="settings_alarm_clock_summary_off">No enviar la hora de la alarma al servidor</string> + <string name="settings_alarm_clock_howto_summary">Pulse aquí para ver sugerencias sobre cómo configurar esta función del servidor</string> + <string name="settings_item_pref_item_name">Nombre del ítem</string> + <string name="waiting_for_item_upload">Esperando a que la red envíe actualizaciones de los ítem</string> + <string name="item_upload_in_progress">Los ítems están siendo actualizados ahora mismo</string> + <string name="notification_channel_background">Segundo plano</string> + <string name="notification_channel_background_description">Se utiliza para mostrar las tareas en segundo plano pendientes</string> + <string name="notification_channel_background_error">Error en tareas en segundo plano</string> + <string name="notification_channel_background_error_description">Utilizado para notificar errores en las tareas en segundo plano</string> + <string name="item_update_http_error">Error de actualización del ítem \'%1$s\' (HTTP error %2$d)</string> + <string name="item_update_connection_error">Fallo en la actualización del ítem \'%1$s\' (sin conexión)</string> + <string name="error_sending_alarm_clock_item_empty">Por favor, introduzca un nombre de ítem válido</string> + <string name="retry">Reintentar</string> + <!-- Notification list strings --> + <string name="notification_list_empty">No se enviaron notificaciones hasta el momento</string> + <string name="notification_list_error">Ocurrió un error al cargar las notificaciones</string> + <string name="list_loading_message">Cargando\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">¿Aceptar certificado desconocido?</string> + <string name="mtm_trust_anchor">El certificado del servidor no está firmado por una autoridad certificadora conocida</string> + <string name="mtm_cert_expired">El certificado del servidor ha caducado</string> + <string name="mtm_accept_servername">¿Aceptar el nombre de servidor, que no coincide?</string> + <string name="mtm_hostname_mismatch">El servidor no pudo autenticarse como \"%s\". El certificado es válido sólo para:</string> + <string name="mtm_connect_anyway">¿Desea conectarse de todos modos?</string> + <string name="mtm_cert_details">Detalles del certificado:</string> + <string name="mtm_decision_always">Aceptar</string> + <string name="mtm_decision_once">Una vez</string> + <string name="mtm_decision_abort">Cancelar</string> + <string name="mtm_notification">Validación del certificado</string> + <string name="settings_openhab_none">Ninguno</string> + <!-- Themes --> + <string name="theme_name_light">Claro</string> + <string name="theme_name_dark">Oscuro</string> + <string name="theme_name_black">Negro/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI oscura</string> + <!-- NFC --> + <string name="nfc_action_on">Activado</string> + <string name="nfc_action_up">Arriba</string> + <string name="nfc_action_off">Desactivado</string> + <string name="nfc_action_down">Abajo</string> + <string name="nfc_action_toggle">Cambiar</string> + <string name="nfc_activate">Activar</string> + <string name="nfc_action_current_color">Color actual</string> + <string name="nfc_action_to_sitemap_page">Navegar a la página del Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap drawer abierto</string> + <string name="drawer_close">Sitemap drawer cerrado</string> + <string name="mainmenu_openhab_voice_recognition">Reconocimiento de voz</string> + <!-- About --> + <string name="about_title">Acerca de</string> + <string name="about_license_title">Licencia</string> + <string name="about_changelog">Historial de cambios</string> + <string name="about_source_code">Código fuente</string> + <string name="about_issues">Reportar un problema</string> + <string name="about_docs">Documentación</string> + <string name="about_community_forum">Foro de la comunidad</string> + <string name="about_foundation">fundación openHAB</string> + <string name="about_community">comunidad openHAB</string> + <string name="about_server">servidor openHAB</string> + <string name="about_translation">Ayúdanos a traducir openHAB</string> + <string name="about_privacy_policy">Política de Privacidad</string> + <string name="settings_debug_messages_title">Mostrar información para solución de problemas</string> + <string name="error_couldnt_determine_openhab_url">No se pudo determinar la URL de openHAB</string> + <string name="unknown">Desconocido</string> + <string name="error_network_type_unsupported">El tipo de red (%s) no está soportado</string> + <string name="set">Establecer</string> + <string name="cancel">Cancelar</string> + <string name="close">Cerrar</string> + <string name="try_again_button">Vuelve a intentarlo</string> + <string name="enable_wifi_button">Activar Wi-Fi</string> + <string name="go_to_settings_button">Ir a la configuración</string> + <string name="enable_demo_mode_button">Ejecutar openHAB App en modo demo</string> + <string name="configuration_missing">No hemos encontrado un servidor openHAB en su red. Si dispone de un servidor, por favor especifique el nombre de host o dirección IP en la configuración. Si todavía no dispone de servidor, puede habilitar el modo demo para ver lo que openHAB es capaz de ofrecer.</string> + <string name="no_remote_server">No se pudo conectar con el servidor local y no se ha configurado un servidor remoto</string> + <string name="resolving_openhab">Intentando descubrir la instancia del servidor openHAB\u2026</string> + <string name="waiting_for_wifi">A la espera de Wi-Fi para establecer una conexión</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Ver log</string> + <string name="clear_log">Borrar Registro</string> + <string name="empty_log">El registro esta vacío</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Abrir la persiana enrollable</string> + <string name="content_description_stop_roller_shutter">Parar la persiana enrollable</string> + <string name="content_description_close_roller_shutter">Cerrar la persiana enrollable</string> + <string name="content_description_open_color_wheel">Abrir la rueda de color</string> + <string name="content_description_color_up">Encender, o mantener para aumentar el brillo</string> + <string name="content_description_color_down">Apagar, o mantener para disminuir el brillo</string> + <string name="content_description_open_number_picker">Abrir el selector de número</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Abrir openHAB</string> + <string name="content_description_increase_item_value">Aumentar el valor del ítem</string> + <string name="content_description_decrease_item_value">Disminuir el valor del ítem</string> + <string name="swipe_to_refresh_description">La aplicación se refresca automáticamente, normalmente no necesitas hacerlo manualmente</string> + <string name="swipe_to_refresh_dismiss">¡Lo tengo!</string> + <!-- Intro strings --> + <string name="app_intro">Introducción</string> + <string name="intro_welcome">Bienvenido a openHAB</string> + <string name="intro_whatis">Software de automatización de código abierto para tu hogar sin importar vendedores ni tecnologías</string> + <string name="intro_themes">Temas</string> + <string name="intro_themes_description">Elegir entre varios temas</string> + <string name="intro_voice_description">Controla tu hogar con tu voz</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">El control de un ítem puede asociarse a etiquetas NFC, haciendo una pulsación larga sobre dicho ítem</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">OMITIR</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">HECHO</string> +</resources> diff --git a/mobile/src/main/res/values-es/strings.xml b/mobile/src/main/res/values-es/strings.xml index 204ab2027e8eef6ff373edbc6b50d67a55eb3040..6f6800128e7a3a8cb04f5cc0d821c7655b13bf71 100644 --- a/mobile/src/main/res/values-es/strings.xml +++ b/mobile/src/main/res/values-es/strings.xml @@ -1,74 +1,247 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Configuración</string> - <string name="app_notifications">Notificaciones</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Configuración</string> - <string name="mainmenu_openhab_clearcache">Borrar la caché de imágenes</string> - <!-- App settings strings --> - <string name="settings_openhab_username">Nombre de usuario</string> - <string name="settings_openhab_password">Contraseña</string> - <string name="settings_openhab_sslclientcert">Certificado de cliente SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Clic aquí para obtener sugerencias y explicaciones sobre cómo configurar la autenticación del certificado de cliente SSL</string> - <string name="settings_openhab_screentimeroff">Deshabilitar apagado de pantalla</string> - <string name="settings_openhab_screentimeroff_summary">Deshabilita el temporizador que apaga la pantalla mientras se está ejecutando</string> - <string name="settings_openhab_demomode">Modo demo</string> - <string name="settings_openhab_demomode_summary">Ejecutar openHAB App modo demo</string> - <string name="settings_openhab_fullscreen_summary">Mostrar a pantalla completa</string> - <string name="settings_openhab_icon_format">Formato de los iconos</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB, ¡a tus órdenes!</string> - <string name="info_voice_recognized_text">Comando reconocido: %1$s</string> - <string name="info_demo_mode_short">Ejecutando en modo demo</string> - <string name="info_conn_url">Conectando a la URL local</string> - <string name="info_conn_rem_url">Conectando a la URL remota</string> - <!-- Error messages --> - <string name="error_network_not_available">La conexión de red no está disponible</string> - <string name="error_connection_failed">Ha fallado la conexión con el host</string> - <string name="error_unable_to_resolve_hostname">No se puede resolver el nombre de host</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">SSL client certificate is required (Código de respuesta HTTP 496)</string> - <string name="error_http_code_511">Se requiere autenticación de red (Código de respuesta HTTP 511)</string> - <string name="title_activity_openhabwritetag">Escribir etiqueta NFC</string> - <string name="info_write_tag">Aproximar el teléfono y mantener presionada la etiqueta hasta que aparezca un mensaje de confirmación</string> - <string name="info_write_tag_progress">Escribiendo la etiqueta</string> - <string name="info_write_tag_finished">Finalizado correctamente</string> - <string name="info_write_failed">Error al escribir la etiqueta</string> - <string name="info_write_tag_unsupported">Este dispositivo no soporta NFC</string> - <string name="info_write_tag_disabled">NFC está deshabilitado. Por favor, activar en el menú de configuración del dispositivo.</string> - <string name="info_openhab_apiversion_label">Versión Rest API openHAB</string> - <string name="action_settings">Configuración</string> - <string name="info_not_set">Sin establecer</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Una vez</string> - <string name="mtm_decision_abort">Cancelar</string> - <string name="mtm_notification">Validación del certificado</string> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <string name="drawer_open">Sitemap drawer abierto</string> - <string name="drawer_close">Sitemap drawer cerrado</string> - <string name="mainmenu_openhab_voice_recognition">Reconocimiento de voz</string> - <!-- About --> - <string name="about_title">Acerca de</string> - <string name="about_license_title">Licencia</string> - <string name="error_couldnt_determine_openhab_url">No se pudo determinar la URL de openHAB</string> - <string name="unknown">Desconocido</string> - <string name="error_network_type_unsupported">El tipo de red (%s) no está soportado</string> - <string name="set">Establecer</string> - <string name="cancel">Cancelar</string> - <!-- Content description for images --> - <!-- Intro strings --> - <string name="intro_welcome">Bienvenido a openHAB</string> - <string name="intro_whatis">Software de automatización de código abierto para tu hogar sin importar vendedores ni tecnologías</string> - <string name="intro_themes">Temas</string> - <string name="intro_themes_description">Elegir entre varios temas</string> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Configuración</string> + <string name="app_notifications">Notificaciones</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Configuración</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Error al cargar HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Seleccionar el Sitemap por defecto</string> + <string name="mainmenu_openhab_clearcache">Borrar la caché de imágenes</string> + <!-- App settings strings --> + <string name="settings_connection_title">Conexión</string> + <string name="settings_display_title">Pantalla</string> + <string name="settings_misc_title">Varios</string> + <string name="settings_openhab_url">Dirección URL del servidor local</string> + <string name="settings_openhab_url_summary">La dirección URL de la consola de openHAB (basada en el nombre de host o IP). Si está configurada, se desactiva la detección automática. Valor actual: %s</string> + <string name="settings_openhab_alturl">Dirección URL del servidor remoto</string> + <string name="settings_openhab_alturl_summary">La dirección URL de la consola de openHAB cuando la dirección local no está disponible. Valor actual: %s</string> + <string name="settings_openhab_username">Nombre de usuario</string> + <string name="settings_openhab_password">Contraseña</string> + <string name="settings_openhab_password_summary_weak">Contraseña poco segura</string> + <string name="settings_openhab_password_summary_strong">Contraseña segura</string> + <string name="settings_openhab_sslclientcert">Certificado de cliente SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Clic aquí para obtener sugerencias y explicaciones sobre cómo configurar la autenticación del certificado de cliente SSL</string> + <string name="settings_openhab_screentimeroff">Deshabilitar apagado de pantalla</string> + <string name="settings_openhab_screentimeroff_summary">Deshabilita el temporizador que apaga la pantalla mientras se está ejecutando</string> + <string name="settings_openhab_demomode">Modo demo</string> + <string name="settings_openhab_demomode_summary">Si no dispone de un servidor de openHAB, habilite el modo demo para ver todo lo que puede hacer openHAB</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Pantalla completa</string> + <string name="settings_openhab_fullscreen_summary">Mostrar a pantalla completa</string> + <string name="settings_openhab_icon_format">Formato de los iconos</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vector</string> + <string name="settings_chart_scaling">Escala gráfica</string> + <string name="settings_chart_scaling_summary">Nota: Una escala más pequeña reduce las fuentes y el ancho de línea, por lo que hay más espacio para el gráfico, pero la legibilidad de la fuente puede verse afectada.</string> + <string name="settings_chart_scaling_value_xs">Muy pequeño</string> + <string name="settings_chart_scaling_value_s">Pequeño</string> + <string name="settings_chart_scaling_value_m">Predeterminado</string> + <string name="settings_chart_scaling_value_l">Grande</string> + <string name="settings_openhab_chart_hq">Gráficos en alta resolución</string> + <string name="settings_openhab_chart_hq_summary">La generación de gráficos puede generar gran carga para el servidor. Si experimenta tiempos de carga de gráficos lentos y su servidor no es potente, desactive esta opción para mejorar los tiempos de carga.</string> + <string name="settings_ringtone">Tono de notificación</string> + <string name="settings_ringtone_none">Ninguno</string> + <string name="settings_clear_default_sitemap">Quitar el Sitemap por defecto</string> + <string name="settings_no_default_sitemap">No se ha seleccionado ningún Sitemap por defecto</string> + <string name="settings_current_default_sitemap">Sitemap predeterminado actual: %1$s</string> + <string name="settings_openhab_alt_connection">Remota</string> + <string name="settings_openhab_connection">Local</string> + <string name="settings_notification_vibration">Notificaciones mediante vibración</string> + <string name="settings_notification_vibration_off">Apagado</string> + <string name="settings_notification_vibration_short">Corta</string> + <string name="settings_notification_vibration_long">Larga</string> + <string name="settings_notification_vibration_twice">Dos veces</string> + <string name="settings_notification_ringtone_vibration">Configuración de las notificaciones</string> + <string name="settings_connection_summary">Conectado a %s</string> + <string name="settings_insecure_connection_summary">Conectado a %s de forma no segura</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Comandos de voz</string> + <string name="title_voice_widget_icon">Comandos de voz y acceso directo a la aplicación</string> + <string name="info_voice_input">openHAB, ¡a tus órdenes!</string> + <string name="info_voice_recognized_text">Comando reconocido: %1$s</string> + <string name="info_demo_mode_short">Ejecutando en modo demo</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Desactivar</string> + <string name="info_conn_url">Conectando a la URL local</string> + <string name="info_conn_rem_url">Conectando a la URL remota</string> + <string name="app_shortcut_diabled_habpanel">El servidor no tiene instalado HABPanel</string> + <string name="app_shortcut_diabled_notifications">El servidor remoto no está disponible</string> + <string name="app_shortcut_diabled_voice_recognition">Su dispositivo no tiene una aplicación de reconocimiento de voz instalada</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB devolvió una lista de Sitemaps vacía</string> + <string name="error_sitemap_generic_load_error">No se pudo cargar el Sitemap. Ocurrió el siguiente error: %1$s</string> + <string name="error_network_not_available">La conexión de red no está disponible</string> + <string name="error_wifi_not_available">Wi-Fi está desactivada</string> + <string name="error_http_connection_failed">Conexión sin éxito. Se ha recibido una respuesta inesperada al intentar conectar con el servidor openHAB configurado (código de respuesta HTTP recibido: %d).</string> + <string name="error_invalid_url">Por favor, introducir una URL válida con formato \'http(s)://host(:puerto)/\'</string> + <string name="error_port_seems_invalid">El puerto introducido no es válido para el protocolo seleccionado</string> + <string name="error_connection_failed">Ha fallado la conexión con el host</string> + <string name="error_unable_to_resolve_hostname">No se puede resolver el nombre de host</string> + <string name="error_connection_sslhandshake_failed">Falló el inicio del protocolo SSL (handshake)</string> + <string name="error_certificate_not_trusted">El certificado SSL no es de confianza. Por favor, importa el certificado raíz o deshabilita la validación del certificado durante la negociación SSL.</string> + <string name="error_certificate_expired">El certificado SSL ha caducado. Por favor, obtén un nuevo certificado o acepta el certificado durante la negociación SSL.</string> + <string name="error_certificate_not_valid_yet">El certificado SSL todavía no es válido. Por favor, obtenga un certificado correcto o deshabilite la validación del certificado durante la negociación SSL. Verifique también si la hora de su dispositivo es correcta.</string> + <string name="error_certificate_invalid_date">El certificado SSL tiene una fecha inválida. Por favor, obtenga un certificado correcto y compruebe si el reloj en su dispositivo está configurado correctamente.</string> + <string name="error_certificate_revoked">El certificado SSL ha sido revocado. Por favor, obtenga un certificado nuevo o deshabilite la validación del certificado durante la negociación SSL.</string> + <string name="error_certificate_wrong_host">El certificado no es válido para %s</string> + <string name="error_http_to_https_port">Final inesperado de secuencia. ¿Está Ud. tratando de conectar a un puerto HTTPS por HTTP?</string> + <string name="webview_ssl">Esta aplicación no soporta actualmente certificados SSL auto-firmados para widgets de Webview</string> + <string name="error_http_code_401">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 401).</string> + <string name="error_http_code_403">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 403).</string> + <string name="error_http_code_407">Autenticación fallida. Por favor, verifique el nombre de usuario y la contraseña configurados, además del certificado de cliente SSL (código de respuesta HTTP 407).</string> + <string name="error_http_code_414">La URL es demasiado larga. Por favor, utilice la dirección IP o una URL más corta (código de respuesta HTTP 414).</string> + <string name="error_http_code_426">Se requiere HTTPS. Por favor cambie la URL (código de respuesta HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autenticación fallida. Por favor, compruebe el certificado de cliente SSL proporcionado (código de respuesta HTTP 495).</string> + <string name="error_http_code_496">SSL client certificate is required (Código de respuesta HTTP 496)</string> + <string name="error_http_code_502">Tu proxy inverso obtuvo una respuesta inválida del servidor openHAB (código de respuesta HTTP 502)</string> + <string name="error_http_code_503">El servidor openHAB no está disponible temporalmente (código de respuesta HTTP 503)</string> + <string name="error_http_code_504">Agotado el tiempo de espera de la puerta de enlace. Parece que su proxy inverso se está ejecutando, pero no pudo obtener una respuesta del servidor openHAB (código de respuesta HTTP 504).</string> + <string name="error_http_code_507">El servidor openHAB no tiene suficiente espacio libre (código de respuesta HTTP 507)</string> + <string name="error_http_code_511">Se requiere autenticación de red (Código de respuesta HTTP 511)</string> + <string name="error_about_no_conn">Error al obtener información del servidor openHAB</string> + <string name="error_openhab_offline">Su servidor openHAB está fuera de línea mientras se ejecuta la instancia de la nube</string> + <string name="error_no_browser_found">No se encontró ningún navegador en su dispositivo</string> + <string name="error_no_speech_to_text_app_found">No se encontró ninguna aplicación de reconocimiento de voz</string> + <string name="install">Instalar</string> + <string name="title_activity_openhabwritetag">Escribir etiqueta NFC</string> + <string name="title_activity_libraries">Librerías usadas</string> + <string name="info_write_tag">Aproximar el teléfono y mantener presionada la etiqueta hasta que aparezca un mensaje de confirmación</string> + <string name="info_write_tag_progress">Escribiendo la etiqueta</string> + <string name="info_write_tag_finished">Finalizado correctamente</string> + <string name="info_write_failed">Error al escribir la etiqueta</string> + <string name="info_write_tag_unsupported">Este dispositivo no soporta NFC</string> + <string name="info_write_tag_disabled">NFC está deshabilitado. Por favor, activar en el menú de configuración del dispositivo.</string> + <string name="info_openhab_apiversion_label">Versión Rest API openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">Clave secreta de openHAB</string> + <string name="info_openhab_push_notification_label">Estado de notificaciones Push</string> + <string name="action_settings">Configuración</string> + <string name="nfc_dialog_title">Acción a grabar en la etiqueta NFC para este elemento</string> + <string name="nfc_tag_recognized_label">Reconocida etiqueta NFC para \"%s\"</string> + <string name="nfc_tag_recognized_item">Reconocida etiqueta NFC para el Ítem \"%s\"</string> + <string name="info_not_set">Sin establecer</string> + <string name="empty_page">Esta pagina no contiene ningún widget que pueda ser visible</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Enviar información del dispositivo al servidor</string> + <string name="send_device_info_item_prefix">Prefijo del nombre del ítem</string> + <string name="send_device_info_item_prefix_summary">Los nombres de los ítems de las siguientes características tienen este prefijo</string> + <string name="settings_alarm_clock">Enviar alarma a openHAB</string> + <string name="settings_alarm_clock_summary_on">Envía la hora de la alarma al elemento \'%1$s\'</string> + <string name="settings_alarm_clock_summary_off">No enviar la hora de la alarma al servidor</string> + <string name="settings_alarm_clock_howto_summary">Pulse aquí para ver sugerencias sobre cómo configurar esta función del servidor</string> + <string name="settings_item_pref_item_name">Nombre del ítem</string> + <string name="waiting_for_item_upload">Esperando a que la red envíe actualizaciones de los ítem</string> + <string name="item_upload_in_progress">Los ítems están siendo actualizados ahora mismo</string> + <string name="notification_channel_background">Segundo plano</string> + <string name="notification_channel_background_description">Se utiliza para mostrar las tareas en segundo plano pendientes</string> + <string name="notification_channel_background_error">Error en tareas en segundo plano</string> + <string name="notification_channel_background_error_description">Utilizado para notificar errores en las tareas en segundo plano</string> + <string name="item_update_http_error">Error de actualización del ítem \'%1$s\' (HTTP error %2$d)</string> + <string name="item_update_connection_error">Fallo en la actualización del ítem \'%1$s\' (sin conexión)</string> + <string name="error_sending_alarm_clock_item_empty">Por favor, introduzca un nombre de ítem válido</string> + <string name="retry">Reintentar</string> + <!-- Notification list strings --> + <string name="notification_list_empty">No se enviaron notificaciones hasta el momento</string> + <string name="notification_list_error">Ocurrió un error al cargar las notificaciones</string> + <string name="list_loading_message">Cargando\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">¿Aceptar certificado desconocido?</string> + <string name="mtm_trust_anchor">El certificado del servidor no está firmado por una autoridad certificadora conocida</string> + <string name="mtm_cert_expired">El certificado del servidor ha caducado</string> + <string name="mtm_accept_servername">¿Aceptar el nombre de servidor, que no coincide?</string> + <string name="mtm_hostname_mismatch">El servidor no pudo autenticarse como \"%s\". El certificado es válido sólo para:</string> + <string name="mtm_connect_anyway">¿Desea conectarse de todos modos?</string> + <string name="mtm_cert_details">Detalles del certificado:</string> + <string name="mtm_decision_always">Aceptar</string> + <string name="mtm_decision_once">Una vez</string> + <string name="mtm_decision_abort">Cancelar</string> + <string name="mtm_notification">Validación del certificado</string> + <string name="settings_openhab_none">Ninguno</string> + <!-- Themes --> + <string name="theme_name_light">Claro</string> + <string name="theme_name_dark">Oscuro</string> + <string name="theme_name_black">Negro/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI oscura</string> + <!-- NFC --> + <string name="nfc_action_on">Activado</string> + <string name="nfc_action_up">Arriba</string> + <string name="nfc_action_off">Desactivado</string> + <string name="nfc_action_down">Abajo</string> + <string name="nfc_action_toggle">Cambiar</string> + <string name="nfc_activate">Activar</string> + <string name="nfc_action_current_color">Color actual</string> + <string name="nfc_action_to_sitemap_page">Navegar a la página del Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap drawer abierto</string> + <string name="drawer_close">Sitemap drawer cerrado</string> + <string name="mainmenu_openhab_voice_recognition">Reconocimiento de voz</string> + <!-- About --> + <string name="about_title">Acerca de</string> + <string name="about_license_title">Licencia</string> + <string name="about_changelog">Historial de cambios</string> + <string name="about_source_code">Código fuente</string> + <string name="about_issues">Reportar un problema</string> + <string name="about_docs">Documentación</string> + <string name="about_community_forum">Foro de la comunidad</string> + <string name="about_foundation">fundación openHAB</string> + <string name="about_community">comunidad openHAB</string> + <string name="about_server">servidor openHAB</string> + <string name="about_translation">Ayúdanos a traducir openHAB</string> + <string name="about_privacy_policy">Política de Privacidad</string> + <string name="settings_debug_messages_title">Mostrar información para solución de problemas</string> + <string name="error_couldnt_determine_openhab_url">No se pudo determinar la URL de openHAB</string> + <string name="unknown">Desconocido</string> + <string name="error_network_type_unsupported">El tipo de red (%s) no está soportado</string> + <string name="set">Establecer</string> + <string name="cancel">Cancelar</string> + <string name="close">Cerrar</string> + <string name="try_again_button">Vuelve a intentarlo</string> + <string name="enable_wifi_button">Activar Wi-Fi</string> + <string name="go_to_settings_button">Ir a la configuración</string> + <string name="enable_demo_mode_button">Ejecutar openHAB App en modo demo</string> + <string name="configuration_missing">No hemos encontrado un servidor openHAB en su red. Si dispone de un servidor, por favor especifique el nombre de host o dirección IP en la configuración. Si todavía no dispone de servidor, puede habilitar el modo demo para ver lo que openHAB es capaz de ofrecer.</string> + <string name="no_remote_server">No se pudo conectar con el servidor local y no se ha configurado un servidor remoto</string> + <string name="resolving_openhab">Intentando descubrir la instancia del servidor openHAB\u2026</string> + <string name="waiting_for_wifi">A la espera de Wi-Fi para establecer una conexión</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Ver log</string> + <string name="clear_log">Borrar Registro</string> + <string name="empty_log">El registro esta vacío</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Abrir la persiana enrollable</string> + <string name="content_description_stop_roller_shutter">Parar la persiana enrollable</string> + <string name="content_description_close_roller_shutter">Cerrar la persiana enrollable</string> + <string name="content_description_open_color_wheel">Abrir la rueda de color</string> + <string name="content_description_color_up">Encender, o mantener para aumentar el brillo</string> + <string name="content_description_color_down">Apagar, o mantener para disminuir el brillo</string> + <string name="content_description_open_number_picker">Abrir el selector de número</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Abrir openHAB</string> + <string name="content_description_increase_item_value">Aumentar el valor del ítem</string> + <string name="content_description_decrease_item_value">Disminuir el valor del ítem</string> + <string name="swipe_to_refresh_description">La aplicación se refresca automáticamente, normalmente no necesitas hacerlo manualmente</string> + <string name="swipe_to_refresh_dismiss">¡Lo tengo!</string> + <!-- Intro strings --> + <string name="app_intro">Introducción</string> + <string name="intro_welcome">Bienvenido a openHAB</string> + <string name="intro_whatis">Software de automatización de código abierto para tu hogar sin importar vendedores ni tecnologías</string> + <string name="intro_themes">Temas</string> + <string name="intro_themes_description">Elegir entre varios temas</string> + <string name="intro_voice_description">Controla tu hogar con tu voz</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">El control de un ítem puede asociarse a etiquetas NFC, haciendo una pulsación larga sobre dicho ítem</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">OMITIR</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">HECHO</string> </resources> diff --git a/mobile/src/main/res/values-fi/strings.xml b/mobile/src/main/res/values-fi/strings.xml index 510caee3ac87899cd7c7b5ef7eb95f7c7c839160..1d64c449351140fb461123f03456b28a9503e21e 100644 --- a/mobile/src/main/res/values-fi/strings.xml +++ b/mobile/src/main/res/values-fi/strings.xml @@ -1,195 +1,214 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Asetukset</string> - <string name="app_notifications">Ilmoitukset</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sivukartat</string> - <string name="mainmenu_openhab_preferences">Asetukset</string> - <string name="mainmenu_openhab_selectsitemap">Valitse oletussivukartta</string> - <string name="mainmenu_openhab_clearcache">Tyhjennä kuvien välimuisti</string> - <!-- App settings strings --> - <string name="settings_connection_title">Yhteys</string> - <string name="settings_display_title">Näyttö</string> - <string name="settings_misc_title">Sekalaiset</string> - <string name="settings_openhab_url">Paikallisen palvelimen URL osoite</string> - <string name="settings_openhab_url_summary">openHAB palvelimen URL osoite (isäntänimi tai IP osoite). Jos määritetty, automaattinen etsintä poistetaan käytöstä. Nykyinen asetus: %s</string> - <string name="settings_openhab_alturl">Etäpalvelimen URL osoite</string> - <string name="settings_openhab_alturl_summary">openHAB palvelimen URL osoite jota käytetään jos paikallinen osoite ei ole käytettävissä. Nykyinen asetus: %s</string> - <string name="settings_openhab_username">Käyttäjänimi</string> - <string name="settings_openhab_password">Salasana</string> - <string name="settings_openhab_password_summary_weak">Heikko salasana asetettu</string> - <string name="settings_openhab_password_summary_strong">Vahva salasana asetettu</string> - <string name="settings_openhab_sslclientcert">Asiakkaan SSL sertifikaatti</string> - <string name="settings_openhab_sslclientcert_howto_summary">Näpäytä tästä nähdäksesi muutamia vinkkejä ja ohjeita kuinka asennat asiakkaan SSL todennuksen</string> - <string name="settings_openhab_screentimeroff">Poista näytön sammutuksen ajastin</string> - <string name="settings_openhab_screentimeroff_summary">Näytön sammutuksen ajastin pois päältä openHABin ollessa käynnissä</string> - <string name="settings_openhab_demomode">Esittelytila</string> - <string name="settings_openhab_demomode_summary">Käytä esittelytilassa</string> - <string name="settings_openhab_theme">Teema</string> - <string name="settings_openhab_fullscreen">Kokonäyttö</string> - <string name="settings_openhab_fullscreen_summary">Näytä koko näytöllä</string> - <string name="settings_openhab_icon_format">Kuvakkeiden tallennusmuoto</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">SVG</string> - <string name="settings_chart_scaling">Kuvaajan skaalaus</string> - <string name="settings_chart_scaling_summary">Huomautus: Pienempi skaalaus kutistaa fontit ja viivojen leveyden. Kuvaajalle on näin enemmän tilaa, mutta fonttien luettavuus voi kärsiä.</string> - <string name="settings_chart_scaling_value_xs">Hyvin pieni</string> - <string name="settings_chart_scaling_value_s">Pieni</string> - <string name="settings_chart_scaling_value_m">Oletus</string> - <string name="settings_chart_scaling_value_l">Suuri</string> - <string name="settings_ringtone">Ilmoituksen merkkiääni</string> - <string name="settings_ringtone_none">Ei mikään</string> - <string name="settings_clear_default_sitemap">Poista oletussivukartta</string> - <string name="settings_no_default_sitemap">Ei sivukarttaa oletuksena</string> - <string name="settings_current_default_sitemap">Nykyinen oletussivukartta: %1$s</string> - <string name="settings_openhab_alt_connection">Etäkäyttö</string> - <string name="settings_openhab_connection">Paikalliskäyttö</string> - <string name="settings_notification_vibration">Ilmoituksen värinä</string> - <string name="settings_notification_vibration_off">Pois päältä</string> - <string name="settings_notification_vibration_short">Lyhyt</string> - <string name="settings_notification_vibration_long">Pitkä</string> - <string name="settings_notification_vibration_twice">Kaksi kertaa</string> - <string name="settings_connection_summary">Yhdistetty kohteeseen %s</string> - <string name="settings_insecure_connection_summary">Turvattomasti yhdistetty kohteeseen %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB äänikomennot</string> - <string name="info_voice_input">openHAB, komennossasi!</string> - <string name="info_voice_recognized_text">Tunnistettu komento: %1$s</string> - <string name="info_demo_mode_short">Sovellus esittelytilassa</string> - <string name="info_conn_url">Yhdistetään paikalliskäytön URL osoitteeseen</string> - <string name="info_conn_rem_url">Yhdistetään etäkäytön URL osoitteeseen</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB palautti tyhjän sivukarttojen luettelon</string> - <string name="error_network_not_available">Verkko ei ole käytettävissä</string> - <string name="error_http_connection_failed">Yhteys epäonnistui. Odottamaton vastaus yhdistettäessä asetettuun openHAB palvelimeen (HTTP vastaus: %d).</string> - <string name="error_invalid_url">Kirjoita kelvollinen URL osoite \'http(s)://isäntä(:portti)/\' muodossa</string> - <string name="error_connection_failed">Yhteys palvelimeen epäonnistui</string> - <string name="error_unable_to_resolve_hostname">Isäntänimen selvitys epäonnistui</string> - <string name="error_connection_sslhandshake_failed">SSL kättely epäonnistui</string> - <string name="error_certificate_not_trusted">SSL sertifikaatti ei ole luotettu. Ole hyvä ja tuo root-sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> - <string name="error_certificate_expired">SSL serifikaatti on vanhentunut. Hanki uusi sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> - <string name="error_certificate_not_valid_yet">SSL sertifikaatti ei ole vielä kelvollinen. Hanki sopiva sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana. Tarkista myös, että laitteessasi on oikea kellonaika.</string> - <string name="error_certificate_revoked">SSL serifikaatti on kumottu. Hanki uusi sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> - <string name="error_certificate_wrong_host">Isäntä %s ei hyväksy SSL sertifikaattia</string> - <string name="error_http_code_401">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 401).</string> - <string name="error_http_code_403">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 403).</string> - <string name="error_http_code_407">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 407).</string> - <string name="error_http_code_414">Liian pitkä URL osoite. Ole hyvä ja käytä IP osoitetta tai lyhyempää URL osoitetta (HTTP vastaus 414).</string> - <string name="error_http_code_426">HTTPS on pakollinen. Ole hyvä ja vaihda URL osoite (HTTP vastaus 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Todennus epäonnistui. Ole hyvä ja tarkista annettu SSL sertifikaatti (HTTP vastaus 495).</string> - <string name="error_http_code_496">SSL sertifikaatti on pakollinen (HTTP vastaus 496)</string> - <string name="error_http_code_502">Sinun käänteinen välityspalvelin vastaanotti epäkelvon vastauksen openHAB palvelimelta (HTTP vastaus 502)</string> - <string name="error_http_code_503">openHAB palvelin on väliaikaisesti pois käytöstä (HTTP vastaus 503)</string> - <string name="error_http_code_504">Välityspalvelimen aikakatkaisu. Näyttää siltä että sinun käänteinen välityspalvelin on toiminnassa, mutta ei saanut vastausta openHAB palvelimelta (HTTP vastaus 504).</string> - <string name="error_http_code_507">openHAB palvelimella ei ole tarpeeksi tilaa (HTTP vastaus 507)</string> - <string name="error_http_code_511">Verkkoon kirjautuminen vaaditaan (HTTP vastaus 511)</string> - <string name="error_about_no_conn">Virhe haettaessa openHAB palvelimen tietoja</string> - <string name="error_openhab_offline">Sinun openHAB palvelin on offline tilassa, mutta pilvipalvelin toimii</string> - <string name="error_no_app_store_found">Äänentunnistussovellusta ei asennettu koska yhtään sovelluskauppaa ei löytynyt</string> - <string name="title_activity_openhabwritetag">Kirjoita uusi NFC tagi</string> - <string name="title_activity_libraries">Käytetyt kirjastot</string> - <string name="info_write_tag">Kosketa tagia ja pidä se lähellä kunnes varmistusviesti ilmestyy näytölle</string> - <string name="info_write_tag_progress">Kirjoittaa tagia</string> - <string name="info_write_tag_finished">Onnistui</string> - <string name="info_write_failed">Virhe kirjoitettessa tagia</string> - <string name="info_write_tag_unsupported">Tämä laite ei tue NFCtä</string> - <string name="info_write_tag_disabled">NFC on pois päältä. Ole hyvä ja kytke se päälle laitteen asetuksista.</string> - <string name="info_openhab_apiversion_label">openHAB Rest APIn versio</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB salanimi</string> - <string name="info_openhab_push_notification_label">Push ilmoitusten tila</string> - <string name="action_settings">Asetukset</string> - <string name="nfc_dialog_title">Kirjoita NFC tagin toiminto tälle elementille</string> - <string name="info_not_set">Ei määritetty</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Ilmoituksia ei toistaiseksi lähetetty</string> - <string name="notification_list_error">Virhe ladattaessa ilmoituksia</string> - <string name="list_loading_message">Ladataan\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Hyväksy tuntematon sertifikaatti?</string> - <string name="mtm_trust_anchor">Palvelinsertifikaatti ei ole tunnetun myöntäjän allekirjoittama</string> - <string name="mtm_cert_expired">Palvelinsertifikaatti on vanhentunut</string> - <string name="mtm_accept_servername">Hyväksy eriävä palvelimen nimi?</string> - <string name="mtm_hostname_mismatch">Palvelin ei voinut todentaa: \"%s\". Sertifikaatti kelpaa vain:</string> - <string name="mtm_connect_anyway">Haluatko silti yhdistää?</string> - <string name="mtm_cert_details">Ssl sertifikaatin tiedot:</string> - <string name="mtm_decision_always">Hyväksy</string> - <string name="mtm_decision_once">Kerran</string> - <string name="mtm_decision_abort">Peruuta</string> - <string name="mtm_notification">Sertifikaatin todennus</string> - <string name="settings_openhab_none">Tyhjä</string> - <!-- Themes --> - <string name="theme_name_light">Valoisa</string> - <string name="theme_name_dark">Tumma</string> - <string name="theme_name_black">Musta/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI tumma</string> - <!-- NFC --> - <string name="nfc_action_on">On</string> - <string name="nfc_action_up">Ylös</string> - <string name="nfc_action_off">Off</string> - <string name="nfc_action_down">Alas</string> - <string name="nfc_action_toggle">Vaihda</string> - <string name="nfc_activate">Aktivoi</string> - <string name="nfc_action_current_color">Nykyinen väri</string> - <string name="nfc_action_to_sitemap_page">Mene sivukartalle</string> - <!-- Drawer --> - <string name="drawer_open">Sivukartan valitsin avattu</string> - <string name="drawer_close">Sivukartan valitsin suljettu</string> - <string name="mainmenu_openhab_voice_recognition">Puheentunnistus</string> - <!-- About --> - <string name="about_title">Tietoja</string> - <string name="about_license_title">Lisenssi</string> - <string name="about_changelog">Muutosloki</string> - <string name="about_source_code">Lähdekoodi</string> - <string name="about_issues">Ilmoita ongelmasta</string> - <string name="about_docs">Dokumentointi</string> - <string name="about_community_forum">Yhteisön foorumi</string> - <string name="about_foundation">openHAB Säätiö</string> - <string name="about_community">openHAB yhteisö</string> - <string name="about_server">openHAB palvelin</string> - <string name="about_translation">Auta meitä kääntämään openHAB</string> - <string name="about_privacy_policy">Tietosuojakäytäntö</string> - <string name="settings_debug_messages_title">Näytä tietoja vianmääritykseen</string> - <string name="error_couldnt_determine_openhab_url">openHAB palvelimen URL osoitetta ei löytynyt</string> - <string name="unknown">Tuntematon</string> - <string name="error_network_type_unsupported">Verkon tyyppi (%s) ei tuettu</string> - <string name="set">Aseta</string> - <string name="cancel">Peruuta</string> - <string name="close">Sulje</string> - <string name="try_again_button">Yritä uudelleen</string> - <string name="go_to_settings_button">Mene asetuksiin</string> - <string name="configuration_missing">Sinun openHAB palvelinta ei löydetty automaattisesti. Ole hyvä ja ja aseta sen IP osoite tai isäntänimi palvelinasetuksiin.</string> - <string name="no_remote_server">Paikallinen verkko ei ole käytettävissä etkä ole asettanut etäpalvelinta</string> - <string name="resolving_openhab">Etsitään openHAB palvelinta\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Avaa rullaverho</string> - <string name="content_description_stop_roller_shutter">Pysäytä rullaverho</string> - <string name="content_description_close_roller_shutter">Sulje rullaverho</string> - <string name="content_description_open_color_wheel">Avaa värivalitsin</string> - <string name="content_description_color_up">Kytke tai pidä painettuna lisätäksesi kirkkautta</string> - <string name="content_description_color_down">Sammuta tai pidä painettuna vähentääksesi kirkkautta</string> - <string name="content_description_open_number_picker">Avaa numerovalitsin</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Avaa openHAB</string> - <string name="swipe_to_refresh_description">Sovellus päivittää automaattisesti joten sitä ei tavallisesti tarvitse tehdä itse</string> - <string name="swipe_to_refresh_dismiss">Selvä!</string> - <!-- Intro strings --> - <string name="app_intro">Esittely</string> - <string name="intro_welcome">Tervetuloa openHABiin</string> - <string name="intro_whatis">Valmistaja- ja teknologiariippumaton avoimen lähdekoodin automaatio-ohjelmisto kotiasi varten</string> - <string name="intro_themes">Teemat</string> - <string name="intro_themes_description">Valitse useista teemoista</string> - <string name="intro_voice_description">Hallitse kotia äänelläsi</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Itemin käyttö voidaan sitoa NFC tägeihin painamalla Itemiä pitkään</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">OHITA</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">VALMIS</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Asetukset</string> + <string name="app_notifications">Ilmoitukset</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sivukartat</string> + <string name="mainmenu_openhab_preferences">Asetukset</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Virhe ladattaessa HABPanel:ia</string> + <string name="mainmenu_openhab_selectsitemap">Valitse oletussivukartta</string> + <string name="mainmenu_openhab_clearcache">Tyhjennä kuvien välimuisti</string> + <!-- App settings strings --> + <string name="settings_connection_title">Yhteys</string> + <string name="settings_display_title">Näyttö</string> + <string name="settings_misc_title">Sekalaiset</string> + <string name="settings_openhab_url">Paikallisen palvelimen URL osoite</string> + <string name="settings_openhab_url_summary">openHAB palvelimen URL osoite (isäntänimi tai IP osoite). Jos määritetty, automaattinen etsintä poistetaan käytöstä. Nykyinen asetus: %s</string> + <string name="settings_openhab_alturl">Etäpalvelimen URL osoite</string> + <string name="settings_openhab_alturl_summary">openHAB palvelimen URL osoite jota käytetään jos paikallinen osoite ei ole käytettävissä. Nykyinen asetus: %s</string> + <string name="settings_openhab_username">Käyttäjänimi</string> + <string name="settings_openhab_password">Salasana</string> + <string name="settings_openhab_password_summary_weak">Heikko salasana asetettu</string> + <string name="settings_openhab_password_summary_strong">Vahva salasana asetettu</string> + <string name="settings_openhab_sslclientcert">Asiakkaan SSL sertifikaatti</string> + <string name="settings_openhab_sslclientcert_howto_summary">Näpäytä tästä nähdäksesi muutamia vinkkejä ja ohjeita kuinka asennat asiakkaan SSL todennuksen</string> + <string name="settings_openhab_screentimeroff">Poista näytön sammutuksen ajastin</string> + <string name="settings_openhab_screentimeroff_summary">Näytön sammutuksen ajastin pois päältä openHABin ollessa käynnissä</string> + <string name="settings_openhab_demomode">Esittelytila</string> + <string name="settings_openhab_demomode_summary">Jos sinulla ei ole openHAB palvelinta, niin valitse demo moodi saadaksesi käsityksen mihin openHAB pystyy.</string> + <string name="settings_openhab_theme">Teema</string> + <string name="settings_openhab_fullscreen">Kokonäyttö</string> + <string name="settings_openhab_fullscreen_summary">Näytä koko näytöllä</string> + <string name="settings_openhab_icon_format">Kuvakkeiden tallennusmuoto</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">SVG</string> + <string name="settings_chart_scaling">Kuvaajan skaalaus</string> + <string name="settings_chart_scaling_summary">Huomautus: Pienempi skaalaus kutistaa fontit ja viivojen leveyden. Kuvaajalle on näin enemmän tilaa, mutta fonttien luettavuus voi kärsiä.</string> + <string name="settings_chart_scaling_value_xs">Hyvin pieni</string> + <string name="settings_chart_scaling_value_s">Pieni</string> + <string name="settings_chart_scaling_value_m">Oletus</string> + <string name="settings_chart_scaling_value_l">Suuri</string> + <string name="settings_openhab_chart_hq">Korkean resoluution kuvaajat</string> + <string name="settings_openhab_chart_hq_summary">Kuvaajien generointi voi olla raskasta palvelimelle. Jos havaitset hitautta kuvaajien latauksessa ja palvelimesi on tehoton, aseta tämä pois päältä parantaaksesi latausaikoja.</string> + <string name="settings_ringtone">Ilmoituksen merkkiääni</string> + <string name="settings_ringtone_none">Ei mikään</string> + <string name="settings_clear_default_sitemap">Poista oletussivukartta</string> + <string name="settings_no_default_sitemap">Ei sivukarttaa oletuksena</string> + <string name="settings_current_default_sitemap">Nykyinen oletussivukartta: %1$s</string> + <string name="settings_openhab_alt_connection">Etäkäyttö</string> + <string name="settings_openhab_connection">Paikalliskäyttö</string> + <string name="settings_notification_vibration">Ilmoituksen värinä</string> + <string name="settings_notification_vibration_off">Pois päältä</string> + <string name="settings_notification_vibration_short">Lyhyt</string> + <string name="settings_notification_vibration_long">Pitkä</string> + <string name="settings_notification_vibration_twice">Kaksi kertaa</string> + <string name="settings_connection_summary">Yhdistetty kohteeseen %s</string> + <string name="settings_insecure_connection_summary">Turvattomasti yhdistetty kohteeseen %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Äänikomennot</string> + <string name="title_voice_widget_icon">Äänikomennot ja sovelluksen pikakuvake</string> + <string name="info_voice_input">openHAB, komennossasi!</string> + <string name="info_voice_recognized_text">Tunnistettu komento: %1$s</string> + <string name="info_demo_mode_short">Sovellus esittelytilassa</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Yhdistetään paikalliskäytön URL osoitteeseen</string> + <string name="info_conn_rem_url">Yhdistetään etäkäytön URL osoitteeseen</string> + <string name="app_shortcut_diabled_habpanel">Palvelimellasi ei ole HABPanel asennettuna</string> + <string name="app_shortcut_diabled_notifications">Etäpalvelintasi ei tavoiteta</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB palautti tyhjän sivukarttojen luettelon</string> + <string name="error_network_not_available">Verkko ei ole käytettävissä</string> + <string name="error_wifi_not_available">Wi-Fi on pois päältä</string> + <string name="error_http_connection_failed">Yhteys epäonnistui. Odottamaton vastaus yhdistettäessä asetettuun openHAB palvelimeen (HTTP vastaus: %d).</string> + <string name="error_invalid_url">Kirjoita kelvollinen URL osoite \'http(s)://isäntä(:portti)/\' muodossa</string> + <string name="error_connection_failed">Yhteys palvelimeen epäonnistui</string> + <string name="error_unable_to_resolve_hostname">Isäntänimen selvitys epäonnistui</string> + <string name="error_connection_sslhandshake_failed">SSL kättely epäonnistui</string> + <string name="error_certificate_not_trusted">SSL sertifikaatti ei ole luotettu. Ole hyvä ja tuo root-sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> + <string name="error_certificate_expired">SSL serifikaatti on vanhentunut. Hanki uusi sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> + <string name="error_certificate_not_valid_yet">SSL sertifikaatti ei ole vielä kelvollinen. Hanki sopiva sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana. Tarkista myös, että laitteessasi on oikea kellonaika.</string> + <string name="error_certificate_revoked">SSL serifikaatti on kumottu. Hanki uusi sertifikaatti tai hyväksy sertifikaatti SSL kättelyn aikana.</string> + <string name="error_certificate_wrong_host">Isäntä %s ei hyväksy SSL sertifikaattia</string> + <string name="error_http_code_401">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 401).</string> + <string name="error_http_code_403">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 403).</string> + <string name="error_http_code_407">Todennus epäonnistui. Tarkista määritetty käyttäjänimi ja salasana annetusta SSL sertifikaatista (HTTP vastaus 407).</string> + <string name="error_http_code_414">Liian pitkä URL osoite. Ole hyvä ja käytä IP osoitetta tai lyhyempää URL osoitetta (HTTP vastaus 414).</string> + <string name="error_http_code_426">HTTPS on pakollinen. Ole hyvä ja vaihda URL osoite (HTTP vastaus 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Todennus epäonnistui. Ole hyvä ja tarkista annettu SSL sertifikaatti (HTTP vastaus 495).</string> + <string name="error_http_code_496">SSL sertifikaatti on pakollinen (HTTP vastaus 496)</string> + <string name="error_http_code_502">Sinun käänteinen välityspalvelin vastaanotti epäkelvon vastauksen openHAB palvelimelta (HTTP vastaus 502)</string> + <string name="error_http_code_503">openHAB palvelin on väliaikaisesti pois käytöstä (HTTP vastaus 503)</string> + <string name="error_http_code_504">Välityspalvelimen aikakatkaisu. Näyttää siltä että sinun käänteinen välityspalvelin on toiminnassa, mutta ei saanut vastausta openHAB palvelimelta (HTTP vastaus 504).</string> + <string name="error_http_code_507">openHAB palvelimella ei ole tarpeeksi tilaa (HTTP vastaus 507)</string> + <string name="error_http_code_511">Verkkoon kirjautuminen vaaditaan (HTTP vastaus 511)</string> + <string name="error_about_no_conn">Virhe haettaessa openHAB palvelimen tietoja</string> + <string name="error_openhab_offline">Sinun openHAB palvelin on offline tilassa, mutta pilvipalvelin toimii</string> + <string name="title_activity_openhabwritetag">Kirjoita uusi NFC tagi</string> + <string name="title_activity_libraries">Käytetyt kirjastot</string> + <string name="info_write_tag">Kosketa tagia ja pidä se lähellä kunnes varmistusviesti ilmestyy näytölle</string> + <string name="info_write_tag_progress">Kirjoittaa tagia</string> + <string name="info_write_tag_finished">Onnistui</string> + <string name="info_write_failed">Virhe kirjoitettessa tagia</string> + <string name="info_write_tag_unsupported">Tämä laite ei tue NFCtä</string> + <string name="info_write_tag_disabled">NFC on pois päältä. Ole hyvä ja kytke se päälle laitteen asetuksista.</string> + <string name="info_openhab_apiversion_label">openHAB Rest APIn versio</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB salanimi</string> + <string name="info_openhab_push_notification_label">Push ilmoitusten tila</string> + <string name="action_settings">Asetukset</string> + <string name="nfc_dialog_title">Kirjoita NFC tagin toiminto tälle elementille</string> + <string name="info_not_set">Ei määritetty</string> + <string name="empty_page">Tämä sivu ei sisällä widgettejä, jotka on määritetty näkymään</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Ilmoituksia ei toistaiseksi lähetetty</string> + <string name="notification_list_error">Virhe ladattaessa ilmoituksia</string> + <string name="list_loading_message">Ladataan\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Hyväksy tuntematon sertifikaatti?</string> + <string name="mtm_trust_anchor">Palvelinsertifikaatti ei ole tunnetun myöntäjän allekirjoittama</string> + <string name="mtm_cert_expired">Palvelinsertifikaatti on vanhentunut</string> + <string name="mtm_accept_servername">Hyväksy eriävä palvelimen nimi?</string> + <string name="mtm_hostname_mismatch">Palvelin ei voinut todentaa: \"%s\". Sertifikaatti kelpaa vain:</string> + <string name="mtm_connect_anyway">Haluatko silti yhdistää?</string> + <string name="mtm_cert_details">Ssl sertifikaatin tiedot:</string> + <string name="mtm_decision_always">Hyväksy</string> + <string name="mtm_decision_once">Kerran</string> + <string name="mtm_decision_abort">Peruuta</string> + <string name="mtm_notification">Sertifikaatin todennus</string> + <string name="settings_openhab_none">Tyhjä</string> + <!-- Themes --> + <string name="theme_name_light">Valoisa</string> + <string name="theme_name_dark">Tumma</string> + <string name="theme_name_black">Musta/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI tumma</string> + <!-- NFC --> + <string name="nfc_action_on">On</string> + <string name="nfc_action_up">Ylös</string> + <string name="nfc_action_off">Off</string> + <string name="nfc_action_down">Alas</string> + <string name="nfc_action_toggle">Vaihda</string> + <string name="nfc_activate">Aktivoi</string> + <string name="nfc_action_current_color">Nykyinen väri</string> + <string name="nfc_action_to_sitemap_page">Mene sivukartalle</string> + <!-- Drawer --> + <string name="drawer_open">Sivukartan valitsin avattu</string> + <string name="drawer_close">Sivukartan valitsin suljettu</string> + <string name="mainmenu_openhab_voice_recognition">Puheentunnistus</string> + <!-- About --> + <string name="about_title">Tietoja</string> + <string name="about_license_title">Lisenssi</string> + <string name="about_changelog">Muutosloki</string> + <string name="about_source_code">Lähdekoodi</string> + <string name="about_issues">Ilmoita ongelmasta</string> + <string name="about_docs">Dokumentointi</string> + <string name="about_community_forum">Yhteisön foorumi</string> + <string name="about_foundation">openHAB Säätiö</string> + <string name="about_community">openHAB yhteisö</string> + <string name="about_server">openHAB palvelin</string> + <string name="about_translation">Auta meitä kääntämään openHAB</string> + <string name="about_privacy_policy">Tietosuojakäytäntö</string> + <string name="settings_debug_messages_title">Näytä tietoja vianmääritykseen</string> + <string name="error_couldnt_determine_openhab_url">openHAB palvelimen URL osoitetta ei löytynyt</string> + <string name="unknown">Tuntematon</string> + <string name="error_network_type_unsupported">Verkon tyyppi (%s) ei tuettu</string> + <string name="set">Aseta</string> + <string name="cancel">Peruuta</string> + <string name="close">Sulje</string> + <string name="try_again_button">Yritä uudelleen</string> + <string name="enable_wifi_button">Käynnistä Wi-Fi</string> + <string name="go_to_settings_button">Mene asetuksiin</string> + <string name="enable_demo_mode_button">Käynnistä esittelytila</string> + <string name="configuration_missing">Emme löydä openHAB-palvelinta verkosta. Jos sinulla on jo palvelin, määritä sen IP-osoite tai isäntänimi asetuksiin. Jos sinulla ei vielä ole palvelinta, ota käyttöön esittelytila nähdäksesi mihin openHAB pystyy.</string> + <string name="no_remote_server">Yhteys paikalliseen palvelimeen epäonnistui etkä ole määrittänyt etäpalvelinta</string> + <string name="resolving_openhab">Etsitään openHAB palvelinta\u2026</string> + <string name="waiting_for_wifi">Odotetaan Wi-Fi yhteyttä\u2026</string> + <!-- Log --> + <string name="log">Loki</string> + <string name="view_log">Näytä loki</string> + <string name="clear_log">Tyhjennä loki</string> + <string name="empty_log">Loki on tyhjä</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Avaa rullaverho</string> + <string name="content_description_stop_roller_shutter">Pysäytä rullaverho</string> + <string name="content_description_close_roller_shutter">Sulje rullaverho</string> + <string name="content_description_open_color_wheel">Avaa värivalitsin</string> + <string name="content_description_color_up">Kytke tai pidä painettuna lisätäksesi kirkkautta</string> + <string name="content_description_color_down">Sammuta tai pidä painettuna vähentääksesi kirkkautta</string> + <string name="content_description_open_number_picker">Avaa numerovalitsin</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Avaa openHAB</string> + <string name="swipe_to_refresh_description">Sovellus päivittää automaattisesti joten sitä ei tavallisesti tarvitse tehdä itse</string> + <string name="swipe_to_refresh_dismiss">Selvä!</string> + <!-- Intro strings --> + <string name="app_intro">Esittely</string> + <string name="intro_welcome">Tervetuloa openHABiin</string> + <string name="intro_whatis">Valmistaja- ja teknologiariippumaton avoimen lähdekoodin automaatio-ohjelmisto kotiasi varten</string> + <string name="intro_themes">Teemat</string> + <string name="intro_themes_description">Valitse useista teemoista</string> + <string name="intro_voice_description">Hallitse kotia äänelläsi</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Itemin käyttö voidaan sitoa NFC tägeihin painamalla Itemiä pitkään</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">OHITA</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">VALMIS</string> </resources> diff --git a/mobile/src/main/res/values-fr/strings.xml b/mobile/src/main/res/values-fr/strings.xml index c6ef8717b0626b72a5faab3b47606e52cd2d8d4c..915eeefc8195d3991338f526c8ccf930f464b0de 100644 --- a/mobile/src/main/res/values-fr/strings.xml +++ b/mobile/src/main/res/values-fr/strings.xml @@ -1,194 +1,219 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Préférences</string> - <string name="app_notifications">Notifications</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Préférences</string> - <string name="mainmenu_openhab_selectsitemap">Sélectionner la Sitemap par défaut</string> - <string name="mainmenu_openhab_clearcache">Effacer le cache image</string> - <!-- App settings strings --> - <string name="settings_connection_title">Connexion</string> - <string name="settings_display_title">Affichage</string> - <string name="settings_misc_title">Divers</string> - <string name="settings_openhab_url">URL du serveur local</string> - <string name="settings_openhab_url_summary">L’URL du tableau de bord openHAB (basé sur le nom d’hôte ou adresse IP). Si configuré, la détection automatique est désactivée. Valeur actuelle : %s</string> - <string name="settings_openhab_alturl">URL distante</string> - <string name="settings_openhab_alturl_summary">L’URL du tableau de bord openHAB utilisé lorsque l’adresse locale n’est pas disponible. Valeur actuelle : %s</string> - <string name="settings_openhab_username">Identifiant</string> - <string name="settings_openhab_password">Mot de passe</string> - <string name="settings_openhab_password_summary_weak">Mot de passe peu sûr</string> - <string name="settings_openhab_password_summary_strong">Mot de passe fort</string> - <string name="settings_openhab_sslclientcert">Certificat SSL client</string> - <string name="settings_openhab_sslclientcert_howto_summary">Taper ici pour avoir de l\'aide sur comment configurer l\'authentification par certificat SSL</string> - <string name="settings_openhab_screentimeroff">Désactiver l\'extinction d\'écran</string> - <string name="settings_openhab_screentimeroff_summary">Désactiver l\'extinction d\'écran lorsque l\'app openHAB fonctionne</string> - <string name="settings_openhab_demomode">Mode démo</string> - <string name="settings_openhab_demomode_summary">Lancer l\'app openHAB en mode démo</string> - <string name="settings_openhab_theme">Thème</string> - <string name="settings_openhab_fullscreen">Plein écran</string> - <string name="settings_openhab_fullscreen_summary">Afficher l\'app openHAB en mode plein écran</string> - <string name="settings_openhab_icon_format">Format des icônes</string> - <string name="settings_openhab_icon_format_png">Image bitmap</string> - <string name="settings_openhab_icon_format_svg">Image vectorielle</string> - <string name="settings_chart_scaling">Dimensionnement du graphique</string> - <string name="settings_chart_scaling_summary">NB: Réduire l\'échelle diminue la taille des polices et des lignes pour donner plus de place au graphique mais peut réduire la lisibilité.</string> - <string name="settings_chart_scaling_value_xs">Très petit</string> - <string name="settings_chart_scaling_value_s">Petit</string> - <string name="settings_chart_scaling_value_m">Défaut</string> - <string name="settings_chart_scaling_value_l">Grande</string> - <string name="settings_ringtone">Sonnerie de notification</string> - <string name="settings_ringtone_none">Aucun</string> - <string name="settings_clear_default_sitemap">Sélectionner la Sitemap par défaut</string> - <string name="settings_no_default_sitemap">Aucune Sitemap par défaut n\'est sélectionnée</string> - <string name="settings_current_default_sitemap">Sitemap par défaut actuelle : %1$s</string> - <string name="settings_openhab_alt_connection">Distant</string> - <string name="settings_openhab_connection">Local</string> - <string name="settings_notification_vibration">Vibration de notification</string> - <string name="settings_notification_vibration_off">Désactivé</string> - <string name="settings_notification_vibration_short">Courte</string> - <string name="settings_notification_vibration_long">Longue</string> - <string name="settings_notification_vibration_twice">Deux fois</string> - <string name="settings_connection_summary">Connecté à %s</string> - <string name="settings_insecure_connection_summary">Connexion non sécurisée à %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">Commandes vocales openHAB</string> - <string name="info_voice_input">openHAB, à vos ordres!</string> - <string name="info_voice_recognized_text">Commande identifiée: %1$s</string> - <string name="info_demo_mode_short">Exécution en mode démo</string> - <string name="info_conn_url">Connexion à l\'adresse locale</string> - <string name="info_conn_rem_url">Connexion à l\'adresse distante</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB a renvoyé une liste vide de sitemaps</string> - <string name="error_network_not_available">Aucune connexion réseau disponible</string> - <string name="error_http_connection_failed">Connexion échouée. Une réponse inattendue a été reçue en essayant de se connecter au serveur openHAB configuré (code de réponse HTTP reçu : %d).</string> - <string name="error_invalid_url">Entrez une URL valide au format \'http(s)://hote(:port)/\'</string> - <string name="error_connection_failed">Connexion au domaine échouée</string> - <string name="error_unable_to_resolve_hostname">Impossible de résoudre le nom d\'hôte</string> - <string name="error_connection_sslhandshake_failed">Echec de la négotiation SSL</string> - <string name="error_certificate_not_trusted">Le certificat SSL n\'est pas un certificat de confiance. Veuillez importer le certificat racine ou désactiver la validation du certificat.</string> - <string name="error_certificate_expired">Le certificat SSL a expiré. Veuillez obtenir un nouveau certificat ou désactiver la validation du certificat.</string> - <string name="error_certificate_not_valid_yet">Le certificat SSL n\'est pas encore valide. Veuillez obtenir un certificat valide ou désactiver la validation du certificat. Vérifiez également que votre appareil est à l\'heure.</string> - <string name="error_certificate_revoked">Le certificat SSL a été révoqué. Veuillez obtenir un nouveau certificat ou désactiver la validation du certificat.</string> - <string name="error_certificate_wrong_host">Le certificat SSL n\'est pas valide pour %s</string> - <string name="error_http_code_401">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 401).</string> - <string name="error_http_code_403">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 403).</string> - <string name="error_http_code_407">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 407).</string> - <string name="error_http_code_414">URL trop longue. Veuillez utiliser l’adresse IP ou une URL plus courte (code de réponse HTTP 414).</string> - <string name="error_http_code_426">HTTPS est requis. Veuillez modifier l’URL (code de réponse HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">L\'authentification a échoué. Veuillez vérifier le certificat SSL client (code de réponse HTTP 495).</string> - <string name="error_http_code_496">Certificat SSL client requis (code de réponse HTTP 496)</string> - <string name="error_http_code_502">Votre proxy inversé a obtenu une réponse non valide du serveur openHAB (code de réponse HTTP 502)</string> - <string name="error_http_code_503">Le serveur openHAB est temporairement indisponible (code de réponse HTTP 503)</string> - <string name="error_http_code_504">Expiration du délai d\'attente de la passerelle. Votre proxy fonctionne, mais il n\'a pas pu recevoir une réponse du serveur openHAB (code de réponse HTTP 504).</string> - <string name="error_http_code_507">Le serveur openHAB n\'a pas assez d\'espace disque (code de réponse HTTP 507)</string> - <string name="error_http_code_511">L’authentification réseau est obligatoire (code de réponse HTTP 511)</string> - <string name="error_about_no_conn">Erreur lors de la lecture d’informations sur le serveur openHAB</string> - <string name="error_openhab_offline">Votre serveur openHAB est déconnecté alors que l\'instance dans le cloud est en cours d\'exécution</string> - <string name="title_activity_openhabwritetag">Écrire un tag NFC</string> - <string name="title_activity_libraries">Librairies utilisées</string> - <string name="info_write_tag">Approchez votre téléphone et gardez le proche du tag NFC jusqu\'à ce que le message de confirmation apparaisse</string> - <string name="info_write_tag_progress">Écriture du tag en cours</string> - <string name="info_write_tag_finished">Écriture du tag terminée</string> - <string name="info_write_failed">Erreur d\'écriture du tag</string> - <string name="info_write_tag_unsupported">Ce téléphone n\'est pas compatible NFC</string> - <string name="info_write_tag_disabled">NFC est désactivé. Merci d\'activer la fonctionnalité dans les paramètres du téléphone.</string> - <string name="info_openhab_apiversion_label">Version API Rest openHAB</string> - <string name="info_openhab_uuid_label">UUID openHAB</string> - <string name="info_openhab_secret_label">Phrase secrète openHAB</string> - <string name="info_openhab_push_notification_label">Statut des notifications push</string> - <string name="action_settings">Paramétrage</string> - <string name="nfc_dialog_title">Sélectionner une action pour le tag NFC</string> - <string name="info_not_set">Non paramétré</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Aucune notification n\'a été envoyée jusqu\'à maintenant</string> - <string name="notification_list_error">Une erreur s’est produite lors de la récupération des notifications</string> - <string name="list_loading_message">Chargement\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Accepter ce certificat inconnu ?</string> - <string name="mtm_trust_anchor">Ce certificat serveur n\'est signé par aucune autorité de certification</string> - <string name="mtm_cert_expired">Ce certificat serveur a expiré</string> - <string name="mtm_accept_servername">Accepter cette erreur dans le nom du serveur ?</string> - <string name="mtm_hostname_mismatch">Le serveur ne peut être authentifié avec le nom \"%s\". Le certificat n\'est valide que pour le le nom :</string> - <string name="mtm_connect_anyway">Voulez-vous vous connecter malgré tout ?</string> - <string name="mtm_cert_details">Détails du certificat :</string> - <string name="mtm_decision_always">Accepter</string> - <string name="mtm_decision_once">Une fois</string> - <string name="mtm_decision_abort">Abandonner</string> - <string name="mtm_notification">Validation du certificat SSL</string> - <string name="settings_openhab_none">Aucun</string> - <!-- Themes --> - <string name="theme_name_light">Clair</string> - <string name="theme_name_dark">Sombre</string> - <string name="theme_name_black">Noir/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI sombre</string> - <!-- NFC --> - <string name="nfc_action_on">Marche</string> - <string name="nfc_action_up">Monter</string> - <string name="nfc_action_off">Arrêt</string> - <string name="nfc_action_down">Descendre</string> - <string name="nfc_action_toggle">Basculer</string> - <string name="nfc_activate">Activer</string> - <string name="nfc_action_current_color">Couleur actuelle</string> - <string name="nfc_action_to_sitemap_page">Aller à la page de la Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Menu sitemap ouvert</string> - <string name="drawer_close">Menu sitemap fermé</string> - <string name="mainmenu_openhab_voice_recognition">Reconnaissance vocale</string> - <!-- About --> - <string name="about_title">A propos</string> - <string name="about_license_title">Licence</string> - <string name="about_changelog">Journal des modifications</string> - <string name="about_source_code">Code source</string> - <string name="about_issues">Signaler un problème</string> - <string name="about_docs">Documentation</string> - <string name="about_community_forum">Forum communautaire</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">Communauté openHAB</string> - <string name="about_server">Serveur openHAB</string> - <string name="about_translation">Aidez-nous à traduire openHAB</string> - <string name="about_privacy_policy">Politique de Confidentialité</string> - <string name="settings_debug_messages_title">Afficher les informations de déboguage</string> - <string name="error_couldnt_determine_openhab_url">Impossible de détermine l\'URL openHAB</string> - <string name="unknown">Inconnu</string> - <string name="error_network_type_unsupported">Type de réseau (%s) non supporté</string> - <string name="set">Définir</string> - <string name="cancel">Annuler</string> - <string name="close">Fermer</string> - <string name="try_again_button">Réessayer</string> - <string name="go_to_settings_button">Ouvrir les paramètres</string> - <string name="configuration_missing">Votre serveur openHAB n\'a pas pu être découvert automatiquement. Veuillez configurer son adresse IP ou nom d\'hôte dans les paramètres du serveur.</string> - <string name="no_remote_server">Le réseau local n\'est pas accessible et vous n\'avez pas configuré un serveur distant</string> - <string name="resolving_openhab">Tentative de découverte automatique du serveur openHAB\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Ouvrir le volet</string> - <string name="content_description_stop_roller_shutter">Stopper le volet</string> - <string name="content_description_close_roller_shutter">Fermer le volet</string> - <string name="content_description_open_color_wheel">Ouvrir le contrôle de couleur</string> - <string name="content_description_color_up">Marche ou maintenir pour augmenter la luminosité</string> - <string name="content_description_color_down">Arrêt ou maintenir pour diminuer la luminosité</string> - <string name="content_description_open_number_picker">Ouvrir le sélecteur numérique</string> - <string name="content_description_video">Vidéo</string> - <string name="content_description_open_openhab">Ouvrir openHAB</string> - <string name="swipe_to_refresh_description">L\'actualisation se fait automatiquement, vous n\'avez normalement rien à faire</string> - <string name="swipe_to_refresh_dismiss">Compris !</string> - <!-- Intro strings --> - <string name="app_intro">Introduction</string> - <string name="intro_welcome">Bienvenue dans openHAB</string> - <string name="intro_whatis">Un logiciel open source de domotique pour votre maison non lié à un vendeur ou à une technologie particulière</string> - <string name="intro_themes">Thêmes</string> - <string name="intro_themes_description">Choisir parmi ces thêmes</string> - <string name="intro_voice_description">Contrôler votre maison à l\'aide de commandes vocales</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Le contrôle d\'un équipement peut être associé à des tags NFC avec une pression longue sur celui-ci</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">PASSER</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">OK</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Préférences</string> + <string name="app_notifications">Notifications</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Préférences</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Une erreur s’est produite lors du chargement de HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Sélectionner la Sitemap par défaut</string> + <string name="mainmenu_openhab_clearcache">Effacer le cache image</string> + <!-- App settings strings --> + <string name="settings_connection_title">Connexion</string> + <string name="settings_display_title">Affichage</string> + <string name="settings_misc_title">Divers</string> + <string name="settings_openhab_url">URL du serveur local</string> + <string name="settings_openhab_url_summary">L’URL du tableau de bord openHAB (basé sur le nom d’hôte ou adresse IP). Si configuré, la détection automatique est désactivée. Valeur actuelle : %s</string> + <string name="settings_openhab_alturl">URL distante</string> + <string name="settings_openhab_alturl_summary">L’URL du tableau de bord openHAB utilisé lorsque l’adresse locale n’est pas disponible. Valeur actuelle : %s</string> + <string name="settings_openhab_username">Identifiant</string> + <string name="settings_openhab_password">Mot de passe</string> + <string name="settings_openhab_password_summary_weak">Mot de passe peu sûr</string> + <string name="settings_openhab_password_summary_strong">Mot de passe fort</string> + <string name="settings_openhab_sslclientcert">Certificat SSL client</string> + <string name="settings_openhab_sslclientcert_howto_summary">Taper ici pour avoir de l\'aide sur comment configurer l\'authentification par certificat SSL</string> + <string name="settings_openhab_screentimeroff">Désactiver l\'extinction d\'écran</string> + <string name="settings_openhab_screentimeroff_summary">Désactiver l\'extinction d\'écran lorsque l\'app openHAB fonctionne</string> + <string name="settings_openhab_demomode">Mode démo</string> + <string name="settings_openhab_demomode_summary">Si vous n’avez pas de serveur openHAB, activez le mode démo pour avoir un aperçu de ce dont openHAB est capable.</string> + <string name="settings_openhab_theme">Thème</string> + <string name="settings_openhab_fullscreen">Plein écran</string> + <string name="settings_openhab_fullscreen_summary">Afficher l\'app openHAB en mode plein écran</string> + <string name="settings_openhab_icon_format">Format des icônes</string> + <string name="settings_openhab_icon_format_png">Image bitmap</string> + <string name="settings_openhab_icon_format_svg">Image vectorielle</string> + <string name="settings_chart_scaling">Dimensionnement du graphique</string> + <string name="settings_chart_scaling_summary">NB: Réduire l\'échelle diminue la taille des polices et des lignes pour donner plus de place au graphique mais peut réduire la lisibilité.</string> + <string name="settings_chart_scaling_value_xs">Très petit</string> + <string name="settings_chart_scaling_value_s">Petit</string> + <string name="settings_chart_scaling_value_m">Défaut</string> + <string name="settings_chart_scaling_value_l">Grande</string> + <string name="settings_openhab_chart_hq">Graphiques haute résolution</string> + <string name="settings_openhab_chart_hq_summary">Générer des graphiques peut être compliqué en terme de puissance pour le serveur. Si le chargement des graphiques est lent et/ou que votre serveur n’est pas assez puissant, désactivez cette option pour améliorer les temps de chargement.</string> + <string name="settings_ringtone">Sonnerie de notification</string> + <string name="settings_ringtone_none">Aucun</string> + <string name="settings_clear_default_sitemap">Sélectionner la Sitemap par défaut</string> + <string name="settings_no_default_sitemap">Aucune Sitemap par défaut n\'est sélectionnée</string> + <string name="settings_current_default_sitemap">Sitemap par défaut actuelle : %1$s</string> + <string name="settings_openhab_alt_connection">Distant</string> + <string name="settings_openhab_connection">Local</string> + <string name="settings_notification_vibration">Vibration de notification</string> + <string name="settings_notification_vibration_off">Désactivé</string> + <string name="settings_notification_vibration_short">Courte</string> + <string name="settings_notification_vibration_long">Longue</string> + <string name="settings_notification_vibration_twice">Deux fois</string> + <string name="settings_notification_ringtone_vibration">Préférences de notification</string> + <string name="settings_connection_summary">Connecté à %s</string> + <string name="settings_insecure_connection_summary">Connexion non sécurisée à %s</string> + <string name="beta">Bêta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Commandes vocales</string> + <string name="title_voice_widget_icon">Commandes vocales et raccourci</string> + <string name="info_voice_input">openHAB, à vos ordres!</string> + <string name="info_voice_recognized_text">Commande identifiée: %1$s</string> + <string name="info_demo_mode_short">Exécution en mode démo</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Connexion à l\'adresse locale</string> + <string name="info_conn_rem_url">Connexion à l\'adresse distante</string> + <string name="app_shortcut_diabled_habpanel">Votre serveur n\'a pas HABPanel d\'installé</string> + <string name="app_shortcut_diabled_notifications">Votre serveur distant n\'est pas disponible</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB a renvoyé une liste vide de sitemaps</string> + <string name="error_network_not_available">Aucune connexion réseau disponible</string> + <string name="error_wifi_not_available">Le Wi-Fi est désactivé</string> + <string name="error_http_connection_failed">Connexion échouée. Une réponse inattendue a été reçue en essayant de se connecter au serveur openHAB configuré (code de réponse HTTP reçu : %d).</string> + <string name="error_invalid_url">Entrez une URL valide au format \'http(s)://hote(:port)/\'</string> + <string name="error_port_seems_invalid">Le port que vous avez entré semble invalide pour le protocole sélectionné</string> + <string name="error_connection_failed">Connexion au domaine échouée</string> + <string name="error_unable_to_resolve_hostname">Impossible de résoudre le nom d\'hôte</string> + <string name="error_connection_sslhandshake_failed">Echec de la négotiation SSL</string> + <string name="error_certificate_not_trusted">Le certificat SSL n\'est pas un certificat de confiance. Veuillez importer le certificat racine ou désactiver la validation du certificat.</string> + <string name="error_certificate_expired">Le certificat SSL a expiré. Veuillez obtenir un nouveau certificat ou désactiver la validation du certificat.</string> + <string name="error_certificate_not_valid_yet">Le certificat SSL n\'est pas encore valide. Veuillez obtenir un certificat valide ou désactiver la validation du certificat. Vérifiez également que votre appareil est à l\'heure.</string> + <string name="error_certificate_invalid_date">Le certificat SSL a une date invalide. Veuillez obtenir un certificat correct et vérifiez si l\'horloge de votre appareil est correctement définie.</string> + <string name="error_certificate_revoked">Le certificat SSL a été révoqué. Veuillez obtenir un nouveau certificat ou désactiver la validation du certificat.</string> + <string name="error_certificate_wrong_host">Le certificat SSL n\'est pas valide pour %s</string> + <string name="error_http_to_https_port">Fin de flux inattendue. Essayez-vous de vous connecter à un port HTTPS via HTTP ?</string> + <string name="webview_ssl">Actuellement cette application ne supporte pas les certificats SSL auto-signés pour les widgets Webview</string> + <string name="error_http_code_401">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 401).</string> + <string name="error_http_code_403">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 403).</string> + <string name="error_http_code_407">L’authentification a échoué. Veuillez vérifier le nom d’utilisateur et mot de passe configurés, respectivement le certificat client SSL fourni (code de réponse HTTP 407).</string> + <string name="error_http_code_414">URL trop longue. Veuillez utiliser l’adresse IP ou une URL plus courte (code de réponse HTTP 414).</string> + <string name="error_http_code_426">HTTPS est requis. Veuillez modifier l’URL (code de réponse HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">L\'authentification a échoué. Veuillez vérifier le certificat SSL client (code de réponse HTTP 495).</string> + <string name="error_http_code_496">Certificat SSL client requis (code de réponse HTTP 496)</string> + <string name="error_http_code_502">Votre proxy inversé a obtenu une réponse non valide du serveur openHAB (code de réponse HTTP 502)</string> + <string name="error_http_code_503">Le serveur openHAB est temporairement indisponible (code de réponse HTTP 503)</string> + <string name="error_http_code_504">Expiration du délai d\'attente de la passerelle. Votre proxy fonctionne, mais il n\'a pas pu recevoir une réponse du serveur openHAB (code de réponse HTTP 504).</string> + <string name="error_http_code_507">Le serveur openHAB n\'a pas assez d\'espace disque (code de réponse HTTP 507)</string> + <string name="error_http_code_511">L’authentification réseau est obligatoire (code de réponse HTTP 511)</string> + <string name="error_about_no_conn">Erreur lors de la lecture d’informations sur le serveur openHAB</string> + <string name="error_openhab_offline">Votre serveur openHAB est déconnecté alors que l\'instance dans le cloud est en cours d\'exécution</string> + <string name="title_activity_openhabwritetag">Écrire un tag NFC</string> + <string name="title_activity_libraries">Librairies utilisées</string> + <string name="info_write_tag">Approchez votre téléphone et gardez le proche du tag NFC jusqu\'à ce que le message de confirmation apparaisse</string> + <string name="info_write_tag_progress">Écriture du tag en cours</string> + <string name="info_write_tag_finished">Écriture du tag terminée</string> + <string name="info_write_failed">Erreur d\'écriture du tag</string> + <string name="info_write_tag_unsupported">Ce téléphone n\'est pas compatible NFC</string> + <string name="info_write_tag_disabled">NFC est désactivé. Merci d\'activer la fonctionnalité dans les paramètres du téléphone.</string> + <string name="info_openhab_apiversion_label">Version API Rest openHAB</string> + <string name="info_openhab_uuid_label">UUID openHAB</string> + <string name="info_openhab_secret_label">Phrase secrète openHAB</string> + <string name="info_openhab_push_notification_label">Statut des notifications push</string> + <string name="action_settings">Paramétrage</string> + <string name="nfc_dialog_title">Sélectionner une action pour le tag NFC</string> + <string name="info_not_set">Non paramétré</string> + <string name="empty_page">Cette page ne contient aucun widget qui soit défini pour être visible</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Aucune notification n\'a été envoyée jusqu\'à maintenant</string> + <string name="notification_list_error">Une erreur s’est produite lors de la récupération des notifications</string> + <string name="list_loading_message">Chargement\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Accepter ce certificat inconnu ?</string> + <string name="mtm_trust_anchor">Ce certificat serveur n\'est signé par aucune autorité de certification</string> + <string name="mtm_cert_expired">Ce certificat serveur a expiré</string> + <string name="mtm_accept_servername">Accepter cette erreur dans le nom du serveur ?</string> + <string name="mtm_hostname_mismatch">Le serveur ne peut être authentifié avec le nom \"%s\". Le certificat n\'est valide que pour le le nom :</string> + <string name="mtm_connect_anyway">Voulez-vous vous connecter malgré tout ?</string> + <string name="mtm_cert_details">Détails du certificat :</string> + <string name="mtm_decision_always">Accepter</string> + <string name="mtm_decision_once">Une fois</string> + <string name="mtm_decision_abort">Abandonner</string> + <string name="mtm_notification">Validation du certificat SSL</string> + <string name="settings_openhab_none">Aucun</string> + <!-- Themes --> + <string name="theme_name_light">Clair</string> + <string name="theme_name_dark">Sombre</string> + <string name="theme_name_black">Noir/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI sombre</string> + <!-- NFC --> + <string name="nfc_action_on">Marche</string> + <string name="nfc_action_up">Monter</string> + <string name="nfc_action_off">Arrêt</string> + <string name="nfc_action_down">Descendre</string> + <string name="nfc_action_toggle">Basculer</string> + <string name="nfc_activate">Activer</string> + <string name="nfc_action_current_color">Couleur actuelle</string> + <string name="nfc_action_to_sitemap_page">Aller à la page de la Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Menu sitemap ouvert</string> + <string name="drawer_close">Menu sitemap fermé</string> + <string name="mainmenu_openhab_voice_recognition">Reconnaissance vocale</string> + <!-- About --> + <string name="about_title">A propos</string> + <string name="about_license_title">Licence</string> + <string name="about_changelog">Journal des modifications</string> + <string name="about_source_code">Code source</string> + <string name="about_issues">Signaler un problème</string> + <string name="about_docs">Documentation</string> + <string name="about_community_forum">Forum communautaire</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">Communauté openHAB</string> + <string name="about_server">Serveur openHAB</string> + <string name="about_translation">Aidez-nous à traduire openHAB</string> + <string name="about_privacy_policy">Politique de Confidentialité</string> + <string name="settings_debug_messages_title">Afficher les informations de déboguage</string> + <string name="error_couldnt_determine_openhab_url">Impossible de détermine l\'URL openHAB</string> + <string name="unknown">Inconnu</string> + <string name="error_network_type_unsupported">Type de réseau (%s) non supporté</string> + <string name="set">Définir</string> + <string name="cancel">Annuler</string> + <string name="close">Fermer</string> + <string name="try_again_button">Réessayer</string> + <string name="enable_wifi_button">Activer le Wi-Fi</string> + <string name="go_to_settings_button">Ouvrir les paramètres</string> + <string name="enable_demo_mode_button">Activer le mode démo</string> + <string name="configuration_missing">Nous n\'avons pas trouvé de serveur openHAB sur votre réseau. Si vous avez déjà un serveur, configurez son nom d’hôte ou adresse IP dans les paramètres du serveur. Si vous n’avez pas encore de serveur, vous pouvez activer le mode démo pour voir ce dont openHAB est capable.</string> + <string name="no_remote_server">La connexion au serveur local a échoué et vous n’avez pas configuré de serveur distant</string> + <string name="resolving_openhab">Tentative de découverte automatique du serveur openHAB\u2026</string> + <string name="waiting_for_wifi">En attente de la connexion par Wi-Fi\u2026</string> + <!-- Log --> + <string name="log">Journal</string> + <string name="view_log">Afficher le journal</string> + <string name="clear_log">Effacer le journal</string> + <string name="empty_log">Le journal est vide</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Ouvrir le volet</string> + <string name="content_description_stop_roller_shutter">Stopper le volet</string> + <string name="content_description_close_roller_shutter">Fermer le volet</string> + <string name="content_description_open_color_wheel">Ouvrir le contrôle de couleur</string> + <string name="content_description_color_up">Marche ou maintenir pour augmenter la luminosité</string> + <string name="content_description_color_down">Arrêt ou maintenir pour diminuer la luminosité</string> + <string name="content_description_open_number_picker">Ouvrir le sélecteur numérique</string> + <string name="content_description_video">Vidéo</string> + <string name="content_description_open_openhab">Ouvrir openHAB</string> + <string name="swipe_to_refresh_description">L\'actualisation se fait automatiquement, vous n\'avez normalement rien à faire</string> + <string name="swipe_to_refresh_dismiss">Compris !</string> + <!-- Intro strings --> + <string name="app_intro">Introduction</string> + <string name="intro_welcome">Bienvenue dans openHAB</string> + <string name="intro_whatis">Un logiciel open source de domotique pour votre maison non lié à un vendeur ou à une technologie particulière</string> + <string name="intro_themes">Thêmes</string> + <string name="intro_themes_description">Choisir parmi ces thêmes</string> + <string name="intro_voice_description">Contrôler votre maison à l\'aide de commandes vocales</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Le contrôle d\'un équipement peut être associé à des tags NFC avec une pression longue sur celui-ci</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">PASSER</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">OK</string> </resources> diff --git a/mobile/src/main/res/values-hu/strings.xml b/mobile/src/main/res/values-hu/strings.xml index 89461a0bd1e323410da94a99f7787486b39118c2..70bdf5777c3a89d427b7eab174c7cfb585a9fa7b 100644 --- a/mobile/src/main/res/values-hu/strings.xml +++ b/mobile/src/main/res/values-hu/strings.xml @@ -1,194 +1,236 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Beállítások</string> - <string name="app_notifications">Értesítések</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Felületek</string> - <string name="mainmenu_openhab_preferences">Beállítások</string> - <string name="mainmenu_openhab_selectsitemap">Válassza ki az alapértelmezett felületet</string> - <string name="mainmenu_openhab_clearcache">Gyorsítótári képek törlése</string> - <!-- App settings strings --> - <string name="settings_connection_title">Kapcsolat</string> - <string name="settings_display_title">Kijelző</string> - <string name="settings_misc_title">Egyéb</string> - <string name="settings_openhab_url">Helyi kiszolgáló URL-címe</string> - <string name="settings_openhab_url_summary">Az openHAB felülete URL-e(gépnev vagy IP alapján). Ha be van állítva, az automatikus keresés tiltva lesz. Jelenlegi beállítás: %s</string> - <string name="settings_openhab_alturl">Távoli kiszolgáló URL-címe</string> - <string name="settings_openhab_alturl_summary">Távoli URL megadása(Mikor a helyi URL nem elérhető): %s</string> - <string name="settings_openhab_username">Felhasználónév</string> - <string name="settings_openhab_password">Jelszó</string> - <string name="settings_openhab_password_summary_weak">Gyenge jelszó</string> - <string name="settings_openhab_password_summary_strong">Erős jelszó</string> - <string name="settings_openhab_sslclientcert">SSL ügyfél-tanúsítvány</string> - <string name="settings_openhab_sslclientcert_howto_summary">Koppintson ide, hogy többet tudhasson meg a SSL ügyféltanúsítvány-hitelesítés beállításáról</string> - <string name="settings_openhab_screentimeroff">Időzített kijelző tiltása</string> - <string name="settings_openhab_screentimeroff_summary">Ha openHAB fut. Tiltsa le a kijelzővel kapcsolatos időzítőket</string> - <string name="settings_openhab_demomode">Bemutató mód</string> - <string name="settings_openhab_demomode_summary">Demo módban fut</string> - <string name="settings_openhab_theme">Sablonok</string> - <string name="settings_openhab_fullscreen">Teljes képernyő</string> - <string name="settings_openhab_fullscreen_summary">Megjelenítése teljes képernyős módban</string> - <string name="settings_openhab_icon_format">Ikon formátum</string> - <string name="settings_openhab_icon_format_png">Bitkép</string> - <string name="settings_openhab_icon_format_svg">Vektor</string> - <string name="settings_chart_scaling">Grafikon méretezés</string> - <string name="settings_chart_scaling_summary">Megjegyzés: A kisebb méretezés csökkenti a betűtípusokat és a vonalszélességet, így több hely van a grafikon számára, de a betűk olvashatósága is csökkenhet.</string> - <string name="settings_chart_scaling_value_xs">Nagyon kicsi</string> - <string name="settings_chart_scaling_value_s">Kicsi</string> - <string name="settings_chart_scaling_value_m">Alapértelmezett</string> - <string name="settings_chart_scaling_value_l">Nagy</string> - <string name="settings_ringtone">Értesítési csengőhang</string> - <string name="settings_ringtone_none">Nincs</string> - <string name="settings_clear_default_sitemap">Alapértelmezett felületet eltávolítása</string> - <string name="settings_no_default_sitemap">Nincs alapértelmezett felületet kiválasztva</string> - <string name="settings_current_default_sitemap">Jelenlegi alapértelmezett felületet: %1$s</string> - <string name="settings_openhab_alt_connection">Távoli</string> - <string name="settings_openhab_connection">Helyi</string> - <string name="settings_notification_vibration">Rezgés értesítéskor</string> - <string name="settings_notification_vibration_off">Ki</string> - <string name="settings_notification_vibration_short">Rövid</string> - <string name="settings_notification_vibration_long">Hosszú</string> - <string name="settings_notification_vibration_twice">Kétszer</string> - <string name="settings_connection_summary">Csatlakoztatva a %s</string> - <string name="settings_insecure_connection_summary">Nembiztonságosan csatakoztatva a %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB hangvezérlésére szolgáló parancsok</string> - <string name="info_voice_input">openHAB, szolgálatodra!</string> - <string name="info_voice_recognized_text">Felismert parancs: %1$s</string> - <string name="info_demo_mode_short">Demo módban fut</string> - <string name="info_conn_url">Kapcsolódás a helyi URL-hez</string> - <string name="info_conn_rem_url">Kapcsolódás a távoli URL-hez</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB üres felületet adott vissza</string> - <string name="error_network_not_available">Hálózat nem elérhető</string> - <string name="error_http_connection_failed">Kapcsolódás sikertelen. Egy nem várt válasz érkezett, míg kapcsolódni próbált az openHAB kiszolgálóhoz (HTTP válasz-kód: %d).</string> - <string name="error_invalid_url">Adjon meg egy érvényes URL-cím \' http(s)://kiszolgáló(:port)/\' formában</string> - <string name="error_connection_failed">Sikertelen kapcsolódás</string> - <string name="error_unable_to_resolve_hostname">Névfeloldás sikertelen</string> - <string name="error_connection_sslhandshake_failed">SSL ellenőrzés sikertelen</string> - <string name="error_certificate_not_trusted">Az SSL-tanúsítvány nem megbízható. Kérjük, importálja a gyökér tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> - <string name="error_certificate_expired">Az SSL tanúsítvány lejárt. Kérjük, szerezzen be új tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> - <string name="error_certificate_not_valid_yet">Az SSL tanúsítvány még nem érvényes. Kérjük, szerezzen be egy megfelelő tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben. Illetve, ellenőrizze készülékén megfelelően van e beállítva az idő.</string> - <string name="error_certificate_revoked">Az SSL tanúsítvány vissza lett vonva. Kérjük, szerezzen be új tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> - <string name="error_certificate_wrong_host">SSL-tanúsítvány érvénytelen %s</string> - <string name="error_http_code_401">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 401).</string> - <string name="error_http_code_403">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 403).</string> - <string name="error_http_code_407">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 407).</string> - <string name="error_http_code_414">URL túl hosszú. Kérjük, használja az IP-címet vagy egy rövidebb URL-t (HTTP-válaszkód 414).</string> - <string name="error_http_code_426">Kötelező a HTTPS használata. Módosítsa az URL-t (HTTP válaszkód, 426.).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">A hitelesítés sikertelen. Kérjük, ellenőrizze a megadott SSL ügyféltanúsítvány (HTTP-válaszkód 495).</string> - <string name="error_http_code_496">SSL ügyfél-tanúsítvány szükség (HTTP válasz-kód 496)</string> - <string name="error_http_code_502">Az átjáró érvénytelen választ kapott a openHAB szervertől (HTTP válaszkód, 502.)</string> - <string name="error_http_code_503">A openHAB szerver ideiglenesen nem érhető el (HTTP válasz-kód 503)</string> - <string name="error_http_code_504">Átjáró időtúllépés. Úgy tűnik, hogy a átjáró fut, de nem kap választ a openHAB szervertől (HTTP-válaszkód 504).</string> - <string name="error_http_code_507">A openHAB kiszolgálón nincs elég szabad hely (HTTP-válaszkód 507)</string> - <string name="error_http_code_511">Hálózati hitelesítésre van szükség (HTTP válasz-kód 511)</string> - <string name="error_about_no_conn">Hiba történt az openHAB szerver adatok lekérése közben</string> - <string name="error_openhab_offline">A openHAB kiszolgálója offline állapotban van, de a felhő szolgáltatás fut</string> - <string name="title_activity_openhabwritetag">NFC-címke írása</string> - <string name="title_activity_libraries">Használt könyvtárak</string> - <string name="info_write_tag">Érintse meg a címkét, és tartsa közel, amíg meg nem jelenik a visszaigazoló üzenet</string> - <string name="info_write_tag_progress">Címke írása</string> - <string name="info_write_tag_finished">Sikeresen befejezve</string> - <string name="info_write_failed">Címke írása sikertelen</string> - <string name="info_write_tag_unsupported">Ez az eszköz nem rendelkezik NFC támogatással</string> - <string name="info_write_tag_disabled">NFC le van tiltva. Kérjük, engedélyezze a készüléken a beállítások menüpontban.</string> - <string name="info_openhab_apiversion_label">openHAB Rest API verziója</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB titkos cimke</string> - <string name="info_openhab_push_notification_label">Azonnal értesítés állapota</string> - <string name="action_settings">Beállítások</string> - <string name="nfc_dialog_title">NFC címke írása ehhez az elemhez</string> - <string name="info_not_set">Nincs beállítva</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Nincs régóta elküldött értesítés</string> - <string name="notification_list_error">Értesítések betöltése közben hiba történt</string> - <string name="list_loading_message">Betöltés\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Elfogad ismeretlen tanúsítványt?</string> - <string name="mtm_trust_anchor">A kiszolgáló tanúsítványa nincs aláírva egy ismert hitelesítésszolgáltató által</string> - <string name="mtm_cert_expired">A szerver tanúsítvány lejárt</string> - <string name="mtm_accept_servername">Elfogad nem egyező kiszolgáló nevet?</string> - <string name="mtm_hostname_mismatch">Kiszolgáló nem tudta hitelesíteni a \"%s\". A tanúsítvány érvényessége:</string> - <string name="mtm_connect_anyway">Ennek ellenére szeretne csatlakozni?</string> - <string name="mtm_cert_details">Tanúsítvány részletei:</string> - <string name="mtm_decision_always">Elfogad</string> - <string name="mtm_decision_once">Egyszer</string> - <string name="mtm_decision_abort">Megszakítás</string> - <string name="mtm_notification">Tanúsítvány ellenőrzése</string> - <string name="settings_openhab_none">Nincs</string> - <!-- Themes --> - <string name="theme_name_light">Világos</string> - <string name="theme_name_dark">Sötét</string> - <string name="theme_name_black">Fekete/AMOLED</string> - <string name="theme_name_basic_ui">Egyszerű felhasználói Felületet</string> - <string name="theme_name_basic_ui_dark">Egyszerű felhasználói Felületet - sötét</string> - <!-- NFC --> - <string name="nfc_action_on">Be</string> - <string name="nfc_action_up">Fel</string> - <string name="nfc_action_off">Ki</string> - <string name="nfc_action_down">Le</string> - <string name="nfc_action_toggle">Átvált</string> - <string name="nfc_activate">Aktiválás</string> - <string name="nfc_action_current_color">Aktuális szín</string> - <string name="nfc_action_to_sitemap_page">Ugrás az felületekhez</string> - <!-- Drawer --> - <string name="drawer_open">Felület tervező nyitva</string> - <string name="drawer_close">Felület tervező zárva</string> - <string name="mainmenu_openhab_voice_recognition">Hangfelsimerés</string> - <!-- About --> - <string name="about_title">Névjegy</string> - <string name="about_license_title">Licensz</string> - <string name="about_changelog">Változásnapló</string> - <string name="about_source_code">Forráskód</string> - <string name="about_issues">Hiba jelentése</string> - <string name="about_docs">Dokumentáció</string> - <string name="about_community_forum">Közösségi fórum</string> - <string name="about_foundation">openHAB Alapítvány</string> - <string name="about_community">openHAB közösség</string> - <string name="about_server">openHAB server</string> - <string name="about_translation">Segíts nekünk az openHAB fordításában</string> - <string name="about_privacy_policy">Adatvédelmi irányelvek</string> - <string name="settings_debug_messages_title">Mutassa a hibaelhárítási információkat</string> - <string name="error_couldnt_determine_openhab_url">openHAB URL nem található</string> - <string name="unknown">Ismeretlen</string> - <string name="error_network_type_unsupported">Hálózat típusa (%s) nem támogatott</string> - <string name="set">Beállít</string> - <string name="cancel">Mégse</string> - <string name="close">Bezár</string> - <string name="try_again_button">Próbáld újra</string> - <string name="go_to_settings_button">Beállítások megnyitása</string> - <string name="configuration_missing">Az openHAB szervert nem tudta automatikusan felderíteni. Állítsd be manuálisan az IP címet vagy host nevet a szerver beállításokban.</string> - <string name="no_remote_server">Helyi hálózat nem érhető el, és a távoli kiszolgáló nincs konfigurálva</string> - <string name="resolving_openhab">Megpróbálja felderíteni az openHAB szerver példányt\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Redőny nyitása</string> - <string name="content_description_stop_roller_shutter">Redőny megállítása</string> - <string name="content_description_close_roller_shutter">Redőny lezárása</string> - <string name="content_description_open_color_wheel">Színválasztás megnyitása</string> - <string name="content_description_color_up">Fényerő növeléséhez tartsa nyomva</string> - <string name="content_description_color_down">Fényerő csökkentéséhez tartsa nyomva</string> - <string name="content_description_open_number_picker">Szám megadása</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">openHAB megnyitása</string> - <string name="swipe_to_refresh_description">Az alkalmazás frissül automatikusan, általában nem kell saját kezűleg ezt megtenni</string> - <string name="swipe_to_refresh_dismiss">Értettem!</string> - <!-- Intro strings --> - <string name="app_intro">Intro</string> - <string name="intro_welcome">Üdvözöljük openHAB-ban</string> - <string name="intro_whatis">Szállító- és technológia független nyílt forráskódú automatizálási szoftver az Ön otthonába</string> - <string name="intro_themes">Témák</string> - <string name="intro_themes_description">Választhat számos téma közül</string> - <string name="intro_voice_description">Irányítsd az otthonod a hangoddal</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Az elemek vezérlése az elem hosszú megnyomásával összeköthető egy NFC címkékhez</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">Kihagyás</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">Kész</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Beállítások</string> + <string name="app_notifications">Értesítések</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Felületek</string> + <string name="mainmenu_openhab_preferences">Beállítások</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Hiba történt a HABPanel betöltése során</string> + <string name="mainmenu_openhab_selectsitemap">Válassza ki az alapértelmezett felületet</string> + <string name="mainmenu_openhab_clearcache">Gyorsítótári képek törlése</string> + <!-- App settings strings --> + <string name="settings_connection_title">Kapcsolat</string> + <string name="settings_display_title">Kijelző</string> + <string name="settings_misc_title">Egyéb</string> + <string name="settings_openhab_url">Helyi kiszolgáló URL-címe</string> + <string name="settings_openhab_url_summary">Az openHAB felülete URL-e(gépnev vagy IP alapján). Ha be van állítva, az automatikus keresés tiltva lesz. Jelenlegi beállítás: %s</string> + <string name="settings_openhab_alturl">Távoli kiszolgáló URL-címe</string> + <string name="settings_openhab_alturl_summary">Távoli URL megadása(Mikor a helyi URL nem elérhető): %s</string> + <string name="settings_openhab_username">Felhasználónév</string> + <string name="settings_openhab_password">Jelszó</string> + <string name="settings_openhab_password_summary_weak">Gyenge jelszó</string> + <string name="settings_openhab_password_summary_strong">Erős jelszó</string> + <string name="settings_openhab_sslclientcert">SSL ügyfél-tanúsítvány</string> + <string name="settings_openhab_sslclientcert_howto_summary">Koppintson ide, hogy többet tudhasson meg a SSL ügyféltanúsítvány-hitelesítés beállításáról</string> + <string name="settings_openhab_screentimeroff">Időzített kijelző tiltása</string> + <string name="settings_openhab_screentimeroff_summary">Ha openHAB fut. Tiltsa le a kijelzővel kapcsolatos időzítőket</string> + <string name="settings_openhab_demomode">Bemutató mód</string> + <string name="settings_openhab_demomode_summary">Ha nincs openHAB szervere, engedélyezze a demo módot, hogy láthassa mire képes az openHAB.</string> + <string name="settings_openhab_theme">Sablonok</string> + <string name="settings_openhab_fullscreen">Teljes képernyő</string> + <string name="settings_openhab_fullscreen_summary">Megjelenítése teljes képernyős módban</string> + <string name="settings_openhab_icon_format">Ikon formátum</string> + <string name="settings_openhab_icon_format_png">Bitkép</string> + <string name="settings_openhab_icon_format_svg">Vektor</string> + <string name="settings_chart_scaling">Grafikon méretezés</string> + <string name="settings_chart_scaling_summary">Megjegyzés: A kisebb méretezés csökkenti a betűtípusokat és a vonalszélességet, így több hely van a grafikon számára, de a betűk olvashatósága is csökkenhet.</string> + <string name="settings_chart_scaling_value_xs">Nagyon kicsi</string> + <string name="settings_chart_scaling_value_s">Kicsi</string> + <string name="settings_chart_scaling_value_m">Alapértelmezett</string> + <string name="settings_chart_scaling_value_l">Nagy</string> + <string name="settings_openhab_chart_hq">Magas felbontású grafikonok</string> + <string name="settings_openhab_chart_hq_summary">Grafikonok generálása leterhelheti a szervert. Ha úgy érzékeli hogy lassan töltődnek, és a szervere nem túl erős, ennek a beállítás tiltásával javíthat a töltési sebességen.</string> + <string name="settings_ringtone">Értesítési csengőhang</string> + <string name="settings_ringtone_none">Nincs</string> + <string name="settings_clear_default_sitemap">Alapértelmezett felületet eltávolítása</string> + <string name="settings_no_default_sitemap">Nincs alapértelmezett felületet kiválasztva</string> + <string name="settings_current_default_sitemap">Jelenlegi alapértelmezett felületet: %1$s</string> + <string name="settings_openhab_alt_connection">Távoli</string> + <string name="settings_openhab_connection">Helyi</string> + <string name="settings_notification_vibration">Rezgés értesítéskor</string> + <string name="settings_notification_vibration_off">Ki</string> + <string name="settings_notification_vibration_short">Rövid</string> + <string name="settings_notification_vibration_long">Hosszú</string> + <string name="settings_notification_vibration_twice">Kétszer</string> + <string name="settings_notification_ringtone_vibration">Értesítési beállítások</string> + <string name="settings_connection_summary">Csatlakoztatva a %s</string> + <string name="settings_insecure_connection_summary">Nembiztonságosan csatakoztatva a %s</string> + <string name="beta">Béta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Hangutasítások</string> + <string name="title_voice_widget_icon">Hangutasítások és alkalmazás parancsikon</string> + <string name="info_voice_input">openHAB, szolgálatodra!</string> + <string name="info_voice_recognized_text">Felismert parancs: %1$s</string> + <string name="info_demo_mode_short">Demo módban fut</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Kikapcsol</string> + <string name="info_conn_url">Kapcsolódás a helyi URL-hez</string> + <string name="info_conn_rem_url">Kapcsolódás a távoli URL-hez</string> + <string name="app_shortcut_diabled_habpanel">A szerveren nincs telepítve HABPanel</string> + <string name="app_shortcut_diabled_notifications">A távoli szerver nem érhető el</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB üres felületet adott vissza</string> + <string name="error_network_not_available">Hálózat nem elérhető</string> + <string name="error_wifi_not_available">Wi-Fi ki van kapcsolva</string> + <string name="error_http_connection_failed">Kapcsolódás sikertelen. Egy nem várt válasz érkezett, míg kapcsolódni próbált az openHAB kiszolgálóhoz (HTTP válasz-kód: %d).</string> + <string name="error_invalid_url">Adjon meg egy érvényes URL-cím \' http(s)://kiszolgáló(:port)/\' formában</string> + <string name="error_port_seems_invalid">Úgy tűnik, a megadott port érvénytelen a kiválasztott protokollhoz</string> + <string name="error_connection_failed">Sikertelen kapcsolódás</string> + <string name="error_unable_to_resolve_hostname">Névfeloldás sikertelen</string> + <string name="error_connection_sslhandshake_failed">SSL ellenőrzés sikertelen</string> + <string name="error_certificate_not_trusted">Az SSL-tanúsítvány nem megbízható. Kérjük, importálja a gyökér tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> + <string name="error_certificate_expired">Az SSL tanúsítvány lejárt. Kérjük, szerezzen be új tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> + <string name="error_certificate_not_valid_yet">Az SSL tanúsítvány még nem érvényes. Kérjük, szerezzen be egy megfelelő tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben. Illetve, ellenőrizze készülékén megfelelően van e beállítva az idő.</string> + <string name="error_certificate_invalid_date">SSL-tanúsítványnak érvénytelen dátuma van. Kérjük, szerezzen be egy megfelelő tanúsítványt és ellenőrizze készülékén megfelelően van e beállítva az idő.</string> + <string name="error_certificate_revoked">Az SSL tanúsítvány vissza lett vonva. Kérjük, szerezzen be új tanúsítványt, vagy fogadja el a tanúsítványt az SSL handshake közben.</string> + <string name="error_certificate_wrong_host">SSL-tanúsítvány érvénytelen %s</string> + <string name="error_http_to_https_port">Váratlanul leállt a kapcsolat. Lehetséges hogy HTTPS-portot használ HTTP kapcsolathoz?</string> + <string name="webview_ssl">Jelenleg ez alkalmazás nem támogatja az önaláírt SSL-tanúsítványokat a \"WebView\" megjelenítőkhöz</string> + <string name="error_http_code_401">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 401).</string> + <string name="error_http_code_403">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 403).</string> + <string name="error_http_code_407">A hitelesítés sikertelen. Kérjük, ellenőrizze a beállított felhasználónevet és jelszót, illetve az SSL ügyféltanúsítványt (HTTP-válaszkód 407).</string> + <string name="error_http_code_414">URL túl hosszú. Kérjük, használja az IP-címet vagy egy rövidebb URL-t (HTTP-válaszkód 414).</string> + <string name="error_http_code_426">Kötelező a HTTPS használata. Módosítsa az URL-t (HTTP válaszkód, 426.).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">A hitelesítés sikertelen. Kérjük, ellenőrizze a megadott SSL ügyféltanúsítvány (HTTP-válaszkód 495).</string> + <string name="error_http_code_496">SSL ügyfél-tanúsítvány szükség (HTTP válasz-kód 496)</string> + <string name="error_http_code_502">Az átjáró érvénytelen választ kapott a openHAB szervertől (HTTP válaszkód, 502.)</string> + <string name="error_http_code_503">A openHAB szerver ideiglenesen nem érhető el (HTTP válasz-kód 503)</string> + <string name="error_http_code_504">Átjáró időtúllépés. Úgy tűnik, hogy a átjáró fut, de nem kap választ a openHAB szervertől (HTTP-válaszkód 504).</string> + <string name="error_http_code_507">A openHAB kiszolgálón nincs elég szabad hely (HTTP-válaszkód 507)</string> + <string name="error_http_code_511">Hálózati hitelesítésre van szükség (HTTP válasz-kód 511)</string> + <string name="error_about_no_conn">Hiba történt az openHAB szerver adatok lekérése közben</string> + <string name="error_openhab_offline">A openHAB kiszolgálója offline állapotban van, de a felhő szolgáltatás fut</string> + <string name="title_activity_openhabwritetag">NFC-címke írása</string> + <string name="title_activity_libraries">Használt könyvtárak</string> + <string name="info_write_tag">Érintse meg a címkét, és tartsa közel, amíg meg nem jelenik a visszaigazoló üzenet</string> + <string name="info_write_tag_progress">Címke írása</string> + <string name="info_write_tag_finished">Sikeresen befejezve</string> + <string name="info_write_failed">Címke írása sikertelen</string> + <string name="info_write_tag_unsupported">Ez az eszköz nem rendelkezik NFC támogatással</string> + <string name="info_write_tag_disabled">NFC le van tiltva. Kérjük, engedélyezze a készüléken a beállítások menüpontban.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API verziója</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB titkos cimke</string> + <string name="info_openhab_push_notification_label">Azonnal értesítés állapota</string> + <string name="action_settings">Beállítások</string> + <string name="nfc_dialog_title">NFC címke írása ehhez az elemhez</string> + <string name="info_not_set">Nincs beállítva</string> + <string name="empty_page">Ez az oldal nem tartalmaz olyan widget-et amely megjeleníthető</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Eszközadatok küldése a kiszolgálónak</string> + <string name="send_device_info_item_prefix">Elem név előtagja</string> + <string name="settings_alarm_clock">Ébresztőóra küldése a openHAB-nak</string> + <string name="settings_item_pref_item_name">Elem neve</string> + <string name="waiting_for_item_upload">Várakozás a hálózatra, hogy elküldhesse az Elem frissítését</string> + <string name="item_upload_in_progress">Az Elemek jelenleg frissülnek</string> + <string name="notification_channel_background">Háttér</string> + <string name="notification_channel_background_error">Hiba a háttérben futó folyamatokban</string> + <plurals name="item_update_error_title"> + <item quantity="one">%d Eleme nem volt frissíthető</item> + <item quantity="other">%d az Elemek nem frissíthetőek</item> + </plurals> + <string name="error_sending_alarm_clock_item_empty">Kérlek add meg az Elem helyes nevét</string> + <string name="retry">Újra</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Nincs régóta elküldött értesítés</string> + <string name="notification_list_error">Értesítések betöltése közben hiba történt</string> + <string name="list_loading_message">Betöltés\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Elfogad ismeretlen tanúsítványt?</string> + <string name="mtm_trust_anchor">A kiszolgáló tanúsítványa nincs aláírva egy ismert hitelesítésszolgáltató által</string> + <string name="mtm_cert_expired">A szerver tanúsítvány lejárt</string> + <string name="mtm_accept_servername">Elfogad nem egyező kiszolgáló nevet?</string> + <string name="mtm_hostname_mismatch">Kiszolgáló nem tudta hitelesíteni a \"%s\". A tanúsítvány érvényessége:</string> + <string name="mtm_connect_anyway">Ennek ellenére szeretne csatlakozni?</string> + <string name="mtm_cert_details">Tanúsítvány részletei:</string> + <string name="mtm_decision_always">Elfogad</string> + <string name="mtm_decision_once">Egyszer</string> + <string name="mtm_decision_abort">Megszakítás</string> + <string name="mtm_notification">Tanúsítvány ellenőrzése</string> + <string name="settings_openhab_none">Nincs</string> + <!-- Themes --> + <string name="theme_name_light">Világos</string> + <string name="theme_name_dark">Sötét</string> + <string name="theme_name_black">Fekete/AMOLED</string> + <string name="theme_name_basic_ui">Egyszerű felhasználói Felületet</string> + <string name="theme_name_basic_ui_dark">Egyszerű felhasználói Felületet - sötét</string> + <!-- NFC --> + <string name="nfc_action_on">Be</string> + <string name="nfc_action_up">Fel</string> + <string name="nfc_action_off">Ki</string> + <string name="nfc_action_down">Le</string> + <string name="nfc_action_toggle">Átvált</string> + <string name="nfc_activate">Aktiválás</string> + <string name="nfc_action_current_color">Aktuális szín</string> + <string name="nfc_action_to_sitemap_page">Ugrás az felületekhez</string> + <!-- Drawer --> + <string name="drawer_open">Felület tervező nyitva</string> + <string name="drawer_close">Felület tervező zárva</string> + <string name="mainmenu_openhab_voice_recognition">Hangfelsimerés</string> + <!-- About --> + <string name="about_title">Névjegy</string> + <string name="about_license_title">Licensz</string> + <string name="about_changelog">Változásnapló</string> + <string name="about_source_code">Forráskód</string> + <string name="about_issues">Hiba jelentése</string> + <string name="about_docs">Dokumentáció</string> + <string name="about_community_forum">Közösségi fórum</string> + <string name="about_foundation">openHAB Alapítvány</string> + <string name="about_community">openHAB közösség</string> + <string name="about_server">openHAB server</string> + <string name="about_translation">Segíts nekünk az openHAB fordításában</string> + <string name="about_privacy_policy">Adatvédelmi irányelvek</string> + <string name="settings_debug_messages_title">Mutassa a hibaelhárítási információkat</string> + <string name="error_couldnt_determine_openhab_url">openHAB URL nem található</string> + <string name="unknown">Ismeretlen</string> + <string name="error_network_type_unsupported">Hálózat típusa (%s) nem támogatott</string> + <string name="set">Beállít</string> + <string name="cancel">Mégse</string> + <string name="close">Bezár</string> + <string name="try_again_button">Próbáld újra</string> + <string name="enable_wifi_button">Kapcsolja be a Wi-Fi-t</string> + <string name="go_to_settings_button">Beállítások megnyitása</string> + <string name="enable_demo_mode_button">A demo üzemmód bekapcsolása</string> + <string name="configuration_missing">Nem találtunk openHAB kiszolgálót a hálózaton. Ha már van egy szervere, a szerver beállításait konfigurálja az IP-cím vagy állomásnév nevével. Ha még nem rendelkezik szerverrel, engedélyezheti a demo-t, hogy láthassa mire képes az openHAB.</string> + <string name="no_remote_server">Kapcsolódás a helyi szerverhez nem sikerült, és a távoli kiszolgáló nem konfigurált</string> + <string name="resolving_openhab">Megpróbálja felderíteni az openHAB szerver példányt\u2026</string> + <string name="waiting_for_wifi">Várakozás a Wi-Fi kapcsolat\u2026 létrehozására</string> + <!-- Log --> + <string name="log">Napló</string> + <string name="view_log">Napló megtekintése</string> + <string name="clear_log">Napló törlése</string> + <string name="empty_log">A Napló üres</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Redőny nyitása</string> + <string name="content_description_stop_roller_shutter">Redőny megállítása</string> + <string name="content_description_close_roller_shutter">Redőny lezárása</string> + <string name="content_description_open_color_wheel">Színválasztás megnyitása</string> + <string name="content_description_color_up">Fényerő növeléséhez tartsa nyomva</string> + <string name="content_description_color_down">Fényerő csökkentéséhez tartsa nyomva</string> + <string name="content_description_open_number_picker">Szám megadása</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">openHAB megnyitása</string> + <string name="content_description_increase_item_value">Érték növelése</string> + <string name="content_description_decrease_item_value">Érték csökkentése</string> + <string name="swipe_to_refresh_description">Az alkalmazás frissül automatikusan, általában nem kell saját kezűleg ezt megtenni</string> + <string name="swipe_to_refresh_dismiss">Értettem!</string> + <!-- Intro strings --> + <string name="app_intro">Intro</string> + <string name="intro_welcome">Üdvözöljük openHAB-ban</string> + <string name="intro_whatis">Szállító- és technológia független nyílt forráskódú automatizálási szoftver az Ön otthonába</string> + <string name="intro_themes">Témák</string> + <string name="intro_themes_description">Választhat számos téma közül</string> + <string name="intro_voice_description">Irányítsd az otthonod a hangoddal</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Az elemek vezérlése az elem hosszú megnyomásával összeköthető egy NFC címkékhez</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">Kihagyás</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">Kész</string> </resources> diff --git a/mobile/src/main/res/values-in/strings.xml b/mobile/src/main/res/values-in/strings.xml index 4d11ad598353b0a4d7a942bdefcdfe1511d5a016..d076224980f855d93b70894f73d7b1b00ad4c92b 100644 --- a/mobile/src/main/res/values-in/strings.xml +++ b/mobile/src/main/res/values-in/strings.xml @@ -1,97 +1,99 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Pengaturan</string> - <string name="app_notifications">Pemberitahuan</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Peta Situs</string> - <string name="mainmenu_openhab_preferences">Pengaturan</string> - <string name="mainmenu_openhab_clearcache">Hapus cache gambar</string> - <!-- App settings strings --> - <string name="settings_openhab_url">URL server lokal</string> - <string name="settings_openhab_url_summary">URL dashboard openHAB (berdasarkan nama host atau IP). Jika mengkonfigurasi, penemuan otomatis dinonaktifkan. Pengaturan saat ini: %s</string> - <string name="settings_openhab_alturl">URL server jauh</string> - <string name="settings_openhab_alturl_summary">URL dashboard openHAB digunakan saat alamat lokal tidak tersedia. Setelan saat ini: %s</string> - <string name="settings_openhab_username">Nama pengguna</string> - <string name="settings_openhab_password">Kata sandi</string> - <string name="settings_openhab_sslclientcert">SSL klien sertifikat</string> - <string name="settings_openhab_sslclientcert_howto_summary">Ketuk di sini untuk mendapatkan beberapa petunjuk dan penjelasan tentang cara menyiapkan otentikasi sertifikat klien SSL</string> - <string name="settings_openhab_screentimeroff">Nonaktifkan pewaktu tampilan</string> - <string name="settings_openhab_screentimeroff_summary">Nonaktifkan tampilan matikan timer saat openHAB sedang berlari</string> - <string name="settings_openhab_demomode">Mode demo</string> - <string name="settings_openhab_demomode_summary">Jalankan dalam mode demo</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Layar penuh</string> - <string name="settings_openhab_fullscreen_summary">Tampilan dalam mode layar penuh</string> - <string name="settings_openhab_icon_format">Format ikon</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vektor</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB, atas perintahmu!</string> - <string name="info_voice_recognized_text">Perintah yang Diakui: %1$s</string> - <string name="info_demo_mode_short">Berjalan dalam mode demo</string> - <string name="info_conn_url">Menghubungkan ke URL lokal</string> - <string name="info_conn_rem_url">Menghubungkan ke URL jauh</string> - <!-- Error messages --> - <string name="error_network_not_available">Jaringan tidak tersedia</string> - <string name="error_connection_failed">Sambungan ke rumah gagal</string> - <string name="error_unable_to_resolve_hostname">Tidak dapat menyelesaikan nama rumah</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">Sertifikat relasi SSL diperlukan (kode tanggapan HTTP 496)</string> - <string name="error_http_code_511">Otentikasi jaringan diperlukan (kode tanggapan HTTP 511)</string> - <string name="title_activity_openhabwritetag">Tulis tag NFC</string> - <string name="info_write_tag">Sentuh tag dan tetap tutup sampai pesan konfirmasi muncul</string> - <string name="info_write_tag_progress">Menulis tag</string> - <string name="info_write_tag_finished">Berhasil selesai</string> - <string name="info_write_failed">Kesalahan penulisan tag</string> - <string name="info_write_tag_unsupported">Perangkat ini tidak memiliki dukungan NFC</string> - <string name="info_write_tag_disabled">NFC dinonaktifkan Aktifkan di menu setelan perangkat.</string> - <string name="info_openhab_apiversion_label">versi openHAB Jeda API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">rahasia openHAB</string> - <string name="action_settings">Pengaturan</string> - <string name="nfc_dialog_title">Tuliskan tag NFC untuk elemen ini</string> - <string name="info_not_set">Tidak diatur</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Sekali</string> - <string name="mtm_decision_abort">Menggugurkan</string> - <string name="mtm_notification">Verifikasi sertifikat</string> - <!-- Themes --> - <string name="theme_name_light">Cahaya</string> - <string name="theme_name_dark">Gelap</string> - <string name="theme_name_black">Hitam/AMOLED</string> - <string name="theme_name_basic_ui">UI Dasar</string> - <string name="theme_name_basic_ui_dark">Dasar UI gelap</string> - <!-- NFC --> - <string name="nfc_action_on">Di</string> - <string name="nfc_action_up">Naik</string> - <string name="nfc_action_off">Mati</string> - <string name="nfc_action_down">Turun</string> - <string name="nfc_action_toggle">Toggle</string> - <string name="nfc_action_current_color">Warna sekarang</string> - <!-- Drawer --> - <string name="drawer_open">Laci peta dibuka</string> - <string name="drawer_close">Peta Situs laci tertutup</string> - <string name="mainmenu_openhab_voice_recognition">Pengenalan suara</string> - <!-- About --> - <string name="about_title">Tentang</string> - <string name="about_license_title">Izin</string> - <string name="error_couldnt_determine_openhab_url">Tidak dapat menentukan URL openHAB</string> - <string name="unknown">Tidak diketahui</string> - <string name="error_network_type_unsupported">Tipe jaringan (%s) tidak didukung</string> - <string name="set">Atur</string> - <string name="cancel">Batalkan</string> - <!-- Content description for images --> - <!-- Intro strings --> - <string name="app_intro">Intro</string> - <string name="intro_welcome">Selamat Datang di openHAB</string> - <string name="intro_whatis">Sebuah vendor dan teknologi agnostik perangkat lunak open source otomasi untuk rumah Anda</string> - <string name="intro_themes">Thema</string> - <string name="intro_themes_description">Pilih di antara beberapa tema</string> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Pengaturan</string> + <string name="app_notifications">Pemberitahuan</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Peta Situs</string> + <string name="mainmenu_openhab_preferences">Pengaturan</string> + <string name="mainmenu_openhab_clearcache">Hapus cache gambar</string> + <!-- App settings strings --> + <string name="settings_openhab_url">URL server lokal</string> + <string name="settings_openhab_url_summary">URL dashboard openHAB (berdasarkan nama host atau IP). Jika mengkonfigurasi, penemuan otomatis dinonaktifkan. Pengaturan saat ini: %s</string> + <string name="settings_openhab_alturl">URL server jauh</string> + <string name="settings_openhab_alturl_summary">URL dashboard openHAB digunakan saat alamat lokal tidak tersedia. Setelan saat ini: %s</string> + <string name="settings_openhab_username">Nama pengguna</string> + <string name="settings_openhab_password">Kata sandi</string> + <string name="settings_openhab_sslclientcert">SSL klien sertifikat</string> + <string name="settings_openhab_sslclientcert_howto_summary">Ketuk di sini untuk mendapatkan beberapa petunjuk dan penjelasan tentang cara menyiapkan otentikasi sertifikat klien SSL</string> + <string name="settings_openhab_screentimeroff">Nonaktifkan pewaktu tampilan</string> + <string name="settings_openhab_screentimeroff_summary">Nonaktifkan tampilan matikan timer saat openHAB sedang berlari</string> + <string name="settings_openhab_demomode">Mode demo</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Layar penuh</string> + <string name="settings_openhab_fullscreen_summary">Tampilan dalam mode layar penuh</string> + <string name="settings_openhab_icon_format">Format ikon</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vektor</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, atas perintahmu!</string> + <string name="info_voice_recognized_text">Perintah yang Diakui: %1$s</string> + <string name="info_demo_mode_short">Berjalan dalam mode demo</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Menghubungkan ke URL lokal</string> + <string name="info_conn_rem_url">Menghubungkan ke URL jauh</string> + <!-- Error messages --> + <string name="error_network_not_available">Jaringan tidak tersedia</string> + <string name="error_connection_failed">Sambungan ke rumah gagal</string> + <string name="error_unable_to_resolve_hostname">Tidak dapat menyelesaikan nama rumah</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_496">Sertifikat relasi SSL diperlukan (kode tanggapan HTTP 496)</string> + <string name="error_http_code_511">Otentikasi jaringan diperlukan (kode tanggapan HTTP 511)</string> + <string name="title_activity_openhabwritetag">Tulis tag NFC</string> + <string name="info_write_tag">Sentuh tag dan tetap tutup sampai pesan konfirmasi muncul</string> + <string name="info_write_tag_progress">Menulis tag</string> + <string name="info_write_tag_finished">Berhasil selesai</string> + <string name="info_write_failed">Kesalahan penulisan tag</string> + <string name="info_write_tag_unsupported">Perangkat ini tidak memiliki dukungan NFC</string> + <string name="info_write_tag_disabled">NFC dinonaktifkan Aktifkan di menu setelan perangkat.</string> + <string name="info_openhab_apiversion_label">versi openHAB Jeda API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">rahasia openHAB</string> + <string name="action_settings">Pengaturan</string> + <string name="nfc_dialog_title">Tuliskan tag NFC untuk elemen ini</string> + <string name="info_not_set">Tidak diatur</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_decision_once">Sekali</string> + <string name="mtm_decision_abort">Menggugurkan</string> + <string name="mtm_notification">Verifikasi sertifikat</string> + <!-- Themes --> + <string name="theme_name_light">Cahaya</string> + <string name="theme_name_dark">Gelap</string> + <string name="theme_name_black">Hitam/AMOLED</string> + <string name="theme_name_basic_ui">UI Dasar</string> + <string name="theme_name_basic_ui_dark">Dasar UI gelap</string> + <!-- NFC --> + <string name="nfc_action_on">Di</string> + <string name="nfc_action_up">Naik</string> + <string name="nfc_action_off">Mati</string> + <string name="nfc_action_down">Turun</string> + <string name="nfc_action_toggle">Toggle</string> + <string name="nfc_action_current_color">Warna sekarang</string> + <!-- Drawer --> + <string name="drawer_open">Laci peta dibuka</string> + <string name="drawer_close">Peta Situs laci tertutup</string> + <string name="mainmenu_openhab_voice_recognition">Pengenalan suara</string> + <!-- About --> + <string name="about_title">Tentang</string> + <string name="about_license_title">Izin</string> + <string name="error_couldnt_determine_openhab_url">Tidak dapat menentukan URL openHAB</string> + <string name="unknown">Tidak diketahui</string> + <string name="error_network_type_unsupported">Tipe jaringan (%s) tidak didukung</string> + <string name="set">Atur</string> + <string name="cancel">Batalkan</string> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <string name="app_intro">Intro</string> + <string name="intro_welcome">Selamat Datang di openHAB</string> + <string name="intro_whatis">Sebuah vendor dan teknologi agnostik perangkat lunak open source otomasi untuk rumah Anda</string> + <string name="intro_themes">Thema</string> + <string name="intro_themes_description">Pilih di antara beberapa tema</string> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-it/strings.xml b/mobile/src/main/res/values-it/strings.xml index d5e769021e4cfed4fc3cafbecb6c0fb8dffa748d..4588ff13631236a4fd00c16d535cd6217deff8de 100644 --- a/mobile/src/main/res/values-it/strings.xml +++ b/mobile/src/main/res/values-it/strings.xml @@ -1,195 +1,249 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Impostazioni</string> - <string name="app_notifications">Notifiche</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Impostazioni</string> - <string name="mainmenu_openhab_selectsitemap">Seleziona Sitemap predefinito</string> - <string name="mainmenu_openhab_clearcache">Pulisci cache immagini</string> - <!-- App settings strings --> - <string name="settings_connection_title">Connessione</string> - <string name="settings_display_title">Display</string> - <string name="settings_misc_title">Altro</string> - <string name="settings_openhab_url">URL del server locale</string> - <string name="settings_openhab_url_summary">L\'URL dell\'interfaccia openHAB (inserire IP o hostname). Se configurato, il rilevamento automatico sarà disattivato. L’Impostazione corrente è: %s</string> - <string name="settings_openhab_alturl">URL del server remoto</string> - <string name="settings_openhab_alturl_summary">L\'URL utilizzato dell\'interfaccia openHAB quando l\'indirizzo locale non è disponibile. L’impostazione corrente è: %s</string> - <string name="settings_openhab_username">Utente</string> - <string name="settings_openhab_password">Password</string> - <string name="settings_openhab_password_summary_weak">Password non sicura</string> - <string name="settings_openhab_password_summary_strong">Password sicura</string> - <string name="settings_openhab_sslclientcert">Certificato SSL client</string> - <string name="settings_openhab_sslclientcert_howto_summary">Tocca qui per suggerimenti e spiegazioni su come configurare l\'autenticazione con certificato SSL client</string> - <string name="settings_openhab_screentimeroff">Disattivare la visualizzazione del timer</string> - <string name="settings_openhab_screentimeroff_summary">Non mostrare timer di spegnimento quando openHAB e\' in esecuzione</string> - <string name="settings_openhab_demomode">Modalità demo</string> - <string name="settings_openhab_demomode_summary">Esecuzione in modalità demo</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Schermo intero</string> - <string name="settings_openhab_fullscreen_summary">Visualizza a schermo intero</string> - <string name="settings_openhab_icon_format">Formato icona</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vettoriale</string> - <string name="settings_chart_scaling">Scala del grafico</string> - <string name="settings_chart_scaling_summary">Nota: Con una scala piccola, c\'è più\' spazio per il grafico, ma la leggibilita\' dei caratteri e linee puo\' essere compromessa.</string> - <string name="settings_chart_scaling_value_xs">Molto piccolo</string> - <string name="settings_chart_scaling_value_s">Piccolo</string> - <string name="settings_chart_scaling_value_m">Predefinito</string> - <string name="settings_chart_scaling_value_l">Grande</string> - <string name="settings_ringtone">Suono di Notifica</string> - <string name="settings_ringtone_none">Nessuno</string> - <string name="settings_clear_default_sitemap">Cancella Sitemap predefinito</string> - <string name="settings_no_default_sitemap">Nessun Sitemap predefinito selezionato</string> - <string name="settings_current_default_sitemap">Sitemap predefinito attuale: %1$s</string> - <string name="settings_openhab_alt_connection">Remoto</string> - <string name="settings_openhab_connection">Locale</string> - <string name="settings_notification_vibration">VIbrazione per notifiche</string> - <string name="settings_notification_vibration_off">Off</string> - <string name="settings_notification_vibration_short">Breve</string> - <string name="settings_notification_vibration_long">Lungo</string> - <string name="settings_notification_vibration_twice">Due volte</string> - <string name="settings_connection_summary">Connesso a %s</string> - <string name="settings_insecure_connection_summary">Connesso in modo non sicuro a %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">comandi vocali openHAB</string> - <string name="info_voice_input">openHAB, ai tuoi comandi!</string> - <string name="info_voice_recognized_text">Comando riconosciuto: %1$s</string> - <string name="info_demo_mode_short">Esecuzione in modalità demo</string> - <string name="info_conn_url">Connessione a URL locale</string> - <string name="info_conn_rem_url">Connessione a URL remoto</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB ha la lista di Sitemap vuota</string> - <string name="error_network_not_available">Rete non disponibile</string> - <string name="error_http_connection_failed">Connessione non riuscita. È stata ricevuta una risposta imprevista durante il tentativo di connessione al server openHAB configurato (codice di risposta HTTP ricevuto: %d).</string> - <string name="error_invalid_url">Inserisci un URL valido nella forma \'http(s)://host(:port)/\'</string> - <string name="error_connection_failed">Connessione al dispositivo non riuscita</string> - <string name="error_unable_to_resolve_hostname">Impossibile risolvere il nome host</string> - <string name="error_connection_sslhandshake_failed">Handshake SSL non riuscito</string> - <string name="error_certificate_not_trusted">Il certificato SSL non e\' attendibile. Importa un certidicato root o accetta il certificato durante l\'handshake SSL.</string> - <string name="error_certificate_expired">Il certificato SSL e\' scaduto. Importa un nuovo certificato o accetta il certificato durante l\'handshake SSL.</string> - <string name="error_certificate_not_valid_yet">Certificato SSL non ancora valido. Importa un certificato corretto o accetta Il certificato durante l\'handshake SSL. Verifica se l\'orologio del dispositivo e\' impostato correttamente.</string> - <string name="error_certificate_revoked">Il certificato SSL e\' stato revocato. Importa un nuovo certificato o accetta il certificato durante l\'handshake SSL.</string> - <string name="error_certificate_wrong_host">Il certificato SSL non e\' valido per %s</string> - <string name="error_http_code_401">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 401).</string> - <string name="error_http_code_403">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 403).</string> - <string name="error_http_code_407">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 407).</string> - <string name="error_http_code_414">URL è troppo lungo. Utilizzare l\'indirizzo IP o un URL più corto (codice di risposta HTTP 414).</string> - <string name="error_http_code_426">HTTPS è obbligatorio. Si prega di cambiare l\'URL (codice di risposta HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Autenticazione non riuscita. Verificare il certificato SSL client fornito (codice di risposta HTTP 495).</string> - <string name="error_http_code_496">E\' richiesto un certificato SSL (codice risposta HTTP 496)</string> - <string name="error_http_code_502">Il reverse proxy ha ricevuto una risposta non valida dal server openHAB (codice risposta HTTP 502)</string> - <string name="error_http_code_503">Il server openHAB non e\' temporaneamente disponibile (codice risposta HTTP 503)</string> - <string name="error_http_code_504">Gateway timeout. Sembra che il tuo reverse proxy e\' in esecuzione, ma non riceve una risposta dal server openHAB (codice risposta HTTP 504).</string> - <string name="error_http_code_507">Il server openHAB non ha abbastanza spazio disponibile (codice risposta HTTP 507)</string> - <string name="error_http_code_511">È richiesta un\'autenticazione di rete (codice risposta HTTP 511)</string> - <string name="error_about_no_conn">Errore nel recupero delle informazioni dal server openHAB</string> - <string name="error_openhab_offline">Il server di openHAB è offline mentre è in esecuzione l\'istanza cloud</string> - <string name="error_no_app_store_found">App di Voice Recognizer non trovata nell’app store</string> - <string name="title_activity_openhabwritetag">Scrittura tag NFC</string> - <string name="title_activity_libraries">Librerie usate</string> - <string name="info_write_tag">Tocca il tag e tienilo premuto fino alla comparsa del messaggio di conferma</string> - <string name="info_write_tag_progress">Salvando sul tag</string> - <string name="info_write_tag_finished">Completato correttamente</string> - <string name="info_write_failed">Errore in scrittura sul tag</string> - <string name="info_write_tag_unsupported">Il dispositivo non ha il supporto NFC</string> - <string name="info_write_tag_disabled">NFC e\' disabilitato. Attivarlo nel menu impostazioni del dispositivo.</string> - <string name="info_openhab_apiversion_label">versione delle Rest API di openHAB</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Secret</string> - <string name="info_openhab_push_notification_label">Stato delle notifiche push</string> - <string name="action_settings">Impostazioni</string> - <string name="nfc_dialog_title">Salvare le azioni sul tag NFC per questo elemento</string> - <string name="info_not_set">Non impostato</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Nessuna notifica spedita finora</string> - <string name="notification_list_error">È successo un errore durante il caricamento delle notifiche</string> - <string name="list_loading_message">Caricamento\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Accetti il certificato sconosciuto?</string> - <string name="mtm_trust_anchor">Il certificato del server non è firmato da un\'autorità di certificazione conosciuta</string> - <string name="mtm_cert_expired">Il certificato del server è scaduto</string> - <string name="mtm_accept_servername">Accettare Nome Server diverso?</string> - <string name="mtm_hostname_mismatch">Server non può autenticare come \"%s\". Il certificato è solo valido per:</string> - <string name="mtm_connect_anyway">Vuoi collegarti comunque?</string> - <string name="mtm_cert_details">Dettagli certificato:</string> - <string name="mtm_decision_always">Accetta</string> - <string name="mtm_decision_once">Una volta</string> - <string name="mtm_decision_abort">Annulla</string> - <string name="mtm_notification">Verifica del certificato</string> - <string name="settings_openhab_none">Nessuno</string> - <!-- Themes --> - <string name="theme_name_light">Chiaro</string> - <string name="theme_name_dark">Scuro</string> - <string name="theme_name_black">Nero/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI scuro</string> - <!-- NFC --> - <string name="nfc_action_on">On</string> - <string name="nfc_action_up">Su</string> - <string name="nfc_action_off">Off</string> - <string name="nfc_action_down">Giù</string> - <string name="nfc_action_toggle">Alterna</string> - <string name="nfc_activate">Attiva</string> - <string name="nfc_action_current_color">Colore attuale</string> - <string name="nfc_action_to_sitemap_page">Naviga alla pagina dei Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Sitemap drawer aperto</string> - <string name="drawer_close">Sitemap drawer chiuso</string> - <string name="mainmenu_openhab_voice_recognition">Riconoscimento vocale</string> - <!-- About --> - <string name="about_title">Info</string> - <string name="about_license_title">Licenza</string> - <string name="about_changelog">Aggiornamenti</string> - <string name="about_source_code">Codice sorgente</string> - <string name="about_issues">Riporta un problema</string> - <string name="about_docs">Documentazione</string> - <string name="about_community_forum">Forum della Comunità</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">comunità openHAB</string> - <string name="about_server">server openHAB</string> - <string name="about_translation">Aiutaci a tradurre openHAB</string> - <string name="about_privacy_policy">Informativa sulla privacy</string> - <string name="settings_debug_messages_title">Mostra informazioni per la risoluzione dei problemi</string> - <string name="error_couldnt_determine_openhab_url">Non trovo openHAB URL</string> - <string name="unknown">Sconosciuto</string> - <string name="error_network_type_unsupported">Tipo di rete (%s) non supportata</string> - <string name="set">Set</string> - <string name="cancel">Annulla</string> - <string name="close">Chiudi</string> - <string name="try_again_button">Riprova</string> - <string name="go_to_settings_button">Vai alle impostazioni</string> - <string name="configuration_missing">Il tuo server openHAB non puo\' essere individuato automaticamente. Per favore configura il suo indirizzo IP o il nome host nelle impostazioni server.</string> - <string name="no_remote_server">Rete locale non è disponibile e non è stato configurato un server remoto</string> - <string name="resolving_openhab">Individuando l\'istanza openHAB\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Apertura tapparella</string> - <string name="content_description_stop_roller_shutter">Ferma tapparella</string> - <string name="content_description_close_roller_shutter">Chiusura tapparella</string> - <string name="content_description_open_color_wheel">Apri ruota dei colori</string> - <string name="content_description_color_up">On o ferma l\'aumento luminosita\'</string> - <string name="content_description_color_down">Off o ferma l\'aumento luminosita\'</string> - <string name="content_description_open_number_picker">Apri selezione numero</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Apri openHAB</string> - <string name="swipe_to_refresh_description">L\'applicazione si aggiorna automaticamente, normalmente non serve farlo manualmente</string> - <string name="swipe_to_refresh_dismiss">Ricevuto!</string> - <!-- Intro strings --> - <string name="app_intro">Intro</string> - <string name="intro_welcome">Benvenuto in openHAB</string> - <string name="intro_whatis">Una soluzione domotica open source per la tua casa, indipendente da tecnologia e da produttori</string> - <string name="intro_themes">Temi</string> - <string name="intro_themes_description">Scegli tra i diversi temi</string> - <string name="intro_voice_description">Controlla la tua casa con la tua voce</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Il controllo dell\'item può essere associato a un tag NFC premendo a lungo sull\'item</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">SALTA</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">FATTO</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Impostazioni</string> + <string name="app_notifications">Notifiche</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Impostazioni</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Si è verificato un errore caricando HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Seleziona Sitemap predefinito</string> + <string name="mainmenu_openhab_clearcache">Pulisci cache immagini</string> + <!-- App settings strings --> + <string name="settings_connection_title">Connessione</string> + <string name="settings_display_title">Display</string> + <string name="settings_misc_title">Altro</string> + <string name="settings_openhab_url">URL del server locale</string> + <string name="settings_openhab_url_summary">L\'URL dell\'interfaccia openHAB (inserire IP o hostname). Se configurato, il rilevamento automatico sarà disattivato. L’Impostazione corrente è: %s</string> + <string name="settings_openhab_alturl">URL del server remoto</string> + <string name="settings_openhab_alturl_summary">L\'URL utilizzato dell\'interfaccia openHAB quando l\'indirizzo locale non è disponibile. L’impostazione corrente è: %s</string> + <string name="settings_openhab_username">Utente</string> + <string name="settings_openhab_password">Password</string> + <string name="settings_openhab_password_summary_weak">Password non sicura</string> + <string name="settings_openhab_password_summary_strong">Password sicura</string> + <string name="settings_openhab_sslclientcert">Certificato SSL client</string> + <string name="settings_openhab_sslclientcert_howto_summary">Tocca qui per suggerimenti e spiegazioni su come configurare l\'autenticazione con certificato SSL client</string> + <string name="settings_openhab_screentimeroff">Disattivare la visualizzazione del timer</string> + <string name="settings_openhab_screentimeroff_summary">Non mostrare timer di spegnimento quando openHAB e\' in esecuzione</string> + <string name="settings_openhab_demomode">Modalità demo</string> + <string name="settings_openhab_demomode_summary">Se non hai un openHAB server, attiva la modalità demo e potrai immaginare ciò che openHAB è in grado di fare.</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Schermo intero</string> + <string name="settings_openhab_fullscreen_summary">Visualizza a schermo intero</string> + <string name="settings_openhab_icon_format">Formato icona</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vettoriale</string> + <string name="settings_chart_scaling">Scala del grafico</string> + <string name="settings_chart_scaling_summary">Nota: Con una scala piccola, c\'è più\' spazio per il grafico, ma la leggibilita\' dei caratteri e linee puo\' essere compromessa.</string> + <string name="settings_chart_scaling_value_xs">Molto piccolo</string> + <string name="settings_chart_scaling_value_s">Piccolo</string> + <string name="settings_chart_scaling_value_m">Predefinito</string> + <string name="settings_chart_scaling_value_l">Grande</string> + <string name="settings_openhab_chart_hq">Grafici in alta risoluzione</string> + <string name="settings_openhab_chart_hq_summary">La generazione dei grafici può essere pesante per il server. Se noti una lentezza nel caricamento dei grafici e il server non è potente, disabilita la funzione per migliorare il tempo di caricamento.</string> + <string name="settings_ringtone">Suono di Notifica</string> + <string name="settings_ringtone_none">Nessuno</string> + <string name="settings_clear_default_sitemap">Cancella Sitemap predefinito</string> + <string name="settings_no_default_sitemap">Nessun Sitemap predefinito selezionato</string> + <string name="settings_current_default_sitemap">Sitemap predefinito attuale: %1$s</string> + <string name="settings_openhab_alt_connection">Remoto</string> + <string name="settings_openhab_connection">Locale</string> + <string name="settings_notification_vibration">VIbrazione per notifiche</string> + <string name="settings_notification_vibration_off">Off</string> + <string name="settings_notification_vibration_short">Breve</string> + <string name="settings_notification_vibration_long">Lungo</string> + <string name="settings_notification_vibration_twice">Due volte</string> + <string name="settings_notification_ringtone_vibration">Impostazioni avvisi</string> + <string name="settings_connection_summary">Connesso a %s</string> + <string name="settings_insecure_connection_summary">Connesso in modo non sicuro a %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Comandi vocali</string> + <string name="title_voice_widget_icon">Comandi vocali e collegamento app</string> + <string name="info_voice_input">openHAB, ai tuoi comandi!</string> + <string name="info_voice_recognized_text">Comando riconosciuto: %1$s</string> + <string name="info_demo_mode_short">Esecuzione in modalità demo</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Spegnere</string> + <string name="info_conn_url">Connessione a URL locale</string> + <string name="info_conn_rem_url">Connessione a URL remoto</string> + <string name="app_shortcut_diabled_habpanel">Il tuo server non ha HABPanel installato</string> + <string name="app_shortcut_diabled_notifications">Server remoto non è disponibile</string> + <string name="app_shortcut_diabled_voice_recognition">Il tuo dispositivo non ha un\'app di riconoscimento vocale installata</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB ha la lista di Sitemap vuota</string> + <string name="error_sitemap_generic_load_error">Sitemap non può essere caricato. Si è verificato il seguente errore: %1$s</string> + <string name="error_network_not_available">Rete non disponibile</string> + <string name="error_wifi_not_available">Il Wi-Fi è spento</string> + <string name="error_http_connection_failed">Connessione non riuscita. È stata ricevuta una risposta imprevista durante il tentativo di connessione al server openHAB configurato (codice di risposta HTTP ricevuto: %d).</string> + <string name="error_invalid_url">Inserisci un URL valido nella forma \'http(s)://host(:port)/\'</string> + <string name="error_port_seems_invalid">La porta inserita non sembra valida per il protocollo selezionato</string> + <string name="error_connection_failed">Connessione al dispositivo non riuscita</string> + <string name="error_unable_to_resolve_hostname">Impossibile risolvere il nome host</string> + <string name="error_connection_sslhandshake_failed">Handshake SSL non riuscito</string> + <string name="error_certificate_not_trusted">Il certificato SSL non e\' attendibile. Importa un certidicato root o accetta il certificato durante l\'handshake SSL.</string> + <string name="error_certificate_expired">Il certificato SSL e\' scaduto. Importa un nuovo certificato o accetta il certificato durante l\'handshake SSL.</string> + <string name="error_certificate_not_valid_yet">Certificato SSL non ancora valido. Importa un certificato corretto o accetta Il certificato durante l\'handshake SSL. Verifica se l\'orologio del dispositivo e\' impostato correttamente.</string> + <string name="error_certificate_invalid_date">Il certificato SSL ha una data non valida. Si prega di ottenere un certificato corretto e verificare se l\'orologio sul dispositivo è impostato correttamente.</string> + <string name="error_certificate_revoked">Il certificato SSL e\' stato revocato. Importa un nuovo certificato o accetta il certificato durante l\'handshake SSL.</string> + <string name="error_certificate_wrong_host">Il certificato SSL non e\' valido per %s</string> + <string name="error_http_to_https_port">Fine imprevista dello stream. Stai cercando di connetterti ad una porta HTTPS tramite HTTP?</string> + <string name="webview_ssl">Attualmente questa app non supporta certificati SSL autofirmati per i widget Webview</string> + <string name="error_http_code_401">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 401).</string> + <string name="error_http_code_403">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 403).</string> + <string name="error_http_code_407">Autenticazione non riuscita. Controlla l\'utente e password configurati nel certificato SSL (codice risposta HTTP 407).</string> + <string name="error_http_code_414">URL è troppo lungo. Utilizzare l\'indirizzo IP o un URL più corto (codice di risposta HTTP 414).</string> + <string name="error_http_code_426">HTTPS è obbligatorio. Si prega di cambiare l\'URL (codice di risposta HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autenticazione non riuscita. Verificare il certificato SSL client fornito (codice di risposta HTTP 495).</string> + <string name="error_http_code_496">E\' richiesto un certificato SSL (codice risposta HTTP 496)</string> + <string name="error_http_code_502">Il reverse proxy ha ricevuto una risposta non valida dal server openHAB (codice risposta HTTP 502)</string> + <string name="error_http_code_503">Il server openHAB non e\' temporaneamente disponibile (codice risposta HTTP 503)</string> + <string name="error_http_code_504">Gateway timeout. Sembra che il tuo reverse proxy e\' in esecuzione, ma non riceve una risposta dal server openHAB (codice risposta HTTP 504).</string> + <string name="error_http_code_507">Il server openHAB non ha abbastanza spazio disponibile (codice risposta HTTP 507)</string> + <string name="error_http_code_511">È richiesta un\'autenticazione di rete (codice risposta HTTP 511)</string> + <string name="error_about_no_conn">Errore nel recupero delle informazioni dal server openHAB</string> + <string name="error_openhab_offline">Il server di openHAB è offline mentre è in esecuzione l\'istanza cloud</string> + <string name="error_no_browser_found">Nessun browser trovato sul tuo dispositivo</string> + <string name="error_no_speech_to_text_app_found">Nessuna app di riconoscimento vocale trovata</string> + <string name="install">Installa</string> + <string name="title_activity_openhabwritetag">Scrittura tag NFC</string> + <string name="title_activity_libraries">Librerie usate</string> + <string name="info_write_tag">Tocca il tag e tienilo premuto fino alla comparsa del messaggio di conferma</string> + <string name="info_write_tag_progress">Salvando sul tag</string> + <string name="info_write_tag_finished">Completato correttamente</string> + <string name="info_write_failed">Errore in scrittura sul tag</string> + <string name="info_write_tag_unsupported">Il dispositivo non ha il supporto NFC</string> + <string name="info_write_tag_disabled">NFC e\' disabilitato. Attivarlo nel menu impostazioni del dispositivo.</string> + <string name="info_openhab_apiversion_label">versione delle Rest API di openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Secret</string> + <string name="info_openhab_push_notification_label">Stato delle notifiche push</string> + <string name="action_settings">Impostazioni</string> + <string name="nfc_dialog_title">Salvare le azioni sul tag NFC per questo elemento</string> + <string name="info_not_set">Non impostato</string> + <string name="empty_page">Questa pagina non contiene tutti i widget impostati per essere visibili</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Invia informazioni del dispositivo al server</string> + <string name="send_device_info_item_prefix">Prefisso nome Item</string> + <string name="send_device_info_item_prefix_summary">I nomi degli Item delle seguenti funzionalità hanno questo prefisso</string> + <string name="settings_alarm_clock">Invia allarme sveglia a openHAB</string> + <string name="settings_alarm_clock_summary_on">Invia ora dell’allarme sveglia all’Item ‘%1$s’</string> + <string name="settings_alarm_clock_summary_off">Non inviare l’ora della sveglia al server</string> + <string name="settings_alarm_clock_howto_summary">Tocca qui per avere suggerimenti su come configurare questa funzionalità sul server</string> + <string name="settings_item_pref_item_name">Nome Item</string> + <string name="waiting_for_item_upload">In attesa della rete per inviare aggiornamenti degli Item</string> + <string name="item_upload_in_progress">Item in corso di aggiornamento</string> + <string name="notification_channel_background">Background</string> + <string name="notification_channel_background_description">Usato per mostrare task sospesi in background</string> + <string name="notification_channel_background_error">Errore nei task in background</string> + <string name="notification_channel_background_error_description">Usato per mostrare errori nei task in background</string> + <plurals name="item_update_error_title"> + <item quantity="one">L’item %d non può essere aggiornato</item> + <item quantity="other">Gli item %d non possono essere aggiornati</item> + </plurals> + <string name="item_update_http_error">L’aggiornamento dell’item \'%1$s\' è fallito (Errore HTTP %2$d)</string> + <string name="item_update_connection_error">L’aggiornamento dell’item \'%1$s\' è fallito (Manca connessione)</string> + <string name="error_sending_alarm_clock_item_empty">Inserire un nome valido per l’item</string> + <string name="retry">Riprova</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Nessuna notifica spedita finora</string> + <string name="notification_list_error">È successo un errore durante il caricamento delle notifiche</string> + <string name="list_loading_message">Caricamento\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Accetti il certificato sconosciuto?</string> + <string name="mtm_trust_anchor">Il certificato del server non è firmato da un\'autorità di certificazione conosciuta</string> + <string name="mtm_cert_expired">Il certificato del server è scaduto</string> + <string name="mtm_accept_servername">Accettare Nome Server diverso?</string> + <string name="mtm_hostname_mismatch">Server non può autenticare come \"%s\". Il certificato è solo valido per:</string> + <string name="mtm_connect_anyway">Vuoi collegarti comunque?</string> + <string name="mtm_cert_details">Dettagli certificato:</string> + <string name="mtm_decision_always">Accetta</string> + <string name="mtm_decision_once">Una volta</string> + <string name="mtm_decision_abort">Annulla</string> + <string name="mtm_notification">Verifica del certificato</string> + <string name="settings_openhab_none">Nessuno</string> + <!-- Themes --> + <string name="theme_name_light">Chiaro</string> + <string name="theme_name_dark">Scuro</string> + <string name="theme_name_black">Nero/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI scuro</string> + <!-- NFC --> + <string name="nfc_action_on">On</string> + <string name="nfc_action_up">Su</string> + <string name="nfc_action_off">Off</string> + <string name="nfc_action_down">Giù</string> + <string name="nfc_action_toggle">Alterna</string> + <string name="nfc_activate">Attiva</string> + <string name="nfc_action_current_color">Colore attuale</string> + <string name="nfc_action_to_sitemap_page">Naviga alla pagina dei Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap drawer aperto</string> + <string name="drawer_close">Sitemap drawer chiuso</string> + <string name="mainmenu_openhab_voice_recognition">Riconoscimento vocale</string> + <!-- About --> + <string name="about_title">Info</string> + <string name="about_license_title">Licenza</string> + <string name="about_changelog">Aggiornamenti</string> + <string name="about_source_code">Codice sorgente</string> + <string name="about_issues">Riporta un problema</string> + <string name="about_docs">Documentazione</string> + <string name="about_community_forum">Forum della Comunità</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">comunità openHAB</string> + <string name="about_server">server openHAB</string> + <string name="about_translation">Aiutaci a tradurre openHAB</string> + <string name="about_privacy_policy">Informativa sulla privacy</string> + <string name="settings_debug_messages_title">Mostra informazioni per la risoluzione dei problemi</string> + <string name="error_couldnt_determine_openhab_url">Non trovo openHAB URL</string> + <string name="unknown">Sconosciuto</string> + <string name="error_network_type_unsupported">Tipo di rete (%s) non supportata</string> + <string name="set">Set</string> + <string name="cancel">Annulla</string> + <string name="close">Chiudi</string> + <string name="try_again_button">Riprova</string> + <string name="enable_wifi_button">Accendi Wi-Fi</string> + <string name="go_to_settings_button">Vai alle impostazioni</string> + <string name="enable_demo_mode_button">Attiva modalità demo</string> + <string name="configuration_missing">Non troviamo on server openHAB nella tua rete. Se hai già un server, per favore configura il suo indirizzo IP o il nome host nella configurazione. Se non hai un server, puoi abilitare la modalità demo per vedere cosa può fare openHAB.</string> + <string name="no_remote_server">Connessione al server locale fallita e non hai configurato un server remoto</string> + <string name="resolving_openhab">Individuando l\'istanza openHAB\u2026</string> + <string name="waiting_for_wifi">In attesa del WI-FI per stabilire la connessione\u2026</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Mostra log</string> + <string name="clear_log">Pulisci log</string> + <string name="empty_log">Log è vuoto</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Apertura tapparella</string> + <string name="content_description_stop_roller_shutter">Ferma tapparella</string> + <string name="content_description_close_roller_shutter">Chiusura tapparella</string> + <string name="content_description_open_color_wheel">Apri ruota dei colori</string> + <string name="content_description_color_up">On o ferma l\'aumento luminosita\'</string> + <string name="content_description_color_down">Off o ferma l\'aumento luminosita\'</string> + <string name="content_description_open_number_picker">Apri selezione numero</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Apri openHAB</string> + <string name="content_description_increase_item_value">Aumentare valore</string> + <string name="content_description_decrease_item_value">Diminuire valore</string> + <string name="swipe_to_refresh_description">L\'applicazione si aggiorna automaticamente, normalmente non serve farlo manualmente</string> + <string name="swipe_to_refresh_dismiss">Ricevuto!</string> + <!-- Intro strings --> + <string name="app_intro">Intro</string> + <string name="intro_welcome">Benvenuto in openHAB</string> + <string name="intro_whatis">Una soluzione domotica open source per la tua casa, indipendente da tecnologia e da produttori</string> + <string name="intro_themes">Temi</string> + <string name="intro_themes_description">Scegli tra i diversi temi</string> + <string name="intro_voice_description">Controlla la tua casa con la tua voce</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Il controllo dell\'item può essere associato a un tag NFC premendo a lungo sull\'item</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">SALTA</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">FATTO</string> </resources> diff --git a/mobile/src/main/res/values-iw/strings.xml b/mobile/src/main/res/values-iw/strings.xml index c4156d638f62e84447a221be3c579845a895bfff..407cec979c1a46949c8f1f3868c412ab4d115ba4 100644 --- a/mobile/src/main/res/values-iw/strings.xml +++ b/mobile/src/main/res/values-iw/strings.xml @@ -1,195 +1,251 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">הגדרות</string> - <string name="app_notifications">התראות</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">תצורות מערכת</string> - <string name="mainmenu_openhab_preferences">הגדרות</string> - <string name="mainmenu_openhab_selectsitemap">בחר את ברירת המחדל של תצורת המערכת</string> - <string name="mainmenu_openhab_clearcache">נקה מטמון תמונות</string> - <!-- App settings strings --> - <string name="settings_connection_title">חיבור</string> - <string name="settings_display_title">תצוגה</string> - <string name="settings_misc_title">שונות</string> - <string name="settings_openhab_url">כתובת שרת מקומי</string> - <string name="settings_openhab_url_summary">כתובת לוח השליטה ב openHAB (בהתבסס על שם מחשב מארח או IP). אם הוגדרה, האיתור האוטומטי לא יופעל. הגדרה נוכחית: %s</string> - <string name="settings_openhab_alturl">כתובת שרת מרוחק</string> - <string name="settings_openhab_alturl_summary">כתובת לוח השליטה ב openHAB כאשר הכתובת המקומית אינה זמינה. הגדרה נוכחית: %s</string> - <string name="settings_openhab_username">שם משתמש</string> - <string name="settings_openhab_password">סיסמה</string> - <string name="settings_openhab_password_summary_weak">סיסמא חלשה</string> - <string name="settings_openhab_password_summary_strong">סיסמא חזקה</string> - <string name="settings_openhab_sslclientcert">תעודת לקוח SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">הקש כאן כדי לקבל כמה רמזים והסברים על איך להגדיר אימות תעודת לקוח SSL</string> - <string name="settings_openhab_screentimeroff">ביטול כיבוי מסך אוטומטי</string> - <string name="settings_openhab_screentimeroff_summary">בטל את קוצב הזמן לכיבוי המסך כאשר אפליקצית openHAB פועלת</string> - <string name="settings_openhab_demomode">מצב הדגמה</string> - <string name="settings_openhab_demomode_summary">הפעל במצב הדגמה</string> - <string name="settings_openhab_theme">ערכת עיצוב</string> - <string name="settings_openhab_fullscreen">מסך מלא</string> - <string name="settings_openhab_fullscreen_summary">הצג במסך מלא</string> - <string name="settings_openhab_icon_format">סוג קובץ צלמית</string> - <string name="settings_openhab_icon_format_png">מפת סיביות PNG</string> - <string name="settings_openhab_icon_format_svg">וקטורי SVG</string> - <string name="settings_chart_scaling">שינוי גודל התרשים</string> - <string name="settings_chart_scaling_summary">הערה: בקנה מידה קטן עובי הקווים וגודל הטקסט קטנים כך שיש יותר מקום עבור התרשים אבל יכולת קריאת הטקסט עלולה להפגע.</string> - <string name="settings_chart_scaling_value_xs">קטן מאוד</string> - <string name="settings_chart_scaling_value_s">קטן</string> - <string name="settings_chart_scaling_value_m">ברירת מחדל</string> - <string name="settings_chart_scaling_value_l">גדול</string> - <string name="settings_ringtone">צליל התראה</string> - <string name="settings_ringtone_none">ללא</string> - <string name="settings_clear_default_sitemap">נקה את הגדרת ברירת מחדל של תצורת המערכת</string> - <string name="settings_no_default_sitemap">לא נבחרה תצורת מערכת ברירת מחדל</string> - <string name="settings_current_default_sitemap">ברירת המחדל הנוכחית של תצורת המערכת: %1$s</string> - <string name="settings_openhab_alt_connection">מרוחק</string> - <string name="settings_openhab_connection">מקומי</string> - <string name="settings_notification_vibration">רטט התראה</string> - <string name="settings_notification_vibration_off">כבוי</string> - <string name="settings_notification_vibration_short">קצר</string> - <string name="settings_notification_vibration_long">ארוך</string> - <string name="settings_notification_vibration_twice">כפול</string> - <string name="settings_connection_summary">מחובר ל- %s</string> - <string name="settings_insecure_connection_summary">חיבור לא מאובטח ל- %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">פקודות קוליות של openHAB</string> - <string name="info_voice_input">openHAB, לפקודתך!</string> - <string name="info_voice_recognized_text">הפקודה שזוהתה היא : %1$s</string> - <string name="info_demo_mode_short">פועל במצב הדגמה</string> - <string name="info_conn_url">מתחבר לכתובת מקומית</string> - <string name="info_conn_rem_url">מתחבר לכתובת מרוחקת</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB החזיר רשימה ריקה של תצורות מערכת</string> - <string name="error_network_not_available">הרשת לא זמינה</string> - <string name="error_http_connection_failed">ההתחברות נכשלה. תגובה בלתי צפויה התקבלה בעת ניסיון להתחבר אל שרת openHAB המוגדר (קוד תגובה HTTP שהתקבל: %d).</string> - <string name="error_invalid_url">אנא הזן כתובת שרת חוקית בתבנית \'/http(s)://host(:port)\'</string> - <string name="error_connection_failed">החיבור למחשב המארח נכשל</string> - <string name="error_unable_to_resolve_hostname">אין אפשרות לאתר את שם המחשב המארח</string> - <string name="error_connection_sslhandshake_failed">חיבור SSL נכשל</string> - <string name="error_certificate_not_trusted">תעודת SSL אינה אמינה. בבקשה ייבא את התעודה הראשית או קבל את התעודה במהלך חיבור SSL.</string> - <string name="error_certificate_expired">פג תוקפה של תעודת SSL. נא לייבא תעודה חדשה או קבל את התעודה במהלך חיבור SSL.</string> - <string name="error_certificate_not_valid_yet">תעודת SSL עוד לא בתוקף. יש צורך בקבלת תעודה בתוקף או לקבל את אימות התעודה בזמן תהליך SSL. כמו כן יש לבדוק אם השעון במכשיר מכוון כראוי.</string> - <string name="error_certificate_revoked">תעודת SSL נשללה. נא לייבא תעודה חדשה או קבל את התעודה במהלך חיבור SSL.</string> - <string name="error_certificate_wrong_host">תעודת SSL אינה חוקית עבור %s</string> - <string name="error_http_code_401">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 401).</string> - <string name="error_http_code_403">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 403).</string> - <string name="error_http_code_407">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 407).</string> - <string name="error_http_code_414">שורת הכתובת ארוכה מדי. נא השתמש בכתובת IP או בכתובת קצרה יותר (קוד תגובה HTTP 414).</string> - <string name="error_http_code_426">HTTPS נדרש. יש לשנות את הכתובת (קוד תגובה HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">האימות נכשל. בדוק את תעודת SSL (קוד תגובה HTTP 495).</string> - <string name="error_http_code_496">נדרשת תעודת לקוח SSL (קוד תגובה HTTP 496)</string> - <string name="error_http_code_502">שרת ה-reverse proxy קיבל תשובה שגויה משרת ה-openHAB (קוד תגובה HTTP 502)</string> - <string name="error_http_code_503">שרת openHAB אינו זמין באופן זמני (קוד תגובה HTTP 503)</string> - <string name="error_http_code_504">Gateway Time-out. נראה כי שרת ה-reverse proxy פעיל, אך לא נתקבלה תשובה משרת openHAB (קוד תגובה HTTP 504).</string> - <string name="error_http_code_507">אין מספיק שטח פנוי לשרת openHAB (קוד תגובה HTTP 507)</string> - <string name="error_http_code_511">נדרש אימות רשת (קוד תגובה HTTP 511)</string> - <string name="error_about_no_conn">אירעה שגיאה בעת בקשת מידע משרת openHAB</string> - <string name="error_openhab_offline">שרת openHAB שלך אינו מקוון בזמן שהשרת בענן פעיל</string> - <string name="error_no_app_store_found">לא נמצאה חנות יישומים להתקנת תוכנה לזיהוי דיבור</string> - <string name="title_activity_openhabwritetag">כתיבה לתגית NFC</string> - <string name="title_activity_libraries">ספריות בשימוש</string> - <string name="info_write_tag">הצמד תגית והשאר אותה קרובה עד להופעת הודעת אישור</string> - <string name="info_write_tag_progress">כותב לתגית</string> - <string name="info_write_tag_finished">הכתיבה הסתימה בהצלחה</string> - <string name="info_write_failed">הכתיבה לתגית נכשלה</string> - <string name="info_write_tag_unsupported">התקן זה אינו תומך ב-NFC</string> - <string name="info_write_tag_disabled">NFC אינו זמין. אנא הפעל אותו מתפריט הגדרות המכשיר.</string> - <string name="info_openhab_apiversion_label">גרסת ממשק תכנות יישומי REST של openHAB</string> - <string name="info_openhab_uuid_label">מזהה UUID של openHAB</string> - <string name="info_openhab_secret_label">קוד מזהה של openHAB</string> - <string name="info_openhab_push_notification_label">מצב התראות בדחיפה</string> - <string name="action_settings">הגדרות</string> - <string name="nfc_dialog_title">כתוב על תגית NFC את הפעולה עבור רכיב זה</string> - <string name="info_not_set">לא מוגדר</string> - <!-- Notification list strings --> - <string name="notification_list_empty">לא נשלחו התראות</string> - <string name="notification_list_error">אירעה שגיאה במהלך טעינת התראות</string> - <string name="list_loading_message">טוען...</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">לקבל אישור/תעודה לא מזוהה?</string> - <string name="mtm_trust_anchor">התעודה בשרת אינה חתומה על-ידי רשות אישורים ידועה</string> - <string name="mtm_cert_expired">פג תוקפה של תעודה/אישור השרת</string> - <string name="mtm_accept_servername">האם לקבל את שם השרת הלא תואם?</string> - <string name="mtm_hostname_mismatch">השרת לא יכול להתחבר כ: \"%s\". התעודה תקפה רק עבור:</string> - <string name="mtm_connect_anyway">האם ברצונך להמשיך בהתחברות בכל מקרה?</string> - <string name="mtm_cert_details">פרטי התעודה:</string> - <string name="mtm_decision_always">קבל\י</string> - <string name="mtm_decision_once">חד פעמי</string> - <string name="mtm_decision_abort">בטל</string> - <string name="mtm_notification">אימות תעודה</string> - <string name="settings_openhab_none">ללא/כלום</string> - <!-- Themes --> - <string name="theme_name_light">בהיר</string> - <string name="theme_name_dark">כהה</string> - <string name="theme_name_black">שחור/AMOLED</string> - <string name="theme_name_basic_ui">ממשק משתמש בסיסי</string> - <string name="theme_name_basic_ui_dark">ממשק משתמש בסיסי כהה</string> - <!-- NFC --> - <string name="nfc_action_on">הפעל</string> - <string name="nfc_action_up">העלה</string> - <string name="nfc_action_off">כבה</string> - <string name="nfc_action_down">הורד</string> - <string name="nfc_action_toggle">החלף מצב</string> - <string name="nfc_activate">הפעל</string> - <string name="nfc_action_current_color">צבע נוכחי</string> - <string name="nfc_action_to_sitemap_page">נווט אל הדף הראשי של תצורת המערכת</string> - <!-- Drawer --> - <string name="drawer_open">מגירת תצורת מערכת נפתחה</string> - <string name="drawer_close">מגירת תצורת מערכת נסגרה</string> - <string name="mainmenu_openhab_voice_recognition">זיהוי קולי</string> - <!-- About --> - <string name="about_title">מידע כללי</string> - <string name="about_license_title">רשיון</string> - <string name="about_changelog">רשימת שינויים</string> - <string name="about_source_code">קוד מקור</string> - <string name="about_issues">דווח על בעיה</string> - <string name="about_docs">תיעוד</string> - <string name="about_community_forum">פורום הקהילה</string> - <string name="about_foundation">קרן openHAB</string> - <string name="about_community">קהילת openHAB</string> - <string name="about_server">שרת openHAB</string> - <string name="about_translation">עזור לנו לתרגם את openHAB</string> - <string name="about_privacy_policy">מדיניות פרטיות</string> - <string name="settings_debug_messages_title">הצג מידע לפתרון בעיות</string> - <string name="error_couldnt_determine_openhab_url">לא מצליח לאתר את הכתובת של openHAB</string> - <string name="unknown">לא ידוע</string> - <string name="error_network_type_unsupported">אין תמיכה בסוג הרשת (%s)</string> - <string name="set">קבע</string> - <string name="cancel">ביטול</string> - <string name="close">סגור</string> - <string name="try_again_button">נסה שוב</string> - <string name="go_to_settings_button">עבור להגדרות</string> - <string name="configuration_missing">השרת של openHAB לא ניתן לגילוי באופן אוטומטי. נא להגדיר את כתובת ה IP של השרת או את שמו בתפריט הגדרות שרת.</string> - <string name="no_remote_server">הרשת המקומית אינה זמינה ולא הוגדר שרת מרוחק</string> - <string name="resolving_openhab">מנסה לאתר שרת openHAB</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">פתח תריס גלילה</string> - <string name="content_description_stop_roller_shutter">עצור תריס גלילה</string> - <string name="content_description_close_roller_shutter">סגור תריס גלילה</string> - <string name="content_description_open_color_wheel">פתח גלגל צבעים</string> - <string name="content_description_color_up">הדלק או החזק כדי להגדיל את הבהירות</string> - <string name="content_description_color_down">כבה או החזק כדי להפחית את הבהירות</string> - <string name="content_description_open_number_picker">פתח לבחירת ערך</string> - <string name="content_description_video">סרטון</string> - <string name="content_description_open_openhab">פתח openHAB</string> - <string name="swipe_to_refresh_description">היישום מרענן באופן אוטומטי, בדרך כלל אין צורך לבצע זאת ידנית</string> - <string name="swipe_to_refresh_dismiss">הבנתי!</string> - <!-- Intro strings --> - <string name="app_intro">הקדמה</string> - <string name="intro_welcome">ברוכים הבאים ל openHAB</string> - <string name="intro_whatis">תוכנת קוד פתוח, בלתי תלויה בייצרנים וטכנולוגיות, לאוטומציה שליטה ובקרה לבית שלך</string> - <string name="intro_themes">ערכות עיצוב</string> - <string name="intro_themes_description">בחר בין מספר ערכות עיצוב</string> - <string name="intro_voice_description">שלוט בביתך בעזרת הקול שלך</string> - <string name="intro_nfc">NFC תקשורת לטווח קצר</string> - <string name="intro_nfc_description">השליטה בפריט יכולה להיות משוייכת לתגית NFC באמצעות לחיצה ממושכת על הפריט</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">דלג</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">סיים</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">הגדרות</string> + <string name="app_notifications">התראות</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">תצורות מערכת</string> + <string name="mainmenu_openhab_preferences">הגדרות</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">אירעה שגיאה בעת טעינת HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">בחר את ברירת המחדל של תצורת המערכת</string> + <string name="mainmenu_openhab_clearcache">נקה מטמון תמונות</string> + <!-- App settings strings --> + <string name="settings_connection_title">חיבור</string> + <string name="settings_display_title">תצוגה</string> + <string name="settings_misc_title">שונות</string> + <string name="settings_openhab_url">כתובת שרת מקומי</string> + <string name="settings_openhab_url_summary">כתובת לוח השליטה ב openHAB (בהתבסס על שם מחשב מארח או IP). אם הוגדרה, האיתור האוטומטי לא יופעל. הגדרה נוכחית: %s</string> + <string name="settings_openhab_alturl">כתובת שרת מרוחק</string> + <string name="settings_openhab_alturl_summary">כתובת לוח השליטה ב openHAB כאשר הכתובת המקומית אינה זמינה. הגדרה נוכחית: %s</string> + <string name="settings_openhab_username">שם משתמש</string> + <string name="settings_openhab_password">סיסמה</string> + <string name="settings_openhab_password_summary_weak">סיסמא חלשה</string> + <string name="settings_openhab_password_summary_strong">סיסמא חזקה</string> + <string name="settings_openhab_sslclientcert">תעודת לקוח SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">הקש כאן כדי לקבל כמה רמזים והסברים על איך להגדיר אימות תעודת לקוח SSL</string> + <string name="settings_openhab_screentimeroff">ביטול כיבוי מסך אוטומטי</string> + <string name="settings_openhab_screentimeroff_summary">בטל את קוצב הזמן לכיבוי המסך כאשר אפליקצית openHAB פועלת</string> + <string name="settings_openhab_demomode">מצב הדגמה</string> + <string name="settings_openhab_demomode_summary">אם אין לך שרת openHAB, הפעל במצב הדגמה כדי לראות את היכולות של openHAB.</string> + <string name="settings_openhab_theme">ערכת עיצוב</string> + <string name="settings_openhab_fullscreen">מסך מלא</string> + <string name="settings_openhab_fullscreen_summary">הצג במסך מלא</string> + <string name="settings_openhab_icon_format">סוג קובץ צלמית</string> + <string name="settings_openhab_icon_format_png">מפת סיביות PNG</string> + <string name="settings_openhab_icon_format_svg">וקטורי SVG</string> + <string name="settings_chart_scaling">שינוי גודל התרשים</string> + <string name="settings_chart_scaling_summary">הערה: בקנה מידה קטן עובי הקווים וגודל הטקסט קטנים כך שיש יותר מקום עבור התרשים אבל יכולת קריאת הטקסט עלולה להפגע.</string> + <string name="settings_chart_scaling_value_xs">קטן מאוד</string> + <string name="settings_chart_scaling_value_s">קטן</string> + <string name="settings_chart_scaling_value_m">ברירת מחדל</string> + <string name="settings_chart_scaling_value_l">גדול</string> + <string name="settings_openhab_chart_hq">תרשימים ברמת הפרדה גבוהה</string> + <string name="settings_openhab_chart_hq_summary">יצירת תרשימים יכולה להעמיס על השרת. אם זמן טעינת התרשים איטי והשרת שלך לא חזק, ביטול אפשרות זו משפר את זמני הטעינה.</string> + <string name="settings_ringtone">צליל התראה</string> + <string name="settings_ringtone_none">ללא</string> + <string name="settings_clear_default_sitemap">נקה את הגדרת ברירת מחדל של תצורת המערכת</string> + <string name="settings_no_default_sitemap">לא נבחרה תצורת מערכת ברירת מחדל</string> + <string name="settings_current_default_sitemap">ברירת המחדל הנוכחית של תצורת המערכת: %1$s</string> + <string name="settings_openhab_alt_connection">מרוחק</string> + <string name="settings_openhab_connection">מקומי</string> + <string name="settings_notification_vibration">רטט התראה</string> + <string name="settings_notification_vibration_off">כבוי</string> + <string name="settings_notification_vibration_short">קצר</string> + <string name="settings_notification_vibration_long">ארוך</string> + <string name="settings_notification_vibration_twice">כפול</string> + <string name="settings_notification_ringtone_vibration">הגדרות התראה</string> + <string name="settings_connection_summary">מחובר ל- %s</string> + <string name="settings_insecure_connection_summary">חיבור לא מאובטח ל- %s</string> + <string name="beta">בטא</string> + <!-- App messages strings --> + <string name="title_voice_widget">פקודות קוליות</string> + <string name="title_voice_widget_icon">פקודות קוליות וקיצורי דרך ליישום</string> + <string name="info_voice_input">openHAB, לפקודתך!</string> + <string name="info_voice_recognized_text">הפקודה שזוהתה היא : %1$s</string> + <string name="info_demo_mode_short">פועל במצב הדגמה</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">כיבוי</string> + <string name="info_conn_url">מתחבר לכתובת מקומית</string> + <string name="info_conn_rem_url">מתחבר לכתובת מרוחקת</string> + <string name="app_shortcut_diabled_habpanel">HABPanel אינו מותקן בשרת</string> + <string name="app_shortcut_diabled_notifications">השרת המרוחק אינו זמין</string> + <string name="app_shortcut_diabled_voice_recognition">היישום דיבור-לטקסט אינו מותקן במכשיר שלך</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB החזיר רשימה ריקה של תצורות מערכת</string> + <string name="error_sitemap_generic_load_error">לא ניתן לטעון את מפת האתר. השגיאה הבאה אירעה: %1$s</string> + <string name="error_network_not_available">הרשת לא זמינה</string> + <string name="error_wifi_not_available">אינטרנט אלחוטי כבוי</string> + <string name="error_http_connection_failed">ההתחברות נכשלה. תגובה בלתי צפויה התקבלה בעת ניסיון להתחבר אל שרת openHAB המוגדר (קוד תגובה HTTP שהתקבל: %d).</string> + <string name="error_invalid_url">אנא הזן כתובת שרת חוקית בתבנית \'/http(s)://host(:port)\'</string> + <string name="error_port_seems_invalid">הפִּתְחָה שהוזנה לא תקינה עבור הפרוטוקול הנבחר</string> + <string name="error_connection_failed">החיבור למחשב המארח נכשל</string> + <string name="error_unable_to_resolve_hostname">אין אפשרות לאתר את שם המחשב המארח</string> + <string name="error_connection_sslhandshake_failed">חיבור SSL נכשל</string> + <string name="error_certificate_not_trusted">תעודת SSL אינה אמינה. בבקשה ייבא את התעודה הראשית או קבל את התעודה במהלך חיבור SSL.</string> + <string name="error_certificate_expired">פג תוקפה של תעודת SSL. נא לייבא תעודה חדשה או קבל את התעודה במהלך חיבור SSL.</string> + <string name="error_certificate_not_valid_yet">תעודת SSL עוד לא בתוקף. יש צורך בקבלת תעודה בתוקף או לקבל את אימות התעודה בזמן תהליך SSL. כמו כן יש לבדוק אם השעון במכשיר מכוון כראוי.</string> + <string name="error_certificate_invalid_date">תאריך לא חוקי באישור ה-SSL. נא להגדיר אישור נכון ולבדוק שהשעון במכשיר שלך מוגדר כראוי.</string> + <string name="error_certificate_revoked">תעודת SSL נשללה. נא לייבא תעודה חדשה או קבל את התעודה במהלך חיבור SSL.</string> + <string name="error_certificate_wrong_host">תעודת SSL אינה חוקית עבור %s</string> + <string name="error_http_to_https_port">החיבור הסתיים באופן בלתי-צפוי. האם אתה מנסה להתחבר לפִּתְחָה HTTPS דרך HTTP?</string> + <string name="webview_ssl">כרגע יישום זה אינו תומך בחתימת SSL עצמית עבור יישומוני Web</string> + <string name="error_http_code_401">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 401).</string> + <string name="error_http_code_403">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 403).</string> + <string name="error_http_code_407">האימות נכשל. נא בדוק את שם המשתמש והסיסמה שהוגדרו בהתאמה עם תעודת ה-SSL (קוד תגובה HTTP 407).</string> + <string name="error_http_code_414">שורת הכתובת ארוכה מדי. נא השתמש בכתובת IP או בכתובת קצרה יותר (קוד תגובה HTTP 414).</string> + <string name="error_http_code_426">HTTPS נדרש. יש לשנות את הכתובת (קוד תגובה HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">האימות נכשל. בדוק את תעודת SSL (קוד תגובה HTTP 495).</string> + <string name="error_http_code_496">נדרשת תעודת לקוח SSL (קוד תגובה HTTP 496)</string> + <string name="error_http_code_502">שרת ה-reverse proxy קיבל תשובה שגויה משרת ה-openHAB (קוד תגובה HTTP 502)</string> + <string name="error_http_code_503">שרת openHAB אינו זמין באופן זמני (קוד תגובה HTTP 503)</string> + <string name="error_http_code_504">Gateway Time-out. נראה כי שרת ה-reverse proxy פעיל, אך לא נתקבלה תשובה משרת openHAB (קוד תגובה HTTP 504).</string> + <string name="error_http_code_507">אין מספיק שטח פנוי לשרת openHAB (קוד תגובה HTTP 507)</string> + <string name="error_http_code_511">נדרש אימות רשת (קוד תגובה HTTP 511)</string> + <string name="error_about_no_conn">אירעה שגיאה בעת בקשת מידע משרת openHAB</string> + <string name="error_openhab_offline">שרת openHAB שלך אינו מקוון בזמן שהשרת בענן פעיל</string> + <string name="error_no_browser_found">לא נמצא דפדפן במכשיר שלך</string> + <string name="error_no_speech_to_text_app_found">לא נמצא יישום לזיהוי קול</string> + <string name="install">התקנה</string> + <string name="title_activity_openhabwritetag">כתיבה לתגית NFC</string> + <string name="title_activity_libraries">ספריות בשימוש</string> + <string name="info_write_tag">הצמד תגית והשאר אותה קרובה עד להופעת הודעת אישור</string> + <string name="info_write_tag_progress">כותב לתגית</string> + <string name="info_write_tag_finished">הכתיבה הסתימה בהצלחה</string> + <string name="info_write_failed">הכתיבה לתגית נכשלה</string> + <string name="info_write_tag_unsupported">התקן זה אינו תומך ב-NFC</string> + <string name="info_write_tag_disabled">NFC אינו זמין. אנא הפעל אותו מתפריט הגדרות המכשיר.</string> + <string name="info_openhab_apiversion_label">גרסת ממשק תכנות יישומי REST של openHAB</string> + <string name="info_openhab_uuid_label">מזהה UUID של openHAB</string> + <string name="info_openhab_secret_label">קוד מזהה של openHAB</string> + <string name="info_openhab_push_notification_label">מצב התראות בדחיפה</string> + <string name="action_settings">הגדרות</string> + <string name="nfc_dialog_title">כתוב על תגית NFC את הפעולה עבור רכיב זה</string> + <string name="info_not_set">לא מוגדר</string> + <string name="empty_page">דף זה אינו מכיל יישומונים המוגדרים כגלויים</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">שלח מידע על ההתקן לשרת</string> + <string name="send_device_info_item_prefix">קידומת שם פריט</string> + <string name="send_device_info_item_prefix_summary">לשמות הפריטים עם התכונות הבאות יש קידומת זו</string> + <string name="settings_alarm_clock">שלח את השעון המעורר ל- openHAB</string> + <string name="settings_alarm_clock_summary_on">שולח את שעת השעון המעורר לפריט \'%1$s \'</string> + <string name="settings_alarm_clock_summary_off">לא לשלוח את שעת השעון המעורר אל השרת</string> + <string name="settings_alarm_clock_howto_summary">הקש כאן כדי לקבל עצות על איך להגדיר תכונה זו בצד השרת</string> + <string name="settings_item_pref_item_name">שם הפריט</string> + <string name="waiting_for_item_upload">ממתין לחיבור רשת לעדכון הפריטים</string> + <string name="item_upload_in_progress">הפריטים מתעדכנים כעת</string> + <string name="notification_channel_background">רקע</string> + <string name="notification_channel_background_description">משמש להצגת המשימות הממתינות ברקע</string> + <string name="notification_channel_background_error">שגיאה במשימות ברקע</string> + <string name="notification_channel_background_error_description">משמש כדי להודיע על שגיאות במשימות שברקע</string> + <plurals name="item_update_error_title"> + <item quantity="one">לפריט d% לא היתה אפשרות להתעדכן</item> + <item quantity="two">ל d% פריטים לא היתה אפשרות להתעדכן</item> + <item quantity="many">ל d% פריטים לא היתה אפשרות להתעדכן</item> + <item quantity="other">ל d% פריטים לא היתה אפשרות להתעדכן</item> + </plurals> + <string name="item_update_http_error">עדכון הפריט \'%1$s\' נכשל (שגיאת HTTP %2$d)</string> + <string name="item_update_connection_error">עדכון הפריט \'%1$s\' נכשל (אין חיבור)</string> + <string name="error_sending_alarm_clock_item_empty">אנא הכנס שם פריט תקף</string> + <string name="retry">נסה שנית</string> + <!-- Notification list strings --> + <string name="notification_list_empty">לא נשלחו התראות</string> + <string name="notification_list_error">אירעה שגיאה במהלך טעינת התראות</string> + <string name="list_loading_message">טוען...</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">לקבל אישור/תעודה לא מזוהה?</string> + <string name="mtm_trust_anchor">התעודה בשרת אינה חתומה על-ידי רשות אישורים ידועה</string> + <string name="mtm_cert_expired">פג תוקפה של תעודה/אישור השרת</string> + <string name="mtm_accept_servername">האם לקבל את שם השרת הלא תואם?</string> + <string name="mtm_hostname_mismatch">השרת לא יכול להתחבר כ: \"%s\". התעודה תקפה רק עבור:</string> + <string name="mtm_connect_anyway">האם ברצונך להמשיך בהתחברות בכל מקרה?</string> + <string name="mtm_cert_details">פרטי התעודה:</string> + <string name="mtm_decision_always">קבל\י</string> + <string name="mtm_decision_once">חד פעמי</string> + <string name="mtm_decision_abort">בטל</string> + <string name="mtm_notification">אימות תעודה</string> + <string name="settings_openhab_none">ללא/כלום</string> + <!-- Themes --> + <string name="theme_name_light">בהיר</string> + <string name="theme_name_dark">כהה</string> + <string name="theme_name_black">שחור/AMOLED</string> + <string name="theme_name_basic_ui">ממשק משתמש בסיסי</string> + <string name="theme_name_basic_ui_dark">ממשק משתמש בסיסי כהה</string> + <!-- NFC --> + <string name="nfc_action_on">הפעל</string> + <string name="nfc_action_up">העלה</string> + <string name="nfc_action_off">כבה</string> + <string name="nfc_action_down">הורד</string> + <string name="nfc_action_toggle">החלף מצב</string> + <string name="nfc_activate">הפעל</string> + <string name="nfc_action_current_color">צבע נוכחי</string> + <string name="nfc_action_to_sitemap_page">נווט אל הדף הראשי של תצורת המערכת</string> + <!-- Drawer --> + <string name="drawer_open">מגירת תצורת מערכת נפתחה</string> + <string name="drawer_close">מגירת תצורת מערכת נסגרה</string> + <string name="mainmenu_openhab_voice_recognition">זיהוי קולי</string> + <!-- About --> + <string name="about_title">מידע כללי</string> + <string name="about_license_title">רשיון</string> + <string name="about_changelog">רשימת שינויים</string> + <string name="about_source_code">קוד מקור</string> + <string name="about_issues">דווח על בעיה</string> + <string name="about_docs">תיעוד</string> + <string name="about_community_forum">פורום הקהילה</string> + <string name="about_foundation">קרן openHAB</string> + <string name="about_community">קהילת openHAB</string> + <string name="about_server">שרת openHAB</string> + <string name="about_translation">עזור לנו לתרגם את openHAB</string> + <string name="about_privacy_policy">מדיניות פרטיות</string> + <string name="settings_debug_messages_title">הצג מידע לפתרון בעיות</string> + <string name="error_couldnt_determine_openhab_url">לא מצליח לאתר את הכתובת של openHAB</string> + <string name="unknown">לא ידוע</string> + <string name="error_network_type_unsupported">אין תמיכה בסוג הרשת (%s)</string> + <string name="set">קבע</string> + <string name="cancel">ביטול</string> + <string name="close">סגור</string> + <string name="try_again_button">נסה שוב</string> + <string name="enable_wifi_button">הפעל אינטרנט אלחוטי</string> + <string name="go_to_settings_button">עבור להגדרות</string> + <string name="enable_demo_mode_button">הפעל במצב הדגמה</string> + <string name="configuration_missing">לא נמצא שרת openHAB ברשת שלך. אם יש לך שרת, יש להגדיר את שמו או את כתובת ה-IP שלו בהגדרות שרת. אם עדיין אין לך שרת, באפשרותך לאפשר את מצב ההדגמה ולראות את יכולות openHAB.</string> + <string name="no_remote_server">החיבור אל השרת המקומי נכשל ולא הוגדר שרת מרוחק</string> + <string name="resolving_openhab">מנסה לאתר שרת openHAB</string> + <string name="waiting_for_wifi">ממתין להתחברות האינטרנט האלחוטי \u2026</string> + <!-- Log --> + <string name="log">יומן רישום</string> + <string name="view_log">הצג יומן רישום</string> + <string name="clear_log">מחיקת יומן הרישום</string> + <string name="empty_log">יומן הרישום ריק</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">פתח תריס גלילה</string> + <string name="content_description_stop_roller_shutter">עצור תריס גלילה</string> + <string name="content_description_close_roller_shutter">סגור תריס גלילה</string> + <string name="content_description_open_color_wheel">פתח גלגל צבעים</string> + <string name="content_description_color_up">הדלק או החזק כדי להגדיל את הבהירות</string> + <string name="content_description_color_down">כבה או החזק כדי להפחית את הבהירות</string> + <string name="content_description_open_number_picker">פתח לבחירת ערך</string> + <string name="content_description_video">סרטון</string> + <string name="content_description_open_openhab">פתח openHAB</string> + <string name="content_description_increase_item_value">הגדלת ערך הפריט</string> + <string name="content_description_decrease_item_value">הקטנת ערך הפריט</string> + <string name="swipe_to_refresh_description">היישום מרענן באופן אוטומטי, בדרך כלל אין צורך לבצע זאת ידנית</string> + <string name="swipe_to_refresh_dismiss">הבנתי!</string> + <!-- Intro strings --> + <string name="app_intro">הקדמה</string> + <string name="intro_welcome">ברוכים הבאים ל openHAB</string> + <string name="intro_whatis">תוכנת קוד פתוח, בלתי תלויה בייצרנים וטכנולוגיות, לאוטומציה שליטה ובקרה לבית שלך</string> + <string name="intro_themes">ערכות עיצוב</string> + <string name="intro_themes_description">בחר בין מספר ערכות עיצוב</string> + <string name="intro_voice_description">שלוט בביתך בעזרת הקול שלך</string> + <string name="intro_nfc">NFC תקשורת לטווח קצר</string> + <string name="intro_nfc_description">השליטה בפריט יכולה להיות משוייכת לתגית NFC באמצעות לחיצה ממושכת על הפריט</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">דלג</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">סיים</string> </resources> diff --git a/mobile/src/main/res/values-ja/strings.xml b/mobile/src/main/res/values-ja/strings.xml index fea09ead27870c96fc5053b88e43245312b0c964..146d01e1ec4057d11d08f5dc3bce163aa6a8a5fa 100644 --- a/mobile/src/main/res/values-ja/strings.xml +++ b/mobile/src/main/res/values-ja/strings.xml @@ -1,146 +1,201 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">設定</string> - <string name="app_notifications">通知</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">サイトマップ</string> - <string name="mainmenu_openhab_preferences">設定</string> - <string name="mainmenu_openhab_clearcache">画像キャッシュをクリア</string> - <!-- App settings strings --> - <string name="settings_connection_title">接続設定</string> - <string name="settings_display_title">表示設定</string> - <string name="settings_misc_title">その他の設定</string> - <string name="settings_openhab_url">ローカルサーバー URL</string> - <string name="settings_openhab_url_summary">(ホスト名または IP アドレスに基づく) openHAB ダッシュ ボードの URL です。設定した場合、自動検出は無効になります。現在の設定: %s</string> - <string name="settings_openhab_alturl">リモートサーバー URL</string> - <string name="settings_openhab_alturl_summary">ローカルアドレスが利用できない場合に使用する openHAB ダッシュ ボードの URL です。現在の設定: %s</string> - <string name="settings_openhab_username">ユーザー名</string> - <string name="settings_openhab_password">パスワード</string> - <string name="settings_openhab_sslclientcert">SSL クライアント証明書</string> - <string name="settings_openhab_sslclientcert_howto_summary">ここをタップすると SSL クライアント証明書認証を設定する方法について、いくつかのヒントや説明を得ることができます</string> - <string name="settings_openhab_screentimeroff">ディスプレイタイマーを無効にする</string> - <string name="settings_openhab_screentimeroff_summary">openHAB が実行中のとき、ディスプレイがオフにならないようにします</string> - <string name="settings_openhab_demomode">デモモード</string> - <string name="settings_openhab_demomode_summary">デモモードで openHAB を実行します</string> - <string name="settings_openhab_theme">テーマ</string> - <string name="settings_openhab_fullscreen">フルスクリーン</string> - <string name="settings_openhab_fullscreen_summary">全画面モードで表示します</string> - <string name="settings_openhab_icon_format">アイコン形式</string> - <string name="settings_openhab_icon_format_png">ビットマップ</string> - <string name="settings_openhab_icon_format_svg">ベクター</string> - <string name="settings_chart_scaling">グラフのスケール</string> - <string name="settings_chart_scaling_summary">注: スケールを小さくすると、フォントと線の幅が縮小されてグラフのスペースが多くなりますが、フォントが読みにくくなることがあります。</string> - <string name="settings_chart_scaling_value_xs">極小</string> - <string name="settings_chart_scaling_value_s">小</string> - <string name="settings_chart_scaling_value_m">デフォルト</string> - <string name="settings_chart_scaling_value_l">大</string> - <string name="settings_ringtone">通知の着信音</string> - <string name="settings_openhab_alt_connection">リモートサーバーの設定</string> - <string name="settings_openhab_connection">ローカルサーバーの設定</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB 音声コマンド</string> - <string name="info_voice_input">openHAB, お話ください!</string> - <string name="info_voice_recognized_text">認識したコマンド: %1$s</string> - <string name="info_demo_mode_short">デモ モードで実行しています</string> - <string name="info_conn_url">設定した URL に接続しています</string> - <string name="info_conn_rem_url">リモート URL に接続しています</string> - <!-- Error messages --> - <string name="error_network_not_available">ネットワークが利用できません</string> - <string name="error_invalid_url">\'http(s)://host(:port)/\' の形式で、正しい URL を入力してください</string> - <string name="error_connection_failed">ホストへの接続に失敗しました</string> - <string name="error_unable_to_resolve_hostname">ホスト名を解決できません</string> - <string name="error_connection_sslhandshake_failed">SSL ハンドシェイクに失敗しました - 有効なクライアント証明書が必要かもしれません</string> - <string name="error_certificate_wrong_host">%s の SSL 証明書が無効です</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">SSL クライアント証明書が必要 (HTTP 応答コード 496)</string> - <string name="error_http_code_502">リバースプロキシが openHAB から無効な応答を受け取りました (HTTP 応答コード 502)</string> - <string name="error_http_code_503">openHAB は一時的に利用できません (HTTP 応答コード 503)</string> - <string name="error_http_code_507">openHAB に十分な空き容量がありません (HTTP 応答コード 507)</string> - <string name="error_http_code_511">ネットワーク認証が必要 (HTTP 応答コード 511)</string> - <string name="error_about_no_conn">openHAB サーバー情報の取得時にエラーが発生しました</string> - <string name="title_activity_openhabwritetag">NFC タグを書き込み</string> - <string name="info_write_tag">タグをタッチして、確認メッセージが表示されるまで近づけたままにしてください</string> - <string name="info_write_tag_progress">タグを書き込んでいます</string> - <string name="info_write_tag_finished">正常に完了しました</string> - <string name="info_write_failed">タグの書き込みエラー</string> - <string name="info_write_tag_unsupported">このデバイスは NFC サポートがありません :-(</string> - <string name="info_write_tag_disabled">NFC が無効です。 デバイスの設定メニューで有効にしてください。</string> - <string name="info_openhab_apiversion_label">openHAB Rest API バージョン</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB シークレット</string> - <string name="info_openhab_push_notification_label">プッシュ通知ステータス</string> - <string name="action_settings">設定</string> - <string name="nfc_dialog_title">この要素の NFC タグアクションを作成</string> - <string name="info_not_set">未設定</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">一度だけ</string> - <string name="mtm_decision_abort">中断</string> - <string name="mtm_notification">証明書の検証</string> - <string name="settings_openhab_none">なし</string> - <!-- Themes --> - <string name="theme_name_light">ライト</string> - <string name="theme_name_dark">ダーク</string> - <string name="theme_name_black">ブラック/AMOLED</string> - <string name="theme_name_basic_ui">基本 UI</string> - <string name="theme_name_basic_ui_dark">基本 UI ダーク</string> - <!-- NFC --> - <string name="nfc_action_on">オン</string> - <string name="nfc_action_up">上</string> - <string name="nfc_action_off">オフ</string> - <string name="nfc_action_down">下</string> - <string name="nfc_action_toggle">切り替え</string> - <string name="nfc_activate">アクティベート</string> - <string name="nfc_action_current_color">現在の色</string> - <!-- Drawer --> - <string name="drawer_open">サイトマップドロワーを開きました</string> - <string name="drawer_close">サイトマップドロワーを閉じました</string> - <string name="mainmenu_openhab_voice_recognition">音声認識</string> - <!-- About --> - <string name="about_title">アプリついて</string> - <string name="about_license_title">ライセンス</string> - <string name="about_changelog">変更履歴</string> - <string name="about_source_code">ソースコード</string> - <string name="about_issues">問題を報告する</string> - <string name="about_docs">ドキュメント</string> - <string name="about_community_forum">コミュニティフォーラム</string> - <string name="about_foundation">openHAB 財団</string> - <string name="about_community">openHAB コミュニティ</string> - <string name="about_server">openHAB サーバー</string> - <string name="about_translation">openHAB の翻訳にご協力ください</string> - <string name="about_privacy_policy">プライバシーポリシー</string> - <string name="error_couldnt_determine_openhab_url">openHAB URL を特定できませんでした</string> - <string name="unknown">不明</string> - <string name="error_network_type_unsupported">ネットワークの形式 (%s) はサポートされていません</string> - <string name="set">設定</string> - <string name="cancel">キャンセル</string> - <string name="close">閉じる</string> - <string name="try_again_button">もう一度やり直す</string> - <string name="go_to_settings_button">設定に移動</string> - <string name="resolving_openhab">openHAB サーバーインスタンスの探索中\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">ロール シャッターを開く</string> - <string name="content_description_stop_roller_shutter">ロール シャッターを停止</string> - <string name="content_description_close_roller_shutter">ロール シャッターを閉じる</string> - <string name="content_description_open_color_wheel">カラー ホイールを開く</string> - <string name="content_description_color_up">オンまたは長押しは明るくします</string> - <string name="content_description_color_down">オフまたは長押しは暗くします</string> - <string name="content_description_open_number_picker">数字選択を開く</string> - <string name="content_description_video">ビデオ</string> - <string name="content_description_open_openhab">openHAB を開く</string> - <string name="swipe_to_refresh_dismiss">了解!</string> - <!-- Intro strings --> - <string name="app_intro">はじめに</string> - <string name="intro_welcome">openHAB へようこそ</string> - <string name="intro_whatis">ホーム用、ベンダーや技術に依存しないオープンソースのオートメーションソフトウェア</string> - <string name="intro_themes">テーマ</string> - <string name="intro_themes_description">いくつかのテーマから選択してください</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">スキップ</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">完了</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">設定</string> + <string name="app_notifications">通知</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">サイトマップ</string> + <string name="mainmenu_openhab_preferences">設定</string> + <string name="mainmenu_openhab_selectsitemap">デフォルトのサイトマップを選択</string> + <string name="mainmenu_openhab_clearcache">画像キャッシュをクリア</string> + <!-- App settings strings --> + <string name="settings_connection_title">接続設定</string> + <string name="settings_display_title">表示設定</string> + <string name="settings_misc_title">その他の設定</string> + <string name="settings_openhab_url">ローカルサーバー URL</string> + <string name="settings_openhab_url_summary">(ホスト名または IP アドレスに基づく) openHAB ダッシュ ボードの URL です。設定した場合、自動検出は無効になります。現在の設定: %s</string> + <string name="settings_openhab_alturl">リモートサーバー URL</string> + <string name="settings_openhab_alturl_summary">ローカルアドレスが利用できない場合に使用する openHAB ダッシュ ボードの URL です。現在の設定: %s</string> + <string name="settings_openhab_username">ユーザー名</string> + <string name="settings_openhab_password">パスワード</string> + <string name="settings_openhab_password_summary_weak">脆弱なパスワードです</string> + <string name="settings_openhab_password_summary_strong">強力なパスワードです</string> + <string name="settings_openhab_sslclientcert">SSL クライアント証明書</string> + <string name="settings_openhab_sslclientcert_howto_summary">ここをタップすると SSL クライアント証明書認証を設定する方法について、いくつかのヒントや説明を得ることができます</string> + <string name="settings_openhab_screentimeroff">ディスプレイタイマーを無効にする</string> + <string name="settings_openhab_screentimeroff_summary">openHAB が実行中のとき、ディスプレイがオフにならないようにします</string> + <string name="settings_openhab_demomode">デモモード</string> + <string name="settings_openhab_demomode_summary">openHAB サーバーをお持ちでない場合は、デモモードを有効にすると、openHAB どのようなことができるか想像できます。</string> + <string name="settings_openhab_theme">テーマ</string> + <string name="settings_openhab_fullscreen">フルスクリーン</string> + <string name="settings_openhab_fullscreen_summary">全画面モードで表示します</string> + <string name="settings_openhab_icon_format">アイコン形式</string> + <string name="settings_openhab_icon_format_png">ビットマップ</string> + <string name="settings_openhab_icon_format_svg">ベクター</string> + <string name="settings_chart_scaling">グラフのスケール</string> + <string name="settings_chart_scaling_summary">注: スケールを小さくすると、フォントと線の幅が縮小されてグラフのスペースが多くなりますが、フォントが読みにくくなることがあります。</string> + <string name="settings_chart_scaling_value_xs">極小</string> + <string name="settings_chart_scaling_value_s">小</string> + <string name="settings_chart_scaling_value_m">デフォルト</string> + <string name="settings_chart_scaling_value_l">大</string> + <string name="settings_openhab_chart_hq">高解像度グラフ</string> + <string name="settings_openhab_chart_hq_summary">グラフの生成をサーバーに負担させることができます。グラフの読み込みに時間がかかって、お使いのサーバーが強力ではない場合は、このオプションを無効にすると読み込み時間が改善します。</string> + <string name="settings_ringtone">通知の着信音</string> + <string name="settings_ringtone_none">なし</string> + <string name="settings_clear_default_sitemap">デフォルトのサイトマップをクリア</string> + <string name="settings_no_default_sitemap">デフォルトのサイトマップが選択されていません</string> + <string name="settings_current_default_sitemap">現在のデフォルトサイトマップ: %1$s</string> + <string name="settings_openhab_alt_connection">リモートサーバーの設定</string> + <string name="settings_openhab_connection">ローカルサーバーの設定</string> + <string name="settings_notification_vibration">通知の振動</string> + <string name="settings_notification_vibration_off">オフ</string> + <string name="settings_notification_vibration_short">短め</string> + <string name="settings_notification_vibration_long">長め</string> + <string name="settings_notification_vibration_twice">2 回</string> + <string name="settings_connection_summary">%s に接続しました</string> + <string name="settings_insecure_connection_summary">%s に安全ではない接続をしました</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, お話ください!</string> + <string name="info_voice_recognized_text">認識したコマンド: %1$s</string> + <string name="info_demo_mode_short">デモ モードで実行しています</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">設定した URL に接続しています</string> + <string name="info_conn_rem_url">リモート URL に接続しています</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB は空のサイトマップリストを返しました</string> + <string name="error_network_not_available">ネットワークが利用できません</string> + <string name="error_http_connection_failed">接続が失敗しました。設定された openHAB サーバーに接続しようとしたときに予期しない応答を受け取りました (受信した HTTP 応答コード: %d)。</string> + <string name="error_invalid_url">\'http(s)://host(:port)/\' の形式で、正しい URL を入力してください</string> + <string name="error_connection_failed">ホストへの接続に失敗しました</string> + <string name="error_unable_to_resolve_hostname">ホスト名を解決できません</string> + <string name="error_connection_sslhandshake_failed">SSL ハンドシェイクに失敗しました - 有効なクライアント証明書が必要かもしれません</string> + <string name="error_certificate_not_trusted">SSL 証明書が信頼されていません。ルート証明書をインポートするか、SSL ハンドシェイク中に証明書を確認してください。</string> + <string name="error_certificate_expired">SSL 証明書が有効期限切れです。新しい証明書を取得するか、SSL ハンドシェイク中に証明書を確認してください。</string> + <string name="error_certificate_not_valid_yet">SSL 証明書はまだ有効ではありません。正しい証明書を取得するか、SSL ハンドシェイク中に証明書を確認してください。また、お使いの携帯電話の時計が正しく設定されているかを確認してください。</string> + <string name="error_certificate_revoked">SSL 証明書が失効しています。新しい証明書を取得するか、SSL ハンドシェイク中に証明書を確認してください。</string> + <string name="error_certificate_wrong_host">%s の SSL 証明書が無効です</string> + <string name="error_http_code_401">認証に失敗しました。提供された SSL クライアント証明書と、ユーザー名、パスワードを確認してください (HTTP 応答コード 401).</string> + <string name="error_http_code_403">認証に失敗しました。提供された SSL クライアント証明書と、ユーザー名、パスワードを確認してください (HTTP 応答コード 403).</string> + <string name="error_http_code_407">認証に失敗しました。提供された SSL クライアント証明書と、ユーザー名、パスワードを確認してください (HTTP 応答コード 407).</string> + <string name="error_http_code_414">URL が長すぎます。IP アドレスまたは短縮 URL を使用してください (HTTP 応答コード 414).</string> + <string name="error_http_code_426">HTTPS が必要です。URL を変更してください (HTTP 応答コード 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">認証に失敗しました。提供された SSL クライアント証明書を確認してください (HTTP 応答コード 495).</string> + <string name="error_http_code_496">SSL クライアント証明書が必要 (HTTP 応答コード 496)</string> + <string name="error_http_code_502">リバースプロキシが openHAB から無効な応答を受け取りました (HTTP 応答コード 502)</string> + <string name="error_http_code_503">openHAB は一時的に利用できません (HTTP 応答コード 503)</string> + <string name="error_http_code_504">ゲートウェイ タイムアウト。リバースプロキシが実行中ですが、openHAB サーバーから回答を受け取ることができなかったようです (HTTP 応答コード 504).</string> + <string name="error_http_code_507">openHAB に十分な空き容量がありません (HTTP 応答コード 507)</string> + <string name="error_http_code_511">ネットワーク認証が必要 (HTTP 応答コード 511)</string> + <string name="error_about_no_conn">openHAB サーバー情報の取得時にエラーが発生しました</string> + <string name="error_openhab_offline">クラウドインスタンス実行中、お使いの openHAB サーバーがオフラインです</string> + <string name="title_activity_openhabwritetag">NFC タグを書き込み</string> + <string name="title_activity_libraries">使用したライブラリー</string> + <string name="info_write_tag">タグをタッチして、確認メッセージが表示されるまで近づけたままにしてください</string> + <string name="info_write_tag_progress">タグを書き込んでいます</string> + <string name="info_write_tag_finished">正常に完了しました</string> + <string name="info_write_failed">タグの書き込みエラー</string> + <string name="info_write_tag_unsupported">このデバイスは NFC サポートがありません :-(</string> + <string name="info_write_tag_disabled">NFC が無効です。 デバイスの設定メニューで有効にしてください。</string> + <string name="info_openhab_apiversion_label">openHAB Rest API バージョン</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB シークレット</string> + <string name="info_openhab_push_notification_label">プッシュ通知ステータス</string> + <string name="action_settings">設定</string> + <string name="nfc_dialog_title">この要素の NFC タグアクションを作成</string> + <string name="info_not_set">未設定</string> + <string name="empty_page">このページには表示するように設定されたウィジェットがありません</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">まだ通知は送信されていません</string> + <string name="notification_list_error">通知を読み込み中にエラーが発生しました</string> + <string name="list_loading_message">読み込み中\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">未知の証明書を受け入れますか?</string> + <string name="mtm_trust_anchor">サーバー証明書は既知の認証機関によって署名されていません</string> + <string name="mtm_cert_expired">サーバー証明書は期限切れです</string> + <string name="mtm_accept_servername">サーバー名の不一致を受け入れますか?</string> + <string name="mtm_hostname_mismatch">サーバーは \"%s\" として認証できませんでした。証明書は以下のみ有効です:</string> + <string name="mtm_connect_anyway">このまま接続してもよろしいですか?</string> + <string name="mtm_cert_details">証明書の詳細:</string> + <string name="mtm_decision_always">承認</string> + <string name="mtm_decision_once">一度だけ</string> + <string name="mtm_decision_abort">中断</string> + <string name="mtm_notification">証明書の検証</string> + <string name="settings_openhab_none">なし</string> + <!-- Themes --> + <string name="theme_name_light">ライト</string> + <string name="theme_name_dark">ダーク</string> + <string name="theme_name_black">ブラック/AMOLED</string> + <string name="theme_name_basic_ui">基本 UI</string> + <string name="theme_name_basic_ui_dark">基本 UI ダーク</string> + <!-- NFC --> + <string name="nfc_action_on">オン</string> + <string name="nfc_action_up">上</string> + <string name="nfc_action_off">オフ</string> + <string name="nfc_action_down">下</string> + <string name="nfc_action_toggle">切り替え</string> + <string name="nfc_activate">アクティベート</string> + <string name="nfc_action_current_color">現在の色</string> + <string name="nfc_action_to_sitemap_page">サイトマップのページに移動</string> + <!-- Drawer --> + <string name="drawer_open">サイトマップドロワーを開きました</string> + <string name="drawer_close">サイトマップドロワーを閉じました</string> + <string name="mainmenu_openhab_voice_recognition">音声認識</string> + <!-- About --> + <string name="about_title">アプリついて</string> + <string name="about_license_title">ライセンス</string> + <string name="about_changelog">変更履歴</string> + <string name="about_source_code">ソースコード</string> + <string name="about_issues">問題を報告する</string> + <string name="about_docs">ドキュメント</string> + <string name="about_community_forum">コミュニティフォーラム</string> + <string name="about_foundation">openHAB 財団</string> + <string name="about_community">openHAB コミュニティ</string> + <string name="about_server">openHAB サーバー</string> + <string name="about_translation">openHAB の翻訳にご協力ください</string> + <string name="about_privacy_policy">プライバシーポリシー</string> + <string name="settings_debug_messages_title">トラブルシューティングの情報を表示</string> + <string name="error_couldnt_determine_openhab_url">openHAB URL を特定できませんでした</string> + <string name="unknown">不明</string> + <string name="error_network_type_unsupported">ネットワークの形式 (%s) はサポートされていません</string> + <string name="set">設定</string> + <string name="cancel">キャンセル</string> + <string name="close">閉じる</string> + <string name="try_again_button">もう一度やり直す</string> + <string name="go_to_settings_button">設定に移動</string> + <string name="resolving_openhab">openHAB サーバーインスタンスの探索中\u2026</string> + <!-- Log --> + <string name="log">ログ</string> + <string name="view_log">ログの表示</string> + <string name="clear_log">ログの消去</string> + <string name="empty_log">ログはありません</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">ロール シャッターを開く</string> + <string name="content_description_stop_roller_shutter">ロール シャッターを停止</string> + <string name="content_description_close_roller_shutter">ロール シャッターを閉じる</string> + <string name="content_description_open_color_wheel">カラー ホイールを開く</string> + <string name="content_description_color_up">オンまたは長押しは明るくします</string> + <string name="content_description_color_down">オフまたは長押しは暗くします</string> + <string name="content_description_open_number_picker">数字選択を開く</string> + <string name="content_description_video">ビデオ</string> + <string name="content_description_open_openhab">openHAB を開く</string> + <string name="swipe_to_refresh_description">アプリも自動的に更新されます、通常、手動で行う必要はありません</string> + <string name="swipe_to_refresh_dismiss">了解!</string> + <!-- Intro strings --> + <string name="app_intro">はじめに</string> + <string name="intro_welcome">openHAB へようこそ</string> + <string name="intro_whatis">ホーム用、ベンダーや技術に依存しないオープンソースのオートメーションソフトウェア</string> + <string name="intro_themes">テーマ</string> + <string name="intro_themes_description">いくつかのテーマから選択してください</string> + <string name="intro_voice_description">音声でホームをコントロール</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">アイテムを長押しすると、アイテムのコントロールを NFC タグに接続できます</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">スキップ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">完了</string> </resources> diff --git a/mobile/src/main/res/values-ji/strings.xml b/mobile/src/main/res/values-ji/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-ji/strings.xml +++ b/mobile/src/main/res/values-ji/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-ko/strings.xml b/mobile/src/main/res/values-ko/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-ko/strings.xml +++ b/mobile/src/main/res/values-ko/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-lt/strings.xml b/mobile/src/main/res/values-lt/strings.xml index d9bf5fb1da10f4f5e019d9478272304fa2d13d69..b83133ff08f10497061d5f42e0206831b4c9b669 100644 --- a/mobile/src/main/res/values-lt/strings.xml +++ b/mobile/src/main/res/values-lt/strings.xml @@ -1,97 +1,99 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Nustatymai</string> - <string name="app_notifications">Pranešimai</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Vietų išplanavimai</string> - <string name="mainmenu_openhab_preferences">Nustatymai</string> - <string name="mainmenu_openhab_clearcache">Išvalyti paveikslėlių podėlį</string> - <!-- App settings strings --> - <string name="settings_openhab_url">openHAB URL</string> - <string name="settings_openhab_url_summary">openHAB skydelio adresas (pagal kompiuterio vardą ar IP). Įvedus automatinis aptikimas išjungiamas. Dabartinis nustatymas: %s</string> - <string name="settings_openhab_alturl">openHAB nuotolinis URL</string> - <string name="settings_openhab_alturl_summary">openHAB adresas, naudojamas, kai vietinis adresas nepasiekiamas. Dabartinis nustatymas: %s</string> - <string name="settings_openhab_username">Vartotojo vardas</string> - <string name="settings_openhab_password">Slaptažodis</string> - <string name="settings_openhab_sslclientcert">Kliento SSL sertifikatas</string> - <string name="settings_openhab_sslclientcert_howto_summary">Paspauskite čia, kad gautumėte informacijos, kaip nustatyti SSL autentifikaciją</string> - <string name="settings_openhab_screentimeroff">Neleisti išjungti ekrano</string> - <string name="settings_openhab_screentimeroff_summary">Neleisti išjungti ekrano, kol paleista openHAB programėlė</string> - <string name="settings_openhab_demomode">Demonstracinis režimas</string> - <string name="settings_openhab_demomode_summary">Naudoti openHAB programėlę demonstraciniu režimu</string> - <string name="settings_openhab_theme">openHAB tema</string> - <string name="settings_openhab_fullscreen">Pilnas ekranas</string> - <string name="settings_openhab_fullscreen_summary">Rodyti pilno ekrano režimu</string> - <string name="settings_openhab_icon_format">Piktogramų formatas</string> - <string name="settings_openhab_icon_format_png">Taškinis</string> - <string name="settings_openhab_icon_format_svg">Vektorinis</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB, jūsų paliepimu!</string> - <string name="info_voice_recognized_text">Neatpažinta komanda: %1$s</string> - <string name="info_demo_mode_short">Veikia demo režimu</string> - <string name="info_conn_url">Jungiamasi prie sukonfigūruoto URL</string> - <string name="info_conn_rem_url">Jungiamasi prie nuotolinio URL</string> - <!-- Error messages --> - <string name="error_network_not_available">Tinklas nepasiekiamas</string> - <string name="error_connection_failed">Nepavyko prisijungti prie serverio</string> - <string name="error_unable_to_resolve_hostname">Nepavyko aptikti domeno vardo</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">Reikalingas SSL kliento sertifikatas (HTTP atsakymo kodas 496)</string> - <string name="error_http_code_511">Reikalingas tinklo autentifikavimas (HTTP atsakymo kodas 511)</string> - <string name="title_activity_openhabwritetag">Rašyti NFC žymą</string> - <string name="info_write_tag">Palieskite žymą ir laikykite ją arti kol bus parodyta patvirtinimo žinutė</string> - <string name="info_write_tag_progress">Rašoma žyma</string> - <string name="info_write_tag_finished">Sėkmingai baigta</string> - <string name="info_write_failed">Žymos rašymo klaida</string> - <string name="info_write_tag_unsupported">Jūsų įrenginys nepalaiko NFC</string> - <string name="info_write_tag_disabled">NFC išjungtas. Prašome jį įjungti įrenginio nustatymuose.</string> - <string name="info_openhab_apiversion_label">openHAB Rest API versija</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Secret</string> - <string name="action_settings">Nustatymai</string> - <string name="nfc_dialog_title">Prašome pasirinkti NFC žymos veiksmą</string> - <string name="info_not_set">Nenustatyta</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Vieną kartą</string> - <string name="mtm_decision_abort">Atšaukti</string> - <string name="mtm_notification">Sertifikato patikrinimas</string> - <!-- Themes --> - <string name="theme_name_light">Šviesi</string> - <string name="theme_name_dark">Tamsi</string> - <string name="theme_name_black">Juoda/AMOLED</string> - <string name="theme_name_basic_ui">Paprastas UI</string> - <string name="theme_name_basic_ui_dark">Paprastas UI (tamsus)</string> - <!-- NFC --> - <string name="nfc_action_on">Įjungti</string> - <string name="nfc_action_up">Į viršų</string> - <string name="nfc_action_off">Išjungti</string> - <string name="nfc_action_down">Žemyn</string> - <string name="nfc_action_toggle">Perjungti</string> - <string name="nfc_action_current_color">Dabartinė spalva</string> - <!-- Drawer --> - <string name="drawer_open">Vietos išplanavimų parinkiklis atvertas</string> - <string name="drawer_close">Vietos išplanavimų parinkiklis užvertas</string> - <string name="mainmenu_openhab_voice_recognition">Balso atpažinimas</string> - <!-- About --> - <string name="about_title">Apie</string> - <string name="about_license_title">Licencija</string> - <string name="error_couldnt_determine_openhab_url">Nepavyko nustatyti openHAB URL</string> - <string name="unknown">Nežinoma</string> - <string name="error_network_type_unsupported">Tinklo tipas (%s) nepalaikomas</string> - <string name="set">Nustatyti</string> - <string name="cancel">Atšaukti</string> - <!-- Content description for images --> - <!-- Intro strings --> - <string name="app_intro">Intro</string> - <string name="intro_welcome">Sveiki atvykę į openHAB</string> - <string name="intro_whatis">Nepriklausomas atviro kodo išmanių namų sprendimas</string> - <string name="intro_themes">Temos</string> - <string name="intro_themes_description">Galite pasirinkti vieną iš kelių temų</string> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Nustatymai</string> + <string name="app_notifications">Pranešimai</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Vietų išplanavimai</string> + <string name="mainmenu_openhab_preferences">Nustatymai</string> + <string name="mainmenu_openhab_clearcache">Išvalyti paveikslėlių podėlį</string> + <!-- App settings strings --> + <string name="settings_openhab_url">openHAB URL</string> + <string name="settings_openhab_url_summary">openHAB skydelio adresas (pagal kompiuterio vardą ar IP). Įvedus automatinis aptikimas išjungiamas. Dabartinis nustatymas: %s</string> + <string name="settings_openhab_alturl">openHAB nuotolinis URL</string> + <string name="settings_openhab_alturl_summary">openHAB adresas, naudojamas, kai vietinis adresas nepasiekiamas. Dabartinis nustatymas: %s</string> + <string name="settings_openhab_username">Vartotojo vardas</string> + <string name="settings_openhab_password">Slaptažodis</string> + <string name="settings_openhab_sslclientcert">Kliento SSL sertifikatas</string> + <string name="settings_openhab_sslclientcert_howto_summary">Paspauskite čia, kad gautumėte informacijos, kaip nustatyti SSL autentifikaciją</string> + <string name="settings_openhab_screentimeroff">Neleisti išjungti ekrano</string> + <string name="settings_openhab_screentimeroff_summary">Neleisti išjungti ekrano, kol paleista openHAB programėlė</string> + <string name="settings_openhab_demomode">Demonstracinis režimas</string> + <string name="settings_openhab_theme">openHAB tema</string> + <string name="settings_openhab_fullscreen">Pilnas ekranas</string> + <string name="settings_openhab_fullscreen_summary">Rodyti pilno ekrano režimu</string> + <string name="settings_openhab_icon_format">Piktogramų formatas</string> + <string name="settings_openhab_icon_format_png">Taškinis</string> + <string name="settings_openhab_icon_format_svg">Vektorinis</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, jūsų paliepimu!</string> + <string name="info_voice_recognized_text">Neatpažinta komanda: %1$s</string> + <string name="info_demo_mode_short">Veikia demo režimu</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Jungiamasi prie sukonfigūruoto URL</string> + <string name="info_conn_rem_url">Jungiamasi prie nuotolinio URL</string> + <!-- Error messages --> + <string name="error_network_not_available">Tinklas nepasiekiamas</string> + <string name="error_connection_failed">Nepavyko prisijungti prie serverio</string> + <string name="error_unable_to_resolve_hostname">Nepavyko aptikti domeno vardo</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_496">Reikalingas SSL kliento sertifikatas (HTTP atsakymo kodas 496)</string> + <string name="error_http_code_511">Reikalingas tinklo autentifikavimas (HTTP atsakymo kodas 511)</string> + <string name="title_activity_openhabwritetag">Rašyti NFC žymą</string> + <string name="info_write_tag">Palieskite žymą ir laikykite ją arti kol bus parodyta patvirtinimo žinutė</string> + <string name="info_write_tag_progress">Rašoma žyma</string> + <string name="info_write_tag_finished">Sėkmingai baigta</string> + <string name="info_write_failed">Žymos rašymo klaida</string> + <string name="info_write_tag_unsupported">Jūsų įrenginys nepalaiko NFC</string> + <string name="info_write_tag_disabled">NFC išjungtas. Prašome jį įjungti įrenginio nustatymuose.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API versija</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Secret</string> + <string name="action_settings">Nustatymai</string> + <string name="nfc_dialog_title">Prašome pasirinkti NFC žymos veiksmą</string> + <string name="info_not_set">Nenustatyta</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_decision_once">Vieną kartą</string> + <string name="mtm_decision_abort">Atšaukti</string> + <string name="mtm_notification">Sertifikato patikrinimas</string> + <!-- Themes --> + <string name="theme_name_light">Šviesi</string> + <string name="theme_name_dark">Tamsi</string> + <string name="theme_name_black">Juoda/AMOLED</string> + <string name="theme_name_basic_ui">Paprastas UI</string> + <string name="theme_name_basic_ui_dark">Paprastas UI (tamsus)</string> + <!-- NFC --> + <string name="nfc_action_on">Įjungti</string> + <string name="nfc_action_up">Į viršų</string> + <string name="nfc_action_off">Išjungti</string> + <string name="nfc_action_down">Žemyn</string> + <string name="nfc_action_toggle">Perjungti</string> + <string name="nfc_action_current_color">Dabartinė spalva</string> + <!-- Drawer --> + <string name="drawer_open">Vietos išplanavimų parinkiklis atvertas</string> + <string name="drawer_close">Vietos išplanavimų parinkiklis užvertas</string> + <string name="mainmenu_openhab_voice_recognition">Balso atpažinimas</string> + <!-- About --> + <string name="about_title">Apie</string> + <string name="about_license_title">Licencija</string> + <string name="error_couldnt_determine_openhab_url">Nepavyko nustatyti openHAB URL</string> + <string name="unknown">Nežinoma</string> + <string name="error_network_type_unsupported">Tinklo tipas (%s) nepalaikomas</string> + <string name="set">Nustatyti</string> + <string name="cancel">Atšaukti</string> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <string name="app_intro">Intro</string> + <string name="intro_welcome">Sveiki atvykę į openHAB</string> + <string name="intro_whatis">Nepriklausomas atviro kodo išmanių namų sprendimas</string> + <string name="intro_themes">Temos</string> + <string name="intro_themes_description">Galite pasirinkti vieną iš kelių temų</string> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-nl/strings.xml b/mobile/src/main/res/values-nl/strings.xml index 3221aede99c704a33e684a34bf924e3fb9953732..342e60c109917cdc80b352df861ac0a27a2fed78 100644 --- a/mobile/src/main/res/values-nl/strings.xml +++ b/mobile/src/main/res/values-nl/strings.xml @@ -1,194 +1,237 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Instellingen</string> - <string name="app_notifications">Notificaties</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Instellingen</string> - <string name="mainmenu_openhab_selectsitemap">Selecteer standaard Sitemap</string> - <string name="mainmenu_openhab_clearcache">Verwijder afbeeldingscache</string> - <!-- App settings strings --> - <string name="settings_connection_title">Verbindingsinstellingen</string> - <string name="settings_display_title">Weergave Instellingen</string> - <string name="settings_misc_title">Overige Instellingen</string> - <string name="settings_openhab_url">Lokale server URL</string> - <string name="settings_openhab_url_summary">De URL van het dashboard van de openHAB (gebaseerd op hostnaam of IP). Indien geconfigureerd, is automatische detectie uitgeschakeld. Huidige instelling: %s</string> - <string name="settings_openhab_alturl">Externe server-URL</string> - <string name="settings_openhab_alturl_summary">Externe openHAB URL (wordt alleen gebruikt wanneer het lokale adres niet beschikbaar is). Huidige instelling: %s</string> - <string name="settings_openhab_username">Gebruikersnaam</string> - <string name="settings_openhab_password">Wachtwoord</string> - <string name="settings_openhab_password_summary_weak">Zwak wachtwoord ingesteld</string> - <string name="settings_openhab_password_summary_strong">Sterk Wachtwoord ingesteld</string> - <string name="settings_openhab_sslclientcert">SSL-clientcertificaat</string> - <string name="settings_openhab_sslclientcert_howto_summary">Tik hier voor enkele tips en uitleg over het instellen van SSL certificaat authenticatie</string> - <string name="settings_openhab_screentimeroff">Uitschakelen weergave timer</string> - <string name="settings_openhab_screentimeroff_summary">Zet het uitschakelen van het scherm uit als de openHAB App actief is</string> - <string name="settings_openhab_demomode">Demonstratiemodus</string> - <string name="settings_openhab_demomode_summary">Gebruik de openHAB App in demo modus</string> - <string name="settings_openhab_theme">Thema</string> - <string name="settings_openhab_fullscreen">Volledig scherm</string> - <string name="settings_openhab_fullscreen_summary">Gebruik volledige scherm</string> - <string name="settings_openhab_icon_format">Pictogramindeling</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vector</string> - <string name="settings_chart_scaling">Grafiek schalen</string> - <string name="settings_chart_scaling_summary">Opmerking: Kleiner schalen krimpt lettertypen en de breedte van de lijn, dus is er meer ruimte voor de grafiek, maar leesbaarheid zou er onder kunnen lijden.</string> - <string name="settings_chart_scaling_value_xs">Zeer klein</string> - <string name="settings_chart_scaling_value_s">Klein</string> - <string name="settings_chart_scaling_value_m">Standaard</string> - <string name="settings_chart_scaling_value_l">Groot</string> - <string name="settings_ringtone">Notficatiegeluid</string> - <string name="settings_ringtone_none">Geen</string> - <string name="settings_clear_default_sitemap">Verwijder standaard Sitemap</string> - <string name="settings_no_default_sitemap">Geen standaard Sitemap geselecteerd</string> - <string name="settings_current_default_sitemap">Standaard Sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Extern</string> - <string name="settings_openhab_connection">Lokaal</string> - <string name="settings_notification_vibration">Trillen bij notificatie</string> - <string name="settings_notification_vibration_off">Uit</string> - <string name="settings_notification_vibration_short">Kort</string> - <string name="settings_notification_vibration_long">Lang</string> - <string name="settings_notification_vibration_twice">Twee keer</string> - <string name="settings_connection_summary">Verbonden met %s</string> - <string name="settings_insecure_connection_summary">Onveilig verbonden met %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB stem commando\'s</string> - <string name="info_voice_input">openHAB, tot uw dienst!</string> - <string name="info_voice_recognized_text">Herkend commando: %1$s</string> - <string name="info_demo_mode_short">Uitgevoerd in de demomodus</string> - <string name="info_conn_url">Verbinden met ingestelde URL</string> - <string name="info_conn_rem_url">Verbinden naar externe URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB heeft een lege Sitemap geladen</string> - <string name="error_network_not_available">Netwerk is niet beschikbaar</string> - <string name="error_http_connection_failed">Verbinding mislukt. Een onverwachte reactie werd ontvangen tijdens het verbinden met de openHAB server (Ontvangen HTTP response code: %d).</string> - <string name="error_invalid_url">Voer een geldige URL in, formaat \'http(s)://host(:port)/\'</string> - <string name="error_connection_failed">Verbinding met host mislukt</string> - <string name="error_unable_to_resolve_hostname">Hostnaam niet gevonden</string> - <string name="error_connection_sslhandshake_failed">SSL-handshake mislukt</string> - <string name="error_certificate_not_trusted">SSL certificaat is niet vertrouwd. Importeer alstublieft het root certificate of accepteer het certificaat tijdens de SSL handshake.</string> - <string name="error_certificate_expired">Het SSL certificaat is verlopen. Vernieuw alstublieft het certificaat of accepteer het certificaat tijdens de SSL handshake.</string> - <string name="error_certificate_not_valid_yet">Het SSL certificaat is nog niet geldig. Voeg een correct certificaat toe of accepteer het certificaat tijdens de SSL handshake. Controleer ook of de klok op uw apparaat correct is ingesteld.</string> - <string name="error_certificate_revoked">Het SSL certificaat is ingetrokken. Vernieuw alstublieft het certificaat of accepteer het certificaat tijdens de SSL handshake.</string> - <string name="error_certificate_wrong_host">SSL-certificaat is niet geldig voor %s</string> - <string name="error_http_code_401">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 401).</string> - <string name="error_http_code_403">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 403).</string> - <string name="error_http_code_407">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 407).</string> - <string name="error_http_code_414">De URL is te lang. Gebruik alstublieft het IP-adres of een kortere URL (HTTP response code 414).</string> - <string name="error_http_code_426">HTTPS is vereist. Verander alstublieft de URL (HTTP response code 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Verificatie is mislukt. Controleer alstublieft het SSL-clientcertificaat (HTTP response code 495).</string> - <string name="error_http_code_496">SSL-clientcertificaat is vereist (HTTP responscode 496)</string> - <string name="error_http_code_502">De reverse proxy heeft een ongeldig antwoord van de openHAB server ontvangen (HTTP-reactiecode 502)</string> - <string name="error_http_code_503">De openHAB server is tijdelijk niet beschikbaar (HTTP-reactiecode 503)</string> - <string name="error_http_code_504">Gateway time-out. Het lijkt erop dat uw reverse-proxy actief is, maar er kan geen antwoord gekregen worden van de openHAB server (HTTP response code 504).</string> - <string name="error_http_code_507">De openHAB-server heeft onvoldoende vrije ruimte (HTTP-reactiecode 507)</string> - <string name="error_http_code_511">Netwerkverificatie is vereist (HTTP responscode 511)</string> - <string name="error_about_no_conn">Fout bij het ophalen van openHAB serverinformatie</string> - <string name="error_openhab_offline">Uw openHAB server is offline terwijl de cloud instance actief is</string> - <string name="title_activity_openhabwritetag">Schrijf NFC-tag</string> - <string name="title_activity_libraries">Gebruikte bibliotheken</string> - <string name="info_write_tag">Raak de tag aan en houd het dichtbij tot een bevestiging verschijnt</string> - <string name="info_write_tag_progress">De tag wordt weggeschreven</string> - <string name="info_write_tag_finished">Gelukt</string> - <string name="info_write_failed">Tag schrijffout</string> - <string name="info_write_tag_unsupported">Dit apparaat heeft geen NFC-ondersteuning</string> - <string name="info_write_tag_disabled">NFC is uitgeschakeld. Zet het aan in het apparaat instellingenmenu.</string> - <string name="info_openhab_apiversion_label">openHAB Rest API versie</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB geheim</string> - <string name="info_openhab_push_notification_label">Push meldingen status</string> - <string name="action_settings">Instellingen</string> - <string name="nfc_dialog_title">Selecteer een actie voor de NFC-tag</string> - <string name="info_not_set">Niet ingesteld</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Tot nu toe zijn er geen notificaties verzonden</string> - <string name="notification_list_error">Er is een fout opgetreden tijdens het laden van notificaties</string> - <string name="list_loading_message">Laden\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Onbekend certificaat accepteren?</string> - <string name="mtm_trust_anchor">Het server certificaat is niet ondertekend door een erkende Certificate Authority</string> - <string name="mtm_cert_expired">Het server certificaat is verlopen</string> - <string name="mtm_accept_servername">Servernaam komt niet overeen, accepteren?</string> - <string name="mtm_hostname_mismatch">Server kan niet worden geverifieerd als \"%s\". Het certificaat is alleen geldig voor:</string> - <string name="mtm_connect_anyway">Wilt u toch verbinding maken?</string> - <string name="mtm_cert_details">Certificaatdetails:</string> - <string name="mtm_decision_always">Accepteren</string> - <string name="mtm_decision_once">Eenmalig</string> - <string name="mtm_decision_abort">Afbreken</string> - <string name="mtm_notification">Certificaatverificatie</string> - <string name="settings_openhab_none">Geen</string> - <!-- Themes --> - <string name="theme_name_light">Licht</string> - <string name="theme_name_dark">Donker</string> - <string name="theme_name_black">Zwart/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI donker</string> - <!-- NFC --> - <string name="nfc_action_on">Aan</string> - <string name="nfc_action_up">Omhoog</string> - <string name="nfc_action_off">Uit</string> - <string name="nfc_action_down">Omlaag</string> - <string name="nfc_action_toggle">Wissel</string> - <string name="nfc_activate">Activeren</string> - <string name="nfc_action_current_color">Huidige kleur</string> - <string name="nfc_action_to_sitemap_page">Ga naar de Sitemap pagina</string> - <!-- Drawer --> - <string name="drawer_open">Sitemap drawer geopend</string> - <string name="drawer_close">Sitemap drawer gesloten</string> - <string name="mainmenu_openhab_voice_recognition">Stemherkenning</string> - <!-- About --> - <string name="about_title">Over deze app</string> - <string name="about_license_title">Licentie</string> - <string name="about_changelog">Changelog</string> - <string name="about_source_code">Broncode</string> - <string name="about_issues">Een probleem melden</string> - <string name="about_docs">Documentatie</string> - <string name="about_community_forum">Community forum</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">openHAB community</string> - <string name="about_server">openHAB server</string> - <string name="about_translation">Help ons met het vertalen van openHAB</string> - <string name="about_privacy_policy">Privacy beleid</string> - <string name="settings_debug_messages_title">Laat informatie zien voor het oplossen van problemen</string> - <string name="error_couldnt_determine_openhab_url">openHAB URL kon niet worden vastgesteld</string> - <string name="unknown">Onbekend</string> - <string name="error_network_type_unsupported">Netwerktype (%s) wordt niet ondersteund</string> - <string name="set">Stel in</string> - <string name="cancel">Annuleer</string> - <string name="close">Sluiten</string> - <string name="try_again_button">Opnieuw proberen</string> - <string name="go_to_settings_button">Ga naar instellingen</string> - <string name="configuration_missing">Uw openHAB server kon niet automatisch worden gevonden. Gelieve het IP-adres of de hostnaam in de serverinstellingen te configureren.</string> - <string name="no_remote_server">Lokale netwerk is niet beschikbaar en uw externe server is nog niet geconfigureerd</string> - <string name="resolving_openhab">Proberen om openHAB server automatisch te vinden\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Open rolluik</string> - <string name="content_description_stop_roller_shutter">Stop rolluik</string> - <string name="content_description_close_roller_shutter">Sluit rolluik</string> - <string name="content_description_open_color_wheel">Open kleurenwiel</string> - <string name="content_description_color_up">Aan of ingedrukt houden om feller te maken</string> - <string name="content_description_color_down">Uit of ingedrukt houden om minder fel te maken</string> - <string name="content_description_open_number_picker">Open nummer kiezer</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Open openHAB</string> - <string name="swipe_to_refresh_description">De app wordt ook automatisch vernieuwd, het is meestal niet nodig om dit handmatig te doen</string> - <string name="swipe_to_refresh_dismiss">Begrepen!</string> - <!-- Intro strings --> - <string name="app_intro">Introductie</string> - <string name="intro_welcome">Welkom bij openHAB</string> - <string name="intro_whatis">Leverancier en technologie onafhankelijke open source domotica software voor jouw huis</string> - <string name="intro_themes">Thema\'s</string> - <string name="intro_themes_description">Kies tussen de verschillende thema\'s</string> - <string name="intro_voice_description">Bestuur uw huis met uw stem</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Item controle kan worden verbonden met NFC tags door lang op het Item te drukken</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">OVERSLAAN</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">GEREED</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Instellingen</string> + <string name="app_notifications">Notificaties</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Instellingen</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Er is een fout opgetreden tijdens het laden van HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Selecteer standaard Sitemap</string> + <string name="mainmenu_openhab_clearcache">Verwijder afbeeldingscache</string> + <!-- App settings strings --> + <string name="settings_connection_title">Verbindingsinstellingen</string> + <string name="settings_display_title">Weergave Instellingen</string> + <string name="settings_misc_title">Overige Instellingen</string> + <string name="settings_openhab_url">Lokale server URL</string> + <string name="settings_openhab_url_summary">De URL van het dashboard van de openHAB (gebaseerd op hostnaam of IP). Indien geconfigureerd, is automatische detectie uitgeschakeld. Huidige instelling: %s</string> + <string name="settings_openhab_alturl">Externe server-URL</string> + <string name="settings_openhab_alturl_summary">Externe openHAB URL (wordt alleen gebruikt wanneer het lokale adres niet beschikbaar is). Huidige instelling: %s</string> + <string name="settings_openhab_username">Gebruikersnaam</string> + <string name="settings_openhab_password">Wachtwoord</string> + <string name="settings_openhab_password_summary_weak">Zwak wachtwoord ingesteld</string> + <string name="settings_openhab_password_summary_strong">Sterk Wachtwoord ingesteld</string> + <string name="settings_openhab_sslclientcert">SSL-clientcertificaat</string> + <string name="settings_openhab_sslclientcert_howto_summary">Tik hier voor enkele tips en uitleg over het instellen van SSL certificaat authenticatie</string> + <string name="settings_openhab_screentimeroff">Uitschakelen weergave timer</string> + <string name="settings_openhab_screentimeroff_summary">Zet het uitschakelen van het scherm uit als de openHAB App actief is</string> + <string name="settings_openhab_demomode">Demonstratiemodus</string> + <string name="settings_openhab_theme">Thema</string> + <string name="settings_openhab_fullscreen">Volledig scherm</string> + <string name="settings_openhab_fullscreen_summary">Gebruik volledige scherm</string> + <string name="settings_openhab_icon_format">Pictogramindeling</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vector</string> + <string name="settings_chart_scaling">Grafiek schalen</string> + <string name="settings_chart_scaling_summary">Opmerking: Kleiner schalen krimpt lettertypen en de breedte van de lijn, dus is er meer ruimte voor de grafiek, maar leesbaarheid zou er onder kunnen lijden.</string> + <string name="settings_chart_scaling_value_xs">Zeer klein</string> + <string name="settings_chart_scaling_value_s">Klein</string> + <string name="settings_chart_scaling_value_m">Standaard</string> + <string name="settings_chart_scaling_value_l">Groot</string> + <string name="settings_openhab_chart_hq">Hoge resolutie grafieken</string> + <string name="settings_openhab_chart_hq_summary">Het genereren van grafieken kan belastend zijn voor de server. Zet deze optie uit als grafieken langzaam laden en je server niet krachtig is.</string> + <string name="settings_ringtone">Notficatiegeluid</string> + <string name="settings_ringtone_none">Geen</string> + <string name="settings_clear_default_sitemap">Verwijder standaard Sitemap</string> + <string name="settings_no_default_sitemap">Geen standaard Sitemap geselecteerd</string> + <string name="settings_current_default_sitemap">Standaard Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Extern</string> + <string name="settings_openhab_connection">Lokaal</string> + <string name="settings_notification_vibration">Trillen bij notificatie</string> + <string name="settings_notification_vibration_off">Uit</string> + <string name="settings_notification_vibration_short">Kort</string> + <string name="settings_notification_vibration_long">Lang</string> + <string name="settings_notification_vibration_twice">Twee keer</string> + <string name="settings_notification_ringtone_vibration">Notificatieinstellingen</string> + <string name="settings_connection_summary">Verbonden met %s</string> + <string name="settings_insecure_connection_summary">Onveilig verbonden met %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Spraakcommando\'s</string> + <string name="title_voice_widget_icon">Spraakcommando\'s en app snelkoppeling</string> + <string name="info_voice_input">openHAB, tot uw dienst!</string> + <string name="info_voice_recognized_text">Herkend commando: %1$s</string> + <string name="info_demo_mode_short">Uitgevoerd in de demomodus</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Uitzetten</string> + <string name="info_conn_url">Verbinden met ingestelde URL</string> + <string name="info_conn_rem_url">Verbinden naar externe URL</string> + <string name="app_shortcut_diabled_habpanel">Op uw server is HABPanel niet geïnstalleerd</string> + <string name="app_shortcut_diabled_notifications">Uw externe server is niet beschikbaar</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB heeft een lege Sitemap geladen</string> + <string name="error_sitemap_generic_load_error">De Sitemap kon niet worden geladen. De volgende fout is opgetreden: %1$s</string> + <string name="error_network_not_available">Netwerk is niet beschikbaar</string> + <string name="error_wifi_not_available">Wi-Fi is uitgeschakeld</string> + <string name="error_http_connection_failed">Verbinding mislukt. Een onverwachte reactie werd ontvangen tijdens het verbinden met de openHAB server (Ontvangen HTTP response code: %d).</string> + <string name="error_invalid_url">Voer een geldige URL in, formaat \'http(s)://host(:port)/\'</string> + <string name="error_port_seems_invalid">De ingevoerde poort lijkt ongeldig voor het geselecteerde protocol</string> + <string name="error_connection_failed">Verbinding met host mislukt</string> + <string name="error_unable_to_resolve_hostname">Hostnaam niet gevonden</string> + <string name="error_connection_sslhandshake_failed">SSL-handshake mislukt</string> + <string name="error_certificate_not_trusted">SSL certificaat is niet vertrouwd. Importeer alstublieft het root certificate of accepteer het certificaat tijdens de SSL handshake.</string> + <string name="error_certificate_expired">Het SSL certificaat is verlopen. Vernieuw alstublieft het certificaat of accepteer het certificaat tijdens de SSL handshake.</string> + <string name="error_certificate_not_valid_yet">Het SSL certificaat is nog niet geldig. Voeg een correct certificaat toe of accepteer het certificaat tijdens de SSL handshake. Controleer ook of de klok op uw apparaat correct is ingesteld.</string> + <string name="error_certificate_invalid_date">SSL-certificaat heeft een ongeldige datum. Stel een correct certificaat in en controleer of de klok op uw apparaat correct is ingesteld.</string> + <string name="error_certificate_revoked">Het SSL certificaat is ingetrokken. Vernieuw alstublieft het certificaat of accepteer het certificaat tijdens de SSL handshake.</string> + <string name="error_certificate_wrong_host">SSL-certificaat is niet geldig voor %s</string> + <string name="error_http_to_https_port">Onverwachte beëindiging van een stream. Probeert u verbinding te maken met een HTTPS poort via HTTP?</string> + <string name="webview_ssl">Momenteel ondersteunt deze app geen zelf ondertekende SSL-certificaten voor Webview widgets</string> + <string name="error_http_code_401">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 401).</string> + <string name="error_http_code_403">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 403).</string> + <string name="error_http_code_407">Verificatie is mislukt. Controleer alstublieft de geconfigureerde gebruikersnaam en wachtwoord (HTTP response code 407).</string> + <string name="error_http_code_414">De URL is te lang. Gebruik alstublieft het IP-adres of een kortere URL (HTTP response code 414).</string> + <string name="error_http_code_426">HTTPS is vereist. Verander alstublieft de URL (HTTP response code 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Verificatie is mislukt. Controleer alstublieft het SSL-clientcertificaat (HTTP response code 495).</string> + <string name="error_http_code_496">SSL-clientcertificaat is vereist (HTTP responscode 496)</string> + <string name="error_http_code_502">De reverse proxy heeft een ongeldig antwoord van de openHAB server ontvangen (HTTP-reactiecode 502)</string> + <string name="error_http_code_503">De openHAB server is tijdelijk niet beschikbaar (HTTP-reactiecode 503)</string> + <string name="error_http_code_504">Gateway time-out. Het lijkt erop dat uw reverse-proxy actief is, maar er kan geen antwoord gekregen worden van de openHAB server (HTTP response code 504).</string> + <string name="error_http_code_507">De openHAB-server heeft onvoldoende vrije ruimte (HTTP-reactiecode 507)</string> + <string name="error_http_code_511">Netwerkverificatie is vereist (HTTP responscode 511)</string> + <string name="error_about_no_conn">Fout bij het ophalen van openHAB serverinformatie</string> + <string name="error_openhab_offline">Uw openHAB server is offline terwijl de cloud instance actief is</string> + <string name="title_activity_openhabwritetag">Schrijf NFC-tag</string> + <string name="title_activity_libraries">Gebruikte bibliotheken</string> + <string name="info_write_tag">Raak de tag aan en houd het dichtbij tot een bevestiging verschijnt</string> + <string name="info_write_tag_progress">De tag wordt weggeschreven</string> + <string name="info_write_tag_finished">Gelukt</string> + <string name="info_write_failed">Tag schrijffout</string> + <string name="info_write_tag_unsupported">Dit apparaat heeft geen NFC-ondersteuning</string> + <string name="info_write_tag_disabled">NFC is uitgeschakeld. Zet het aan in het apparaat instellingenmenu.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API versie</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB geheim</string> + <string name="info_openhab_push_notification_label">Push meldingen status</string> + <string name="action_settings">Instellingen</string> + <string name="nfc_dialog_title">Selecteer een actie voor de NFC-tag</string> + <string name="info_not_set">Niet ingesteld</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Apparaatinformatie naar server verzenden</string> + <string name="send_device_info_item_prefix">Voorvoegsel Itemnaam</string> + <string name="send_device_info_item_prefix_summary">De Item namen van de volgende functies hebben dit voorvoegsel</string> + <string name="settings_alarm_clock">Wekker verzenden naar openHAB</string> + <string name="settings_alarm_clock_summary_on">Stuurt wekkertijd naar item \'%1$s \'</string> + <string name="settings_item_pref_item_name">Itemnaam</string> + <string name="waiting_for_item_upload">Wachten op netwerk om Items up te daten</string> + <string name="notification_channel_background">Achtergrond</string> + <string name="notification_channel_background_error">Fout in achtergrondtaken</string> + <plurals name="item_update_error_title"> + <item quantity="one">%d Item kon niet worden bijgewerkt</item> + <item quantity="other">%d Items konden niet worden bijgewerkt</item> + </plurals> + <string name="item_update_http_error">Updaten van Item \'%1$s\' mislukt (HTTP fout %2$d)</string> + <string name="item_update_connection_error">Updaten van Item \'%1$s\' mislukt (geen verbinding)</string> + <string name="error_sending_alarm_clock_item_empty">Voer een geldige Itemnaam in</string> + <string name="retry">Opnieuw</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Tot nu toe zijn er geen notificaties verzonden</string> + <string name="notification_list_error">Er is een fout opgetreden tijdens het laden van notificaties</string> + <string name="list_loading_message">Laden\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Onbekend certificaat accepteren?</string> + <string name="mtm_trust_anchor">Het server certificaat is niet ondertekend door een erkende Certificate Authority</string> + <string name="mtm_cert_expired">Het server certificaat is verlopen</string> + <string name="mtm_accept_servername">Servernaam komt niet overeen, accepteren?</string> + <string name="mtm_hostname_mismatch">Server kan niet worden geverifieerd als \"%s\". Het certificaat is alleen geldig voor:</string> + <string name="mtm_connect_anyway">Wilt u toch verbinding maken?</string> + <string name="mtm_cert_details">Certificaatdetails:</string> + <string name="mtm_decision_always">Accepteren</string> + <string name="mtm_decision_once">Eenmalig</string> + <string name="mtm_decision_abort">Afbreken</string> + <string name="mtm_notification">Certificaatverificatie</string> + <string name="settings_openhab_none">Geen</string> + <!-- Themes --> + <string name="theme_name_light">Licht</string> + <string name="theme_name_dark">Donker</string> + <string name="theme_name_black">Zwart/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI donker</string> + <!-- NFC --> + <string name="nfc_action_on">Aan</string> + <string name="nfc_action_up">Omhoog</string> + <string name="nfc_action_off">Uit</string> + <string name="nfc_action_down">Omlaag</string> + <string name="nfc_action_toggle">Wissel</string> + <string name="nfc_activate">Activeren</string> + <string name="nfc_action_current_color">Huidige kleur</string> + <string name="nfc_action_to_sitemap_page">Ga naar de Sitemap pagina</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap drawer geopend</string> + <string name="drawer_close">Sitemap drawer gesloten</string> + <string name="mainmenu_openhab_voice_recognition">Stemherkenning</string> + <!-- About --> + <string name="about_title">Over deze app</string> + <string name="about_license_title">Licentie</string> + <string name="about_changelog">Changelog</string> + <string name="about_source_code">Broncode</string> + <string name="about_issues">Een probleem melden</string> + <string name="about_docs">Documentatie</string> + <string name="about_community_forum">Community forum</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">openHAB community</string> + <string name="about_server">openHAB server</string> + <string name="about_translation">Help ons met het vertalen van openHAB</string> + <string name="about_privacy_policy">Privacy beleid</string> + <string name="settings_debug_messages_title">Laat informatie zien voor het oplossen van problemen</string> + <string name="error_couldnt_determine_openhab_url">openHAB URL kon niet worden vastgesteld</string> + <string name="unknown">Onbekend</string> + <string name="error_network_type_unsupported">Netwerktype (%s) wordt niet ondersteund</string> + <string name="set">Stel in</string> + <string name="cancel">Annuleer</string> + <string name="close">Sluiten</string> + <string name="try_again_button">Opnieuw proberen</string> + <string name="enable_wifi_button">Wi-Fi inschakelen</string> + <string name="go_to_settings_button">Ga naar instellingen</string> + <string name="enable_demo_mode_button">Demo modus inschakelen</string> + <string name="no_remote_server">Verbinding met lokale server mislukt en geen externe server geconfigureerd</string> + <string name="resolving_openhab">Proberen om openHAB server automatisch te vinden\u2026</string> + <string name="waiting_for_wifi">Wachten op Wi-Fi om verbinding te maken\u2026</string> + <!-- Log --> + <string name="log">Logboek</string> + <string name="view_log">Bekijk log</string> + <string name="clear_log">Logboek leegmaken</string> + <string name="empty_log">Logboek is leeg</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Open rolluik</string> + <string name="content_description_stop_roller_shutter">Stop rolluik</string> + <string name="content_description_close_roller_shutter">Sluit rolluik</string> + <string name="content_description_open_color_wheel">Open kleurenwiel</string> + <string name="content_description_color_up">Aan of ingedrukt houden om feller te maken</string> + <string name="content_description_color_down">Uit of ingedrukt houden om minder fel te maken</string> + <string name="content_description_open_number_picker">Open nummer kiezer</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Open openHAB</string> + <string name="content_description_increase_item_value">Verhoog de waarde</string> + <string name="content_description_decrease_item_value">Verlaag de waarde</string> + <string name="swipe_to_refresh_description">De app wordt ook automatisch vernieuwd, het is meestal niet nodig om dit handmatig te doen</string> + <string name="swipe_to_refresh_dismiss">Begrepen!</string> + <!-- Intro strings --> + <string name="app_intro">Introductie</string> + <string name="intro_welcome">Welkom bij openHAB</string> + <string name="intro_whatis">Leverancier en technologie onafhankelijke open source domotica software voor jouw huis</string> + <string name="intro_themes">Thema\'s</string> + <string name="intro_themes_description">Kies tussen de verschillende thema\'s</string> + <string name="intro_voice_description">Bestuur uw huis met uw stem</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Item controle kan worden verbonden met NFC tags door lang op het Item te drukken</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">OVERSLAAN</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">GEREED</string> </resources> diff --git a/mobile/src/main/res/values-no/strings.xml b/mobile/src/main/res/values-no/strings.xml index b8ac3360456dd6101f448731259cff30e678939e..b9eb9886103be606d18d11e64cc479cbf69deb46 100644 --- a/mobile/src/main/res/values-no/strings.xml +++ b/mobile/src/main/res/values-no/strings.xml @@ -1,195 +1,202 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Innstillinger</string> - <string name="app_notifications">Varslinger</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Lokasjonskart</string> - <string name="mainmenu_openhab_preferences">Innstillinger</string> - <string name="mainmenu_openhab_selectsitemap">Velg standard lokasjonskart</string> - <string name="mainmenu_openhab_clearcache">Tøm bildebuffer</string> - <!-- App settings strings --> - <string name="settings_connection_title">Kobling</string> - <string name="settings_display_title">Skjerm</string> - <string name="settings_misc_title">Diverse</string> - <string name="settings_openhab_url">Lokal server adresse</string> - <string name="settings_openhab_url_summary">Adressen til openHAB dashbord (basert på vertsnavn eller IP). Hvis konfigurert, er automatisk gjenkjenning deaktivert. Nåværende innstilling: %s</string> - <string name="settings_openhab_alturl">Ekstern server adresse</string> - <string name="settings_openhab_alturl_summary">Adressen til openHAB dashbord som blir brukt når den lokale adressen ikke er tilgjengelig. Nåværende innstilling: %s</string> - <string name="settings_openhab_username">Brukernavn</string> - <string name="settings_openhab_password">Passord</string> - <string name="settings_openhab_password_summary_weak">Svakt passord satt</string> - <string name="settings_openhab_password_summary_strong">Sterkt passord satt</string> - <string name="settings_openhab_sslclientcert">SSL klientsertifikat</string> - <string name="settings_openhab_sslclientcert_howto_summary">Trykk her for å få hint og forklaring på hvordan å sette opp SSL klientsertifikat autentisering</string> - <string name="settings_openhab_screentimeroff">Deaktiver skjermsparer</string> - <string name="settings_openhab_screentimeroff_summary">Deaktiver skjermsparer når openHAB kjører</string> - <string name="settings_openhab_demomode">Demomodus</string> - <string name="settings_openhab_demomode_summary">Kjør i demomodus</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Fullskjerm</string> - <string name="settings_openhab_fullscreen_summary">Visning i fullskjerm modus</string> - <string name="settings_openhab_icon_format">Ikonformatering</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vektor</string> - <string name="settings_chart_scaling">Kurveskalering</string> - <string name="settings_chart_scaling_summary">NB: Mindre skalering, forminsker tekst og linjebredde så det blir bedre plass for kurver, men lesbarhet kan forverres.</string> - <string name="settings_chart_scaling_value_xs">Veldig liten</string> - <string name="settings_chart_scaling_value_s">Liten</string> - <string name="settings_chart_scaling_value_m">Standard</string> - <string name="settings_chart_scaling_value_l">Stor</string> - <string name="settings_ringtone">Meldingstone</string> - <string name="settings_ringtone_none">Ingen</string> - <string name="settings_clear_default_sitemap">Tøm standard lokasjonskart</string> - <string name="settings_no_default_sitemap">Ingen standard lokasjonskart valgt</string> - <string name="settings_current_default_sitemap">Nåværende standard lokasjonskart: %1$s</string> - <string name="settings_openhab_alt_connection">Ekstern</string> - <string name="settings_openhab_connection">Lokal</string> - <string name="settings_notification_vibration">Meldingsvibrering</string> - <string name="settings_notification_vibration_off">Av</string> - <string name="settings_notification_vibration_short">Kort</string> - <string name="settings_notification_vibration_long">Lang</string> - <string name="settings_notification_vibration_twice">Dobbel</string> - <string name="settings_connection_summary">Koblet til %s</string> - <string name="settings_insecure_connection_summary">Usikkert koblet til %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB talekommandoer</string> - <string name="info_voice_input">openHAB, under din kommando!</string> - <string name="info_voice_recognized_text">Gjenkjent kommando: %1$s</string> - <string name="info_demo_mode_short">Kjører i demomodus</string> - <string name="info_conn_url">Kobler til lokal URL</string> - <string name="info_conn_rem_url">Kobler til ekstern URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB returnerte tom lokasjonskart-liste</string> - <string name="error_network_not_available">Nettverk er ikke tilgjengelig</string> - <string name="error_http_connection_failed">Tilkobling mislyktes. Mottok et uventet svar under forsøk på å koble til den konfigurerte openHAB-serveren (mottatt HTTP responskode: %d).</string> - <string name="error_invalid_url">Angi en gyldig URL-adresse i en \' http(s)://host(:port) / \" form</string> - <string name="error_connection_failed">Tilkobling til verten mislyktes</string> - <string name="error_unable_to_resolve_hostname">Kan ikke løse vertnavn</string> - <string name="error_connection_sslhandshake_failed">SSL-håndtrykk mislyktes</string> - <string name="error_certificate_not_trusted">SSL-sertifikatet er ikke klarert. Importer rotsertifikatet, eller godta sertifikatet under SSL-håndtrykk.</string> - <string name="error_certificate_expired">SSL-sertifikatet er utløpt. Hent et nytt sertifikat, eller godta sertifikatet under SSL-håndtrykk.</string> - <string name="error_certificate_not_valid_yet">SSL-sertifikatet er ikke gyldig ennå. Få et riktig sertifikat, eller godta sertifikatet under SSL-håndtrykk. Sjekk også om klokken på enheten er riktig angitt.</string> - <string name="error_certificate_revoked">SSL-sertifikatet er tilbakekalt. Hent et nytt sertifikat, eller godta sertifikatet under SSL-håndtrykk.</string> - <string name="error_certificate_wrong_host">Sertifikatet er ikke gyldig for %s</string> - <string name="error_http_code_401">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 401).</string> - <string name="error_http_code_403">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 403).</string> - <string name="error_http_code_407">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 407).</string> - <string name="error_http_code_414">Nettadressen er for lang. Bruk IP-adressen eller en kortere URL (HTTP responskode 414).</string> - <string name="error_http_code_426">HTTPS er nødvendig. Endre URL-adressen (HTTP responskode 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Godkjenning mislyktes. Kontroller det angitte SSL-klientsertifikatet (HTTP responskode 495).</string> - <string name="error_http_code_496">SSL klient sertifikat er påkrevd (HTTP respons kode 496)</string> - <string name="error_http_code_502">Din omvendte proxy fikk et ugyldig svar fra openHAB-serveren (HTTP-respons kode 502)</string> - <string name="error_http_code_503">openHAB-serveren er midlertidig utilgjengelig (HTTP-respons kode 503)</string> - <string name="error_http_code_504">Gateway tidsavbrudd. Det virker som din omvendte proxy er oppe, men den får ikke svar fra openHAB-serveren (HTTP-respons kode 504).</string> - <string name="error_http_code_507">openHAB-serveren har ikke nok ledig minne (HTTP-responskode 507)</string> - <string name="error_http_code_511">Nettverksautentisering påkrevd (HTTP-responskode 511)</string> - <string name="error_about_no_conn">Feil ved henting av informasjon fra openHAB-serveren</string> - <string name="error_openhab_offline">openHAB serveren er frakoblet mens cloud-instansen kjører</string> - <string name="error_no_app_store_found">Ingen app lager funnet for å installere stemme gjenkjenneren app</string> - <string name="title_activity_openhabwritetag">Skriv NFC tag</string> - <string name="title_activity_libraries">Brukte biblioteker</string> - <string name="info_write_tag">Berør tagen og hold den nær til bekreftelsesmeldingen vises</string> - <string name="info_write_tag_progress">Skriver tagen</string> - <string name="info_write_tag_finished">Fullført</string> - <string name="info_write_failed">Tag skrivefeil</string> - <string name="info_write_tag_unsupported">Denne enheten har ikke NFC støtte</string> - <string name="info_write_tag_disabled">NFC er deaktivert. Aktiver i enhetens innstillinger-meny.</string> - <string name="info_openhab_apiversion_label">openHAB Rest API versjon</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB hemmelighet</string> - <string name="info_openhab_push_notification_label">Push melding status</string> - <string name="action_settings">Innstillinger</string> - <string name="nfc_dialog_title">Skriv NFC handlinger for dette elementet</string> - <string name="info_not_set">Ikke angitt</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Ingen meldinger ble sendt så langt</string> - <string name="notification_list_error">Det oppstod en feil under lasting av meldinger</string> - <string name="list_loading_message">Laster inn\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Godta ukjent sertifikat?</string> - <string name="mtm_trust_anchor">Serversertifikatet er ikke signert av en kjent sertifiseringsinstans</string> - <string name="mtm_cert_expired">Serversertifikatet er utgått</string> - <string name="mtm_accept_servername">Aksepter feilaktig Server Navn?</string> - <string name="mtm_hostname_mismatch">Server kunne ikke authentiseres som \"%s\". Sertifikatet er kun gyldig for:</string> - <string name="mtm_connect_anyway">Vil du koble til uansett?</string> - <string name="mtm_cert_details">Sertifikatdetaljer:</string> - <string name="mtm_decision_always">Godta</string> - <string name="mtm_decision_once">En gang</string> - <string name="mtm_decision_abort">Avbryt</string> - <string name="mtm_notification">Sertifikatverifikasjon</string> - <string name="settings_openhab_none">Ingen</string> - <!-- Themes --> - <string name="theme_name_light">Lyst</string> - <string name="theme_name_dark">Mørkt</string> - <string name="theme_name_black">Svart/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI mørkt</string> - <!-- NFC --> - <string name="nfc_action_on">På</string> - <string name="nfc_action_up">Opp</string> - <string name="nfc_action_off">Av</string> - <string name="nfc_action_down">Ned</string> - <string name="nfc_action_toggle">Veksle</string> - <string name="nfc_activate">Aktivere</string> - <string name="nfc_action_current_color">Nåværende farge</string> - <string name="nfc_action_to_sitemap_page">Gå til lokasjonskart</string> - <!-- Drawer --> - <string name="drawer_open">Lokasjonskart mappe åpnet</string> - <string name="drawer_close">Lokasjonskart mappe lukket</string> - <string name="mainmenu_openhab_voice_recognition">Stemmegjenkjenning</string> - <!-- About --> - <string name="about_title">Om</string> - <string name="about_license_title">Lisens</string> - <string name="about_changelog">Endringslogg</string> - <string name="about_source_code">Kildekode</string> - <string name="about_issues">Rapporter et problem</string> - <string name="about_docs">Dokumentasjon</string> - <string name="about_community_forum">Brukerforum</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">openHABs fellesskap</string> - <string name="about_server">openHAB server</string> - <string name="about_translation">Hjelp oss å oversette openHAB</string> - <string name="about_privacy_policy">Personvernregler</string> - <string name="settings_debug_messages_title">Vis informasjon for feilsøking</string> - <string name="error_couldnt_determine_openhab_url">Kunne ikke bestemme URL for openHAB</string> - <string name="unknown">Ukjent</string> - <string name="error_network_type_unsupported">Nettverkstype (%s) støttes ikke</string> - <string name="set">Sett</string> - <string name="cancel">Avbryt</string> - <string name="close">Lukk</string> - <string name="try_again_button">Prøv igjen</string> - <string name="go_to_settings_button">Gå til innstillinger</string> - <string name="configuration_missing">openHAB-serveren kunne ikke oppdages automatisk. Konfigurer IP-addresse eller vertnavn i serverinnstillingene.</string> - <string name="no_remote_server">Lokalt nettverk er ikke tilgjengelig og du har ikke konfigurert en ekstern server</string> - <string name="resolving_openhab">Forsøker å finne openHAB-server instans\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Åpne rullegardiner</string> - <string name="content_description_stop_roller_shutter">Stopp rullegardiner</string> - <string name="content_description_close_roller_shutter">Lukk rullegardiner</string> - <string name="content_description_open_color_wheel">Åpne fargevelger</string> - <string name="content_description_color_up">På eller hold for å øke styrken</string> - <string name="content_description_color_down">Av eller hold for å senke styrken</string> - <string name="content_description_open_number_picker">Åpne nummervelger</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Åpne openHAB</string> - <string name="swipe_to_refresh_description">Appen oppdaterer seg automatisk, du behøver normalt ikke gjøre det manuelt</string> - <string name="swipe_to_refresh_dismiss">Jeg forstår!</string> - <!-- Intro strings --> - <string name="app_intro">Introduksjon</string> - <string name="intro_welcome">Velkommen til openHAB</string> - <string name="intro_whatis">En leverandør og teknologiuavhengig - åpen kildekode - automatiseringsprogramvare for hjemmet ditt</string> - <string name="intro_themes">Temaer</string> - <string name="intro_themes_description">Velg mellom flere temaer</string> - <string name="intro_voice_description">Styr hjemmet ditt med stemmen</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Element-kontrollen kan bindes til NFC koder ved å holde inne knappen til elementet</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">HOPP OVER</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">UTFØRT</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Innstillinger</string> + <string name="app_notifications">Varslinger</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Lokasjonskart</string> + <string name="mainmenu_openhab_preferences">Innstillinger</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Det oppstod en feil under innlasting av HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Velg standard lokasjonskart</string> + <string name="mainmenu_openhab_clearcache">Tøm bildebuffer</string> + <!-- App settings strings --> + <string name="settings_connection_title">Tilkobling</string> + <string name="settings_display_title">Skjerm</string> + <string name="settings_misc_title">Diverse</string> + <string name="settings_openhab_url">Lokal server adresse</string> + <string name="settings_openhab_url_summary">Adressen til openHAB dashbord (basert på vertsnavn eller IP). Hvis konfigurert, er automatisk gjenkjenning deaktivert. Nåværende innstilling: %s</string> + <string name="settings_openhab_alturl">Ekstern server adresse</string> + <string name="settings_openhab_alturl_summary">Adressen til openHAB dashbord som blir brukt når den lokale adressen ikke er tilgjengelig. Nåværende innstilling: %s</string> + <string name="settings_openhab_username">Brukernavn</string> + <string name="settings_openhab_password">Passord</string> + <string name="settings_openhab_password_summary_weak">Svakt passord valgt</string> + <string name="settings_openhab_password_summary_strong">Sterkt passord valgt</string> + <string name="settings_openhab_sslclientcert">SSL klientsertifikat</string> + <string name="settings_openhab_sslclientcert_howto_summary">Trykk her for å få hint og forklaring på hvordan å sette opp SSL klientsertifikat autentisering</string> + <string name="settings_openhab_screentimeroff">Deaktiver skjermsparer</string> + <string name="settings_openhab_screentimeroff_summary">Deaktiver skjermsparer når openHAB kjører</string> + <string name="settings_openhab_demomode">Demomodus</string> + <string name="settings_openhab_demomode_summary">Hvis du ikke har en openHAB server, aktiver demomodus for å få en oversikt over hva openHAB er i stand til.</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Fullskjerm</string> + <string name="settings_openhab_fullscreen_summary">Visning i fullskjerm modus</string> + <string name="settings_openhab_icon_format">Ikonformatering</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vektor</string> + <string name="settings_chart_scaling">Kurveskalering</string> + <string name="settings_chart_scaling_summary">NB: Mindre skalering, forminsker tekst og linjebredde så det blir bedre plass for kurver, men lesbarhet kan forverres.</string> + <string name="settings_chart_scaling_value_xs">Veldig liten</string> + <string name="settings_chart_scaling_value_s">Liten</string> + <string name="settings_chart_scaling_value_m">Standard</string> + <string name="settings_chart_scaling_value_l">Stor</string> + <string name="settings_openhab_chart_hq">Høy-oppløste diagrammer</string> + <string name="settings_openhab_chart_hq_summary">Generering av diagrammer kan være tungt for serveren. Hvis du opplever treg diagram-innlasting og serveren ikke er kraftig, kan du deaktivere dette alternativet for å forbedre lastingen.</string> + <string name="settings_ringtone">Meldingstone</string> + <string name="settings_ringtone_none">Ingen</string> + <string name="settings_clear_default_sitemap">Tøm standard lokasjonskart</string> + <string name="settings_no_default_sitemap">Ingen standard lokasjonskart valgt</string> + <string name="settings_current_default_sitemap">Nåværende standard lokasjonskart: %1$s</string> + <string name="settings_openhab_alt_connection">Ekstern</string> + <string name="settings_openhab_connection">Lokal</string> + <string name="settings_notification_vibration">Meldingsvibrering</string> + <string name="settings_notification_vibration_off">Av</string> + <string name="settings_notification_vibration_short">Kort</string> + <string name="settings_notification_vibration_long">Lang</string> + <string name="settings_notification_vibration_twice">Dobbel</string> + <string name="settings_notification_ringtone_vibration">Varslingsinnstillinger</string> + <string name="settings_connection_summary">Koblet til %s</string> + <string name="settings_insecure_connection_summary">Usikkert koblet til %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Talekommandoer</string> + <string name="title_voice_widget_icon">Talekommandoer og app snarvei</string> + <string name="info_voice_input">openHAB, under din kommando!</string> + <string name="info_voice_recognized_text">Gjenkjent kommando: %1$s</string> + <string name="info_demo_mode_short">Kjører i demomodus</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Kobler til lokal URL</string> + <string name="info_conn_rem_url">Kobler til ekstern URL</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB returnerte tom lokasjonskart-liste</string> + <string name="error_network_not_available">Nettverk er ikke tilgjengelig</string> + <string name="error_http_connection_failed">Tilkobling mislyktes. Mottok et uventet svar under forsøk på å koble til den konfigurerte openHAB-serveren (mottatt HTTP responskode: %d).</string> + <string name="error_invalid_url">Angi en gyldig URL-adresse i en \' http(s)://host(:port) / \" form</string> + <string name="error_connection_failed">Tilkobling til verten mislyktes</string> + <string name="error_unable_to_resolve_hostname">Kan ikke løse vertnavn</string> + <string name="error_connection_sslhandshake_failed">SSL-håndtrykk mislyktes</string> + <string name="error_certificate_not_trusted">SSL-sertifikatet er ikke klarert. Importer rotsertifikatet, eller godta sertifikatet under SSL-håndtrykk.</string> + <string name="error_certificate_expired">SSL-sertifikatet er utløpt. Hent et nytt sertifikat, eller godta sertifikatet under SSL-håndtrykk.</string> + <string name="error_certificate_not_valid_yet">SSL-sertifikatet er ikke gyldig ennå. Få et riktig sertifikat, eller godta sertifikatet under SSL-håndtrykk. Sjekk også om klokken på enheten er riktig angitt.</string> + <string name="error_certificate_revoked">SSL-sertifikatet er tilbakekalt. Hent et nytt sertifikat, eller godta sertifikatet under SSL-håndtrykk.</string> + <string name="error_certificate_wrong_host">Sertifikatet er ikke gyldig for %s</string> + <string name="error_http_code_401">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 401).</string> + <string name="error_http_code_403">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 403).</string> + <string name="error_http_code_407">Godkjenning mislyktes. Kontroller konfigurerte brukernavn og passord iht. angitt SSL-klientsertifikat (HTTP responskode 407).</string> + <string name="error_http_code_414">Nettadressen er for lang. Bruk IP-adressen eller en kortere URL (HTTP responskode 414).</string> + <string name="error_http_code_426">HTTPS er nødvendig. Endre URL-adressen (HTTP responskode 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Godkjenning mislyktes. Kontroller det angitte SSL-klientsertifikatet (HTTP responskode 495).</string> + <string name="error_http_code_496">SSL klient sertifikat er påkrevd (HTTP respons kode 496)</string> + <string name="error_http_code_502">Din omvendte proxy fikk et ugyldig svar fra openHAB-serveren (HTTP-respons kode 502)</string> + <string name="error_http_code_503">openHAB-serveren er midlertidig utilgjengelig (HTTP-respons kode 503)</string> + <string name="error_http_code_504">Gateway tidsavbrudd. Det virker som din omvendte proxy er oppe, men den får ikke svar fra openHAB-serveren (HTTP-respons kode 504).</string> + <string name="error_http_code_507">openHAB-serveren har ikke nok ledig minne (HTTP-responskode 507)</string> + <string name="error_http_code_511">Nettverksautentisering påkrevd (HTTP-responskode 511)</string> + <string name="error_about_no_conn">Feil ved henting av informasjon fra openHAB-serveren</string> + <string name="error_openhab_offline">openHAB serveren er frakoblet mens cloud-instansen kjører</string> + <string name="title_activity_openhabwritetag">Skriv NFC tag</string> + <string name="title_activity_libraries">Brukte biblioteker</string> + <string name="info_write_tag">Berør tagen og hold den nær til bekreftelsesmeldingen vises</string> + <string name="info_write_tag_progress">Skriver tagen</string> + <string name="info_write_tag_finished">Fullført</string> + <string name="info_write_failed">Tag skrivefeil</string> + <string name="info_write_tag_unsupported">Denne enheten har ikke NFC støtte</string> + <string name="info_write_tag_disabled">NFC er deaktivert. Aktiver i enhetens innstillinger-meny.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API versjon</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB hemmelighet</string> + <string name="info_openhab_push_notification_label">Push melding status</string> + <string name="action_settings">Innstillinger</string> + <string name="nfc_dialog_title">Skriv NFC handlinger for dette elementet</string> + <string name="info_not_set">Ikke angitt</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Ingen meldinger ble sendt så langt</string> + <string name="notification_list_error">Det oppstod en feil under lasting av meldinger</string> + <string name="list_loading_message">Laster inn\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Godta ukjent sertifikat?</string> + <string name="mtm_trust_anchor">Serversertifikatet er ikke signert av en kjent sertifiseringsinstans</string> + <string name="mtm_cert_expired">Serversertifikatet er utgått</string> + <string name="mtm_accept_servername">Aksepter feilaktig Server Navn?</string> + <string name="mtm_hostname_mismatch">Server kunne ikke authentiseres som \"%s\". Sertifikatet er kun gyldig for:</string> + <string name="mtm_connect_anyway">Vil du koble til uansett?</string> + <string name="mtm_cert_details">Sertifikatdetaljer:</string> + <string name="mtm_decision_always">Godta</string> + <string name="mtm_decision_once">En gang</string> + <string name="mtm_decision_abort">Avbryt</string> + <string name="mtm_notification">Sertifikatverifikasjon</string> + <string name="settings_openhab_none">Ingen</string> + <!-- Themes --> + <string name="theme_name_light">Lyst</string> + <string name="theme_name_dark">Mørkt</string> + <string name="theme_name_black">Svart/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI mørkt</string> + <!-- NFC --> + <string name="nfc_action_on">På</string> + <string name="nfc_action_up">Opp</string> + <string name="nfc_action_off">Av</string> + <string name="nfc_action_down">Ned</string> + <string name="nfc_action_toggle">Veksle</string> + <string name="nfc_activate">Aktivere</string> + <string name="nfc_action_current_color">Nåværende farge</string> + <string name="nfc_action_to_sitemap_page">Gå til lokasjonskart</string> + <!-- Drawer --> + <string name="drawer_open">Lokasjonskart mappe åpnet</string> + <string name="drawer_close">Lokasjonskart mappe lukket</string> + <string name="mainmenu_openhab_voice_recognition">Stemmegjenkjenning</string> + <!-- About --> + <string name="about_title">Om</string> + <string name="about_license_title">Lisens</string> + <string name="about_changelog">Endringslogg</string> + <string name="about_source_code">Kildekode</string> + <string name="about_issues">Rapporter et problem</string> + <string name="about_docs">Dokumentasjon</string> + <string name="about_community_forum">Brukerforum</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">openHABs fellesskap</string> + <string name="about_server">openHAB server</string> + <string name="about_translation">Hjelp oss å oversette openHAB</string> + <string name="about_privacy_policy">Personvernregler</string> + <string name="settings_debug_messages_title">Vis informasjon for feilsøking</string> + <string name="error_couldnt_determine_openhab_url">Kunne ikke bestemme URL for openHAB</string> + <string name="unknown">Ukjent</string> + <string name="error_network_type_unsupported">Nettverkstype (%s) støttes ikke</string> + <string name="set">Sett</string> + <string name="cancel">Avbryt</string> + <string name="close">Lukk</string> + <string name="try_again_button">Prøv igjen</string> + <string name="go_to_settings_button">Gå til innstillinger</string> + <string name="resolving_openhab">Forsøker å finne openHAB-server instans\u2026</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Åpne rullegardiner</string> + <string name="content_description_stop_roller_shutter">Stopp rullegardiner</string> + <string name="content_description_close_roller_shutter">Lukk rullegardiner</string> + <string name="content_description_open_color_wheel">Åpne fargevelger</string> + <string name="content_description_color_up">På eller hold for å øke styrken</string> + <string name="content_description_color_down">Av eller hold for å senke styrken</string> + <string name="content_description_open_number_picker">Åpne nummervelger</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Åpne openHAB</string> + <string name="swipe_to_refresh_description">Appen oppdaterer seg automatisk, du behøver normalt ikke gjøre det manuelt</string> + <string name="swipe_to_refresh_dismiss">Jeg forstår!</string> + <!-- Intro strings --> + <string name="app_intro">Introduksjon</string> + <string name="intro_welcome">Velkommen til openHAB</string> + <string name="intro_whatis">En leverandør og teknologiuavhengig - åpen kildekode - automatiseringsprogramvare for hjemmet ditt</string> + <string name="intro_themes">Temaer</string> + <string name="intro_themes_description">Velg mellom flere temaer</string> + <string name="intro_voice_description">Styr hjemmet ditt med stemmen</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Element-kontrollen kan bindes til NFC koder ved å holde inne knappen til elementet</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">HOPP OVER</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">UTFØRT</string> </resources> diff --git a/mobile/src/main/res/values-pl/strings.xml b/mobile/src/main/res/values-pl/strings.xml index 988d82c28834821d8bba86b269564086651191b6..d93c0f0d7f895e8adf98fa30c368b0f2bdf00ca2 100644 --- a/mobile/src/main/res/values-pl/strings.xml +++ b/mobile/src/main/res/values-pl/strings.xml @@ -1,132 +1,220 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Ustawienia</string> - <string name="app_notifications">Powiadomienia</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Mapy witryn</string> - <string name="mainmenu_openhab_preferences">Ustawienia</string> - <string name="mainmenu_openhab_clearcache">Wyczyść obrazy pamięci podręcznej</string> - <!-- App settings strings --> - <string name="settings_connection_title">Ustawienia połączenia</string> - <string name="settings_display_title">Wyświetlanie</string> - <string name="settings_misc_title">Różne ustawienia</string> - <string name="settings_openhab_url">Adres URL serwera lokalnego</string> - <string name="settings_openhab_url_summary">Adres URL panelu openHAB (w oparciu o nazwę hosta lub adres IP). Jeśli skonfigurowany, autowykrywanie jest wyłączone. Obecne ustawienie: %s</string> - <string name="settings_openhab_alturl">Adres URL serwera zdalnego</string> - <string name="settings_openhab_alturl_summary">Adres URL panelu openHAB jest używany, kiedy adres lokalny jest niedostępny. Obecne ustawienie: %s</string> - <string name="settings_openhab_username">Nazwa użytkownika</string> - <string name="settings_openhab_password">Hasło</string> - <string name="settings_openhab_sslclientcert">Certyfikat klienta SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Naciśnij tutaj, aby uzyskać kilka wskazówek i wyjaśnień o tym, jak skonfigurować autoryzację certyfikatu klienta SSL</string> - <string name="settings_openhab_screentimeroff">Wyłącz wyświetlanie zegara</string> - <string name="settings_openhab_screentimeroff_summary">Wyłącz wyświetlanie wyłącznik zegara, kiedy openHAB jest włączony</string> - <string name="settings_openhab_demomode">Wersja demonstracyjna</string> - <string name="settings_openhab_demomode_summary">Uruchom w trybie demonstracyjnym</string> - <string name="settings_openhab_theme">Motyw</string> - <string name="settings_openhab_fullscreen">Pełny ekran</string> - <string name="settings_openhab_fullscreen_summary">Wyświetl w trybie pełnego ekranu</string> - <string name="settings_openhab_icon_format">Format ikon</string> - <string name="settings_openhab_icon_format_png">Mapa bitowa</string> - <string name="settings_openhab_icon_format_svg">Wektor</string> - <string name="settings_openhab_alt_connection">Ustawienia serwera zdalnego</string> - <string name="settings_openhab_connection">Ustawienia serwera lokalnego</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB, na twoje wezwanie!</string> - <string name="info_voice_recognized_text">Rozpoznana komenda: %1$s</string> - <string name="info_demo_mode_short">Uruchomiono w trybie demonstracyjnym</string> - <string name="info_conn_url">Łączenie z lokalnym URL</string> - <string name="info_conn_rem_url">Łączenie ze zdalnym adresem URL</string> - <!-- Error messages --> - <string name="error_network_not_available">Sieć jest niedostępna</string> - <string name="error_invalid_url">Proszę wprowadź poprawny adres URL w formie \'protokół://host:port/\'</string> - <string name="error_connection_failed">Połączenie z hostem nie powiodło się</string> - <string name="error_unable_to_resolve_hostname">Nie można określić nazwy hosta</string> - <string name="error_connection_sslhandshake_failed">Uzgadnianie SSL nie powiodło się - może potrzebujesz właściwego certyfikatu klienta</string> - <string name="error_certificate_wrong_host">Certyfikat SSL dla %s jest nieprawidłowy</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">Certyfikat klienta SSL jest wymagany (kod odpowiedzi HTTP 496)</string> - <string name="error_http_code_502">Twój odwrócony serwer proxy otrzymał nieprawidłową odpowiedź od openHAB (kod odpowiedzi HTTP 502)</string> - <string name="error_http_code_503">openHAB jest tymczasowo niedostępny (kod odpowiedzi HTTP 503)</string> - <string name="error_http_code_507">openHAB nie ma wystarczająco wolnego miejsca (Kod HTTP - 507)</string> - <string name="error_http_code_511">Autoryzacja sieci jest wymagana (Kod HTTP - 511)</string> - <string name="error_about_no_conn">Wystąpił błąd podczas pobierania informacji o serwerze openHAB</string> - <string name="title_activity_openhabwritetag">Napisz tag NFC</string> - <string name="info_write_tag">Kliknij na tag i przytrzymaj dopóki wiadomość informacyjna się nie pokaże</string> - <string name="info_write_tag_progress">Pisanie tagu</string> - <string name="info_write_tag_finished">Zakończono pomyślnie</string> - <string name="info_write_failed">Błąd pisania tag\'u</string> - <string name="info_write_tag_unsupported">To urządzenie nie wspiera technologii NFC</string> - <string name="info_write_tag_disabled">NFC jest wyłączone. Uruchom je w menu ustawień swojego urządzenia.</string> - <string name="info_openhab_apiversion_label">wersja Rest API openHAB</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">sekret openHAB</string> - <string name="action_settings">Ustawienia</string> - <string name="nfc_dialog_title">Napisz akcję tagu NFC dla tego elementu</string> - <string name="info_not_set">Nie ustawiono</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Jednorazowo</string> - <string name="mtm_decision_abort">Anuluj</string> - <string name="mtm_notification">Weryfikacja certyfikatu</string> - <!-- Themes --> - <string name="theme_name_light">Jasny</string> - <string name="theme_name_dark">Ciemny</string> - <string name="theme_name_black">Czarny/AMOLED</string> - <string name="theme_name_basic_ui">Podstawowy interfejs użytkownika</string> - <string name="theme_name_basic_ui_dark">Podstawowy interfejs użytkownika ciemny</string> - <!-- NFC --> - <string name="nfc_action_on">Włączony</string> - <string name="nfc_action_up">W górę</string> - <string name="nfc_action_off">Wyłączony</string> - <string name="nfc_action_down">W dół</string> - <string name="nfc_action_toggle">Przełącz</string> - <string name="nfc_activate">Aktywuj</string> - <string name="nfc_action_current_color">Bieżący kolor</string> - <!-- Drawer --> - <string name="drawer_open">Szuflada map witryn otwarta</string> - <string name="drawer_close">Szuflada map witryn zamknięta</string> - <string name="mainmenu_openhab_voice_recognition">Rozpoznawanie głosu</string> - <!-- About --> - <string name="about_title">O</string> - <string name="about_license_title">Licencja</string> - <string name="about_changelog">Lista zmian</string> - <string name="about_issues">Zgłoś problem</string> - <string name="about_docs">Dokumentacja</string> - <string name="about_community_forum">Forum społeczności</string> - <string name="about_foundation">Fundacja openHAB</string> - <string name="about_community">Społeczność openHAB</string> - <string name="about_server">Serwer openHAB</string> - <string name="about_translation">Pomóż nam tłumaczyć openHAB</string> - <string name="error_couldnt_determine_openhab_url">Nie można określić adresu URL openHAB</string> - <string name="unknown">Nieznane</string> - <string name="error_network_type_unsupported">Typ sieci (%s) nie jest wspierany</string> - <string name="set">Wybierz</string> - <string name="cancel">Anuluj</string> - <string name="try_again_button">Spróbuj ponownie</string> - <string name="go_to_settings_button">Przejdź do ustawień</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Otwórz roletę</string> - <string name="content_description_stop_roller_shutter">Zatrzymaj roletę</string> - <string name="content_description_close_roller_shutter">Zamknij roletę</string> - <string name="content_description_open_color_wheel">Otwórz paletę kolorów</string> - <string name="content_description_color_up">Włącz lub przytrzymaj by rozjaśnić</string> - <string name="content_description_color_down">Wyłącz lub przytrzymaj by przyciemnić</string> - <string name="content_description_open_number_picker">Otwórz klawiaturę numeryczną</string> - <string name="content_description_video">Wideo</string> - <string name="content_description_open_openhab">Otwórz openHAB</string> - <string name="swipe_to_refresh_dismiss">Rozumiem!</string> - <!-- Intro strings --> - <string name="app_intro">Wprowadzenie</string> - <string name="intro_welcome">Witaj w openHAB</string> - <string name="intro_whatis">Otwarte oprogramowanie do automatyzacji Twojego domu</string> - <string name="intro_themes">Motywy</string> - <string name="intro_themes_description">Wybierz spośród wielu motywów</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">POMIŃ</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">GOTOWE</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Ustawienia</string> + <string name="app_notifications">Powiadomienia</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Mapy witryn</string> + <string name="mainmenu_openhab_preferences">Ustawienia</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Wystąpił błąd podczas wczytywania HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Wybierz domyślną mapę witryn</string> + <string name="mainmenu_openhab_clearcache">Wyczyść obrazy pamięci podręcznej</string> + <!-- App settings strings --> + <string name="settings_connection_title">Ustawienia połączenia</string> + <string name="settings_display_title">Wyświetlanie</string> + <string name="settings_misc_title">Różne ustawienia</string> + <string name="settings_openhab_url">Adres URL serwera lokalnego</string> + <string name="settings_openhab_url_summary">Adres URL panelu openHAB (w oparciu o nazwę hosta lub adres IP). Jeśli skonfigurowany, autowykrywanie jest wyłączone. Obecne ustawienie: %s</string> + <string name="settings_openhab_alturl">Adres URL serwera zdalnego</string> + <string name="settings_openhab_alturl_summary">Adres URL panelu openHAB jest używany, kiedy adres lokalny jest niedostępny. Obecne ustawienie: %s</string> + <string name="settings_openhab_username">Nazwa użytkownika</string> + <string name="settings_openhab_password">Hasło</string> + <string name="settings_openhab_password_summary_weak">Ustawiono słabe hasło</string> + <string name="settings_openhab_password_summary_strong">Ustawiono mocne hasło</string> + <string name="settings_openhab_sslclientcert">Certyfikat klienta SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Naciśnij tutaj, aby uzyskać kilka wskazówek i wyjaśnień o tym, jak skonfigurować autoryzację certyfikatu klienta SSL</string> + <string name="settings_openhab_screentimeroff">Wyłącz wyświetlanie zegara</string> + <string name="settings_openhab_screentimeroff_summary">Wyłącz wyświetlanie wyłącznik zegara, kiedy openHAB jest włączony</string> + <string name="settings_openhab_demomode">Wersja demonstracyjna</string> + <string name="settings_openhab_demomode_summary">Jeśli nie masz serwera openHAB, włącz tryb demo aby zobaczyć co potrafi.</string> + <string name="settings_openhab_theme">Motyw</string> + <string name="settings_openhab_fullscreen">Pełny ekran</string> + <string name="settings_openhab_fullscreen_summary">Wyświetl w trybie pełnego ekranu</string> + <string name="settings_openhab_icon_format">Format ikon</string> + <string name="settings_openhab_icon_format_png">Mapa bitowa</string> + <string name="settings_openhab_icon_format_svg">Wektor</string> + <string name="settings_chart_scaling">Skalowanie wykresu</string> + <string name="settings_chart_scaling_summary">Uwaga: Mniejsze skalowanie zmniejsza czcionki i szerokość linii, więc jest więcej miejsca na wykresy, ale czytelność czcionki może ucierpieć.</string> + <string name="settings_chart_scaling_value_xs">Bardzo mały</string> + <string name="settings_chart_scaling_value_s">Mały</string> + <string name="settings_chart_scaling_value_m">Domyślny</string> + <string name="settings_chart_scaling_value_l">Duży</string> + <string name="settings_openhab_chart_hq">Wykresy wysokiej rozdzielczości</string> + <string name="settings_openhab_chart_hq_summary">Generowanie wykresów możne spowolnić serwer. Jeśli wykresy ładują się wolno a twój serwer nie jest wystarczająco szybki wyłącz tę opcję, aby poprawić czas ładowania.</string> + <string name="settings_ringtone">Dzwonek powiadomienia</string> + <string name="settings_ringtone_none">Żaden</string> + <string name="settings_clear_default_sitemap">Wyczyść domyślną Sitemap</string> + <string name="settings_no_default_sitemap">Nie wybrano domyślnej Sitemap</string> + <string name="settings_current_default_sitemap">Bieżąca domyślna Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Ustawienia serwera zdalnego</string> + <string name="settings_openhab_connection">Ustawienia serwera lokalnego</string> + <string name="settings_notification_vibration">Wibracja powiadomienia</string> + <string name="settings_notification_vibration_off">Wyłączone</string> + <string name="settings_notification_vibration_short">Krótkie</string> + <string name="settings_notification_vibration_long">Długie</string> + <string name="settings_notification_vibration_twice">Podwójne</string> + <string name="settings_notification_ringtone_vibration">Ustawienia powiadomień</string> + <string name="settings_connection_summary">Połączono z %s</string> + <string name="settings_insecure_connection_summary">Połączono z %s niebezpiecznym połączeniem</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Polecenia głosowe</string> + <string name="title_voice_widget_icon">Polecenia głosowe i skrót do aplikacji</string> + <string name="info_voice_input">openHAB, na twoje wezwanie!</string> + <string name="info_voice_recognized_text">Rozpoznana komenda: %1$s</string> + <string name="info_demo_mode_short">Uruchomiono w trybie demonstracyjnym</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Wyłącz</string> + <string name="info_conn_url">Łączenie z lokalnym URL</string> + <string name="info_conn_rem_url">Łączenie ze zdalnym adresem URL</string> + <string name="app_shortcut_diabled_habpanel">Na twoim serwerze nie ma zainstalowanego HABPanel</string> + <string name="app_shortcut_diabled_notifications">Twój serwer zdalny jest niedostępny</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB zwrócił pustą listę Sitemap</string> + <string name="error_network_not_available">Sieć jest niedostępna</string> + <string name="error_wifi_not_available">Wi-Fi jest wyłączone</string> + <string name="error_http_connection_failed">Połączenie nie powiodło się. Otrzymano nieoczekiwaną odpowiedź podczas próby połączenia z skonfigurowanym serwerem openHAB (kod odpowiedzi HTTP otrzymane: %d).</string> + <string name="error_invalid_url">Proszę wprowadź poprawny adres URL w formie \'protokół://host:port/\'</string> + <string name="error_port_seems_invalid">Port który wybrałeś jest niepoprawny dla wybranego protokołu</string> + <string name="error_connection_failed">Połączenie z hostem nie powiodło się</string> + <string name="error_unable_to_resolve_hostname">Nie można określić nazwy hosta</string> + <string name="error_connection_sslhandshake_failed">Uzgadnianie SSL nie powiodło się - może potrzebujesz właściwego certyfikatu klienta</string> + <string name="error_certificate_not_trusted">Certyfikat SSL nie jest zaufany. Proszę zaimportuj certyfikat root lub wyłącz sprawdzanie poprawności certyfikatu podczas SSL handshake.</string> + <string name="error_certificate_expired">Certyfikat SSL stracił ważność. Proszę uzyskaj nowy certyfikat lub wyłącz sprawdzanie poprawności certyfikatu podczas SSL handshake.</string> + <string name="error_certificate_not_valid_yet">Certyfikat SSL nie jest jeszcze ważny. Proszę uzyskać poprawny certyfikat lub zaakceptować certyfikat podczas SSL handshake. Sprawdzić też, czy zegar na urządzeniu jest poprawnie ustawiona.</string> + <string name="error_certificate_invalid_date">Certyfikat SSL ma niepoprawną datę. Proszę uzyskaj poprawny certyfikat i sprawdź czy zegar na twoim urządzeniu jest ustawiony poprawnie.</string> + <string name="error_certificate_revoked">Certyfikat SSL został unieważniony. Proszę uzyskaj nowy certyfikat lub wyłącz sprawdzanie poprawności certyfikatu podczas SSL handshake.</string> + <string name="error_certificate_wrong_host">Certyfikat SSL dla %s jest nieprawidłowy</string> + <string name="error_http_to_https_port">Nieoczekiwany koniec strumienia. Czy próbujesz podłączyć do portu HTTPS za pośrednictwem protokołu HTTP?</string> + <string name="error_http_code_401">Autoryzacja nie powiodła się. Proszę sprawdź nazwę użytkownika i hasło dla dostarczonego certyfikatu klienta SSL (kod odpowiedzi HTTP 401).</string> + <string name="error_http_code_403">Autoryzacja nie powiodła się. Proszę sprawdź nazwę użytkownika i hasło dla dostarczonego certyfikatu klienta SSL (kod odpowiedzi HTTP 403).</string> + <string name="error_http_code_407">Autoryzacja użytkownika nie powiodła się. Sprawdź nazwę użytkownika, hasło i certyfikat klienta SSL (kod odpowiedzi HTTP 407).</string> + <string name="error_http_code_414">Adres URL jest zbyt długi. Użyj adresu IP lub któtszego URL\'a (kod odpowiedzi HTTP 414).</string> + <string name="error_http_code_426">HTTPS jest wymagany. Zmień adres URL openHAB (kod odpowiedzi HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autoryzacja nie powiodła się. Sprawdź certyfikat SSL klienta (kod odpowiedzi HTTP 495).</string> + <string name="error_http_code_496">Certyfikat klienta SSL jest wymagany (kod odpowiedzi HTTP 496)</string> + <string name="error_http_code_502">Twój odwrócony serwer proxy otrzymał nieprawidłową odpowiedź od openHAB (kod odpowiedzi HTTP 502)</string> + <string name="error_http_code_503">openHAB jest tymczasowo niedostępny (kod odpowiedzi HTTP 503)</string> + <string name="error_http_code_504">Przekroczenie czasu oczekiwania. Wygląda na to, że twój serwer zwrotny proxy jest włączony, ale nie otrzymał odpowiedzi od openHAB (Kod HTTP - 504).</string> + <string name="error_http_code_507">openHAB nie ma wystarczająco wolnego miejsca (Kod HTTP - 507)</string> + <string name="error_http_code_511">Autoryzacja sieci jest wymagana (Kod HTTP - 511)</string> + <string name="error_about_no_conn">Wystąpił błąd podczas pobierania informacji o serwerze openHAB</string> + <string name="error_openhab_offline">Twój serwer openHAB nie jest podłączony, ale instancja cloud pracuje prawidłowo</string> + <string name="title_activity_openhabwritetag">Napisz tag NFC</string> + <string name="title_activity_libraries">Użyte biblioteki</string> + <string name="info_write_tag">Kliknij na tag i przytrzymaj dopóki wiadomość informacyjna się nie pokaże</string> + <string name="info_write_tag_progress">Pisanie tagu</string> + <string name="info_write_tag_finished">Zakończono pomyślnie</string> + <string name="info_write_failed">Błąd pisania tag\'u</string> + <string name="info_write_tag_unsupported">To urządzenie nie wspiera technologii NFC</string> + <string name="info_write_tag_disabled">NFC jest wyłączone. Uruchom je w menu ustawień swojego urządzenia.</string> + <string name="info_openhab_apiversion_label">wersja Rest API openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">sekret openHAB</string> + <string name="info_openhab_push_notification_label">Stan powiadomień push</string> + <string name="action_settings">Ustawienia</string> + <string name="nfc_dialog_title">Napisz akcję tagu NFC dla tego elementu</string> + <string name="info_not_set">Nie ustawiono</string> + <string name="empty_page">Ta strona nie zawiera żadnych widżetów ustawionych jako widoczne</string> + <!-- Background tasks --> + <string name="retry">Ponów</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Jeszcze nie wysłano żadnych powiadomień</string> + <string name="notification_list_error">Wystąpił błąd podczas ładowania powiadomień</string> + <string name="list_loading_message">Wczytywanie\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Zaakceptować nieznany certyfikat?</string> + <string name="mtm_trust_anchor">Certyfikat serwera nie jest podpisany przez znane centrum certyfikacji</string> + <string name="mtm_cert_expired">Ważność certyfikatu serwera wygasła</string> + <string name="mtm_accept_servername">Zaakceptować niepasującą nazwę serwera?</string> + <string name="mtm_hostname_mismatch">Serwer nie mógł uwierzytelnić się jako \"%s\". Certyfikat jest ważny tylko dla:</string> + <string name="mtm_connect_anyway">Czy połączyć mimo to?</string> + <string name="mtm_cert_details">Szczegóły certyfikatu:</string> + <string name="mtm_decision_always">Akceptuj</string> + <string name="mtm_decision_once">Jednorazowo</string> + <string name="mtm_decision_abort">Anuluj</string> + <string name="mtm_notification">Weryfikacja certyfikatu</string> + <string name="settings_openhab_none">Brak</string> + <!-- Themes --> + <string name="theme_name_light">Jasny</string> + <string name="theme_name_dark">Ciemny</string> + <string name="theme_name_black">Czarny/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI ciemny</string> + <!-- NFC --> + <string name="nfc_action_on">Włączony</string> + <string name="nfc_action_up">W górę</string> + <string name="nfc_action_off">Wyłączony</string> + <string name="nfc_action_down">W dół</string> + <string name="nfc_action_toggle">Przełącz</string> + <string name="nfc_activate">Aktywuj</string> + <string name="nfc_action_current_color">Bieżący kolor</string> + <string name="nfc_action_to_sitemap_page">Przejdź do mapy witryn</string> + <!-- Drawer --> + <string name="drawer_open">Szuflada map witryn otwarta</string> + <string name="drawer_close">Szuflada map witryn zamknięta</string> + <string name="mainmenu_openhab_voice_recognition">Rozpoznawanie głosu</string> + <!-- About --> + <string name="about_title">O programie</string> + <string name="about_license_title">Licencja</string> + <string name="about_changelog">Lista zmian</string> + <string name="about_source_code">Kod źródłowy</string> + <string name="about_issues">Zgłoś problem</string> + <string name="about_docs">Dokumentacja</string> + <string name="about_community_forum">Forum społeczności</string> + <string name="about_foundation">Fundacja openHAB</string> + <string name="about_community">Społeczność openHAB</string> + <string name="about_server">Serwer openHAB</string> + <string name="about_translation">Pomóż nam tłumaczyć openHAB</string> + <string name="about_privacy_policy">Polityka prywatności</string> + <string name="settings_debug_messages_title">Wyświetl informacje pomagające rozwiązać problemy</string> + <string name="error_couldnt_determine_openhab_url">Nie można określić adresu URL openHAB</string> + <string name="unknown">Nieznane</string> + <string name="error_network_type_unsupported">Typ sieci (%s) nie jest wspierany</string> + <string name="set">Wybierz</string> + <string name="cancel">Anuluj</string> + <string name="close">Zamknij</string> + <string name="try_again_button">Spróbuj ponownie</string> + <string name="enable_wifi_button">Włącz Wi-Fi</string> + <string name="go_to_settings_button">Przejdź do ustawień</string> + <string name="enable_demo_mode_button">Uruchom tryb demonstracyjny</string> + <string name="configuration_missing">Nie znaleziono serwera openHAB w twojej sieci. Jeżeli już masz serwer, skonfiguruj jego adres IP i nazwę hosta w ustawieniach serwera. Jeżeli jeszcze nie masz serwera openHAB, możesz włączyć tryb demonstracyjny by zobaczyć co potrafi openHAB.</string> + <string name="no_remote_server">Nie udało się połączyć z serwerem i nie skonfigurowano serwera zdalnego</string> + <string name="resolving_openhab">Próbując znaleźć serwer openHAB\u2026</string> + <string name="waiting_for_wifi">Czekam aż Wi-Fi nawiąże połączenie\2026</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Wyświetl logi</string> + <string name="clear_log">Wyczyść log</string> + <string name="empty_log">Log jest pusty</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Otwórz roletę</string> + <string name="content_description_stop_roller_shutter">Zatrzymaj roletę</string> + <string name="content_description_close_roller_shutter">Zamknij roletę</string> + <string name="content_description_open_color_wheel">Otwórz paletę kolorów</string> + <string name="content_description_color_up">Włącz lub przytrzymaj by rozjaśnić</string> + <string name="content_description_color_down">Wyłącz lub przytrzymaj by przyciemnić</string> + <string name="content_description_open_number_picker">Otwórz klawiaturę numeryczną</string> + <string name="content_description_video">Wideo</string> + <string name="content_description_open_openhab">Otwórz openHAB</string> + <string name="swipe_to_refresh_description">Aplikacja odświeża się automatycznie, nie musisz robić tego ręcznie</string> + <string name="swipe_to_refresh_dismiss">Rozumiem!</string> + <!-- Intro strings --> + <string name="app_intro">Wprowadzenie</string> + <string name="intro_welcome">Witaj w openHAB</string> + <string name="intro_whatis">Otwarte oprogramowanie do automatyzacji Twojego domu</string> + <string name="intro_themes">Motywy</string> + <string name="intro_themes_description">Wybierz spośród wielu motywów</string> + <string name="intro_voice_description">Kontroluj swój domu za pomocą głosu</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Item może być powiązana z tagiem NFC poprzez długie przyciśnięcie Item</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">POMIŃ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">GOTOWE</string> </resources> diff --git a/mobile/src/main/res/values-pt-rBR/strings.xml b/mobile/src/main/res/values-pt-rBR/strings.xml index df480089d3db8edde34c644aa3673c3ca21c2d61..c2fb2e690d056d4aa1da5bb2406ffe476bba01dc 100644 --- a/mobile/src/main/res/values-pt-rBR/strings.xml +++ b/mobile/src/main/res/values-pt-rBR/strings.xml @@ -1,195 +1,245 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Configurações</string> - <string name="app_notifications">Notificações</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Configurações</string> - <string name="mainmenu_openhab_selectsitemap">Selecione o sitemap padrão</string> - <string name="mainmenu_openhab_clearcache">Limpar cache das imagens</string> - <!-- App settings strings --> - <string name="settings_connection_title">Conexão</string> - <string name="settings_display_title">Configurações de visualização</string> - <string name="settings_misc_title">Diversos</string> - <string name="settings_openhab_url">URL do servidor local</string> - <string name="settings_openhab_url_summary">A URL do painel openHAB (baseado no nome do host ou IP). Se configurado, está desativada a detecção automática. Configuração atual %s</string> - <string name="settings_openhab_alturl">URL de servidor remoto</string> - <string name="settings_openhab_alturl_summary">A URL do painel openHAB é usada quando endereço local não está disponível. Configuração atual: %s</string> - <string name="settings_openhab_username">Usuário</string> - <string name="settings_openhab_password">Senha</string> - <string name="settings_openhab_password_summary_weak">Conjunto de senha fraca</string> - <string name="settings_openhab_password_summary_strong">Conjunto de senha forte</string> - <string name="settings_openhab_sslclientcert">Certificado cliente SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Toque aqui para obter algumas dicas e explicações sobre como configurar a autenticação de certificado cliente SSL</string> - <string name="settings_openhab_screentimeroff">Desativar a exibição do timer</string> - <string name="settings_openhab_screentimeroff_summary">Desativa a exibição de interruptor de temporização quando openHAB está sendo executado</string> - <string name="settings_openhab_demomode">Modo de demonstração</string> - <string name="settings_openhab_demomode_summary">Executar em modo de demonstração</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Tela cheia</string> - <string name="settings_openhab_fullscreen_summary">Exibir no modo de tela cheia</string> - <string name="settings_openhab_icon_format">Formato de ícone</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vetor</string> - <string name="settings_chart_scaling">Escala do gráfico</string> - <string name="settings_chart_scaling_summary">Nota: O dimensionamento menor reduz as fontes e as larguras de linha, portanto, há mais espaço para o gráfico, mas a legibilidade da fonte pode ser prejudicada.</string> - <string name="settings_chart_scaling_value_xs">Muito pequeno</string> - <string name="settings_chart_scaling_value_s">Pequeno</string> - <string name="settings_chart_scaling_value_m">Padrão</string> - <string name="settings_chart_scaling_value_l">Grande</string> - <string name="settings_ringtone">Toque de notificação</string> - <string name="settings_ringtone_none">Nenhum</string> - <string name="settings_clear_default_sitemap">Limpar o sitemap padrão</string> - <string name="settings_no_default_sitemap">Nenhum Sitemap selecionado</string> - <string name="settings_current_default_sitemap">Atual Sitemap padrão: %1$s</string> - <string name="settings_openhab_alt_connection">Remoto</string> - <string name="settings_openhab_connection">Local</string> - <string name="settings_notification_vibration">Vibração de notificação</string> - <string name="settings_notification_vibration_off">Desligado</string> - <string name="settings_notification_vibration_short">Curta</string> - <string name="settings_notification_vibration_long">Longa</string> - <string name="settings_notification_vibration_twice">Dupla</string> - <string name="settings_connection_summary">Conectado a %s</string> - <string name="settings_insecure_connection_summary">Conectado de forma insegura a %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">comandos de voz do openHAB</string> - <string name="info_voice_input">openHAB, às suas ordens!</string> - <string name="info_voice_recognized_text">Comando reconhecido: %1$s</string> - <string name="info_demo_mode_short">Executando em modo de demonstração</string> - <string name="info_conn_url">Conectando a URL local</string> - <string name="info_conn_rem_url">Conectando a URL local</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB retornou uma lista de Sitemap vazia</string> - <string name="error_network_not_available">Rede não está disponivel</string> - <string name="error_http_connection_failed">Conexão sem sucesso. Foi recebida uma resposta inesperada ao conectar com servidor openHAB configurado (código de resposta HTTP recebido: %d).</string> - <string name="error_invalid_url">Por favor insira uma URL válida num padrão \'http(s)://endereço(:porta)/\'</string> - <string name="error_connection_failed">Conexão ao host falhou</string> - <string name="error_unable_to_resolve_hostname">Não foi possível resolver o hostname</string> - <string name="error_connection_sslhandshake_failed">Handshake SSL falhou</string> - <string name="error_certificate_not_trusted">Certificado SSL não é confiável. Por favor, importe o certificado raiz ou desabilite a validação de certificados durante o handshake SSL.</string> - <string name="error_certificate_expired">Certificado SLL expirou. Por favor, obtenha um novo certificado ou desabilite a validação de certificado durante o handshake SSL.</string> - <string name="error_certificate_not_valid_yet">Certificado SSL não é válido ainda. Por favor, obtenha um certificado correto ou desabilite a validação de certificados durante o handshake SSL. Verifique também se o relógio no seu telefone está configurado corretamente.</string> - <string name="error_certificate_revoked">Certificado SLL foi revogado. Por favor, obtenha um novo certificado ou aceite o certificado durante o handshake SSL.</string> - <string name="error_certificate_wrong_host">Certificado SSL não é válido para %s</string> - <string name="error_http_code_401">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 401).</string> - <string name="error_http_code_403">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 403).</string> - <string name="error_http_code_407">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 407).</string> - <string name="error_http_code_414">URL é muito longa. Por favor, use o endereço IP ou uma URL mais curta (código de resposta HTTP 414).</string> - <string name="error_http_code_426">É necessário utilizar HTTPS. Por favor, altere a URL (HTTP código de resposta 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Autenticação falhou. Por favor, verifique o nome de usuário, senha e certificado de cliente SSL (HTTP código de resposta 495).</string> - <string name="error_http_code_496">Certificado de cliente SSL é necessário (HTTP código de resposta 496)</string> - <string name="error_http_code_502">O seu proxy reverso recebeu uma resposta inválida do servidor openHAB (HTTP código de resposta 502)</string> - <string name="error_http_code_503">O servidor openHAB está temporariamente indisponível (HTTP código de resposta 503)</string> - <string name="error_http_code_504">Tempo expirado do gateway. Parece que o seu proxy reverso está rodando, mas não foi possível obter uma resposta do servidor openHAB (código de resposta HTTP 504).</string> - <string name="error_http_code_507">O servidor openHAB não tem espaço livre suficiente (HTTP código de resposta 507)</string> - <string name="error_http_code_511">Autenticação de rede é necessária (HTTP código de resposta 511)</string> - <string name="error_about_no_conn">Erro ao buscar informações do servidor openHAB</string> - <string name="error_openhab_offline">Seu servidor openHAB está offline enquanto está executando a instância de nuvem</string> - <string name="error_no_app_store_found">Não foi encontrada a loja de aplicativos para instalar o app de reconhecimento de fala</string> - <string name="title_activity_openhabwritetag">Escrever na tag NFC</string> - <string name="title_activity_libraries">Bibliotecas usadas</string> - <string name="info_write_tag">Toque na tag e a mantenha perto até aparecer a mensagem de confirmação</string> - <string name="info_write_tag_progress">Escrevendo a etiqueta</string> - <string name="info_write_tag_finished">Concluído com sucesso</string> - <string name="info_write_failed">Erro de escrita da tag</string> - <string name="info_write_tag_unsupported">Este dispositivo não tem suporte NFC</string> - <string name="info_write_tag_disabled">NFC está desabilitado. Por favor habilite no menu de configurações do dispositivo.</string> - <string name="info_openhab_apiversion_label">versão Rest API do openHAB</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Segredo</string> - <string name="info_openhab_push_notification_label">Status da notificação por push</string> - <string name="action_settings">Configurações</string> - <string name="nfc_dialog_title">Definir a ação da tag NFC para este elemento</string> - <string name="info_not_set">Não definido</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Nenhuma notificação foi enviada até agora</string> - <string name="notification_list_error">Um erro ocorreu enquanto carregava as notificações</string> - <string name="list_loading_message">Carregando\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Aceitar Certificado desconhecido?</string> - <string name="mtm_trust_anchor">O certificado do servidor não é assinado por uma autoridade de certificado reconhecida</string> - <string name="mtm_cert_expired">O certificado do servidor expirou</string> - <string name="mtm_accept_servername">Aceitar o nome do servidor incompatível?</string> - <string name="mtm_hostname_mismatch">Servidor não pode autenticar como \"%s\". O certificado é válido apenas para:</string> - <string name="mtm_connect_anyway">Você deseja conectar mesmo assim?</string> - <string name="mtm_cert_details">Informações do certificado:</string> - <string name="mtm_decision_always">Aceitar</string> - <string name="mtm_decision_once">Uma só vez</string> - <string name="mtm_decision_abort">Anular</string> - <string name="mtm_notification">Verificação de certificado</string> - <string name="settings_openhab_none">Nenhum</string> - <!-- Themes --> - <string name="theme_name_light">Claro</string> - <string name="theme_name_dark">Escuro</string> - <string name="theme_name_black">Preto/AMOLED</string> - <string name="theme_name_basic_ui">UI Básica</string> - <string name="theme_name_basic_ui_dark">UI Básica escura</string> - <!-- NFC --> - <string name="nfc_action_on">Ligar</string> - <string name="nfc_action_up">Para cima</string> - <string name="nfc_action_off">Desligar</string> - <string name="nfc_action_down">Para baixo</string> - <string name="nfc_action_toggle">Alternar</string> - <string name="nfc_activate">Ativar</string> - <string name="nfc_action_current_color">Cor atual</string> - <string name="nfc_action_to_sitemap_page">Navegar para a página do Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Gaveta aberta do sitemap</string> - <string name="drawer_close">Gaveta fechada do sitemap</string> - <string name="mainmenu_openhab_voice_recognition">Reconhecimento de voz</string> - <!-- About --> - <string name="about_title">Sobre</string> - <string name="about_license_title">Licença</string> - <string name="about_changelog">Histórico de mudanças</string> - <string name="about_source_code">Código fonte</string> - <string name="about_issues">Reportar um problema</string> - <string name="about_docs">Documentação</string> - <string name="about_community_forum">Fórum da Comunidade</string> - <string name="about_foundation">Fundação openHAB</string> - <string name="about_community">comunidade openHAB</string> - <string name="about_server">servidor openHAB</string> - <string name="about_translation">Nos ajude a traduzir o openHAB</string> - <string name="about_privacy_policy">Política de privacidade</string> - <string name="settings_debug_messages_title">Mostrar informações para solução de problemas</string> - <string name="error_couldnt_determine_openhab_url">Não consegui determinar a URL do openHAB</string> - <string name="unknown">Desconhecido</string> - <string name="error_network_type_unsupported">Tipo de rede (%s) não suportado</string> - <string name="set">Definir</string> - <string name="cancel">Cancelar</string> - <string name="close">Fechar</string> - <string name="try_again_button">Tente novamente</string> - <string name="go_to_settings_button">Ir para Configurações</string> - <string name="configuration_missing">Seu servidor openHAB não pôde ser descoberto automaticamente. Por favor, configure seu nome de host ou endereço IP nas configurações do servidor.</string> - <string name="no_remote_server">Rede local não está disponível e você não tem um servidor remoto configurado</string> - <string name="resolving_openhab">Tentando descobrir uma instância do servidor openHAB\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Abrir cortina</string> - <string name="content_description_stop_roller_shutter">Parar cortina</string> - <string name="content_description_close_roller_shutter">Fechar cortina</string> - <string name="content_description_open_color_wheel">Abrir roda de cores</string> - <string name="content_description_color_up">Ligar ou mantenha para aumentar o brilho</string> - <string name="content_description_color_down">Desligar ou mantenha para diminuir o brilho</string> - <string name="content_description_open_number_picker">Abrir selecção de valor</string> - <string name="content_description_video">Vídeo</string> - <string name="content_description_open_openhab">Abrir openHAB</string> - <string name="swipe_to_refresh_description">A aplicação também atualiza automaticamente, normalmente não necessita fazer manualmente</string> - <string name="swipe_to_refresh_dismiss">Entendido!</string> - <!-- Intro strings --> - <string name="app_intro">Introdução</string> - <string name="intro_welcome">Bem-vindo ao openHAB</string> - <string name="intro_whatis">Um software agnóstico e fornecedor de automatização de software aberto para a sua casa</string> - <string name="intro_themes">Temas</string> - <string name="intro_themes_description">Escolha entre vários temas</string> - <string name="intro_voice_description">Controle sua casa com a sua voz</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">O controle de item pode ser vinculado a tags NFC pressionando por um longo tempo o item</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">Pular</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">Concluído</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Configurações</string> + <string name="app_notifications">Notificações</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Configurações</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Ocorreu um erro ao carregar o HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Selecione o sitemap padrão</string> + <string name="mainmenu_openhab_clearcache">Limpar cache das imagens</string> + <!-- App settings strings --> + <string name="settings_connection_title">Conexão</string> + <string name="settings_display_title">Configurações de visualização</string> + <string name="settings_misc_title">Diversos</string> + <string name="settings_openhab_url">URL do servidor local</string> + <string name="settings_openhab_url_summary">A URL do painel openHAB (baseado no nome do host ou IP). Se configurado, está desativada a detecção automática. Configuração atual %s</string> + <string name="settings_openhab_alturl">URL de servidor remoto</string> + <string name="settings_openhab_alturl_summary">A URL do painel openHAB é usada quando endereço local não está disponível. Configuração atual: %s</string> + <string name="settings_openhab_username">Usuário</string> + <string name="settings_openhab_password">Senha</string> + <string name="settings_openhab_password_summary_weak">Conjunto de senha fraca</string> + <string name="settings_openhab_password_summary_strong">Conjunto de senha forte</string> + <string name="settings_openhab_sslclientcert">Certificado cliente SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Toque aqui para obter algumas dicas e explicações sobre como configurar a autenticação de certificado cliente SSL</string> + <string name="settings_openhab_screentimeroff">Desativar a exibição do timer</string> + <string name="settings_openhab_screentimeroff_summary">Desativa a exibição de interruptor de temporização quando openHAB está sendo executado</string> + <string name="settings_openhab_demomode">Modo de demonstração</string> + <string name="settings_openhab_demomode_summary">Se você não tiver um servidor openHAB, ative o modo de demonstração para obter uma imaginação de que openHAB é capaz de fazer.</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Tela cheia</string> + <string name="settings_openhab_fullscreen_summary">Exibir no modo de tela cheia</string> + <string name="settings_openhab_icon_format">Formato de ícone</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vetor</string> + <string name="settings_chart_scaling">Escala do gráfico</string> + <string name="settings_chart_scaling_summary">Nota: O dimensionamento menor reduz as fontes e as larguras de linha, portanto, há mais espaço para o gráfico, mas a legibilidade da fonte pode ser prejudicada.</string> + <string name="settings_chart_scaling_value_xs">Muito pequeno</string> + <string name="settings_chart_scaling_value_s">Pequeno</string> + <string name="settings_chart_scaling_value_m">Padrão</string> + <string name="settings_chart_scaling_value_l">Grande</string> + <string name="settings_openhab_chart_hq">Gráficos de alta resolução</string> + <string name="settings_openhab_chart_hq_summary">Gerar gráficos pode pesar servidor. Se você se deparar com carregamento lento do gráfico e seu servidor não é poderoso, desabilite essa opção para melhorar o tempo de carregamento.</string> + <string name="settings_ringtone">Toque de notificação</string> + <string name="settings_ringtone_none">Nenhum</string> + <string name="settings_clear_default_sitemap">Limpar o sitemap padrão</string> + <string name="settings_no_default_sitemap">Nenhum Sitemap selecionado</string> + <string name="settings_current_default_sitemap">Atual Sitemap padrão: %1$s</string> + <string name="settings_openhab_alt_connection">Remoto</string> + <string name="settings_openhab_connection">Local</string> + <string name="settings_notification_vibration">Vibração de notificação</string> + <string name="settings_notification_vibration_off">Desligado</string> + <string name="settings_notification_vibration_short">Curta</string> + <string name="settings_notification_vibration_long">Longa</string> + <string name="settings_notification_vibration_twice">Dupla</string> + <string name="settings_notification_ringtone_vibration">Configurações de notificação</string> + <string name="settings_connection_summary">Conectado a %s</string> + <string name="settings_insecure_connection_summary">Conectado de forma insegura a %s</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Comandos de Voz</string> + <string name="title_voice_widget_icon">Comandos de voz e atalho de app</string> + <string name="info_voice_input">openHAB, às suas ordens!</string> + <string name="info_voice_recognized_text">Comando reconhecido: %1$s</string> + <string name="info_demo_mode_short">Executando em modo de demonstração</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Desligar</string> + <string name="info_conn_url">Conectando a URL local</string> + <string name="info_conn_rem_url">Conectando a URL local</string> + <string name="app_shortcut_diabled_habpanel">Seu servidor não tem o HABPanel instalado</string> + <string name="app_shortcut_diabled_notifications">Seu servidor remoto não está disponível</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB retornou uma lista de Sitemap vazia</string> + <string name="error_sitemap_generic_load_error">O Sitemap não pôde ser carregado. Ocorreu o seguinte erro: %1$s</string> + <string name="error_network_not_available">Rede não está disponivel</string> + <string name="error_wifi_not_available">Wi-Fi está desligado</string> + <string name="error_http_connection_failed">Conexão sem sucesso. Foi recebida uma resposta inesperada ao conectar com servidor openHAB configurado (código de resposta HTTP recebido: %d).</string> + <string name="error_invalid_url">Por favor insira uma URL válida num padrão \'http(s)://endereço(:porta)/\'</string> + <string name="error_port_seems_invalid">A porta que você digitou parece inválida para o protocolo selecionado</string> + <string name="error_connection_failed">Conexão ao host falhou</string> + <string name="error_unable_to_resolve_hostname">Não foi possível resolver o hostname</string> + <string name="error_connection_sslhandshake_failed">Handshake SSL falhou</string> + <string name="error_certificate_not_trusted">Certificado SSL não é confiável. Por favor, importe o certificado raiz ou desabilite a validação de certificados durante o handshake SSL.</string> + <string name="error_certificate_expired">Certificado SLL expirou. Por favor, obtenha um novo certificado ou desabilite a validação de certificado durante o handshake SSL.</string> + <string name="error_certificate_not_valid_yet">Certificado SSL não é válido ainda. Por favor, obtenha um certificado correto ou desabilite a validação de certificados durante o handshake SSL. Verifique também se o relógio no seu telefone está configurado corretamente.</string> + <string name="error_certificate_invalid_date">O certificado SSL tem uma data inválida. Por favor, obtenha um certificado correto e verifique se o relógio no seu dispositivo está definido corretamente.</string> + <string name="error_certificate_revoked">Certificado SLL foi revogado. Por favor, obtenha um novo certificado ou aceite o certificado durante o handshake SSL.</string> + <string name="error_certificate_wrong_host">Certificado SSL não é válido para %s</string> + <string name="error_http_to_https_port">Final inesperado do fluxo. Você está tentando se conectar a uma porta HTTPS através de HTTP?</string> + <string name="webview_ssl">Atualmente, este app não suporta SSL certificados auto-assinados para widgets Webview</string> + <string name="error_http_code_401">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 401).</string> + <string name="error_http_code_403">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 403).</string> + <string name="error_http_code_407">Falha de autenticação. Por favor, verifique o usuário e senha configurada e o certificado SSL do cliente fornecido (código de resposta HTTP 407).</string> + <string name="error_http_code_414">URL é muito longa. Por favor, use o endereço IP ou uma URL mais curta (código de resposta HTTP 414).</string> + <string name="error_http_code_426">É necessário utilizar HTTPS. Por favor, altere a URL (HTTP código de resposta 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autenticação falhou. Por favor, verifique o nome de usuário, senha e certificado de cliente SSL (HTTP código de resposta 495).</string> + <string name="error_http_code_496">Certificado de cliente SSL é necessário (HTTP código de resposta 496)</string> + <string name="error_http_code_502">O seu proxy reverso recebeu uma resposta inválida do servidor openHAB (HTTP código de resposta 502)</string> + <string name="error_http_code_503">O servidor openHAB está temporariamente indisponível (HTTP código de resposta 503)</string> + <string name="error_http_code_504">Tempo expirado do gateway. Parece que o seu proxy reverso está rodando, mas não foi possível obter uma resposta do servidor openHAB (código de resposta HTTP 504).</string> + <string name="error_http_code_507">O servidor openHAB não tem espaço livre suficiente (HTTP código de resposta 507)</string> + <string name="error_http_code_511">Autenticação de rede é necessária (HTTP código de resposta 511)</string> + <string name="error_about_no_conn">Erro ao buscar informações do servidor openHAB</string> + <string name="error_openhab_offline">Seu servidor openHAB está offline enquanto está executando a instância de nuvem</string> + <string name="title_activity_openhabwritetag">Escrever na tag NFC</string> + <string name="title_activity_libraries">Bibliotecas usadas</string> + <string name="info_write_tag">Toque na tag e a mantenha perto até aparecer a mensagem de confirmação</string> + <string name="info_write_tag_progress">Escrevendo a etiqueta</string> + <string name="info_write_tag_finished">Concluído com sucesso</string> + <string name="info_write_failed">Erro de escrita da tag</string> + <string name="info_write_tag_unsupported">Este dispositivo não tem suporte NFC</string> + <string name="info_write_tag_disabled">NFC está desabilitado. Por favor habilite no menu de configurações do dispositivo.</string> + <string name="info_openhab_apiversion_label">versão Rest API do openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Segredo</string> + <string name="info_openhab_push_notification_label">Status da notificação por push</string> + <string name="action_settings">Configurações</string> + <string name="nfc_dialog_title">Definir a ação da tag NFC para este elemento</string> + <string name="info_not_set">Não definido</string> + <string name="empty_page">Esta página não contém qualquer widgets que estão definidos para ser visível</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Enviar informações do dispositivo para o servidor</string> + <string name="send_device_info_item_prefix">Prefixo do nome do Item</string> + <string name="send_device_info_item_prefix_summary">Os nomes de Item dos seguintes recursos tem este prefixo</string> + <string name="settings_alarm_clock">Enviar alarme despertador para openHAB</string> + <string name="settings_alarm_clock_summary_on">Envia a hora do alarme para item \'%1$s \'</string> + <string name="settings_alarm_clock_summary_off">Não enviar a hora do alarme para servidor</string> + <string name="settings_alarm_clock_howto_summary">Toque aqui para obter dicas sobre como configurar esse recurso do servidor</string> + <string name="settings_item_pref_item_name">Nome do item</string> + <string name="waiting_for_item_upload">Aguardando a rede enviar atualizações de Item</string> + <string name="item_upload_in_progress">Itens estão sendo atualizados</string> + <string name="notification_channel_background">Fundo</string> + <string name="notification_channel_background_description">Usado para exibir as tarefas pendentes em segundo plano</string> + <string name="notification_channel_background_error">Erro nas tarefas de segundo plano</string> + <string name="notification_channel_background_error_description">Usado para notificar sobre erros de tarefas em segundo plano</string> + <plurals name="item_update_error_title"> + <item quantity="one">%d Item não pôde ser atualizado</item> + <item quantity="other">%d Items não puderam ser atualizados</item> + </plurals> + <string name="item_update_http_error">Falha de atualização do Item \'%1$s\' (erro HTTP %2$d)</string> + <string name="item_update_connection_error">Falha na atualização do Item \'%1$s\' (Sem conexão)</string> + <string name="error_sending_alarm_clock_item_empty">Por favor, insira um nome de Item válido</string> + <string name="retry">Tente novamente</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Nenhuma notificação foi enviada até agora</string> + <string name="notification_list_error">Um erro ocorreu enquanto carregava as notificações</string> + <string name="list_loading_message">Carregando\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Aceitar Certificado desconhecido?</string> + <string name="mtm_trust_anchor">O certificado do servidor não é assinado por uma autoridade de certificado reconhecida</string> + <string name="mtm_cert_expired">O certificado do servidor expirou</string> + <string name="mtm_accept_servername">Aceitar o nome do servidor incompatível?</string> + <string name="mtm_hostname_mismatch">Servidor não pode autenticar como \"%s\". O certificado é válido apenas para:</string> + <string name="mtm_connect_anyway">Você deseja conectar mesmo assim?</string> + <string name="mtm_cert_details">Informações do certificado:</string> + <string name="mtm_decision_always">Aceitar</string> + <string name="mtm_decision_once">Uma só vez</string> + <string name="mtm_decision_abort">Anular</string> + <string name="mtm_notification">Verificação de certificado</string> + <string name="settings_openhab_none">Nenhum</string> + <!-- Themes --> + <string name="theme_name_light">Claro</string> + <string name="theme_name_dark">Escuro</string> + <string name="theme_name_black">Preto/AMOLED</string> + <string name="theme_name_basic_ui">UI Básica</string> + <string name="theme_name_basic_ui_dark">UI Básica escura</string> + <!-- NFC --> + <string name="nfc_action_on">Ligar</string> + <string name="nfc_action_up">Para cima</string> + <string name="nfc_action_off">Desligar</string> + <string name="nfc_action_down">Para baixo</string> + <string name="nfc_action_toggle">Alternar</string> + <string name="nfc_activate">Ativar</string> + <string name="nfc_action_current_color">Cor atual</string> + <string name="nfc_action_to_sitemap_page">Navegar para a página do Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Gaveta aberta do sitemap</string> + <string name="drawer_close">Gaveta fechada do sitemap</string> + <string name="mainmenu_openhab_voice_recognition">Reconhecimento de voz</string> + <!-- About --> + <string name="about_title">Sobre</string> + <string name="about_license_title">Licença</string> + <string name="about_changelog">Histórico de mudanças</string> + <string name="about_source_code">Código fonte</string> + <string name="about_issues">Reportar um problema</string> + <string name="about_docs">Documentação</string> + <string name="about_community_forum">Fórum da Comunidade</string> + <string name="about_foundation">Fundação openHAB</string> + <string name="about_community">comunidade openHAB</string> + <string name="about_server">servidor openHAB</string> + <string name="about_translation">Nos ajude a traduzir o openHAB</string> + <string name="about_privacy_policy">Política de privacidade</string> + <string name="settings_debug_messages_title">Mostrar informações para solução de problemas</string> + <string name="error_couldnt_determine_openhab_url">Não consegui determinar a URL do openHAB</string> + <string name="unknown">Desconhecido</string> + <string name="error_network_type_unsupported">Tipo de rede (%s) não suportado</string> + <string name="set">Definir</string> + <string name="cancel">Cancelar</string> + <string name="close">Fechar</string> + <string name="try_again_button">Tente novamente</string> + <string name="enable_wifi_button">Ative o Wi-Fi</string> + <string name="go_to_settings_button">Ir para Configurações</string> + <string name="enable_demo_mode_button">Ativar modo demonstração</string> + <string name="configuration_missing">Não encontramos um servidor openHAB na sua rede. Se você já tem um servidor, por favor configure seu endereço IP ou nome de host nas configurações do servidor. Se você ainda não tem um servidor, você pode habilitar o modo demo para ver o que o openHAB é capaz.</string> + <string name="no_remote_server">Conexão para o servidor local falhou e você não tem configurado um servidor remoto</string> + <string name="resolving_openhab">Tentando descobrir uma instância do servidor openHAB\u2026</string> + <string name="waiting_for_wifi">Aguardando Wi-Fi para estabelecer a conexão\u2026</string> + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">Ver Log</string> + <string name="clear_log">Limpar Log</string> + <string name="empty_log">Log está vazio</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Abrir cortina</string> + <string name="content_description_stop_roller_shutter">Parar cortina</string> + <string name="content_description_close_roller_shutter">Fechar cortina</string> + <string name="content_description_open_color_wheel">Abrir roda de cores</string> + <string name="content_description_color_up">Ligar ou mantenha para aumentar o brilho</string> + <string name="content_description_color_down">Desligar ou mantenha para diminuir o brilho</string> + <string name="content_description_open_number_picker">Abrir selecção de valor</string> + <string name="content_description_video">Vídeo</string> + <string name="content_description_open_openhab">Abrir openHAB</string> + <string name="content_description_increase_item_value">Aumentar o valor do item</string> + <string name="content_description_decrease_item_value">Diminuir o valor do item</string> + <string name="swipe_to_refresh_description">A aplicação também atualiza automaticamente, normalmente não necessita fazer manualmente</string> + <string name="swipe_to_refresh_dismiss">Entendido!</string> + <!-- Intro strings --> + <string name="app_intro">Introdução</string> + <string name="intro_welcome">Bem-vindo ao openHAB</string> + <string name="intro_whatis">Um software agnóstico e fornecedor de automatização de software aberto para a sua casa</string> + <string name="intro_themes">Temas</string> + <string name="intro_themes_description">Escolha entre vários temas</string> + <string name="intro_voice_description">Controle sua casa com a sua voz</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">O controle de item pode ser vinculado a tags NFC pressionando por um longo tempo o item</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">Pular</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">Concluído</string> </resources> diff --git a/mobile/src/main/res/values-pt/strings.xml b/mobile/src/main/res/values-pt/strings.xml index b9c62ff7ebab12a3c649506c299c54ea64f1419c..be273be693342af2174180894459f93205e00608 100644 --- a/mobile/src/main/res/values-pt/strings.xml +++ b/mobile/src/main/res/values-pt/strings.xml @@ -1,98 +1,117 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Configurações</string> - <string name="app_notifications">Notificações</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Mapa do site</string> - <string name="mainmenu_openhab_preferences">Configurações</string> - <string name="mainmenu_openhab_clearcache">Limpar cache das imagens</string> - <!-- App settings strings --> - <string name="settings_openhab_url">URL do servidor local</string> - <string name="settings_openhab_url_summary">A URL do painel openHAB (baseado no nome do host ou IP). Se configurado, está desativada a detecção automática. Configuração atual %s</string> - <string name="settings_openhab_alturl">URL do servidor remoto</string> - <string name="settings_openhab_alturl_summary">A URL do painel openHAB usado quando o endereço local não está disponível. Configuração atual: %s</string> - <string name="settings_openhab_username">Nome de utilizador</string> - <string name="settings_openhab_password">Palavra passe</string> - <string name="settings_openhab_sslclientcert">Certificado de cliente SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Toque aqui para obter algumas dicas e explicações sobre como configurar a autenticação de certificado de cliente SSL</string> - <string name="settings_openhab_screentimeroff">Desativar a exibição do temporizador</string> - <string name="settings_openhab_screentimeroff_summary">Desativar exibição do interruptor de temporização quando openHAB está a ser executado</string> - <string name="settings_openhab_demomode">Modo de demonstração</string> - <string name="settings_openhab_demomode_summary">Executar em modo de demonstração</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Ecrã inteiro</string> - <string name="settings_openhab_fullscreen_summary">Exibir no modo de ecrã inteiro</string> - <string name="settings_openhab_icon_format">Formato de icone</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vetor</string> - <!-- App messages strings --> - <string name="info_voice_input">openhab, às suas ordens!</string> - <string name="info_voice_recognized_text">Comando reconhecido: %1$s</string> - <string name="info_demo_mode_short">A executar em modo de demonstração</string> - <string name="info_conn_url">Conectando a URL local</string> - <string name="info_conn_rem_url">Conectando a URL local</string> - <!-- Error messages --> - <string name="error_network_not_available">Rede não está disponivel</string> - <string name="error_connection_failed">Conexão ao host falhado</string> - <string name="error_unable_to_resolve_hostname">Não foi possível resolver nome de anfitrião</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">Certificado de cliente SSL é necessário (HTTP código de resposta 496)</string> - <string name="error_http_code_511">Autenticação de rede é necessária (HTTP código de resposta 511)</string> - <string name="title_activity_openhabwritetag">Escrever na etiqueta NFC</string> - <string name="info_write_tag">Toque na etiqueta e mantenha-la perto até aparecer a mensagem de confirmação</string> - <string name="info_write_tag_progress">Escrever a etiqueta</string> - <string name="info_write_tag_finished">Concluído com êxito</string> - <string name="info_write_failed">Erro de escrita da etiqueta</string> - <string name="info_write_tag_unsupported">Este dispositivo não tem suporte de NFC</string> - <string name="info_write_tag_disabled">NFC está desabilitado. Por favor habilitá-lo no menu de configurações do dispositivo.</string> - <string name="info_openhab_apiversion_label">openHAB versão Rest API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Segredo</string> - <string name="action_settings">Definições</string> - <string name="nfc_dialog_title">Escrever a ação de marca NFC para este elemento</string> - <string name="info_not_set">Não definido</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Uma só vez</string> - <string name="mtm_decision_abort">Anular</string> - <string name="mtm_notification">Verificação de certificado</string> - <!-- Themes --> - <string name="theme_name_light">Claro</string> - <string name="theme_name_dark">Escuro</string> - <string name="theme_name_black">Preto/AMOLED</string> - <string name="theme_name_basic_ui">Básica UI</string> - <string name="theme_name_basic_ui_dark">Básica UI escura</string> - <!-- NFC --> - <string name="nfc_action_on">Ligar</string> - <string name="nfc_action_up">Para cima</string> - <string name="nfc_action_off">Desligar</string> - <string name="nfc_action_down">Para baixo</string> - <string name="nfc_action_toggle">Alternar</string> - <string name="nfc_activate">Activar</string> - <string name="nfc_action_current_color">Cor atual</string> - <!-- Drawer --> - <string name="drawer_open">Gaveta aberta do mapa do site</string> - <string name="drawer_close">Gaveta fechada do mapa do site</string> - <string name="mainmenu_openhab_voice_recognition">Reconhecimento de voz</string> - <!-- About --> - <string name="about_title">Sobre</string> - <string name="about_license_title">Licença</string> - <string name="error_couldnt_determine_openhab_url">Não consegui determinar o URL openHAB</string> - <string name="unknown">Desconhecido</string> - <string name="error_network_type_unsupported">Tipo de rede (%s) não suportado</string> - <string name="set">Conjunto</string> - <string name="cancel">Cancelar</string> - <!-- Content description for images --> - <!-- Intro strings --> - <string name="app_intro">Introdução</string> - <string name="intro_welcome">Bem-vindo ao openHAB</string> - <string name="intro_whatis">Um software agnóstico e vendedor de automatização de software aberto para a sua casa</string> - <string name="intro_themes">Temas</string> - <string name="intro_themes_description">Escolha entre vários temas</string> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Configurações</string> + <string name="app_notifications">Notificações</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Mapa do site</string> + <string name="mainmenu_openhab_preferences">Configurações</string> + <string name="mainmenu_openhab_clearcache">Limpar cache das imagens</string> + <!-- App settings strings --> + <string name="settings_misc_title">Diversos</string> + <string name="settings_openhab_url">URL do servidor local</string> + <string name="settings_openhab_url_summary">A URL do painel openHAB (baseado no nome do host ou IP). Se configurado, está desativada a detecção automática. Configuração atual %s</string> + <string name="settings_openhab_alturl">URL do servidor remoto</string> + <string name="settings_openhab_alturl_summary">A URL do painel openHAB usado quando o endereço local não está disponível. Configuração atual: %s</string> + <string name="settings_openhab_username">Nome de utilizador</string> + <string name="settings_openhab_password">Palavra passe</string> + <string name="settings_openhab_sslclientcert">Certificado de cliente SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Toque aqui para obter algumas dicas e explicações sobre como configurar a autenticação de certificado de cliente SSL</string> + <string name="settings_openhab_screentimeroff">Desativar a exibição do temporizador</string> + <string name="settings_openhab_screentimeroff_summary">Desativar exibição do interruptor de temporização quando openHAB está a ser executado</string> + <string name="settings_openhab_demomode">Modo de demonstração</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Ecrã inteiro</string> + <string name="settings_openhab_fullscreen_summary">Exibir no modo de ecrã inteiro</string> + <string name="settings_openhab_icon_format">Formato de icone</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vetor</string> + <string name="settings_openhab_alt_connection">Remoto</string> + <!-- App messages strings --> + <string name="info_voice_input">openhab, às suas ordens!</string> + <string name="info_voice_recognized_text">Comando reconhecido: %1$s</string> + <string name="info_demo_mode_short">A executar em modo de demonstração</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Conectando a URL local</string> + <string name="info_conn_rem_url">Conectando a URL local</string> + <!-- Error messages --> + <string name="error_network_not_available">Rede não está disponivel</string> + <string name="error_invalid_url">Por favor introduza um URL válido num padrão \'http(s)://endereço(:porto)/\'</string> + <string name="error_connection_failed">Conexão ao host falhado</string> + <string name="error_unable_to_resolve_hostname">Não foi possível resolver nome de anfitrião</string> + <string name="error_certificate_wrong_host">Certificado SSL não é válido para %s</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_496">Certificado de cliente SSL é necessário (HTTP código de resposta 496)</string> + <string name="error_http_code_502">O seu reverse proxy tem uma resposta inválida de openHAB (HTTP código de resposta 502)</string> + <string name="error_http_code_503">O Servidor openHAB está temporariamente indisponível (HTTP código de resposta 503)</string> + <string name="error_http_code_507">O servidor openHAB não tem espaço livre suficiente (HTTP código de resposta 507)</string> + <string name="error_http_code_511">Autenticação de rede é necessária (HTTP código de resposta 511)</string> + <string name="title_activity_openhabwritetag">Escrever na etiqueta NFC</string> + <string name="info_write_tag">Toque na etiqueta e mantenha-la perto até aparecer a mensagem de confirmação</string> + <string name="info_write_tag_progress">Escrever a etiqueta</string> + <string name="info_write_tag_finished">Concluído com êxito</string> + <string name="info_write_failed">Erro de escrita da etiqueta</string> + <string name="info_write_tag_unsupported">Este dispositivo não tem suporte de NFC</string> + <string name="info_write_tag_disabled">NFC está desabilitado. Por favor habilitá-lo no menu de configurações do dispositivo.</string> + <string name="info_openhab_apiversion_label">openHAB versão Rest API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Segredo</string> + <string name="action_settings">Definições</string> + <string name="nfc_dialog_title">Escrever a ação de marca NFC para este elemento</string> + <string name="info_not_set">Não definido</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_decision_once">Uma só vez</string> + <string name="mtm_decision_abort">Anular</string> + <string name="mtm_notification">Verificação de certificado</string> + <!-- Themes --> + <string name="theme_name_light">Claro</string> + <string name="theme_name_dark">Escuro</string> + <string name="theme_name_black">Preto/AMOLED</string> + <string name="theme_name_basic_ui">Básica UI</string> + <string name="theme_name_basic_ui_dark">Básica UI escura</string> + <!-- NFC --> + <string name="nfc_action_on">Ligar</string> + <string name="nfc_action_up">Para cima</string> + <string name="nfc_action_off">Desligar</string> + <string name="nfc_action_down">Para baixo</string> + <string name="nfc_action_toggle">Alternar</string> + <string name="nfc_activate">Activar</string> + <string name="nfc_action_current_color">Cor atual</string> + <!-- Drawer --> + <string name="drawer_open">Gaveta aberta do mapa do site</string> + <string name="drawer_close">Gaveta fechada do mapa do site</string> + <string name="mainmenu_openhab_voice_recognition">Reconhecimento de voz</string> + <!-- About --> + <string name="about_title">Sobre</string> + <string name="about_license_title">Licença</string> + <string name="error_couldnt_determine_openhab_url">Não consegui determinar o URL openHAB</string> + <string name="unknown">Desconhecido</string> + <string name="error_network_type_unsupported">Tipo de rede (%s) não suportado</string> + <string name="set">Conjunto</string> + <string name="cancel">Cancelar</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Abrir estore</string> + <string name="content_description_stop_roller_shutter">Parar estore</string> + <string name="content_description_close_roller_shutter">Fechar estore</string> + <string name="content_description_open_color_wheel">Abrir cores</string> + <string name="content_description_color_up">Ligar ou mantenha para aumentar o brilho</string> + <string name="content_description_color_down">Desligar ou mantenha para diminuir o brilho</string> + <string name="content_description_open_number_picker">Abrir selecção de valor</string> + <string name="content_description_video">Vídeo</string> + <string name="content_description_open_openhab">Abrir openHAB</string> + <string name="swipe_to_refresh_dismiss">Percebi!</string> + <!-- Intro strings --> + <string name="app_intro">Introdução</string> + <string name="intro_welcome">Bem-vindo ao openHAB</string> + <string name="intro_whatis">Um software agnóstico e vendedor de automatização de software aberto para a sua casa</string> + <string name="intro_themes">Temas</string> + <string name="intro_themes_description">Escolha entre vários temas</string> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-ro/strings.xml b/mobile/src/main/res/values-ro/strings.xml index 1fab4e0aecf5892116190081b50d9afe85e7c1cb..aaaa34112193e5af1c9e6d6232dfe41108d78225 100644 --- a/mobile/src/main/res/values-ro/strings.xml +++ b/mobile/src/main/res/values-ro/strings.xml @@ -1,195 +1,193 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Setări</string> - <string name="app_notifications">Notificări</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Harta site-ului</string> - <string name="mainmenu_openhab_preferences">Setări</string> - <string name="mainmenu_openhab_selectsitemap">Selecteaza fisierul Sitemap implicit</string> - <string name="mainmenu_openhab_clearcache">Șterge imaginile din cache</string> - <!-- App settings strings --> - <string name="settings_connection_title">Conexiune</string> - <string name="settings_display_title">Afișaj</string> - <string name="settings_misc_title">Diverse</string> - <string name="settings_openhab_url">Adresa URL a serverului local</string> - <string name="settings_openhab_url_summary">Adresa URL pentru panoul de control openHAB (pe baza numelui sau a adresei IP). Daca este configurat, functia de autodescoperire este dezactivata. Setarea curenta: %s</string> - <string name="settings_openhab_alturl">Adresa URL a serverului distant</string> - <string name="settings_openhab_alturl_summary">Adresa URL pentru panoul de control openHAB pentru cazul in care adresa locala nu este disponibila. Setarea curenta: %s</string> - <string name="settings_openhab_username">Nume utilizator</string> - <string name="settings_openhab_password">Parola</string> - <string name="settings_openhab_password_summary_weak">Ati ales o parola slaba</string> - <string name="settings_openhab_password_summary_strong">Ati ales o parola puternica</string> - <string name="settings_openhab_sslclientcert">Certificat SSL client</string> - <string name="settings_openhab_sslclientcert_howto_summary">Apasati aici pentru cateva instructiuni si explicatii descpre cum se seteaza autentificarea clientului prin certificat SSL</string> - <string name="settings_openhab_screentimeroff">Dezactiveaza afisarea cronometrului</string> - <string name="settings_openhab_screentimeroff_summary">Dezactiveaza afisarea comutatorului de oprire a cronometrului atunci cand openHAB este pornit</string> - <string name="settings_openhab_demomode">Modul demonstrativ</string> - <string name="settings_openhab_demomode_summary">Ruleaza in modul demonstrativ</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Ecran complet</string> - <string name="settings_openhab_fullscreen_summary">Afișează în modul ecran complet</string> - <string name="settings_openhab_icon_format">Format pictograma</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vector</string> - <string name="settings_chart_scaling">Scalare grafic</string> - <string name="settings_chart_scaling_summary">Nota: O scara redusa micsoreaza scrisul si grosimile liniilor pentru a fi mai mult spatiu pe grafic, dar lizibilitatea textului poate suferi.</string> - <string name="settings_chart_scaling_value_xs">Foarte mic</string> - <string name="settings_chart_scaling_value_s">Mic</string> - <string name="settings_chart_scaling_value_m">Implicit</string> - <string name="settings_chart_scaling_value_l">Mare</string> - <string name="settings_ringtone">Sonerie de notificare</string> - <string name="settings_ringtone_none">Nici unul</string> - <string name="settings_clear_default_sitemap">Sterge fisierul Sitemap implicit</string> - <string name="settings_no_default_sitemap">Niciun Sitemap implicit nu este selectat</string> - <string name="settings_current_default_sitemap">Predefiniție actuală Sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Control de la distanţă</string> - <string name="settings_openhab_connection">Local</string> - <string name="settings_notification_vibration">Vibratie la notificare</string> - <string name="settings_notification_vibration_off">Oprit</string> - <string name="settings_notification_vibration_short">Scurt</string> - <string name="settings_notification_vibration_long">Lung</string> - <string name="settings_notification_vibration_twice">De doua ori</string> - <string name="settings_connection_summary">Conectat la %s</string> - <string name="settings_insecure_connection_summary">Conexiune nesigura la %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">Comenzi vocale openHAB</string> - <string name="info_voice_input">openHAB, la comanda ta!</string> - <string name="info_voice_recognized_text">Comandă recunoscută: %1$s</string> - <string name="info_demo_mode_short">Rulează în modul demonstrativ</string> - <string name="info_conn_url">Se conectează la URL-ul local</string> - <string name="info_conn_rem_url">Conectare la adresa URL la distanță</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB a returnat lista Sitemap goală</string> - <string name="error_network_not_available">Rețeaua nu este disponibilă</string> - <string name="error_http_connection_failed">Conexiune eșuată. Un răspuns neașteptat a fost primit în încercarea de conectare la serverul openHAB configurat (Received HTTP response code: %d).</string> - <string name="error_invalid_url">Introdu adresa URL în forma \'http(s)://host(:port)/\'</string> - <string name="error_connection_failed">Conectarea la dispozitiv a eșuat!</string> - <string name="error_unable_to_resolve_hostname">Nu se poate rezulta numele dispozitivului (hostname)</string> - <string name="error_connection_sslhandshake_failed">Conexiune SSL eșuată</string> - <string name="error_certificate_not_trusted">Certificatul SSL nu este de încredere. Vă rugăm importați certificatul de bază sau acceptați certificatul în timpul etapei de conectare SSL.</string> - <string name="error_certificate_expired">Certificatul SSL a expirat. Vă rugăm obțineți un nou certificat sau acceptați certificatul in timpul etapei de conectare SSL.</string> - <string name="error_certificate_not_valid_yet">Certificatul SSL nu este încă valid. Vă rugăm să acceptați certificatul în timpul etapei de conectare SSL. De asemenea, verificați dacă ceasul este setat corect pe dispozitivul dumneavoastră.</string> - <string name="error_certificate_revoked">Certificatul SSL a fost revocat. Vă rugăm obțineți un nou certificat sau acceptați certificatul în timpul etapei de conectare SSL.</string> - <string name="error_certificate_wrong_host">Certificatul SSL nu este valid pentru %s</string> - <string name="error_http_code_401">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 401).</string> - <string name="error_http_code_403">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 403).</string> - <string name="error_http_code_407">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 407).</string> - <string name="error_http_code_414">URL-ul este prea lung. Vă rugăm să utilizaţi adresa IP sau un URL mai scurt (HTTP response code 414).</string> - <string name="error_http_code_426">Este necesar HTTPS. Vă rugăm schimbați adresa URL (HTTP response code 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Autentificare eșuată. Vă rugăm verificați certificatul SSL (cod raspuns HTTP 495).</string> - <string name="error_http_code_496">Este necesar un certificat de client SSL (cod raspuns HTTP 496)</string> - <string name="error_http_code_502">Serverul dumneavoastră proxy a primit un răspuns invalid de la serverul openHAB (cod răspuns HTTP 502)</string> - <string name="error_http_code_503">Serverul openHAB este temporar indisponibil (cod raspuns HTTP 503)</string> - <string name="error_http_code_504">Expirare conexiune gateway. Se pare că serverul proxy este pornit, însă nu a putut primi un raspuns de la serverul openHAB (cod răspuns HTTP 504).</string> - <string name="error_http_code_507">Serverul openHAB nu are suficient spațiu liber (cod răspuns HTTP 507)</string> - <string name="error_http_code_511">Autentificarea în rețea este necesară (cod răspuns HTTP 511)</string> - <string name="error_about_no_conn">Eroare la obținerea informațiilor despre serverul openHAB</string> - <string name="error_openhab_offline">Serverul dumneavoastră openHAB este offline în timp ce instanța cloud este pornită</string> - <string name="error_no_app_store_found">Nu a fost găsit nici un magazin de aplicații pentru instalarea aplicației de recunoaştere vocală</string> - <string name="title_activity_openhabwritetag">Scrie NFC-tag</string> - <string name="title_activity_libraries">Librării utilizate</string> - <string name="info_write_tag">Atingeţi eticheta şi păstraţi tag-ul NFC aproape, până când apare mesajul de confirmare</string> - <string name="info_write_tag_progress">Se scrie tag-ul NFC</string> - <string name="info_write_tag_finished">Terminat cu succes</string> - <string name="info_write_failed">Eroare la scrierea tag-ului NFC</string> - <string name="info_write_tag_unsupported">Acest aparat nu are suport NFC</string> - <string name="info_write_tag_disabled">NFC este dezactivat. Vă rugăm să-l activaţi în meniul de setări.</string> - <string name="info_openhab_apiversion_label">versiune openHAB Rest API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Secret</string> - <string name="info_openhab_push_notification_label">Starea notificărilor Push</string> - <string name="action_settings">Setări</string> - <string name="nfc_dialog_title">Scrie o actiune in tag-ul NFC pentru acest element</string> - <string name="info_not_set">Nu este setat</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Nicio notificare nu a fost trimisă până acum</string> - <string name="notification_list_error">A apărut o eroare în timpul încărcării notificărilor</string> - <string name="list_loading_message">Se încarcă\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Acceptare certificat necunoscut?</string> - <string name="mtm_trust_anchor">Certificatul serverului nu este semnat de o Autoritate de Certificare cunoscută</string> - <string name="mtm_cert_expired">Certificatul serverului a expirat</string> - <string name="mtm_accept_servername">Acceptați nepotrivirea numelui serverului?</string> - <string name="mtm_hostname_mismatch">Serverul nu a putut faca autentificarea ca \"%s\". Certificatul este valid doar pentru:</string> - <string name="mtm_connect_anyway">Vreți să vă conectați oricum?</string> - <string name="mtm_cert_details">Detalii certificat:</string> - <string name="mtm_decision_always">Acceptare</string> - <string name="mtm_decision_once">O singură dată</string> - <string name="mtm_decision_abort">Renunță</string> - <string name="mtm_notification">Verificare certificat</string> - <string name="settings_openhab_none">Niciunul</string> - <!-- Themes --> - <string name="theme_name_light">Luminos</string> - <string name="theme_name_dark">Întunecat</string> - <string name="theme_name_black">Negru/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI întunecat</string> - <!-- NFC --> - <string name="nfc_action_on">Pornit</string> - <string name="nfc_action_up">Sus</string> - <string name="nfc_action_off">Oprit</string> - <string name="nfc_action_down">Jos</string> - <string name="nfc_action_toggle">Comută</string> - <string name="nfc_activate">Activare</string> - <string name="nfc_action_current_color">Culoarea curentă</string> - <string name="nfc_action_to_sitemap_page">Navigare la pagina Sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Secțiunea Sitemap deschisă</string> - <string name="drawer_close">Secțiunea Sitemap închisă</string> - <string name="mainmenu_openhab_voice_recognition">Recunoaștere voce</string> - <!-- About --> - <string name="about_title">Despre</string> - <string name="about_license_title">Licenţă</string> - <string name="about_changelog">Istoric modificări</string> - <string name="about_source_code">Cod sursă</string> - <string name="about_issues">Raportaţi o problemă</string> - <string name="about_docs">Documentație</string> - <string name="about_community_forum">Forum-ul comunității</string> - <string name="about_foundation">Fundația openHAB</string> - <string name="about_community">Comunitatea openHAB</string> - <string name="about_server">Serverul openHAB</string> - <string name="about_translation">Ajutați-ne să traducem openHAB</string> - <string name="about_privacy_policy">Politica de confidențialitate</string> - <string name="settings_debug_messages_title">Arată informaţii pentru depanare</string> - <string name="error_couldnt_determine_openhab_url">Nu a putut fi determinată adresa URL pentru openHAB</string> - <string name="unknown">Necunoscut</string> - <string name="error_network_type_unsupported">Tipul de reţea (%s) nu este acceptat</string> - <string name="set">Setează</string> - <string name="cancel">Anulează</string> - <string name="close">Închide</string> - <string name="try_again_button">Încearcă din nou</string> - <string name="go_to_settings_button">Mergi la setări</string> - <string name="configuration_missing">Serverul dumneavoastră openHAB nu a putut fi găsit automat. Vă rugăm configurați adresa IP sau numele în setările serverului.</string> - <string name="no_remote_server">Rețeaua locală nu este disponibilă și nu ați configurat un server distant</string> - <string name="resolving_openhab">Se încearcă găsirea unui server openHAB\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Deschide oblonul</string> - <string name="content_description_stop_roller_shutter">Oprește oblonul</string> - <string name="content_description_close_roller_shutter">Închide oblonul</string> - <string name="content_description_open_color_wheel">Deschidere selector culoare</string> - <string name="content_description_color_up">Pornit sau ține apăsat pentru a crește luminozitatea</string> - <string name="content_description_color_down">Oprit sau ține apăsat pentru a diminua luminozitatea</string> - <string name="content_description_open_number_picker">Deschide selectorul de numere</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Deschide openHAB</string> - <string name="swipe_to_refresh_description">Aplicația se actualizează automat, în mod normal nu este necesar să faceți actualizarea manual</string> - <string name="swipe_to_refresh_dismiss">Am înțeles!</string> - <!-- Intro strings --> - <string name="app_intro">Introducere</string> - <string name="intro_welcome">Bine ați venit la openHAB</string> - <string name="intro_whatis">Un software open source de automatizare pentru locuința dumneavoastră, independent de producători și tehnologii</string> - <string name="intro_themes">Teme</string> - <string name="intro_themes_description">Alege dintre câteva teme</string> - <string name="intro_voice_description">Controlați-vă locuința cu vocea</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Controlul unui Item poate fi legat de NFC-tags apăsând lung pe Item</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">TRECI PESTE</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">GATA</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Setări</string> + <string name="app_notifications">Notificări</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Harta site-ului</string> + <string name="mainmenu_openhab_preferences">Setări</string> + <string name="mainmenu_openhab_selectsitemap">Selecteaza fisierul Sitemap implicit</string> + <string name="mainmenu_openhab_clearcache">Șterge imaginile din cache</string> + <!-- App settings strings --> + <string name="settings_connection_title">Conexiune</string> + <string name="settings_display_title">Afișaj</string> + <string name="settings_misc_title">Diverse</string> + <string name="settings_openhab_url">Adresa URL a serverului local</string> + <string name="settings_openhab_url_summary">Adresa URL pentru panoul de control openHAB (pe baza numelui sau a adresei IP). Daca este configurat, functia de autodescoperire este dezactivata. Setarea curenta: %s</string> + <string name="settings_openhab_alturl">Adresa URL a serverului distant</string> + <string name="settings_openhab_alturl_summary">Adresa URL pentru panoul de control openHAB pentru cazul in care adresa locala nu este disponibila. Setarea curenta: %s</string> + <string name="settings_openhab_username">Nume utilizator</string> + <string name="settings_openhab_password">Parola</string> + <string name="settings_openhab_password_summary_weak">Ati ales o parola slaba</string> + <string name="settings_openhab_password_summary_strong">Ati ales o parola puternica</string> + <string name="settings_openhab_sslclientcert">Certificat SSL client</string> + <string name="settings_openhab_sslclientcert_howto_summary">Apasati aici pentru cateva instructiuni si explicatii descpre cum se seteaza autentificarea clientului prin certificat SSL</string> + <string name="settings_openhab_screentimeroff">Dezactiveaza afisarea cronometrului</string> + <string name="settings_openhab_screentimeroff_summary">Dezactiveaza afisarea comutatorului de oprire a cronometrului atunci cand openHAB este pornit</string> + <string name="settings_openhab_demomode">Modul demonstrativ</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Ecran complet</string> + <string name="settings_openhab_fullscreen_summary">Afișează în modul ecran complet</string> + <string name="settings_openhab_icon_format">Format pictograma</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vector</string> + <string name="settings_chart_scaling">Scalare grafic</string> + <string name="settings_chart_scaling_summary">Nota: O scara redusa micsoreaza scrisul si grosimile liniilor pentru a fi mai mult spatiu pe grafic, dar lizibilitatea textului poate suferi.</string> + <string name="settings_chart_scaling_value_xs">Foarte mic</string> + <string name="settings_chart_scaling_value_s">Mic</string> + <string name="settings_chart_scaling_value_m">Implicit</string> + <string name="settings_chart_scaling_value_l">Mare</string> + <string name="settings_ringtone">Sonerie de notificare</string> + <string name="settings_ringtone_none">Nici unul</string> + <string name="settings_clear_default_sitemap">Sterge fisierul Sitemap implicit</string> + <string name="settings_no_default_sitemap">Niciun Sitemap implicit nu este selectat</string> + <string name="settings_current_default_sitemap">Predefiniție actuală Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Control de la distanţă</string> + <string name="settings_openhab_connection">Local</string> + <string name="settings_notification_vibration">Vibratie la notificare</string> + <string name="settings_notification_vibration_off">Oprit</string> + <string name="settings_notification_vibration_short">Scurt</string> + <string name="settings_notification_vibration_long">Lung</string> + <string name="settings_notification_vibration_twice">De doua ori</string> + <string name="settings_connection_summary">Conectat la %s</string> + <string name="settings_insecure_connection_summary">Conexiune nesigura la %s</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, la comanda ta!</string> + <string name="info_voice_recognized_text">Comandă recunoscută: %1$s</string> + <string name="info_demo_mode_short">Rulează în modul demonstrativ</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Se conectează la URL-ul local</string> + <string name="info_conn_rem_url">Conectare la adresa URL la distanță</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB a returnat lista Sitemap goală</string> + <string name="error_network_not_available">Rețeaua nu este disponibilă</string> + <string name="error_http_connection_failed">Conexiune eșuată. Un răspuns neașteptat a fost primit în încercarea de conectare la serverul openHAB configurat (Received HTTP response code: %d).</string> + <string name="error_invalid_url">Introdu adresa URL în forma \'http(s)://host(:port)/\'</string> + <string name="error_connection_failed">Conectarea la dispozitiv a eșuat!</string> + <string name="error_unable_to_resolve_hostname">Nu se poate rezulta numele dispozitivului (hostname)</string> + <string name="error_connection_sslhandshake_failed">Conexiune SSL eșuată</string> + <string name="error_certificate_not_trusted">Certificatul SSL nu este de încredere. Vă rugăm importați certificatul de bază sau acceptați certificatul în timpul etapei de conectare SSL.</string> + <string name="error_certificate_expired">Certificatul SSL a expirat. Vă rugăm obțineți un nou certificat sau acceptați certificatul in timpul etapei de conectare SSL.</string> + <string name="error_certificate_not_valid_yet">Certificatul SSL nu este încă valid. Vă rugăm să acceptați certificatul în timpul etapei de conectare SSL. De asemenea, verificați dacă ceasul este setat corect pe dispozitivul dumneavoastră.</string> + <string name="error_certificate_revoked">Certificatul SSL a fost revocat. Vă rugăm obțineți un nou certificat sau acceptați certificatul în timpul etapei de conectare SSL.</string> + <string name="error_certificate_wrong_host">Certificatul SSL nu este valid pentru %s</string> + <string name="error_http_code_401">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 401).</string> + <string name="error_http_code_403">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 403).</string> + <string name="error_http_code_407">Autentificare eșuată. Vă rugăm verificați numele de utilizator și parola, respectiv certificatul SSL (HTTP response code 407).</string> + <string name="error_http_code_414">URL-ul este prea lung. Vă rugăm să utilizaţi adresa IP sau un URL mai scurt (HTTP response code 414).</string> + <string name="error_http_code_426">Este necesar HTTPS. Vă rugăm schimbați adresa URL (HTTP response code 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autentificare eșuată. Vă rugăm verificați certificatul SSL (cod raspuns HTTP 495).</string> + <string name="error_http_code_496">Este necesar un certificat de client SSL (cod raspuns HTTP 496)</string> + <string name="error_http_code_502">Serverul dumneavoastră proxy a primit un răspuns invalid de la serverul openHAB (cod răspuns HTTP 502)</string> + <string name="error_http_code_503">Serverul openHAB este temporar indisponibil (cod raspuns HTTP 503)</string> + <string name="error_http_code_504">Expirare conexiune gateway. Se pare că serverul proxy este pornit, însă nu a putut primi un raspuns de la serverul openHAB (cod răspuns HTTP 504).</string> + <string name="error_http_code_507">Serverul openHAB nu are suficient spațiu liber (cod răspuns HTTP 507)</string> + <string name="error_http_code_511">Autentificarea în rețea este necesară (cod răspuns HTTP 511)</string> + <string name="error_about_no_conn">Eroare la obținerea informațiilor despre serverul openHAB</string> + <string name="error_openhab_offline">Serverul dumneavoastră openHAB este offline în timp ce instanța cloud este pornită</string> + <string name="title_activity_openhabwritetag">Scrie NFC-tag</string> + <string name="title_activity_libraries">Librării utilizate</string> + <string name="info_write_tag">Atingeţi eticheta şi păstraţi tag-ul NFC aproape, până când apare mesajul de confirmare</string> + <string name="info_write_tag_progress">Se scrie tag-ul NFC</string> + <string name="info_write_tag_finished">Terminat cu succes</string> + <string name="info_write_failed">Eroare la scrierea tag-ului NFC</string> + <string name="info_write_tag_unsupported">Acest aparat nu are suport NFC</string> + <string name="info_write_tag_disabled">NFC este dezactivat. Vă rugăm să-l activaţi în meniul de setări.</string> + <string name="info_openhab_apiversion_label">versiune openHAB Rest API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Secret</string> + <string name="info_openhab_push_notification_label">Starea notificărilor Push</string> + <string name="action_settings">Setări</string> + <string name="nfc_dialog_title">Scrie o actiune in tag-ul NFC pentru acest element</string> + <string name="info_not_set">Nu este setat</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Nicio notificare nu a fost trimisă până acum</string> + <string name="notification_list_error">A apărut o eroare în timpul încărcării notificărilor</string> + <string name="list_loading_message">Se încarcă\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Acceptare certificat necunoscut?</string> + <string name="mtm_trust_anchor">Certificatul serverului nu este semnat de o Autoritate de Certificare cunoscută</string> + <string name="mtm_cert_expired">Certificatul serverului a expirat</string> + <string name="mtm_accept_servername">Acceptați nepotrivirea numelui serverului?</string> + <string name="mtm_hostname_mismatch">Serverul nu a putut faca autentificarea ca \"%s\". Certificatul este valid doar pentru:</string> + <string name="mtm_connect_anyway">Vreți să vă conectați oricum?</string> + <string name="mtm_cert_details">Detalii certificat:</string> + <string name="mtm_decision_always">Acceptare</string> + <string name="mtm_decision_once">O singură dată</string> + <string name="mtm_decision_abort">Renunță</string> + <string name="mtm_notification">Verificare certificat</string> + <string name="settings_openhab_none">Niciunul</string> + <!-- Themes --> + <string name="theme_name_light">Luminos</string> + <string name="theme_name_dark">Întunecat</string> + <string name="theme_name_black">Negru/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI întunecat</string> + <!-- NFC --> + <string name="nfc_action_on">Pornit</string> + <string name="nfc_action_up">Sus</string> + <string name="nfc_action_off">Oprit</string> + <string name="nfc_action_down">Jos</string> + <string name="nfc_action_toggle">Comută</string> + <string name="nfc_activate">Activare</string> + <string name="nfc_action_current_color">Culoarea curentă</string> + <string name="nfc_action_to_sitemap_page">Navigare la pagina Sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Secțiunea Sitemap deschisă</string> + <string name="drawer_close">Secțiunea Sitemap închisă</string> + <string name="mainmenu_openhab_voice_recognition">Recunoaștere voce</string> + <!-- About --> + <string name="about_title">Despre</string> + <string name="about_license_title">Licenţă</string> + <string name="about_changelog">Istoric modificări</string> + <string name="about_source_code">Cod sursă</string> + <string name="about_issues">Raportaţi o problemă</string> + <string name="about_docs">Documentație</string> + <string name="about_community_forum">Forum-ul comunității</string> + <string name="about_foundation">Fundația openHAB</string> + <string name="about_community">Comunitatea openHAB</string> + <string name="about_server">Serverul openHAB</string> + <string name="about_translation">Ajutați-ne să traducem openHAB</string> + <string name="about_privacy_policy">Politica de confidențialitate</string> + <string name="settings_debug_messages_title">Arată informaţii pentru depanare</string> + <string name="error_couldnt_determine_openhab_url">Nu a putut fi determinată adresa URL pentru openHAB</string> + <string name="unknown">Necunoscut</string> + <string name="error_network_type_unsupported">Tipul de reţea (%s) nu este acceptat</string> + <string name="set">Setează</string> + <string name="cancel">Anulează</string> + <string name="close">Închide</string> + <string name="try_again_button">Încearcă din nou</string> + <string name="go_to_settings_button">Mergi la setări</string> + <string name="resolving_openhab">Se încearcă găsirea unui server openHAB\u2026</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Deschide oblonul</string> + <string name="content_description_stop_roller_shutter">Oprește oblonul</string> + <string name="content_description_close_roller_shutter">Închide oblonul</string> + <string name="content_description_open_color_wheel">Deschidere selector culoare</string> + <string name="content_description_color_up">Pornit sau ține apăsat pentru a crește luminozitatea</string> + <string name="content_description_color_down">Oprit sau ține apăsat pentru a diminua luminozitatea</string> + <string name="content_description_open_number_picker">Deschide selectorul de numere</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Deschide openHAB</string> + <string name="swipe_to_refresh_description">Aplicația se actualizează automat, în mod normal nu este necesar să faceți actualizarea manual</string> + <string name="swipe_to_refresh_dismiss">Am înțeles!</string> + <!-- Intro strings --> + <string name="app_intro">Introducere</string> + <string name="intro_welcome">Bine ați venit la openHAB</string> + <string name="intro_whatis">Un software open source de automatizare pentru locuința dumneavoastră, independent de producători și tehnologii</string> + <string name="intro_themes">Teme</string> + <string name="intro_themes_description">Alege dintre câteva teme</string> + <string name="intro_voice_description">Controlați-vă locuința cu vocea</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Controlul unui Item poate fi legat de NFC-tags apăsând lung pe Item</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">TRECI PESTE</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">GATA</string> </resources> diff --git a/mobile/src/main/res/values-ru/strings.xml b/mobile/src/main/res/values-ru/strings.xml index 2ca58dc926804b202d99078b91e61190a99361d3..20288cbacc018056e029e0c1923cc481d34ff73e 100644 --- a/mobile/src/main/res/values-ru/strings.xml +++ b/mobile/src/main/res/values-ru/strings.xml @@ -1,195 +1,202 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Настройки</string> - <string name="app_notifications">Уведомления</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Настройки</string> - <string name="mainmenu_openhab_selectsitemap">Выбрать sitemap по умолчанию</string> - <string name="mainmenu_openhab_clearcache">Очистить кэш изображений</string> - <!-- App settings strings --> - <string name="settings_connection_title">Параметры подключения</string> - <string name="settings_display_title">Параметры дисплея</string> - <string name="settings_misc_title">Прочее</string> - <string name="settings_openhab_url">URL адрес локального openHAB</string> - <string name="settings_openhab_url_summary">URL-адрес панели openHAB. Если указано имя хоста или IP-адрес, то автообнаружение будет отключено. Текущие настройки: %s</string> - <string name="settings_openhab_alturl">URL-адрес удаленного openHAB</string> - <string name="settings_openhab_alturl_summary">URL-адрес панели openHAB, используется, когда локальный адрес недоступен. Текущие настройки: %s</string> - <string name="settings_openhab_username">Пользователь</string> - <string name="settings_openhab_password">Пароль</string> - <string name="settings_openhab_password_summary_weak">Слабый пароль</string> - <string name="settings_openhab_password_summary_strong">Надежный пароль</string> - <string name="settings_openhab_sslclientcert">SSL сертификат клиента</string> - <string name="settings_openhab_sslclientcert_howto_summary">Коснитесь здесь, чтобы получить подсказки по настройке SSL-сертификата клиента</string> - <string name="settings_openhab_screentimeroff">Отключить таймер дисплея</string> - <string name="settings_openhab_screentimeroff_summary">Дисплей всегда включен при запущенном openHAB</string> - <string name="settings_openhab_demomode">Демо режим</string> - <string name="settings_openhab_demomode_summary">Запуск демо режима</string> - <string name="settings_openhab_theme">Тема</string> - <string name="settings_openhab_fullscreen">Во весь экран</string> - <string name="settings_openhab_fullscreen_summary">Показать во весь экран</string> - <string name="settings_openhab_icon_format">Формат иконок</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vector</string> - <string name="settings_chart_scaling">Масштаб графика</string> - <string name="settings_chart_scaling_summary">Примечание. Уменьшение масштаба сокращает размер шрифтов и толщину линий, поэтому для графика остается больше места, но может пострадать читаемость шрифтов.</string> - <string name="settings_chart_scaling_value_xs">Очень маленький</string> - <string name="settings_chart_scaling_value_s">Маленький</string> - <string name="settings_chart_scaling_value_m">По умолчанию</string> - <string name="settings_chart_scaling_value_l">Большой</string> - <string name="settings_ringtone">Звук уведомления</string> - <string name="settings_ringtone_none">Без рингтона</string> - <string name="settings_clear_default_sitemap">Очистить sitemap по умолчанию</string> - <string name="settings_no_default_sitemap">Не выбран Sitemap по умолчанию</string> - <string name="settings_current_default_sitemap">Текущий sitemap по умолчанию: %1$s</string> - <string name="settings_openhab_alt_connection">Удаленный сервер</string> - <string name="settings_openhab_connection">Локальный сервер</string> - <string name="settings_notification_vibration">Вибрация при уведомлениях</string> - <string name="settings_notification_vibration_off">Выкл</string> - <string name="settings_notification_vibration_short">Коротко</string> - <string name="settings_notification_vibration_long">Длинно</string> - <string name="settings_notification_vibration_twice">Дважды</string> - <string name="settings_connection_summary">Подключен к %s</string> - <string name="settings_insecure_connection_summary">Подключен к %s без проверки безопасности</string> - <!-- App messages strings --> - <string name="title_voice_widget">Голосовые команды openHAB</string> - <string name="info_voice_input">openHAB, Ваша команда!</string> - <string name="info_voice_recognized_text">Принятая команда: %1$s</string> - <string name="info_demo_mode_short">Запущен демо режим</string> - <string name="info_conn_url">Подключение к локальному URL</string> - <string name="info_conn_rem_url">Подключение к удаленному URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB вернул пустой список sitemap</string> - <string name="error_network_not_available">Сеть недоступна</string> - <string name="error_http_connection_failed">Ошибка подключения. Получен неверный ответ от openHAB. Пожалуйста, проверьте, работает ли openHAB правильно (код ответа HTTP %d).</string> - <string name="error_invalid_url">Пожалуйста, укажите правильный URL в формате \'http(s)://хост(:порт)/\'</string> - <string name="error_connection_failed">Ошибка подключения к хосту</string> - <string name="error_unable_to_resolve_hostname">Не удалось разрешить имя хоста</string> - <string name="error_connection_sslhandshake_failed">Ошибка SSL соединения</string> - <string name="error_certificate_not_trusted">SSL-сертификат не является доверенным. Пожалуйста импортируйте корневой сертификат или подтвердите его во время SSL подключения.</string> - <string name="error_certificate_expired">Сертификат SSL истек. Получите новый сертификат или отключите проверку подлинности во время SSL подключения.</string> - <string name="error_certificate_not_valid_yet">Сертификат SSL недопустим. Получите корректный сертификат или отключите его проверку. Также проверьте, правильно ли установлены часы и часовой пояс на вашем устройстве.</string> - <string name="error_certificate_revoked">Сертификат SSL отклонен. Получите новый сертификат или отключите его проверку.</string> - <string name="error_certificate_wrong_host">SSL сертификат не действителен для %s</string> - <string name="error_http_code_401">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 401).</string> - <string name="error_http_code_403">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 403).</string> - <string name="error_http_code_407">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 407).</string> - <string name="error_http_code_414">URL-адрес openHAB слишком длинный. Пожалуйста используйте IP-адрес или сократите URL (код ответа HTTP 414).</string> - <string name="error_http_code_426">Требуется HTTPS. Измените URL-адрес openHAB (код ответа HTTP 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Ошибка авторизации. Неверный сертификат клиента SSL (код ответа HTTP 495).</string> - <string name="error_http_code_496">Требуется сертификат SSL-клиента (код ответа HTTP 496)</string> - <string name="error_http_code_502">Ваш прокси получил неверный ответ от openHAB (код ответа HTTP 502)</string> - <string name="error_http_code_503">openHAB временно недоступен (код ответа HTTP 503)</string> - <string name="error_http_code_504">Тайм-аут шлюза. Возможно, что ваш прокси-сервер работает, но не может получить ответ от сервера openHAB (код ответа HTTP 504).</string> - <string name="error_http_code_507">Серверу openHAB недостаточно свободного места (код ответа HTTP 507)</string> - <string name="error_http_code_511">Требуется сетевая аутентификация (код ответа HTTP 511)</string> - <string name="error_about_no_conn">Ошибка при получении данных с сервера openHAB</string> - <string name="error_openhab_offline">Ваш сервер openHAB не доступен, но его экземпляр в облаке работает</string> - <string name="error_no_app_store_found">Не найден магазин приложений для установки системы распознавания голоса</string> - <string name="title_activity_openhabwritetag">Запись NFC tag</string> - <string name="title_activity_libraries">Используемые библиотеки</string> - <string name="info_write_tag">Прикоснитесь к тегу и удерживайте его, пока не появится сообщение подтверждения</string> - <string name="info_write_tag_progress">Запись тега</string> - <string name="info_write_tag_finished">Успешно</string> - <string name="info_write_failed">Ошибка записи метки</string> - <string name="info_write_tag_unsupported">Это устройство не поддерживает NFC</string> - <string name="info_write_tag_disabled">NFC выключено. Пожалуйста включите в настройках устройства.</string> - <string name="info_openhab_apiversion_label">Rest API версия openHAB</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">Пароль openHAB</string> - <string name="info_openhab_push_notification_label">Статус Push-уведомлений</string> - <string name="action_settings">Настройки</string> - <string name="nfc_dialog_title">Выберите действие тега NFC</string> - <string name="info_not_set">Не задано</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Нет недавно отправленных уведомлений</string> - <string name="notification_list_error">Ошибка при загрузке уведомлений</string> - <string name="list_loading_message">Загрузка\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Принять неизвестный сертификат?</string> - <string name="mtm_trust_anchor">Сертификат не подписан авторизованным центром сертификации</string> - <string name="mtm_cert_expired">Срок действия сертификата истёк</string> - <string name="mtm_accept_servername">Имя сервера не совпадает. Принять?</string> - <string name="mtm_hostname_mismatch">Сервер не может проверить подлинность как \"%s\". Сертификат действителен только для:</string> - <string name="mtm_connect_anyway">Все равно подключиться?</string> - <string name="mtm_cert_details">Данные сертификата:</string> - <string name="mtm_decision_always">Принять</string> - <string name="mtm_decision_once">Один раз</string> - <string name="mtm_decision_abort">Отмена</string> - <string name="mtm_notification">Проверка сертификата</string> - <string name="settings_openhab_none">Нет</string> - <!-- Themes --> - <string name="theme_name_light">Светлая</string> - <string name="theme_name_dark">Темная</string> - <string name="theme_name_black">Чёрная/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Черный Basic UI</string> - <!-- NFC --> - <string name="nfc_action_on">Вкл</string> - <string name="nfc_action_up">Вверх</string> - <string name="nfc_action_off">Выкл</string> - <string name="nfc_action_down">Вниз</string> - <string name="nfc_action_toggle">Переключить</string> - <string name="nfc_activate">Включить</string> - <string name="nfc_action_current_color">Текущий цвет</string> - <string name="nfc_action_to_sitemap_page">Перейти на страницу sitemap</string> - <!-- Drawer --> - <string name="drawer_open">Отображение Sitemap открыто</string> - <string name="drawer_close">Отображение Sitemap закрыто</string> - <string name="mainmenu_openhab_voice_recognition">Распознавание голоса</string> - <!-- About --> - <string name="about_title">О программе</string> - <string name="about_license_title">Лицензия</string> - <string name="about_changelog">Список изменений</string> - <string name="about_source_code">Исходный код</string> - <string name="about_issues">Сообщить об ошибке</string> - <string name="about_docs">Документация</string> - <string name="about_community_forum">Форум</string> - <string name="about_foundation">Фонд openHAB</string> - <string name="about_community">Сообщество openHAB</string> - <string name="about_server">Сервер openHAB</string> - <string name="about_translation">Помощь в переводе openHAB</string> - <string name="about_privacy_policy">Политика конфиденциальности</string> - <string name="settings_debug_messages_title">Cведения об устранении неполадок</string> - <string name="error_couldnt_determine_openhab_url">Не удалось определить адрес openHAB</string> - <string name="unknown">Неизвестно</string> - <string name="error_network_type_unsupported">Тип сети (%s) не поддерживается</string> - <string name="set">Установить</string> - <string name="cancel">Отменить</string> - <string name="close">Закрыть</string> - <string name="try_again_button">Попробуйте снова</string> - <string name="go_to_settings_button">Перейти к настройкам</string> - <string name="configuration_missing">Ваш сервер openHAB не был обнаружен автоматически. Пожалуйста, настройте его IP адрес или имя хоста в настройках сервера.</string> - <string name="no_remote_server">Локальная сеть недоступна и не настроен удаленный сервер</string> - <string name="resolving_openhab">Пытаюсь обнаружить сервер openHAB\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Открыть рольставни</string> - <string name="content_description_stop_roller_shutter">Остановить рольставни</string> - <string name="content_description_close_roller_shutter">Закрыть рольставни</string> - <string name="content_description_open_color_wheel">Открыть цветовой круг</string> - <string name="content_description_color_up">Нажимайте \'вверх\' или удерживайте, чтобы увеличить яркость</string> - <string name="content_description_color_down">Нажимайте \'ввниз\' или удерживайте, чтобы уменьшить яркость</string> - <string name="content_description_open_number_picker">Число</string> - <string name="content_description_video">Видео</string> - <string name="content_description_open_openhab">Открыть openHAB</string> - <string name="swipe_to_refresh_description">Приложение также обновляется автоматически, обычно нет необходимости делать это вручную</string> - <string name="swipe_to_refresh_dismiss">Ясно!</string> - <!-- Intro strings --> - <string name="app_intro">Введение</string> - <string name="intro_welcome">Добро пожаловать в openHAB</string> - <string name="intro_whatis">Поставщик технологий с открытым исходным кодом для автоматизации \"умного дома\"</string> - <string name="intro_themes">Темы</string> - <string name="intro_themes_description">Переключение между разными темами</string> - <string name="intro_voice_description">Управляйте домом своим голосом</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Элемент управления может быть привязан к NFC тегам долгим нажатием на этот элемент</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">ПРОПУСТИТЬ</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">ГОТОВО</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Настройки</string> + <string name="app_notifications">Уведомления</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Настройки</string> + <string name="mainmenu_openhab_selectsitemap">Выбрать sitemap по умолчанию</string> + <string name="mainmenu_openhab_clearcache">Очистить кэш изображений</string> + <!-- App settings strings --> + <string name="settings_connection_title">Параметры подключения</string> + <string name="settings_display_title">Параметры дисплея</string> + <string name="settings_misc_title">Прочее</string> + <string name="settings_openhab_url">URL адрес локального openHAB</string> + <string name="settings_openhab_url_summary">URL-адрес панели openHAB. Если указано имя хоста или IP-адрес, то автообнаружение будет отключено. Текущие настройки: %s</string> + <string name="settings_openhab_alturl">URL-адрес удаленного openHAB</string> + <string name="settings_openhab_alturl_summary">URL-адрес панели openHAB используется, когда локальный адрес недоступен. Текущие настройки: %s</string> + <string name="settings_openhab_username">Пользователь</string> + <string name="settings_openhab_password">Пароль</string> + <string name="settings_openhab_password_summary_weak">Слабый пароль</string> + <string name="settings_openhab_password_summary_strong">Надежный пароль</string> + <string name="settings_openhab_sslclientcert">SSL сертификат клиента</string> + <string name="settings_openhab_sslclientcert_howto_summary">Коснитесь здесь, чтобы получить подсказки по настройке SSL-сертификата клиента</string> + <string name="settings_openhab_screentimeroff">Отключить таймер дисплея</string> + <string name="settings_openhab_screentimeroff_summary">Дисплей всегда включен при запущенном openHAB</string> + <string name="settings_openhab_demomode">Демо режим</string> + <string name="settings_openhab_demomode_summary">Если у вас нет сервера openHAB - включите режим Демо, чтобы понять на что способен openHAB.</string> + <string name="settings_openhab_theme">Тема</string> + <string name="settings_openhab_fullscreen">Во весь экран</string> + <string name="settings_openhab_fullscreen_summary">Показать во весь экран</string> + <string name="settings_openhab_icon_format">Формат иконок</string> + <string name="settings_openhab_icon_format_png">Точечный рисунок</string> + <string name="settings_openhab_icon_format_svg">Vector</string> + <string name="settings_chart_scaling">Масштаб графика</string> + <string name="settings_chart_scaling_summary">Примечание. Уменьшение масштаба сокращает размер шрифтов и толщину линий, поэтому для графика остается больше места, но может пострадать читаемость шрифтов.</string> + <string name="settings_chart_scaling_value_xs">Очень маленький</string> + <string name="settings_chart_scaling_value_s">Маленький</string> + <string name="settings_chart_scaling_value_m">По умолчанию</string> + <string name="settings_chart_scaling_value_l">Большой</string> + <string name="settings_openhab_chart_hq">Графики в высоком разрешении</string> + <string name="settings_openhab_chart_hq_summary">Создание графиков может выполняться сервером. Если ваш сервер не достаточно мощный и вы испытываете проблемы со скоростью их загрузки, отключите этот параметр.</string> + <string name="settings_ringtone">Звук уведомления</string> + <string name="settings_ringtone_none">Без рингтона</string> + <string name="settings_clear_default_sitemap">Очистить sitemap по умолчанию</string> + <string name="settings_no_default_sitemap">Не выбран Sitemap по умолчанию</string> + <string name="settings_current_default_sitemap">Текущий sitemap по умолчанию: %1$s</string> + <string name="settings_openhab_alt_connection">Удаленный сервер</string> + <string name="settings_openhab_connection">Локальный сервер</string> + <string name="settings_notification_vibration">Вибрация при уведомлениях</string> + <string name="settings_notification_vibration_off">Выкл</string> + <string name="settings_notification_vibration_short">Коротко</string> + <string name="settings_notification_vibration_long">Длинно</string> + <string name="settings_notification_vibration_twice">Дважды</string> + <string name="settings_connection_summary">Подключен к %s</string> + <string name="settings_insecure_connection_summary">Подключен к %s без проверки безопасности</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, Ваша команда!</string> + <string name="info_voice_recognized_text">Принятая команда: %1$s</string> + <string name="info_demo_mode_short">Запущен демо режим</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Выключить</string> + <string name="info_conn_url">Подключение к локальному URL</string> + <string name="info_conn_rem_url">Подключение к удаленному URL</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB вернул пустой список sitemap</string> + <string name="error_network_not_available">Сеть недоступна</string> + <string name="error_http_connection_failed">Ошибка подключения. Получен неверный ответ от openHAB. Пожалуйста, проверьте, работает ли openHAB правильно (код ответа HTTP %d).</string> + <string name="error_invalid_url">Пожалуйста, укажите правильный URL в формате \'http(s)://хост(:порт)/\'</string> + <string name="error_connection_failed">Ошибка подключения к хосту</string> + <string name="error_unable_to_resolve_hostname">Не удалось разрешить имя хоста</string> + <string name="error_connection_sslhandshake_failed">Ошибка SSL соединения</string> + <string name="error_certificate_not_trusted">SSL-сертификат не является доверенным. Пожалуйста импортируйте корневой сертификат или подтвердите его во время SSL подключения.</string> + <string name="error_certificate_expired">Сертификат SSL истек. Получите новый сертификат или отключите проверку подлинности во время SSL подключения.</string> + <string name="error_certificate_not_valid_yet">Сертификат SSL недопустим. Получите корректный сертификат или отключите его проверку. Также проверьте, правильно ли установлены часы и часовой пояс на вашем устройстве.</string> + <string name="error_certificate_revoked">Сертификат SSL отклонен. Получите новый сертификат или отключите его проверку.</string> + <string name="error_certificate_wrong_host">SSL сертификат не действителен для %s</string> + <string name="error_http_code_401">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 401).</string> + <string name="error_http_code_403">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 403).</string> + <string name="error_http_code_407">Ошибка аутентификации пользователя. Проверьте имя пользователя, пароль и сертификат клиента SSL (код ответа HTTP 407).</string> + <string name="error_http_code_414">URL-адрес openHAB слишком длинный. Пожалуйста используйте IP-адрес или сократите URL (код ответа HTTP 414).</string> + <string name="error_http_code_426">Требуется HTTPS. Измените URL-адрес openHAB (код ответа HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Ошибка авторизации. Неверный сертификат клиента SSL (код ответа HTTP 495).</string> + <string name="error_http_code_496">Требуется сертификат SSL-клиента (код ответа HTTP 496)</string> + <string name="error_http_code_502">Ваш прокси получил неверный ответ от openHAB (код ответа HTTP 502)</string> + <string name="error_http_code_503">openHAB временно недоступен (код ответа HTTP 503)</string> + <string name="error_http_code_504">Тайм-аут шлюза. Возможно, что ваш прокси-сервер работает, но не может получить ответ от сервера openHAB (код ответа HTTP 504).</string> + <string name="error_http_code_507">Серверу openHAB недостаточно свободного места (код ответа HTTP 507)</string> + <string name="error_http_code_511">Требуется сетевая аутентификация (код ответа HTTP 511)</string> + <string name="error_about_no_conn">Ошибка при получении данных с сервера openHAB</string> + <string name="error_openhab_offline">Ваш сервер openHAB не доступен, но его экземпляр в облаке работает</string> + <string name="title_activity_openhabwritetag">Запись NFC tag</string> + <string name="title_activity_libraries">Используемые библиотеки</string> + <string name="info_write_tag">Прикоснитесь к тегу и удерживайте его, пока не появится сообщение подтверждения</string> + <string name="info_write_tag_progress">Запись тега</string> + <string name="info_write_tag_finished">Успешно</string> + <string name="info_write_failed">Ошибка записи метки</string> + <string name="info_write_tag_unsupported">Это устройство не поддерживает NFC</string> + <string name="info_write_tag_disabled">NFC выключено. Пожалуйста включите в настройках устройства.</string> + <string name="info_openhab_apiversion_label">Rest API версия openHAB</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">Пароль openHAB</string> + <string name="info_openhab_push_notification_label">Статус Push-уведомлений</string> + <string name="action_settings">Настройки</string> + <string name="nfc_dialog_title">Выберите действие тега NFC</string> + <string name="info_not_set">Не задано</string> + <string name="empty_page">Эта страница не содержит виджетов, которые можно сделать видимыми</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Нет недавно отправленных уведомлений</string> + <string name="notification_list_error">Ошибка при загрузке уведомлений</string> + <string name="list_loading_message">Загрузка\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Принять неизвестный сертификат?</string> + <string name="mtm_trust_anchor">Сертификат не подписан авторизованным центром сертификации</string> + <string name="mtm_cert_expired">Срок действия сертификата истёк</string> + <string name="mtm_accept_servername">Имя сервера не совпадает. Принять?</string> + <string name="mtm_hostname_mismatch">Сервер не может проверить подлинность как \"%s\". Сертификат действителен только для:</string> + <string name="mtm_connect_anyway">Все равно подключиться?</string> + <string name="mtm_cert_details">Данные сертификата:</string> + <string name="mtm_decision_always">Принять</string> + <string name="mtm_decision_once">Один раз</string> + <string name="mtm_decision_abort">Отмена</string> + <string name="mtm_notification">Проверка сертификата</string> + <string name="settings_openhab_none">Нет</string> + <!-- Themes --> + <string name="theme_name_light">Светлая</string> + <string name="theme_name_dark">Темная</string> + <string name="theme_name_black">Чёрная/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Черный Basic UI</string> + <!-- NFC --> + <string name="nfc_action_on">Вкл</string> + <string name="nfc_action_up">Вверх</string> + <string name="nfc_action_off">Выкл</string> + <string name="nfc_action_down">Вниз</string> + <string name="nfc_action_toggle">Переключить</string> + <string name="nfc_activate">Включить</string> + <string name="nfc_action_current_color">Текущий цвет</string> + <string name="nfc_action_to_sitemap_page">Перейти на страницу sitemap</string> + <!-- Drawer --> + <string name="drawer_open">Отображение Sitemap открыто</string> + <string name="drawer_close">Отображение Sitemap закрыто</string> + <string name="mainmenu_openhab_voice_recognition">Распознавание голоса</string> + <!-- About --> + <string name="about_title">О программе</string> + <string name="about_license_title">Лицензия</string> + <string name="about_changelog">Список изменений</string> + <string name="about_source_code">Исходный код</string> + <string name="about_issues">Сообщить об ошибке</string> + <string name="about_docs">Документация</string> + <string name="about_community_forum">Форум</string> + <string name="about_foundation">Фонд openHAB</string> + <string name="about_community">Сообщество openHAB</string> + <string name="about_server">Сервер openHAB</string> + <string name="about_translation">Помощь в переводе openHAB</string> + <string name="about_privacy_policy">Политика конфиденциальности</string> + <string name="settings_debug_messages_title">Cведения об устранении неполадок</string> + <string name="error_couldnt_determine_openhab_url">Не удалось определить адрес openHAB</string> + <string name="unknown">Неизвестно</string> + <string name="error_network_type_unsupported">Тип сети (%s) не поддерживается</string> + <string name="set">Установить</string> + <string name="cancel">Отменить</string> + <string name="close">Закрыть</string> + <string name="try_again_button">Попробуйте снова</string> + <string name="go_to_settings_button">Перейти к настройкам</string> + <string name="resolving_openhab">Пытаюсь обнаружить сервер openHAB\u2026</string> + <!-- Log --> + <string name="log">Журнал</string> + <string name="view_log">Просмотр журнала</string> + <string name="clear_log">Очистить журнал</string> + <string name="empty_log">Журнал пуст</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Открыть рольставни</string> + <string name="content_description_stop_roller_shutter">Остановить рольставни</string> + <string name="content_description_close_roller_shutter">Закрыть рольставни</string> + <string name="content_description_open_color_wheel">Открыть цветовой круг</string> + <string name="content_description_color_up">Нажимайте \'вверх\' или удерживайте, чтобы увеличить яркость</string> + <string name="content_description_color_down">Нажимайте \'ввниз\' или удерживайте, чтобы уменьшить яркость</string> + <string name="content_description_open_number_picker">Число</string> + <string name="content_description_video">Видео</string> + <string name="content_description_open_openhab">Открыть openHAB</string> + <string name="swipe_to_refresh_description">Приложение также обновляется автоматически, обычно нет необходимости делать это вручную</string> + <string name="swipe_to_refresh_dismiss">Ясно!</string> + <!-- Intro strings --> + <string name="app_intro">Введение</string> + <string name="intro_welcome">Добро пожаловать в openHAB</string> + <string name="intro_whatis">Поставщик технологий с открытым исходным кодом для автоматизации \"умного дома\"</string> + <string name="intro_themes">Темы</string> + <string name="intro_themes_description">Переключение между разными темами</string> + <string name="intro_voice_description">Управляйте домом своим голосом</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Элемент управления может быть привязан к NFC тегам долгим нажатием на этот элемент</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">ПРОПУСТИТЬ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">ГОТОВО</string> </resources> diff --git a/mobile/src/main/res/values-sr/strings.xml b/mobile/src/main/res/values-sr/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-sr/strings.xml +++ b/mobile/src/main/res/values-sr/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-sv/strings.xml b/mobile/src/main/res/values-sv/strings.xml index 649fd8c0b797fa847aedb67ad3ec0ae83e48ddf4..bcdb3deb1f7b310ccf0d4ada52c70a69fd30e6f1 100644 --- a/mobile/src/main/res/values-sv/strings.xml +++ b/mobile/src/main/res/values-sv/strings.xml @@ -1,194 +1,193 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Inställningar</string> - <string name="app_notifications">Aviseringar</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Inställningar</string> - <string name="mainmenu_openhab_selectsitemap">Välj standard-Sitemap</string> - <string name="mainmenu_openhab_clearcache">Töm bildcache</string> - <!-- App settings strings --> - <string name="settings_connection_title">Anslutning</string> - <string name="settings_display_title">Visning</string> - <string name="settings_misc_title">Diverse</string> - <string name="settings_openhab_url">Lokal server-URL</string> - <string name="settings_openhab_url_summary">URL för openHABs dashboard (baserad på värdnamn eller IP). Om konfigurerad inaktiveras autodiscovery. Aktuell inställning: %s</string> - <string name="settings_openhab_alturl">Fjärrserver-URL</string> - <string name="settings_openhab_alturl_summary">URL för openHABs dashboard att använda när den lokala adressen inte är tillgänglig. Aktuell inställning: %s</string> - <string name="settings_openhab_username">Användarnamn</string> - <string name="settings_openhab_password">Lösenord</string> - <string name="settings_openhab_password_summary_weak">Svagt lösenord valt</string> - <string name="settings_openhab_password_summary_strong">Starkt lösenord valt</string> - <string name="settings_openhab_sslclientcert">Klientcertifikat för SSL</string> - <string name="settings_openhab_sslclientcert_howto_summary">Tryck här för att få några tips och förklaringar på hur du konfigurerar klientautentisering med SSL-certifikat</string> - <string name="settings_openhab_screentimeroff">Inaktivera visningstimer</string> - <string name="settings_openhab_screentimeroff_summary">Inaktivera automatiskt avstängning av skärmen när openHAB är igång</string> - <string name="settings_openhab_demomode">Demoläge</string> - <string name="settings_openhab_demomode_summary">Kör i demoläge</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Fullskärm</string> - <string name="settings_openhab_fullscreen_summary">Visa i fullskärmsläge</string> - <string name="settings_openhab_icon_format">Ikonformat</string> - <string name="settings_openhab_icon_format_png">Bitmapp</string> - <string name="settings_openhab_icon_format_svg">Vektor</string> - <string name="settings_chart_scaling">Diagramskalning</string> - <string name="settings_chart_scaling_summary">Obs: Mindre skalning krymper typsnitt och linjebredder, så det blir mer plats för grafen men läsbarheten kan försämras.</string> - <string name="settings_chart_scaling_value_xs">Väldigt liten</string> - <string name="settings_chart_scaling_value_s">Liten</string> - <string name="settings_chart_scaling_value_m">Standard</string> - <string name="settings_chart_scaling_value_l">Stor</string> - <string name="settings_ringtone">Aviseringsljud</string> - <string name="settings_ringtone_none">Inget</string> - <string name="settings_clear_default_sitemap">Rensa standard-Sitemap</string> - <string name="settings_no_default_sitemap">Ingen Sitemap vald som standard</string> - <string name="settings_current_default_sitemap">Nuvarande standard-Sitemap: %1$s</string> - <string name="settings_openhab_alt_connection">Fjärr</string> - <string name="settings_openhab_connection">Lokal</string> - <string name="settings_notification_vibration">Vibrera vid avisering</string> - <string name="settings_notification_vibration_off">Av</string> - <string name="settings_notification_vibration_short">Kort</string> - <string name="settings_notification_vibration_long">Lång</string> - <string name="settings_notification_vibration_twice">Två gånger</string> - <string name="settings_connection_summary">Ansluten till %s</string> - <string name="settings_insecure_connection_summary">Osäkert ansluten till %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB röstkommandon</string> - <string name="info_voice_input">openHAB, på ditt kommando!</string> - <string name="info_voice_recognized_text">Igenkänt kommando: %1$s</string> - <string name="info_demo_mode_short">Kör i demoläge</string> - <string name="info_conn_url">Ansluter till lokal URL</string> - <string name="info_conn_rem_url">Ansluter till fjärr-URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB returnerade en tom Sitemap-lista</string> - <string name="error_network_not_available">Nätverk inte tillgängligt</string> - <string name="error_http_connection_failed">Anslutningen misslyckas. Ett oväntat svar mottogs vid anslutningsförsök mot den konfigurerade openHAB-servern (mottagen HTTP-svarskod: %d).</string> - <string name="error_invalid_url">Vänligen ange en giltig URL i en formen \' http(s)://host(:port) /\'</string> - <string name="error_connection_failed">Anslutningen till värddatorn misslyckades</string> - <string name="error_unable_to_resolve_hostname">Det går inte att slå upp värdnamnet</string> - <string name="error_connection_sslhandshake_failed">SSL-handskakning misslyckades</string> - <string name="error_certificate_not_trusted">SSL-certifikatet är inte betrott. Vänligen importera rotcertifikatet eller acceptera certifikatet under SSL-handskakningen.</string> - <string name="error_certificate_expired">Giltighetstiden för SSL-certifikatet har gått ut. Vänligen skaffa ett nytt certifikat eller acceptera certifikatet under SSL-handskakningen.</string> - <string name="error_certificate_not_valid_yet">SSL-certifikatet är inte giltigt ännu. Vänligen skaffa ett giltigt certifikat eller acceptera certifikatet under SSL-handskakningen. Kontrollera också om klockan på enheten är korrekt.</string> - <string name="error_certificate_revoked">SSL-certifikatet har blivit återkallat. Vänligen skaffa ett nytt certifikat eller acceptera certifikatet under SSL-handskakningen.</string> - <string name="error_certificate_wrong_host">SSL-certifikatet är inte giltigt för %s</string> - <string name="error_http_code_401">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 401).</string> - <string name="error_http_code_403">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 403).</string> - <string name="error_http_code_407">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 407).</string> - <string name="error_http_code_414">Angiven URL är för lång. Använd IP-adressen eller en kortare webbadress (http-svarskod 414).</string> - <string name="error_http_code_426">HTTPS krävs. Vänligen ändra din URL (HTTP-svarskod 426).</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">Autentiseringen misslyckades. Vänligen kontrollera SSH-klientcertifikatet (HTTP-svarskod 495).</string> - <string name="error_http_code_496">SSL-klientcertifikat krävs (HTTP-svarskod 496)</string> - <string name="error_http_code_502">Din omvända proxy fick ett ogiltigt svar från openHAB-servern (HTTP-svarskod 502)</string> - <string name="error_http_code_503">openHAB-servern är tillfälligt otillgänglig (HTTP-svarskod 503)</string> - <string name="error_http_code_504">Gateway time-out. Det verkar som att din omvända proxy är uppe, men den får inget svar ifrån openHAB-servern (HTTP-svarskod 504).</string> - <string name="error_http_code_507">openHAB-servern har inte tillräckligt ledigt diskutrymme (HTTP-svarskod 507)</string> - <string name="error_http_code_511">Nätverksautentisering krävs (HTTP-svarskod 511)</string> - <string name="error_about_no_conn">Fel vid hämtning av information ifrån openHAB-servern</string> - <string name="error_openhab_offline">Molninstansen är igång, men din openHAB-server är offline</string> - <string name="title_activity_openhabwritetag">Skriv NFC-tagg</string> - <string name="title_activity_libraries">Bibliotek som används</string> - <string name="info_write_tag">Nudda taggen och håll den nära tills bekräftelsemeddelandet visas</string> - <string name="info_write_tag_progress">Skriver taggen</string> - <string name="info_write_tag_finished">Färdig</string> - <string name="info_write_failed">Fel vid skrivning till tagg</string> - <string name="info_write_tag_unsupported">Denna enhet har inte stöd för NFC</string> - <string name="info_write_tag_disabled">NFS är inaktiverat. Vänligen aktivera det i inställningarna för enheten.</string> - <string name="info_openhab_apiversion_label">Version på openHABs REST-API</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB-hemlighet</string> - <string name="info_openhab_push_notification_label">Status på push-aviseringar</string> - <string name="action_settings">Inställningar</string> - <string name="nfc_dialog_title">Skriv NFS-tagg för detta element</string> - <string name="info_not_set">Ej angivet</string> - <!-- Notification list strings --> - <string name="notification_list_empty">Inga aviseringar har hittills skickats</string> - <string name="notification_list_error">Ett fel uppstod när aviseringar laddades</string> - <string name="list_loading_message">Laddar\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">Acceptera okänt certifikat?</string> - <string name="mtm_trust_anchor">Serverns certifikat är inte signerat av en betrodd utfärdare</string> - <string name="mtm_cert_expired">Serverns certifikat har gått ut</string> - <string name="mtm_accept_servername">Acceptera omatchande servernamn?</string> - <string name="mtm_hostname_mismatch">Servern kunde inte autentisera sig som \"%s\". Certifikatet är enbart giltigt för:</string> - <string name="mtm_connect_anyway">Vill du ansluta ändå?</string> - <string name="mtm_cert_details">Certifikatsdetaljer:</string> - <string name="mtm_decision_always">Acceptera</string> - <string name="mtm_decision_once">En gång</string> - <string name="mtm_decision_abort">Avbryt</string> - <string name="mtm_notification">Validering av certifikat</string> - <string name="settings_openhab_none">Inget</string> - <!-- Themes --> - <string name="theme_name_light">Ljust</string> - <string name="theme_name_dark">Mörkt</string> - <string name="theme_name_black">Svart/AMOLED</string> - <string name="theme_name_basic_ui">Basic UI</string> - <string name="theme_name_basic_ui_dark">Basic UI mörkt</string> - <!-- NFC --> - <string name="nfc_action_on">På</string> - <string name="nfc_action_up">Upp</string> - <string name="nfc_action_off">Av</string> - <string name="nfc_action_down">Ner</string> - <string name="nfc_action_toggle">Växla</string> - <string name="nfc_activate">Aktivera</string> - <string name="nfc_action_current_color">Nuvarande färg</string> - <string name="nfc_action_to_sitemap_page">Navigera till Sitemap-sida</string> - <!-- Drawer --> - <string name="drawer_open">Sitemap-låda öppnad</string> - <string name="drawer_close">Sitemap-låda stängd</string> - <string name="mainmenu_openhab_voice_recognition">Röstigenkänning</string> - <!-- About --> - <string name="about_title">Om</string> - <string name="about_license_title">Licens</string> - <string name="about_changelog">Förändringslogg</string> - <string name="about_source_code">Källkod</string> - <string name="about_issues">Rapportera ett problem</string> - <string name="about_docs">Dokumentation</string> - <string name="about_community_forum">Forum</string> - <string name="about_foundation">openHAB Foundation</string> - <string name="about_community">openHABs gemenskap</string> - <string name="about_server">openHAB-server</string> - <string name="about_translation">Hjälp oss att översätta openHAB</string> - <string name="about_privacy_policy">Integritetspolicy</string> - <string name="settings_debug_messages_title">Visa information för felsökning</string> - <string name="error_couldnt_determine_openhab_url">Kunde inte avgöra URL för openHAB</string> - <string name="unknown">Okänd</string> - <string name="error_network_type_unsupported">Nätverkstyp (%s) stöds inte</string> - <string name="set">Sätt</string> - <string name="cancel">Avbryt</string> - <string name="close">Stäng</string> - <string name="try_again_button">Försök igen</string> - <string name="go_to_settings_button">Gå till inställningar</string> - <string name="configuration_missing">openHAB-servern inte kunde upptäckas automatiskt. Konfigurera IP-adress eller värdnamn i serverinställningarna.</string> - <string name="no_remote_server">Lokala nätverket är inte tillgängligt och du inte har konfigurerat en fjärrserver</string> - <string name="resolving_openhab">Försöker hitta openHAB-server\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">Öppna jalusi</string> - <string name="content_description_stop_roller_shutter">Stoppa jalusi</string> - <string name="content_description_close_roller_shutter">Stäng jalusi</string> - <string name="content_description_open_color_wheel">Öppna färgväljare</string> - <string name="content_description_color_up">På eller håll för att öka ljusstyrkan</string> - <string name="content_description_color_down">Av eller håll för att minska ljusstyrkan</string> - <string name="content_description_open_number_picker">Öppna nummerväljare</string> - <string name="content_description_video">Video</string> - <string name="content_description_open_openhab">Öppna openHAB</string> - <string name="swipe_to_refresh_description">Denna app uppdaterar sig även automatiskt, du behöver normalt sett inte göra det manuellt</string> - <string name="swipe_to_refresh_dismiss">Jag förstår!</string> - <!-- Intro strings --> - <string name="app_intro">Introduktion</string> - <string name="intro_welcome">Välkommen till openHAB</string> - <string name="intro_whatis">En mjukvara för att automatisera ditt hem med öppen källkod, helt oberoende av tillverkare eller teknologi</string> - <string name="intro_themes">Teman</string> - <string name="intro_themes_description">Välj mellan flera teman</string> - <string name="intro_voice_description">Kontrollera ditt hem med din röst</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">Långtryck på en en Item för att knyta den till NFS-taggar</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">HOPPA ÖVER</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">FÄRDIGT</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Inställningar</string> + <string name="app_notifications">Aviseringar</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Inställningar</string> + <string name="mainmenu_openhab_selectsitemap">Välj standard-Sitemap</string> + <string name="mainmenu_openhab_clearcache">Töm bildcache</string> + <!-- App settings strings --> + <string name="settings_connection_title">Anslutning</string> + <string name="settings_display_title">Visning</string> + <string name="settings_misc_title">Diverse</string> + <string name="settings_openhab_url">Lokal server-URL</string> + <string name="settings_openhab_url_summary">URL för openHABs dashboard (baserad på värdnamn eller IP). Om konfigurerad inaktiveras autodiscovery. Aktuell inställning: %s</string> + <string name="settings_openhab_alturl">Fjärrserver-URL</string> + <string name="settings_openhab_alturl_summary">URL för openHABs dashboard att använda när den lokala adressen inte är tillgänglig. Aktuell inställning: %s</string> + <string name="settings_openhab_username">Användarnamn</string> + <string name="settings_openhab_password">Lösenord</string> + <string name="settings_openhab_password_summary_weak">Svagt lösenord valt</string> + <string name="settings_openhab_password_summary_strong">Starkt lösenord valt</string> + <string name="settings_openhab_sslclientcert">Klientcertifikat för SSL</string> + <string name="settings_openhab_sslclientcert_howto_summary">Tryck här för att få några tips och förklaringar på hur du konfigurerar klientautentisering med SSL-certifikat</string> + <string name="settings_openhab_screentimeroff">Inaktivera visningstimer</string> + <string name="settings_openhab_screentimeroff_summary">Inaktivera automatiskt avstängning av skärmen när openHAB är igång</string> + <string name="settings_openhab_demomode">Demoläge</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Fullskärm</string> + <string name="settings_openhab_fullscreen_summary">Visa i fullskärmsläge</string> + <string name="settings_openhab_icon_format">Ikonformat</string> + <string name="settings_openhab_icon_format_png">Bitmapp</string> + <string name="settings_openhab_icon_format_svg">Vektor</string> + <string name="settings_chart_scaling">Diagramskalning</string> + <string name="settings_chart_scaling_summary">Obs: Mindre skalning krymper typsnitt och linjebredder, så det blir mer plats för grafen men läsbarheten kan försämras.</string> + <string name="settings_chart_scaling_value_xs">Väldigt liten</string> + <string name="settings_chart_scaling_value_s">Liten</string> + <string name="settings_chart_scaling_value_m">Standard</string> + <string name="settings_chart_scaling_value_l">Stor</string> + <string name="settings_ringtone">Aviseringsljud</string> + <string name="settings_ringtone_none">Inget</string> + <string name="settings_clear_default_sitemap">Rensa standard-Sitemap</string> + <string name="settings_no_default_sitemap">Ingen Sitemap vald som standard</string> + <string name="settings_current_default_sitemap">Nuvarande standard-Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Fjärr</string> + <string name="settings_openhab_connection">Lokal</string> + <string name="settings_notification_vibration">Vibrera vid avisering</string> + <string name="settings_notification_vibration_off">Av</string> + <string name="settings_notification_vibration_short">Kort</string> + <string name="settings_notification_vibration_long">Lång</string> + <string name="settings_notification_vibration_twice">Två gånger</string> + <string name="settings_connection_summary">Ansluten till %s</string> + <string name="settings_insecure_connection_summary">Osäkert ansluten till %s</string> + <!-- App messages strings --> + <string name="info_voice_input">openHAB, på ditt kommando!</string> + <string name="info_voice_recognized_text">Igenkänt kommando: %1$s</string> + <string name="info_demo_mode_short">Kör i demoläge</string> + <!-- Please try to keep the string as short as possible --> + <string name="info_conn_url">Ansluter till lokal URL</string> + <string name="info_conn_rem_url">Ansluter till fjärr-URL</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB returnerade en tom Sitemap-lista</string> + <string name="error_network_not_available">Nätverk inte tillgängligt</string> + <string name="error_http_connection_failed">Anslutningen misslyckas. Ett oväntat svar mottogs vid anslutningsförsök mot den konfigurerade openHAB-servern (mottagen HTTP-svarskod: %d).</string> + <string name="error_invalid_url">Vänligen ange en giltig URL i en formen \' http(s)://host(:port) /\'</string> + <string name="error_connection_failed">Anslutningen till värddatorn misslyckades</string> + <string name="error_unable_to_resolve_hostname">Det går inte att slå upp värdnamnet</string> + <string name="error_connection_sslhandshake_failed">SSL-handskakning misslyckades</string> + <string name="error_certificate_not_trusted">SSL-certifikatet är inte betrott. Vänligen importera rotcertifikatet eller acceptera certifikatet under SSL-handskakningen.</string> + <string name="error_certificate_expired">Giltighetstiden för SSL-certifikatet har gått ut. Vänligen skaffa ett nytt certifikat eller acceptera certifikatet under SSL-handskakningen.</string> + <string name="error_certificate_not_valid_yet">SSL-certifikatet är inte giltigt ännu. Vänligen skaffa ett giltigt certifikat eller acceptera certifikatet under SSL-handskakningen. Kontrollera också om klockan på enheten är korrekt.</string> + <string name="error_certificate_revoked">SSL-certifikatet har blivit återkallat. Vänligen skaffa ett nytt certifikat eller acceptera certifikatet under SSL-handskakningen.</string> + <string name="error_certificate_wrong_host">SSL-certifikatet är inte giltigt för %s</string> + <string name="error_http_code_401">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 401).</string> + <string name="error_http_code_403">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 403).</string> + <string name="error_http_code_407">Autentiseringen misslyckades. Vänligen kontrollera ditt konfigurerade användarnamn och lösenord i förhållande till SSL-klientcertifikatet (http-svarskod 407).</string> + <string name="error_http_code_414">Angiven URL är för lång. Använd IP-adressen eller en kortare webbadress (http-svarskod 414).</string> + <string name="error_http_code_426">HTTPS krävs. Vänligen ändra din URL (HTTP-svarskod 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Autentiseringen misslyckades. Vänligen kontrollera SSH-klientcertifikatet (HTTP-svarskod 495).</string> + <string name="error_http_code_496">SSL-klientcertifikat krävs (HTTP-svarskod 496)</string> + <string name="error_http_code_502">Din omvända proxy fick ett ogiltigt svar från openHAB-servern (HTTP-svarskod 502)</string> + <string name="error_http_code_503">openHAB-servern är tillfälligt otillgänglig (HTTP-svarskod 503)</string> + <string name="error_http_code_504">Gateway time-out. Det verkar som att din omvända proxy är uppe, men den får inget svar ifrån openHAB-servern (HTTP-svarskod 504).</string> + <string name="error_http_code_507">openHAB-servern har inte tillräckligt ledigt diskutrymme (HTTP-svarskod 507)</string> + <string name="error_http_code_511">Nätverksautentisering krävs (HTTP-svarskod 511)</string> + <string name="error_about_no_conn">Fel vid hämtning av information ifrån openHAB-servern</string> + <string name="error_openhab_offline">Molninstansen är igång, men din openHAB-server är offline</string> + <string name="title_activity_openhabwritetag">Skriv NFC-tagg</string> + <string name="title_activity_libraries">Bibliotek som används</string> + <string name="info_write_tag">Nudda taggen och håll den nära tills bekräftelsemeddelandet visas</string> + <string name="info_write_tag_progress">Skriver taggen</string> + <string name="info_write_tag_finished">Färdig</string> + <string name="info_write_failed">Fel vid skrivning till tagg</string> + <string name="info_write_tag_unsupported">Denna enhet har inte stöd för NFC</string> + <string name="info_write_tag_disabled">NFS är inaktiverat. Vänligen aktivera det i inställningarna för enheten.</string> + <string name="info_openhab_apiversion_label">Version på openHABs REST-API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB-hemlighet</string> + <string name="info_openhab_push_notification_label">Status på push-aviseringar</string> + <string name="action_settings">Inställningar</string> + <string name="nfc_dialog_title">Skriv NFS-tagg för detta element</string> + <string name="info_not_set">Ej angivet</string> + <!-- Background tasks --> + <!-- Notification list strings --> + <string name="notification_list_empty">Inga aviseringar har hittills skickats</string> + <string name="notification_list_error">Ett fel uppstod när aviseringar laddades</string> + <string name="list_loading_message">Laddar\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Acceptera okänt certifikat?</string> + <string name="mtm_trust_anchor">Serverns certifikat är inte signerat av en betrodd utfärdare</string> + <string name="mtm_cert_expired">Serverns certifikat har gått ut</string> + <string name="mtm_accept_servername">Acceptera omatchande servernamn?</string> + <string name="mtm_hostname_mismatch">Servern kunde inte autentisera sig som \"%s\". Certifikatet är enbart giltigt för:</string> + <string name="mtm_connect_anyway">Vill du ansluta ändå?</string> + <string name="mtm_cert_details">Certifikatsdetaljer:</string> + <string name="mtm_decision_always">Acceptera</string> + <string name="mtm_decision_once">En gång</string> + <string name="mtm_decision_abort">Avbryt</string> + <string name="mtm_notification">Validering av certifikat</string> + <string name="settings_openhab_none">Inget</string> + <!-- Themes --> + <string name="theme_name_light">Ljust</string> + <string name="theme_name_dark">Mörkt</string> + <string name="theme_name_black">Svart/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI mörkt</string> + <!-- NFC --> + <string name="nfc_action_on">På</string> + <string name="nfc_action_up">Upp</string> + <string name="nfc_action_off">Av</string> + <string name="nfc_action_down">Ner</string> + <string name="nfc_action_toggle">Växla</string> + <string name="nfc_activate">Aktivera</string> + <string name="nfc_action_current_color">Nuvarande färg</string> + <string name="nfc_action_to_sitemap_page">Navigera till Sitemap-sida</string> + <!-- Drawer --> + <string name="drawer_open">Sitemap-låda öppnad</string> + <string name="drawer_close">Sitemap-låda stängd</string> + <string name="mainmenu_openhab_voice_recognition">Röstigenkänning</string> + <!-- About --> + <string name="about_title">Om</string> + <string name="about_license_title">Licens</string> + <string name="about_changelog">Förändringslogg</string> + <string name="about_source_code">Källkod</string> + <string name="about_issues">Rapportera ett problem</string> + <string name="about_docs">Dokumentation</string> + <string name="about_community_forum">Forum</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">openHABs gemenskap</string> + <string name="about_server">openHAB-server</string> + <string name="about_translation">Hjälp oss att översätta openHAB</string> + <string name="about_privacy_policy">Integritetspolicy</string> + <string name="settings_debug_messages_title">Visa information för felsökning</string> + <string name="error_couldnt_determine_openhab_url">Kunde inte avgöra URL för openHAB</string> + <string name="unknown">Okänd</string> + <string name="error_network_type_unsupported">Nätverkstyp (%s) stöds inte</string> + <string name="set">Sätt</string> + <string name="cancel">Avbryt</string> + <string name="close">Stäng</string> + <string name="try_again_button">Försök igen</string> + <string name="go_to_settings_button">Gå till inställningar</string> + <string name="resolving_openhab">Försöker hitta openHAB-server\u2026</string> + <!-- Log --> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Öppna jalusi</string> + <string name="content_description_stop_roller_shutter">Stoppa jalusi</string> + <string name="content_description_close_roller_shutter">Stäng jalusi</string> + <string name="content_description_open_color_wheel">Öppna färgväljare</string> + <string name="content_description_color_up">På eller håll för att öka ljusstyrkan</string> + <string name="content_description_color_down">Av eller håll för att minska ljusstyrkan</string> + <string name="content_description_open_number_picker">Öppna nummerväljare</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">Öppna openHAB</string> + <string name="swipe_to_refresh_description">Denna app uppdaterar sig även automatiskt, du behöver normalt sett inte göra det manuellt</string> + <string name="swipe_to_refresh_dismiss">Jag förstår!</string> + <!-- Intro strings --> + <string name="app_intro">Introduktion</string> + <string name="intro_welcome">Välkommen till openHAB</string> + <string name="intro_whatis">En mjukvara för att automatisera ditt hem med öppen källkod, helt oberoende av tillverkare eller teknologi</string> + <string name="intro_themes">Teman</string> + <string name="intro_themes_description">Välj mellan flera teman</string> + <string name="intro_voice_description">Kontrollera ditt hem med din röst</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Långtryck på en en Item för att knyta den till NFS-taggar</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">HOPPA ÖVER</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">FÄRDIGT</string> </resources> diff --git a/mobile/src/main/res/values-tl/strings.xml b/mobile/src/main/res/values-tl/strings.xml index 7a38cb5442571d9417a9d4f27dfdd24da48ecbc5..57fe0a893edd5c4d9246d3fef25b0acc1647c835 100644 --- a/mobile/src/main/res/values-tl/strings.xml +++ b/mobile/src/main/res/values-tl/strings.xml @@ -1,34 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Mga setting</string> - <string name="app_notifications">Mga notipikasyon</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Sitemaps</string> - <string name="mainmenu_openhab_preferences">Mga Setting</string> - <string name="mainmenu_openhab_clearcache">Burahin ang mga imaheng naka-cache</string> - <!-- App settings strings --> - <string name="settings_connection_title">Koneksyon</string> - <string name="settings_display_title">Display</string> - <string name="settings_misc_title">Samut-sari</string> - <string name="settings_openhab_url">URL ng lokal server</string> - <string name="settings_openhab_url_summary">Ang URL ng openHAB dashboard (batay sa hostname o IP). Kung ito man ay na-configure, ang autodiscovery ay hindi gagana. Kasalukuyang setting: %s</string> - <string name="settings_openhab_alturl">URL ng Malayuang server</string> - <string name="settings_openhab_username">Pangalan ng gumagamit</string> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Mga setting</string> + <string name="app_notifications">Mga notipikasyon</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Sitemaps</string> + <string name="mainmenu_openhab_preferences">Mga Setting</string> + <string name="mainmenu_openhab_clearcache">Burahin ang mga imaheng naka-cache</string> + <!-- App settings strings --> + <string name="settings_connection_title">Koneksyon</string> + <string name="settings_display_title">Display</string> + <string name="settings_misc_title">Samut-sari</string> + <string name="settings_openhab_url">URL ng lokal server</string> + <string name="settings_openhab_url_summary">Ang URL ng openHAB dashboard (batay sa hostname o IP). Kung ito man ay na-configure, ang autodiscovery ay hindi gagana. Kasalukuyang setting: %s</string> + <string name="settings_openhab_alturl">URL ng Malayuang server</string> + <string name="settings_openhab_username">Pangalan ng gumagamit</string> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-tr/strings.xml b/mobile/src/main/res/values-tr/strings.xml index 97c95e75db9fc9fad879f1fdeb084bd512f65f3e..71226cbb756986c5b38fe63a2db0f1c98c827219 100644 --- a/mobile/src/main/res/values-tr/strings.xml +++ b/mobile/src/main/res/values-tr/strings.xml @@ -1,97 +1,196 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">Ayarlar</string> - <string name="app_notifications">Bildirimler</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">Site Haritası</string> - <string name="mainmenu_openhab_preferences">Ayarlar</string> - <string name="mainmenu_openhab_clearcache">Resim önbelleğini temizle</string> - <!-- App settings strings --> - <string name="settings_openhab_url">Yerel sunucu URL\'si</string> - <string name="settings_openhab_url_summary">openHAB panel URL\'si (Ana bilgisayar adına ya da IP\'ye göre). Eğer yapılandırılmışsa, otomatik keşfetme devredışı bırakılır. Geçerli ayar: %s</string> - <string name="settings_openhab_alturl">Uzak sunucu URL\'si</string> - <string name="settings_openhab_alturl_summary">Yerel adres kullanılabilir durumda değilken kullanılan openHAB panel URL\'si. Geçerli ayar: %s</string> - <string name="settings_openhab_username">Kullanıcı Adı</string> - <string name="settings_openhab_password">Şifre</string> - <string name="settings_openhab_sslclientcert">SSL müşteri sertifikası</string> - <string name="settings_openhab_sslclientcert_howto_summary">SSL müşteri sertifikası yetkilendirilmesi kurulu hakkında ipuçları ve açıklamalar için buraya tıklayınız</string> - <string name="settings_openhab_screentimeroff">Ekran Zamanlayıcısını devre dışı bırak</string> - <string name="settings_openhab_screentimeroff_summary">openHAB çalışırken ekran kapatma zamanlayıcısını devre dışı bırakınız</string> - <string name="settings_openhab_demomode">Deneme Modu</string> - <string name="settings_openhab_demomode_summary">Deneme modunda çalıştır</string> - <string name="settings_openhab_theme">Tema</string> - <string name="settings_openhab_fullscreen">Tam Ekran</string> - <string name="settings_openhab_fullscreen_summary">Tam ekran modunda görüntüle</string> - <string name="settings_openhab_icon_format">Simge formatı</string> - <string name="settings_openhab_icon_format_png">Bitmap</string> - <string name="settings_openhab_icon_format_svg">Vektör</string> - <!-- App messages strings --> - <string name="info_voice_input">openHAB Emrinizdedir!</string> - <string name="info_voice_recognized_text">Tanımlanmış Emir: %1$s</string> - <string name="info_demo_mode_short">Demo modunda çalışıyor</string> - <string name="info_conn_url">Yerel Sunucuya Bağlanıyor</string> - <string name="info_conn_rem_url">Uzak URL\'ye Bağlanıyor</string> - <!-- Error messages --> - <string name="error_network_not_available">Network müsait değil</string> - <string name="error_connection_failed">Ana cihaza bağlantı başarısız oldu</string> - <string name="error_unable_to_resolve_hostname">Ana cihaz adı çözülemiyor</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_496">SSL müşteri sertifikası gereklidir (HTTP yanıt kodu 496)</string> - <string name="error_http_code_511">Network kimlik doğrulaması gereklidir (HTTP yanıt kodu 511)</string> - <string name="title_activity_openhabwritetag">NFC etiketini yazınız</string> - <string name="info_write_tag">Doğrulama mesajı gözükene kadar etikete dokunun ve kapalı halde tutunuz</string> - <string name="info_write_tag_progress">Etkiket yazılıyor</string> - <string name="info_write_tag_finished">Başarılı bir şekilde bitirildi</string> - <string name="info_write_failed">Etiket yazma hatası</string> - <string name="info_write_tag_unsupported">Bu cihazın NFC desteği yoktur</string> - <string name="info_write_tag_disabled">NFC devre dışı. Lütfen ayarlar bölümünden NFC\'yi devreye sokunuz.</string> - <string name="info_openhab_apiversion_label">openHAB Rest API versiyon</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB Parola</string> - <string name="action_settings">Ayarlar</string> - <string name="nfc_dialog_title">Bu element için NFC eylem etiketi yazınız</string> - <string name="info_not_set">Ayarlı değil</string> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_decision_once">Bir kez</string> - <string name="mtm_decision_abort">Çık</string> - <string name="mtm_notification">Sertifika doğrulama</string> - <!-- Themes --> - <string name="theme_name_light">Açık</string> - <string name="theme_name_dark">Koyu</string> - <string name="theme_name_black">Siyah/Amoled</string> - <string name="theme_name_basic_ui">Basit UI</string> - <string name="theme_name_basic_ui_dark">Basit UI Koyu</string> - <!-- NFC --> - <string name="nfc_action_on">Açık</string> - <string name="nfc_action_up">Yukarı</string> - <string name="nfc_action_off">Kapalı</string> - <string name="nfc_action_down">Aşağı</string> - <string name="nfc_action_toggle">Değiştir</string> - <string name="nfc_action_current_color">Geçerli Renk</string> - <!-- Drawer --> - <string name="drawer_open">Siteharitası çekmecesi açıldı</string> - <string name="drawer_close">Site haritası çekmecesi kapatıldı</string> - <string name="mainmenu_openhab_voice_recognition">Ses Tanıma</string> - <!-- About --> - <string name="about_title">Hakkında</string> - <string name="about_license_title">Lisans</string> - <string name="error_couldnt_determine_openhab_url">openHAB URL\'si belirlenemedi</string> - <string name="unknown">Bilinmeyen</string> - <string name="error_network_type_unsupported">(%s) Network tipi desteklenmiyor</string> - <string name="set">Ayarla</string> - <string name="cancel">İptal Et</string> - <!-- Content description for images --> - <!-- Intro strings --> - <string name="app_intro">Giriş</string> - <string name="intro_welcome">openHAB\'a Hoş geldiniz</string> - <string name="intro_whatis">Eviniz için sağlayıcı ve yeni teknolojiye geçişlerden etkilenmeyen açık kaynak otomasyon yazılımı</string> - <string name="intro_themes">Temalar</string> - <string name="intro_themes_description">Çeşitli temalar arasından seçim yap</string> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Ayarlar</string> + <string name="app_notifications">Bildirimler</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Site Haritası</string> + <string name="mainmenu_openhab_preferences">Ayarlar</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">HABPanel yüklenirken bir hata oluştu</string> + <string name="mainmenu_openhab_selectsitemap">Varsayılan Sitemap \'i seç</string> + <string name="mainmenu_openhab_clearcache">Resim önbelleğini temizle</string> + <!-- App settings strings --> + <string name="settings_connection_title">Bağlantı</string> + <string name="settings_display_title">Görüntüle</string> + <string name="settings_misc_title">Çeşitli</string> + <string name="settings_openhab_url">Yerel sunucu URL\'si</string> + <string name="settings_openhab_url_summary">openHAB panel URL\'si (Ana bilgisayar adına ya da IP\'ye göre). Eğer yapılandırılmışsa, otomatik keşfetme devredışı bırakılır. Geçerli ayar: %s</string> + <string name="settings_openhab_alturl">Uzak sunucu URL\'si</string> + <string name="settings_openhab_alturl_summary">Yerel adres kullanılabilir durumda değilken kullanılan openHAB panel URL\'si. Geçerli ayar: %s</string> + <string name="settings_openhab_username">Kullanıcı Adı</string> + <string name="settings_openhab_password">Şifre</string> + <string name="settings_openhab_password_summary_weak">Zayıf şifre ayarlandı</string> + <string name="settings_openhab_password_summary_strong">Güçlü şifre ayarlandı</string> + <string name="settings_openhab_sslclientcert">SSL müşteri sertifikası</string> + <string name="settings_openhab_sslclientcert_howto_summary">SSL müşteri sertifikası yetkilendirilmesi kurulu hakkında ipuçları ve açıklamalar için buraya tıklayınız</string> + <string name="settings_openhab_screentimeroff">Ekran Zamanlayıcısını devre dışı bırak</string> + <string name="settings_openhab_screentimeroff_summary">openHAB çalışırken ekran kapatma zamanlayıcısını devre dışı bırakınız</string> + <string name="settings_openhab_demomode">Deneme Modu</string> + <string name="settings_openhab_demomode_summary">openHAB sunucunuz yoksa, openHAB\'ın ne yapabileceğini hayal etmek için demo modunu etkinleştirin.</string> + <string name="settings_openhab_theme">Tema</string> + <string name="settings_openhab_fullscreen">Tam Ekran</string> + <string name="settings_openhab_fullscreen_summary">Tam ekran modunda görüntüle</string> + <string name="settings_openhab_icon_format">Simge formatı</string> + <string name="settings_openhab_icon_format_png">Bitmap</string> + <string name="settings_openhab_icon_format_svg">Vektör</string> + <string name="settings_chart_scaling">Grafik ölçekleme</string> + <string name="settings_chart_scaling_summary">Not: Daha küçük ölçeklendirme yazı tiplerini ve çizgi genişliklerini küçültür, böylece grafik için daha fazla alan vardır, ancak yazı okunabilirliği sorun yaşatabilir.</string> + <string name="settings_chart_scaling_value_xs">Çok küçük</string> + <string name="settings_chart_scaling_value_s">Küçük</string> + <string name="settings_chart_scaling_value_m">Varsayılan</string> + <string name="settings_chart_scaling_value_l">Büyük</string> + <string name="settings_openhab_chart_hq">Yüksek çözünürlüklü grafikler</string> + <string name="settings_openhab_chart_hq_summary">Oluşturulan grafikler sunucuya ek yük getirebilir. Yavaş grafik yükleme süreleri yaşıyorsanız ve sunucunuz güçlü değilse, yükleme sürelerini iyileştirmek için bu seçeneği devre dışı bırakın.</string> + <string name="settings_ringtone">Bildirim zil sesi</string> + <string name="settings_ringtone_none">Hiçbiri</string> + <string name="settings_clear_default_sitemap">Varsayılan Sitemap\'ı temizle</string> + <string name="settings_no_default_sitemap">Herhangi bir varsayılan Sitemap seçilmedi</string> + <string name="settings_current_default_sitemap">Geçerli varsayılan Sitemap: %1$s</string> + <string name="settings_openhab_alt_connection">Uzak</string> + <string name="settings_openhab_connection">Yerel</string> + <string name="settings_notification_vibration">Bildirim titreşimi</string> + <string name="settings_notification_vibration_off">Kapalı</string> + <string name="settings_notification_vibration_short">Kısa</string> + <string name="settings_notification_vibration_long">Uzun</string> + <string name="settings_notification_vibration_twice">Iki kez</string> + <string name="settings_notification_ringtone_vibration">Bildirim ayarları</string> + <string name="settings_connection_summary">%s Bağlanıldı</string> + <string name="settings_insecure_connection_summary">Güvenli bir şekilde %s\' e bağlandı</string> + <string name="beta">Beta</string> + <!-- App messages strings --> + <string name="title_voice_widget">Sesli komutlar</string> + <string name="title_voice_widget_icon">Sesli komutlar ve uygulama kısayolu</string> + <string name="info_voice_input">openHAB Emrinizdedir!</string> + <string name="info_voice_recognized_text">Tanımlanmış Emir: %1$s</string> + <string name="info_demo_mode_short">Demo modunda çalışıyor</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Kapat</string> + <string name="info_conn_url">Yerel Sunucuya Bağlanıyor</string> + <string name="info_conn_rem_url">Uzak URL\'ye Bağlanıyor</string> + <string name="app_shortcut_diabled_habpanel">Sunucunuzda yüklü HABPanel yok</string> + <string name="app_shortcut_diabled_notifications">Uzak sunucu kullanılamıyor</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB boş Sitemap listesine döndü</string> + <string name="error_sitemap_generic_load_error">Sitemap yüklenmemiş olabilir. Şu hata oluştu: %1$s</string> + <string name="error_network_not_available">Network müsait değil</string> + <string name="error_wifi_not_available">Wi-Fi kapatıldı</string> + <string name="error_http_connection_failed">Bağlantı başarısız. Yapılandırılmış openHAB sunucusuna bağlanmaya çalışırken beklenmeyen bir yanıt alındı (Alınan HTTP yanıt kodu: %d).</string> + <string name="error_invalid_url">Lütfen \'http(s)://host:(port)/\' formunda geçerli bir URL giriniz</string> + <string name="error_port_seems_invalid">Girdiğiniz port numarası seçili protokol için yanlış görünüyor</string> + <string name="error_connection_failed">Ana cihaza bağlantı başarısız oldu</string> + <string name="error_unable_to_resolve_hostname">Ana cihaz adı çözülemiyor</string> + <string name="error_connection_sslhandshake_failed">SSL Handshake başarısız oldu Muhtemelen geçerli bir müşteri sertifikasına ihtiyacınız vardır</string> + <string name="error_certificate_not_trusted">SSL sertifikasına güvenilmiyor. Lütfen kök sertifikayı içe aktarın ya da SSL sertifika doğrulamasını etkisiz hale getirin.</string> + <string name="error_certificate_expired">SSL sertifikasının süresi doldu. Lütfen yeni bir sertifika edinin ya da SSL handshake esnasında sertifika doğrulamasını etkisiz hale getirin.</string> + <string name="error_certificate_not_valid_yet">SSL sertifikası henüz geçerli değil. Lütfen geçerli bir sertifika edinin ya da SSL handshake esnasında sertifika doğrulamasını etkisiz hale getirin. Ayrıca cihazınızdaki saat ayarının doğruluğunu kontrol ediniz.</string> + <string name="error_certificate_invalid_date">SSL sertifikasının tarihi geçersiz. Lütfen doğru bir sertifika alın ve aygıtınızın saatinin doğru şekilde ayarlanmış olduğundan emin olun.</string> + <string name="error_certificate_revoked">SSL sertifikasının süresi doldu. Lütfen yeni bir sertifika edinin ya da SSL handshake esnasında sunulan sertifika\' yı kabul edin.</string> + <string name="error_certificate_wrong_host">SSL sertifikası %s için geçerli değildir</string> + <string name="error_http_to_https_port">Beklenmeyen akış sonu. Bir HTTPS bağlantı noktasına HTTP üzerinden bağlanmaya mı çalışıyorsunuz?</string> + <string name="webview_ssl">Şu anda bu uygulama için Webview widget otomatik olarak imzalanan SSL sertifikalarını desteklemiyor</string> + <string name="error_http_code_401">Kullanıcı kimlik doğrulaması başarısız oldu. Lütfen kullanıcı adını, şifreyi ve SSL müşteri sertifikasını kontrol ediniz (HTTP yanıt kodu 401).</string> + <string name="error_http_code_403">Kullanıcı kimlik doğrulaması başarısız oldu. Lütfen kullanıcı adınızı, şifrenizi ve SSL müşteri sertifikanızı gözden geçirin (HTTP yanıt kodu 403).</string> + <string name="error_http_code_407">Kullanıcı kimlik doğrulaması başarısız oldu. Lütfen kullanıcı adınızı, şifrenizi ve SSL müşteri sertifikanızı gözden geçirin (HTTP yanıt kodu 407).</string> + <string name="error_http_code_414">URL çok uzun. Lütfen IP adresi veya daha kısa URL (HTTP yanıt kodu 414) kullanın.</string> + <string name="error_http_code_426">HTTPS gereklidir. Lütfen openHAB URL\'sini değiştirin (HTTP yanıt kodu 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Kullanıcı kimlik doğrulaması başarısız oldu. Lütfen SSL müşteri sertifikanızı gözden geçirin (HTTP yanıt kodu 495).</string> + <string name="error_http_code_496">SSL müşteri sertifikası gereklidir (HTTP yanıt kodu 496)</string> + <string name="error_http_code_502">Ters proxy\'iniz openHAB\'tan geçersiz bir yanıt aldı (HTTP yanıt kodu 502)</string> + <string name="error_http_code_503">openHAB geçici olarak kullanım dışı (HTTP yanıt kodu 503)</string> + <string name="error_http_code_504">Gateway zaman aşımı. Görünüşe göre sizin ters proxy\'iniz çalışıyor, fakat openHAB\'dan bir cevap alamıyor (HTTP yanıt kodu 504).</string> + <string name="error_http_code_507">openHAB yeteri kadar boş alana sahip değil (HTTP yanıt kodu 507)</string> + <string name="error_http_code_511">Network kimlik doğrulaması gereklidir (HTTP yanıt kodu 511)</string> + <string name="error_about_no_conn">openHAB\'tan sunucu bilgileri alınırken bir hata oluştu</string> + <string name="error_openhab_offline">Bulut örneğinin çalıştığı sırada, openHAB sunucu çevrimdışı</string> + <string name="title_activity_openhabwritetag">NFC etiketini yazınız</string> + <string name="title_activity_libraries">Kullanılan kütüphaneler</string> + <string name="info_write_tag">Doğrulama mesajı gözükene kadar etikete dokunun ve kapalı halde tutunuz</string> + <string name="info_write_tag_progress">Etkiket yazılıyor</string> + <string name="info_write_tag_finished">Başarılı bir şekilde bitirildi</string> + <string name="info_write_failed">Etiket yazma hatası</string> + <string name="info_write_tag_unsupported">Bu cihazın NFC desteği yoktur</string> + <string name="info_write_tag_disabled">NFC devre dışı. Lütfen ayarlar bölümünden NFC\'yi devreye sokunuz.</string> + <string name="info_openhab_apiversion_label">openHAB Rest API versiyon</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB Parola</string> + <string name="info_openhab_push_notification_label">Push bildirimleri</string> + <string name="action_settings">Ayarlar</string> + <string name="nfc_dialog_title">Bu element için NFC eylem etiketi yazınız</string> + <string name="info_not_set">Ayarlı değil</string> + <string name="empty_page">Bu sayfa görüntülenecek herhangi bir widget içermiyor</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Sunucu bilgilerini sunucuya gönder</string> + <string name="send_device_info_item_prefix">Öğe adı ön eki</string> + <string name="send_device_info_item_prefix_summary">Aşağıdaki özelliklerin öğe adları bu ön eke sahiptir</string> + <string name="settings_alarm_clock">Çalar saati openHAB\'a gönder</string> + <string name="settings_alarm_clock_summary_on">Çalar saat zamanını \'%1$s \' öğesine gönderir</string> + <string name="settings_alarm_clock_summary_off">Çalar saat zamanını sunucuya gönderme</string> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_connect_anyway">Yine de bağlanmak istiyor musunuz?</string> + <string name="mtm_decision_once">Bir kez</string> + <string name="mtm_decision_abort">Çık</string> + <string name="mtm_notification">Sertifika doğrulama</string> + <!-- Themes --> + <string name="theme_name_light">Açık</string> + <string name="theme_name_dark">Koyu</string> + <string name="theme_name_black">Siyah/Amoled</string> + <string name="theme_name_basic_ui">Basit UI</string> + <string name="theme_name_basic_ui_dark">Basit UI Koyu</string> + <!-- NFC --> + <string name="nfc_action_on">Açık</string> + <string name="nfc_action_up">Yukarı</string> + <string name="nfc_action_off">Kapalı</string> + <string name="nfc_action_down">Aşağı</string> + <string name="nfc_action_toggle">Değiştir</string> + <string name="nfc_action_current_color">Geçerli Renk</string> + <!-- Drawer --> + <string name="drawer_open">Siteharitası çekmecesi açıldı</string> + <string name="drawer_close">Site haritası çekmecesi kapatıldı</string> + <string name="mainmenu_openhab_voice_recognition">Ses Tanıma</string> + <!-- About --> + <string name="about_title">Hakkında</string> + <string name="about_license_title">Lisans</string> + <string name="error_couldnt_determine_openhab_url">openHAB URL\'si belirlenemedi</string> + <string name="unknown">Bilinmeyen</string> + <string name="error_network_type_unsupported">(%s) Network tipi desteklenmiyor</string> + <string name="set">Ayarla</string> + <string name="cancel">İptal Et</string> + <string name="no_remote_server">Yerel sunucuya bağlantı başarısız oldu ve yapılandırılmış bir uzak sunucunuz yok</string> + <string name="resolving_openhab">openHAB serveri bulma deneniyor\u2026</string> + <string name="waiting_for_wifi">Wi-Fi için bağlantısının kurulması bekleniyor\u2026</string> + <!-- Log --> + <string name="log">Günlük kayıtları</string> + <string name="view_log">Sistem günlüklerini göster</string> + <string name="clear_log">Sistem günlüklerini temizle</string> + <string name="empty_log">Günlük kaydı boş</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Panjurları aç</string> + <string name="content_description_stop_roller_shutter">Kepenkleri durdur</string> + <string name="content_description_close_roller_shutter">Kepenkleri kapat</string> + <string name="content_description_open_color_wheel">Renk Tekerleğini Aç</string> + <string name="content_description_color_up">Işığı aç yada ışık şiddetini artırmak için basılı tut</string> + <string name="content_description_color_down">Işığı kapat yada yada ışık şiddetini azaltmak için basılı tut</string> + <string name="content_description_open_number_picker">Numara Seçiciyi aç</string> + <string name="content_description_video">Video</string> + <string name="content_description_open_openhab">openHAB\'ı aç</string> + <string name="swipe_to_refresh_description">Bu uygulama aynı zamanda kendini otomatik yeniler, tekrar yenilemene gerek yok</string> + <string name="swipe_to_refresh_dismiss">Anladım!</string> + <!-- Intro strings --> + <string name="app_intro">Giriş</string> + <string name="intro_welcome">openHAB\'a Hoş geldiniz</string> + <string name="intro_whatis">Eviniz için sağlayıcı ve yeni teknolojiye geçişlerden etkilenmeyen açık kaynak otomasyon yazılımı</string> + <string name="intro_themes">Temalar</string> + <string name="intro_themes_description">Çeşitli temalar arasından seçim yap</string> + <string name="intro_voice_description">Evinizi sesinizle kontrol edin</string> + <string name="intro_nfc_description">Öğe kontrolü, Öğe\'ye uzun süre basılarak NFC etiketlerine bağlanabilir</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">GEÇ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">TAMAM</string> </resources> diff --git a/mobile/src/main/res/values-uk/strings.xml b/mobile/src/main/res/values-uk/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..13bf7051fd96e96442e0cfd2b4671ed1e920fb7c 100644 --- a/mobile/src/main/res/values-uk/strings.xml +++ b/mobile/src/main/res/values-uk/strings.xml @@ -1,22 +1,253 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">Налаштування</string> + <string name="app_notifications">Сповіщення</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">Сторінки інтерфейсу</string> + <string name="mainmenu_openhab_preferences">Налаштування</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">Сталася помилка під час завантаження HABPanel</string> + <string name="mainmenu_openhab_selectsitemap">Оберіть сторінку інтерфейсу за замовчанням</string> + <string name="mainmenu_openhab_clearcache">Очистити кеш зображень</string> + <!-- App settings strings --> + <string name="settings_connection_title">З\'єднання</string> + <string name="settings_display_title">Вигляд</string> + <string name="settings_misc_title">Різне</string> + <string name="settings_openhab_url">URL-адреса локального сервера</string> + <string name="settings_openhab_url_summary">URL-адреса інформаційної панелі openHAB (на основі імені вузла або IP-адреси). Якщо налаштовано, автоматичне виявлення вимкнено. Поточне налаштування: %s</string> + <string name="settings_openhab_alturl">URL-адреса віддаленого сервера</string> + <string name="settings_openhab_alturl_summary">URL-адреса інформаційної панелі openHAB яка використовується, коли локальна адреса недоступна. Поточний параметр: %s</string> + <string name="settings_openhab_username">Ім\'я користувача</string> + <string name="settings_openhab_password">Пароль</string> + <string name="settings_openhab_password_summary_weak">Слабкий пароль</string> + <string name="settings_openhab_password_summary_strong">Надійний пароль</string> + <string name="settings_openhab_sslclientcert">SSL сертифікат клієнта</string> + <string name="settings_openhab_sslclientcert_howto_summary">Натисніть тут, щоб отримати підказки та пояснення, щодо налаштування SSL сертифікату автентифікації клієнта</string> + <string name="settings_openhab_screentimeroff">Вимкнути таймер дисплею</string> + <string name="settings_openhab_screentimeroff_summary">Вимкнути таймер вимикання дисплея, коли працює openHAB</string> + <string name="settings_openhab_demomode">Демонстраційний режим</string> + <string name="settings_openhab_demomode_summary">Якщо ви не маєте сервера openHAB, увімкніть демонстраційний режим, щоб мати уяву на що openHAB здатний.</string> + <string name="settings_openhab_theme">Тема</string> + <string name="settings_openhab_fullscreen">Повноекранний режим</string> + <string name="settings_openhab_fullscreen_summary">Відображення в повноекранному режимі</string> + <string name="settings_openhab_icon_format">Формат іконок</string> + <string name="settings_openhab_icon_format_png">Растрові</string> + <string name="settings_openhab_icon_format_svg">Векторні</string> + <string name="settings_chart_scaling">Масштабування діаграми</string> + <string name="settings_chart_scaling_summary">Примітка: Масштабування зменшує шрифти та товщини ліній, тобто більше місця для графіку, але читабельність шрифтів може постраждати.</string> + <string name="settings_chart_scaling_value_xs">Дуже маленький</string> + <string name="settings_chart_scaling_value_s">Малий</string> + <string name="settings_chart_scaling_value_m">За замовчуванням</string> + <string name="settings_chart_scaling_value_l">Великий</string> + <string name="settings_openhab_chart_hq">Графіки високої роздільної здатності</string> + <string name="settings_openhab_chart_hq_summary">Генерування графіків може бути тяжким для сервера. Якщо графіки завантажуються повільно і сервер не надто потужний, вимкніть цю опцію для швидшої роботи.</string> + <string name="settings_ringtone">Звук сповіщення</string> + <string name="settings_ringtone_none">Жодного</string> + <string name="settings_clear_default_sitemap">Очистити сторінку інтерфейсу за замовчуванням</string> + <string name="settings_no_default_sitemap">Не обрано сторінку інтерфейсу за умовчанням</string> + <string name="settings_current_default_sitemap">Типова поточна сторінка за замовчуванням: %1$s</string> + <string name="settings_openhab_alt_connection">Віддалений сервер</string> + <string name="settings_openhab_connection">Локальний сервер</string> + <string name="settings_notification_vibration">Сповіщення вібрацією</string> + <string name="settings_notification_vibration_off">Вимкнено</string> + <string name="settings_notification_vibration_short">Коротко</string> + <string name="settings_notification_vibration_long">Довго</string> + <string name="settings_notification_vibration_twice">Двічі</string> + <string name="settings_notification_ringtone_vibration">Параметри сповіщень</string> + <string name="settings_connection_summary">З\'єднано з %s</string> + <string name="settings_insecure_connection_summary">Під\'єднано до %s без перевірки безпеки</string> + <string name="beta">Бета</string> + <!-- App messages strings --> + <string name="title_voice_widget">Голосові команди</string> + <string name="title_voice_widget_icon">Голосові команди та ярлик застосунку</string> + <string name="info_voice_input">openHAB, очікує на команду!</string> + <string name="info_voice_recognized_text">Отримано команду: %1$s</string> + <string name="info_demo_mode_short">Працює в демо-режимі</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Вимкнути</string> + <string name="info_conn_url">Підключення до локального URL</string> + <string name="info_conn_rem_url">Підключення до віддаленого URL</string> + <string name="app_shortcut_diabled_habpanel">Ваш сервер не має встановленої HABPanel</string> + <string name="app_shortcut_diabled_notifications">Ваш віддалений сервер недоступний</string> + <string name="app_shortcut_diabled_voice_recognition">На вашому пристрої не встановлено застосунок розпізнавання мови</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB повернув порожній список сторінок інтерфейсу</string> + <string name="error_sitemap_generic_load_error">Неможливо завантажити Sitemap. Сталася помилка: %1$s</string> + <string name="error_network_not_available">Мережа недоступна</string> + <string name="error_wifi_not_available">Wi-Fi вимкнено</string> + <string name="error_http_connection_failed">Помилка підключення. Отримана неочікувана відповідь від openHAB. Переконайтесь у правильності роботи сервера openHAB (код відповіді HTTP: %d).</string> + <string name="error_invalid_url">Будь ласка, введіть правильне посилання URL у форматі \'http(s)://хост(:порт)/\'</string> + <string name="error_port_seems_invalid">Введений порт здається непридатний для вибраного протоколу</string> + <string name="error_connection_failed">Підключення до хоста не вдалося</string> + <string name="error_unable_to_resolve_hostname">Не вдалося знайти доменне ім\'я</string> + <string name="error_connection_sslhandshake_failed">Помилка SSL з\'єднання</string> + <string name="error_certificate_not_trusted">Не довірений сертифікат SSL. Будь ласка, імпортуйте кореневий сертифікат або прийміть його під час SSL підключення.</string> + <string name="error_certificate_expired">Минув термін дії сертифікату SSL. Будь ласка, отримайте новий сертифікат або прийміть його під час SSL підключення.</string> + <string name="error_certificate_not_valid_yet">SSL сертифікат ще не дійсний. Будь ласка, отримаєте правильний сертифікат або прийміть його під час SSL підключення. Також перевірте, чи правильно встановлено годинник на вашому пристрої.</string> + <string name="error_certificate_invalid_date">SSL сертифікат містить неприпустиму дату. Будь ласка, отримаєте правильний сертифікат і перевірте чи правильний час встановлений на пристрої.</string> + <string name="error_certificate_revoked">Сертифікат SSL відкликано. Будь ласка, отримайте новий сертифікат або прийміть його під час SSL підключення.</string> + <string name="error_certificate_wrong_host">Сертифікат SSL не дійсний для %s</string> + <string name="error_http_to_https_port">Неочікуване завершення потоку. Ви намагаєтесь під\'єднатися до HTTPS порту через HTTP?</string> + <string name="webview_ssl">Наразі цей застосунок не підтримує SSL сертифікати з власним підписом для віджетів</string> + <string name="error_http_code_401">Помилка аутентифікації користувача. Будь ласка, перевірте налаштований логін і пароль відповідно до сертифікату клієнта SSL (код відповіді HTTP 401).</string> + <string name="error_http_code_403">Помилка аутентифікації користувача. Будь ласка, перевірте налаштований логін і пароль відповідно до сертифікату клієнта SSL (код відповіді HTTP 403).</string> + <string name="error_http_code_407">Помилка аутентифікації користувача. Будь ласка, перевірте налаштований логін і пароль відповідно до сертифікату клієнта SSL (код відповіді HTTP 407).</string> + <string name="error_http_code_414">URL-адреса openHAB надто довга. Будь ласка, використовуйте IP-адресу або коротшу URL-адресу (код відповіді HTTP 414).</string> + <string name="error_http_code_426">Вимагається HTTPS. Змініть URL-адресу openHAB (код відповіді HTTP 426).</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">Не вдалося виконати автентифікацію. Будь ласка, перевірте наданий SSL сертифікат клієнта (код відповіді HTTP 495).</string> + <string name="error_http_code_496">Необхідний SSL сертифікат клієнта (код відповіді HTTP 496)</string> + <string name="error_http_code_502">Ваш проксі отримав неприпустиму відповідь від сервера openHAB (код відповіді HTTP 502)</string> + <string name="error_http_code_503">Сервер openHAB тимчасово недоступний (код відповіді HTTP 503)</string> + <string name="error_http_code_504">Тайм-аут шлюзу. Здається, що ваш проксі-сервер працює, але не міг отримати відповідь від сервера openHAB (код відповіді HTTP 504).</string> + <string name="error_http_code_507">На сервері openHAB не достатньо вільного місця (код відповіді HTTP 507)</string> + <string name="error_http_code_511">Необхідна аутентифікації мережі (код відповіді HTTP 511)</string> + <string name="error_about_no_conn">Помилка під час отримання інформації з сервера openHAB</string> + <string name="error_openhab_offline">Сервер openHAB недоступний, але його хмарний екземпляр працює</string> + <string name="error_no_browser_found">На пристрої не знайдено браузер</string> + <string name="error_no_speech_to_text_app_found">Не знайдено застосунок розпізнавання мови</string> + <string name="install">Встановити</string> + <string name="title_activity_openhabwritetag">Запис NFC мітки</string> + <string name="title_activity_libraries">Використані бібліотеки</string> + <string name="info_write_tag">Доторкніться до NFС мітки і притримайте доки не з’явиться підтвердження</string> + <string name="info_write_tag_progress">Записування мітки</string> + <string name="info_write_tag_finished">Записування успішно завершено</string> + <string name="info_write_failed">Помилка запису мітки</string> + <string name="info_write_tag_unsupported">Цей пристрій не підтримує NFC</string> + <string name="info_write_tag_disabled">NFC вимкнено. Будь ласка, увімкніть його у налаштуваннях пристрою.</string> + <string name="info_openhab_apiversion_label">версія openHAB Rest API</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">ключ openHAB</string> + <string name="info_openhab_push_notification_label">Стан Push-сповіщення</string> + <string name="action_settings">Налаштування</string> + <string name="nfc_dialog_title">Запишіть дію NFC мітки для цього елемента</string> + <string name="nfc_tag_recognized_label">NFC-теґ для \"%s\" розпізнано</string> + <string name="nfc_tag_recognized_item">NFC-теґ для елемента \"%s\" розпізнано</string> + <string name="info_not_set">Не вказано</string> + <string name="empty_page">На цій сторінці немає віджетів, які можна зробити видимими</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">Відправити інформацію про пристрій на сервер</string> + <string name="send_device_info_item_prefix">Префікс імені об\'єкта</string> + <string name="send_device_info_item_prefix_summary">Назви об\'єктів наступних функцій мають такий префікс</string> + <string name="settings_alarm_clock">Відправити будильник на openHAB</string> + <string name="settings_alarm_clock_summary_on">Надсилати час будильника об\'єкту \'%1$s \'</string> + <string name="settings_alarm_clock_summary_off">Не надсилати часу будильника до сервера</string> + <string name="settings_alarm_clock_howto_summary">Натисніть тут, щоб отримати підказки про те, як налаштувати цю функцію на стороні сервера</string> + <string name="settings_item_pref_item_name">Назва об\'єкту</string> + <string name="waiting_for_item_upload">Очікування мережі для надсилання оновлень об\'єкта</string> + <string name="item_upload_in_progress">Об\'єкти зараз оновлюються</string> + <string name="notification_channel_background">Фонові процеси</string> + <string name="notification_channel_background_description">Використовується для відображення очікуючих фонових процесів</string> + <string name="notification_channel_background_error">Помилка у фонових процесах</string> + <string name="notification_channel_background_error_description">Використовуються для сповіщення про помилки у фонових завданнях</string> + <plurals name="item_update_error_title"> + <item quantity="one">Неможливо оновити %d об\'єкт</item> + <item quantity="few">Неможливо оновити %d об\'єкти</item> + <item quantity="many">Неможливо оновити %d об\'єктів</item> + <item quantity="other">Неможливо оновити %d об\'єктів</item> + </plurals> + <string name="item_update_http_error">Об\'єкт \'%1$s\' оновлення не вдалося (HTTP error %2$d)</string> + <string name="item_update_connection_error">Об\'єкт \'%1$s\' оновлення не вдалося (немає підключення)</string> + <string name="error_sending_alarm_clock_item_empty">Будь ласка, введіть припустиме ім\'я об\'єкта</string> + <string name="retry">Повторити</string> + <!-- Notification list strings --> + <string name="notification_list_empty">Поки що немає відправлених сповіщень</string> + <string name="notification_list_error">Сталася помилка під час завантаження сповіщень</string> + <string name="list_loading_message">Завантаження\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">Прийняти невідомий сертифікат?</string> + <string name="mtm_trust_anchor">Сертифікат сервера не підписано відомим центром сертифікації</string> + <string name="mtm_cert_expired">Минув термін дії сертифіката сервера</string> + <string name="mtm_accept_servername">Ім\'я сервера не збігається, прийняти?</string> + <string name="mtm_hostname_mismatch">Сервер не може підтвердити автентичність як \"%s\". Сертифікат діє тільки для:</string> + <string name="mtm_connect_anyway">Все одно підключитися?</string> + <string name="mtm_cert_details">Подробиці сертифіката:</string> + <string name="mtm_decision_always">Прийняти</string> + <string name="mtm_decision_once">Один раз</string> + <string name="mtm_decision_abort">Відмінити</string> + <string name="mtm_notification">Перевірка сертифіката</string> + <string name="settings_openhab_none">Немає</string> + <!-- Themes --> + <string name="theme_name_light">Світла</string> + <string name="theme_name_dark">Темна</string> + <string name="theme_name_black">Чорна/AMOLED</string> + <string name="theme_name_basic_ui">Basic UI</string> + <string name="theme_name_basic_ui_dark">Basic UI темна</string> + <!-- NFC --> + <string name="nfc_action_on">Увімкнути</string> + <string name="nfc_action_up">Підняти</string> + <string name="nfc_action_off">Вимкнути</string> + <string name="nfc_action_down">Опустити</string> + <string name="nfc_action_toggle">Перемкнути</string> + <string name="nfc_activate">Активувати</string> + <string name="nfc_action_current_color">Поточний колір</string> + <string name="nfc_action_to_sitemap_page">Перейти на сторінку інтерфейсу</string> + <!-- Drawer --> + <string name="drawer_open">Відображення сторінки інтерфейсу відкрито</string> + <string name="drawer_close">Відображення сторінки інтерфейсу закрито</string> + <string name="mainmenu_openhab_voice_recognition">Розпізнавання голосу</string> + <!-- About --> + <string name="about_title">Про програму</string> + <string name="about_license_title">Ліцензія</string> + <string name="about_changelog">Список змін</string> + <string name="about_source_code">Початковий код</string> + <string name="about_issues">Повідомити про проблему</string> + <string name="about_docs">Документація</string> + <string name="about_community_forum">Форум спільноти</string> + <string name="about_foundation">openHAB Foundation</string> + <string name="about_community">Спільнота openHAB</string> + <string name="about_server">Сервер openHAB</string> + <string name="about_translation">Допоможіть нам перекласти openHAB</string> + <string name="about_privacy_policy">Політика конфіденційності</string> + <string name="settings_debug_messages_title">Показати інформацію, щодо виправлення неполадок</string> + <string name="error_couldnt_determine_openhab_url">Не вдалося визначити адресу openHAB</string> + <string name="unknown">Невідомо</string> + <string name="error_network_type_unsupported">Тип мережі (%s) не підтримується</string> + <string name="set">Встановити</string> + <string name="cancel">Відмінити</string> + <string name="close">Закрити</string> + <string name="try_again_button">Спробуйте ще раз</string> + <string name="enable_wifi_button">Увымкнути Wi-Fi</string> + <string name="go_to_settings_button">Перейти до налаштувань</string> + <string name="enable_demo_mode_button">Увімкнути Демо-режим</string> + <string name="configuration_missing">Ми не знайшли сервер openHAB у вашій мережі. Якщо він у вас є, будь ласка вкажіть його адресу або ім’я у налаштуваннях. Якщо у вас ще немає працюючого сервера, ви можете увімкнути демонстраційний режим, щоб побачити на що здатний openHAB.</string> + <string name="no_remote_server">Під’єднання до локального сервера не вдалось, а віддалений не налаштовано</string> + <string name="resolving_openhab">Шукаю сервер openHAB\u2026</string> + <string name="waiting_for_wifi">Очікування встановлення з’єднання через Wi-Fi\u2026</string> + <!-- Log --> + <string name="log">Журнал</string> + <string name="view_log">Переглянути журнал</string> + <string name="clear_log">Очистити журнал</string> + <string name="empty_log">Журнал порожній</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">Відкрити ролети</string> + <string name="content_description_stop_roller_shutter">Зупинити ролети</string> + <string name="content_description_close_roller_shutter">Закрити ролети</string> + <string name="content_description_open_color_wheel">Відкрити колесо вибору кольору</string> + <string name="content_description_color_up">Натискайте або утримуйте щоб збільшити яскравість</string> + <string name="content_description_color_down">Натискайте або утримуйте щоб зменшити яскравість</string> + <string name="content_description_open_number_picker">Введення числа</string> + <string name="content_description_video">Відео</string> + <string name="content_description_open_openhab">Відкрити openHAB</string> + <string name="content_description_increase_item_value">Збільшення значення об\'єкта</string> + <string name="content_description_decrease_item_value">Зменшення значення об\'єкта</string> + <string name="swipe_to_refresh_description">Додаток періодично оновлюється автоматично, зазвичай не потрібно робити це вручну</string> + <string name="swipe_to_refresh_dismiss">Зрозуміло!</string> + <!-- Intro strings --> + <string name="app_intro">Вступ</string> + <string name="intro_welcome">Ласкаво просимо до openHAB</string> + <string name="intro_whatis">Універсальна система автоматизації з відкритим початковим кодом для твого будинку</string> + <string name="intro_themes">Теми</string> + <string name="intro_themes_description">Виберіть між декількома темами</string> + <string name="intro_voice_description">Керуйте будинком за допомогою голосу</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">Елемент керування можна прив\'язати до NFC мітки довгим натисненням на цей елемент</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">ПРОПУСТИТИ</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">ВИКОНАНО</string> </resources> diff --git a/mobile/src/main/res/values-vi/strings.xml b/mobile/src/main/res/values-vi/strings.xml index 3a79b2b44c5b038c7146574adb5f24b6432b3f2a..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-vi/strings.xml +++ b/mobile/src/main/res/values-vi/strings.xml @@ -1,22 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <!-- Main menu items --> - <!-- App settings strings --> - <!-- App messages strings --> - <!-- Error messages --> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <!-- Notification list strings --> - <!-- Strings for MemorizingTrustManager activity --> - <!-- Themes --> - <!-- NFC --> - <!-- Drawer --> - <!-- About --> - <!-- Content description for images --> - <!-- Intro strings --> - <!-- Intro "SKIP" button --> - <!-- Intro "DONE" button --> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values-sw600dp-land/layout.xml b/mobile/src/main/res/values-w600dp-land/layout.xml similarity index 100% rename from mobile/src/main/res/values-sw600dp-land/layout.xml rename to mobile/src/main/res/values-w600dp-land/layout.xml diff --git a/mobile/src/main/res/values/ic_launcher_background.xml b/mobile/src/main/res/values-w600dp/dimens.xml similarity index 52% rename from mobile/src/main/res/values/ic_launcher_background.xml rename to mobile/src/main/res/values-w600dp/dimens.xml index c5d5899fdf0a1b144bf341b29e0c66ba50bbcedd..38941953f7ed702597c02a0bcf0a6b584d7ffce8 100644 --- a/mobile/src/main/res/values/ic_launcher_background.xml +++ b/mobile/src/main/res/values-w600dp/dimens.xml @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <resources> - <color name="ic_launcher_background">#FFFFFF</color> + <dimen name="widgetlist_slider_width">200dp</dimen> </resources> \ No newline at end of file diff --git a/mobile/src/main/res/values-w750dp/dimens.xml b/mobile/src/main/res/values-w750dp/dimens.xml new file mode 100644 index 0000000000000000000000000000000000000000..f53230af9096079eeb611c57a847d87e200f870a --- /dev/null +++ b/mobile/src/main/res/values-w750dp/dimens.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <dimen name="widgetlist_slider_width">250dp</dimen> +</resources> \ No newline at end of file diff --git a/mobile/src/main/res/values-w750dp/layout.xml b/mobile/src/main/res/values-w750dp/layout.xml new file mode 100644 index 0000000000000000000000000000000000000000..a8fb265880774232eb6badba6734815c1c8e9c03 --- /dev/null +++ b/mobile/src/main/res/values-w750dp/layout.xml @@ -0,0 +1,3 @@ +<resources> + <string name="controller_class" translatable="false">org.openhab.habdroid.ui.activity.ContentControllerTwoPane</string> +</resources> diff --git a/mobile/src/main/res/values-zh-rCN/strings.xml b/mobile/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2c34e541c5be724bc3bd790ea85e03210fdae1ce --- /dev/null +++ b/mobile/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,244 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--Generated by crowdin.com--> +<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <string name="app_preferences_name">设置</string> + <string name="app_notifications">通知</string> + <!-- Main menu items --> + <string name="mainmenu_openhab_sitemaps">系统布局</string> + <string name="mainmenu_openhab_preferences">设置</string> + <string name="mainmenu_openhab_habpanel">HAB 面板</string> + <string name="habpanel_error">载入 HAB 面板时出错</string> + <string name="mainmenu_openhab_selectsitemap">选择默认系统布局</string> + <string name="mainmenu_openhab_clearcache">清除图像缓存</string> + <!-- App settings strings --> + <string name="settings_connection_title">连接</string> + <string name="settings_display_title">显示</string> + <string name="settings_misc_title">其他</string> + <string name="settings_openhab_url">本地服务器 URL</string> + <string name="settings_openhab_url_summary">openHAB 仪表板的 URL (基于主机名或 IP)。如果已配置, 自动发现将被禁用。当前设置: %s</string> + <string name="settings_openhab_alturl">远程服务器 URL</string> + <string name="settings_openhab_alturl_summary">本地地址时所使用的 openHAB 仪表板 URL。当前设置为: %s</string> + <string name="settings_openhab_username">用户名</string> + <string name="settings_openhab_password">密码</string> + <string name="settings_openhab_password_summary_weak">弱密码</string> + <string name="settings_openhab_password_summary_strong">强密码</string> + <string name="settings_openhab_sslclientcert">SSL 客户端证书</string> + <string name="settings_openhab_sslclientcert_howto_summary">点击此处获取设置 SSL 客户端证书认证的信息</string> + <string name="settings_openhab_screentimeroff">禁用显示计时器</string> + <string name="settings_openhab_screentimeroff_summary">在 openHAB 运行时禁用显示屏关闭定时器</string> + <string name="settings_openhab_demomode">演示模式</string> + <string name="settings_openhab_demomode_summary">若您没有 openHAB 服务器,请启用演示模式来一览 openHAB 的功能。</string> + <string name="settings_openhab_theme">主题</string> + <string name="settings_openhab_fullscreen">全屏</string> + <string name="settings_openhab_fullscreen_summary">以全屏模式显示</string> + <string name="settings_openhab_icon_format">图标格式</string> + <string name="settings_openhab_icon_format_png">位图</string> + <string name="settings_openhab_icon_format_svg">矢量图</string> + <string name="settings_chart_scaling">图表缩放</string> + <string name="settings_chart_scaling_summary">注意: 较小的缩放将缩小字体及行宽,故图表将会变得更大但字体可读性可能会受到影响。</string> + <string name="settings_chart_scaling_value_xs">非常小</string> + <string name="settings_chart_scaling_value_s">小</string> + <string name="settings_chart_scaling_value_m">默认</string> + <string name="settings_chart_scaling_value_l">大</string> + <string name="settings_openhab_chart_hq">高清图表</string> + <string name="settings_openhab_chart_hq_summary">生成图表可能会对服务器造成压力。若您的图表载入时间过长或服务器性能不强,请禁用此选项以加速载入。</string> + <string name="settings_ringtone">通知铃声</string> + <string name="settings_ringtone_none">无</string> + <string name="settings_clear_default_sitemap">清除默认站点地图</string> + <string name="settings_no_default_sitemap">未选择默认站点地图</string> + <string name="settings_current_default_sitemap">当前默认站点地图: %1$s</string> + <string name="settings_openhab_alt_connection">远程</string> + <string name="settings_openhab_connection">本地</string> + <string name="settings_notification_vibration">通知振动</string> + <string name="settings_notification_vibration_off">关</string> + <string name="settings_notification_vibration_short">短</string> + <string name="settings_notification_vibration_long">长</string> + <string name="settings_notification_vibration_twice">两次</string> + <string name="settings_notification_ringtone_vibration">通知设置</string> + <string name="settings_connection_summary">已连接至 %s</string> + <string name="settings_insecure_connection_summary">已通过不安全的方式连接至 %s</string> + <string name="beta">测试版</string> + <!-- App messages strings --> + <string name="title_voice_widget">语音命令</string> + <string name="title_voice_widget_icon">语音命令和应用程序快捷方式</string> + <string name="info_voice_input">openHAB,说出您的命令!</string> + <string name="info_voice_recognized_text">已识别命令: %1$s</string> + <string name="info_demo_mode_short">正以演示模式运行</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">关闭</string> + <string name="info_conn_url">正在连接到本地 URL</string> + <string name="info_conn_rem_url">正在连接到远程 URL</string> + <string name="app_shortcut_diabled_habpanel">您的服务器未安装 HAB 面板</string> + <string name="app_shortcut_diabled_notifications">您的远程服务器不可用</string> + <!-- Error messages --> + <string name="error_empty_sitemap_list">openHAB 返回了空系统布局列表</string> + <string name="error_sitemap_generic_load_error">无法载入站点地图。发生错误:%1$s</string> + <string name="error_network_not_available">网络不可用</string> + <string name="error_wifi_not_available">Wi-Fi 被关闭</string> + <string name="error_http_connection_failed">连接失败。在尝试连接至已配置的 openHAB 服务器时收到意外响应 (HTTP 代码为:%d)</string> + <string name="error_invalid_url">请以 \'http(s)://主机(:端口)/\' 格式输入有效网址</string> + <string name="error_port_seems_invalid">您输入的端口不适用所选协议</string> + <string name="error_connection_failed">连接至主机失败</string> + <string name="error_unable_to_resolve_hostname">无法解析主机名</string> + <string name="error_connection_sslhandshake_failed">SSL 握手失败</string> + <string name="error_certificate_not_trusted">SSL 证书不受信任。请导入根证书或在 SSL 握手时接受证书。</string> + <string name="error_certificate_expired">SSL 证书已过期。请获取新证书或在 SSL 握手时接受证书。</string> + <string name="error_certificate_not_valid_yet">SSL 证书尚未生效。请获取正确的证书或在 SSL 握手时接受证书。另外请检查您设备上的时间是否被正确设置。</string> + <string name="error_certificate_invalid_date">SSL 证书日期无效。请获得正确的证书并检查您设备上的时间是否正确。</string> + <string name="error_certificate_revoked">SSL 证书已被撤销。请获取新证书或在 SSL 握手时接受证书。</string> + <string name="error_certificate_wrong_host">%s 的 SSL 证书无效</string> + <string name="error_http_to_https_port">数据流意外终止。您是否正尝试通过 HTTP 连接 HTTPS 端口?</string> + <string name="webview_ssl">此应用程序当前不支持对 Webview 小挂件使用自签名 SSL 证书。</string> + <string name="error_http_code_401">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 401)</string> + <string name="error_http_code_403">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 403)</string> + <string name="error_http_code_407">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 407)</string> + <string name="error_http_code_414">URL 过长。请使用 IP 地址或更短的 URL (HTTP 代码 414)</string> + <string name="error_http_code_426">需要 HTTPS。请更改 URL (HTTP 代码 426)</string> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <string name="error_http_code_495">认证失败。请检查提供的 SSL 客户端证书 (HTTP 代码 495)。</string> + <string name="error_http_code_496">需要 SSL 证书 (HTTP 响应码 496)</string> + <string name="error_http_code_502">您的反向代理从 openHAB 服务器收到了无效回应 (HTTP 响应码 502)</string> + <string name="error_http_code_503">openHAB 服务器暂时不可用 (HTTP 响应码 503)</string> + <string name="error_http_code_504">网关超时。看似您的反向代理正在运行但无法从 openHAB 服务器获取回应 (HTTP 代码 504)。</string> + <string name="error_http_code_507">openHAB 服务器空间不足 (HTTP 响应码 507)</string> + <string name="error_http_code_511">需要网络认证 (HTTP 响应码 511)</string> + <string name="error_about_no_conn">获取 openHAB 服务器信息时出错</string> + <string name="error_openhab_offline">您的 openHAB 服务器将在云端实例运行时离线</string> + <string name="title_activity_openhabwritetag">写入 NFC 标签</string> + <string name="title_activity_libraries">使用的库</string> + <string name="info_write_tag">触摸标签并保持贴近直到出现确认信息为止</string> + <string name="info_write_tag_progress">正在写入标签</string> + <string name="info_write_tag_finished">已成功完成</string> + <string name="info_write_failed">标签写入错误</string> + <string name="info_write_tag_unsupported">此设备不支持 NFC</string> + <string name="info_write_tag_disabled">NFC 已被禁用。请在设备设置菜单中启用。</string> + <string name="info_openhab_apiversion_label">openHAB Rest API 版本</string> + <string name="info_openhab_uuid_label">openHAB UUID</string> + <string name="info_openhab_secret_label">openHAB 密钥</string> + <string name="info_openhab_push_notification_label">推送通知状态</string> + <string name="action_settings">设置</string> + <string name="nfc_dialog_title">为此元素写入 NFC 标签行为</string> + <string name="info_not_set">未设置</string> + <string name="empty_page">此页不含有可见的小挂件</string> + <!-- Background tasks --> + <string name="send_device_info_to_server">发送设备信息至服务器</string> + <string name="send_device_info_item_prefix">项目名前缀</string> + <string name="send_device_info_item_prefix_summary">下列功能的项目名含此前缀</string> + <string name="settings_alarm_clock">发送闹钟至 openHAB</string> + <string name="settings_alarm_clock_summary_on">发送闹钟至项 \"%1$s\"</string> + <string name="settings_alarm_clock_summary_off">请勿发送闹钟时间至服务器</string> + <string name="settings_alarm_clock_howto_summary">轻触此处以获取如何在服务器端设置此功能的提示</string> + <string name="settings_item_pref_item_name">项目名</string> + <string name="waiting_for_item_upload">等待网络以发送项目更新</string> + <string name="item_upload_in_progress">项目正被更新</string> + <string name="notification_channel_background">后台</string> + <string name="notification_channel_background_description">用于显示待处理的后台任务</string> + <string name="notification_channel_background_error">后台任务错误</string> + <string name="notification_channel_background_error_description">用于提示后台任务中的错误</string> + <plurals name="item_update_error_title"> + <item quantity="other">无法更新 %d 个项目</item> + </plurals> + <string name="item_update_http_error">项目 \"%1$s\" 更新失败(HTTP 错误 %2$d)</string> + <string name="item_update_connection_error">项目 \'%1$s\'\' 更新失败(无连接)</string> + <string name="error_sending_alarm_clock_item_empty">请输入有效的项目名称</string> + <string name="retry">重试</string> + <!-- Notification list strings --> + <string name="notification_list_empty">尚未发送通知</string> + <string name="notification_list_error">加载通知时出错</string> + <string name="list_loading_message">正在载入\u2026</string> + <!-- Strings for MemorizingTrustManager activity --> + <string name="mtm_accept_cert">是否接受未知证书?</string> + <string name="mtm_trust_anchor">此证书未经权威证书商签名</string> + <string name="mtm_cert_expired">服务器证书已过期</string> + <string name="mtm_accept_servername">是否接受不匹配的服务器名称?</string> + <string name="mtm_hostname_mismatch">无法验证服务器为 \"%s\"。此证书仅可用于:</string> + <string name="mtm_connect_anyway">您是否仍想连接?</string> + <string name="mtm_cert_details">证书信息:</string> + <string name="mtm_decision_always">接受</string> + <string name="mtm_decision_once">仅一次</string> + <string name="mtm_decision_abort">取消</string> + <string name="mtm_notification">证书验证</string> + <string name="settings_openhab_none">无</string> + <!-- Themes --> + <string name="theme_name_light">亮色</string> + <string name="theme_name_dark">暗色</string> + <string name="theme_name_black">黑色 / AMOLED</string> + <string name="theme_name_basic_ui">基本 UI</string> + <string name="theme_name_basic_ui_dark">基本暗色 UI</string> + <!-- NFC --> + <string name="nfc_action_on">开启</string> + <string name="nfc_action_up">向上</string> + <string name="nfc_action_off">关闭</string> + <string name="nfc_action_down">向下</string> + <string name="nfc_action_toggle">切换开关</string> + <string name="nfc_activate">激活</string> + <string name="nfc_action_current_color">当前颜色</string> + <string name="nfc_action_to_sitemap_page">导航至系统布局页</string> + <!-- Drawer --> + <string name="drawer_open">已开启系统布局抽屉</string> + <string name="drawer_close">已关闭系统布局抽屉</string> + <string name="mainmenu_openhab_voice_recognition">语音识别</string> + <!-- About --> + <string name="about_title">关于</string> + <string name="about_license_title">许可协议</string> + <string name="about_changelog">更新日志</string> + <string name="about_source_code">开源代码</string> + <string name="about_issues">反馈问题</string> + <string name="about_docs">文档</string> + <string name="about_community_forum">社区论坛</string> + <string name="about_foundation">openHAB 基金会</string> + <string name="about_community">openHAB 社区</string> + <string name="about_server">openHAB 服务端</string> + <string name="about_translation">帮助我们翻译 openHAB</string> + <string name="about_privacy_policy">隐私条款</string> + <string name="settings_debug_messages_title">显示疑难解答信息</string> + <string name="error_couldnt_determine_openhab_url">无法确定 openHAB URL</string> + <string name="unknown">未知</string> + <string name="error_network_type_unsupported">不支持网络类型 (%s)</string> + <string name="set">设置</string> + <string name="cancel">取消</string> + <string name="close">关闭</string> + <string name="try_again_button">重试</string> + <string name="enable_wifi_button">打开 Wi-Fi</string> + <string name="go_to_settings_button">转到设置</string> + <string name="enable_demo_mode_button">打开演示模式</string> + <string name="configuration_missing">我们未在您的网络上找到 openHAB 服务器。若您确认有服务器存在,请在服务器设置中配置其 IP 地址或主机名。若您没有服务器,则您可启用演示模式一览 openHAB 的功能。</string> + <string name="no_remote_server">连接至本地服务器失败且未配置远程服务器</string> + <string name="resolving_openhab">正在寻找 openHAB 服务器\u2026</string> + <string name="waiting_for_wifi">等待 Wi-Fi 建立连接\u2026</string> + <!-- Log --> + <string name="log">日志</string> + <string name="view_log">查看日志</string> + <string name="clear_log">清除日志</string> + <string name="empty_log">日志空空如也</string> + <!-- Content description for images --> + <string name="content_description_open_roller_shutter">打开卷帘</string> + <string name="content_description_stop_roller_shutter">停止卷帘</string> + <string name="content_description_close_roller_shutter">关闭卷帘</string> + <string name="content_description_open_color_wheel">打开色轮</string> + <string name="content_description_color_up">开启或长按以增加亮度</string> + <string name="content_description_color_down">关闭或长按以降低亮度</string> + <string name="content_description_open_number_picker">打开数字选取器</string> + <string name="content_description_video">视频</string> + <string name="content_description_open_openhab">打开 openHAB</string> + <string name="content_description_increase_item_value">增加项目权重</string> + <string name="content_description_decrease_item_value">减少项目权重</string> + <string name="swipe_to_refresh_description">此应用程序将自动刷新,您通常无需手动操作</string> + <string name="swipe_to_refresh_dismiss">知道了!</string> + <!-- Intro strings --> + <string name="app_intro">介绍</string> + <string name="intro_welcome">欢迎来到 openHAB</string> + <string name="intro_whatis">开源家居自动化供应商与技术</string> + <string name="intro_themes">主题</string> + <string name="intro_themes_description">在多个主题之间进行选择</string> + <string name="intro_voice_description">使用声音控制您的家居</string> + <string name="intro_nfc">NFC</string> + <string name="intro_nfc_description">物品控制可通过长按物品写入 NFC 标签</string> + <!-- Intro "SKIP" button --> + <string name="app_intro_skip_button">跳过</string> + <!-- Intro "DONE" button --> + <string name="app_intro_done_button">完成</string> +</resources> diff --git a/mobile/src/main/res/values-zh/strings.xml b/mobile/src/main/res/values-zh/strings.xml index 8eb5595618da7fe02f05b0b523aad565d8b4650d..b59c30e1b3c440dd74765e80040c2a5964d7df5d 100644 --- a/mobile/src/main/res/values-zh/strings.xml +++ b/mobile/src/main/res/values-zh/strings.xml @@ -1,195 +1,25 @@ <?xml version="1.0" encoding="utf-8"?> <!--Generated by crowdin.com--> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> - <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> - <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> - <!-- General app strings --> - <string name="app_preferences_name">设置</string> - <string name="app_notifications">通知</string> - <!-- Main menu items --> - <string name="mainmenu_openhab_sitemaps">系统布局</string> - <string name="mainmenu_openhab_preferences">设置</string> - <string name="mainmenu_openhab_selectsitemap">选择默认系统布局</string> - <string name="mainmenu_openhab_clearcache">清除图像缓存</string> - <!-- App settings strings --> - <string name="settings_connection_title">连接</string> - <string name="settings_display_title">显示</string> - <string name="settings_misc_title">其他</string> - <string name="settings_openhab_url">本地服务器 URL</string> - <string name="settings_openhab_url_summary">openHAB 仪表板的 URL (基于主机名或 IP)。如果已配置, 自动发现将被禁用。当前设置: %s</string> - <string name="settings_openhab_alturl">远程服务器 URL</string> - <string name="settings_openhab_alturl_summary">本地地址时所使用的 openHAB 仪表板 URL。当前设置为: %s</string> - <string name="settings_openhab_username">用户名</string> - <string name="settings_openhab_password">密码</string> - <string name="settings_openhab_password_summary_weak">弱密码</string> - <string name="settings_openhab_password_summary_strong">强密码</string> - <string name="settings_openhab_sslclientcert">SSL 客户端证书</string> - <string name="settings_openhab_sslclientcert_howto_summary">点击此处获取设置 SSL 客户端证书认证的信息</string> - <string name="settings_openhab_screentimeroff">禁用显示计时器</string> - <string name="settings_openhab_screentimeroff_summary">在 openHAB 运行时禁用显示屏关闭定时器</string> - <string name="settings_openhab_demomode">演示模式</string> - <string name="settings_openhab_demomode_summary">以演示模式运行</string> - <string name="settings_openhab_theme">主题</string> - <string name="settings_openhab_fullscreen">全屏</string> - <string name="settings_openhab_fullscreen_summary">以全屏模式显示</string> - <string name="settings_openhab_icon_format">图标格式</string> - <string name="settings_openhab_icon_format_png">位图</string> - <string name="settings_openhab_icon_format_svg">矢量图</string> - <string name="settings_chart_scaling">图表缩放</string> - <string name="settings_chart_scaling_summary">注意: 较小的缩放将缩小字体及行宽,故图表将会变得更大但字体可读性可能会受到影响。</string> - <string name="settings_chart_scaling_value_xs">非常小</string> - <string name="settings_chart_scaling_value_s">小</string> - <string name="settings_chart_scaling_value_m">默认</string> - <string name="settings_chart_scaling_value_l">大</string> - <string name="settings_ringtone">通知铃声</string> - <string name="settings_ringtone_none">无</string> - <string name="settings_clear_default_sitemap">清除默认站点地图</string> - <string name="settings_no_default_sitemap">未选择默认站点地图</string> - <string name="settings_current_default_sitemap">当前默认站点地图: %1$s</string> - <string name="settings_openhab_alt_connection">远程</string> - <string name="settings_openhab_connection">本地</string> - <string name="settings_notification_vibration">通知振动</string> - <string name="settings_notification_vibration_off">关</string> - <string name="settings_notification_vibration_short">短</string> - <string name="settings_notification_vibration_long">长</string> - <string name="settings_notification_vibration_twice">两次</string> - <string name="settings_connection_summary">已连接至 %s</string> - <string name="settings_insecure_connection_summary">已通过不安全的方式连接至 %s</string> - <!-- App messages strings --> - <string name="title_voice_widget">openHAB 语音命令</string> - <string name="info_voice_input">openHAB,说出您的命令!</string> - <string name="info_voice_recognized_text">已识别命令: %1$s</string> - <string name="info_demo_mode_short">正以演示模式运行</string> - <string name="info_conn_url">正在连接到本地 URL</string> - <string name="info_conn_rem_url">正在连接到远程 URL</string> - <!-- Error messages --> - <string name="error_empty_sitemap_list">openHAB 返回了空系统布局列表</string> - <string name="error_network_not_available">网络不可用</string> - <string name="error_http_connection_failed">连接失败。在尝试连接至已配置的 openHAB 服务器时收到意外响应 (HTTP 代码为:%d)</string> - <string name="error_invalid_url">请以 \'http(s)://主机(:端口)/\' 格式输入有效网址</string> - <string name="error_connection_failed">连接至主机失败</string> - <string name="error_unable_to_resolve_hostname">无法解析主机名</string> - <string name="error_connection_sslhandshake_failed">SSL 握手失败</string> - <string name="error_certificate_not_trusted">SSL 证书不受信任。请导入根证书或在 SSL 握手时接受证书。</string> - <string name="error_certificate_expired">SSL 证书已过期。请获取新证书或在 SSL 握手时接受证书。</string> - <string name="error_certificate_not_valid_yet">SSL 证书尚未生效。请获取正确的证书或在 SSL 握手时接受证书。另外请检查您设备上的时间是否被正确设置。</string> - <string name="error_certificate_revoked">SSL 证书已被撤销。请获取新证书或在 SSL 握手时接受证书。</string> - <string name="error_certificate_wrong_host">%s 的 SSL 证书无效</string> - <string name="error_http_code_401">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 401)</string> - <string name="error_http_code_403">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 403)</string> - <string name="error_http_code_407">认证失败。请检查配置的用户名及密码及提供的 SSL 客户端证书 (HTTP 代码 407)</string> - <string name="error_http_code_414">URL 过长。请使用 IP 地址或更短的 URL (HTTP 代码 414)</string> - <string name="error_http_code_426">需要 HTTPS。请更改 URL (HTTP 代码 426)</string> - <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> - <string name="error_http_code_495">认证失败。请检查提供的 SSL 客户端证书 (HTTP 代码 495)。</string> - <string name="error_http_code_496">需要 SSL 证书 (HTTP 响应码 496)</string> - <string name="error_http_code_502">您的反向代理从 openHAB 服务器收到了无效回应 (HTTP 响应码 502)</string> - <string name="error_http_code_503">openHAB 服务器暂时不可用 (HTTP 响应码 503)</string> - <string name="error_http_code_504">网关超时。看似您的反向代理正在运行但无法从 openHAB 服务器获取回应 (HTTP 代码 504)。</string> - <string name="error_http_code_507">openHAB 服务器空间不足 (HTTP 响应码 507)</string> - <string name="error_http_code_511">需要网络认证 (HTTP 响应码 511)</string> - <string name="error_about_no_conn">获取 openHAB 服务器信息时出错</string> - <string name="error_openhab_offline">您的 openHAB 服务器将在云端实例运行时离线</string> - <string name="error_no_app_store_found">未找到可安装语音识别程序的应用商店</string> - <string name="title_activity_openhabwritetag">写入 NFC 标签</string> - <string name="title_activity_libraries">使用的库</string> - <string name="info_write_tag">触摸标签并保持贴近直到出现确认信息为止</string> - <string name="info_write_tag_progress">正在写入标签</string> - <string name="info_write_tag_finished">已成功完成</string> - <string name="info_write_failed">标签写入错误</string> - <string name="info_write_tag_unsupported">此设备不支持 NFC</string> - <string name="info_write_tag_disabled">NFC 已被禁用。请在设备设置菜单中启用。</string> - <string name="info_openhab_apiversion_label">openHAB Rest API 版本</string> - <string name="info_openhab_uuid_label">openHAB UUID</string> - <string name="info_openhab_secret_label">openHAB 密钥</string> - <string name="info_openhab_push_notification_label">推送通知状态</string> - <string name="action_settings">设置</string> - <string name="nfc_dialog_title">为此元素写入 NFC 标签行为</string> - <string name="info_not_set">未设置</string> - <!-- Notification list strings --> - <string name="notification_list_empty">尚未发送通知</string> - <string name="notification_list_error">加载通知时出错</string> - <string name="list_loading_message">正在载入\u2026</string> - <!-- Strings for MemorizingTrustManager activity --> - <string name="mtm_accept_cert">是否接受未知证书?</string> - <string name="mtm_trust_anchor">此证书未经权威证书商签名</string> - <string name="mtm_cert_expired">服务器证书已过期</string> - <string name="mtm_accept_servername">是否接受不匹配的服务器名称?</string> - <string name="mtm_hostname_mismatch">无法验证服务器为 \"%s\"。此证书仅可用于:</string> - <string name="mtm_connect_anyway">您是否仍想连接?</string> - <string name="mtm_cert_details">证书信息:</string> - <string name="mtm_decision_always">接受</string> - <string name="mtm_decision_once">仅一次</string> - <string name="mtm_decision_abort">取消</string> - <string name="mtm_notification">证书验证</string> - <string name="settings_openhab_none">无</string> - <!-- Themes --> - <string name="theme_name_light">亮色</string> - <string name="theme_name_dark">暗色</string> - <string name="theme_name_black">黑色 / AMOLED</string> - <string name="theme_name_basic_ui">基本 UI</string> - <string name="theme_name_basic_ui_dark">基本暗色 UI</string> - <!-- NFC --> - <string name="nfc_action_on">开启</string> - <string name="nfc_action_up">向上</string> - <string name="nfc_action_off">关闭</string> - <string name="nfc_action_down">向下</string> - <string name="nfc_action_toggle">切换开关</string> - <string name="nfc_activate">激活</string> - <string name="nfc_action_current_color">当前颜色</string> - <string name="nfc_action_to_sitemap_page">导航至系统布局页</string> - <!-- Drawer --> - <string name="drawer_open">已开启系统布局抽屉</string> - <string name="drawer_close">已关闭系统布局抽屉</string> - <string name="mainmenu_openhab_voice_recognition">语音识别</string> - <!-- About --> - <string name="about_title">关于</string> - <string name="about_license_title">许可协议</string> - <string name="about_changelog">更新日志</string> - <string name="about_source_code">开源代码</string> - <string name="about_issues">反馈问题</string> - <string name="about_docs">文档</string> - <string name="about_community_forum">社区论坛</string> - <string name="about_foundation">openHAB 基金会</string> - <string name="about_community">openHAB 社区</string> - <string name="about_server">openHAB 服务端</string> - <string name="about_translation">帮助我们翻译 openHAB</string> - <string name="about_privacy_policy">隐私条款</string> - <string name="settings_debug_messages_title">显示疑难解答信息</string> - <string name="error_couldnt_determine_openhab_url">无法确定 openHAB URL</string> - <string name="unknown">未知</string> - <string name="error_network_type_unsupported">不支持网络类型 (%s)</string> - <string name="set">设置</string> - <string name="cancel">取消</string> - <string name="close">关闭</string> - <string name="try_again_button">重试</string> - <string name="go_to_settings_button">转到设置</string> - <string name="configuration_missing">您的 openHAB 服务器无法被自动发现。请在服务器设置中配置其 IP 地址或主机名。</string> - <string name="no_remote_server">本地网络不可用且您尚未配置远程服务器</string> - <string name="resolving_openhab">正在寻找 openHAB 服务器\u2026</string> - <!-- Content description for images --> - <string name="content_description_open_roller_shutter">打开卷帘</string> - <string name="content_description_stop_roller_shutter">停止卷帘</string> - <string name="content_description_close_roller_shutter">关闭卷帘</string> - <string name="content_description_open_color_wheel">打开色轮</string> - <string name="content_description_color_up">开启或长按以增加亮度</string> - <string name="content_description_color_down">关闭或长按以降低亮度</string> - <string name="content_description_open_number_picker">打开数字选取器</string> - <string name="content_description_video">视频</string> - <string name="content_description_open_openhab">打开 openHAB</string> - <string name="swipe_to_refresh_description">此应用程序将自动刷新,您通常无需手动操作</string> - <string name="swipe_to_refresh_dismiss">知道了!</string> - <!-- Intro strings --> - <string name="app_intro">介绍</string> - <string name="intro_welcome">欢迎来到 openHAB</string> - <string name="intro_whatis">开源家居自动化供应商与技术</string> - <string name="intro_themes">主题</string> - <string name="intro_themes_description">在多个主题之间进行选择</string> - <string name="intro_voice_description">使用声音控制您的家居</string> - <string name="intro_nfc">NFC</string> - <string name="intro_nfc_description">物品控制可通过长按物品写入 NFC 标签</string> - <!-- Intro "SKIP" button --> - <string name="app_intro_skip_button">跳过</string> - <!-- Intro "DONE" button --> - <string name="app_intro_done_button">完成</string> + <!-- Attention translators! Do NOT submit localized strings through GitHub Pull Request. --> + <!-- See: https://github.com/openhab/openhab-android/blob/master/README.md#localization --> + <!-- General app strings --> + <!-- Main menu items --> + <!-- App settings strings --> + <!-- App messages strings --> + <!-- Please try to keep the string as short as possible --> + <!-- Error messages --> + <!-- Nginx specific codes, but since it is the recommended reverse proxy, we should check for them: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#nginx --> + <!-- Background tasks --> + <!-- Notification list strings --> + <!-- Strings for MemorizingTrustManager activity --> + <!-- Themes --> + <!-- NFC --> + <!-- Drawer --> + <!-- About --> + <!-- Log --> + <!-- Content description for images --> + <!-- Intro strings --> + <!-- Intro "SKIP" button --> + <!-- Intro "DONE" button --> </resources> diff --git a/mobile/src/main/res/values/attrs.xml b/mobile/src/main/res/values/attrs.xml index 654b0fe8f3c623c29697e1438173b16fa3541948..54908310f166d33cc18fc748f0ecd9c27b547412 100644 --- a/mobile/src/main/res/values/attrs.xml +++ b/mobile/src/main/res/values/attrs.xml @@ -13,12 +13,19 @@ </declare-styleable> <declare-styleable name="SegmentedControlButton"> - <attr name="lineColor" format="color" /> + <attr name="underlineColor" format="color" /> <attr name="textDistanceFromLine" format="dimension" /> - <attr name="lineHeight" format="dimension" /> + <attr name="underlineHeight" format="dimension" /> <attr name="backgroundColor" format="color" /> </declare-styleable> + <declare-styleable name="ItemUpdatingPreference"> + <attr name="summaryEnabled" format="string" /> + <attr name="summaryDisabled" format="string" /> + <attr name="helpHint" format="string" /> + <attr name="helpUrl" format="string" /> + </declare-styleable> + <declare-styleable name="customAttrs"> <attr name="themedArrowDownIcon" format="reference" /> <attr name="themedArrowUpIcon" format="reference" /> diff --git a/mobile/src/main/res/values/colors.xml b/mobile/src/main/res/values/colors.xml index b3a50225a2d0b793bbeaa5d29ad988b3750282ee..18579ed34747cc89bfafbb1d352aa1d5c0496fbf 100644 --- a/mobile/src/main/res/values/colors.xml +++ b/mobile/src/main/res/values/colors.xml @@ -19,4 +19,6 @@ <color name="pref_icon_green">#388E3C</color> <color name="pref_icon_orange">#F57C00</color> <color name="pref_icon_grey">#757575</color> + + <color name="ic_launcher_background">#FFFFFF</color> </resources> diff --git a/mobile/src/main/res/values/dimens.xml b/mobile/src/main/res/values/dimens.xml index 1f4ea41a6dd19cb215ef6d4ed7a877cb3d76705a..55bb0cb3d9fc8ffdcf97801f6d38d1346417427f 100644 --- a/mobile/src/main/res/values/dimens.xml +++ b/mobile/src/main/res/values/dimens.xml @@ -1,5 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> <resources> - <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">8dp</dimen> <dimen name="activity_vertical_margin">8dp</dimen> @@ -12,4 +12,7 @@ <dimen name="widget_margin">0dp</dimen> <dimen name="row_height">36dp</dimen> <dimen name="svg_image_default_size">60dp</dimen> + <dimen name="notificationlist_icon_size">40dp</dimen> + <dimen name="widgetlist_icon_size">50dp</dimen> + <dimen name="widgetlist_slider_width">130dp</dimen> </resources> diff --git a/mobile/src/main/res/values/segcontrol_styles.xml b/mobile/src/main/res/values/segcontrol_styles.xml deleted file mode 100644 index 24f0655b147f6b22d07cd1960905cdc060b85ced..0000000000000000000000000000000000000000 --- a/mobile/src/main/res/values/segcontrol_styles.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<resources> - <style name="sectionButtonStyle"> - <item name="android:textColor">@color/sectionswitch_text</item> - <item name="android:minWidth">48dp</item> - <item name="android:layout_width">wrap_content</item> - <item name="android:layout_height">wrap_content</item> - <item name="android:textSize">14dp</item> - <item name="android:stretchColumns">0</item> - <item name="android:padding">8dip</item> - <item name="lineHeight">2dp</item> - <item name="lineColor">?attr/colorAccent</item> - <item name="textDistanceFromLine">12dp</item> - <!-- Our background uses theme attributes which doesn't work when inflated as - a drawable on API < 21. This is why we use that custom attribute which has - special handling in code. --> - <item name="backgroundColor">@color/sectionswitch_bg</item> - </style> - <style name="whiteText"> - <item name="android:textColor">#ffffff</item> - </style> -</resources> diff --git a/mobile/src/main/res/values/strings.xml b/mobile/src/main/res/values/strings.xml index d620c64fa2ccbf360c37b648af3b39057ac4d8bb..5acd9ee93f36219d4d7d52d958a4e88eb1e0aa16 100644 --- a/mobile/src/main/res/values/strings.xml +++ b/mobile/src/main/res/values/strings.xml @@ -7,7 +7,7 @@ <string name="openhab_service_type" translatable="false">_openhab-server-ssl._tcp.local.</string> <string name="app_preferences_name">Settings</string> <string name="app_notifications">Notifications</string> - <string name="empty_string" translatable="false"></string> + <string name="empty_string" translatable="false" /> <!-- Main menu items --> <string name="mainmenu_openhab_sitemaps">Sitemaps</string> @@ -15,6 +15,8 @@ <string name="mainmenu_openhab_recognitions">Recognitions</string> <!-- /OpenLicht--> <string name="mainmenu_openhab_preferences">Settings</string> + <string name="mainmenu_openhab_habpanel">HABPanel</string> + <string name="habpanel_error">An error occurred while loading HABPanel</string> <string name="mainmenu_openhab_selectsitemap">Select default Sitemap</string> <string name="mainmenu_openhab_clearcache">Clear images cache</string> @@ -36,7 +38,7 @@ <string name="settings_openhab_screentimeroff">Disable display timer</string> <string name="settings_openhab_screentimeroff_summary">Disable display switch off timer when openHAB is running</string> <string name="settings_openhab_demomode">Demo mode</string> - <string name="settings_openhab_demomode_summary">Run in demo mode</string> + <string name="settings_openhab_demomode_summary">If you don\'t have an openHAB server, enable demo mode to get an imagination of what openHAB is capable of.</string> <string name="settings_openhab_theme">Theme</string> <string name="settings_openhab_fullscreen">Fullscreen</string> <string name="settings_openhab_fullscreen_summary">Display in fullscreen mode</string> @@ -51,6 +53,8 @@ <string name="settings_chart_scaling_value_s">Small</string> <string name="settings_chart_scaling_value_m">Default</string> <string name="settings_chart_scaling_value_l">Large</string> + <string name="settings_openhab_chart_hq">High resolution charts</string> + <string name="settings_openhab_chart_hq_summary">Generating charts can be taxing to the server. If you experience slow chart loading times and your server isn\'t powerful, disable this option to improve loading times.</string> <string name="settings_ringtone">Notification ringtone</string> <string name="settings_ringtone_none">None</string> <string name="settings_clear_default_sitemap">Clear default Sitemap</string> @@ -68,31 +72,45 @@ <string name="settings_notification_vibration_value_short" translatable="false">short</string> <string name="settings_notification_vibration_value_long" translatable="false">long</string> <string name="settings_notification_vibration_value_twice" translatable="false">twice</string> + <string name="settings_notification_ringtone_vibration">Notification settings</string> <string name="settings_connection_summary">Connected to %s</string> <string name="settings_insecure_connection_summary">Insecurely connected to %s</string> <string name="settings_openlicht_connection_summary">Set your Openlicht URL here</string> + <string name="beta">Beta</string> <!-- App messages strings --> - <string name="title_voice_widget">openHAB voice commands</string> + <string name="title_voice_widget">Voice commands</string> + <string name="title_voice_widget_icon">Voice commands and app shortcut</string> <string name="info_voice_input">openHAB, at your command!</string> <string name="info_voice_recognized_text">Recognized command: %1$s</string> <string name="info_demo_mode_short">Running in demo mode</string> + <!-- Please try to keep the string as short as possible --> + <string name="turn_off">Turn off</string> <string name="info_conn_url">Connecting to local URL</string> <string name="info_conn_rem_url">Connecting to remote URL</string> + <string name="app_shortcut_diabled_habpanel">Your server doesn\'t have HABPanel installed</string> + <string name="app_shortcut_diabled_notifications">Your remote server isn\'t available</string> + <string name="app_shortcut_diabled_voice_recognition">Your device doesn\'t have a voice recognition app installed</string> <!-- Error messages --> <string name="error_empty_sitemap_list">openHAB returned empty Sitemap list</string> + <string name="error_sitemap_generic_load_error">The Sitemap could not be loaded. The following error occurred: %1$s</string> <string name="error_network_not_available">Network is not available</string> + <string name="error_wifi_not_available">Wi-Fi is turned off</string> <string name="error_http_connection_failed">Connection unsuccessful. An unexpected response was received while trying to connect to the configured openHAB server (Received HTTP response code: %d).</string> <string name="error_invalid_url">Please enter a valid URL in a \'http(s)://host(:port)/\' form</string> + <string name="error_port_seems_invalid">The port you have entered seems invalid for the selected protocol</string> <string name="error_connection_failed">Connection to host failed</string> <string name="error_unable_to_resolve_hostname">Unable to resolve hostname</string> <string name="error_connection_sslhandshake_failed">SSL handshake failed</string> <string name="error_certificate_not_trusted">SSL certificate isn\'t trusted. Please import the root certificate or accept the certificate during SSL handshake.</string> <string name="error_certificate_expired">SSL certificate has been expired. Please get a new certificate or accept the certificate during SSL handshake.</string> <string name="error_certificate_not_valid_yet">SSL certificate isn\'t valid yet. Please get a correct certificate or accept the certificate during SSL handshake. Also check if the clock on your device is set correctly.</string> + <string name="error_certificate_invalid_date">SSL certificate has invalid date. Please get a correct certificate and check if the clock on your device is set correctly.</string> <string name="error_certificate_revoked">SSL certificate has been revoked. Please get a new certificate or accept the certificate during SSL handshake.</string> <string name="error_certificate_wrong_host">SSL certificate is not valid for %s</string> + <string name="error_http_to_https_port">Unexpected end of stream. Are you trying to connect to an HTTPS port via HTTP?</string> + <string name="webview_ssl">Currently this app doesn\'t support self-signed SSL certificates for Webview widgets</string> <string name="error_http_code_401">Authentication failed. Please check the configured username and password respectively the provided SSL client certificate (HTTP response code 401).</string> <string name="error_http_code_403">Authentication failed. Please check the configured username and password respectively the provided SSL client certificate (HTTP response code 403).</string> <string name="error_http_code_407">Authentication failed. Please check the configured username and password respectively the provided SSL client certificate (HTTP response code 407).</string> @@ -108,7 +126,9 @@ <string name="error_http_code_511">Network authentication is required (HTTP response code 511)</string> <string name="error_about_no_conn">Error while fetching openHAB server information</string> <string name="error_openhab_offline">Your openHAB server is offline while the cloud instance is running</string> - <string name="error_no_app_store_found">No app store found to install voice recognizer app</string> + <string name="error_no_browser_found">No browser found on your device</string> + <string name="error_no_speech_to_text_app_found">No voice recognition app found</string> + <string name="install">Install</string> <string name="title_activity_openhabwritetag">Write NFC tag</string> <string name="title_activity_libraries">Used libraries</string> <string name="info_write_tag">Touch the tag and keep it close until the confirmation message appear</string> @@ -123,7 +143,35 @@ <string name="info_openhab_push_notification_label">Push notification status</string> <string name="action_settings">Settings</string> <string name="nfc_dialog_title">Write NFC tag action for this element</string> + <string name="nfc_tag_recognized_label">NFC tag for \"%s\" recognized</string> + <string name="nfc_tag_recognized_item">NFC tag for Item \"%s\" recognized</string> <string name="info_not_set">Not set</string> + <string name="empty_page">This page doesn\'t contain any widgets that are set to be visible</string> + + <!-- Background tasks --> + <string name="send_device_info_to_server">Send device information to server</string> + <string name="send_device_info_item_prefix">Item name prefix</string> + <string name="send_device_info_item_prefix_summary">The Item names of the following features have this prefix</string> + <string name="settings_alarm_clock">Send alarm clock to openHAB</string> + <string name="settings_alarm_clock_summary_on">Sends alarm clock time to item \'%1$s\'</string> + <string name="settings_alarm_clock_summary_off">Don\'t send alarm clock time to server</string> + <string name="settings_alarm_clock_howto_summary">Tap here to get hints on how to set up this feature server-side</string> + <string name="settings_alarm_clock_howto_url" translatable="false">https://www.openhab.org/docs/apps/android.html#alarm-clock</string> + <string name="settings_item_pref_item_name">Item name</string> + <string name="waiting_for_item_upload">Waiting for network to send Item updates</string> + <string name="item_upload_in_progress">Items are currently being updated</string> + <string name="notification_channel_background">Background</string> + <string name="notification_channel_background_description">Used to display pending background tasks</string> + <string name="notification_channel_background_error">Error in background tasks</string> + <string name="notification_channel_background_error_description">Used to notify about errors in background tasks</string> + <plurals name="item_update_error_title"> + <item quantity="one">%d Item could not be updated</item> + <item quantity="other">%d Items could not be updated</item> + </plurals> + <string name="item_update_http_error">Item \'%1$s\' update failed (HTTP error %2$d)</string> + <string name="item_update_connection_error">Item \'%1$s\' update failed (No connection)</string> + <string name="error_sending_alarm_clock_item_empty">Please enter a valid Item name</string> + <string name="retry">Retry</string> <!-- Notification list strings --> <string name="notification_list_empty">No notifications were sent so far</string> @@ -164,6 +212,18 @@ <string name="nfc_action_off">Off</string> <string name="nfc_action_down">Down</string> <string name="nfc_action_toggle">Toggle</string> + <string name="nfc_action_undefined">Undefined</string> + <string name="nfc_action_empty_string">Empty string</string> + <string name="nfc_action_increase">Increase</string> + <string name="nfc_action_decrease">Decrease</string> + <string name="nfc_action_play">Play</string> + <string name="nfc_action_pause">Pause</string> + <string name="nfc_action_next">Next</string> + <string name="nfc_action_previous">Previous</string> + <string name="nfc_action_rewind">Rewind</string> + <string name="nfc_action_fastforward">Fast forward</string> + <string name="nfc_action_move">Move</string> + <string name="nfc_action_stop">Stop</string> <string name="nfc_activate">Activate</string> <string name="nfc_action_current_color">Current color</string> <string name="nfc_action_to_sitemap_page">Navigate to Sitemap page</string> @@ -201,10 +261,24 @@ <string name="cancel">Cancel</string> <string name="close">Close</string> <string name="try_again_button">Try again</string> + <string name="enable_wifi_button">Turn on Wi-Fi</string> <string name="go_to_settings_button">Go to settings</string> - <string name="configuration_missing">Your openHAB server couldn\'t be discovered automatically. Please configure its IP address or host name in the server settings.</string> - <string name="no_remote_server">Local network is unavailable and you haven\'t configured a remote server</string> + <string name="enable_demo_mode_button">Turn on demo mode</string> + <string name="configuration_missing">We didn\'t find an openHAB server in your network. If you already have a server, please configure its IP address or host name in the server settings. If you don\'t yet have a server, you can enable demo mode to see what openHAB is capable of.</string> + <string name="no_remote_server">Connection to local server failed and you haven\'t configured a remote server</string> <string name="resolving_openhab">Trying to discover openHAB server instance\u2026</string> + <string name="waiting_for_wifi">Waiting for Wi-Fi to establish connection\u2026</string> + + <!-- Log --> + <string name="log">Log</string> + <string name="view_log">View log</string> + <string name="clear_log">Clear log</string> + <string name="empty_log">Log is empty</string> + + <!-- Home screen shortcuts --> + <string name="home_shortcut_pin_to_home">Pin to home</string> + <string name="home_shortcut_error_pinning">Error pinning to home</string> + <string name="home_shortcut_success_pinning">Pinned to home</string> <!-- Content description for images --> <string name="content_description_open_roller_shutter">Open roller shutter</string> @@ -216,6 +290,8 @@ <string name="content_description_open_number_picker">Open number picker</string> <string name="content_description_video">Video</string> <string name="content_description_open_openhab">Open openHAB</string> + <string name="content_description_increase_item_value">Increase item value</string> + <string name="content_description_decrease_item_value">Decrease item value</string> <string name="swipe_to_refresh_description">The app also refreshes automatically, you normally don\'t need to do it manually</string> <string name="swipe_to_refresh_dismiss">Got it!</string> @@ -233,6 +309,18 @@ <!-- Intro "DONE" button --> <string name="app_intro_done_button">DONE</string> + <!-- Item picker --> + <string name="item_picker_list_empty">No Items found</string> + <string name="item_picker_list_error">An error occurred while loading Items</string> + <string name="item_picker_custom">Custom</string> + <string name="item_picker_dialog_title">Select state</string> + <string name="item_picker">openHAB Items</string> + <string name="item_picker_blurb">Set \"%s\" (%s) to \"%s\"</string> + <string name="search">Search</string> + <string name="settings_tasker_plugin">Tasker integration</string> + <string name="settings_tasker_plugin_summary">Enable Tasker action plugin which allows updating Items via Tasker or other compatible apps</string> + <string name="turn_on">Turn on</string> + <string name="snackbar_set_default">Set manual change as new default value for %1$s?</string> <string name="toast_set_default_success">Manual change was set as new default value!</string> <string name="snackbar_btn_set_default">Set as\ndefault</string> diff --git a/mobile/src/main/res/values/styles.xml b/mobile/src/main/res/values/styles.xml index a3beaa3fcda9af699df55b6617395da90b883ea6..1b1d028fa37d5a7fb6210c0ac74b3cec341014a2 100644 --- a/mobile/src/main/res/values/styles.xml +++ b/mobile/src/main/res/values/styles.xml @@ -7,4 +7,28 @@ <item name="android:scaleType">centerInside</item> <item name="android:background">?attr/selectableItemBackgroundBorderless</item> </style> + + <style name="WhiteText"> + <item name="android:textColor">#ffffff</item> + </style> + + <style name="SectionButton"> + <item name="android:textColor">@color/sectionswitch_text</item> + <item name="android:minWidth">48dp</item> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:textSize">14dp</item> + <item name="android:stretchColumns">0</item> + <item name="android:paddingLeft">8dip</item> + <item name="android:paddingRight">8dip</item> + <item name="android:paddingTop">4dip</item> + <item name="underlineHeight">2dp</item> + <item name="underlineColor">?attr/colorAccent</item> + <item name="textDistanceFromLine">10dp</item> + <!-- Our background uses theme attributes which doesn't work when inflated as + a drawable on API < 21. This is why we use that custom attribute which has + special handling in code. --> + <item name="backgroundColor">@color/sectionswitch_bg</item> + </style> + </resources> \ No newline at end of file diff --git a/mobile/src/main/res/values/themes.xml b/mobile/src/main/res/values/themes.xml index 908b8f0585a2ed619559c409a552711e5739523a..22c590e3b630cb68f94ac36715de006c8a9c6529 100644 --- a/mobile/src/main/res/values/themes.xml +++ b/mobile/src/main/res/values/themes.xml @@ -24,7 +24,7 @@ <item name="themedArrowDownIcon">@drawable/ic_keyboard_arrow_down_black_24dp</item> <item name="themedArrowUpIcon">@drawable/ic_keyboard_arrow_up_black_24dp</item> <item name="themedArrowRightIcon">@drawable/ic_keyboard_arrow_right_black_24dp</item> - <item name="themedColorIcon">@drawable/ic_color_lens_black_24dp</item> + <item name="themedColorIcon">@drawable/ic_palette_outline_black_24dp</item> <item name="themedClearIcon">@drawable/ic_clear_black_24dp</item> <item name="themedSpinnerCaret">@drawable/ic_spinner_caret_black</item> @@ -46,7 +46,7 @@ <item name="frameWidgetDividerBackground">@drawable/material_divider_dark</item> <item name="imageLoadingIndicator">@drawable/ic_image_loading_white</item> - <item name="android:itemTextAppearance">@style/whiteText</item> + <item name="android:itemTextAppearance">@style/WhiteText</item> <item name="android:itemBackground">#303030</item> <item name="about_libraries_window_background"> @@ -69,7 +69,7 @@ <item name="themedArrowDownIcon">@drawable/ic_keyboard_arrow_down_white_24dp</item> <item name="themedArrowUpIcon">@drawable/ic_keyboard_arrow_up_white_24dp</item> <item name="themedArrowRightIcon">@drawable/ic_keyboard_arrow_right_white_24dp</item> - <item name="themedColorIcon">@drawable/ic_color_lens_white_24dp</item> + <item name="themedColorIcon">@drawable/ic_palette_outline_white_24dp</item> <item name="themedClearIcon">@drawable/ic_clear_white_24dp</item> <item name="themedSpinnerCaret">@drawable/ic_spinner_caret_white</item> diff --git a/mobile/src/main/res/xml/local_connection_preferences.xml b/mobile/src/main/res/xml/local_connection_preferences.xml index b989e3c3d019284b8e44d4704b58b60f2e5ba04b..021e8da8911071be0be6794fed541d04d540344a 100644 --- a/mobile/src/main/res/xml/local_connection_preferences.xml +++ b/mobile/src/main/res/xml/local_connection_preferences.xml @@ -13,11 +13,11 @@ android:inputType="textNoSuggestions" android:key="default_openhab_username" android:title="@string/settings_openhab_username" - android:icon="@drawable/ic_person_grey_24dp" /> + android:icon="@drawable/ic_person_outline_grey_24dp" /> <EditTextPreference android:defaultValue="@string/empty_string" android:inputType="textPassword" android:key="default_openhab_password" android:title="@string/settings_openhab_password" - android:icon="@drawable/ic_security_grey_24dp" /> + android:icon="@drawable/ic_shield_key_outline_grey_24dp" /> </PreferenceScreen> \ No newline at end of file diff --git a/mobile/src/main/res/xml/network_security_config.xml b/mobile/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000000000000000000000000000000000000..7d50fce7444c971ce36156b4e26231ba58e0cd55 --- /dev/null +++ b/mobile/src/main/res/xml/network_security_config.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <base-config cleartextTrafficPermitted="true"> + <trust-anchors> + <certificates src="system"/> + <certificates src="user"/> + </trust-anchors> + </base-config> +</network-security-config> \ No newline at end of file diff --git a/mobile/src/main/res/xml/preferences.xml b/mobile/src/main/res/xml/preferences.xml index 6827efdc0cf884ac7373958fb9ff1746e84c0d58..a1c98ddb4605a95190fe115254b7db0719ab3d4b 100644 --- a/mobile/src/main/res/xml/preferences.xml +++ b/mobile/src/main/res/xml/preferences.xml @@ -1,25 +1,26 @@ <?xml version="1.0" encoding="utf-8"?> -<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory android:title="@string/settings_connection_title"> - <CheckBoxPreference + <SwitchPreference android:defaultValue="false" android:disableDependentsState="true" android:key="default_openhab_demomode" android:summary="@string/settings_openhab_demomode_summary" android:title="@string/settings_openhab_demomode" - android:icon="@drawable/ic_theater_grey_24dp" /> + android:icon="@drawable/ic_none" /> <Preference android:key="default_openhab_local_connection" android:persistent="false" android:title="@string/settings_openhab_connection" android:dependency="default_openhab_demomode" - android:icon="@drawable/ic_home_grey_24dp" /> + android:icon="@drawable/ic_home_outline_grey_24dp" /> <Preference android:key="default_openhab_remote_connection" android:persistent="false" android:title="@string/settings_openhab_alt_connection" android:dependency="default_openhab_demomode" - android:icon="@drawable/ic_tree_grey_24dp" /> + android:icon="@drawable/ic_tree_outline_grey_24dp" /> <EditTextPreference android:defaultValue="@string/empty_string" android:inputType="textUri" @@ -33,12 +34,12 @@ android:summary="@string/settings_openhab_none" android:title="@string/settings_openhab_sslclientcert" android:dependency="default_openhab_demomode" - android:icon="@drawable/ic_certificate_grey_24dp" /> + android:icon="@drawable/ic_none" /> <Preference android:clickable="true" android:key="default_openhab_clear_default_sitemap" android:title="@string/settings_clear_default_sitemap" - android:icon="@drawable/ic_file_document_box_outline_grey_24dp" /> + android:icon="@drawable/ic_none" /> </PreferenceCategory> <PreferenceCategory android:title="@string/settings_display_title"> <ListPreference @@ -48,7 +49,7 @@ android:summary="%s" android:entries="@array/themeArray" android:entryValues="@array/themeValues" - android:icon="@drawable/ic_color_lens_grey_24dp" /> + android:icon="@drawable/ic_palette_outline_grey_24dp" /> <ListPreference android:title="@string/settings_openhab_icon_format" android:key="iconFormatType" @@ -56,39 +57,70 @@ android:summary="%s" android:entries="@array/iconTypeNames" android:entryValues="@array/iconTypeValues" - android:icon="@drawable/ic_image_grey_24dp" /> + android:icon="@drawable/ic_image_outline_grey_24dp" /> <org.openhab.habdroid.ui.widget.ChartScalingPreference android:title="@string/settings_chart_scaling" android:summary="@string/settings_chart_scaling_summary" android:key="chartScalingFactor" android:defaultValue="1.5" - android:icon="@drawable/ic_forum_grey_24dp" /> + android:icon="@drawable/ic_none" /> + <SwitchPreference + android:defaultValue="true" + android:key="default_openhab_chart_hq" + android:summary="@string/settings_openhab_chart_hq_summary" + android:title="@string/settings_openhab_chart_hq" + android:icon="@drawable/ic_none" /> <Preference android:clickable="true" android:key="default_openhab_cleacache" android:title="@string/mainmenu_openhab_clearcache" - android:icon="@drawable/ic_clear_all_grey_24dp" /> - <CheckBoxPreference + android:icon="@drawable/ic_none" /> + <SwitchPreference android:defaultValue="false" android:key="default_openhab_screentimeroff" android:summary="@string/settings_openhab_screentimeroff_summary" android:title="@string/settings_openhab_screentimeroff" - android:icon="@drawable/ic_local_cafe_grey_24dp" /> - <CheckBoxPreference + android:icon="@drawable/ic_none" /> + <SwitchPreference android:defaultValue="false" android:key="default_openhab_fullscreen" android:summary="@string/settings_openhab_fullscreen_summary" android:title="@string/settings_openhab_fullscreen" - android:icon="@drawable/ic_fullscreen_grey_24dp" /> + android:icon="@drawable/ic_none" /> + </PreferenceCategory> + <PreferenceCategory android:title="@string/send_device_info_to_server" + android:key="sendDeviceInfoCat"> + <EditTextPreference + android:defaultValue="@string/empty_string" + android:inputType="textNoSuggestions" + android:key="sendDeviceInfoPrefix" + android:title="@string/send_device_info_item_prefix" + android:summary="@string/send_device_info_item_prefix_summary" + android:dependency="default_openhab_demomode" + android:icon="@drawable/ic_none" /> + <org.openhab.habdroid.ui.widget.ItemUpdatingPreference + android:defaultValue="false|AlarmClock" + android:key="alarmClock" + app:helpHint="@string/settings_alarm_clock_howto_summary" + app:helpUrl="@string/settings_alarm_clock_howto_url" + android:title="@string/settings_alarm_clock" + android:dependency="default_openhab_demomode" + android:icon="@drawable/ic_alarm_grey_24dp" /> </PreferenceCategory> <PreferenceCategory android:title="@string/settings_misc_title"> + <SwitchPreference + android:defaultValue="false" + android:key="taskerPlugin" + android:title="@string/settings_tasker_plugin" + android:summary="@string/settings_tasker_plugin_summary" + android:icon="@drawable/ic_none" /> <RingtonePreference android:key="default_openhab_alertringtone" android:persistent="true" android:ringtoneType="ringtone|notification" android:showSilent="true" android:title="@string/settings_ringtone" - android:icon="@drawable/ic_notifications_active_grey_24dp" /> + android:icon="@drawable/ic_bell_ring_outline_grey_24dp" /> <ListPreference android:key="default_openhab_notification_vibration" android:title="@string/settings_notification_vibration" @@ -97,10 +129,20 @@ android:entries="@array/notificationVibration" android:entryValues="@array/notificationVibrationValues" android:icon="@drawable/ic_vibration_grey_24dp" /> - <CheckBoxPreference + <Preference + android:clickable="true" + android:key="default_openhab_alertringtone_vibration" + android:title="@string/settings_notification_ringtone_vibration" + android:icon="@drawable/ic_bell_outline_grey_24dp" /> + <SwitchPreference android:defaultValue="false" android:key="default_openhab_debug_messages" android:title="@string/settings_debug_messages_title" - android:icon="@drawable/ic_bug_report_grey_24dp" /> + android:icon="@drawable/ic_none" /> + <Preference + android:clickable="true" + android:key="default_openhab_log" + android:title="@string/view_log" + android:icon="@drawable/ic_none" /> </PreferenceCategory> </PreferenceScreen> diff --git a/mobile/src/main/res/xml/remote_connection_preferences.xml b/mobile/src/main/res/xml/remote_connection_preferences.xml index dea0bf538c5e2d848110bd2e06f100c903d37f01..b5a90fbcf5bd6e5e9adb8b2170912fdde2219707 100644 --- a/mobile/src/main/res/xml/remote_connection_preferences.xml +++ b/mobile/src/main/res/xml/remote_connection_preferences.xml @@ -13,11 +13,11 @@ android:inputType="textNoSuggestions" android:key="default_openhab_remote_username" android:title="@string/settings_openhab_username" - android:icon="@drawable/ic_person_grey_24dp" /> + android:icon="@drawable/ic_person_outline_grey_24dp" /> <EditTextPreference android:defaultValue="@string/empty_string" android:inputType="textPassword" android:key="default_openhab_remote_password" android:title="@string/settings_openhab_password" - android:icon="@drawable/ic_security_grey_24dp" /> + android:icon="@drawable/ic_shield_key_outline_grey_24dp" /> </PreferenceScreen> \ No newline at end of file diff --git a/mobile/src/main/res/xml/voice_widget_with_icon_info.xml b/mobile/src/main/res/xml/voice_widget_with_icon_info.xml new file mode 100644 index 0000000000000000000000000000000000000000..8bdbab93c8180957923008d579a9a6204e23328f --- /dev/null +++ b/mobile/src/main/res/xml/voice_widget_with_icon_info.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" + android:minWidth="40dp" + android:minHeight="40dp" + android:updatePeriodMillis="86400000" + android:previewImage="@drawable/voice_widget_preview_with_icon" + android:initialLayout="@layout/widget_voice_with_icon" + android:widgetCategory="home_screen" + android:resizeMode="horizontal|vertical" > +</appwidget-provider> \ No newline at end of file diff --git a/mobile/src/test/java/org/openhab/habdroid/model/ItemTest.java b/mobile/src/test/java/org/openhab/habdroid/model/ItemTest.java index 75d1d13a71755488bb428419124ec91660124fb7..ff2a0a9d927d737b882d8a5a2c8a51a58671f957 100644 --- a/mobile/src/test/java/org/openhab/habdroid/model/ItemTest.java +++ b/mobile/src/test/java/org/openhab/habdroid/model/ItemTest.java @@ -8,6 +8,7 @@ import org.mockito.runners.MockitoJUnitRunner; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @RunWith(MockitoJUnitRunner.class) @@ -15,49 +16,50 @@ public class ItemTest { @Test public void getStateAsBoolean_stateOff_returnFalse() throws Exception { Item sut = Item.fromJson(itemJsonForState("OFF")); - assertFalse(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertFalse(sut.state().asBoolean()); } @Test public void getStateAsBoolean_stateON_returnTrue() throws Exception { Item sut = Item.fromJson(itemJsonForState("ON")); - assertTrue(sut.stateAsBoolean()); - } - - @Test - public void getStateAsBoolean_stateNull_returnFalse() throws Exception { - Item sut = Item.fromJson(itemJsonForState(null)); - assertFalse(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertTrue(sut.state().asBoolean()); } @Test public void getStateAsBoolean_stateNegativeInteger_returnFalse() throws Exception { Item sut = Item.fromJson(itemJsonForState("-42")); - assertFalse(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertFalse(sut.state().asBoolean()); } @Test public void getStateAsBoolean_statePositiveInteger_returnTrue() throws Exception { Item sut = Item.fromJson(itemJsonForState("42")); - assertTrue(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertTrue(sut.state().asBoolean()); } @Test public void getStateAsBoolean_stateIsZero_returnFalse() throws Exception { Item sut = Item.fromJson(itemJsonForState("0")); - assertFalse(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertFalse(sut.state().asBoolean()); } @Test public void getStateAsBoolean_stateHsbBrightnessZero_returnFalse() throws Exception { Item sut = Item.fromJson(itemJsonForState("10,10,0")); - assertFalse(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertFalse(sut.state().asBoolean()); } @Test public void getStateAsBoolean_stateHsbBrightnessPositive_returnTrue() throws Exception { Item sut = Item.fromJson(itemJsonForState("10,10,50")); - assertTrue(sut.stateAsBoolean()); + assertNotNull(sut.state()); + assertTrue(sut.state().asBoolean()); } private JSONObject itemJsonForState(String state) throws JSONException { diff --git a/stickler/checkstyle.xml b/stickler/checkstyle.xml index 0cc41a698cc448a47ee2006e36a7246bf54f2227..fe2c3ad49594dc7bb39f77c657df4fa299a04d07 100644 --- a/stickler/checkstyle.xml +++ b/stickler/checkstyle.xml @@ -218,7 +218,8 @@ <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> </module> <module name="JavadocMethod"> - <property name="scope" value="public"/> + <property name="scope" value="private"/> + <property name="allowMissingJavadoc" value="true"/> <property name="allowMissingParamTags" value="true"/> <property name="allowMissingThrowsTags" value="true"/> <property name="allowMissingReturnTag" value="true"/> diff --git a/travis/prepare-deploy.sh b/travis/prepare-deploy.sh index 329bb6f8e632d7451a64fbc3f695791f788f2deb..5ba4838e9d664349c823b2f4c7aa0790a69b5027 100644 --- a/travis/prepare-deploy.sh +++ b/travis/prepare-deploy.sh @@ -12,8 +12,6 @@ then echo "Beta" releaseFlavor="beta" releaseFlavorCapital="Beta" - # Workaround for #794: Remove crashalytics - sed -i -e 's|maven.fabric.io/public|repo1.maven.org/maven2|' -e /fabric/d -e '/google-services/d' mobile/build.gradle fi echo "Build apk" time ./gradlew :mobile:assembleFull${releaseFlavorCapital}Release diff --git a/travis/test.sh b/travis/test.sh index 82a05f1330e5b16544e022577d7cd68a9c28cd8a..e8cefe8261decd832f6cabb82a8cd1cd43fb1894 100644 --- a/travis/test.sh +++ b/travis/test.sh @@ -17,4 +17,16 @@ fi bash travis/bump-versioncode.sh bash travis/start-emulator.sh phone -./gradlew --stacktrace :mobile:assemble{Foss,Full}${releaseFlavorCapital}{Debug,Release} :mobile:test{Foss,Full}${releaseFlavorCapital}ReleaseUnitTest :mobile:connected{Foss,Full}${releaseFlavorCapital}DebugAndroidTest +./gradlew :mobile:assemble{Foss,Full}${releaseFlavorCapital}{Debug,Release} :mobile:test{Foss,Full}${releaseFlavorCapital}ReleaseUnitTest +retryCount=0 +while true +do + ./gradlew :mobile:connected{Foss,Full}${releaseFlavorCapital}DebugAndroidTest && break + echo "Build failed. Retry..." + ((retryCount+=1)) + if [ "$retryCount" -gt 3 ] + then + echo "Max. retry count reached. Exiting..." + exit 1 + fi +done diff --git a/travis/validate-app-strings.py b/travis/validate-app-strings.py new file mode 100755 index 0000000000000000000000000000000000000000..9d7a4a8c7ac81bc6b806e1fe311019033eb39278 --- /dev/null +++ b/travis/validate-app-strings.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +import glob +import re + +exitCode = 0 + +def checkStrings(flavor): + errorCount = 0 + print("Checking " + flavor + " app strings...") + appStringsFiles = glob.glob('mobile/src/' + flavor + '/res/values-*/strings.xml') + for file in appStringsFiles: + lang = file[27:-12] + print("Processing " + lang) + strings = open(file, "r").read() + + openhabOccurences = [m.start() for m in re.finditer("openhab", strings, re.I)] + for i in openhabOccurences: + openhabString = strings[i:i+7] + if openhabString != "openhab" and openhabString != "openHAB": # "openhab" is used in links + print("Incorrect spelling of openHAB") + errorCount += 1 + if len(appStringsFiles) == 0: + print("No files to validate") + print("\n\n") + return errorCount + +exitCode += checkStrings("main") +exitCode += checkStrings("full") +exitCode += checkStrings("foss") +exitCode += checkStrings("beta") +exitCode += checkStrings("stable") + +exit(exitCode)