Compare commits

..

87 Commits

Author SHA1 Message Date
Harry Bond
c287dde93f Merge remote-tracking branch 'origin/yannikbloscheck-greenery' into test/2025.07.10
# Conflicts:
#    data/drules_proto.bin
#    data/drules_proto_default_dark.bin
#    data/drules_proto_default_light.bin
#    data/drules_proto_outdoors_dark.bin
#    data/drules_proto_outdoors_light.bin


Signed-off-by: Harry Bond <me@hbond.xyz>
2025-07-10 21:47:23 +01:00
Harry Bond
f7e4fdad6a [Android] Add current opening hours status to placepage preview
And refresh it every 45s

Signed-off-by: Harry Bond <me@hbond.xyz>


Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>

Signed-off-by: Harry Bond <me@hbond.xyz>
2025-07-10 19:41:51 +01:00
Harry Bond
f59fb509c9 [core] Remove legacy opening_hours stuff
Signed-off-by: Harry Bond <me@hbond.xyz>
2025-07-10 19:41:50 +01:00
Jean-Baptiste
9cd3db6f39 [android] Fix crash in the editor
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-10 20:15:14 +02:00
Yannik Bloscheck
7138970ea6 [ios] Make left button configurable
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 18:07:13 +02:00
Yannik Bloscheck
cbd561ec90 Adding myself to contributors
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:54:28 +02:00
Yannik Bloscheck
048dc60be6 [ios] Make sure all C files keep using the right whitespace
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:54:27 +02:00
Yannik Bloscheck
40018f5cc8 [ios] Added rules for Swift formatting
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:52:07 +02:00
Yannik Bloscheck
4314f281d1 [ios] Increasing used Swift version
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:52:07 +02:00
Yannik Bloscheck
b529a733c0 Adding code style guide for Swift
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:51:54 +02:00
Yannik Bloscheck
1b8172f744 [ios] Improved TTS system voice selection
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 17:14:47 +02:00
Konstantin Pastbin
c589aaa3cf [styles] Regenerate
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 17:07:16 +02:00
Konstantin Pastbin
13b91b36ae [styles] Replace deprecated landuse=churchyard with landuse=religious
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 17:07:16 +02:00
Konstantin Pastbin
e523434b36 [classif] Deprecate power=station
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 17:07:16 +02:00
Filip Czaplicki
752fcaf09c Portable shebang in set_up_android.py script
Signed-off-by: Filip Czaplicki <git@starsep.com>
2025-07-10 17:01:22 +02:00
Yannik Bloscheck
7e2b05573f [ios] Fix issues with routing options
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 15:48:15 +02:00
Konstantin Pastbin
7e63d98cb7 [tests] Add downloading dynamic chunk size test
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 09:25:01 +02:00
Konstantin Pastbin
304addba58 [android] Increase dl http thread buffer size to 128KB
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 09:25:01 +02:00
Konstantin Pastbin
1becd3e0ba [core] Use dynamic chunk size for downloading maps
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 09:25:01 +02:00
Konstantin Pastbin
dee47e7a66 [core] Disable servers pinging before starting downloads
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 09:25:01 +02:00
Konstantin Pastbin
2e60bfc289 [core] Improve downloader logging
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 09:25:01 +02:00
Yannik Bloscheck
fdbb41e0fd [ios] Changed settings to SwiftUI
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-10 08:06:58 +02:00
Henry Sternberg
090ed5044a [routing] Improved TTS for roundabouts
Signed-off-by: Henry Sternberg <dev@bluelightmaps.com>
2025-07-10 07:07:34 +02:00
Codeberg Translate
54b6471400 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: alexgabi <alexgabi@noreply.codeberg.org>
Co-authored-by: canadagoose <canadagoose@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant_HK/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fr_CA/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ar_SA/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/lt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hant/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-07-10 04:03:45 +00:00
Konstantin Pastbin
415e2fc0c2 [styles] Regenerate for area fills changes
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 05:37:43 +02:00
Konstantin Pastbin
f0ed076858 [styles] Raise medical, educational, sport areas visibility, add more types
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 05:37:43 +02:00
Konstantin Pastbin
57f28fa85b [styles] Raise visibility of industrial areas, add more types
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 05:37:43 +02:00
Konstantin Pastbin
7228fe239d [styles] Add areas to general amenities
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-10 05:37:43 +02:00
Yannik Bloscheck
c294937c73 [ios] Updated general transport icon to the general style
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-09 19:22:03 +02:00
Yannik Bloscheck
ebf84e7d5b [styles] Improved balance between transport icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-09 19:22:03 +02:00
Yannik Bloscheck
19dd760c44 [styles] Adjusted general transport boomarks icon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-09 19:22:03 +02:00
Yannik Bloscheck
8a8ac5c660 [ios] Show downloading progress percentage in full numbers only
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-09 10:25:30 +02:00
Yannik Bloscheck
7a8f7929fc [ios] Fixing missing translation for saved route
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-08 23:47:39 +02:00
Bastian Greshake Tzovaras
b285ef348b Add to copyright notices (#784)
Reviewed-on: https://codeberg.org/comaps/comaps/pulls/784
Reviewed-by: Konstantin Pastbin <pastk@noreply.codeberg.org>
Co-authored-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-committed-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
2025-07-08 18:32:05 +02:00
Yannik Bloscheck
87dad591ab [ios] Fixing reappearing login promts
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-08 13:36:54 +02:00
Henry Sternberg
9e49aae49e [docs] Updated to reflect new desktop binary name
Signed-off-by: Henry Sternberg <dev@bluelightmaps.com>
2025-07-08 08:17:02 +01:00
Codeberg Translate
d621636549 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: alexgabi <alexgabi@noreply.codeberg.org>
Co-authored-by: fbausch <fbausch@noreply.codeberg.org>
Co-authored-by: lazlo <lazlo@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Co-authored-by: slickdaddy <slickdaddy@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/lt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant_HK/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/lt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gsw/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-07-07 09:34:51 +00:00
Konstantin Pastbin
ec1d2e6c82 [core] Add more logging to the downloader
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-07 07:21:53 +02:00
Codeberg Translate
6d0c52afcc [strings] Update from Codeberg Translate
Co-authored-by: Anonymous <anonymous@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: ZeljkoBG <zeljkobg@noreply.codeberg.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: lazlo <lazlo@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Co-authored-by: pastk <pastk@noreply.codeberg.org>
Co-authored-by: sunsand <sunsand@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/en/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/zh_Hant_HK/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/en/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/en/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/en/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sv/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-07-06 21:04:35 +07:00
Jean-Baptiste
3abf354099 [iOS] Drop products features on the place page
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-06 13:49:13 +02:00
Jean-Baptiste
9a759229f9 [android] Migrate editor screens to Material components
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-06 13:43:17 +02:00
Yannik Bloscheck
a3e1666ede [ios] Removed unused settings icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-06 13:30:59 +02:00
Yannik Bloscheck
15c7e71866 [ios] Switched OSM profile to SwiftUI and redesigned it
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-06 13:30:59 +02:00
Yannik Bloscheck
db1ef9b148 [android] Adjusted to editor changes with user preferences
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-06 13:30:59 +02:00
Yannik Bloscheck
9951ebece7 [editor] Stopped user preferences throwing an exception
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-06 13:30:59 +02:00
Jean-Baptiste
7bfb488f1d [android] Drop products features on the place page
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-06 11:06:05 +02:00
Jean-Baptiste
df70ae1b01 [docs] Simplify documentation to contribute
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-05 18:07:15 +02:00
Jean-Baptiste
15b3cda4d7 [android] Migrate place page to Material Components
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-05 16:01:08 +02:00
Yannik Bloscheck
fae8849869 [styles] Regenerated files for changed how the greenery system works
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-05 10:18:15 +02:00
Yannik Bloscheck
3585bd4fad [styles] Changed how the greenery system works
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-05 10:17:11 +02:00
Codeberg Translate
99bb468448 [strings] Update from Codeberg Translate
Manually fixed merge conflict.

Co-authored-by: Anonymous <anonymous@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Lezurex <lezurex@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: phama <phama@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/countries/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plist/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gsw/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-07-05 14:53:23 +07:00
Vraj Shah
46ec844398 Fixes #10721 | prevent splash screen content from being overlapped | (#10775)
* Fix: prevent splash screen content from being overlapped by system nav bar on Android 15/16

Signed-off-by: vrajs <vrajshah006@gmail.com>
2025-07-05 09:42:39 +02:00
kavikhalique
f8d1914037 Show "Retry" button on download failure
Signed-off-by: kavikhalique <kavikhalique3@gmail.com>
2025-07-05 09:42:39 +02:00
S. Kozyr
71386ce395 Fixed layout
Signed-off-by: S. Kozyr <s.trump@gmail.com>
2025-07-05 09:42:39 +02:00
DevarshVasani
8d95d2e9b7 Fix IllegalStateException in destroySurface method
Signed-off-by: DevarshVasani <vasanidevarsh@gmail.com>
2025-07-05 09:42:39 +02:00
Alexander Borsuk
05c4413394 [android] Fix EACCESS PermissionDenied error when opening files on Android 5
Signed-off-by: Alexander Borsuk <me@alex.bio>
2025-07-05 09:42:39 +02:00
hemanggs
29bbbb13ee [Android] Fixes inset handling
Signed-off-by: hemanggs <hemangmanhas@gmail.com>
2025-07-05 09:42:39 +02:00
Konstantin Pastbin
e321b1c5be Revert "[android] Adds delay to inset application on API 29 and lower"
This reverts commit 7b600efd5c.
2025-07-05 09:42:39 +02:00
Yannik Bloscheck
736e1aa07b [styles] Regenerated files for custom color for general areas
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-04 23:23:20 +02:00
Yannik Bloscheck
e32b01494a [styles] Custom color for general areas
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-04 23:22:18 +02:00
Konstantin Pastbin
4496690e0a [strings] Update Austria region names
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-04 15:08:03 +02:00
Yannik Bloscheck
ef9618b3d6 [ios] Allowed to use C++ editor methods directly from Swift
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-07-04 13:42:46 +02:00
Jean-Baptiste
13ba20aa25 [android] Fix crash in bookmarks tracks screen
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-04 13:33:57 +02:00
Alexander Borsuk
23c23c118d Removed unused font leftover from MM
It was introduced in https://github.com/mapsme/omim/pull/11982 for subscriptions

Signed-off-by: Alexander Borsuk <me@alex.bio>
2025-07-04 11:42:44 +02:00
Kiryl Kaveryn
5b4d458579 [ios] fix elevation chart failing on update
Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-07-04 11:42:44 +02:00
Kiryl Kaveryn
1bb2b2274f [ios] Review fixes
Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-07-04 11:42:44 +02:00
Kiryl Kaveryn
aec82794ac [ios] Fix track selection point updates on every new selection
On the every new tap on the `Track` or during the `Elevation chart` dragging, the track `Active point` will be updated now. It allows to keep the current selected track point coordinates up to date and fix the bug when the `route to/route from` buttons use only the initial coordinates.
Key changes:
1. the `Active point` and `My position` points are moved from the `Elevation profile` to the `PlacePageTrackData` because this properties are related to the whole track. Not only chart. The chart is only one of the consumers of this data updates.
2. The subscription to the active point updates is moved from the `Elevation profile` to the `PlacePagePresenter`. The reason - see 1.
2. The callback `onActivePointChanged` is added to notify that the active point is updated
3. When the callback is triggered the `PlacePageTrackData` fetches the new coordinates from the core and saves it. This coordinates are used by the `route to/from` buttons.

Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-07-04 11:42:44 +02:00
Kiryl Kaveryn
927299f4a9 [ios] Expand circle buttons tappable area
By 5pt to not overlap with another buttons (`close` and `share` on the place page screen)

Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-07-04 11:42:44 +02:00
Kiryl Kaveryn
87cb0307cf [ios] fix EditorVC NoteCell jumping while typing
Signed-off-by: Kiryl Kaveryn <kirylkaveryn@gmail.com>
2025-07-04 11:42:44 +02:00
Alexander Borsuk
de7f60ea37 [xcode] Remove files deleted from disk also from xcode project
Signed-off-by: Alexander Borsuk <me@alex.bio>
2025-07-04 11:42:44 +02:00
Alexander Borsuk
f7fb0e80e5 [xcode] Fixed wrong paths to location files and sorted project files
Signed-off-by: Alexander Borsuk <me@alex.bio>
2025-07-04 11:42:44 +02:00
Alexander Borsuk
e49a74e287 [strings] Missing Qingdao metro translation string
Signed-off-by: Alexander Borsuk <me@alex.bio>
2025-07-04 16:01:52 +07:00
Viktor Govako
77a7255e93 [data] Deleted countries_names.txt
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-07-04 15:54:17 +07:00
Viktor Govako
25b3abadef [country][strings] Updated Italy-Tuscany.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-07-04 15:45:48 +07:00
Viktor Govako
01388ae6dd [drape] Relaxed GPS track Spline update.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
2025-07-04 15:22:49 +07:00
Omar Mostafa
4bf61f14f8 [base] Improve Arabic Search Normalization
Signed-off-by: Omar Mostafa <3omar.7afez2022@gmail.com>
2025-07-04 15:15:15 +07:00
pastk
49603aa0a1 Deleted translation using Weblate (Portuguese (Portugal)) 2025-07-04 04:21:55 +00:00
pastk
890c927bab Deleted translation using Weblate (Portuguese (Portugal)) 2025-07-04 04:19:57 +00:00
Codeberg Translate
d564f69b58 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Lezurex <lezurex@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: ZeljkoBG <zeljkobg@noreply.codeberg.org>
Co-authored-by: canadagoose <canadagoose@noreply.codeberg.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: marcosm <marcosm@noreply.codeberg.org>
Co-authored-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-authored-by: metehan <metehan@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Co-authored-by: pastk <pastk@noreply.codeberg.org>
Co-authored-by: 玄枵 <ipmlosion@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/en_GB/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/fr_CA/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/lt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plist/pt_PT/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-plurals/en/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hant/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-07-03 18:04:06 +00:00
Stzyxh
abd15756be Redesign README
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-07-03 19:12:00 +07:00
Jean-Baptiste
ea1edec3df [android] Fix the size of downloader icon
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-02 18:43:34 +02:00
Codeberg Translate
c17135f5a6 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Lezurex <lezurex@noreply.codeberg.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: brtc <brtc@noreply.codeberg.org>
Co-authored-by: openfab <openfab@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Co-authored-by: pastk <pastk@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/zh_Hant/
Translate-URL: https://translate.codeberg.org/projects/comaps/google-play-descriptions/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/af/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ar/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ast/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/az/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/be/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/bg/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/bn/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ca/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/da/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/el/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/es_MX/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/eu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fa/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/fr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/gl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/he/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/hu/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ia/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/id/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/is/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/it/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ja/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/kab/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ko/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/lt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/lv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ml/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/mr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/mt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/nb_NO/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/pt_BR/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ro/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/ru/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sq/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sv/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/sw/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/th/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/tr/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/uk/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/vi/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hant/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-07-02 09:12:26 +00:00
Codeberg Translate
2471ff0545 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <git@alius.cz>
Co-authored-by: Lezurex <lezurex@noreply.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Co-authored-by: gpesquero <gpesquero@noreply.codeberg.org>
Co-authored-by: lazlo <lazlo@noreply.codeberg.org>
Co-authored-by: oster5 <oster5@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android/cs/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/gsw/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/zh_Hans/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/de/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/es/
Translate-URL: https://translate.codeberg.org/projects/comaps/appstore-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/fdroid-app-description/nl/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/et/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/zh_Hans/
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/F-Droid app description
Translation: CoMaps/iOS UI Strings
2025-07-01 13:56:21 +00:00
hb0nd
a99d1c1a38 [android] fix downloader notification using wrong icon
Signed-off-by: hb0nd <me@hbond.xyz>
2025-07-01 12:51:43 +02:00
Jean-Baptiste
deb663e4f9 [android] Migrate download screens to Material components
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-01 11:48:47 +02:00
Jean-Baptiste
3858b0905f [android] Migrate somes icons to svg
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-01 05:06:22 +02:00
Jean-Baptiste
8db9289b56 [android] Migrate bookmarks layouts to Material Components
Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
2025-07-01 05:04:32 +02:00
784 changed files with 24750 additions and 76977 deletions

View File

@@ -7,9 +7,11 @@ CoMaps contributors:
(in alphabetic order)
--------------------------------------------------------------------------------
Bastian Greshake Tzovaras
clover sage
Harry Bond <me@hbond.xyz>
vikiawv
Yannik Bloscheck
--------------------------------------------------------------------------------
Organic Maps (formerly OMaps) contributors:

158
README.md
View File

@@ -1,62 +1,85 @@
<!--<div align="center">
<img src="qt/res/logo.png" height="100"/>
</div>-->
<!-- a nav bar -->
[Project Intro](https://codeberg.org/comaps#comaps)
| [Governance](https://codeberg.org/comaps/Governance#comaps-project-governance-docs)
| [FAQ](https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md)
| [Contribute](#contributing)
| [Donate](https://www.comaps.app/donate)
| [Keep Connected](https://codeberg.org/comaps#keep-connected)
# [CoMaps](https://comaps.app) Hike, Bike, Drive Offline Easy Map Navigation with Privacy
[
![GitHub Actions Workflow Android Status](https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github%2Fworkflows%2Fandroid-check.yaml?style=flat&label=Android%20Build&logo=android&logoColor=white)
](https://github.com/comaps/comaps/actions/workflows/android-check.yaml)
[
![GitHub Actions Workflow iOS Status](https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github%2Fworkflows%2Fios-check.yaml?style=flat&label=iOS%20Build&logo=apple&logoColor=white)
](https://github.com/comaps/comaps/actions/workflows/ios-check.yaml)
[
![Donate via OpenCollective](https://img.shields.io/opencollective/all/comaps?logo=opencollective&color=blue&label=Open%20Collective%20Donors)
](https://opencollective.com/comaps)
[
![Donate via Liberapay](https://img.shields.io/liberapay/patrons/CoMaps.svg?logo=liberapay&label=Liberapay%20Patrons&color=efcc00&)
](https://liberapay.com/CoMaps)
<!-- Navigation Bar -->
<p align="center">
<a href="https://codeberg.org/comaps#comaps">Project Intro</a> |
<a href="https://codeberg.org/comaps/Governance#comaps-project-governance-docs">Governance</a> |
<a href="https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md">FAQ</a> |
<a href="#contributing">Contribute</a> |
<a href="https://www.comaps.app/donate">Donate</a> |
<a href="https://codeberg.org/comaps#keep-connected">Keep Connected</a>
</p>
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org) data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
<div align="center">
<h1><a href="https://comaps.app/">CoMaps</a></h1>
<h2>Hike, Bike, Drive Offline - Easy Map Navigation with Privacy</h2>
</div>
<div align="center">
<p align="center">
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License" style="width: 90%; max-width: 150px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge&color=588157" alt="Android Build Status" style="width: 90%; max-width: 170px;"/>
</a>
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge&color=588157" alt="iOS Build Status" style="width: 90%; max-width: 145px;"/>
</a>
<a href="https://opencollective.com/comaps">
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors" style="width: 90%; max-width: 191px;"/>
</a>
<a href="https://liberapay.com/CoMaps">
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons" style="width: 90%; max-width: 160px;"/>
</a>
</p>
</div>
There are apps for Android and iOS (and ARM MacOS).
An alpha Linux / MacOS Qt desktop version, which is also suitable for Linux phones.
---
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/comaps/id6747180809)
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps.google)
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps.fdroid/)
[<img src="docs/badges/codeberg.png" alt="Codeberg" width="160">](https://codeberg.org/comaps/comaps/releases)
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
<p float="left">
**Available for:** Android, iOS, ARM macOS, and alpha Linux/macOS desktop builds (also usable on Linux phones).
<p align="center">
<a href="https://apps.apple.com/app/comaps/id6747180809">
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
</a>
<a href="https://play.google.com/store/apps/details?id=app.comaps.google">
<img src="docs/badges/google-play.png" alt="Google Play" width="160"/>
</a>
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
</a>
<a href="https://codeberg.org/comaps/comaps/releases">
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
</a>
</p>
<!-- Screenshots -->
<p align="center">
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/5.png" width="180" />
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/6.png" width="180" />
</p>
**Offline-focused**: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
---
**Respecting Privacy**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
## ⚡️ Highlights
**Simple and Polished**: Essential, easy to use features that just work.
- **Offline-first**: Navigate without a connection
- **Privacy-respecting**: No tracking, Ads or data collection
- **Lightweight**: Battery- and space-efficient
- **Simple**: Polished, user-focused interface
- **Community-built**: Free, open source, and collaborative
- **Transparent**: Open finances and governance
**Saves Your Battery and Space**: Doesnt drain your battery like other navigation apps. Compact maps save precious space on your phone.
---
**Free and Built by the Community**: People like you helped build the app by adding places to [OpenStreetMap](https://www.openstreetmap.org), testing and giving feedback on features and contributing their development skills and money.
**Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.**
### Main Features
## 🚀 Main Features
- Downloadable detailed maps with places which are not available with Google Maps
@@ -86,41 +109,46 @@ An alpha Linux / MacOS Qt desktop version, which is also suitable for Linux phon
- Android Auto and CarPlay support
*Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!*
***Freedom Is Here Navigate the world with privacy and community at the forefront.***
## Contributing
---
## 🤝 Contributing
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can help in many ways, the ability to code is not necessary.
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
> [!NOTE]
> Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
There is a dedicated Zulip chat for active contributors: [Zulip](https://comaps.zulipchat.com)
There is a dedicated Zulip chat for active contributors: [comaps.zulipchat.com](https://comaps.zulipchat.com)
---
### Feedback
## 💬 Feedback
- Rate us on [App Store](https://apps.apple.com/app/comaps/id6747180809) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google)
- Star our repos on Codeberg
- Report bugs or request features on the [issue tracker](https://codeberg.org/comaps/comaps/issues)
- **Rate us on the [App Store](https://apps.apple.com/app/comaps/id6747180809)
and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google)**.
- Star our repos on Codeberg
- Report bugs and discuss features at [the issue tracker](https://codeberg.org/comaps/comaps/issues)
---
## How is development funded?
The app is free for everyone, so we rely on donations. Please [donate](https://opencollective.com/comaps/donate) to support the CoMaps community and see this open project thrive!
## 💸 Funding
CoMaps is free. To stay that way, it relies on your support.
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
## Privacy
---
The Android application was analysed by the [Exodus platform](https://reports.exodus-privacy.eu.org/fr/reports/app.comaps.google/latest/)
## 🔒 Privacy
## License and Copyright
The Android app has been reviewed by [Exodus Privacy](https://reports.exodus-privacy.eu.org/fr/reports/app.comaps.google/latest/).
Licensed under the Apache License, Version 2.0. See
[LICENSE](LICENSE),
[NOTICE](NOTICE)
and [data/copyright.html](data/copyright.html)
for more information.
---
## ⚖️ License
Licensed under the Apache License 2.0.
See [LICENSE](LICENSE), [NOTICE](NOTICE), and [data/copyright.html](data/copyright.html).

View File

@@ -1 +1 @@
Jednoduchá navigace v mapě - Objevte více na své cestě Vyvíjeno komunitou
Jednoduchá navigace v mapě Objevte více na své cestě Vyvíjeno komunitou

View File

@@ -0,0 +1,32 @@
Aplicación de mapas gratuíta, de código aberto e xestionada pola comunidade, obtén os datos desde OpenStreetMap e co compromiso reforzado coa transparencia, privacidade e non ter o beneficio económico como obxectivo. CoMaps é unha bifurcación ou derivada de Organic Maps, que pola súa parte ven sendo unha bifurcación de Maps.ME.
Vai a <b><i>codeberg.org/comaps</i></b> e coñece as razóns da necesidade deste proxecto e as decisións tomadas.
Únete alí á comunidade e axuda a que teñamos a mellor aplicación de mapas
• Usa a aplicación e dille a outras persoas que o fas
• Informa de fallos e publica túa experiencia
• Actualiza os datos do mapa na aplicación ou no sitio web OpenStreetMap
‣ <b>Sen conexión de datos</b>: planea a viaxe e sigue a ruta sen precisar unha conexión á rede móbil, busca lugares relevantes nas andainas máis longas, etc. Todas as características da aplicación están deseñadas para funcionar sen precisar conexión de datos.
‣ <b>Respecto pola privacidade</b>: a aplicación está deseñada coa privacidade en primeiro plano - non identifica ás persoas, non te segue, non recolle información sobre ti. Non ten publicidade.
‣ <b>Simple e organizada</b>: características esenciais, fáciles de usar e que funcionan.
‣ <b>Aforra batería e espazo</b>: non esgota a batería como outras aplicacións de navegación. Os mapas compactos aforran espazo na memoria do dispositivo.
‣ <b>Gratuíta e feita pola comunidade</b>: persoas coma ti que axudan a crear a aplicación engadindo lugares en OpenStreetMap, probando novas características e dando a súa opinión, colaborando ao seu desenvolvemento con código ou financiamento.
‣ <b>Proceso de toma de decisións Aberto e Transparente para os temas económicos, Sen ánimo de lucro e totalmente de Código Aberto</b>
<b>Características principais</b>:
• Mapas detallados descargables con lugares que non están dispoñibles en Google Maps
• Modo para actividades en exterior con camiños para andainas, lugares para acampar, fontes de auga, picos dos montes, curvas de nivel, etc
• Rutas a pé e en bicicleta
• Puntos de interese como restaurantes, gasoliñeiras, hoteis, tendas, miradores e moitos máis
• Busca polo nome ou polo enderezo ou por categoría do punto de interese
• Navegación con anuncios por voz para camiñar, ir en bicicleta ou conducir
• Marca os lugares favoritos cun só toque
• Artigos da Wikipedia sen conexión
• Mapas do transporte por Metro
• Gravación das rutas
• Exportación e Importación de marcadores e rutas nos formatos KML, KMZ e GPX
• Modo escuro para a noite
• Contribúe a mellorar o mapa para todas as persoas usando o editor básico incluído
<b>Aquí es Libre</b>
Atopa o teu camiño, navega polo mundo con privacidade e coa comunidade como prioridade!

View File

@@ -0,0 +1,32 @@
Een door de community ontwikkelde, gratis en open source kaartenapp, gebaseerd op OpenStreetMap-gegevens, met een sterke focus op transparantie en privacy, en zonder winstoogmerk. CoMaps is een fork/spin-off van Organic Maps, welke is afgeleid van Maps.ME.
Meer informatie over de redenen voor het project en de richting ervan vindt u op <b><i>codeberg.org/comaps</i></b>.
Sluit je aan bij de community en help mee aan de ontwikkeling van de beste kaartenapp:
• Gebruik de app en deel je ervaringen met anderen
• Geef feedback en meld eventuele problemen
• Houd de kaarten up-to-date, zowel in de app als op de OpenStreetMap-website
‣ <b>Offline-georiënteerd</b>: Plan en navigeer je reis in het buitenland zonder internet, zoek waypoints tijdens een lange wandeling, enzovoort. Alle functies zijn ontworpen om offline te functioneren.
‣ <b>Respect voor privacy</b>: De app is ontworpen met privacy in gedachten - geen gegevensverzameling en advertentievrij.
‣ <b>Eenvoudig en verfijnd</b>: essentiële, gebruiksvriendelijke functies die gewoon werken.
‣ <b>Bespaar je batterij en opslag</b>: De app verbruikt minder batterij dan andere navigatie-apps. Compacte kaarten besparen ruimte op je telefoon.
‣ <b>Gratis en gebouwd door de community</b>: Mensen zoals jij helpen de app door plaatsen toe te voegen aan OpenStreetMap, functies te testen en feedback te geven, en hun programmervaardigheden bij te dragen of te doneren.
‣ <b>Open en transparant besluitvormings- en financieel beleid, geen winstoogmerk en volledig open source.</b>
<b>Hoofdfuncties</b>:
• Downloadbare gedetailleerde kaarten met plaatsen die niet beschikbaar zijn bij Google Maps
• Buitenmodus met gemarkeerde wandelpaden, campings, waterbronnen, toppen, hoogtelijnen, enz.
• Wandelpaden en fietspaden
• Bezienswaardigheden zoals restaurants, tankstations, hotels, winkels en nog veel meer
• Zoeken op naam of adres of op categorie
• Navigatie met spraakmeldingen voor wandelen, fietsen of autorijden
• Sla je favoriete plaatsen op met een enkele klik
• Offline Wikipedia-artikelen
• Metro laag en routebeschrijvingen
• Trackregistratie
• Exporteer en importeer bladwijzers en tracks in KML, KMZ, GPX-formaten
• Een donkere modus voor gebruik 's nachts
• Verbeter kaartgegevens voor iedereen met een eenvoudige ingebouwde editor
<b>Vrijheid is hier/b>
Ontdek je reis, navigeer over de wereld met privacy en community voorop!

View File

@@ -0,0 +1 @@
Eenvoudige kaartnavigatie - Ontdek meer van je reis - Gemaakt door de community

View File

@@ -1,55 +1,32 @@
Um aplicativo de mapas gratuito e de código aberto, liderado pela comunidade, baseado em dados do OpenStreetMap e reforçado pelo compromisso com a transparência, privacidade e sem fins lucrativos. O CoMaps é um fork/spin-off do Organic Maps, que por sua vez é um fork do Maps.ME.
Leia mais sobre os motivos do projeto e sua direção em <b><i>codeberg.org/comaps</i></b>.
Junte-se à comunidade e ajude a criar o melhor aplicativo de mapas.
• Use o aplicativo e divulgue-o.
• Envie feedback e relate problemas.
• Atualize os dados do mapa no aplicativo ou no site do OpenStreetMap.
‣ <b>Foco offline</b>: Planeje e navegue em sua viagem ao exterior sem a necessidade de sinal de celular, pesquise pontos de referência durante uma caminhada distante, etc. Todas as funções do aplicativo foram projetadas para funcionar offline.
‣ <b>Respeitando a privacidade</b>: O aplicativo foi projetado com a privacidade em mente - não identifica pessoas, não rastreia e não coleta informações pessoais. Sem anúncios.
‣ <b>Simples e sofisticado</b>: recursos essenciais e fáceis de usar que simplesmente funcionam.
‣ <b>Economiza bateria e espaço</b>: Não consome muita bateria como outros aplicativos de navegação. Mapas compactos economizam espaço precioso no seu celular.
‣ <b>Gratuito e desenvolvido pela comunidade</b>: Pessoas como você ajudaram a desenvolver o aplicativo adicionando lugares ao OpenStreetMap, testando e dando feedback sobre os recursos e contribuindo com suas habilidades de desenvolvimento e dinheiro.
‣ <b>Tomada de decisões e finanças abertas e transparentes, sem fins lucrativos e totalmente de código aberto.</b>
<b>Principais recursos</b>:
• Mapas detalhados para download com locais não disponíveis no Google Maps
• Modo ao ar livre com trilhas em destaque, acampamentos, fontes de água, picos, curvas de nível, etc.
• Trilhas para caminhada e ciclovias
• Pontos de interesse como restaurantes, postos de gasolina, hotéis, lojas, pontos turísticos e muito mais
• Pesquise por nome, endereço ou por categoria de ponto de interesse
• Navegação com anúncios de voz para caminhadas, ciclismo ou direção
• Marque seus lugares favoritos com um único toque
• Artigos offline da Wikipédia
• Camada e direções de transporte público do metrô
• Gravação de trilhas
• Exporte e importe favoritos e trilhas nos formatos KML, KMZ e GPX
• Um modo escuro para usar à noite
• Aprimore os dados do mapa para todos usando um editor básico integrado
<b>A Liberdade Chegou</b>
Descubra sua jornada, navegue pelo mundo com privacidade e comunidade em primeiro lugar!

View File

@@ -1,7 +1,6 @@
Бесплатное и свободное картографическое приложение, основанное на данных OpenStreetMap и подкреплённое обязательствами по прозрачности, конфиденциальности и некоммерческой направленности. CoMaps — это ответвление от Organic Maps, которое, в свою очередь, является ответвлением от Maps.ME.
Подробнее о причинах проекта и его направлении читайте на <a href="https://codeberg.org/comaps">сайте</a>.
Подробнее о причинах проекта и его направлении читайте на сайте <b><i> codeberg.org/comaps </i><b>.
Присоединяйтесь к сообществу и помогите создать лучшее приложение с картами
• Используйте приложение и распространяйте информацию о нём
• Оставляйте отзывы и сообщайте о проблемах

View File

@@ -1 +1 @@
Простая навигация по карте — Откройте больше за ваше путешествие. От сообщества
Простая навигация по карте — Откройте больше за ваше путешествие От сообщества

View File

@@ -1,18 +1,17 @@
Бесплатна апликација отвореног кода коју је обављала заједница и заснива се на ОпенСтреетМап-у подацима, усмерени транспарентност, приватност и непрофитни. ЦОМПАПС је Апликације за органске карте виљушка, које је пак форк мапс.ме.
Бесплатна апликација отвореног кода коју је обављала заједница и заснива се на ОpenStreetMap-у подацима, усмерени транспарентност, приватност и непрофитни. CoMaps је Апликације за органске карте виљушка, које је пак форк Maps.ME.
Прочитајте о разлозима пројекта и његовог правца на <b><i>codeberg.org/comaps</i></b>
Придружите се отвореној заједници и помозите да направимо најбољу апликацију за мапе
• Користите апликацију и проширите глас о томе
• Дајте повратне информације и пријавите проблеме
• Ажурирајте податке на мапи у апликацији или на веб локацији OpenStreetMap
‣<b>фокусирано на офлајн Вар </b>: Планирајте и управљајте путовањем у иностранству без потребе за мобилним услугама, тражите путне тачке док је на даљинском покрету, итд.
Све апликације су дизајниране за рад ван мреже.
‣<b> Поштовање приватности </b>: Апликација је осмишљена задржавања у уму приватност - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
‣ <b> фокусирано на офлајн Вар </b>: Планирајте и управљајте путовањем у иностранству без потребе за мобилним услугама, тражите путне тачке док је на даљинском покрету, итд. Све апликације су дизајниране за рад ван мреже.
<b> Поштовање приватности </b>: Апликација је осмишљена задржавања у уму приватност - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
‣ <b> Једноставно и елегантно </b>: Апликација је тривијална за употребу и једноставно функционише.
‣ <b> Чува вашу батерију и простор </b>: не конзумира батерију као остале навигационе апликације. Компактне картице сачувајте драгоцени простор на вашем телефону.
‣ <b> Отворено и направио је заједницу </b>: Људи попут вас је помогли да додају апликацију додавањем локација на OpenStreetMap-у, тестирању и давање повратних информација о апликацији и доприносе вашим развојним вештинама и новцу.
‣ <b> Отворено и транспарентно доношење одлука и употреба финансија, непрофитна и потпуно отворена извора. </ Б>
‣ <b> Отворено и транспарентно доношење одлука и употреба финансија, непрофитна и потпуно отворена извора. </b>
<b> Главне карактеристике </b>:
• Преузмите детаљне мапе са локацијама које нису доступне са Гоогле мапама

View File

@@ -1 +1 @@
Kolayca gezinin - Seyahat etmenin ötesini bulun - Gönüllüler tarafından yapıldı
Kullanımı kolay harita - Yolculuğun ötesine geçin - topluluğun katkılarıyla

View File

@@ -1 +1 @@
CoMaps - İnternetsiz Seyahat Edin
CoMaps - Gizlilikle Yürüyün, Sürün, Gezin

View File

@@ -1 +1 @@
version: 2025.06.30-22-FDroid+25063022
version: 2025.03.02-7-FDroid+25030207

View File

@@ -1 +1 @@
Jednoduchá navigace v mapě - Objevte více na své cestě Vyvíjeno komunitou
Jednoduchá navigace v mapě Objevte více na své cestě Vyvíjeno komunitou

View File

@@ -0,0 +1 @@
Mapa nabigazio erraza - Ezagutu gehiago zure bidaiaz - Komunitatean egina

View File

@@ -0,0 +1,35 @@
Aplicación de mapas gratuíta, de código aberto e xestionada pola comunidade, obtén os datos desde OpenStreetMap e co compromiso reforzado coa transparencia, privacidade e non ter o beneficio económico como obxectivo.
Únete á comunidade e axuda a que teñamos a mellor aplicación de mapas
• Usa a aplicación e dille a outras persoas que o fas
• Informa de fallos e publica túa experiencia
• Actualiza os datos do mapa na aplicación ou no sitio web OpenStreetMap
<i>Os teus comentarios e recensións de 5 estrelas son a mellor axuda para nós!
‣ <b>Sen conexión de datos</b>: planea a viaxe e sigue a ruta sen precisar unha conexión á rede móbil, busca lugares relevantes nas andainas máis longas, etc. Todas as características da aplicación están deseñadas para funcionar sen precisar conexión de datos.
‣ <b>Respecto pola privacidade</b>: a aplicación está deseñada coa privacidade en primeiro plano - non identifica ás persoas, non te segue, non recolle información sobre ti. Non ten publicidade.
‣ <b>Simple e organizada</b>: características esenciais, fáciles de usar e que funcionan.
‣ <b>Aforra batería e espazo</b>: non esgota a batería como outras aplicacións de navegación. Os mapas compactos aforran espazo na memoria do dispositivo.
‣ <b>Gratuíta e feita pola comunidade</b>: persoas coma ti que axudan a crear a aplicación engadindo lugares en OpenStreetMap, probando novas características e dando a súa opinión, colaborando ao seu desenvolvemento con código ou financiamento.
‣ <b>Proceso de toma de decisións Aberto e Transparente para os temas económicos, Sen ánimo de lucro e totalmente de Código Aberto</b>
<b>Características principais</b>:
• Mapas detallados descargables con lugares que non están dispoñibles en Google Maps
• Modo para actividades en exterior con camiños para andainas, lugares para acampar, fontes de auga, picos dos montes, curvas de nivel, etc
• Rutas a pé e en bicicleta
• Puntos de interese como restaurantes, gasoliñeiras, hoteis, tendas, miradores e moitos máis
• Busca polo nome ou polo enderezo ou por categoría do punto de interese
• Navegación con anuncios por voz para camiñar, ir en bicicleta ou conducir
• Marca os lugares favoritos cun só toque
• Artigos da Wikipedia sen conexión
• Mapas do transporte por Metro
• Gravación das rutas
• Exportación e Importación de marcadores e rutas nos formatos KML, KMZ e GPX
• Modo escuro para a noite
• Contribúe a mellorar o mapa para todas as persoas usando o editor básico incluído
Por favor informa de calquera incidencia que xurda así como suxire novas funcións na nosa comunidade en <b><i>comaps.app</i></b>
<b>Aquí es Libre</b>
Atopa o teu camiño, navega polo mundo con privacidade e coa comunidade como prioridade!

View File

@@ -0,0 +1 @@
CoMaps -Navega con Privacidade

View File

@@ -0,0 +1,36 @@
Een door de community ontwikkelde, gratis en open source kaartenapp, gebaseerd op OpenStreetMap-gegevens, met een sterke focus op transparantie en privacy, en zonder winstoogmerk.
Sluit je aan bij de community en help mee aan de ontwikkeling van de beste kaartenapp:
• Gebruik de app en deel je ervaringen met anderen
• Geef feedback en meld eventuele problemen
• Houd de kaarten up-to-date, zowel in de app als op de OpenStreetMap-website
<i>Jouw feedback en 5-sterrenbeoordelingen zijn de beste steun voor ons!!</i>
‣ <b>Eenvoudig en verfijnd</b>: essentiële, gebruiksvriendelijke functies die gewoon werken.
‣ <b>Offline-georiënteerd</b>: Plan en navigeer je reis in het buitenland zonder internet, zoek waypoints tijdens een lange wandeling, enzovoort. Alle functies zijn ontworpen om offline te functioneren.
‣ <b>Respect voor privacy</b>: De app is ontworpen met privacy in gedachten - geen gegevensverzameling en advertentievrij.
‣ <b>Bespaar je batterij en opslag</b>: De app verbruikt minder batterij dan andere navigatie-apps. Compacte kaarten besparen ruimte op je telefoon.
‣ <b>Gratis en gebouwd door de community</b>: Mensen zoals jij helpen de app door plaatsen toe te voegen aan OpenStreetMap, functies te testen en feedback te geven, en hun programmervaardigheden bij te dragen of te doneren.
‣ <b>Open en transparant besluitvormings- en financieel beleid, geen winstoogmerk en volledig open source.</b>
<b>Hoofdfuncties</b>:
• Downloadbare gedetailleerde kaarten met plaatsen die niet beschikbaar zijn bij Google Maps
• Buitenmodus met gemarkeerde wandelpaden, campings, waterbronnen, toppen, hoogtelijnen, enz.
• Wandelpaden en fietspaden
• Bezienswaardigheden zoals restaurants, tankstations, hotels, winkels en nog veel meer
• Zoeken op naam of adres of op categorie
• Navigatie met spraakmeldingen voor wandelen, fietsen of autorijden
• Sla je favoriete plaatsen op met een enkele klik
• Offline Wikipedia-artikelen
• Metro laag en routebeschrijvingen
• Trackregistratie
• Exporteer en importeer bladwijzers en tracks in KML, KMZ, GPX-formaten
• Een donkere modus voor gebruik 's nachts
• Verbeter kaartgegevens voor iedereen met een eenvoudige ingebouwde editor
• Ondersteuning voor Android Auto
Meld app-problemen, stel nieuwe functies voor en sluit je aan bij onze community op de <b><i>comaps.app</i></b> website.
<b>Vrijheid is hier/b>
Ontdek je reis, navigeer over de wereld met privacy en community voorop!

View File

@@ -0,0 +1 @@
CoMaps - Viaje com Privacidade

View File

@@ -1 +1 @@
Простая навигация по карте — Откройте больше за ваше путешествие. От сообщества
Простая навигация по карте — Откройте больше за ваше путешествие От сообщества

View File

@@ -1,36 +1,36 @@
OpenStreetMap verilerine dayanan ve şeffaflık, gizlilik ve kar amacı gütmeyen olma taahhüdüyle güçlendirilen, topluluk tarafından yönetilen ücretsiz ve açık kaynaklı bir harita uygulaması.
OpenStreetMap verilerine dayanan, kâr amacı gütmeyen, gizlilik ve şeffaflık odaklı, topluluk tarafından yönetilen, özgür ve açık kaynak kodlu bir harita uygulaması.
Topluluğa katılın ve en iyi harita uygulamasını oluşturmaya yardımcı olun
• Uygulamayı kullanın ve bunu herkese duyurun
• Geri bildirimde bulunun ve sorunları bildirin
• Harita verilerini uygulamada veya OpenStreetMap web sitesinde güncelleyin
Topluluğa katılın ve en iyi harita uygulamasını oluşturmamıza yardım edin
• Uygulamayı kullanın ve çevrenize yayın
• Geri bildirim verin ve sorunları bildirin
• Harita verilerini uygulamadan veya OpenStreetMap üzerinden düzenleyin
<i>Geri bildirimleriniz ve 5 yıldızlı yorumlarınız bizim için en iyi destektir!</i>
‣ <b>Basit ve Cilalı</b>: sadece işe yarayan, kullanımı kolay temel özellikler.
‣ <b>Çevrim dışı odaklı</b>: Cep telefonu hizmetine ihtiyaç duymadan yurtdışı seyahatinizi planlayın ve gezinin, uzun bir yürüyüş sırasında rota noktalarını arayın, vb. Tüm uygulama işlevleri çevrimdışı çalışmak üzere tasarlanmıştır.
‣ <b>Gizliliğe Saygı</b>: Uygulama gizlilik düşünülerek tasarlanmıştır; kişileri tanımlamaz, takip etmez ve kişisel bilgi toplamaz. Reklamsız.
‣ <b>Pilinizden ve Alanınızdan Tasarruf Edin</b>: Diğer navigasyon uygulamaları gibi pilinizi tüketmez. Kompakt haritalar telefonunuzda değerli alan tasarrufu sağlar.
‣ <b>Ücretsiz ve Topluluk Tarafından Oluşturuldu</b>: Sizin gibi insanlar, OpenStreetMap'e yerler ekleyerek, özellikleri test ederek ve geri bildirimde bulunarak ve geliştirme becerilerinizi ve paranızı katkıda bulunarak uygulamanın oluşturulmasına yardımcı oldunuz..
‣ <b>Açık ve Şeffaf Karar Alma ve Finansman, Kar Amacı Gütmeyen ve Tamamen Açık Kaynak.</b>
‣ <b>Basit ve Temiz</b>: Sadece temel, kullanımı basit, işe yarayan özellikler.
‣ <b>Çevrimdışı Odaklı</b>: Mobil veriye ihtiyaç duymadan yurt dışı seyahatinizi planlayın ve gezin, uzun bir yürüyüş sırasında rotanızdaki noktaları bulun ve daha fazlası . Tüm özellikler çevrimdışı çalışmak üzere tasarlanmıştır.
‣ <b>Gizliliğe Saygılı</b>: Uygulama gizliliğe saygılı olarak tasarlanmıştır. Kullanıcı profilinizi çıkarmaz, sizi takip etmez ve kişisel bilgi toplamaz. Üstelik tamamen reklamsızdır.
‣ <b>Pil ve Depolamanızdan Tasarruf Eder</b>: Diğer navigasyon uygulamaları gibi pilinizi sömürmez. Compact maps değerli depolama alanınızdan tasarruf eder.
‣ <b>Ücretsizdir ve Gücünü Topluluktan Alır</b>: Sizin gibi insanlar OpenStreetMap'e yer ekleyerek, yeni özellikleri test ederek, geri bildirimde bulunarak, program geliştirme becerileri ve bağışlarla katkıda bulunarak uygulamanın oluşturulmasına yardımcı oldu.
‣ <b>Açık ve Şeffaf Şekilde Yürütülen Karar Alma ve Fonlama Süreçleri, Kâr Amacı Gütmez ve Tamamen Açık Kaynaklı.</b>
<b>Ana Özellikleri</b>:
• Google Haritalar'da bulunmayan yerleri içeren indirilebilir detaylı haritalar
Vurgulanan yürüyüş parkurları, kamp alanları, su kaynakları, zirveler, kontur çizgileriyleık hava modu gibi
• Yürüyüş yolları ve bisiklet yolları
• Restoranlar, benzin istasyonları, oteller, mağazalar, turistik yerler gibi ilgi çekici noktalar ve daha fazlası
• İsme veya adrese göre veya ilgi noktası kategorisine göre arama yapın
Yürüyerek, bisikletle veya araçla seyahat edenler için sesli duyurularla navigasyon
Favori yerlerinizi tek bir dokunuşla yer imlerine ekleyin
• Çevrim dışı Wikipedia makaleleri
• Metro geçiş katmanı ve yönleri
Rota kaydı
• Yer imlerini ve parkurları KML, KMZ, GPX formatlarında dışa ve içe aktarın
• Geceleri kullanmak için karanlık mod
Temel bir yerleşik düzenleyici kullanarak herkes için harita verilerini iyileştirin
<b>Ana Özellikler</b>:
• Google Haritalar'da bulunmayan yerleri içeren, çevrimdışı detaylı haritalar
Yürüyüş parkurları, kamp alanları, su kaynakları, zirveler, kontur çizgileri vb. nesneleri vurgulayanık hava modu
• Yürüyüş ve bisiklet yolları
• Restoran, benzin istasyonu, otel, mağaza, görülecek yerler ve çok daha fazla harita noktası
• İsim, adres veya harita noktası kategorisine göre arama yapın
Sesli yönlendirmeye sahip yürüyüş, bisiklet ve araç navigasyonu
En sevdiğiniz mekanları tek dokunuşla yer imlerinize kaydedin
• Çevrimdışı Vikipedi makaleleri
• Metro ulaşım katmanı ve rotaları
GPS izinizi kaydedin
• Yer imi ve GPS izlerinizi KML, KMZ ve GPX biçimlerinde dışa veya içe aktarın
• Gece boyunca kullanmanızı sağlayacak koyu mod
Uygulama içi düzenleyiciyi kullanarak harita verilerini herkes için daha iyi hale getirin
• Android Auto desteği
Lütfen uygulama sorunlarını bildirin, fikir önerin ve <b><i>comaps.app</i></b> web sitesinde topluluğumuza katılın.
Lütfen <b><i>comaps.app</i></b> adresinden uygulama sorunlarını bildirin, önerilerinizi paylaşın ve topluluğumuza katılın.
<b>Özgürlük Burada</b>
Yolculuğunuzu keşfedin, gizlilik ve topluluk ön planda tutularak dünyayı keşfedin!
<b>Özgürlük Buradan Başlıyor</b>
Yolculuğunuzun ötesine geçin, gizlilik ve topluluğu ön planda tutarak dünyada gezinin!

View File

@@ -1 +1 @@
Kolayca gezinin - Seyahat etmenin ötesini bulun - Gönüllüler tarafından yapıldı
Kullanımı kolay harita - Yolculuğun ötesine geçin - topluluğun katkılarıyla

View File

@@ -20,6 +20,9 @@
<uses-feature
android:name="android.hardware.location.gps"
android:required="false"/>
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="22" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

View File

@@ -171,7 +171,7 @@ extern "C"
curFile.GetRemoteSize(),
std::bind(&DownloadFileFinished, ptr, _1),
std::bind(&DownloadFileProgress, ptr, _1),
512 * 1024, false));
0, false));
});
return ERR_FILE_IN_PROGRESS;

View File

@@ -1804,74 +1804,4 @@ Java_app_organicmaps_Framework_nativeMemoryWarning(JNIEnv *, jclass)
return frm()->MemoryWarning();
}
JNIEXPORT jboolean JNICALL
Java_app_organicmaps_Framework_nativeShouldShowProducts(JNIEnv * env, jclass)
{
return frm()->ShouldShowProducts();
}
JNIEXPORT jobject JNICALL
Java_app_organicmaps_Framework_nativeGetProductsConfiguration(JNIEnv * env, jclass)
{
auto config = frm()->GetProductsConfiguration();
if (!config) return nullptr;
static jclass const productClass = jni::GetGlobalClassRef(
env,
"app/organicmaps/products/Product"
);
static jmethodID const productConstructor = jni::GetConstructorID(
env,
productClass,
"(Ljava/lang/String;Ljava/lang/String;)V"
);
jobjectArray products = jni::ToJavaArray(
env,
productClass,
config->GetProducts(),
[](JNIEnv * env, products::ProductsConfig::Product const & product)
{
jni::TScopedLocalRef const title(env, jni::ToJavaString(env, product.GetTitle()));
jni::TScopedLocalRef const link(env, jni::ToJavaString(env, product.GetLink()));
return env->NewObject(
productClass,
productConstructor,
title.get(),
link.get()
);
});
static jclass const productsConfigClass = jni::GetGlobalClassRef(
env,
"app/organicmaps/products/ProductsConfig"
);
static jmethodID const productsConfigConstructor = jni::GetConstructorID(
env,
productsConfigClass,
"(Ljava/lang/String;[Lapp/organicmaps/products/Product;)V"
);
jni::TScopedLocalRef const placePagePrompt(env, jni::ToJavaString(env, config->GetPlacePagePrompt()));
return env->NewObject(productsConfigClass, productsConfigConstructor, placePagePrompt.get(), products);
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeDidCloseProductsPopup(JNIEnv * env, jclass, jstring reason)
{
frm()->DidCloseProductsPopup(frm()->FromString(jni::ToNativeString(env, reason)));
}
JNIEXPORT void JNICALL
Java_app_organicmaps_Framework_nativeDidSelectProduct(JNIEnv * env, jclass, jstring title, jstring link)
{
products::ProductsConfig::Product product(
jni::ToNativeString(env, title),
jni::ToNativeString(env, link)
);
frm()->DidSelectProduct(product);
}
} // extern "C"

View File

@@ -321,4 +321,30 @@ Java_app_organicmaps_editor_OpeningHours_nativeIsTimetableStringValid(JNIEnv * e
{
return OpeningHours(jni::ToNativeString(env, jSource)).IsValid();
}
JNIEXPORT jobject JNICALL
Java_app_organicmaps_editor_OpeningHours_nativeCurrentState(JNIEnv * env, jclass clazz, jobjectArray jTts)
{
TimeTableSet tts = NativeTimetableSet(env, jTts);
time_t const now = time(nullptr);
/// @todo We should check closed/open time for specific feature's timezone.
OpeningHours::InfoT ohInfo = MakeOpeningHours(tts).GetInfo(now);
jclass ohStateClass = jni::GetGlobalClassRef(env, "app/organicmaps/editor/OhState");
jclass ruleStateClass = jni::GetGlobalClassRef(env, "app/organicmaps/editor/OhState$State");
static const std::unordered_map<RuleState, const char*> ruleState = {
{RuleState::Open, "Open"},
{RuleState::Closed, "Closed"},
{RuleState::Unknown, "Unknown"}
};
jfieldID stateField = env->GetStaticFieldID(ruleStateClass, ruleState.at(ohInfo.state), "Lapp/organicmaps/editor/OhState$State;");
jobject stateObj = env->GetStaticObjectField(ruleStateClass, stateField);
jmethodID constructor = env->GetMethodID(ohStateClass, "<init>", "(Lapp/organicmaps/editor/OhState$State;JJ)V");
jobject javaOhState = env->NewObject(ohStateClass, constructor, stateObj, (jlong) ohInfo.nextTimeOpen, (jlong) ohInfo.nextTimeClosed);
return javaOhState;
}
} // extern "C"

View File

@@ -17,17 +17,9 @@ using namespace jni;
bool LoadOsmUserPreferences(std::string const & oauthToken, UserPreferences & outPrefs)
{
try
{
ServerApi06 const api(OsmOAuth::ServerAuth(oauthToken));
outPrefs = api.GetUserPreferences();
return true;
}
catch (std::exception const & ex)
{
LOG(LWARNING, ("Can't load user preferences from server: ", ex.what()));
}
return false;
ServerApi06 const api(OsmOAuth::ServerAuth(oauthToken));
outPrefs = api.GetUserPreferences();
return (outPrefs.m_id != 0);
}
} // namespace

View File

@@ -13,7 +13,6 @@ import app.organicmaps.api.RequestType;
import app.organicmaps.bookmarks.data.DistanceAndAzimut;
import app.organicmaps.bookmarks.data.FeatureId;
import app.organicmaps.bookmarks.data.MapObject;
import app.organicmaps.products.ProductsConfig;
import app.organicmaps.sdk.routing.JunctionInfo;
import app.organicmaps.sdk.routing.RouteMarkData;
import app.organicmaps.sdk.routing.RouteMarkType;
@@ -347,15 +346,5 @@ public class Framework
public static native boolean nativeHasPlacePageInfo();
public static native void nativeMemoryWarning();
public static native boolean nativeShouldShowProducts();
@Nullable
public static native ProductsConfig nativeGetProductsConfiguration();
public static native void nativeDidCloseProductsPopup(String reason);
public static native void nativeDidSelectProduct(String title, String link);
public static native void nativeSaveRoute();
}

View File

@@ -41,9 +41,9 @@ public class MapFragment extends BaseMwmFragment implements View.OnTouchListener
mMap.updateMyPositionRoutingOffset(offsetY);
}
public void destroySurface()
public void destroySurface(boolean activityIsChangingConfigurations)
{
mMap.onSurfaceDestroyed(requireActivity().isChangingConfigurations(), isAdded());
mMap.onSurfaceDestroyed(activityIsChangingConfigurations, isAdded());
}
public boolean isContextCreated()

View File

@@ -1303,7 +1303,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
{
// Explicitly destroy surface before activity recreation.
if (mMapFragment != null)
mMapFragment.destroySurface();
mMapFragment.destroySurface(true);
super.recreate();
}

View File

@@ -8,6 +8,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
@@ -16,6 +17,10 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.OnApplyWindowInsetsListener;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import app.organicmaps.display.DisplayManager;
import app.organicmaps.downloader.DownloaderActivity;
@@ -69,6 +74,17 @@ public class SplashActivity extends AppCompatActivity
UiThread.cancelDelayedTasks(mInitCoreDelayedTask);
setContentView(R.layout.activity_splash);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.root_view), new OnApplyWindowInsetsListener() {
@NonNull
@Override
public WindowInsetsCompat onApplyWindowInsets(@NonNull View v, @NonNull WindowInsetsCompat insets)
{
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(0, 0, 0, systemBars.bottom);
return insets;
}
});
mPermissionRequest = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(),
result -> Config.setLocationRequested());
mApiRequest = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {

View File

@@ -11,7 +11,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -172,7 +171,7 @@ public class BookmarkCategorySettingsFragment extends BaseMwmToolbarFragment
return !TextUtils.equals(mCategory.getDescription(), categoryDesc);
}
private void clearAndFocus(TextView textView)
private void clearAndFocus(TextInputEditText textView)
{
textView.getEditableText().clear();
textView.requestFocus();

View File

@@ -4,12 +4,13 @@ import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.BookmarkCategory;
import app.organicmaps.bookmarks.data.BookmarkInfo;
@@ -439,14 +440,14 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
holder = bookmarkHolder;
break;
case TYPE_SECTION:
TextView tv = (TextView) inflater.inflate(R.layout.item_category_title, parent, false);
MaterialTextView tv = (MaterialTextView) inflater.inflate(R.layout.item_category_title, parent, false);
holder = new Holders.SectionViewHolder(tv);
break;
case TYPE_DESC:
View desc = inflater.inflate(R.layout.item_category_description, parent, false);
TextView moreBtn = desc.findViewById(R.id.more_btn);
TextView text = desc.findViewById(R.id.text);
TextView title = desc.findViewById(R.id.title);
MaterialTextView moreBtn = desc.findViewById(R.id.more_btn);
MaterialTextView text = desc.findViewById(R.id.text);
MaterialTextView title = desc.findViewById(R.id.title);
setMoreButtonVisibility(text, moreBtn);
holder = new Holders.DescriptionViewHolder(desc, mSectionsDataSource.getCategory());
text.setOnClickListener(v -> onMoreButtonClicked(text, moreBtn));
@@ -537,12 +538,12 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
}
}
private void setMoreButtonVisibility(TextView text, TextView moreBtn)
private void setMoreButtonVisibility(MaterialTextView text, MaterialTextView moreBtn)
{
text.post(() -> setShortModeDescription(text, moreBtn));
}
private void onMoreButtonClicked(TextView textView, TextView moreBtn)
private void onMoreButtonClicked(MaterialTextView textView, MaterialTextView moreBtn)
{
if (isShortModeDescription(textView))
{
@@ -554,18 +555,18 @@ public class BookmarkListAdapter extends RecyclerView.Adapter<Holders.BaseBookma
}
}
private boolean isShortModeDescription(TextView text)
private boolean isShortModeDescription(MaterialTextView text)
{
return text.getMaxLines() == MAX_VISIBLE_LINES;
}
private void setExpandedModeDescription(TextView textView, TextView moreBtn)
private void setExpandedModeDescription(MaterialTextView textView, MaterialTextView moreBtn)
{
textView.setMaxLines(Integer.MAX_VALUE);
moreBtn.setVisibility(View.GONE);
}
private void setShortModeDescription(TextView textView, TextView moreBtn)
private void setShortModeDescription(MaterialTextView textView, MaterialTextView moreBtn)
{
textView.setMaxLines(MAX_VISIBLE_LINES);

View File

@@ -11,7 +11,6 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
@@ -53,6 +52,7 @@ import app.organicmaps.widget.placepage.BookmarkColorDialogFragment;
import app.organicmaps.widget.placepage.EditBookmarkFragment;
import app.organicmaps.widget.recycler.DividerItemDecorationWithPadding;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
import com.google.android.material.imageview.ShapeableImageView;
import java.util.ArrayList;
import java.util.List;
@@ -599,7 +599,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
i.putExtra(MwmActivity.EXTRA_BOOKMARK_ID, bookmark.getBookmarkId());
}
private void showColorDialog(ImageView v, int position)
private void showColorDialog(ShapeableImageView v, int position)
{
BookmarkListAdapter adapter = getBookmarkListAdapter();

View File

@@ -4,12 +4,13 @@ import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.radiobutton.MaterialRadioButton;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.BookmarkCategory;
@@ -101,8 +102,8 @@ public class ChooseBookmarkCategoryAdapter extends BaseBookmarkCategoryAdapter<C
static class SingleChoiceHolder extends RecyclerView.ViewHolder
{
TextView name;
RadioButton checked;
MaterialTextView name;
MaterialRadioButton checked;
public SingleChoiceHolder(View convertView)
{

View File

@@ -6,15 +6,16 @@ import android.location.Location;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.PluralsRes;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import com.google.android.material.checkbox.MaterialCheckBox;
import app.organicmaps.R;
import app.organicmaps.adapter.OnItemClickListener;
import app.organicmaps.bookmarks.data.BookmarkCategory;
@@ -34,9 +35,9 @@ public class Holders
public static class GeneralViewHolder extends RecyclerView.ViewHolder
{
@NonNull
private final TextView mText;
private final MaterialTextView mText;
@NonNull
private final ImageView mImage;
private final ShapeableImageView mImage;
GeneralViewHolder(@NonNull View itemView)
{
@@ -46,13 +47,13 @@ public class Holders
}
@NonNull
public TextView getText()
public MaterialTextView getText()
{
return mText;
}
@NonNull
public ImageView getImage()
public ShapeableImageView getImage()
{
return mImage;
}
@@ -61,9 +62,9 @@ public class Holders
public static class HeaderViewHolder extends RecyclerView.ViewHolder
{
@NonNull
private final TextView mButton;
private final MaterialTextView mButton;
@NonNull
private final TextView mText;
private final MaterialTextView mText;
HeaderViewHolder(@NonNull View itemView)
@@ -74,13 +75,13 @@ public class Holders
}
@NonNull
public TextView getText()
public MaterialTextView getText()
{
return mText;
}
@NonNull
public TextView getButton()
public MaterialTextView getButton()
{
return mButton;
}
@@ -168,7 +169,7 @@ public class Holders
protected BookmarkCategory mEntity;
@NonNull
protected final TextView mSize;
protected final MaterialTextView mSize;
public CategoryViewHolderBase(@NonNull View root)
{
@@ -229,9 +230,9 @@ public class Holders
@NonNull
private final View mView;
@NonNull
private final TextView mName;
private final MaterialTextView mName;
@NonNull
private final CheckBox mVisibilityMarker;
private final MaterialCheckBox mVisibilityMarker;
CollectionViewHolder(@NonNull View root)
{
@@ -268,11 +269,11 @@ public class Holders
static class CategoryViewHolder extends CategoryViewHolderBase
{
@NonNull
private final TextView mName;
private final MaterialTextView mName;
@NonNull
CheckBox mVisibilityMarker;
MaterialCheckBox mVisibilityMarker;
@NonNull
ImageView mMoreButton;
ShapeableImageView mMoreButton;
CategoryViewHolder(@NonNull View root)
{
@@ -338,11 +339,11 @@ public class Holders
static class BookmarkViewHolder extends BaseBookmarkHolder
{
@NonNull
private final ImageView mIcon;
private final ShapeableImageView mIcon;
@NonNull
private final TextView mName;
private final MaterialTextView mName;
@NonNull
private final TextView mDistance;
private final MaterialTextView mDistance;
BookmarkViewHolder(@NonNull View itemView)
{
@@ -384,12 +385,12 @@ public class Holders
static class TrackViewHolder extends BaseBookmarkHolder
{
@NonNull
private final ImageView mIcon;
private final ShapeableImageView mIcon;
@NonNull
private final TextView mName;
private final MaterialTextView mName;
@NonNull
private final TextView mDistance;
private final ImageView mMoreButton;
private final MaterialTextView mDistance;
private final ShapeableImageView mMoreButton;
TrackViewHolder(@NonNull View itemView)
{
@@ -424,16 +425,16 @@ public class Holders
public void setTrackIconClickListener(IconClickListener listener)
{
mIcon.setOnClickListener(v -> listener.onItemClick((ImageView) v, getBindingAdapterPosition()));
mIcon.setOnClickListener(v -> listener.onItemClick((ShapeableImageView) v, getBindingAdapterPosition()));
}
}
public static class SectionViewHolder extends BaseBookmarkHolder
{
@NonNull
private final TextView mView;
private final MaterialTextView mView;
SectionViewHolder(@NonNull TextView itemView)
SectionViewHolder(@NonNull MaterialTextView itemView)
{
super(itemView);
mView = itemView;
@@ -452,9 +453,9 @@ public class Holders
static final float SPACING_MULTIPLE = 1.0f;
static final float SPACING_ADD = 0.0f;
@NonNull
private final TextView mTitle;
private final MaterialTextView mTitle;
@NonNull
private final TextView mDescText;
private final MaterialTextView mDescText;
DescriptionViewHolder(@NonNull View itemView, @NonNull BookmarkCategory category)
{

View File

@@ -6,7 +6,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import com.google.android.material.imageview.ShapeableImageView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.Icon;
@@ -61,7 +62,7 @@ public class IconsAdapter extends ArrayAdapter<Icon>
private static class SpinnerViewHolder
{
final ImageView icon;
final ShapeableImageView icon;
SpinnerViewHolder(View convertView)
{

View File

@@ -1,8 +1,8 @@
package app.organicmaps.bookmarks.data;
import android.widget.ImageView;
import com.google.android.material.imageview.ShapeableImageView;
public interface IconClickListener
{
void onItemClick(ImageView v, int position);
void onItemClick(ShapeableImageView v, int position);
}

View File

@@ -1,8 +1,8 @@
package app.organicmaps.downloader;
import android.view.View;
import android.widget.Button;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import app.organicmaps.R;
import app.organicmaps.util.StringUtils;
@@ -14,7 +14,7 @@ class BottomPanel
{
private final DownloaderFragment mFragment;
private final FloatingActionButton mFab;
private final Button mButton;
private final MaterialButton mButton;
private final View.OnClickListener mDownloadListener = new View.OnClickListener()
{
@@ -45,6 +45,15 @@ class BottomPanel
}
};
private final View.OnClickListener mRetryListener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
MapManager.warn3gAndRetry(mFragment.requireActivity(), mFragment.getCurrentRoot(), null);
}
};
BottomPanel(DownloaderFragment fragment, View frame)
{
mFragment = fragment;
@@ -72,6 +81,12 @@ class BottomPanel
mButton.setOnClickListener(mDownloadListener);
}
private void setRetryFailedStates()
{
mButton.setText(R.string.downloader_retry);
mButton.setOnClickListener(mRetryListener);
}
private void setCancelState()
{
mButton.setText(R.string.downloader_cancel_all);
@@ -101,7 +116,7 @@ class BottomPanel
} // Special case for "Countries" node when no maps currently downloaded.
case STATUS_DOWNLOADABLE, STATUS_DONE, STATUS_PARTLY -> show = false;
case STATUS_PROGRESS, STATUS_APPLYING, STATUS_ENQUEUED -> setCancelState();
case STATUS_FAILED -> setDownloadAllState();
case STATUS_FAILED -> setRetryFailedStates();
default -> throw new IllegalArgumentException("Inappropriate status for \"" + root + "\": " + status);
}
}
@@ -119,6 +134,7 @@ class BottomPanel
}
case STATUS_DONE -> show = false;
case STATUS_PROGRESS, STATUS_APPLYING, STATUS_ENQUEUED -> setCancelState();
case STATUS_FAILED -> setRetryFailedStates();
default -> setDownloadAllState();
}
}

View File

@@ -209,7 +209,7 @@ class ChunkTask extends AsyncTask<Void, byte[], Integer>
// @TODO Else display received web page to user - router is redirecting us to some page
}
return downloadFromStream(new BufferedInputStream(urlConnection.getInputStream(), 65536));
return downloadFromStream(new BufferedInputStream(urlConnection.getInputStream(), 128 * Constants.KB));
} catch (final MalformedURLException ex)
{
Logger.e(TAG, "Invalid url: " + mUrl, ex);
@@ -229,7 +229,7 @@ class ChunkTask extends AsyncTask<Void, byte[], Integer>
{
// Because of timeouts in InputStream.read (for bad connection),
// try to introduce dynamic buffer size to read in one query.
final int[] arrSize = {64, 32, 1};
final int[] arrSize = {128, 32, 1};
int ret = IO_EXCEPTION;
for (int size : arrSize)
@@ -240,7 +240,7 @@ class ChunkTask extends AsyncTask<Void, byte[], Integer>
break;
} catch (final IOException ex)
{
Logger.e(TAG, "IOException in downloadFromStream for chunk size: " + size, ex);
Logger.e(TAG, "IOException in downloadFromStream for buffer size: " + size, ex);
}
}

View File

@@ -6,13 +6,14 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmFragment;
import app.organicmaps.base.BaseMwmFragmentActivity;
@@ -30,10 +31,10 @@ public class CountrySuggestFragment extends BaseMwmFragment implements View.OnCl
private LinearLayout mLlSelectDownload;
private LinearLayout mLlActiveDownload;
private WheelProgressView mWpvDownloadProgress;
private TextView mTvCountry;
private TextView mTvActiveCountry;
private TextView mTvProgress;
private Button mBtnDownloadMap;
private MaterialTextView mTvCountry;
private MaterialTextView mTvActiveCountry;
private MaterialTextView mTvProgress;
private MaterialButton mBtnDownloadMap;
private CountryItem mCurrentCountry;
private CountryItem mDownloadingCountry;
@@ -150,7 +151,7 @@ public class CountrySuggestFragment extends BaseMwmFragment implements View.OnCl
mLlNoLocation = view.findViewById(R.id.ll__location_unknown);
mBtnDownloadMap = view.findViewById(R.id.btn__download_map);
mBtnDownloadMap.setOnClickListener(this);
Button selectMap = view.findViewById(R.id.btn__select_map);
MaterialButton selectMap = view.findViewById(R.id.btn__select_map);
selectMap.setOnClickListener(this);
mWpvDownloadProgress = view.findViewById(R.id.wpv__download_progress);
mWpvDownloadProgress.setOnClickListener(this);

View File

@@ -124,7 +124,7 @@ public class DownloaderNotifier
return new NotificationCompat.Builder(mContext, CHANNEL_ID)
.setAutoCancel(true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setSmallIcon(R.drawable.ic_launcher)
.setSmallIcon(R.drawable.ic_launcher_small)
.setColor(ContextCompat.getColor(mContext, R.color.notification))
.setShowWhen(true)
.setContentTitle(title)

View File

@@ -4,11 +4,13 @@ import android.location.Location;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.MwmActivity;
import app.organicmaps.R;
import app.organicmaps.location.LocationHelper;
@@ -28,11 +30,11 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
private final MwmActivity mActivity;
private final View mFrame;
private final TextView mParent;
private final TextView mTitle;
private final TextView mSize;
private final MaterialTextView mParent;
private final MaterialTextView mTitle;
private final MaterialTextView mSize;
private final WheelProgressView mProgress;
private final Button mButton;
private final MaterialButton mButton;
private int mStorageSubscriptionSlot;

View File

@@ -7,8 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -20,7 +18,10 @@ import app.organicmaps.util.Constants;
import app.organicmaps.util.Graphics;
import app.organicmaps.util.InputUtils;
import app.organicmaps.util.UiUtils;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textview.MaterialTextView;
public class AdvancedTimetableFragment extends BaseMwmFragment
implements View.OnClickListener, TimetableProvider
@@ -28,8 +29,8 @@ public class AdvancedTimetableFragment extends BaseMwmFragment
private boolean mIsExampleShown;
private TextInputEditText mInput;
private WebView mExample;
private TextView mExamplesTitle;
private static ImageView mSaveButton;
private MaterialTextView mExamplesTitle;
private static ShapeableImageView mSaveButton;
@Nullable
private String mInitTimetables;
@Nullable

View File

@@ -3,13 +3,14 @@ package app.organicmaps.editor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import java.util.ArrayList;
@@ -100,8 +101,8 @@ public class CuisineAdapter extends RecyclerView.Adapter<CuisineAdapter.ViewHold
protected class ViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckedChangeListener
{
final TextView cuisine;
final CheckBox selected;
final MaterialTextView cuisine;
final MaterialCheckBox selected;
public ViewHolder(View itemView)
{

View File

@@ -8,8 +8,6 @@ import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.CallSuper;
import androidx.annotation.DrawableRes;
@@ -22,8 +20,11 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputLayout;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.Framework;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmFragment;
@@ -46,7 +47,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
{
final static String LAST_INDEX_OF_NAMES_ARRAY = "LastIndexOfNamesArray";
private TextView mCategory;
private MaterialTextView mCategory;
private View mCardName;
private View mCardAddress;
private View mCardDetails;
@@ -89,20 +90,20 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
};
private MultilanguageAdapter mNamesAdapter;
private TextView mNamesCaption;
private TextView mAddLanguage;
private TextView mMoreLanguages;
private MaterialTextView mNamesCaption;
private MaterialTextView mAddLanguage;
private MaterialTextView mMoreLanguages;
private TextView mStreet;
private MaterialTextView mStreet;
private TextInputEditText mHouseNumber;
private TextInputEditText mBuildingLevels;
// Define Metadata entries, that have more tricky logic, separately.
private TextView mPhone;
private TextView mEditPhoneLink;
private TextView mCuisine;
private MaterialTextView mPhone;
private MaterialTextView mEditPhoneLink;
private MaterialTextView mCuisine;
private SwitchCompat mWifi;
private TextView mSelfService;
private MaterialTextView mSelfService;
private SwitchCompat mOutdoorSeating;
// Default Metadata entries.
@@ -132,12 +133,12 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private TextInputLayout mInputBuildingLevels;
private View mEmptyOpeningHours;
private TextView mOpeningHours;
private MaterialTextView mOpeningHours;
private View mEditOpeningHours;
private TextInputEditText mDescription;
private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>();
private final Map<Metadata.MetadataType, View> mSocialMediaBlocks = new HashMap<>();
private TextView mReset;
private MaterialTextView mReset;
private EditorHostFragment mParent;
@@ -489,7 +490,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mOpeningHours.setOnClickListener(this);
final View cardMore = view.findViewById(R.id.cv__more);
mDescription = findInput(cardMore);
TextView osmInfo = view.findViewById(R.id.osm_info);
MaterialTextView osmInfo = view.findViewById(R.id.osm_info);
osmInfo.setMovementMethod(LinkMovementMethod.getInstance());
mReset = view.findViewById(R.id.reset);
mReset.setOnClickListener(this);
@@ -529,7 +530,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private static TextInputEditText findInputAndInitBlock(View blockWithInput, @DrawableRes int icon, String hint)
{
((ImageView) blockWithInput.findViewById(R.id.icon)).setImageResource(icon);
((ShapeableImageView) blockWithInput.findViewById(R.id.icon)).setImageResource(icon);
final TextInputLayout input = blockWithInput.findViewById(R.id.custom_input);
input.setHint(hint);
return input.findViewById(R.id.input);

View File

@@ -4,12 +4,13 @@ import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.editor.data.FeatureCategory;
import app.organicmaps.util.UiUtils;
@@ -78,7 +79,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
protected class FeatureViewHolder extends RecyclerView.ViewHolder
{
@NonNull
private final TextView mName;
private final MaterialTextView mName;
@NonNull
private final View mSelected;
@@ -106,7 +107,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
FooterViewHolder(@NonNull View itemView)
{
super(itemView);
TextView categoryUnsuitableText = itemView.findViewById(R.id.editor_category_unsuitable_text);
MaterialTextView categoryUnsuitableText = itemView.findViewById(R.id.editor_category_unsuitable_text);
categoryUnsuitableText.setMovementMethod(LinkMovementMethod.getInstance());
}
}

View File

@@ -9,7 +9,6 @@ import android.text.format.DateFormat;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import androidx.annotation.IntRange;
@@ -21,6 +20,8 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.base.BaseMwmDialogFragment;
import app.organicmaps.editor.data.HoursMinutes;
@@ -134,19 +135,19 @@ public class HoursMinutesPickerFragment extends BaseMwmDialogFragment
if (id != 0)
{
mPickerHoursLabel = mPicker.findViewById(id);
if (!(mPickerHoursLabel instanceof TextView))
if (!(mPickerHoursLabel instanceof MaterialTextView))
mPickerHoursLabel = null;
}
mTabs = root.findViewById(R.id.tabs);
TextView tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
MaterialTextView tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
tabView.setText(getResources().getString(R.string.editor_time_from));
final ColorStateList textColor = AppCompatResources.getColorStateList(requireContext(),
ThemeUtils.isNightTheme(requireContext()) ? R.color.accent_color_selector_night
: R.color.accent_color_selector);
tabView.setTextColor(textColor);
mTabs.addTab(mTabs.newTab().setCustomView(tabView), true);
tabView = (TextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
tabView = (MaterialTextView) inflater.inflate(R.layout.tab_timepicker, mTabs, false);
tabView.setText(getResources().getString(R.string.editor_time_to));
tabView.setTextColor(textColor);
mTabs.addTab(mTabs.newTab().setCustomView(tabView), true);

View File

@@ -3,11 +3,12 @@ package app.organicmaps.editor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.editor.data.Language;
@@ -42,12 +43,12 @@ public class LanguagesAdapter extends RecyclerView.Adapter<LanguagesAdapter.Hold
protected class Holder extends RecyclerView.ViewHolder
{
TextView name;
MaterialTextView name;
public Holder(View itemView)
{
super(itemView);
name = (TextView) itemView;
name = (MaterialTextView) itemView;
itemView.setOnClickListener(v -> mFragment.onLanguageSelected(mLanguages[getBindingAdapterPosition()]));
}

View File

@@ -0,0 +1,30 @@
package app.organicmaps.editor;
import androidx.annotation.Keep;
// Used by JNI.
@Keep
public class OhState
{
public enum State
{
Open,
Closed,
Unknown
}
public State state;
/** Unix timestamp in seconds**/
public long nextTimeOpen;
/** Unix timestamp in seconds **/
public long nextTimeClosed;
// Used by JNI.
@Keep
public OhState(State state, long nextTimeOpen, long nextTimeClosed)
{
this.state = state;
this.nextTimeOpen = nextTimeOpen;
this.nextTimeClosed = nextTimeClosed;
}
}

View File

@@ -60,4 +60,6 @@ public final class OpeningHours
* @return true if timetable string is valid OSM timetable.
*/
public static native boolean nativeIsTimetableStringValid(String source);
public static native OhState nativeCurrentState(@NonNull Timetable[] timetables);
}

View File

@@ -4,11 +4,11 @@ import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputLayout;
import com.google.android.material.textfield.TextInputEditText;
import app.organicmaps.R;
@@ -94,7 +94,7 @@ public class PhoneListAdapter extends RecyclerView.Adapter<PhoneListAdapter.View
{
private int mPosition = -1;
private final TextInputEditText mInput;
private final ImageView deleteButton;
private final ShapeableImageView deleteButton;
public ViewHolder(@NonNull View itemView)
{
@@ -116,7 +116,7 @@ public class PhoneListAdapter extends RecyclerView.Adapter<PhoneListAdapter.View
deleteButton.setOnClickListener(this);
// TODO: setting icons from code because icons defined in layout XML are white.
deleteButton.setImageResource(R.drawable.ic_delete);
((ImageView) itemView.findViewById(R.id.phone_icon)).setImageResource(R.drawable.ic_phone);
((ShapeableImageView) itemView.findViewById(R.id.phone_icon)).setImageResource(R.drawable.ic_phone);
}
public void setPosition(int position)

View File

@@ -4,12 +4,13 @@ import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.radiobutton.MaterialRadioButton;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.util.Utils;
@@ -51,8 +52,8 @@ public class SelfServiceAdapter extends RecyclerView.Adapter<SelfServiceAdapter.
protected class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
final TextView selfServiceDef;
final CompoundButton selected;
final MaterialTextView selfServiceDef;
final MaterialRadioButton selected;
public ViewHolder(View itemView)
{

View File

@@ -4,11 +4,8 @@ import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.IdRes;
import androidx.annotation.IntRange;
@@ -17,6 +14,10 @@ import androidx.appcompat.widget.SwitchCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.editor.data.HoursMinutes;
import app.organicmaps.editor.data.TimeFormatUtils;
@@ -185,15 +186,15 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
// Limit closed spans to avoid dynamic inflation of views in recycler's children. Yeah, its a hack.
static final int MAX_CLOSED_SPANS = 10;
SparseArray<CheckBox> days = new SparseArray<>(7);
SparseArray<MaterialCheckBox> days = new SparseArray<>(7);
View allday;
SwitchCompat swAllday;
View schedule;
View openClose;
View open;
View close;
TextView tvOpen;
TextView tvClose;
MaterialTextView tvOpen;
MaterialTextView tvClose;
View[] closedHours = new View[MAX_CLOSED_SPANS];
View addClosed;
View deleteTimetable;
@@ -316,7 +317,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
else
{
UiUtils.show(closedHours[i]);
((TextView) closedHours[i].findViewById(R.id.tv__closed)).setText(timespan.toString());
((MaterialTextView) closedHours[i].findViewById(R.id.tv__closed)).setText(timespan.toString());
}
i++;
@@ -333,18 +334,18 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
private void addDay(@IntRange(from = 1, to = 7) final int dayIndex, @IdRes int id)
{
final View day = itemView.findViewById(id);
final CheckBox checkBox = day.findViewById(R.id.chb__day);
final MaterialCheckBox checkBox = day.findViewById(R.id.chb__day);
// Save index of the day to get it back when checkbox will be toggled.
checkBox.setTag(dayIndex);
days.put(dayIndex, checkBox);
day.setOnClickListener(v -> checkBox.toggle());
((TextView) day.findViewById(R.id.tv__day)).setText(TimeFormatUtils.formatShortWeekday(dayIndex));
((MaterialTextView) day.findViewById(R.id.tv__day)).setText(TimeFormatUtils.formatShortWeekday(dayIndex));
}
private void switchWorkingDay(@IntRange(from = 1, to = 7) int dayIndex)
{
final CheckBox checkBox = days.get(dayIndex);
final MaterialCheckBox checkBox = days.get(dayIndex);
if (checkBox.isChecked())
addWorkingDay(dayIndex, getBindingAdapterPosition());
else
@@ -361,7 +362,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
private class AddTimetableViewHolder extends BaseTimetableViewHolder
{
private final Button mAdd;
private final MaterialButton mAdd;
AddTimetableViewHolder(View itemView)
{

View File

@@ -4,12 +4,13 @@ import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.radiobutton.MaterialRadioButton;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.MwmApplication;
import app.organicmaps.R;
import app.organicmaps.dialog.EditTextDialogFragment;
@@ -86,9 +87,9 @@ public class StreetAdapter extends RecyclerView.Adapter<StreetAdapter.BaseViewHo
protected class StreetViewHolder extends BaseViewHolder implements View.OnClickListener
{
final TextView streetDef;
final TextView streetLoc;
final CompoundButton selected;
final MaterialTextView streetDef;
final MaterialTextView streetLoc;
final MaterialRadioButton selected;
public StreetViewHolder(View itemView)
{

View File

@@ -7,7 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -19,6 +18,7 @@ import app.organicmaps.R;
import app.organicmaps.base.BaseMwmFragment;
import app.organicmaps.util.UiUtils;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textview.MaterialTextView;
public class TimetableContainerFragment extends BaseMwmFragment implements TimetableChangedListener
{
@@ -71,7 +71,7 @@ public class TimetableContainerFragment extends BaseMwmFragment implements Timet
@SuppressWarnings("NullableProblems")
@NonNull
private TextView mSwitchMode;
private MaterialTextView mSwitchMode;
@SuppressWarnings("NullableProblems")
@NonNull

View File

@@ -484,10 +484,8 @@ public class MapButtonsController extends Fragment
.build();
ViewCompat.setOnApplyWindowInsetsListener(mFrame, insetsListener);
// Fixes insets on older Androids and with a search opened via API on all Androids.
if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.Q)
mFrame.postDelayed(() -> ViewCompat.requestApplyInsets(mFrame), 1250);
else
mFrame.post(() -> ViewCompat.requestApplyInsets(mFrame));
if (mFrame.hasWindowFocus())
ViewCompat.requestApplyInsets(mFrame);
}
@Override

View File

@@ -1,20 +0,0 @@
package app.organicmaps.products;
import androidx.annotation.Keep;
import androidx.annotation.Nullable;
// Called from JNI.
@Keep
@SuppressWarnings("unused")
public class Product {
@Nullable
public String title;
@Nullable
public String link;
public Product(@Nullable String title, @Nullable String link) {
this.title = title;
this.link = link;
}
}

View File

@@ -1,20 +0,0 @@
package app.organicmaps.products;
import androidx.annotation.Keep;
import androidx.annotation.Nullable;
// Called from JNI.
@Keep
@SuppressWarnings("unused")
public class ProductsConfig {
public ProductsConfig(@Nullable String placePagePrompt, @Nullable Product[] products) {
this.placePagePrompt = placePagePrompt;
this.products = products;
}
@Nullable
public String placePagePrompt;
@Nullable
public Product[] products;
}

View File

@@ -56,13 +56,5 @@ public final class Constants
public static final String XIAOMI = "XIAOMI";
}
public static class ProductsPopupCloseReason
{
public static final String CLOSE = "close";
public static final String REMIND_LATER = "remind_later";
public static final String ALREADY_DONATED = "already_donated";
public static final String SELECT_PRODUCT = "select_product";
}
private Constants() {}
}

View File

@@ -9,8 +9,6 @@ import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -34,8 +32,10 @@ import app.organicmaps.util.UiUtils;
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import com.google.android.material.textview.MaterialTextView;
import java.util.List;
@@ -54,8 +54,8 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
private TextInputEditText mEtName;
@NonNull
private TextInputLayout clearNameBtn;
private TextView mTvBookmarkGroup;
private ImageView mIvColor;
private MaterialTextView mTvBookmarkGroup;
private ShapeableImageView mIvColor;
private BookmarkCategory mBookmarkCategory;
@Nullable
private Icon mIcon;
@@ -208,7 +208,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
ViewCompat.setOnApplyWindowInsetsListener(toolbar, PaddingInsetsListener.excludeBottom());
final ImageView imageView = toolbar.findViewById(R.id.save);
final ShapeableImageView imageView = toolbar.findViewById(R.id.save);
switch (mType)
{
case TYPE_BOOKMARK ->
@@ -412,7 +412,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
{
mListener = listener;
}
private void clearAndFocus(TextView textView)
private void clearAndFocus(TextInputEditText textView)
{
textView.getEditableText().clear();
textView.requestFocus();

View File

@@ -4,8 +4,6 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.AttrRes;
import androidx.annotation.NonNull;
@@ -15,6 +13,10 @@ import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.util.Graphics;
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
@@ -109,8 +111,8 @@ public final class PlacePageButtons extends Fragment implements Observer<List<Pl
LayoutInflater inflater = LayoutInflater.from(requireContext());
View parent = inflater.inflate(R.layout.place_page_button, mButtonsContainer, false);
ImageView icon = parent.findViewById(R.id.icon);
TextView title = parent.findViewById(R.id.title);
ShapeableImageView icon = parent.findViewById(R.id.icon);
MaterialTextView title = parent.findViewById(R.id.title);
title.setText(current.getTitle());
parent.setContentDescription(getString(current.getTitle()));

View File

@@ -13,7 +13,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
@@ -34,11 +33,16 @@ import app.organicmaps.downloader.CountryItem;
import app.organicmaps.downloader.DownloaderStatusIcon;
import app.organicmaps.downloader.MapManager;
import app.organicmaps.editor.Editor;
import app.organicmaps.editor.OhState;
import app.organicmaps.editor.OpeningHours;
import app.organicmaps.editor.data.HoursMinutes;
import app.organicmaps.editor.data.Timetable;
import app.organicmaps.location.LocationHelper;
import app.organicmaps.location.LocationListener;
import app.organicmaps.location.SensorHelper;
import app.organicmaps.location.SensorListener;
import app.organicmaps.routing.RoutingController;
import app.organicmaps.util.DateUtils;
import app.organicmaps.util.SharingUtils;
import app.organicmaps.util.StringUtils;
import app.organicmaps.util.UiUtils;
@@ -49,12 +53,15 @@ import app.organicmaps.widget.placepage.sections.PlacePageBookmarkFragment;
import app.organicmaps.widget.placepage.sections.PlacePageLinksFragment;
import app.organicmaps.widget.placepage.sections.PlacePageOpeningHoursFragment;
import app.organicmaps.widget.placepage.sections.PlacePagePhoneFragment;
import app.organicmaps.widget.placepage.sections.PlacePageProductsFragment;
import app.organicmaps.widget.placepage.sections.PlacePageWikipediaFragment;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textview.MaterialTextView;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -71,7 +78,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
{
private static final String PREF_COORDINATES_FORMAT = "coordinates_format";
private static final String BOOKMARK_FRAGMENT_TAG = "BOOKMARK_FRAGMENT_TAG";
private static final String PRODUCTS_FRAGMENT_TAG = "PRODUCTS_FRAGMENT_TAG";
private static final String WIKIPEDIA_FRAGMENT_TAG = "WIKIPEDIA_FRAGMENT_TAG";
private static final String PHONE_FRAGMENT_TAG = "PHONE_FRAGMENT_TAG";
private static final String OPENING_HOURS_FRAGMENT_TAG = "OPENING_HOURS_FRAGMENT_TAG";
@@ -85,41 +91,44 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
CoordinatesFormat.MGRS,
CoordinatesFormat.OSMLink);
private View mFrame;
private Context mContext;
// Preview.
private ViewGroup mPreview;
private MaterialToolbar mToolbar;
private TextView mTvTitle;
private TextView mTvSecondaryTitle;
private TextView mTvSubtitle;
private MaterialTextView mTvTitle;
private MaterialTextView mTvSecondaryTitle;
private MaterialTextView mTvSubtitle;
private MaterialTextView mTvOpenState;
private ArrowView mAvDirection;
private TextView mTvDistance;
private TextView mTvAddress;
private MaterialTextView mTvDistance;
private MaterialTextView mTvAddress;
// Details.
private TextView mTvLatlon;
private MaterialTextView mTvLatlon;
private View mWifi;
private TextView mTvWiFi;
private MaterialTextView mTvWiFi;
private View mOperator;
private TextView mTvOperator;
private MaterialTextView mTvOperator;
private View mNetwork;
private TextView mTvNetwork;
private MaterialTextView mTvNetwork;
private View mLevel;
private TextView mTvLevel;
private MaterialTextView mTvLevel;
private View mAtm;
private TextView mTvAtm;
private MaterialTextView mTvAtm;
private View mCapacity;
private TextView mTvCapacity;
private MaterialTextView mTvCapacity;
private View mWheelchair;
private TextView mTvWheelchair;
private MaterialTextView mTvWheelchair;
private View mDriveThrough;
private TextView mTvDriveThrough;
private MaterialTextView mTvDriveThrough;
private View mSelfService;
private TextView mTvSelfService;
private MaterialTextView mTvSelfService;
private View mCuisine;
private TextView mTvCuisine;
private MaterialTextView mTvCuisine;
private View mOutdoorSeating;
private TextView mTvOutdoorSeating;
private MaterialTextView mTvOutdoorSeating;
private View mEntrance;
private TextView mTvEntrance;
private MaterialTextView mTvEntrance;
private View mEditPlace;
private View mAddOrganisation;
private View mAddPlace;
@@ -129,7 +138,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
private CoordinatesFormat mCoordsFormat = CoordinatesFormat.LatLonDecimal;
// Downloader`s stuff
private DownloaderStatusIcon mDownloaderIcon;
private TextView mDownloaderInfo;
private MaterialTextView mDownloaderInfo;
private int mStorageCallbackSlot;
@Nullable
private CountryItem mCurrentCountry;
@@ -161,7 +170,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
private PlacePageViewModel mViewModel;
private MapObject mMapObject;
private static void refreshMetadataOrHide(@Nullable String metadata, @NonNull View metaLayout, @NonNull TextView metaTv)
private static void refreshMetadataOrHide(@Nullable String metadata, @NonNull View metaLayout, @NonNull MaterialTextView metaTv)
{
if (!TextUtils.isEmpty(metadata))
{
@@ -203,7 +212,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mFrame = view;
mFrame.setOnClickListener((v) -> mPlacePageViewListener.onPlacePageRequestToggleState());
mPreview = mFrame.findViewById(R.id.pp__preview);
mFrame.addOnLayoutChangeListener((v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
@@ -222,6 +230,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mTvSecondaryTitle.setOnClickListener(this);
mToolbar = mFrame.findViewById(R.id.toolbar);
mTvSubtitle = mPreview.findViewById(R.id.tv__subtitle);
mTvOpenState = mPreview.findViewById(R.id.tv__open_state);
View directionFrame = mPreview.findViewById(R.id.direction_frame);
mTvDistance = mPreview.findViewById(R.id.tv__straight_distance);
@@ -314,6 +323,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mViewModel.getMapObject().removeObserver(this);
LocationHelper.from(requireContext()).removeListener(this);
SensorHelper.from(requireContext()).removeListener(this);
UiThread.cancelDelayedTasks(updateOpenState);
detachCountry();
}
@@ -392,18 +402,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
updateViewFragment(PlacePageWikipediaFragment.class, WIKIPEDIA_FRAGMENT_TAG, R.id.place_page_wikipedia_fragment, hasWikipediaEntry());
}
// private boolean hasProductsEntry()
// {
// return Framework.nativeShouldShowProducts();
// }
// private void updateProductsView()
// {
// var hasProductsEntry = hasProductsEntry();
//
// updateViewFragment(PlacePageProductsFragment.class, PRODUCTS_FRAGMENT_TAG, R.id.place_page_products_fragment, hasProductsEntry);
// }
private void setTextAndColorizeSubtitle()
{
String text = mMapObject.getSubtitle();
@@ -426,6 +424,8 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
{
UiUtils.setTextAndHideIfEmpty(mTvTitle, mMapObject.getTitle());
UiUtils.setTextAndHideIfEmpty(mTvSecondaryTitle, mMapObject.getSecondaryTitle());
refreshOpenState();
if (mToolbar != null)
mToolbar.setTitle(mMapObject.getTitle());
setTextAndColorizeSubtitle();
@@ -481,9 +481,9 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mEditPlace.setEnabled(Editor.nativeShouldEnableEditPlace());
mAddOrganisation.setEnabled(Editor.nativeShouldEnableAddPlace());
mAddPlace.setEnabled(Editor.nativeShouldEnableAddPlace());
TextView mTvEditPlace = mEditPlace.findViewById(R.id.tv__editor);
TextView mTvAddBusiness = mAddPlace.findViewById(R.id.tv__editor);
TextView mTvAddPlace = mAddPlace.findViewById(R.id.tv__editor);
MaterialTextView mTvEditPlace = mEditPlace.findViewById(R.id.tv__editor);
MaterialTextView mTvAddBusiness = mAddPlace.findViewById(R.id.tv__editor);
MaterialTextView mTvAddPlace = mAddPlace.findViewById(R.id.tv__editor);
final int editPlaceButtonColor = Editor.nativeShouldEnableEditPlace() ? ContextCompat.getColor(getContext(), UiUtils.getStyledResourceId(getContext(), androidx.appcompat.R.attr.colorAccent)) : getResources().getColor(R.color.button_accent_text_disabled);
mTvEditPlace.setTextColor(editPlaceButtonColor);
mTvAddBusiness.setTextColor(editPlaceButtonColor);
@@ -494,7 +494,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
}
updateLinksView();
updateOpeningHoursView();
//updateProductsView(); Disable begging message on placepage
updateWikipediaView();
updateBookmarkView();
updatePhoneView();
@@ -561,6 +560,62 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
mTvLatlon.setText(latLon);
}
Runnable updateOpenState = this::refreshOpenState;
private void refreshOpenState()
{
UiThread.runLater(updateOpenState, 45000); // Refresh every 45s
final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS);
final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr);
if (timetables != null && timetables.length != 0)
{
final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables);
// Ignore unknown rule state
if (poiState.state == OhState.State.Unknown)
{ UiUtils.hide(mTvOpenState); return; }
// Get colours
final ForegroundColorSpan colorGreen = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_green));
final ForegroundColorSpan colorYellow = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_yellow));
final ForegroundColorSpan colorRed = new ForegroundColorSpan(ContextCompat.getColor(context, R.color.base_red));
// Get next state info
final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown
final long nextStateTime = isOpen ? poiState.nextTimeClosed : poiState.nextTimeOpen; // Unix time (seconds)
final int minsToNextState = (int) ((nextStateTime - (System.currentTimeMillis() / 1000)) / 60);
if (minsToNextState <= 60) // POI opens/closes in 60 mins
{
final String minsToChangeStr = minsToNextState + " " + getString(R.string.minute);
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
final ForegroundColorSpan nextChangeColor = isOpen ? colorYellow : colorRed;
//TODO: We should check closed/open time for specific feature's timezone.
ZonedDateTime time = ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault());
String localizedTime = new HoursMinutes(time.getHour(), time.getMinute(), DateUtils.is24HourFormat(context)).toString();
openStateString.append(nextChangeFormatted, nextChangeColor, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTime));
}
else if (isOpen)
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//TODO: Add "Closes at 18:00" etc
else // Closed
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//TODO: Add "Opens at 18:00" etc
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
return;
}
// No valid timetable
UiUtils.hide(mTvOpenState);
}
private void addOrganisation()
{
((MwmActivity) requireActivity()).showPositionChooserForEditor(true, false);
@@ -571,9 +626,6 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
((MwmActivity) requireActivity()).showPositionChooserForEditor(false, true);
}
/// @todo
/// - Why ll__place_editor and ll__place_latlon check if (mMapObject == null)
@Override
public void onClick(View v)
{

View File

@@ -3,7 +3,6 @@ package app.organicmaps.widget.placepage.sections;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
@@ -21,6 +20,8 @@ import java.util.List;
import static app.organicmaps.editor.data.TimeFormatUtils.formatNonBusinessTime;
import static app.organicmaps.editor.data.TimeFormatUtils.formatWeekdaysRange;
import com.google.android.material.textview.MaterialTextView;
public class PlaceOpeningHoursAdapter extends RecyclerView.Adapter<PlaceOpeningHoursAdapter.ViewHolder>
{
private List<WeekScheduleData> mWeekSchedule = Collections.emptyList();
@@ -161,9 +162,9 @@ public class PlaceOpeningHoursAdapter extends RecyclerView.Adapter<PlaceOpeningH
public static class ViewHolder extends RecyclerView.ViewHolder
{
private final TextView mWeekdays;
private final TextView mOpenTime;
private final TextView mNonBusinessTime;
private final MaterialTextView mWeekdays;
private final MaterialTextView mOpenTime;
private final MaterialTextView mNonBusinessTime;
public ViewHolder(@NonNull View itemView)
{

View File

@@ -13,7 +13,6 @@ import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -21,6 +20,9 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.Bookmark;
import app.organicmaps.bookmarks.data.BookmarkManager;
@@ -37,7 +39,7 @@ public class PlacePageBookmarkFragment extends Fragment implements View.OnClickL
EditBookmarkFragment.EditBookmarkListener
{
private View mFrame;
private TextView mTvBookmarkNote;
private MaterialTextView mTvBookmarkNote;
@Nullable
private WebView mWvBookmarkNote;

View File

@@ -5,7 +5,6 @@ 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.annotation.Nullable;
@@ -27,43 +26,45 @@ import java.util.List;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import com.google.android.material.textview.MaterialTextView;
public class PlacePageLinksFragment extends Fragment implements Observer<MapObject>
{
private static final String TAG = PlacePageLinksFragment.class.getSimpleName();
private View mFrame;
private View mFacebookPage;
private TextView mTvFacebookPage;
private MaterialTextView mTvFacebookPage;
private View mInstagramPage;
private TextView mTvInstagramPage;
private MaterialTextView mTvInstagramPage;
private View mTwitterPage;
private TextView mTvTwitterPage;
private MaterialTextView mTvTwitterPage;
private View mFediversePage;
private TextView mTvFediversePage;
private MaterialTextView mTvFediversePage;
private View mBlueskyPage;
private TextView mTvBlueskyPage;
private MaterialTextView mTvBlueskyPage;
private View mVkPage;
private TextView mTvVkPage;
private MaterialTextView mTvVkPage;
private View mLinePage;
private TextView mTvLinePage;
private MaterialTextView mTvLinePage;
private View mWebsite;
private TextView mTvWebsite;
private MaterialTextView mTvWebsite;
private View mWebsiteMenu;
private TextView mTvWebsiteMenuSubsite;
private MaterialTextView mTvWebsiteMenuSubsite;
private View mEmail;
private TextView mTvEmail;
private MaterialTextView mTvEmail;
private View mWikimedia;
private TextView mTvWikimedia;
private MaterialTextView mTvWikimedia;
private View mPanoramax;
private TextView mTvPanoramax;
private MaterialTextView mTvPanoramax;
private PlacePageViewModel mViewModel;
private MapObject mMapObject;
private static void refreshMetadataOrHide(@Nullable String metadata, @NonNull View metaLayout,
@NonNull TextView metaTv)
@NonNull MaterialTextView metaTv)
{
if (!TextUtils.isEmpty(metadata))
{

View File

@@ -5,7 +5,6 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
@@ -15,6 +14,9 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.MapObject;
import app.organicmaps.bookmarks.data.Metadata;
@@ -34,9 +36,9 @@ import java.util.Locale;
public class PlacePageOpeningHoursFragment extends Fragment implements Observer<MapObject>
{
private View mFrame;
private TextView mTodayLabel;
private TextView mTodayOpenTime;
private TextView mTodayNonBusinessTime;
private MaterialTextView mTodayLabel;
private MaterialTextView mTodayOpenTime;
private MaterialTextView mTodayNonBusinessTime;
private RecyclerView mFullWeekOpeningHours;
private PlaceOpeningHoursAdapter mOpeningHoursAdapter;

View File

@@ -1,107 +0,0 @@
package app.organicmaps.widget.placepage.sections;
import static androidx.core.util.ObjectsCompat.requireNonNull;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import java.util.Objects;
import app.organicmaps.Framework;
import app.organicmaps.R;
import app.organicmaps.products.Product;
import app.organicmaps.products.ProductsConfig;
import app.organicmaps.util.Constants;
import app.organicmaps.util.UiUtils;
import app.organicmaps.util.Utils;
public class PlacePageProductsFragment extends Fragment
{
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
return inflater.inflate(R.layout.place_page_products_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
var config = Framework.nativeGetProductsConfiguration();
if (config != null && isValidConfig(config))
{
UiUtils.show(view);
updateView(view, config);
} else
{
UiUtils.hide(view);
}
}
private void updateView(@NonNull View view, @NonNull ProductsConfig config)
{
var layoutInflater = LayoutInflater.from(view.getContext());
TextView productsPrompt = requireNonNull(view.findViewById(R.id.products_prompt));
LinearLayout productsButtons = requireNonNull(view.findViewById(R.id.products_buttons));
View closeButton = requireNonNull(view.findViewById(R.id.products_close));
View productsRemindLater = requireNonNull(view.findViewById(R.id.products_remind_later));
View alreadyDonated = requireNonNull(view.findViewById(R.id.products_already_donated));
productsPrompt.setText(config.placePagePrompt);
productsButtons.removeAllViews();
for (var product : Objects.requireNonNull(config.products))
{
var button = (Button) layoutInflater.inflate(R.layout.item_product, productsButtons, false);
button.setText(product.title);
button.setOnClickListener((v) -> {
onProductSelected(product);
});
productsButtons.addView(button);
}
closeButton.setOnClickListener((v) -> {
closeWithReason(view, Constants.ProductsPopupCloseReason.CLOSE);
});
productsRemindLater.setOnClickListener((v) -> {
closeWithReason(view, Constants.ProductsPopupCloseReason.REMIND_LATER);
});
alreadyDonated.setOnClickListener((v) -> {
closeWithReason(view, Constants.ProductsPopupCloseReason.ALREADY_DONATED);
});
}
private void closeWithReason(View view, String reason)
{
Framework.nativeDidCloseProductsPopup(reason);
UiUtils.hide(view);
}
private void onProductSelected(Product product)
{
Utils.openUrl(requireActivity(), product.link);
Framework.nativeDidSelectProduct(product.title, product.link);
}
private boolean isValidConfig(@NonNull ProductsConfig config)
{
return config.products != null && config.products.length > 0;
}
}

View File

@@ -7,13 +7,15 @@ 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.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.bookmarks.data.MapObject;
import app.organicmaps.bookmarks.data.Metadata;
@@ -29,7 +31,7 @@ public class PlacePageWikipediaFragment extends Fragment implements Observer<Map
private View mWiki;
private View mPlaceDescriptionViewContainer;
private TextView mPlaceDescriptionView;
private MaterialTextView mPlaceDescriptionView;
private PlacePageViewModel mViewModel;

View File

@@ -7,10 +7,12 @@ 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.recyclerview.widget.RecyclerView;
import com.google.android.material.textview.MaterialTextView;
import app.organicmaps.R;
import app.organicmaps.util.Utils;
@@ -61,7 +63,7 @@ public class PlacePhoneAdapter extends RecyclerView.Adapter<PlacePhoneAdapter.Vi
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener
{
private final TextView mPhone;
private final MaterialTextView mPhone;
public ViewHolder(@NonNull View itemView)
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 874 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/visibility_selector"
android:insetLeft="12dp" />

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,6v1.79c0,0.45 0.54,0.67 0.85,0.35l2.79,-2.79c0.2,-0.2 0.2,-0.51 0,-0.71l-2.79,-2.79c-0.31,-0.31 -0.85,-0.09 -0.85,0.36L12,4c-4.42,0 -8,3.58 -8,8 0,1.04 0.2,2.04 0.57,2.95 0.27,0.67 1.13,0.85 1.64,0.34 0.27,-0.27 0.38,-0.68 0.23,-1.04C6.15,13.56 6,12.79 6,12c0,-3.31 2.69,-6 6,-6zM17.79,8.71c-0.27,0.27 -0.38,0.69 -0.23,1.04 0.28,0.7 0.44,1.46 0.44,2.25 0,3.31 -2.69,6 -6,6v-1.79c0,-0.45 -0.54,-0.67 -0.85,-0.35l-2.79,2.79c-0.2,0.2 -0.2,0.51 0,0.71l2.79,2.79c0.31,0.31 0.85,0.09 0.85,-0.35L12,20c4.42,0 8,-3.58 8,-8 0,-1.04 -0.2,-2.04 -0.57,-2.95 -0.27,-0.67 -1.13,-0.85 -1.64,-0.34z" />
</vector>

View File

@@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="24dp"
android:height="24dp"
android:viewportWidth="36"
android:viewportHeight="36">
<path android:pathData="M15,35.8C6.5,34.3 0,26.9 0,18 0,8.1 8.1,0 18,0s18,8.1 18,18c0,8.9 -6.5,16.3 -15,17.8l-1,-0.8h-4l-1,0.8z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="18"
android:endY="0"
android:startX="18"
android:startY="34.754"
android:type="linear">
<item
android:color="#FF0062E0"
android:offset="0" />
<item
android:color="#FF19AFFF"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFF"
android:pathData="m25,23 l0.8,-5H21v-3.5c0,-1.4 0.5,-2.5 2.7,-2.5H26V7.4c-1.3,-0.2 -2.7,-0.4 -4,-0.4 -4.1,0 -7,2.5 -7,7v4h-4.5v5H15v12.7c1,0.2 2,0.3 3,0.3s2,-0.1 3,-0.3V23h4z" />
</vector>

View File

@@ -27,7 +27,7 @@
android:clipChildren="false"
android:gravity="center"
tools:ignore="UselessParent">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -35,7 +35,7 @@
android:textAppearance="@style/MwmTextAppearance.Body2"
android:gravity="center_horizontal"
tools:text="Some country very loooooooooong country"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -45,7 +45,7 @@
android:gravity="center_horizontal"
tools:text="Some name very loooooooooong name"
tools:ignore="UnusedAttribute"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -58,7 +58,7 @@
android:layout_width="180dp"
android:layout_height="@dimen/downloader_status_size"
android:clipChildren="false">
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/downloader_button"
style="@style/MwmWidget.Button.Primary"
android:layout_width="180dp"

View File

@@ -4,6 +4,7 @@
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
android:id="@+id/root_view"
android:orientation="vertical"
tool:background="@color/bg_primary"
android:gravity="center">

View File

@@ -89,15 +89,17 @@
android:orientation="horizontal"
android:gravity="center_vertical" >
<Button
android:layout_weight="1"
android:id="@+id/btn__manage_route"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/MwmWidget.Button"
android:text="@string/planning_route_manage_route"
android:drawableStart="@drawable/ic_manage_route"
android:drawablePadding="6dp"/>
android:drawablePadding="@dimen/margin_quarter_plus"/>
<Button
android:layout_weight="0"
android:id="@+id/btn__save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -8,7 +8,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"

View File

@@ -4,7 +4,7 @@
android:layout_height="wrap_content"
android:background="?clickableBackground">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/iv__color"
android:layout_width="@dimen/track_circle_size"
android:layout_height="@dimen/track_circle_size"

View File

@@ -44,7 +44,7 @@
android:layout_below="@+id/ll__bookmark_name"
android:layout_marginStart="@dimen/margin_half"
android:layout_marginEnd="@dimen/margin_half">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__bookmark_set_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -52,7 +52,7 @@
android:layout_marginEnd="@dimen/margin_quadruple"
android:text="@string/list"
android:textAppearance="@style/MwmTextAppearance.Body3" />
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__bookmark_set"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -73,7 +73,7 @@
android:layout_alignBottom="@id/tv__bookmark_set"
android:layout_marginEnd="@dimen/margin_quadruple"
android:background="@color/divider" />
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/iv__bookmark_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -9,7 +9,7 @@
android:layout_height="match_parent">
<include layout="@layout/toolbar_with_search"/>
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/action"
android:layout_width="match_parent"
android:layout_height="@dimen/height_block_base"

View File

@@ -12,7 +12,7 @@
android:layout_height="wrap_content"
android:theme="@style/MwmWidget.ToolbarTheme">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
app:tint="@color/image_view"
android:id="@+id/save"
app:srcCompat="@drawable/ic_done"

View File

@@ -13,7 +13,7 @@
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_half"
android:orientation="vertical">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/osm_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -21,7 +21,7 @@
android:layout_marginBottom="@dimen/margin_base"
android:text="@string/editor_about_osm"
android:textAppearance="@style/MwmTextAppearance.Body4"/>
<androidx.cardview.widget.CardView
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__category"
style="@style/MwmWidget.Editor.CardView">
<RelativeLayout
@@ -31,7 +31,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:padding="@dimen/margin_half_plus">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/icon"
style="@style/MwmWidget.Editor.MetadataIcon"
android:layout_width="wrap_content"
@@ -42,7 +42,7 @@
tools:src="@drawable/ic_operator"
app:tint="?iconTint" />
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -52,7 +52,7 @@
android:text="@string/editor_edit_place_category_title"
android:textAppearance="@style/MwmTextAppearance.Body4"
tools:text="Trololo"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -61,13 +61,13 @@
android:textAppearance="@style/MwmTextAppearance.Body1"
tools:text="Ololo"/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__name"
style="@style/MwmWidget.Editor.CardView">
<include layout="@layout/localized_name"/>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__address"
style="@style/MwmWidget.Editor.CardView">
<LinearLayout
@@ -76,7 +76,7 @@
android:orientation="vertical"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_base"
@@ -89,18 +89,18 @@
style="@style/MwmWidget.Editor.MetadataBlock.Clickable"
android:paddingBottom="@dimen/margin_half"
android:paddingTop="@dimen/margin_half">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_street_address"
tools:ignore="ContentDescription" />
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/street_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/editor_margin_left"
android:text="@string/street"
android:textAppearance="@style/MwmTextAppearance.Body4"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/street"
style="@style/MwmWidget.Editor.FieldLayout"
android:layout_below="@id/street_title"
@@ -124,8 +124,8 @@
android:id="@+id/block_zipcode"
layout="@layout/item_editor_input"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__details"
style="@style/MwmWidget.Editor.CardView">
<LinearLayout
@@ -134,7 +134,7 @@
android:orientation="vertical"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_base"
@@ -153,18 +153,18 @@
style="@style/MwmWidget.Editor.MetadataBlock.Clickable"
android:paddingBottom="@dimen/margin_half"
android:paddingTop="@dimen/margin_half">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_cuisine"
tools:ignore="ContentDescription" />
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/title_cuisine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/editor_margin_left"
android:text="@string/cuisine"
android:textAppearance="@style/MwmTextAppearance.Body4"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/cuisine"
style="@style/MwmWidget.Editor.FieldLayout"
android:layout_below="@id/title_cuisine"
@@ -197,11 +197,11 @@
<RelativeLayout
android:id="@+id/block_phone"
style="@style/MwmWidget.Editor.MetadataBlock.Clickable">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_phone"
tools:ignore="ContentDescription"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/phone"
style="@style/MwmWidget.Editor.FieldLayout.EditText"
android:layout_width="match_parent"
@@ -209,7 +209,7 @@
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/editor_margin_left"
android:layout_toStartOf="@+id/edit_phone"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/edit_phone"
android:layout_marginStart="@dimen/margin_half_plus"
android:background="?clickableBackground"
@@ -235,11 +235,11 @@
<RelativeLayout
android:id="@+id/block_wifi"
style="@style/MwmWidget.Editor.MetadataBlock.Clickable">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_wifi"
tools:ignore="ContentDescription" />
<TextView
<com.google.android.material.textview.MaterialTextView
style="@style/MwmWidget.Editor.FieldLayout.EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -260,18 +260,18 @@
style="@style/MwmWidget.Editor.MetadataBlock.Clickable"
android:paddingBottom="@dimen/margin_half"
android:paddingTop="@dimen/margin_half">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_self_service"
tools:ignore="ContentDescription" />
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/self_service_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/editor_margin_left"
android:text="@string/self_service"
android:textAppearance="@style/MwmTextAppearance.Body4"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/self_service"
style="@style/MwmWidget.Editor.FieldLayout"
android:layout_below="@id/self_service_title"
@@ -292,11 +292,11 @@
<RelativeLayout
android:id="@+id/block_outdoor_seating"
style="@style/MwmWidget.Editor.MetadataBlock.Clickable">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
style="@style/MwmWidget.Editor.MetadataIcon"
app:srcCompat="@drawable/ic_outdoor_seating"
tools:ignore="ContentDescription" />
<TextView
<com.google.android.material.textview.MaterialTextView
style="@style/MwmWidget.Editor.FieldLayout.EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -312,9 +312,9 @@
android:layout_centerVertical="true"/>
</RelativeLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>
<androidx.cardview.widget.CardView
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__social_media"
style="@style/MwmWidget.Editor.CardView">
<LinearLayout
@@ -323,7 +323,7 @@
android:orientation="vertical"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_base"
@@ -355,9 +355,9 @@
android:id="@+id/block_bluesky"
layout="@layout/item_editor_input"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>
<androidx.cardview.widget.CardView
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__building"
style="@style/MwmWidget.Editor.CardView">
<LinearLayout
@@ -366,7 +366,7 @@
android:orientation="vertical"
android:paddingEnd="@dimen/margin_base"
android:paddingStart="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_base"
@@ -381,9 +381,9 @@
layout="@layout/item_editor_input"/>
</LinearLayout>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>
<androidx.cardview.widget.CardView
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__more"
style="@style/MwmWidget.Editor.CardView">
<LinearLayout
@@ -391,7 +391,7 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@string/robotoMedium"
@@ -411,13 +411,13 @@
android:hint="@string/editor_note_hint"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/cv__more"
style="@style/MwmWidget.Editor.CardView"
android:layout_marginTop="@dimen/margin_double"
android:layout_marginBottom="@dimen/margin_base">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/reset"
android:layout_width="match_parent"
android:layout_height="36dp"
@@ -426,6 +426,6 @@
android:textAppearance="@style/MwmTextAppearance.Button"
android:textColor="@color/base_red"
tools:text="Reset my changes"/>
</androidx.cardview.widget.CardView>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -29,7 +29,7 @@
android:layout_marginEnd="?actionBarSize"
tools:visibility="gone" />
<ImageView
<com.google.android.material.imageview.ShapeableImageView
app:tint="@color/image_view"
android:id="@+id/save"
android:layout_width="?actionBarSize"

View File

@@ -21,7 +21,7 @@
</FrameLayout>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__append_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@@ -14,7 +14,7 @@
android:gravity="end|center_vertical"
android:theme="@style/MwmWidget.ToolbarTheme"
tools:ignore="UnusedAttribute">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/save"
style="@style/MwmWidget.Downloader.ToolbarButton"
android:text="@string/editor_report_problem_send_button"/>
@@ -38,24 +38,24 @@
android:orientation="vertical"
tools:visibility="gone">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/problem_not_exist"
style="@style/MwmWidget.Editor.Problem"
android:text="@string/editor_report_problem_no_place_title"
android:tag="@string/problem_does_not_exist"/>
<!-- TODO: Uncomment when the multiple choices are supported -->
<!--<TextView-->
<!--<com.google.android.material.textview.MaterialTextView-->
<!--android:id="@+id/problem_closed_repair"-->
<!--style="@style/MwmWidget.Editor.Problem"-->
<!--android:text="@string/editor_report_problem_under_construction_title"/>-->
<!--<TextView-->
<!--<com.google.android.material.textview.MaterialTextView-->
<!--android:id="@+id/problem_duplicated_place"-->
<!--style="@style/MwmWidget.Editor.Problem"-->
<!--android:text="@string/editor_report_problem_duplicate_place_title"/>-->
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/problem_other"
style="@style/MwmWidget.Editor.Problem"
android:text="@string/editor_report_problem_other_title"/>
@@ -77,7 +77,7 @@
android:padding="@dimen/margin_base"
android:textAppearance="@style/MwmTextAppearance.Body1"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_base"
@@ -85,7 +85,7 @@
android:layout_marginTop="@dimen/margin_quarter_plus"
android:text="@string/editor_report_problem_desription_1"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_base"

View File

@@ -25,7 +25,7 @@
wheel:layout_constraintEnd_toEndOf="parent"
wheel:layout_constraintStart_toStartOf="parent"
wheel:layout_constraintTop_toTopOf="parent">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
@@ -33,7 +33,7 @@
android:text="@string/search_without_internet_advertisement"
android:textAppearance="@style/MwmTextAppearance.Body2"/>
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/placeholder_size"
android:layout_marginTop="@dimen/margin_half"
@@ -47,7 +47,7 @@
android:layout_weight="1"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__country_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -58,7 +58,7 @@
android:textAppearance="@style/MwmTextAppearance.Title"
tools:text="Some country name"/>
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/btn__download_map"
style="@style/MwmWidget.Button.Primary"
android:layout_marginTop="@dimen/margin_half"
@@ -75,7 +75,7 @@
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
<com.google.android.material.textview.MaterialTextView
android:layout_width="match_parent"
android:layout_height="@dimen/height_block_base"
android:layout_marginTop="@dimen/margin_half"
@@ -83,7 +83,7 @@
android:text="@string/unknown_current_position"
android:textAppearance="@style/MwmTextAppearance.Body3"/>
<Button
<com.google.android.material.button.MaterialButton
android:id="@+id/btn__select_map"
style="@style/MwmWidget.Button.Primary"
android:layout_marginTop="@dimen/margin_half"
@@ -103,13 +103,13 @@
android:visibility="gone"
wheel:layout_constraintBottom_toTopOf="@+id/ll__select_download"
wheel:layout_constraintTop_toTopOf="parent">
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__active_country_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/MwmTextAppearance.Title"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/downloader_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -21,7 +21,7 @@
android:layout_alignParentBottom="true"
android:background="?cardBackground"/>
<TextView
<com.google.android.material.textview.MaterialTextView
android:id="@+id/tv__mode_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"

Some files were not shown because too many files have changed in this diff Show More