Compare commits

..

187 Commits

Author SHA1 Message Date
Jean-Baptiste
ce413ff6d3 [android] Add open in panoramax link on the place page
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-15 19:16:21 +01:00
map-per
f1cf844986 [editor] Check OSM max char length in value validation
Signed-off-by: map-per <map-per@gmx.de>
2025-12-11 09:09:47 +01:00
map-per
f20c3bf50c [Android] Add info about outdated maps and update button to place page
Signed-off-by: map-per <map-per@gmx.de>
2025-12-11 08:11:44 +01:00
map-per
e7cc602904 [editor] Remove unused code from the old OSM editor
Signed-off-by: map-per <map-per@gmx.de>
2025-12-11 08:03:31 +01:00
Konstantin Pastbin
d473361e54 December R1 release notes
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-11 13:02:04 +07:00
Codeberg Translate
76d58e4a05 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: aoxa <aoxa@noreply.codeberg.org>
Co-authored-by: cirilla <cirilla@noreply.codeberg.org>
Co-authored-by: javnik <javnik@noreply.codeberg.org>
Co-authored-by: mnalis <mnalis@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/android/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Countries and regions names
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-12-10 19:52:29 +00:00
Jean-Baptiste
7b5878b010 [editor] Remove ability to add attraction and remove name field for charging station
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
Co-authored-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
Co-committed-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-10 20:52:16 +01:00
matheusgomesms
3fabbae3f7 [core] Added landuse in address checker
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2025-12-10 20:39:46 +01:00
Konstantin Pastbin
0add23fcf2 [planet] Update map data to 251209
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-10 22:55:03 +07:00
matheusgomesms
08bcb574fa [tts] Fix roundabout in French
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2025-12-10 09:25:32 +01:00
gekeleda
db888f33c5 [android] fix crash when no TTS engine
Signed-off-by: gekeleda <git@davidgekeler.eu>
2025-12-10 08:07:11 +00:00
Codeberg Translate
4a96d219f0 [strings] Update from Codeberg Translate
Co-authored-by: Anonymous <anonymous@noreply.codeberg.org>
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Houtari <houtari@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@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: arnyminerz <arnyminerz@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: eBug <ebug@noreply.codeberg.org>
Co-authored-by: hectodium <hectodium@noreply.codeberg.org>
Co-authored-by: jros <jros@noreply.codeberg.org>
Co-authored-by: loscati <loscati@noreply.codeberg.org>
Co-authored-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-authored-by: mcliquid <mcliquid@noreply.codeberg.org>
Co-authored-by: mnalis <mnalis@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: phama <phama@noreply.codeberg.org>
Co-authored-by: rimas <rimas@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: tagomagic <tagomagic@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
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/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS UI Strings
2025-12-09 19:10:42 +00:00
Jean-Baptiste
c2bc6c27aa [android] Add warning about speed cameras in settings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-08 18:13:11 +01:00
gekeleda
1095e5dbc3 [android] Consider all system langs for TTS
Signed-off-by: gekeleda <git@davidgekeler.eu>
2025-12-08 15:55:49 +01:00
Leonardo Bishop
a1cbcc5885 [drape] Base zoom level on distance to next turn
This commit changes the auto zoom level behaviour during navigation
to be based off the distance to the next turn, rather than naively
coupling it to the current speed. This will improve the navigation
experience during driving.

Signed-off-by: Leonardo Bishop <me@leonardobishop.net>
2025-12-08 08:31:33 +01:00
Jean-Baptiste
641f2308c6 [android] Remove hardocded height of name text field
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-07 18:01:17 +01:00
Konstantin Pastbin
f858ebcce0 [generator] Make Taiwan_North use 5 threads for Index stage
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-07 14:06:13 +07:00
matheusgomesms
eb376f5afc Added missing Portuguese articles
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2025-12-06 20:54:14 +01:00
x7z4w
71b47719af [search] Remove stop words
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-06 19:43:11 +00:00
Konstantin Pastbin
4f7230fcbe [generator] Clone repos shallowly --depth 1
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-06 08:12:42 +01:00
Konstantin Pastbin
2dafdd4338 [generator] Fix boolean action options handling
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-06 08:12:42 +01:00
Konstantin Pastbin
0237751afe [generator] Fix GENARGS in docker_maps_generator.sh
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-06 08:12:42 +01:00
Jean-Baptiste
e7fb3a2f2c [android] Improve padding of instructions during navigation
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-05 22:30:03 +01:00
x7z4w
e08d60bb40 [styles] Fix toilets label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-05 22:11:42 +01:00
Jean-Baptiste
de4252f86c [android] Remove transparent background on textview
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-05 21:51:27 +01:00
Jean-Baptiste
9d87d77055 [android] Improve size of bookmarks button
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-05 17:53:54 +01:00
Jean-Baptiste
c88f59eb75 [android] Migrate Pop up Menu to Material 3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-04 19:32:52 +01:00
Jean-Baptiste
9b5c700ad8 [android] Migrate Circular Progress Indicator to Material 3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-04 18:21:45 +01:00
Jean-Baptiste
7d5e6fabcd [android] Improve size of instructions in navigation
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-04 18:12:54 +01:00
x7z4w
ebe0364030 [styles] Colored toilets label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-03 18:30:37 +01:00
Jean-Baptiste
43e7e1eb2e [android] Fix missing property
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-03 18:20:39 +01:00
Jean-Baptiste
ce9af79a68 [android] Migrate view on map button to M3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-03 18:15:05 +01:00
thesupertechie
b54b77bce6 [docs][strings] Correct typos
Signed-off-by: thesupertechie <thesupertechie1@gmail.com>
Co-authored-by: thesupertechie <thesupertechie@noreply.codeberg.org>
Co-committed-by: thesupertechie <thesupertechie@noreply.codeberg.org>
2025-12-03 17:25:38 +01:00
Konstantin Pastbin
038dca9c6f [generator] Disable secondary action options
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-03 18:45:05 +07:00
Konstantin Pastbin
47db332f09 [generator] Add chekboxes for all mapgen steps; separate pbf and o5m planet updates
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-03 13:30:47 +07:00
Konstantin Pastbin
fdb665317f [generator] Add a test generation flag
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-03 13:30:47 +07:00
Jean-Baptiste
2ac80f7a90 [android] Remove textAllCaps everywhere
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-02 21:23:40 +01:00
Jean-Baptiste
c759b4f4a7 [docs] Fix missing parenthesis
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-02 20:54:56 +01:00
Konstantin Pastbin
38802011f8 [generator] Make the upload step use cached repo clone
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-12-01 21:45:50 +01:00
x7z4w
ea887c3209 [android] Fix Windows builds
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-12-01 19:45:31 +01:00
Jean-Baptiste
7f075d9bef [android] Remove custom color for unchecked checkbox
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-12-01 19:38:59 +01:00
Codeberg Translate
5e576177ea [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: alexgabi <alexgabi@noreply.codeberg.org>
Co-authored-by: eryk <eryk@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: loscati <loscati@noreply.codeberg.org>
Co-authored-by: metehan <metehan@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Voice announcements for navigation (TTS)
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-12-01 12:48:39 +00:00
x7z4w
2efc001001 [docs] Fix link
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-30 16:40:16 +00:00
rimas
afa968c7d3 [tts] Enable Lithuanian and Latvian
Co-authored-by: rimas <rimas@noreply.codeberg.org>
Co-committed-by: rimas <rimas@noreply.codeberg.org>
2025-11-29 20:19:24 +01:00
Jean-Baptiste
22d7cf3969 [android] Fix Android Studio warnings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-29 10:29:38 +01:00
Codeberg Translate
acdcfe62a4 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Diabolo68 <diabolo68@noreply.codeberg.org>
Co-authored-by: Discostu36 <discostu36@noreply.codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Lenny Angst <lenny@familie-angst.ch>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Poppi <poppi@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@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: Woozy <woozy@noreply.codeberg.org>
Co-authored-by: codebergian42 <codebergian42@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: focaccina <focaccina@noreply.codeberg.org>
Co-authored-by: gedankenstuecke <gedankenstuecke@noreply.codeberg.org>
Co-authored-by: javnik <javnik@noreply.codeberg.org>
Co-authored-by: jeanbaptisteC <jeanbaptistec@noreply.codeberg.org>
Co-authored-by: lwgph <lwgph@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Co-authored-by: marcosm <marcosm@noreply.codeberg.org>
Co-authored-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translate-URL: https://translate.codeberg.org/projects/comaps/search-synonyms-aliases/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/Voice announcements for navigation (TTS)
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-11-28 17:39:38 +00:00
Jean-Baptiste
67d8249e5a [android] Use material switch in all views
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
Co-authored-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
Co-committed-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-28 08:33:10 +01:00
Jean-Baptiste
a5174623c2 [android] Remove unused preference value
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-28 08:31:27 +01:00
Jean-Baptiste
c6ac2919fa [android] Fix editor socket dialog and re-enable socket cardview in the editor
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
Co-authored by: Séverin Lemaignan <severin@guakamole.org>
2025-11-27 20:41:33 +01:00
Bastian Greshake Tzovaras
7174d697d4 [docs] expand category strings explanation
Signed-off-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-authored-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-committed-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
2025-11-27 18:46:40 +01:00
x7z4w
07fb3c0055 [drape] nit
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-27 18:36:38 +01:00
Séverin Lemaignan
3b0b4520a1 properly restore local edits of charge sockets
fixes #2368

Signed-off-by: Séverin Lemaignan <severin@guakamole.org>
2025-11-27 09:48:27 +01:00
Jean-Baptiste
eaa56e5127 [android] Use Material switches in preference screens
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-27 08:12:30 +01:00
x7z4w
3f7dc91b5b [search] nits
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-26 21:24:19 +01:00
matheusgomesms
48e1c1f3a5 [search] Add PT abbreviations
Signed-off-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
2025-11-26 21:24:19 +01:00
patepelo
e862da648e [search] Improve search synonyms spanish
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-26 21:24:19 +01:00
Séverin Lemaignan
6d0111b434 [android] add support for schuko/type-E charge sockets
The commit is slightly more complicated that expected because:

- it adds supports for both schuko and type-E, using the same icon (but
  maintaining the underlying type annotated in OSM)

- it adds logic to *not* display the power of schuko socket as 'unknown'
  when not provided in OSM, as it is 'implicit' (3.7kW in most
  countries)

Signed-off-by: Séverin Lemaignan <severin@guakamole.org>
2025-11-26 19:31:18 +01:00
Séverin Lemaignan
610737d295 add support for schuko/type-E charge sockets to C++ SDK
Signed-off-by: Séverin Lemaignan <severin@guakamole.org>
2025-11-26 19:31:18 +01:00
map-per
26cb42651c [build] Fix gradle sync in Android Studio
Signed-off-by: map-per <map-per@gmx.de>
2025-11-26 15:14:09 +01:00
x7z4w
a702989b09 [cmake] Remove LTO hacks
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-26 13:42:11 +01:00
x7z4w
bf6f57d336 [core] Fix warning
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-26 13:20:48 +01:00
x7z4w
6b76e9826b [tests] Fix build errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-26 13:19:59 +01:00
x7z4w
e19e63930d [cmake] Fix build errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-26 13:16:02 +01:00
Konstantin Pastbin
92c2945897 [android] Default release rollout fraction to 20% of users
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-26 17:24:44 +07:00
Jean-Baptiste
2f343d3fba [android] Fix background color of socket cardview
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-26 10:53:42 +01:00
Jean-Baptiste
955d3702ac [android] Reorder settings like on iOS
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-26 07:14:55 +01:00
gekeleda
1d087ca854 [android] Add function to get all android system languages
Signed-off-by: gekeleda <git@davidgekeler.eu>
2025-11-25 11:17:05 +01:00
gekeleda
2c37e22f5c [android] Ensure correct system language order in map lang selection
Signed-off-by: gekeleda <git@davidgekeler.eu>
Co-authored-by: gekeleda <git@davidgekeler.eu>
Co-committed-by: gekeleda <git@davidgekeler.eu>
2025-11-25 10:27:10 +01:00
Konstantin Pastbin
2954b3b871 Release notes for November R2 hotfix
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-25 08:34:27 +01:00
Konstantin Pastbin
c22bc75fb0 [planet] Update map data to 251123
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-25 12:52:26 +07:00
Jean-Baptiste
45094b0c38 [android] Apply M3 theme like app theme
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-24 21:25:37 +01:00
x7z4w
f4a775a2f9 [android] Delete unused string
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-24 17:46:31 +01:00
Codeberg Translate
25d84b4428 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.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: Woozy <woozy@noreply.codeberg.org>
Co-authored-by: arnyminerz <arnyminerz@noreply.codeberg.org>
Co-authored-by: artnay <artnay@noreply.codeberg.org>
Co-authored-by: jeanbaptisteC <jeanbaptistec@noreply.codeberg.org>
Co-authored-by: ldmpub <ldmpub@noreply.codeberg.org>
Co-authored-by: liilliil <liilliil@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Co-authored-by: zhuk2 <zhuk2@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/Apple AppStore description
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS Plist
Translation: CoMaps/iOS Plurals
Translation: CoMaps/iOS UI Strings
2025-11-24 13:11:07 +00:00
x7z4w
f98a0efa46 [tts] Fix invalid formatting
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-24 11:50:40 +00:00
Jean-Baptiste
e53532ab0b [android] Fix missing capital for the first letter in translations
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-24 09:54:47 +01:00
Jean-Baptiste
df1d4bf67e [tools] Remove prettier script and create doc formatter
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-23 20:22:32 +01:00
x7z4w
6d89a4346d [styles] Colored camp site label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-23 14:10:11 +01:00
Codeberg Translate
971c19a88d [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: focaccina <focaccina@noreply.codeberg.org>
Co-authored-by: gedankenstuecke <gedankenstuecke@noreply.codeberg.org>
Co-authored-by: groam <groam@noreply.codeberg.org>
Co-authored-by: jeanbaptisteC <jeanbaptistec@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: x7z4w <x7z4w@noreply.codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Countries and regions names
Translation: CoMaps/F-Droid app description
Translation: CoMaps/Google Play and Huawei AppGallery descriptions
Translation: CoMaps/Search synonyms / aliases
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-21 18:43:30 +00:00
Jean-Baptiste
ff5ae33f2a [android] Fix size of hint of list selector
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-21 19:43:19 +01:00
Jean-Baptiste
d5f640c6d0 [android] Remove duplicate drawables
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-21 18:11:27 +01:00
Jean-Baptiste
72920bb930 [android] Migrate send note button to Material 3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-21 18:10:25 +01:00
Jean-Baptiste
3b4ab0da89 [doc] Revert changes about release process
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-20 18:01:18 +01:00
Yannik Bloscheck
90ee9e3c0f [drape] Make it possible to hide the name part from the road shield
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-20 16:37:13 +01:00
Bastian Greshake Tzovaras
54c1aeba1e [taginfo] update to state of release 2025-11-19
Signed-off-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
2025-11-20 09:12:07 -03:00
x7z4w
399908b97c [ci] Fix iOS
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-19 22:02:29 +01:00
Jean-Baptiste
1df7848888 [docs] Move release process to documentation
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-19 18:44:49 +01:00
Yannik Bloscheck
84f7687b98 [types] Add name for communication masts
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-19 15:59:45 +01:00
Yannik Bloscheck
a6057af12d [styles] Fix nightclub label color
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-19 15:33:29 +01:00
Codeberg Translate
4b66d56978 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/search-synonyms-aliases/
Translation: CoMaps/Search synonyms / aliases
2025-11-19 12:35:05 +00:00
prashere
6adf01f8de Translated using Weblate (Tamil)
Currently translated at 1.9% (27 of 1406 strings)

Translation: CoMaps/iOS - Map Feature Types
2025-11-19 09:22:47 -03:00
prashere
2c526d34e9 Translated using Weblate (Tamil)
Currently translated at 2.5% (36 of 1405 strings)

Translation: CoMaps/Android - Map Feature Types
2025-11-19 09:22:47 -03:00
Codeberg Translate
e58fe72250 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Weicat <weicat@noreply.codeberg.org>
Co-authored-by: prashere <prashere@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
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
2025-11-19 09:22:38 -03:00
patepelo
698afc4880 [search] improve Spanish search strings
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-19 13:16:19 +01:00
Jean-Baptiste
20a688505a [android] Fix background color of edit buttons on Android 5
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-19 12:32:36 +01:00
x7z4w
b8e77a0404 [android] Fix categories icons fill color for night mode
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-19 09:37:54 +01:00
map-per
07cd1ec4f5 Release notes for 2nd November release
Signed-off-by: map-per <map-per@gmx.de>
2025-11-19 08:17:11 +01:00
Yannik Bloscheck
9b42b08673 [translations] Fixed wrong German search category labels in the interface
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-18 21:29:15 +01:00
Jean-Baptiste
47efaa77d3 [android] Update colors of categories
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-18 19:19:10 +01:00
Codeberg Translate
ec14b3bb85 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Weicat <weicat@noreply.codeberg.org>
Co-authored-by: prashere <prashere@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
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
2025-11-18 17:17:14 +01:00
map-per
1612e6045f [planet] Update map data to 251116
Signed-off-by: map-per <map-per@gmx.de>
2025-11-18 17:13:42 +01:00
Yannik Bloscheck
d20144d4f6 [styles] Fix recycling centres not appearing right
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-18 16:50:56 +01:00
Yannik Bloscheck
06ecf4e54a [styles] Fix background for service bridges at zoom level 15
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-18 15:35:29 +01:00
Codeberg Translate
0bf9dad343 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: demode <demode@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Countries and regions names
Translation: CoMaps/iOS - Map Feature Types
2025-11-18 14:17:05 +00:00
Yannik Bloscheck
12bd86d26d [ios] Match search category colors to map
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-18 15:16:54 +01:00
map-per
5564c449b3 [styles] Adjust sand colors
Signed-off-by: map-per <map-per@gmx.de>
2025-11-18 14:04:23 +01:00
NoelClick
96782ad5b1 [android] Fix crash for 24/7 places in Place Page opening-hours display
Signed-off-by: NoelClick <dev@noel.click>
Co-authored-by: NoelClick <dev@noel.click>
Co-committed-by: NoelClick <dev@noel.click>
2025-11-18 12:40:57 +01:00
map-per
67938cdf31 [styles] Fix vehicle style after icon renaming
Signed-off-by: map-per <map-per@gmx.de>
2025-11-18 12:28:00 +01:00
x7z4w
0e5fa5c501 nit
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-18 12:04:02 +01:00
Codeberg Translate
101faeb2aa [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-17 21:05:24 +00:00
Yannik Bloscheck
6f9ea8a758 [styles] Use smaller taxi icon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-17 22:05:04 +01:00
Yannik Bloscheck
176b11003f [types] Adding nail salon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-17 22:04:58 +01:00
Yannik Bloscheck
ed0728a332 [styles] Improve tree icon
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-17 22:04:53 +01:00
Yannik Bloscheck
f3b105ee33 [drape] Render trees under buildings
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-17 19:10:36 +01:00
Bastian Greshake Tzovaras
dd106df592 [taginfo] Regenerate
Signed-off-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-authored-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
Co-committed-by: Bastian Greshake Tzovaras <bgreshake@googlemail.com>
2025-11-17 19:09:06 +01:00
x7z4w
c25552ce03 [styles] Show toll booth later
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-17 17:00:34 +01:00
Codeberg Translate
40b0023046 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: clacsonduro <clacsonduro@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: matheusgomesms <matheusgomesms@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-17 14:09:31 +00:00
Yannik Bloscheck
efe4570adf [styles] Fix boat rental icon name
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-17 08:54:48 +01:00
Jean-Baptiste
b72d747a5e [android] Add avoid icons in settings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-17 08:28:40 +01:00
Codeberg Translate
1a95097fbb [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
2025-11-16 20:20:56 +00:00
map-per
0243b1e86b [copyright] Add StreetComplete-taginfo-categorize to copyright
Signed-off-by: map-per <map-per@gmx.de>
2025-11-16 21:20:43 +01:00
Codeberg Translate
8f3978e391 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: yannikbloscheck <yannikbloscheck@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/iOS - Map Feature Types
2025-11-16 20:08:15 +01:00
map-per
680d97bc4f [styles] Add natural=sand (#2451)
Signed-off-by: map-per <map-per@gmx.de>

Reviewed-on: https://codeberg.org/comaps/comaps/pulls/2451
Reviewed-by: Yannik Bloscheck <yannikbloscheck@noreply.codeberg.org>
Reviewed-by: Konstantin Pastbin <pastk@noreply.codeberg.org>
Co-authored-by: map-per <map-per@gmx.de>
Co-committed-by: map-per <map-per@gmx.de>
2025-11-16 19:19:58 +01:00
zyphlar
5683606c31 [android] Punctuate complete sentences
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
Co-authored-by: zyphlar <zyphlar@noreply.codeberg.org>
Co-committed-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-16 19:15:08 +01:00
Yannik Bloscheck
3c7eb92b17 [styles] Adding trees
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 18:30:49 +01:00
x7z4w
226b0f03c8 [cmake] Fix Android boost errors
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 18:27:04 +01:00
x7z4w
0a3a4ebd9a [core] Regex refactoring
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 18:27:04 +01:00
map-per
a62f6c0ef6 [translations] Fix translation merge conflict
Signed-off-by: map-per <map-per@gmx.de>
2025-11-16 17:35:29 +01:00
Yannik Bloscheck
ef280c7f89 [styles] Differentiate between different entrances
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 15:22:47 +01:00
Yannik Bloscheck
c49c414ec4 [styles] Added smaller bus stop icons
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 15:16:20 +01:00
Jean-Baptiste
e62196798f [android] Add place holder in phone field
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:52:21 +01:00
Jean-Baptiste
c687c850b8 [android] Reduce padding foreach items in the search view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:51:59 +01:00
Codeberg Translate
f549358f28 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Mickael81 <mickael81@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@noreply.codeberg.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: ghose <ghose@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-16 14:51:41 +01:00
Yannik Bloscheck
e3c8e422d5 [styles] Apply pill shape road sign also to tertiary roads in Austria
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:38:18 +01:00
Yannik Bloscheck
f664138a42 [types] Adding buoys
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:38:02 +01:00
x7z4w
6ae28a0ccf [android] Fix layers button tint
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-16 14:34:46 +01:00
Jean-Baptiste
6cef8e3594 [android] Add new fresh screenshots
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 14:21:41 +01:00
Yannik Bloscheck
ec76982895 [styles] Reduce visbility of service roads
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
17fb4dd855 [styles] Reduce visbility of tram tunnels
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
8c880f00b2 [styles] Decrease visbility of railway tunnels further
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:12:38 +01:00
Yannik Bloscheck
6c02e1d53a [types] Christmas trees
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-16 14:02:08 +01:00
zyphlar
a1944435ae Add French national library archiving info/instructions
Signed-off-by: zyphlar <zyphlar@noreply.codeberg.org>
2025-11-16 12:39:44 +01:00
Jean-Baptiste
5beed2672f [android] Remove custom right to left implementation
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-16 08:45:51 +01:00
x7z4w
64eb8af3c1 [android] Fix dark mode launcher icon
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-15 21:23:48 +01:00
Yannik Bloscheck
316e259ebb [types] Preperations for new education tag
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:40:57 +01:00
Yannik Bloscheck
dce50b2ca6 [types] Adding prep, sailing and flight school
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:40:57 +01:00
Yannik Bloscheck
8db1dd55b5 [generator] Name method parameter more clearly
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
Yannik Bloscheck
14c4d08e32 [generator] Shorten code to avoid unnecessary if condition
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
Yannik Bloscheck
2ae482de76 [generator] Ignore edited status for nearby places during map generation
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 18:32:43 +01:00
NoelClick
5c2e0b5b43 [android] Unify search opening hours formatting with place page
Signed-off-by: NoelClick <dev@noel.click>
2025-11-15 17:49:41 +01:00
Yannik Bloscheck
b2077ecf0b [types] Fix translation keys for soup kitchen and food banks
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-15 12:05:03 +01:00
Codeberg Translate
68ee3f4cda [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: ERYpTION <eryption@noreply.codeberg.org>
Co-authored-by: Edgarsons <edgarsons@noreply.codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Juno Takano <jutty@noreply.codeberg.org>
Co-authored-by: N4ta <codeberg@n4ta.anonaddy.me>
Co-authored-by: Oier <oier@noreply.codeberg.org>
Co-authored-by: Outbreak2096 <outbreak2096@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org>
Co-authored-by: Stephan-P <stephan-p@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: aoxa <aoxa@noreply.codeberg.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: eBug <ebug@noreply.codeberg.org>
Co-authored-by: map-per <map-per@noreply.codeberg.org>
Co-authored-by: metehan <metehan@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Co-authored-by: patepelo <patepelo@noreply.codeberg.org>
Co-authored-by: sunsand <sunsand@noreply.codeberg.org>
Co-authored-by: tace16 <tace16@noreply.codeberg.org>
Co-authored-by: teletext <teletext@noreply.codeberg.org>
Co-authored-by: thesupertechie <thesupertechie@noreply.codeberg.org>
Translate-URL: https://translate.codeberg.org/projects/comaps/android-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios-typestrings/
Translate-URL: https://translate.codeberg.org/projects/comaps/ios/
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/Android UI Strings (SDK)
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 UI Strings
2025-11-15 10:09:37 +00:00
Jean-Baptiste
07ba709939 [android] Increase touch area on text category on PP
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-15 08:00:41 +01:00
map-per
9bfebc2046 Add "Business is vacant"/'disused' option to editor (#526)
Signed-off-by: map-per <map-per@gmx.de>
Co-authored-by: map-per <map-per@gmx.de>
Co-committed-by: map-per <map-per@gmx.de>
2025-11-14 22:10:02 +01:00
Jean-Baptiste
24b498e386 [android] Fix FAB styles not apply
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-14 19:34:23 +01:00
Jean-Baptiste
0a0bb61942 [android] Improve opening_hours layout in the editor
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-14 19:26:33 +01:00
x7z4w
d78fe108ad [tools][styles] Suppress drules diffs output
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-14 14:08:02 +01:00
x7z4w
4aa441101c [tools] Cache python bytecode
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-14 14:08:02 +01:00
Konstantin Pastbin
2d275d9148 [generator] Use more threads to Index Taiwan_*
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-14 13:59:25 +01:00
Konstantin Pastbin
0814b574a9 [core] Add mapgen to default CDNs list
Signed-off-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
2025-11-14 10:04:40 +01:00
patepelo
b4abce822e [search] Improve search terms and synonyms
Signed-off-by: patepelo <developing.anton@gmail.com>
Co-authored-by: patepelo <developing.anton@gmail.com>
Co-committed-by: patepelo <developing.anton@gmail.com>
2025-11-14 10:04:10 +01:00
gekeleda
2e0443097a [android] Improve map language settings
Signed-off-by: gekeleda <git@davidgekeler.eu>
Co-authored-by: gekeleda <git@davidgekeler.eu>
Co-committed-by: gekeleda <git@davidgekeler.eu>
2025-11-14 07:58:47 +01:00
Jean-Baptiste
f6426fe689 [android] Update Add schedule button to M3
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-13 22:26:42 +01:00
Yannik Bloscheck
6296de6ce9 [types] Add day spas
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-13 17:59:17 +01:00
NoelClick
4f63c5fdcf [android] Hide offline explanation after two downloads
Signed-off-by: NoelClick <dev@noel.click>
Co-authored-by: NoelClick <dev@noel.click>
Co-committed-by: NoelClick <dev@noel.click>
2025-11-13 13:32:01 +01:00
x7z4w
e4648fbc1f Revert "[core][drape] Making arrows smooth again"
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-13 11:36:21 +01:00
NoelClick
1de35bb5f8 [android] Adjust phrasing to "Opens on ... / Closes on ..." for clarity
- Update i18n strings following review suggestion.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
7b7df6ff2e [android] Remove unused full "minutes" plural resource
- Keep only `minutes_short` (`%d min`) for compact display.
- Ensures consistency with search UI and avoids redundant i18n strings.

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
33e2f4854e [android] Use 60/15 min short-horizon windows (yellow) for closes/opens
- Closes: Yellow when <= 60 min
- Opens: Yellow when <= 15 min
- Keep compact unit via `plurals/minutes_short`
- Long-horizon cases continue to show "Open / Closed now • Opens / Closes ... at ..."
- Use full weekday names for clarity

Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
5b4fa55e83 [android] Use compact min unit for short opening-hours label
* Replace "minutes" plural with new "minutes_short" (`%d min`) for concise
  display on the place page.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit 5468927a285466a5c5614328a4400abb5182d302)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
83256c4895 [android] Show "Opens / Closes X at Y" using formatter + add i18n strings
- Wire `PlacePageView.refreshOpenState()` to `OpenStateTextFormatter`.
- Keep <= 60 min branch with plurals (“Closes in %d minutes • at HH:mm”).
- Add day hint when next change is not today (“Opens Sat at 09:00”).
- Add localized strings with positional placeholders:
  - `opens_at` / `closes_at` (... `%s`).
  - `opens_day_at` / `closes_day_at` (`%1$s=%day`, `%2$s=%time`).

Refs: #2303

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit be80c7486882ab64a64efc30d0979d3674bbcc29)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
NoelClick
94542456a2 [android] Add OpenStateTextFormatter and JVM tests
- Introduce a tiny, pure formatter for opening-hours labels:
	- `formatHoursMinutes(12/24h)`, `isSameLocalDate()`, `dayShort()`
	- `buildAtLabel(...)` that accepts already-localized templates
- Add JVM unit tests for hour formatting and label selection.

Signed-off-by: NoelClick <dev@noel.click>
(cherry picked from commit df4b5f2281607e5a35b98b1007fb34eabd4aa657)
Signed-off-by: NoelClick <dev@noel.click>
2025-11-12 23:07:53 +01:00
patepelo
dd620c3f0c Add wiki debug command to docs
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-13 02:01:27 +07:00
Jean-Baptiste
a42db17858 [android] Add icon before some settings
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-12 19:13:37 +01:00
patepelo
738d0641ca Add Myanmar Burma synonyms
Signed-off-by: patepelo <developing.anton@gmail.com>
2025-11-12 21:16:34 +07:00
Yannik Bloscheck
4f5f8782fe [types] Adding lifebuoy
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:57 +01:00
Yannik Bloscheck
a886270dda [types] Add emergency access points
Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
2025-11-12 12:25:32 +01:00
x7z4w
66609ff08b [styles] Fix winery label
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-12 10:49:38 +01:00
zyphlar
c8bfeb8e96 Don't error when a temp file doesn't exist
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-11 19:46:22 -08:00
zyphlar
7fc5ed494b [tools] Handle not-yet-generated drules files
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
d9850f506a [docs] Add CDN_SETUP_INSTRUCTIONS.md
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
zyphlar
f16d14e07f [generator] Automate maps generation with Docker and CI/CD
Co-authored-by: Konstantin Pastbin <konstantin.pastbin@gmail.com>
Signed-off-by: zyphlar <zyphlar@gmail.com>
2025-11-12 02:26:27 +01:00
Codeberg Translate
7852cdb5a5 [strings] Update from Codeberg Translate
Co-authored-by: Codeberg Translate <translate@codeberg.org>
Co-authored-by: JanezPavelZebovec <janezpavelzebovec@noreply.codeberg.org>
Co-authored-by: Linus_W_Frische <linus_w_frische@noreply.codeberg.org>
Co-authored-by: Prefill add-on <noreply-addon-prefill@weblate.org>
Co-authored-by: Weblate <noreply-mt-weblate@weblate.org>
Co-authored-by: dobridabar <dobridabar@noreply.codeberg.org>
Co-authored-by: javnik <javnik@noreply.codeberg.org>
Co-authored-by: ovl-005 <ovl-005@noreply.codeberg.org>
Translation: CoMaps/Android - Map Feature Types
Translation: CoMaps/Android UI Strings
Translation: CoMaps/iOS - Map Feature Types
Translation: CoMaps/iOS UI Strings
2025-11-12 00:09:38 +00:00
x7z4w
9a96096066 [android] Remove routing options item divider
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
2025-11-11 19:18:25 +01:00
Wojciech Sipak
f72c4a28d9 fix openlr helpers build
See the commit e0f8e043bb
apparently the code was never tested

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Wojciech Sipak
68bb78b00d fix levenshtein dfa test build
The constuctor argument type was modified without
any adjustments to the callers.

See the commit
a0a5459b15

Signed-off-by: Wojciech Sipak <wsipak@protonmail.com>
2025-11-11 18:46:49 +01:00
Jean-Baptiste
b9d4f082de [android] Rework clear and close icon on Android
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:55:28 +01:00
Jean-Baptiste
7e40a0e642 [android] Fix drawable used in floating marker view
Signed-off-by: Jean-Baptiste <jeanbaptiste.charron@outlook.fr>
2025-11-11 17:51:53 +01:00
731 changed files with 21351 additions and 5973 deletions

View File

@@ -2,44 +2,130 @@ name: map-generator
on: on:
workflow_dispatch: # Manual trigger workflow_dispatch: # Manual trigger
inputs: inputs:
jobs: map-generator-test:
description: 'Which job(s) to run right now?' description: 'Test (non-prod) generation?'
required: true required: false
default: 'all' default: false
type: choice type: boolean
options: # run-copy-coasts:
- all # description: 'Copy last used coastlines?'
- copy-coasts # required: false
- planet # default: true
- wiki # type: boolean
- isolines run-isolines:
- subways description: 'Update altitude isolines?'
- tiger required: false
- maps default: false
type: boolean
run-tiger:
description: 'Update TIGER address data?'
required: false
default: true
type: boolean
run-planet-pbf:
description: 'Update PBF planet (for Wiki & subways)?'
required: false
default: true
type: boolean
run-subways:
description: 'Update subways?'
required: false
default: true
type: boolean
run-wiki:
description: 'Update Wikipedia descriptions?'
required: false
default: true
type: boolean
run-planet-o5m:
description: 'Update O5M planet (for mapgen)?'
required: false
default: true
type: boolean
run-mapgen:
description: 'Run maps generation?'
required: false
default: true
type: boolean
map-generator-continue:
description: 'Continue previous map generation?'
required: false
default: false
type: boolean
# map-generator-countries:
# description: 'Generate specific MWMs? (i.e. "US_New York_*, foo")'
# required: false
# type: string
run-upload:
description: 'Upload latest maps to CDN?'
required: false
default: false
type: boolean
# reset:
# description: 'Reset part of the system?'
# required: false
# default: 'no'
# type: choice
# options:
# - 'no'
# - wiki-ratelimit
## RCLONE_CONF is multi-line text containing keys and credentials for us2,ru1,fi1,de1 servers
env: env:
RCLONE_CONF: ${{ secrets.RCLONE_CONF }}
WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }} WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }}
WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }} WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }}
S3_KEY_ID: ${{ secrets.S3_KEY_ID }} ZULIP_BOT_EMAIL: ${{ secrets.ZULIP_BOT_EMAIL }}
S3_SECRET_KEY: ${{ secrets.S3_SECRET_KEY }} ZULIP_API_KEY: ${{ secrets.ZULIP_API_KEY }}
S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} MWMTEST: ${{ inputs.map-generator-test }}
S3_BUCKET: ${{ secrets.S3_BUCKET }} MWMCONTINUE: ${{ inputs.map-generator-continue }}
SFTP_USER: ${{ secrets.SFTP_USER }} # MWMCOUNTRIES: ${{ inputs.map-generator-countries }}
SFTP_PASSWORD: ${{ secrets.SFTP_PASSWORD }}
SFTP_HOST: ${{ secrets.SFTP_HOST }}
SFTP_PATH: ${{ secrets.SFTP_PATH }}
DEBIAN_FRONTEND: noninteractive DEBIAN_FRONTEND: noninteractive
TZ: Etc/UTC TZ: Etc/UTC
jobs: jobs:
clone-repos:
name: Clone Git Repos
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal:/mnt/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Checkout main repo
shell: bash
run: |
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
cd ~
git clone --depth 1 --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
- name: Checkout wikiparser repo
shell: bash
run: |
cd ~
git clone --depth 1 --single-branch https://codeberg.org/comaps/wikiparser.git
- name: Checkout subways repo
shell: bash
run: |
cd ~
git clone --depth 1 --single-branch https://codeberg.org/comaps/subways.git
copy-coasts: copy-coasts:
if: inputs.jobs == 'copy-coasts' || inputs.jobs == 'all' # if: inputs.run-copy-coasts
name: Copy Previously Generated Coasts name: Copy Previously Generated Coasts
runs-on: mapfilemaker runs-on: mapfilemaker
container: container:
image: ubuntu:latest image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes: volumes:
- /media/4tbexternal:/media/4tbexternal - /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency: concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
@@ -47,336 +133,445 @@ jobs:
- name: Copy Coasts - name: Copy Coasts
shell: bash shell: bash
run: | run: |
if [ -f /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then echo "WorldCoasts available:"
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /media/4tbexternal/osm-planet/latest_coasts.geom ls -al /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.*
cp /media/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /media/4tbexternal/osm-planet/latest_coasts.rawgeom
if [ -f /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
echo "Before:"
ls -al /home/planet/latest_coasts*
# TODO: don't copy coasts from test generations
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /home/planet/latest_coasts.geom
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /home/planet/latest_coasts.rawgeom
echo "After:"
ls -al /home/planet/latest_coasts*
else
echo "No WorldCoasts found."
fi fi
update-planet: update-isolines:
if: inputs.jobs == 'planet' || inputs.jobs == 'all' if: inputs.run-isolines
name: Update Planet name: Update Isolines
runs-on: mapfilemaker runs-on: mapfilemaker
needs:
- clone-repos
container: container:
image: ubuntu:latest image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes: volumes:
- /media/4tbexternal:/media/4tbexternal - /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency: concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Install dependencies - uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
# TODO: we only need to update these if our SRTM or countries change
# TODO: after update, verify that sizable files exist: /home/planet/isolines/*.isolines
- name: Update Isolines
shell: bash
# TODO: preserve previous isolines version?
# TODO: cleanup the tmp-tiles dir after completion
run: |
cd ~/comaps/
./tools/unix/build_omim.sh -p ~ -R topography_generator_tool
rm -rf /home/planet/isolines/
mkdir /home/planet/isolines/
~/omim-build-relwithdebinfo/topography_generator_tool \
--profiles_path=./data/conf/isolines/isolines-profiles.json \
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
--tiles_isolines_out_dir=/home/planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=/home/planet/isolines/ \
--data_dir=./data/ \
--srtm_path=/home/planet/SRTM-patched-europe/ \
--threads=96
- name: Check isolines
shell: bash shell: bash
run: | run: |
apt-get update -y NUMISO=$(ls -al /home/planet/isolines/*.isolines | wc -l)
apt-get install -y pyosmium osmium-tool python3-venv python3-pip wget2 echo "Found $NUMISO isolines"
rm -f /usr/lib/python*/EXTERNALLY-MANAGED if [ $NUMISO -lt 10 ]; then
pip3 install "protobuf<4" echo "ERROR: Did generation fail?"
exit 1
fi
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Isolines are done!'
update-tiger:
if: inputs.run-tiger
name: Update TIGER
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Build address_parser
shell: bash
run: |
cd ~/comaps
#rm -rf ~/omim-build-relwithdebinfo/CMakeCache.txt
#rm -rf ~/omim-build-relwithdebinfo/CMakeFiles
./tools/unix/build_omim.sh -p ~ -R address_parser_tool
- name: Update TIGER from Nominatim
shell: bash
# TODO: use curl instead of wget2
run: |
# TODO: maybe remove old osm-planet/tiger first?
cd /home/planet/
mkdir -p tiger
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz
cd ~/comaps
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | ~/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
update-planet-pbf:
if: inputs.run-planet-pbf
name: Update PBF Planet
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Download Planet File if Absent - name: Download Planet File if Absent
shell: bash shell: bash
# TODO: replace wget2 with curl -Z
run: | run: |
if [ ! -d /media/4tbexternal/osm-planet/planet/ ]; then if [ ! -d /home/planet/planet/ ]; then
mkdir -p /media/4tbexternal/osm-planet/planet/ mkdir -p /home/planet/planet/
fi fi
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
cd /media/4tbexternal/osm-planet/planet/ cd /home/planet/planet/
wget2 --verbose --progress=bar --continue --debug https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf wget2 --verbose --progress=bar --continue https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
else
echo "planet-latest.osm.pbf was found, raw download not required."
fi fi
- name: Update Planet - name: Update PBF Planet
shell: bash shell: bash
run: | run: |
cd /media/4tbexternal/osm-planet/planet/ cd /home/planet/planet/
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -vv --size 16384 rm -f planet-latest-new.osm.pbf
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --size 16384
mv planet-latest-new.osm.pbf planet-latest.osm.pbf mv planet-latest-new.osm.pbf planet-latest.osm.pbf
- name: Converting planet-latest.osm.pbf to planet.o5m - name: Notify Zulip
run: /root/OM/osmctools/osmconvert planet-latest.osm.pbf -o=planet.o5m run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=PBF planet update is done!'
wiki-update: update-subways:
if: inputs.jobs == 'wiki' || inputs.jobs == 'all' if: inputs.run-subways
name: Update Wikipedia name: Update Subways
runs-on: mapfilemaker runs-on: mapfilemaker
needs:
- clone-repos
container: container:
image: ubuntu:latest image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes: volumes:
- /media/4tbexternal:/media/4tbexternal - /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency: concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Install dependencies - uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Update Subways
shell: bash shell: bash
run: | run: |
apt-get update -y cd ~/comaps/
apt-get install -y jq curl wget2 rustc cargo git ca-certificates cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
- name: Clone wikiparser if necessary ./tools/unix/maps/generate_subways.sh
shell: bash - name: Notify Zulip
run: | run: |
if [ ! -d /media/4tbexternal/wikiparser ]; then curl -X POST https://comaps.zulipchat.com/api/v1/messages \
cd /media/4tbexternal -u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
git clone https://codeberg.org/comaps/wikiparser.git --data-urlencode type=stream \
fi --data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Subways are done!'
wiki-update:
if: inputs.run-wiki
name: Update Wikipedia
runs-on: mapfilemaker
needs:
- clone-repos
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Check for planet file - name: Check for planet file
shell: bash shell: bash
# TODO: remove debug output
run: | run: |
if [ ! -f /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf ]; then if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
echo "ERROR: No file at /media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf" echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
ls -al /media/4tbexternal/ ls -al /home/planet/
ls -al /media/4tbexternal/osm-planet/ ls -al /home/planet/planet/
ls -al /media/4tbexternal/osm-planet/planet/ exit 1
fi
- name: Only get new dumps once per 30 days
shell: bash
run: |
if [[ '${{ inputs.reset }}' == 'wiki-ratelimit' ]]; then
echo "Bypassing wiki rate limit upon request."
exit 0
fi
datediff() {
d1=$(date -d "$1" +%s)
d2=$(date -d "$2" +%s)
echo $(( (d1 - d2) / 86400 ))
}
RECENTDUMPDATE=$(find /home/planet/wikipedia/dumps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
TODAY=$(date +%Y%m%d)
DATEDIFF=$(datediff $TODAY $RECENTDUMPDATE)
if [ $DATEDIFF -lt 30 ]; then
echo "ERROR: The most recent wiki dump is from $RECENTDUMPDATE, $DATEDIFF days ago. Wikimedia limits users to 15 snapshot requests per month."
echo "Set the 'reset' option to 'wiki-ratelimit' to bypass this."
ls -al /home/planet/wikipedia/dumps/
exit 1 exit 1
fi fi
- name: Update Wikipedia from Enterprise API - name: Update Wikipedia from Enterprise API
shell: bash shell: bash
run: | run: |
mkdir -p /media/4tbexternal/osm-planet/wikipedia/dumps #todo: curl in download.sh can fail when rate limited and even save error messages to the output. need to validate.
mkdir -p /media/4tbexternal/osm-planet/wikipedia/build #downloading all languages can also trigger rate limits or fail as well. needs work.
cd /media/4tbexternal/wikiparser #also: a failure to download means a failure to build, and could result in no wiki descriptions etc.
#also-also: do we want to remove old wiki data in planet between builds? pastk: no need, its being updated / augmented
mkdir -p /home/planet/wikipedia/dumps
mkdir -p /home/planet/wikipedia/build
cd ~/wikiparser
ls -al ls -al
echo "Downloading ..." echo "Downloading ..."
./download.sh /media/4tbexternal/osm-planet/wikipedia/dumps ./download.sh /home/planet/wikipedia/dumps
ls -al /home/planet/wikipedia/dumps/*
echo "Running ..." echo "Running ..."
./run.sh /media/4tbexternal/osm-planet/wikipedia/build \ ./run.sh /home/planet/wikipedia/build \
/media/4tbexternal/osm-planet/planet/planet-latest.osm.pbf \ /home/planet/planet/planet-latest.osm.pbf \
/media/4tbexternal/osm-planet/wikipedia/dumps/latest/*.tar.gz /home/planet/wikipedia/dumps/latest/*.tar.gz
echo "DONE" echo "DONE"
- name: Check that the latest dumps are present, recent, and not super tiny
shell: bash
run: |
FAILCHECK=0
update-isolines: # Check all .tar.gz files in /home/planet/wikipedia/dumps/latest/
if: inputs.jobs == 'isolines' || inputs.jobs == 'all' for file in /home/planet/wikipedia/dumps/latest/*.tar.gz; do
name: Update Isolines # Check if file exists (handles case where glob doesn't match)
[ -e "$file" ] || continue
# Get file size in MB and modification time in days
size_mb=$(stat -f%z "$file" 2>/dev/null | awk '{print int($1/1024/1024)}' || stat -c%s "$file" | awk
'{print int($1/1024/1024)}')
days_old=$(find "$file" -mtime -7 | wc -l)
# Verify conditions
if [ "$size_mb" -lt 100 ]; then
echo "FAIL: $file is only ${size_mb}MB (< 100MB)"
FAILCHECK=1
elif [ "$days_old" -eq 0 ]; then
echo "FAIL: $file is older than 7 days"
ls -al $file
FAILCHECK=1
else
echo "PASS: $file (${size_mb}MB, modified within 7 days)"
fi
done
exit $FAILCHECK
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Wiki update is done!'
update-planet-o5m:
if: inputs.run-planet-o5m
name: Update O5M Planet
runs-on: mapfilemaker runs-on: mapfilemaker
container: container:
image: ubuntu:latest image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes: volumes:
- /media/4tbexternal:/media/4tbexternal - /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency: concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Install dependencies - name: Check for O5M Planet File
shell: bash shell: bash
run: | run: |
apt-get update -qq \ if [ ! -f /home/planet/planet/planet.o5m ]; then
&& apt-get install -y --no-install-recommends \ echo "WARN: No file at /home/planet/planet/planet.o5m"
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
apt-get update -qq && apt-get install -y --no-install-recommends git
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Update Isolines
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
./tools/unix/build_omim.sh -R topography_generator_tool
rm -rf ../osm-planet/isolines/
mkdir ../osm-planet/isolines/
../omim-build-relwithdebinfo/topography_generator_tool \
--profiles_path=./data/conf/isolines/isolines-profiles.json \
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
--tiles_isolines_out_dir=../osm-planet/isolines/tmp-tiles/ \
--countries_isolines_out_dir=../osm-planet/isolines/ \
--data_dir=./data/ \
--srtm_path=../osm-planet/SRTM-patched-europe/ \
--threads=22
update-subways: if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
if: inputs.jobs == 'subways' || inputs.jobs == 'all' echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
name: Update Subways ls -al /home/planet/
runs-on: mapfilemaker ls -al /home/planet/planet/
container: exit 1
image: ubuntu:latest
volumes:
- /media/4tbexternal:/media/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends curl osmctools osmium-tool python3-venv ca-certificates git python3-pip
rm -f /usr/lib/python*/EXTERNALLY-MANAGED
pip3 install "protobuf<4"
- name: Clone subways if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/subways ]; then
cd /media/4tbexternal
git clone https://codeberg.org/comaps/subways.git
fi fi
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Update Subways
shell: bash
run: |
cd /media/4tbexternal/comaps-init/
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
./tools/unix/maps/generate_subways.sh
update-tiger: echo "Converting planet-latest.osm.pbf to planet.o5m"
if: inputs.jobs == 'tiger' || inputs.jobs == 'all' cd /home/planet/planet/
name: Update TIGER osmconvert -v --drop-author --drop-version --hash-memory=4000 planet-latest.osm.pbf -o=planet.o5m
runs-on: mapfilemaker echo "Conversion is done."
container:
image: ubuntu:latest
volumes:
- /media/4tbexternal:/media/4tbexternal
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- name: Install dependencies
shell: bash
run: |
apt-get update -qq && apt-get install -y --no-install-recommends \
build-essential \
clang \
cmake \
ninja-build \
ca-certificates \
git \
wget2
- name: Clone main repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi fi
- name: Build address_parser - name: Update O5M planet
shell: bash
run: | run: |
cd /media/4tbexternal/comaps-init echo "Starting..."
rm -rf ../omim-build-relwithdebinfo/CMakeCache.txt cd /home/planet/planet/
rm -rf ../omim-build-relwithdebinfo/CMakeFiles rm -f planet-new.o5m
./tools/unix/build_omim.sh -R address_parser_tool osmupdate -v --drop-author --drop-version --hash-memory=4000 --max-merge=32 --out-o5m planet.o5m planet-new.o5m
- name: Update TIGER from Nominatim mv planet-new.o5m planet.o5m
shell: bash echo "Done."
- name: Notify Zulip
run: | run: |
cd /media/4tbexternal/osm-planet/ curl -X POST https://comaps.zulipchat.com/api/v1/messages \
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz -u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
tar -xOzf tiger-nominatim-preprocessed-latest.csv.tar.gz | /media/4tbexternal/omim-build-relwithdebinfo/address_parser_tool --output_path=./tiger --data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=O5M planet update is done!'
generate-maps: generate-maps:
if: inputs.jobs == 'maps' || inputs.jobs == 'all' if: inputs.run-mapgen
name: Generate Maps name: Generate Maps
runs-on: mapfilemaker runs-on: mapfilemaker
needs:
- clone-repos
timeout-minutes: 40320
container: container:
image: ubuntu:latest image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes: volumes:
- /media/4tbexternal:/media/4tbexternal - /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
options: --ulimit nofile=262144:262144 options: --ulimit nofile=262144:262144
concurrency: concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }} group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true cancel-in-progress: true
steps: steps:
- name: Install dependencies - uses: actions/cache@v4
shell: bash with:
run: | path: "~"
apt-get update -qq \ key: cache-${{ github.run_id }}-${{ github.run_attempt }}
&& apt-get install -y --no-install-recommends \
curl \
osmctools \
rclone \
git \
ca-certificates \
openssh-client \
sshpass \
vim \
wget \
build-essential \
clang \
cmake \
ninja-build \
python3 \
python3-pip \
python3.12-venv \
qt6-base-dev \
qt6-positioning-dev \
libc++-dev \
libfreetype-dev \
libglvnd-dev \
libgl1-mesa-dev \
libharfbuzz-dev \
libicu-dev \
libqt6svg6-dev \
libqt6positioning6-plugins \
libqt6positioning6 \
libsqlite3-dev \
libxrandr-dev \
libxinerama-dev \
libxcursor-dev \
libxi-dev \
zlib1g-dev
- name: Clone repo if necessary
shell: bash
run: |
if [ ! -d /media/4tbexternal/comaps-init ]; then
cd /media/4tbexternal
git clone --recurse-submodules --shallow-submodules -b rebase-generator-pastk-wb251014 --single-branch https://codeberg.org/comaps/comaps.git comaps-init
fi
- name: Make output folders if necessary - name: Make output folders if necessary
shell: bash shell: bash
run: | run: |
if [ ! -d /media/4tbexternal/osm-maps ]; then if [ ! -d /mnt/4tbexternal/osm-maps ]; then
mkdir -p /media/4tbexternal/osm-maps mkdir -p /mnt/4tbexternal/osm-maps
fi fi
- name: Get SRTM if necessary - name: Get SRTM if necessary
# TODO: it should be a separate step like Wiki or isolines
shell: bash shell: bash
run: | run: |
if [ ! -d /media/4tbexternal/osm-planet/SRTM-patched-europe/ ]; then if [ ! -d /home/planet/SRTM-patched-europe/ ]; then
echo "ERROR: NO SRTM" echo "ERROR: NO SRTM"
exit 1 exit 1
fi fi
- name: Symlink paths for repo scripts
shell: bash
run: |
mkdir -p /root/OM
ln -s /media/4tbexternal/comaps-init /root/OM/organicmaps
ln -s /media/4tbexternal/osm-planet /home/planet
ln -s /media/4tbexternal/osm-maps /root/OM/maps_build
- name: Run docker_maps_generator.sh - name: Run docker_maps_generator.sh
shell: bash shell: bash
run: | run: |
cd /root/OM/organicmaps cd ~/comaps
./tools/unix/docker_maps_generator.sh bash ./tools/unix/maps/docker_maps_generator.sh
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Generator is done!'
upload-maps:
if: inputs.run-upload
name: Upload Maps
runs-on: mapfilemaker
container:
image: codeberg.org/comaps/maps_generator:f6d53d54f794
volumes:
- /mnt/4tbexternal/:/mnt/4tbexternal/
- /mnt/4tbexternal/osm-planet:/home/planet
concurrency:
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
steps:
- uses: actions/cache@v4
with:
path: "~"
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- name: Write config file
run: |
mkdir -p ~/.config/rclone/
echo "${{ secrets.RCLONE_CONF }}" > ~/.config/rclone/rclone.conf
- name: Upload map files to CDNs
shell: bash
run: |
shopt -s nullglob
buildfolder=$(find /mnt/4tbexternal/osm-maps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f5)
builddate=$(find /mnt/4tbexternal/osm-maps/*/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
mwmfiles=( /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm )
if (( ${#mwmfiles[@]} )); then
echo "<$(date +%T)> Uploading maps from $buildfolder/$builddate..."
cd ~/comaps/tools/unix/maps
./upload_to_cdn.sh /mnt/4tbexternal/osm-maps/$buildfolder/$builddate
echo "<$(date +%T)> Finished uploading maps from $buildfolder/$builddate."
else
echo "<$(date +%T)> No MWM files in /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm, not uploading maps."
echo "<$(date +%T)> Found top level: $(ls -alt /mnt/4tbexternal/osm-maps/*)"
echo "<$(date +%T)> Found second level: $(ls -alt /mnt/4tbexternal/osm-maps/$buildfolder/*)"
fi
- name: Notify Zulip
run: |
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
--data-urlencode type=stream \
--data-urlencode 'to="DevOps"' \
--data-urlencode topic=codeberg-bot \
--data-urlencode 'content=Upload is done!'

View File

@@ -8,14 +8,14 @@ on:
jobs: jobs:
ios-check: ios-check:
name: Build iOS name: Build iOS
runs-on: macos-15 runs-on: macos-26
env: env:
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer DEVELOPER_DIR: /Applications/Xcode_26.1.app/Contents/Developer
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII. LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
LANGUAGE: en_US.UTF-8 LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8 LC_ALL: en_US.UTF-8
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
SIMULATOR_DEVICE: 'iPhone 16 Pro Max' SIMULATOR_DEVICE: 'iPhone 17 Pro Max'
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
@@ -31,6 +31,9 @@ jobs:
brew install qt \ brew install qt \
optipng optipng
pip3 install "protobuf<3.21" --break-system-packages pip3 install "protobuf<3.21" --break-system-packages
xcodebuild -downloadComponent metalToolchain
xcodebuild -downloadPlatform iOS
- name: Checkout sources - name: Checkout sources
uses: actions/checkout@v4 uses: actions/checkout@v4
@@ -42,7 +45,7 @@ jobs:
shell: bash shell: bash
run: ./configure.sh run: ./configure.sh
- name: Configure XCode cache - name: Configure Xcode cache
uses: irgaly/xcode-cache@v1 uses: irgaly/xcode-cache@v1
with: with:
key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }} key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }}

5
.gitignore vendored
View File

@@ -9,6 +9,7 @@ Makefile.Release
object_script.*.Debug object_script.*.Debug
object_script.*.Release object_script.*.Release
compile_commands.json compile_commands.json
*.local.*
stxxl.errlog stxxl.errlog
stxxl.log stxxl.log
@@ -187,10 +188,6 @@ tools/python/maps_generator/var/etc/map_generator.ini
tools/python/routing/etc/*.ini tools/python/routing/etc/*.ini
tools/unix/maps/settings.sh tools/unix/maps/settings.sh
# Helpers
/node_modules/
/package-lock.json
# Visual Studio # Visual Studio
.vs .vs

View File

@@ -114,19 +114,6 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
add_compile_options(-fno-omit-frame-pointer) add_compile_options(-fno-omit-frame-pointer)
endif() endif()
# Linux GCC LTO plugin fix.
if (PLATFORM_LINUX AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_BUILD_TYPE MATCHES "^Rel"))
# To force errors if LTO was not enabled.
add_compile_options(-fno-fat-lto-objects)
# To fix ar and ranlib "plugin needed to handle lto object".
string(REGEX MATCH "[0-9]+" GCC_MAJOR_VERSION ${CMAKE_CXX_COMPILER_VERSION})
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}*/liblto_plugin.so)
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
endif()
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
if (PLATFORM_LINUX OR PLATFORM_ANDROID) if (PLATFORM_LINUX OR PLATFORM_ANDROID)
@@ -222,6 +209,9 @@ if (PLATFORM_DESKTOP AND NOT WITH_SYSTEM_PROVIDED_3PARTY)
include_directories("${PROJECT_BINARY_DIR}/3party/gflags/include") include_directories("${PROJECT_BINARY_DIR}/3party/gflags/include")
endif() endif()
# Fix for #include <boost/regex.hpp>
include_directories("${OMIM_ROOT}/3party/boost")
# Used in qt/ and shaders/ # Used in qt/ and shaders/
find_package(Python3 REQUIRED COMPONENTS Interpreter) find_package(Python3 REQUIRED COMPONENTS Interpreter)

View File

@@ -1,15 +1,16 @@
This file contains a list of people who have contributed to this project. This file contains a list of people who have contributed to this project.
Its not neccesarily comprehensive. It is not necessarily comprehensive as contributors must manually add themselves.
Feel free to add yourself here along with your first contribution! Feel free to add yourself here along with your first contribution!
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
CoMaps contributors: CoMaps contributors:
(in alphabetic order) (in alphabetical order)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Bastian Greshake Tzovaras Bastian Greshake Tzovaras
clover sage clover sage
Harry Bond <me@hbond.xyz> Harry Bond <me@hbond.xyz>
thesupertechie
vikiawv vikiawv
Yannik Bloscheck Yannik Bloscheck

View File

@@ -377,6 +377,7 @@ play {
track.set('production') track.set('production')
defaultToAppBundles.set(true) defaultToAppBundles.set(true)
releaseStatus.set(ReleaseStatus.IN_PROGRESS) releaseStatus.set(ReleaseStatus.IN_PROGRESS)
userFraction.set(0.2d) // Rollout to 20% of users
serviceAccountCredentials.set(file('google-play.json')) serviceAccountCredentials.set(file('google-play.json'))
} }

View File

@@ -0,0 +1,32 @@
Una aplicació de mapes gratuïta i de codi obert dirigida per la comunitat basada en dades d'OpenStreetMap i reforçada amb el compromís amb la transparència, la privadesa i la no ànim de lucre. CoMaps és una derivació/fork d'Organic Maps, que al seu torn és una derivació de Maps.ME.
Llegiu sobre els motius del projecte i la seva direcció a <b><i>codeberg.org/comaps</i></b>.
Uneix-te a la comunitat i ajuda a crear la millor aplicació de mapes
• Utilitza l'aplicació i difon-la
• Dona comentaris i informa de problemes
• Actualitza les dades del mapa a l'aplicació o al lloc web d'OpenStreetMap
‣ <b>Enfocat fora de línia</b>: Planifica i navega pel teu viatge a l'estranger sense necessitat de servei mòbil, cerca punts de referència mentre fas una excursió llunyana, etc. Totes les funcions de l'aplicació estan dissenyades per funcionar fora de línia.
‣ <b>Respecte a la privadesa</b>: L'aplicació està dissenyada tenint en compte la privadesa: no identifica persones, no fa seguiment i no recopila informació personal. Sense anuncis.
‣ <b>Senzill i polit</b>: funcions essencials fàcils d'utilitzar que simplement funcionen.
‣ <b>Estalvia bateria i espai</b>: No consumeix bateria com altres aplicacions de navegació. Els mapes compactes estalvien espai preciós al telèfon.
‣ <b>Gratuït i creat per la comunitat</b>: Gent com tu ha ajudat a crear l'aplicació afegint llocs a OpenStreetMap, provant i donant comentaris sobre les funcions i aportant les seves habilitats de desenvolupament i diners.
‣ <b>Presa de decisions i finances obertes i transparents, sense ànim de lucre i de codi obert.</b>
<b>Característiques principals</b>:
• Mapes detallats descarregables amb llocs que no estan disponibles amb Google Maps
• Mode exterior amb rutes de senderisme destacades, càmpings, fonts d'aigua, pics, corbes de nivell, etc.
• Senders per caminar i carrils bici
• Punts d'interès com restaurants, gasolineres, hotels, botigues, llocs d'interès i molts més
• Cerca per nom, adreça o categoria de punt d'interès
• Navegació amb anuncis de veu per caminar, anar amb bicicleta o conduir
• Marca els teus llocs preferits amb un sol toc
• Articles de la Viquipèdia fora de línia
• Capa i indicacions de trànsit de metro
• Enregistrament de rutes
• Exporta i importa marcadors i rutes en formats KML, KMZ i GPX
• Un mode fosc per utilitzar durant la nit
• Millora les dades del mapa per a tothom mitjançant un editor bàsic integrat
<b>La llibertat és aquí</b>
Descobreix el teu viatge, navega pel món amb la privadesa i la comunitat al capdavant!

View File

@@ -0,0 +1,33 @@
En fællesskabdrevet og åben source kortapp, baseret på kortdata fra OpenStreetMap og styrket i forpligtelsen til værdierne gennemsigtighed, privatlivets fred, og non-profit. CoMaps udspringer af Organic Maps, som selv udsprang af Maps.ME.
Læs mere om grundlaget for projektet og dets udviklingsretnign på <b><i>codeberg.org/comaps</i></b>.
Slut dig til fælleskabet og hjælp til med at bygge den bedste kortapp i verden.
• Brug appen og fortæl andre om den
• Giv feedback anmeld fejl
• Opdater kortdata i appen eller på OpenStreetMap-hjemmesiden.
‣ <b>Offlinefokuseret</b>: Planlæg din rute og find vej i udlandet uden brug af mobildata, søg og find afsidesliggende mål på en afsidesliggende vandretur, mm. Alle funktioner er designet til at fungere uden internetforbindelse.
‣ <b>Respekt for privatlivets fred</b>: Appen er designet med henblik på at respektere dit privatliv den identificerer dig ikke, indeholder ingen sporingsmekanismer, og insamler ingen personlig information. Appen er reklamefri.
‣ <b>Enkel og elegant</b>: de essentielle funktioner er nemme at bruge, og de virker bare.
‣ <b>Sparer på batteriet og på lagerpladsen</b>: Dræner ikke dit batteri hurtigt, som andre kortapps. De kompakte kortfiler minimerer varigt lagerpladsforbrug.
‣ <b>Gratis og bygget i fællesskab</b>: Folk som dig har hjulpet med denne app ved at tilføje steder til OpenStreetMap, ved at teste appens funktioner og give feedback på dem og ved at bidrage til udviklingen af appen med deres tid og penge.
‣ <b>Åben og gennemsigtig beslutningstagningsproces og finanser, non-profit, og fuldt ud åben source.</b>
<b>Hovedfunktioner</b>
• Hent detaljerede kort, der indeholder steder som ikke findes i mange kommericelle kort.
• En frilufts-tilstand med markede vandrestier, teltpladser, kilder, bjerg- og bakketoppe, højdekonturlinjer, mm.
• Gangstier og cykelstier
• Steder, der kan besøges, som f.eks. restauranter, tankstationer, hoteller, butikker, seværdigheder og mange andre.
• Søg efter stednavn, adresse, eller type af sted.
• Gem dine yndlingssteder som bogmærker med et enkelt tryk.
• iCloud synkronisering af bogmærker og optagede spor.
• Offline artikler fra Wikipedia.
• Metro-lag med navigation.
• Optagelse af spor.
• Eksport og import af bogmærker og spor i formaterne KML, KMZ og GPX.
• Mørk tilstand til brug om natten.
• Mulighed for at forbedre kortet vha. en indbygget editor.
• CarPlay understøttes.
<b>Friheden er ankommet</b>
Opdag din rejse, find vej i verden med privatliv og fællesskab i førersædet!

View File

@@ -1,8 +1,10 @@
• OpenStreetMap-Daten vom 4. November • OpenStreetMap-Daten vom 9. Dezember
Aktualisierte Karten-Icons, inkl. Farben für Unterhaltungs-, Sport- & andere Unternehmen Material 3 Design
• Informationen zu Steckdosen an EV-Ladestationen • Im OSM-Editor können nun Ladestationen hinzugefügt werden
• Symbole für Sportzentren, Veranstaltungsorte, Massagesalons, Gästehäuser und einige stillgelegte Unternehmen • Schuko und Typ E Ladestationen hinzugefügt
• Verbesserungen bei der Suche • Verbesserte Suchvorschläge
Behebung eines Absturzes bei der Suche Litauische und lettische Sprachankündigungen
Verbesserte Sprachführung während der Navigation Die Fahranweisungen wurden vergrößert
Weitere Änderungen finden in unseren Codeberg-Versionshinweisen! • Der Zoomlevel passt sich an die Distanz zur nächsten Abbiegung an
• Neue Anordnung der Einstellungen
Weitere Einzelheiten auf codeberg.org/comaps/comaps/releases

Binary file not shown.

Before

Width:  |  Height:  |  Size: 628 KiB

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 357 KiB

View File

@@ -1,8 +1,10 @@
• OpenStreetMap data as of November 4 • OpenStreetMap data as of December 9
Recategorized map icons including some new colors for entertainment, sports and other businesses Use Material 3 themes
Display info about available sockets on charging stations Support charging sockets in OSM Editor
• Added bandstands, backless benches and loungers • Added schuko/type-E charge sockets
New icons for different sport centres, event venues, massage salons, guest houses and some disused businesses Improved search results ranking
Multiple search improvements and crash fix Enabled Lithuanian and Latvian in voice announcements
• Improved voice guidance during navigation • Improved size of driving indications
Check our Codeberg release notes for more changes! • Base zoom level on distance to next turn
• Reordered settings
More details on codeberg.org/comaps/comaps/releases

View File

@@ -0,0 +1,32 @@
Komunum-gvidata senpaga kaj malfermkoda mapapliko bazita sur OpenStreetMap-datumoj kaj fortigita per komitado al transparencio, privateco kaj ne-lucro. CoMaps estas forko/spin-off de Organic Maps, kiu turne estas forko de Maps.ME.
Legu plu pri la kialoj por la projekto kaj ĝia direkto ĉe <b><i>codeberg.org/comaps</i></b>.
Aliĝu al la komunumo tie kaj helpu fari la plej bonan mapaplikon
• Uzu la aplikon kaj disvastigu la vorton pri ĝi
• Donu rimarkojn kaj raportu problemojn
• Ĝisdatigu mapajn datumojn en la apliko aŭ sur la OpenStreetMap-retejo
‣ <b>Senkonekta-fokusa</b>: Planu kaj navigu vian vojaĝon eksterlande sen bezono de ĉelulara servico, serĉu vojpunktojn dum malproksima promenado, ktp. Ĉiuj funkcioj de la apliko estas dezajnitaj por funkcii senkonekte.
‣ <b>Rispektante Privatecon</b>: La apliko estas dezajnita kun privateco en menso — ne identigas homojn, ne sekvas, kaj ne kolektas personajn informojn. Sen reklamoj.
‣ <b>Simpla kaj Perfekta</b>: esencaj, facile uzeblaj funkcioj kiuj simple funkcias.
‣ <b>Konservas Vian Baterion kaj Spacon</b>: Ne elĉerpas vian baterion kiel aliaj navigaj aplikaĵoj. Kompaktaj mapoj konservas precian spacon sur via telefono.
‣ <b>Sena kaj Konstruita de la Komunumo</b>: Homoj kiel vi helpis konstrui la aplikon per aldonado de lokoj al OpenStreetMap, testado kaj donado de rimarkoj pri funkcioj kaj kontribuado de siaj programadaj kapabloj kaj mono.
‣ <b>Malferma kaj Transparenta Decidado kaj Financoj, Ne-lucra kaj Tute Malfermkoda.</b>
<b>Ĉefaj Funkcioj</b>:
• Elŝuteblaj detalegaj mapoj kun lokoj kiuj ne estas disponeblaj per Google Maps
• Eksteraj modo kun elstarigitaj promenaj vojoj, kampoj, akvofontoj, pintoj, konturlinioj, ktp
• Promenaj vojoj kaj biciklaj vojoj
• Interesaj punktoj kiel restoracioj, benzinstacioj, hoteloj, vendejoj, vidindaĵoj kaj multaj aliaj
• Serĉo laŭ nomo aŭ adreso aŭ laŭ kategorio de interesaj punktoj
• Navigado kun voĉaj anoncoj por promenado, biciklado aŭ veturado
• Marku viajn favorajn lokojn per unu tuŝo
• Senkonektaj Vikipedio-artikoloj
• Metroa transporta tavolo kaj indikoj
• Enregistraĵo de vojoj
• Eksporto kaj importo de markiloj kaj vojoj en KML, KMZ, GPX formatoj
• Malhela modo por uzi nokte
• Plibonigu mapajn datumojn por ĉiuj uzante bazan enkonstruitan redaktilon
<b>Libereco Estas Ĉi Tie</b>
Malkovru vian vojaĝon, navigu la mondon kun privateco kaj komunumo en la antaŭa plano!

View File

@@ -0,0 +1 @@
Facila mapnaviĝado - Malkovru pli de via vojaĝo - Subtenata de la komunumo

View File

@@ -0,0 +1 @@
CoMaps - Migru, Biciklu, Veturigu Eksterrete

View File

@@ -1,7 +1,11 @@
• Datos OSM del 04/11 • Datos de OpenStreetMap a fecha 9/12.
Iconos del mapa recategorizados, incluyendo nuevos colores Uso de temas Material 3.
Visualización de información sobre enchufes disponibles en estaciones de recarga Compatibilidad con enchufes de recarga en Editor.
Adición de iconos para diferentes centros deportivos, lugares de eventos, salones de masajes, posadas y algunos establecimientos comerciales desactivados Se añaden enchufes de recarga schuko/tipo E.
Varias mejoras y correcciones de errores en la búsqueda Se mejora la búsqueda.
Mejora en la orientación por voz durante la navegación Se habilitan el lituano y el letón en las indicaciones de voz.
Más detalles en Codeberg • Se aumenta el tamaño de las indicaciones de conducción.
• Nivel de zoom base según la distancia al siguiente giro.
• Se han reordenado los ajustes.
Más detalles en codeberg.org/comaps/comaps/releases

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 KiB

After

Width:  |  Height:  |  Size: 605 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 KiB

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 KiB

After

Width:  |  Height:  |  Size: 355 KiB

View File

@@ -1,8 +1,10 @@
• Données OpenStreetMap au 4 novembre • Données OpenStreetMap du 9 Décembre
Recatégorisation des icônes sur la carte avec ajout de nouvelles couleurs pour certains types de lieux Utilisation de Material 3
Affichage des prises sur les bornes électriques Support de l'édition des bornes de recharge dans l'éditeur OSM
• Ajout d'icônes pour les centres sportifs, salles d'événements, salon de massage et autres lieux • Ajout du type de prise schuko/type-E
Multiple améliorations dans la recherche Amélioration de l'ordre des résultats de recherche
Correction d'un plantage dans la recherche Ajout du lituanien et du letton dans le guidage vocal
• Amélioration de la synthèse vocale durant la navigation • Amélioration de la taille des instructions dans la navigation
Plus d'informations sur notre Codeberg • Niveau de zoom basé sur la distance jusquau prochain virage
• Réorganisation des paramètres
Plus de détails sur codeberg.org/comaps/comaps/releases

View File

@@ -1 +1 @@
CoMaps - Rando, vélo, conduite hors ligne & privée CoMaps - Randonnée, Vélo, Conduite hors ligne

View File

@@ -0,0 +1,10 @@
• Podaci OpenStreetMap karte od 9. prosinca
• Korištenje Material 3 tema
• Podrška za utičnice za punjenje u OSM Editoru
• Dodane šuko/tip-E utičnice
• Poboljšano rangiranje rezultata pretraživanja
• Omogućeni litvanski i latvijski jezici u glasovnim najavama
• Povećana veličina indikatora vožnje
• Razina zumiranja se mijenja ovisno o udaljenosti do sljedećeg skretanja
• Promijenjen redoslijed postavki
Više detalja na codeberg.org/comaps/comaps/releases

View File

@@ -0,0 +1 @@
Paprasta ir patogi navigacija Turiningos kelionės Vystoma bendruomenės

View File

@@ -0,0 +1 @@
CoMaps keliaukite atsijungę ir privačiai

View File

@@ -0,0 +1,10 @@
• Dane OpenStreetMap z 9 grudnia
• Użycie motywów Material 3
• Obsługa gniazd ładowania w Edytorze OSM
• Dodane gniazda ładowania schuko/type-E
• Poprawiony ranking wyników wyszukiwania
• Dodane litewskie i łotewskie komunikaty głosowe
• Poprawiony rozmiar znaków drogowych
• Poziom powiększenia oparty na odległości do następnego manewru
• Zmieniona kolejność ustawień
Więcej szczegółów na codeberg.org/comaps/comaps/releases

View File

@@ -1,7 +1,10 @@
• Dados OSM de 04/11 • Dados OpenStreetMap atualizados em 9 de dezembro
Ícones do mapa recategorizados, incluindo novas cores Uso do estilo Material 3
Exibição de informações sobre tomadas disponíveis em eletropostos Suporte para tomadas de carregamento no Editor OSM
• Adição de ícones para diferentes centros esportivos, locais de eventos, salões de massagem, pousadas e alguns estabelecimentos comerciais desativados • Adição de tomadas de carregamento Schuko/Tipo E
Diversas melhorias e correção de erro na busca Melhoria na classificação dos resultados de busca
Melhoria na orientação por voz durante a navegação Adição dos idiomas letão e lituano nas orientações por voz
Confira nossas notas de lançamento no Codeberg para mais detalhes! • Melhoria no tamanho das indicações de direção
• Nível de zoom baseado em distância até a próxima curva
• Configurações reordenadas
Mais detalhes em codeberg.org/comaps/comaps/releases

View File

@@ -0,0 +1,32 @@
Uma aplicação pela comunidade, grátis e open-source, de mapas baseada em dados do OpenStreetMap e reforçada com compromisso para transparência, privacidade e sem fins lucrativos. CoMaps é um fork/spin-off de Organic Maps, que, por sua vez, é um fork de Maps.ME
Leia sobre as razões deste projeto e a sua direção em <b><i>codeberg.org/comaps</i></b>.
Junte-se à comunidade e ajude a fazer a melhor aplicação de mapas
• Use a aplicação e partilhe-a com outros
• Dê feedback e reporte problemas
• Atualize os dados de mapa na aplicação ou no site do OpenStreetMap
‣ <b>Simples e Polida</b>: funcionalidades essenciais fáceis que “somente funcionam”.
‣ <b>Foco Offline</b>: Planeie e navegue as suas viagens no estrangeiro sem dados móveis, procure locais numa caminhada distante, etc. Todas as funções da aplicação foram criadas com intenção de serem usadas sem internet.
‣ <b>Respeita a privacidade</b>: A aplicação foi criada com privacidade em mente — não identifica o utilizador, não rastreia, e não usa a sua informação pessoal. Sem anúncios.
‣ <b>Saves Your Battery and Space</b>: Não esgota a sua bateria ao contrário de outras aplicações. Mapas compactos salvam espaço no seu telemóvel.
‣ <b>Gratuita e Feita pela Comunidade</b>: Pessoas como si ajudam a criar a aplicação ao adicionar locais ao OpenStreetMap, testando e dando opiniões em funcionalidades e contribuindo com dotes de desenvolvimento e dinheiro.
‣ <b>Decisões e Finanças Abertas e Transparentes, Sem fins lucrativos e Open-Source.</b>
<b>Funcionalidades principais</b>:
• Mapas detalhados descarregáveis com locais que não estão disponíveis com o Google Maps
• Modo ao Ar Livre com trilhos de caminhada destacados, acampamentos, fontes de água, cumes, curvas de nível, etc
• Caminhos pedestres e ciclovias
• Pontos de interesse como restaurantes, estações de serviço, hotéis, lojas, atrações e muitos mais
• Pesquise por nome, endereço, ou por categoria de ponto de interesse
• Navegação com anúncios de voz ao caminhar, pedalar ou conduzir
• Marque os seus locais favoritos com um único clique
• Artigos da Wikipédia Offline
• Camada de metro e direções
• Gravação de Percursos
• Exportar e importar marcadores e percursos em formatos KML, KMZ, GPX
• Um modo escuro para usar durante a noite
• Melhore a informação do mapa para todos com um editor básico embebido
<b>A liberdade chegou</b>
Descubra a sua jornada, navegue o mundo com privacidade e a comunidade à frente!

View File

@@ -0,0 +1 @@
Navegação fácil nos mapas - Descubra mais sobre o seu percurso - Feito por todos

View File

@@ -0,0 +1 @@
CoMaps - Mapas e Navegação - Offline e Privada

View File

@@ -1,8 +0,0 @@
• Карты OpenStreetMap от 4 ноября
• Обновлены цвета иконок на карте, добавлены новые цвета для развлечений, спорта, некоторых бизнесов
На зарядных станциях показываются имеющиеся типы разъёмов
• Добавлены эстрады, скамейки без спинок и лежаки
• Новые иконки для разных спорт центров, массажных салонов, гостевых домов, некоторых закрытых бизнесов
• Несколько улучшений и исправлений в поиске
• Улучшены голосовые подсказки при навигации
Подробнее смотрите на codeberg.org/comaps/comaps/releases

View File

@@ -0,0 +1,32 @@
OpenStreetMap தரவை அடிப்படையாகக் கொண்ட சமூகம் தலைமையிலான இலவச மற்றும் திறந்த மூல வரைபட பயன்பாடு மற்றும் வெளிப்படைத்தன்மை, தனியுரிமை மற்றும் இலாப நோக்கற்றது ஆகியவற்றுக்கான அர்ப்பணிப்புடன் வலுவூட்டப்பட்டது. CoMaps என்பது ஆர்கானிக் மேப்சின் ஃபோர்க்/ச்பின்-ஆஃப் ஆகும், இது Maps.ME இன் ஃபோர்க் ஆகும்.
திட்டத்திற்கான காரணங்கள் மற்றும் அதன் திசையை <b><i>codeberg.org/comaps</i></b> இல் படிக்கவும்.
அங்குள்ள சமூகத்தில் சேர்ந்து சிறந்த வரைபட பயன்பாட்டை உருவாக்க உதவுங்கள்
• பயன்பாட்டைப் பயன்படுத்தி, அதைப் பற்றிய தகவலைப் பரப்புங்கள்
• கருத்துக்களை வழங்கவும் மற்றும் சிக்கல்களைப் புகாரளிக்கவும்
• பயன்பாட்டில் அல்லது OpenStreetMap இணையதளத்தில் வரைபடத் தரவைப் புதுப்பிக்கவும்
‣ <b>ஆஃப்லைனில் கவனம் செலுத்தப்பட்டது</b>: செல்லுலார் சேவையின் தேவையின்றி உங்களின் வெளிநாட்டுப் பயணத்தைத் திட்டமிட்டு வழிநடத்துங்கள், தொலைதூர பயணத்தில் இருக்கும் போது வழிப் புள்ளிகளைத் தேடுங்கள்.
‣ <b>தனியுரிமைக்கு மதிப்பளித்தல்</b>: பயன்பாடு தனியுரிமையை மனதில் கொண்டு வடிவமைக்கப்பட்டுள்ளது - நபர்களை அடையாளம் காணாது, கண்காணிக்காது மற்றும் தனிப்பட்ட தகவல்களைச் சேகரிக்காது. விளம்பரங்கள் இல்லாதது.
‣ <b>எளிமையான மற்றும் மெருகூட்டப்பட்டது</b>: செயல்படும் நற்பொருத்தங்கள் பயன்படுத்த எளிதானது.
‣ <b>உங்கள் பேட்டரி மற்றும் இடத்தைச் சேமிக்கிறது</b>: மற்ற வழிசெலுத்தல் பயன்பாடுகளைப் போல உங்கள் பேட்டரியை வெளியேற்றாது. சிறிய வரைபடங்கள் உங்கள் தொலைபேசியில் விலைமதிப்பற்ற இடத்தை சேமிக்கின்றன.
‣ <b>இலவசம் மற்றும் சமூகத்தால் உருவாக்கப்பட்டது</b>: OpenStreetMap இல் இடங்களைச் சேர்ப்பதன் மூலமும், சோதனை செய்து, அம்சங்களைப் பற்றிய கருத்துக்களை வழங்குவதன் மூலமும், அவர்களின் மேம்பாட்டுத் திறன்களையும் பணத்தையும் பங்களிப்பதன் மூலமும் உங்களைப் போன்றவர்கள் பயன்பாட்டை உருவாக்க உதவியுள்ளனர்.
‣ <b>திறந்த மற்றும் வெளிப்படையான முடிவெடுக்கும் மற்றும் நிதியியல், இலாப நோக்கற்ற மற்றும் முழு திறந்த மூல.</b>
<b>முக்கிய அம்சங்கள்</b>:
• கூகுள் மேப்சில் இல்லாத இடங்களுடன் தரவிறக்கம் செய்யக்கூடிய விரிவான வரைபடங்கள்
• ஐகிங் பாதைகள், முகாம்கள், நீர் ஆதாரங்கள், சிகரங்கள், விளிம்பு கோடுகள் போன்றவற்றைக் கொண்ட வெளிப்புறப் பயன்முறை
• நடைபாதைகள் மற்றும் சைக்கிள் பாதைகள்
• உணவகங்கள், எரிவாயு நிலையங்கள், ஓட்டல்கள், கடைகள், சுற்றிப்பார்க்கும் இடங்கள் மற்றும் பல போன்ற ஆர்வமுள்ள இடங்கள்
• பெயர் அல்லது முகவரி அல்லது ஆர்வமுள்ள வகை மூலம் தேடவும்
• நடைபயிற்சி, சைக்கிள் ஓட்டுதல் அல்லது வண்டி ஓட்டுவதற்கான குரல் அறிவிப்புகளுடன் வழிசெலுத்தல்
• ஒரே தட்டினால் உங்களுக்குப் பிடித்த இடங்களை புத்தகக்குறி செய்யவும்
• இணைப்பில்லாத விக்கிபீடியா கட்டுரைகள்
• சுரங்கப்பாதை போக்குவரத்து அடுக்கு மற்றும் திசைகள்
• ட்ராக் ரெக்கார்டிங்
• KML, KMZ, GPX வடிவங்களில் புக்மார்க்குகள் மற்றும் டிராக்குகளை ஏற்றுமதி மற்றும் இறக்குமதி செய்யுங்கள்
• இரவில் பயன்படுத்த ஒரு இருண்ட பயன்முறை
• அடிப்படை உள்ளமைக்கப்பட்ட எடிட்டரைப் பயன்படுத்தி அனைவருக்கும் வரைபடத் தரவை மேம்படுத்தவும்
<b>சுதந்திரம் இங்கே உள்ளது</b>
உங்கள் பயணத்தைக் கண்டறியவும், தனியுரிமை மற்றும் சமூகத்தை முன்னணியில் கொண்டு உலகிற்கு செல்லவும்!

View File

@@ -0,0 +1 @@
எளிய வழிகாட்டி - பயணத்தை மேலும் கண்டறி - சமூகத்தால் இயக்கப்படுகிறது

View File

@@ -0,0 +1 @@
இணைவரைபடங்கள் - மலையேறு, வண்டி, தனிமையில் இயக்கு

View File

@@ -68,4 +68,4 @@ Por favor, informa de errores, sugiere ideas y únete a nuestra comunidad en el
<b>La Libertad Está Aquí</b> <b>La Libertad Está Aquí</b>
Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad. ¡Descubre tu camino, navega el mundo con privacidad y con la comunidad como prioridad!

View File

@@ -0,0 +1 @@
Paprasta ir patogi navigacija Turiningos kelionės Vystoma bendruomenės

View File

@@ -0,0 +1 @@
CoMaps naviguokite privačiai

View File

@@ -0,0 +1,36 @@
Aplikacja mapowa tworzona przez społeczność, darmowa i open source, oparta na danych OpenStreetMap, z pełnym naciskiem na transparentność, prywatność i działanie non-profit.
Dołącz do społeczności i pomóż tworzyć najlepszą aplikację mapową
• Korzystaj z aplikacji i polecaj ją innym
• Przekazuj opinie i zgłaszaj problemy
• Aktualizuj dane mapy w aplikacji lub na stronie OpenStreetMap
<i>Twoje opinie i oceny na 5 gwiazdek są dla nas najlepszym wsparciem!</i>
‣ <b>Prosta i dopracowana</b>: najważniejsze, łatwe w użyciu funkcje, które po prostu działają.
‣ <b>Skoncentrowana na trybie offline</b>: planuj i nawiguj za granicą bez sieci komórkowej, wyszukuj punkty na odległych szlakach wszystkie funkcje działają offline.
‣ <b>Z poszanowaniem prywatności</b>: aplikacja nie identyfikuje użytkowników, nie śledzi i nie zbiera danych osobowych. Bez reklam.
‣ <b>Oszczędza baterię i miejsce</b>: nie zużywa baterii jak inne aplikacje nawigacyjne, a kompaktowe mapy oszczędzają miejsce w telefonie.
‣ <b>Darmowa i tworzona przez społeczność</b>: ludzie tacy jak Ty dodają miejsca do OpenStreetMap, testują funkcje, zgłaszają opinie i wspierają projekt.
‣ <b>Otwarte i przejrzyste decyzje i finanse, działanie non-profit, pełne open source.</b>
<b>Główne funkcje</b>:
• Pobierane szczegółowe mapy z miejscami, których nie ma w Google Maps
• Tryb outdoor ze szlakami, biwakami, źródłami wody, szczytami, warstwicami itp.
• Ścieżki piesze i rowerowe
• Punkty zainteresowania: restauracje, stacje paliw, hotele, sklepy, atrakcje i wiele innych
• Wyszukiwanie po nazwie, adresie lub kategorii
• Nawigacja z komunikatami głosowymi dla pieszych, rowerzystów i kierowców
• Dodawanie ulubionych miejsc jednym tapnięciem
• Artykuły Wikipedii dostępne offline
• Warstwa metra i wskazówki dojazdu
• Nagrywanie śladu trasy
• Eksport i import ulubionych miejsc i tras w formatach KML, KMZ, GPX
• Tryb ciemny do używania nocą
• Poprawianie danych mapy za pomocą prostego wbudowanego edytora
• Obsługa Android Auto
Zgłaszaj problemy, proponuj pomysły i dołącz do społeczności na stronie <b><i>comaps.app</i></b>.
<b>Wolność jest tutaj</b>
Odkrywaj swoją drogę i nawiguj po świecie z prywatnością i społecznością na pierwszym miejscu!

View File

@@ -0,0 +1,36 @@
திறந்ததெருவரைபடம் தரவை அடிப்படையாகக் கொண்ட சமூகத்தால் வழிநடத்தப்படும் இலவச & திறந்த மூல வரைபடப் பயன்பாடு, வெளிப்படைத்தன்மை, தனியுரிமை மற்றும் இலாப நோக்கற்ற தன்மை ஆகியவற்றிற்கான அர்ப்பணிப்புடன் வலுப்படுத்தப்பட்டுள்ளது.
சமூகத்தில் சேர்ந்து சிறந்த வரைபடப் பயன்பாட்டை உருவாக்க உதவுங்கள்
• பயன்பாட்டைப் பயன்படுத்தி அதைப் பற்றிய செய்தியைப் பரப்புங்கள்
• கருத்துத் தெரிவிக்கவும் சிக்கல்களைப் புகாரளிக்கவும்
• பயன்பாட்டில் அல்லது OpenStreetMap வலைத்தளத்தில் வரைபடத் தரவைப் புதுப்பிக்கவும்
<i>உங்கள் கருத்து மற்றும் 5-நட்சத்திர மதிப்புரைகள் எங்களுக்குச் சிறந்த ஆதரவாகும்!</i>
‣ <b>எளிமையான மற்றும் மெருகூட்டப்பட்ட</b>: அத்தியாவசியமான பயன்படுத்த எளிதான அம்சங்கள் வேலை செய்கின்றன.
‣ <b>ஆஃப்லைனில் கவனம் செலுத்துகிறது</b>: செல்லுலார் சேவை தேவை இல்லாமல் உங்கள் வெளிநாட்டு பயணத்தைத் திட்டமிட்டு வழிநடத்துங்கள், தொலைதூர நடைபயணத்தின்போது வழிப்புள்ளிகளைத் தேடுங்கள் போன்றவை. அனைத்து பயன்பாட்டு செயல்பாடுகளும் ஆஃப்லைனில் வேலை செய்ய வடிவமைக்கப்பட்டுள்ளன.
‣ <b>தனியுரிமையை மதித்தல்</b>: பயன்பாடு தனியுரிமையை மனதில் கொண்டு வடிவமைக்கப்பட்டுள்ளது - மக்களை அடையாளம் காணாது, கண்காணிக்காது மற்றும் தனிப்பட்ட தகவல்களைச் சேகரிக்காது. விளம்பரங்கள் இல்லாதது.
‣ <b>உங்கள் பேட்டரி மற்றும் இடத்தைச் சேமிக்கிறது</b>: பிற வழிசெலுத்தல் பயன்பாடுகளைப் போல உங்கள் பேட்டரியை வெளியேற்றாது. சிறிய வரைபடங்கள் உங்கள் தொலைபேசியில் விலைமதிப்பற்ற இடத்தைச் சேமிக்கின்றன.
‣ <b>இலவசம் மற்றும் சமூகத்தால் உருவாக்கப்பட்டது</b>: உங்களைப் போன்றவர்கள் OpenStreetMap இல் இடங்களைச் சேர்ப்பதன் மூலமும், அம்சங்கள்குறித்து சோதித்துப் பார்த்துக் கருத்து தெரிவிப்பதன் மூலமும், அவர்களின் மேம்பாட்டுத் திறன்கள் மற்றும் பணத்தை பங்களிப்பதன் மூலமும் பயன்பாட்டை உருவாக்க உதவினார்கள்.
‣ <b>திறந்த மற்றும் வெளிப்படையான முடிவெடுக்கும் மற்றும் நிதி, இலாப நோக்கற்ற மற்றும் முழுமையாகத் திறந்த மூல.</b>
<b>முக்கிய பண்புகள்</b>:
• கூகிள் வரைபடத்தில் கிடைக்காத இடங்களுடன் பதிவிறக்கம் செய்யக்கூடிய விரிவான வரைபடங்கள்
• ஹைகிங் பாதைகள், முகாம் தளங்கள், நீர் ஆதாரங்கள், சிகரங்கள், விளிம்புக் கோடுகள் போன்றவற்றுடன் வெளிப்புற பயன்முறை
• நடைபாதைகள் மற்றும் சைக்கிள் பாதைகள்
• உணவகங்கள், எரிவாயு நிலையங்கள், ஹோட்டல்கள், கடைகள், பார்வையிடல்கள் மற்றும் பல போன்ற ஆர்வமுள்ள இடங்கள்
• பெயர் அல்லது முகவரி அல்லது ஆர்வமுள்ள இட வகைமூலம் தேடுங்கள்
• நடைபயிற்சி, சைக்கிள் ஓட்டுதல் அல்லது வாகனம் ஓட்டுவதற்கான குரல் அறிவிப்புகளுடன் வழிசெலுத்தல்
• உங்களுக்குப் பிடித்த இடங்களை ஒரே தட்டலில் புக்மார்க் செய்யவும்
• ஆஃப்லைன் விக்கிபீடியா கட்டுரைகள்
• சுரங்கப்பாதை போக்குவரத்து அடுக்கு மற்றும் திசைகள்
• பதிவுசெய்தலைக் கண்காணிக்கவும்
• KML, KMZ, GPX வடிவங்களில் புக்மார்க்குகள் மற்றும் தடங்களை ஏற்றுமதி செய்து இறக்குமதி செய்யவும்
• இரவில் பயன்படுத்த ஒரு இருண்ட பயன்முறை
• அடிப்படை உள்ளமைக்கப்பட்ட எடிட்டரைப் பயன்படுத்தி அனைவருக்கும் வரைபடத் தரவை மேம்படுத்தவும்
• ஆண்டாய்டு தானி ஆதரவு
பயன்பாட்டு சிக்கல்களைப் புகாரளிக்கவும், யோசனைகளைப் பரிந்துரைக்கவும் மற்றும் எங்கள் சமூகத்தில் சேரவும் <b><i>comaps.app</i></b> வலைத்தளம்.
<b>சுதந்திரம் இங்கே உள்ளது</b>
உங்கள் பயணத்தைக் கண்டறியவும், தனியுரிமை மற்றும் சமூகத்தை முன்னணியில் வைத்து உலகை வழிநடத்தவும்!

View File

@@ -0,0 +1 @@
எளிய வழிகாட்டி - பயணத்தை மேலும் கண்டறி - சமூகத்தால் இயக்கப்படுகிறது

View File

@@ -0,0 +1 @@
இணைவரைபடங்கள் - தனியுரிமை

View File

@@ -48,7 +48,6 @@ import androidx.core.content.ContextCompat;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentFactory;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
@@ -108,6 +107,7 @@ import app.organicmaps.sdk.routing.RoutingOptions;
import app.organicmaps.sdk.search.SearchEngine; import app.organicmaps.sdk.search.SearchEngine;
import app.organicmaps.sdk.settings.RoadType; import app.organicmaps.sdk.settings.RoadType;
import app.organicmaps.sdk.settings.UnitLocale; import app.organicmaps.sdk.settings.UnitLocale;
import app.organicmaps.sdk.sound.TtsPlayer;
import app.organicmaps.sdk.util.Config; import app.organicmaps.sdk.util.Config;
import app.organicmaps.sdk.util.LocationUtils; import app.organicmaps.sdk.util.LocationUtils;
import app.organicmaps.sdk.util.PowerManagment; import app.organicmaps.sdk.util.PowerManagment;
@@ -133,7 +133,6 @@ import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.textview.MaterialTextView; import com.google.android.material.textview.MaterialTextView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
@@ -1814,6 +1813,26 @@ public class MwmActivity extends BaseMwmFragmentActivity
return false; return false;
} }
private void deliverTtsMessage()
{
if (Config.isTtsMessageDelivered())
return;
String languageDisplayName = TtsPlayer.INSTANCE.getLanguageDisplayName();
if (languageDisplayName != null)
{
String navigationStartMessage = getResources().getString(R.string.navigation_start_tts_message);
navigationStartMessage += languageDisplayName;
Toast.makeText(this, navigationStartMessage, Toast.LENGTH_LONG).show();
}
else
Toast.makeText(this, getResources().getString(R.string.navigation_start_tts_disabled_message), Toast.LENGTH_LONG)
.show();
Config.setTtsMessageDelivered();
}
private boolean showStartPointNotice() private boolean showStartPointNotice()
{ {
final RoutingController controller = RoutingController.get(); final RoutingController controller = RoutingController.get();
@@ -2190,6 +2209,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
if (!showRoutingDisclaimer()) if (!showRoutingDisclaimer())
return; return;
deliverTtsMessage();
closeFloatingPanels(); closeFloatingPanels();
setFullscreen(false); setFullscreen(false);
RoutingController.get().start(); RoutingController.get().start();

View File

@@ -18,9 +18,7 @@ import androidx.fragment.app.FragmentManager;
import app.organicmaps.MwmApplication; import app.organicmaps.MwmApplication;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.SplashActivity; import app.organicmaps.SplashActivity;
import app.organicmaps.sdk.util.Config;
import app.organicmaps.sdk.util.log.Logger; import app.organicmaps.sdk.util.log.Logger;
import app.organicmaps.util.RtlUtils;
import com.google.android.material.appbar.MaterialToolbar; import com.google.android.material.appbar.MaterialToolbar;
import java.util.Objects; import java.util.Objects;
@@ -42,7 +40,6 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
{ {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT)); EdgeToEdge.enable(this, SystemBarStyle.dark(Color.TRANSPARENT));
RtlUtils.manageRtl(this);
if (!MwmApplication.from(this).getOrganicMaps().arePlatformAndCoreInitialized()) if (!MwmApplication.from(this).getOrganicMaps().arePlatformAndCoreInitialized())
{ {
final Intent intent = Objects.requireNonNull(getIntent()); final Intent intent = Objects.requireNonNull(getIntent());

View File

@@ -177,7 +177,7 @@ public final class UiHelpers
{ {
case LocationState.PENDING_POSITION, LocationState.NOT_FOLLOW_NO_POSITION -> case LocationState.PENDING_POSITION, LocationState.NOT_FOLLOW_NO_POSITION ->
drawableRes = R.drawable.ic_location_off; drawableRes = R.drawable.ic_location_off;
case LocationState.NOT_FOLLOW -> drawableRes = R.drawable.ic_not_follow; case LocationState.NOT_FOLLOW -> drawableRes = R.drawable.ic_location_crosshair;
case LocationState.FOLLOW -> case LocationState.FOLLOW ->
{ {
drawableRes = R.drawable.ic_follow; drawableRes = R.drawable.ic_follow;

View File

@@ -357,7 +357,7 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
private MenuBottomSheetItem getCancelMenuItem() private MenuBottomSheetItem getCancelMenuItem()
{ {
return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_cancel, () -> onCancelActionSelected(mSelectedItem)); return new MenuBottomSheetItem(R.string.cancel, R.drawable.ic_close, () -> onCancelActionSelected(mSelectedItem));
} }
private class ItemViewHolder extends BaseInnerViewHolder<CountryItem> private class ItemViewHolder extends BaseInnerViewHolder<CountryItem>

View File

@@ -4,6 +4,7 @@ import android.location.Location;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import app.organicmaps.MwmActivity; import app.organicmaps.MwmActivity;
@@ -26,6 +27,10 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
{ {
private static boolean sAutodownloadLocked; private static boolean sAutodownloadLocked;
private static final int HIDE_THRESHOLD = 2;
// Default bundles (e.g., world/coasts). Used to approximate “user-downloaded” count.
private static final int DEFAULT_MAP_BASELINE = 2;
private final MwmActivity mActivity; private final MwmActivity mActivity;
private final View mFrame; private final View mFrame;
private final MaterialTextView mParent; private final MaterialTextView mParent;
@@ -33,6 +38,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
private final MaterialTextView mSize; private final MaterialTextView mSize;
private final WheelProgressView mProgress; private final WheelProgressView mProgress;
private final MaterialButton mButton; private final MaterialButton mButton;
private final View mOfflineExplanation;
private int mStorageSubscriptionSlot; private int mStorageSubscriptionSlot;
@@ -43,8 +49,10 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
@Override @Override
public void onStatusChanged(List<MapManager.StorageCallbackData> data) public void onStatusChanged(List<MapManager.StorageCallbackData> data)
{ {
if (mCurrentCountry == null) if (mCurrentCountry == null) {
updateOfflineExplanationVisibility();
return; return;
}
for (MapManager.StorageCallbackData item : data) for (MapManager.StorageCallbackData item : data)
{ {
@@ -58,7 +66,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
{ {
mCurrentCountry.update(); mCurrentCountry.update();
updateProgressState(false); updateProgressState(false);
updateOfflineExplanationVisibility();
return; return;
} }
} }
@@ -101,6 +109,12 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
return enqueued || progress || applying; return enqueued || progress || applying;
} }
private void updateOfflineExplanationVisibility() {
if (mOfflineExplanation == null) return;
// hide once threshold reached; safe to call repeatedly.
app.organicmaps.util.UiUtils.showIf(MapManager.nativeGetDownloadedCount() < (DEFAULT_MAP_BASELINE + HIDE_THRESHOLD), mOfflineExplanation);
}
private void updateProgressState(boolean shouldAutoDownload) private void updateProgressState(boolean shouldAutoDownload)
{ {
updateStateInternal(shouldAutoDownload); updateStateInternal(shouldAutoDownload);
@@ -108,6 +122,8 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
private void updateStateInternal(boolean shouldAutoDownload) private void updateStateInternal(boolean shouldAutoDownload)
{ {
updateOfflineExplanationVisibility();
boolean showFrame = boolean showFrame =
(mCurrentCountry != null && !mCurrentCountry.present && !RoutingController.get().isNavigating()); (mCurrentCountry != null && !mCurrentCountry.present && !RoutingController.get().isNavigating());
if (showFrame) if (showFrame)
@@ -191,6 +207,9 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
mProgress = controls.findViewById(R.id.wheel_downloader_progress); mProgress = controls.findViewById(R.id.wheel_downloader_progress);
mButton = controls.findViewById(R.id.downloader_button); mButton = controls.findViewById(R.id.downloader_button);
mOfflineExplanation = mFrame.findViewById(R.id.offline_explanation);
updateOfflineExplanationVisibility();
mProgress.setOnClickListener(v -> { mProgress.setOnClickListener(v -> {
if (mCurrentCountry == null) if (mCurrentCountry == null)
return; return;
@@ -247,6 +266,7 @@ public class OnmapDownloader implements MwmActivity.LeftAnimationTrackListener
public void onResume() public void onResume()
{ {
updateOfflineExplanationVisibility();
if (mStorageSubscriptionSlot == 0) if (mStorageSubscriptionSlot == 0)
{ {
mStorageSubscriptionSlot = MapManager.nativeSubscribe(mStorageCallback); mStorageSubscriptionSlot = MapManager.nativeSubscribe(mStorageCallback);

View File

@@ -1,5 +1,7 @@
package app.organicmaps.editor; package app.organicmaps.editor;
import static android.view.View.INVISIBLE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
@@ -13,14 +15,13 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
import android.widget.GridLayout; import android.widget.GridLayout;
import android.widget.Toast;
import androidx.annotation.CallSuper; import androidx.annotation.CallSuper;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.IdRes; import androidx.annotation.IdRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.appcompat.widget.SwitchCompat;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R; import app.organicmaps.R;
@@ -42,9 +43,9 @@ import app.organicmaps.util.Graphics;
import app.organicmaps.util.InputUtils; import app.organicmaps.util.InputUtils;
import app.organicmaps.util.UiUtils; import app.organicmaps.util.UiUtils;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.materialswitch.MaterialSwitch;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import com.google.android.material.textview.MaterialTextView; import com.google.android.material.textview.MaterialTextView;
@@ -115,9 +116,9 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private MaterialTextView mPhone; private MaterialTextView mPhone;
private MaterialButton mEditPhoneLink; private MaterialButton mEditPhoneLink;
private MaterialTextView mCuisine; private MaterialTextView mCuisine;
private SwitchCompat mWifi; private MaterialSwitch mWifi;
private MaterialTextView mSelfService; private MaterialTextView mSelfService;
private SwitchCompat mOutdoorSeating; private MaterialSwitch mOutdoorSeating;
// Default Metadata entries. // Default Metadata entries.
private static final class MetadataEntry private static final class MetadataEntry
@@ -153,6 +154,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>(); private final Map<Metadata.MetadataType, View> mDetailsBlocks = new HashMap<>();
private final Map<Metadata.MetadataType, View> mSocialMediaBlocks = new HashMap<>(); private final Map<Metadata.MetadataType, View> mSocialMediaBlocks = new HashMap<>();
private MaterialButton mReset; private MaterialButton mReset;
private MaterialButton mDisused;
private EditorHostFragment mParent; private EditorHostFragment mParent;
@@ -352,8 +354,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
{ {
hasChargeSockets = hasChargeSockets || (type == Metadata.MetadataType.FMD_CHARGE_SOCKETS.toInt()); hasChargeSockets = hasChargeSockets || (type == Metadata.MetadataType.FMD_CHARGE_SOCKETS.toInt());
} }
// Hide socket until https://codeberg.org/comaps/comaps/issues/2368 is fixed UiUtils.showIf(hasChargeSockets, mCardChargingStation);
//UiUtils.showIf(hasChargeSockets, mCardChargingStation);
setCardVisibility(mCardDetails, mDetailsBlocks, editableDetails); setCardVisibility(mCardDetails, mDetailsBlocks, editableDetails);
setCardVisibility(mCardSocialMedia, mSocialMediaBlocks, editableDetails); setCardVisibility(mCardSocialMedia, mSocialMediaBlocks, editableDetails);
@@ -395,16 +396,18 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
typeBtns.removeAllViews(); typeBtns.removeAllViews();
List<String> SOCKET_TYPES = Arrays.stream(getResources().getStringArray(R.array.charge_socket_types)).toList(); List<String> SOCKET_TYPES = Arrays.stream(getResources().getStringArray(R.array.charge_socket_types)).toList();
for (String socket : SOCKET_TYPES) for (String socketType : SOCKET_TYPES)
{ {
ChargeSocketDescriptor socket = new ChargeSocketDescriptor(socketType,0,0);
MaterialButton btn = (MaterialButton) inflater.inflate(R.layout.button_socket_type, typeBtns, false); MaterialButton btn = (MaterialButton) inflater.inflate(R.layout.button_socket_type, typeBtns, false);
btn.setTag(R.id.socket_type, socket); btn.setTag(R.id.socket_type, socket.type());
// load SVG icon converted into VectorDrawable in res/drawable // load SVG icon converted into VectorDrawable in res/drawable
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resIconId = int resIconId =
getResources().getIdentifier("ic_charge_socket_" + socket, "drawable", requireContext().getPackageName()); getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable", requireContext().getPackageName());
if (resIconId != 0) if (resIconId != 0)
{ {
btn.setIcon(getResources().getDrawable(resIconId)); btn.setIcon(getResources().getDrawable(resIconId));
@@ -412,7 +415,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resTypeId = int resTypeId =
getResources().getIdentifier("charge_socket_" + socket, "string", requireContext().getPackageName()); getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
if (resTypeId != 0) if (resTypeId != 0)
{ {
btn.setText(getResources().getString(resTypeId)); btn.setText(getResources().getString(resTypeId));
@@ -544,7 +547,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
updateChargeSockets(socketIndex, socket); updateChargeSockets(socketIndex, socket);
}) })
.setNegativeButton(R.string.cancel, (dialog, which) -> { dialog.dismiss(); }); .setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
} }
// Helper method for validation logic // Helper method for validation logic
@@ -600,8 +603,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
GridLayout socketsGrid = mChargeSockets.findViewById(R.id.socket_grid_editor); GridLayout socketsGrid = mChargeSockets.findViewById(R.id.socket_grid_editor);
socketsGrid.removeAllViews(); socketsGrid.removeAllViews();
for (int i = 0; i < sockets.length; i++) for (int i = 0; i < sockets.length; i++) {
{
final int currentIndex = i; final int currentIndex = i;
ChargeSocketDescriptor socket = sockets[i]; ChargeSocketDescriptor socket = sockets[i];
@@ -612,45 +614,42 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
MaterialTextView power = itemView.findViewById(R.id.socket_power); MaterialTextView power = itemView.findViewById(R.id.socket_power);
MaterialTextView count = itemView.findViewById(R.id.socket_count); MaterialTextView count = itemView.findViewById(R.id.socket_count);
// load SVG icon converted into VectorDrawable in res/drawable // load SVG icon converted into VectorDrawable in res/drawable
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.type(), "drawable", int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable",
requireContext().getPackageName()); requireContext().getPackageName());
if (resIconId != 0) if (resIconId != 0) {
{
icon.setImageResource(resIconId); icon.setImageResource(resIconId);
} }
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resTypeId = int resTypeId =
getResources().getIdentifier("charge_socket_" + socket.type(), "string", requireContext().getPackageName()); getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
if (resTypeId != 0) if (resTypeId != 0) {
{
type.setText(resTypeId); type.setText(resTypeId);
} }
if (socket.power() != 0) if (socket.power() != 0) {
{
DecimalFormat df = new DecimalFormat("#.##"); DecimalFormat df = new DecimalFormat("#.##");
power.setText(getString(R.string.kw_label, df.format(socket.power()))); power.setText(getString(R.string.kw_label, df.format(socket.power())));
} }
else if (socket.ignorePower()) {
power.setVisibility(INVISIBLE);
}
if (socket.count() != 0) if (socket.count() != 0)
{ {
count.setText(getString(R.string.count_label, socket.count())); count.setText(getString(R.string.count_label, socket.count()));
} }
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> buildChargeSocketDialog(currentIndex, socket.type(), socket.count(), socket.power()).show());
buildChargeSocketDialog(currentIndex, socket.type(), socket.count(), socket.power()).show();
});
socketsGrid.addView(itemView); socketsGrid.addView(itemView);
} }
// add a 'new item' button at the end, to create new sockets // add a 'new item' button at the end, to create new sockets
View btnNewItemView = inflater.inflate(R.layout.button_new_item, socketsGrid, false); View btnNewItemView = inflater.inflate(R.layout.button_new_item, socketsGrid, false);
btnNewItemView.setOnClickListener(v -> { btnNewItemView.setOnClickListener(v -> buildChargeSocketDialog(-1, "unknown", -1, -1).show());
buildChargeSocketDialog(-1, "unknown", -1, -1).show();
});
socketsGrid.addView(btnNewItemView); socketsGrid.addView(btnNewItemView);
} }
@@ -827,6 +826,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
osmInfo.setMovementMethod(LinkMovementMethod.getInstance()); osmInfo.setMovementMethod(LinkMovementMethod.getInstance());
mReset = view.findViewById(R.id.reset); mReset = view.findViewById(R.id.reset);
mReset.setOnClickListener(this); mReset.setOnClickListener(this);
mDisused = view.findViewById(R.id.disused);
mDisused.setOnClickListener(this);
mDetailsBlocks.put(Metadata.MetadataType.FMD_OPEN_HOURS, blockOpeningHours); mDetailsBlocks.put(Metadata.MetadataType.FMD_OPEN_HOURS, blockOpeningHours);
mDetailsBlocks.put(Metadata.MetadataType.FMD_PHONE_NUMBER, blockPhone); mDetailsBlocks.put(Metadata.MetadataType.FMD_PHONE_NUMBER, blockPhone);
@@ -894,6 +895,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
mParent.addLanguage(); mParent.addLanguage();
else if (id == R.id.reset) else if (id == R.id.reset)
reset(); reset();
else if (id == R.id.disused)
placeDisused();
else if (id == R.id.block_outdoor_seating) else if (id == R.id.block_outdoor_seating)
mOutdoorSeating.toggle(); mOutdoorSeating.toggle();
} }
@@ -939,9 +942,12 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
if (mParent.addingNewObject()) if (mParent.addingNewObject())
{ {
UiUtils.hide(mReset); UiUtils.hide(mReset);
UiUtils.hide(mDisused);
return; return;
} }
mDisused.setVisibility(Editor.nativeCanMarkPlaceAsDisused() ? View.VISIBLE : View.GONE);
if (Editor.nativeIsMapObjectUploaded()) if (Editor.nativeIsMapObjectUploaded())
{ {
mReset.setText(R.string.editor_place_doesnt_exist); mReset.setText(R.string.editor_place_doesnt_exist);
@@ -1014,6 +1020,19 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
dialogFragment.setTextSaveListener(this::commitPlaceDoesntExists); dialogFragment.setTextSaveListener(this::commitPlaceDoesntExists);
} }
private void placeDisused()
{
new MaterialAlertDialogBuilder(requireActivity(), R.style.MwmTheme_AlertDialog)
.setTitle(R.string.editor_mark_business_vacant_title)
.setMessage(R.string.editor_mark_business_vacant_description)
.setPositiveButton(R.string.editor_submit, (dlg, which) -> {
Editor.nativeMarkPlaceAsDisused();
mParent.processEditedFeatures();
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
private void commitPlaceDoesntExists(@NonNull String text) private void commitPlaceDoesntExists(@NonNull String text)
{ {
Editor.nativePlaceDoesNotExist(text); Editor.nativePlaceDoesNotExist(text);

View File

@@ -358,7 +358,7 @@ public class EditorHostFragment
.show(); .show();
} }
private void processEditedFeatures() public void processEditedFeatures()
{ {
if (OsmOAuth.isAuthorized()) if (OsmOAuth.isAuthorized())
{ {

View File

@@ -1,16 +1,20 @@
package app.organicmaps.editor; package app.organicmaps.editor;
import android.content.res.ColorStateList;
import android.text.method.LinkMovementMethod; import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.sdk.editor.data.FeatureCategory; import app.organicmaps.sdk.editor.data.FeatureCategory;
import app.organicmaps.sdk.util.StringUtils; import app.organicmaps.sdk.util.StringUtils;
import app.organicmaps.util.UiUtils; import app.organicmaps.util.UiUtils;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textview.MaterialTextView; import com.google.android.material.textview.MaterialTextView;
@@ -119,7 +123,7 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
protected static class FooterViewHolder extends RecyclerView.ViewHolder protected static class FooterViewHolder extends RecyclerView.ViewHolder
{ {
private final TextInputEditText mNoteEditText; private final TextInputEditText mNoteEditText;
private final View mSendNoteButton; private final MaterialButton mSendNoteButton;
FooterViewHolder(@NonNull View itemView, @NonNull FooterListener listener) FooterViewHolder(@NonNull View itemView, @NonNull FooterListener listener)
{ {
@@ -129,6 +133,29 @@ public class FeatureCategoryAdapter extends RecyclerView.Adapter<RecyclerView.Vi
mNoteEditText = itemView.findViewById(R.id.note_edit_text); mNoteEditText = itemView.findViewById(R.id.note_edit_text);
mSendNoteButton = itemView.findViewById(R.id.send_note_button); mSendNoteButton = itemView.findViewById(R.id.send_note_button);
mSendNoteButton.setOnClickListener(v -> listener.onSendNoteClicked()); mSendNoteButton.setOnClickListener(v -> listener.onSendNoteClicked());
final ColorStateList bgButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mSendNoteButton.getContext(), R.color.base_accent),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_disabled)
});
final ColorStateList textButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mSendNoteButton.getContext(),
UiUtils.getStyledResourceId(mSendNoteButton.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mSendNoteButton.getContext(), R.color.button_accent_text_disabled)
});
mSendNoteButton.setBackgroundTintList(bgButtonColor);
mSendNoteButton.setTextColor(textButtonColor);
mNoteEditText.addTextChangedListener(new StringUtils.SimpleTextWatcher() { mNoteEditText.addTextChangedListener(new StringUtils.SimpleTextWatcher() {
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) public void onTextChanged(CharSequence s, int start, int before, int count)

View File

@@ -158,7 +158,7 @@ public class FromToTimePicker
.setTitleText(title) .setTitleText(title)
.setTimeFormat(mIs24HourFormat ? TimeFormat.CLOCK_24H : TimeFormat.CLOCK_12H) .setTimeFormat(mIs24HourFormat ? TimeFormat.CLOCK_24H : TimeFormat.CLOCK_12H)
.setInputMode(mInputMode) .setInputMode(mInputMode)
.setTheme(R.style.MwmMain_MaterialTimePicker) .setTheme(R.style.MwmTheme_MaterialTimePicker)
.setHour((int) time.hours) .setHour((int) time.hours)
.setMinute((int) time.minutes); .setMinute((int) time.minutes);

View File

@@ -1,7 +1,10 @@
package app.organicmaps.editor; package app.organicmaps.editor;
import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.os.ConfigurationCompat;
import androidx.core.os.LocaleListCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import app.organicmaps.base.BaseMwmRecyclerFragment; import app.organicmaps.base.BaseMwmRecyclerFragment;
import app.organicmaps.sdk.editor.Editor; import app.organicmaps.sdk.editor.Editor;
@@ -11,6 +14,8 @@ import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.Set; import java.util.Set;
public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter> public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
@@ -32,10 +37,28 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
Set<String> existingLanguages = Set<String> existingLanguages =
args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>(); args != null ? new HashSet<>(args.getStringArrayList(EXISTING_LOCALIZED_NAMES)) : new HashSet<>();
Configuration config = requireContext().getResources().getConfiguration();
LocaleListCompat systemLocales = ConfigurationCompat.getLocales(config);
List<Language> languages = new ArrayList<>(); List<Language> languages = new ArrayList<>();
List<Language> systemLanguages = new ArrayList<>(systemLocales.size());
for (int i = 0; i < systemLocales.size(); i++)
systemLanguages.add(null);
for (Language lang : Editor.nativeGetSupportedLanguages(false)) for (Language lang : Editor.nativeGetSupportedLanguages(false))
{ {
if (existingLanguages.contains(lang.code)) // Separately extract system languages
for (int i = 0; i < systemLocales.size(); i++)
{
Locale locale = systemLocales.get(i);
if (locale != null && locale.getLanguage().equals(lang.code))
{
systemLanguages.add(i, lang);
break;
}
}
if (existingLanguages.contains(lang.code) || systemLanguages.contains(lang))
continue; continue;
languages.add(lang); languages.add(lang);
@@ -43,6 +66,8 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment<LanguagesAdapter>
Collections.sort(languages, Comparator.comparing(lhs -> lhs.name)); Collections.sort(languages, Comparator.comparing(lhs -> lhs.name));
languages.addAll(0, systemLanguages.stream().filter(Objects::nonNull).toList());
return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()])); return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()]));
} }

View File

@@ -6,7 +6,6 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
@@ -23,6 +22,7 @@ import app.organicmaps.util.Utils;
import app.organicmaps.util.WindowInsetUtils; import app.organicmaps.util.WindowInsetUtils;
import app.organicmaps.widget.StackedButtonDialogFragment; import app.organicmaps.widget.StackedButtonDialogFragment;
import com.google.android.material.imageview.ShapeableImageView; import com.google.android.material.imageview.ShapeableImageView;
import com.google.android.material.progressindicator.CircularProgressIndicator;
import com.google.android.material.textview.MaterialTextView; import com.google.android.material.textview.MaterialTextView;
import java.text.NumberFormat; import java.text.NumberFormat;
@@ -50,7 +50,7 @@ public class ProfileFragment extends BaseMwmToolbarFragment
private MaterialTextView mEditsSent; private MaterialTextView mEditsSent;
private MaterialTextView mProfileName; private MaterialTextView mProfileName;
private ShapeableImageView mProfileImage; private ShapeableImageView mProfileImage;
private ProgressBar mProfileInfoLoading; private CircularProgressIndicator mProfileInfoLoading;
@Nullable @Nullable
@Override @Override

View File

@@ -1,5 +1,6 @@
package app.organicmaps.editor; package app.organicmaps.editor;
import android.content.res.ColorStateList;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -10,7 +11,7 @@ import android.widget.LinearLayout;
import androidx.annotation.IdRes; import androidx.annotation.IdRes;
import androidx.annotation.IntRange; import androidx.annotation.IntRange;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import app.organicmaps.R; import app.organicmaps.R;
@@ -23,6 +24,7 @@ import app.organicmaps.sdk.util.Utils;
import app.organicmaps.util.UiUtils; import app.organicmaps.util.UiUtils;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.checkbox.MaterialCheckBox; import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.materialswitch.MaterialSwitch;
import com.google.android.material.textview.MaterialTextView; import com.google.android.material.textview.MaterialTextView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -193,7 +195,7 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
SparseArray<MaterialCheckBox> days = new SparseArray<>(7); SparseArray<MaterialCheckBox> days = new SparseArray<>(7);
View allday; View allday;
SwitchCompat swAllday; MaterialSwitch swAllday;
View schedule; View schedule;
View openClose; View openClose;
View open; View open;
@@ -381,6 +383,29 @@ class SimpleTimetableAdapter extends RecyclerView.Adapter<SimpleTimetableAdapter
final boolean enable = mComplementItem != null && mComplementItem.weekdays.length != 0; final boolean enable = mComplementItem != null && mComplementItem.weekdays.length != 0;
final String text = mFragment.getString(R.string.editor_time_add); final String text = mFragment.getString(R.string.editor_time_add);
mAdd.setEnabled(enable); mAdd.setEnabled(enable);
final ColorStateList bgButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(), R.color.base_accent),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_disabled)
});
final ColorStateList textButtonColor = new ColorStateList(
new int[][]{
new int[]{android.R.attr.state_enabled}, // enabled
new int[]{-android.R.attr.state_enabled} // disabled
},
new int[]{
ContextCompat.getColor(
mAdd.getContext(),
UiUtils.getStyledResourceId(mAdd.getContext(), android.R.attr.textColorPrimaryInverse)),
ContextCompat.getColor(mAdd.getContext(), R.color.button_accent_text_disabled)
});
mAdd.setBackgroundTintList(bgButtonColor);
mAdd.setTextColor(textButtonColor);
mAdd.setText(enable ? text + " (" + TimeFormatUtils.formatWeekdays(mComplementItem) + ")" : text); mAdd.setText(enable ? text + " (" + TimeFormatUtils.formatWeekdays(mComplementItem) + ")" : text);
} }
} }

View File

@@ -2,14 +2,12 @@ package app.organicmaps.maplayer;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import androidx.annotation.AttrRes;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.adapter.OnItemClickListener; import app.organicmaps.adapter.OnItemClickListener;
import app.organicmaps.sdk.maplayer.Mode; import app.organicmaps.sdk.maplayer.Mode;
import app.organicmaps.util.ThemeUtils;
public class LayerBottomSheetItem public class LayerBottomSheetItem
{ {
@@ -37,26 +35,24 @@ public class LayerBottomSheetItem
@DrawableRes @DrawableRes
int drawableResId = 0; int drawableResId = 0;
@StringRes @StringRes
int buttonTextResource = R.string.layers_title; int buttonTextResource = switch (mode) {
switch (mode) case OUTDOORS -> {
{
case OUTDOORS:
drawableResId = R.drawable.ic_layers_outdoors; drawableResId = R.drawable.ic_layers_outdoors;
buttonTextResource = R.string.button_layer_outdoor; yield R.string.button_layer_outdoor;
break;
case SUBWAY:
drawableResId = R.drawable.ic_layers_subway;
buttonTextResource = R.string.subway;
break;
case ISOLINES:
drawableResId = R.drawable.ic_layers_isoline;
buttonTextResource = R.string.button_layer_isolines;
break;
case TRAFFIC:
drawableResId = R.drawable.ic_layers_traffic;
buttonTextResource = R.string.button_layer_traffic;
break;
} }
case SUBWAY -> {
drawableResId = R.drawable.ic_layers_subway;
yield R.string.subway;
}
case ISOLINES -> {
drawableResId = R.drawable.ic_layers_isoline;
yield R.string.button_layer_isolines;
}
case TRAFFIC -> {
drawableResId = R.drawable.ic_layers_traffic;
yield R.string.button_layer_traffic;
}
};
return new LayerBottomSheetItem(drawableResId, buttonTextResource, mode, layerItemClickListener); return new LayerBottomSheetItem(drawableResId, buttonTextResource, mode, layerItemClickListener);
} }

View File

@@ -5,10 +5,8 @@ import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StyleRes;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import app.organicmaps.base.BaseMwmFragmentActivity; import app.organicmaps.base.BaseMwmFragmentActivity;
import app.organicmaps.util.ThemeUtils;
public class SearchActivity extends BaseMwmFragmentActivity public class SearchActivity extends BaseMwmFragmentActivity
{ {

View File

@@ -21,6 +21,9 @@ import app.organicmaps.util.UiUtils;
class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHolder> class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHolder>
{ {
private static final int SHORT_HORIZON_CLOSE_MIN = 60;
private static final int SHORT_HORIZON_OPEN_MIN = 15;
private final SearchFragment mSearchFragment; private final SearchFragment mSearchFragment;
@Nullable @Nullable
private SearchResult[] mResults; private SearchResult[] mResults;
@@ -149,41 +152,32 @@ class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchDataViewHol
{ {
final Resources resources = mSearchFragment.getResources(); final Resources resources = mSearchFragment.getResources();
switch (result.description.openNow) if (result.description.openNow != SearchResult.OPEN_NOW_YES && result.description.openNow != SearchResult.OPEN_NOW_NO)
{ {
case SearchResult.OPEN_NOW_YES -> // Hide if unknown opening hours state
{ UiUtils.hide(mOpen);
if (result.description.minutesUntilClosed < 60) // less than 1 hour return;
{ }
final String time = result.description.minutesUntilClosed + " " + resources.getString(R.string.minute);
final String string = resources.getString(R.string.closes_in, time);
UiUtils.setTextAndShow(mOpen, string); final boolean isOpen = result.description.openNow == SearchResult.OPEN_NOW_YES;
final int minsToNextState = isOpen ? result.description.minutesUntilClosed : result.description.minutesUntilOpen;
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
if (shortHorizonClosing || shortHorizonOpening)
{
final String minsToChangeStr = resources.getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = resources.getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
UiUtils.setTextAndShow(mOpen, nextChangeFormatted);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_yellow)); mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_yellow));
} }
else else
{ {
UiUtils.setTextAndShow(mOpen, resources.getString(R.string.editor_time_open)); UiUtils.setTextAndShow(mOpen, isOpen ? resources.getString(R.string.editor_time_open) : resources.getString(R.string.closed));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_green)); mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), isOpen ? R.color.base_green : R.color.base_red));
}
}
case SearchResult.OPEN_NOW_NO ->
{
if (result.description.minutesUntilOpen < 60) // less than 1 hour
{
final String time = result.description.minutesUntilOpen + " " + resources.getString(R.string.minute);
final String string = resources.getString(R.string.opens_in, time);
UiUtils.setTextAndShow(mOpen, string);
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_red));
}
else
{
UiUtils.setTextAndShow(mOpen, resources.getString(R.string.closed));
mOpen.setTextColor(ContextCompat.getColor(mSearchFragment.getContext(), R.color.base_red));
}
}
default -> UiUtils.hide(mOpen);
} }
} }

View File

@@ -8,7 +8,9 @@ import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.SwitchCompat;
import com.google.android.material.materialswitch.MaterialSwitch;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.base.BaseMwmToolbarFragment; import app.organicmaps.base.BaseMwmToolbarFragment;
import app.organicmaps.sdk.routing.RoutingController; import app.organicmaps.sdk.routing.RoutingController;
@@ -88,34 +90,34 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
private void initViews(@NonNull View root) private void initViews(@NonNull View root)
{ {
SwitchCompat tollsBtn = root.findViewById(R.id.avoid_tolls_btn); MaterialSwitch tollsBtn = root.findViewById(R.id.avoid_tolls_btn);
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll)); tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root); CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root);
tollsBtn.setOnCheckedChangeListener(tollBtnListener); tollsBtn.setOnCheckedChangeListener(tollBtnListener);
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn); MaterialSwitch motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway)); motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
CompoundButton.OnCheckedChangeListener motorwayBtnListener = CompoundButton.OnCheckedChangeListener motorwayBtnListener =
new ToggleRoutingOptionListener(RoadType.Motorway, root); new ToggleRoutingOptionListener(RoadType.Motorway, root);
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener); motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn); MaterialSwitch ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry)); ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root); CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root);
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener); ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn); MaterialSwitch dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty)); dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty));
dirtyRoadsBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Paved) || RoutingOptions.hasOption(RoadType.Dirty)); dirtyRoadsBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Paved) || RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty, root); CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty, root);
dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener); dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener);
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn); MaterialSwitch stepsBtn = root.findViewById(R.id.avoid_steps_btn);
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps)); stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root); CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root);
stepsBtn.setOnCheckedChangeListener(stepsBtnListener); stepsBtn.setOnCheckedChangeListener(stepsBtnListener);
SwitchCompat pavedBtn = root.findViewById(R.id.avoid_paved_roads_btn); MaterialSwitch pavedBtn = root.findViewById(R.id.avoid_paved_roads_btn);
pavedBtn.setChecked(RoutingOptions.hasOption(RoadType.Paved)); pavedBtn.setChecked(RoutingOptions.hasOption(RoadType.Paved));
pavedBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Dirty) || RoutingOptions.hasOption(RoadType.Paved)); pavedBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Dirty) || RoutingOptions.hasOption(RoadType.Paved));
CompoundButton.OnCheckedChangeListener pavedBtnListener = new ToggleRoutingOptionListener(RoadType.Paved, root); CompoundButton.OnCheckedChangeListener pavedBtnListener = new ToggleRoutingOptionListener(RoadType.Paved, root);
@@ -144,8 +146,8 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
else else
RoutingOptions.removeOption(mRoadType); RoutingOptions.removeOption(mRoadType);
SwitchCompat dirtyRoadsBtn = mRoot.findViewById(R.id.avoid_dirty_roads_btn); MaterialSwitch dirtyRoadsBtn = mRoot.findViewById(R.id.avoid_dirty_roads_btn);
SwitchCompat pavedBtn = mRoot.findViewById(R.id.avoid_paved_roads_btn); MaterialSwitch pavedBtn = mRoot.findViewById(R.id.avoid_paved_roads_btn);
if (mRoadType == RoadType.Dirty) if (mRoadType == RoadType.Dirty)
{ {
pavedBtn.setEnabled(!isChecked); pavedBtn.setEnabled(!isChecked);

View File

@@ -1,25 +0,0 @@
package app.organicmaps.util;
import android.app.Activity;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.core.text.TextUtilsCompat;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class RtlUtils
{
private final static List<String> rtlLocalesWithTranslation = Arrays.asList("ar", "fa");
public static void manageRtl(@NonNull final Activity activity)
{
final String currentLanguage = Locale.getDefault().getLanguage();
final boolean isRTL =
TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL;
if (isRTL && rtlLocalesWithTranslation.contains(currentLanguage))
activity.getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
else
activity.getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
}
}

View File

@@ -3,7 +3,6 @@ package app.organicmaps.widget;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;

View File

@@ -7,7 +7,6 @@ import androidx.annotation.DrawableRes;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatRadioButton; import androidx.appcompat.widget.AppCompatRadioButton;
import app.organicmaps.R; import app.organicmaps.R;
import app.organicmaps.util.ThemeUtils;
public class RoutingToolbarButton extends AppCompatRadioButton public class RoutingToolbarButton extends AppCompatRadioButton
{ {

View File

@@ -67,7 +67,7 @@ public class MyPositionButton
{ {
case LocationState.PENDING_POSITION -> R.drawable.ic_menu_location_pending; case LocationState.PENDING_POSITION -> R.drawable.ic_menu_location_pending;
case LocationState.NOT_FOLLOW_NO_POSITION -> R.drawable.ic_location_off; case LocationState.NOT_FOLLOW_NO_POSITION -> R.drawable.ic_location_off;
case LocationState.NOT_FOLLOW -> R.drawable.ic_not_follow; case LocationState.NOT_FOLLOW -> R.drawable.ic_location_crosshair;
case LocationState.FOLLOW -> R.drawable.ic_follow; case LocationState.FOLLOW -> R.drawable.ic_follow;
case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate; case LocationState.FOLLOW_AND_ROTATE -> R.drawable.ic_follow_and_rotate;
default -> throw new IllegalArgumentException("Invalid button mode: " + mode); default -> throw new IllegalArgumentException("Invalid button mode: " + mode);

View File

@@ -0,0 +1,49 @@
package app.organicmaps.widget.placepage;
import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.Locale;
public class OpenStateTextFormatter
{
private OpenStateTextFormatter() {}
static String formatHoursMinutes(int hour, int minute, boolean use24h)
{
if (use24h)
return String.format(Locale.ROOT, "%02d:%02d", hour, minute);
int h = hour % 12;
if (h == 0) h = 12;
String ampm = (hour < 12) ? "AM" : "PM";
return String.format(Locale.ROOT, "%d:%02d %s", h, minute, ampm);
}
static boolean isSameLocalDate(ZonedDateTime a, ZonedDateTime b)
{
return a.toLocalDate().isEqual(b.toLocalDate());
}
static String dayShort(ZonedDateTime t, Locale locale)
{
return t.getDayOfWeek().getDisplayName(TextStyle.SHORT, locale);
}
static String buildAtLabel(
boolean opens,
boolean isToday,
String dayShort,
String time,
String opensAtLocalized,
String closesAtLocalized,
String opensDayAtLocalized,
String closesDayAtLocalized
)
{
if (isToday)
return opens ? String.format(Locale.ROOT, opensAtLocalized, time) // Opens at %s
: String.format(Locale.ROOT, closesAtLocalized, time); // Closes at %s
return opens ? String.format(Locale.ROOT, opensDayAtLocalized, dayShort, time) // Opens %s at %s
: String.format(Locale.ROOT, closesDayAtLocalized, dayShort, time); // Closes %s at %s
}
}

View File

@@ -105,4 +105,12 @@ public class PlacePageUtils
}); });
popup.show(); popup.show();
} }
public static String buildPanoramaxURL(double lat, double lon)
{
final String panoramaxURL = "https://api.panoramax.xyz/?map=";
final String levelZoom = "16";
final String quality_score = "&pic_score=ABC";
return panoramaxURL + levelZoom + "/" + lat + "/" + lon + quality_score;
}
} }

View File

@@ -4,6 +4,7 @@ import static android.view.View.GONE;
import static android.view.View.VISIBLE; import static android.view.View.VISIBLE;
import static app.organicmaps.sdk.util.Utils.getLocalizedFeatureType; import static app.organicmaps.sdk.util.Utils.getLocalizedFeatureType;
import static app.organicmaps.sdk.util.Utils.getTagValueLocalized; import static app.organicmaps.sdk.util.Utils.getTagValueLocalized;
import static app.organicmaps.widget.placepage.PlacePageUtils.buildPanoramaxURL;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
@@ -31,6 +32,7 @@ import androidx.fragment.app.FragmentFactory;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import app.organicmaps.MwmActivity; import app.organicmaps.MwmActivity;
import app.organicmaps.MwmApplication; import app.organicmaps.MwmApplication;
import app.organicmaps.R; import app.organicmaps.R;
@@ -55,7 +57,6 @@ import app.organicmaps.sdk.downloader.MapManager;
import app.organicmaps.sdk.editor.Editor; import app.organicmaps.sdk.editor.Editor;
import app.organicmaps.sdk.editor.OhState; import app.organicmaps.sdk.editor.OhState;
import app.organicmaps.sdk.editor.OpeningHours; import app.organicmaps.sdk.editor.OpeningHours;
import app.organicmaps.sdk.editor.data.HoursMinutes;
import app.organicmaps.sdk.editor.data.Timetable; import app.organicmaps.sdk.editor.data.Timetable;
import app.organicmaps.sdk.location.LocationListener; import app.organicmaps.sdk.location.LocationListener;
import app.organicmaps.sdk.location.SensorListener; import app.organicmaps.sdk.location.SensorListener;
@@ -85,9 +86,11 @@ import com.google.android.material.textview.MaterialTextView;
import java.time.Instant; import java.time.Instant;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.TextStyle;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
public class PlacePageView extends Fragment public class PlacePageView extends Fragment
implements View.OnClickListener, View.OnLongClickListener, LocationListener, SensorListener, Observer<MapObject>, implements View.OnClickListener, View.OnLongClickListener, LocationListener, SensorListener, Observer<MapObject>,
@@ -105,6 +108,9 @@ public class PlacePageView extends Fragment
private static final String LINKS_FRAGMENT_TAG = "LINKS_FRAGMENT_TAG"; private static final String LINKS_FRAGMENT_TAG = "LINKS_FRAGMENT_TAG";
private static final String TRACK_SHARE_MENU_ID = "TRACK_SHARE_MENU_ID"; private static final String TRACK_SHARE_MENU_ID = "TRACK_SHARE_MENU_ID";
private static final int SHORT_HORIZON_CLOSE_MIN = 60;
private static final int SHORT_HORIZON_OPEN_MIN = 15;
private static final List<CoordinatesFormat> visibleCoordsFormat = private static final List<CoordinatesFormat> visibleCoordsFormat =
Arrays.asList(CoordinatesFormat.LatLonDMS, CoordinatesFormat.LatLonDecimal, CoordinatesFormat.OLCFull, Arrays.asList(CoordinatesFormat.LatLonDMS, CoordinatesFormat.LatLonDecimal, CoordinatesFormat.OLCFull,
CoordinatesFormat.UTM, CoordinatesFormat.MGRS, CoordinatesFormat.OSMLink); CoordinatesFormat.UTM, CoordinatesFormat.MGRS, CoordinatesFormat.OSMLink);
@@ -149,6 +155,7 @@ public class PlacePageView extends Fragment
private MaterialTextView mTvLastChecked; private MaterialTextView mTvLastChecked;
private View mEditPlace; private View mEditPlace;
private View mAddPlace; private View mAddPlace;
private View mMapTooOld;
private View mEditTopSpace; private View mEditTopSpace;
private ShapeableImageView mColorIcon; private ShapeableImageView mColorIcon;
private MaterialTextView mTvCategory; private MaterialTextView mTvCategory;
@@ -284,6 +291,9 @@ public class PlacePageView extends Fragment
openIn.setOnClickListener(this); openIn.setOnClickListener(this);
openIn.setOnLongClickListener(this); openIn.setOnLongClickListener(this);
openIn.setVisibility(VISIBLE); openIn.setVisibility(VISIBLE);
LinearLayout openPhotoViewer = mFrame.findViewById(R.id.ll__place_open_phviewer);
openPhotoViewer.setOnClickListener(this);
openPhotoViewer.setVisibility(VISIBLE);
mTvLatlon = mFrame.findViewById(R.id.tv__place_latlon); mTvLatlon = mFrame.findViewById(R.id.tv__place_latlon);
mWifi = mFrame.findViewById(R.id.ll__place_wifi); mWifi = mFrame.findViewById(R.id.ll__place_wifi);
mTvWiFi = mFrame.findViewById(R.id.tv__place_wifi); mTvWiFi = mFrame.findViewById(R.id.tv__place_wifi);
@@ -313,6 +323,7 @@ public class PlacePageView extends Fragment
mTvLastChecked = mFrame.findViewById(R.id.place_page_last_checked); mTvLastChecked = mFrame.findViewById(R.id.place_page_last_checked);
mEditPlace = mFrame.findViewById(R.id.ll__place_editor); mEditPlace = mFrame.findViewById(R.id.ll__place_editor);
mAddPlace = mFrame.findViewById(R.id.ll__place_add); mAddPlace = mFrame.findViewById(R.id.ll__place_add);
mMapTooOld = mFrame.findViewById(R.id.cv__map_too_old);
mEditTopSpace = mFrame.findViewById(R.id.edit_top_space); mEditTopSpace = mFrame.findViewById(R.id.edit_top_space);
latlon.setOnLongClickListener(this); latlon.setOnLongClickListener(this);
address.setOnLongClickListener(this); address.setOnLongClickListener(this);
@@ -679,7 +690,7 @@ public class PlacePageView extends Fragment
if (RoutingController.get().isNavigating() || RoutingController.get().isPlanning()) if (RoutingController.get().isNavigating() || RoutingController.get().isPlanning())
{ {
UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace); UiUtils.hide(mEditPlace, mAddPlace, mEditTopSpace, mMapTooOld);
} }
else else
{ {
@@ -687,31 +698,59 @@ public class PlacePageView extends Fragment
UiUtils.showIf(Editor.nativeShouldShowAddPlace(), mAddPlace); UiUtils.showIf(Editor.nativeShouldShowAddPlace(), mAddPlace);
MaterialButton mTvEditPlace = mEditPlace.findViewById(R.id.mb__place_editor); MaterialButton mTvEditPlace = mEditPlace.findViewById(R.id.mb__place_editor);
MaterialButton mTvAddPlace = mAddPlace.findViewById(R.id.mb__place_add); MaterialButton mTvAddPlace = mAddPlace.findViewById(R.id.mb__place_add);
boolean shouldEnableEditPlace = Editor.nativeShouldEnableEditPlace();
if (shouldEnableEditPlace)
{
mTvEditPlace.setOnClickListener(this); mTvEditPlace.setOnClickListener(this);
mTvAddPlace.setOnClickListener(this); mTvAddPlace.setOnClickListener(this);
mTvEditPlace.setEnabled(Editor.nativeShouldEnableEditPlace()); }
mTvAddPlace.setEnabled(Editor.nativeShouldEnableAddPlace()); else
final int editTextButtonColor = {
Editor.nativeShouldEnableEditPlace() mTvEditPlace.setOnClickListener((v) -> {
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
});
mTvAddPlace.setOnClickListener((v) -> {
Utils.showSnackbar(v.getContext(), v.getRootView(), R.string.place_page_too_old_to_edit);
});
CountryItem map = CountryItem.fill(MapManager.nativeGetSelectedCountry());
if (map.status == CountryItem.STATUS_UPDATABLE || map.status == CountryItem.STATUS_DONE
|| map.status == CountryItem.STATUS_FAILED)
{
mMapTooOld.setVisibility(VISIBLE);
MaterialButton mTvUpdateTooOldMap = mMapTooOld.findViewById(R.id.mb__update_too_old_map);
boolean canUpdateMap = map.status != CountryItem.STATUS_DONE;
if (canUpdateMap)
{
mTvUpdateTooOldMap.setOnClickListener((v) -> {
MapManagerHelper.warn3gAndDownload(requireActivity(), map.id, null);
mMapTooOld.setVisibility(GONE);
});
}
else
{
mTvUpdateTooOldMap.setVisibility(GONE);
MaterialTextView mapTooOldDescription = mMapTooOld.findViewById(R.id.tv__map_too_old_description);
mapTooOldDescription.setText(R.string.place_page_app_too_old_description);
}
}
}
final int editButtonColor =
shouldEnableEditPlace
? ContextCompat.getColor( ? ContextCompat.getColor(
getContext(), getContext(),
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary)) UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary))
: ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled); : ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled);
final ColorStateList editStrokeButtonColor = new ColorStateList(
new int[][]{ mTvEditPlace.setTextColor(editButtonColor);
new int[]{android.R.attr.state_enabled}, // enabled mTvAddPlace.setTextColor(editButtonColor);
new int[]{-android.R.attr.state_enabled} // disabled mTvEditPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
}, mTvAddPlace.setStrokeColor(ColorStateList.valueOf(editButtonColor));
new int[]{
ContextCompat.getColor(
getContext(),
UiUtils.getStyledResourceId(getContext(), com.google.android.material.R.attr.colorSecondary)),
ContextCompat.getColor(getContext(), R.color.button_accent_text_disabled)
});
mTvEditPlace.setTextColor(editTextButtonColor);
mTvAddPlace.setTextColor(editTextButtonColor);
mTvEditPlace.setStrokeColor(editStrokeButtonColor);
mTvAddPlace.setStrokeColor(editStrokeButtonColor);
UiUtils.showIf( UiUtils.showIf(
UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace), UiUtils.isVisible(mEditPlace) || UiUtils.isVisible(mAddPlace),
mEditTopSpace); mEditTopSpace);
@@ -797,8 +836,13 @@ public class PlacePageView extends Fragment
final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS); final String ohStr = mMapObject.getMetadata(Metadata.MetadataType.FMD_OPEN_HOURS);
final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr); final Timetable[] timetables = OpeningHours.nativeTimetablesFromString(ohStr);
if (timetables != null && timetables.length != 0) // No valid timetable
if (timetables == null || timetables.length == 0)
{ {
UiUtils.hide(mTvOpenState);
return;
}
final Context context = requireContext(); final Context context = requireContext();
final OhState poiState = OpeningHours.nativeCurrentState(timetables); final OhState poiState = OpeningHours.nativeCurrentState(timetables);
@@ -820,34 +864,99 @@ public class PlacePageView extends Fragment
final SpannableStringBuilder openStateString = new SpannableStringBuilder(); final SpannableStringBuilder openStateString = new SpannableStringBuilder();
final boolean isOpen = (poiState.state == OhState.State.Open); // False == Closed due to early exit for Unknown 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 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 ZonedDateTime nextChangeLocal = null;
boolean hasFiniteNextChange = false;
final long nowSec = System.currentTimeMillis() / 1000;
final int minsToNextState = (int) ((nextStateTime - nowSec) / 60);
// Try to resolve a finite next-change time; handle 24/7 case
final boolean looksLike247 = "24/7".equals(ohStr.trim());
final int ONE_WEEK_MIN = 7 * 24 * 60;
final boolean noRealNextChange = looksLike247 || minsToNextState >= ONE_WEEK_MIN;
if (!noRealNextChange)
{ {
final String minsToChangeStr = minsToNextState + " " + getString(R.string.minute); try
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr); {
final ForegroundColorSpan nextChangeColor = isOpen ? colorYellow : colorRed; if (nextStateTime > 0 && nextStateTime < Long.MAX_VALUE / 2)
// TODO: We should check closed/open time for specific feature's timezone. {
ZonedDateTime time = ZonedDateTime.ofInstant(Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault()); // NOTE: Timezone is currently device timezone. TODO: use feature-specific timezone.
String localizedTime = nextChangeLocal = ZonedDateTime.ofInstant(
new HoursMinutes(time.getHour(), time.getMinute(), DateUtils.is24HourFormat(context)).toString(); Instant.ofEpochSecond(nextStateTime), ZoneId.systemDefault()
);
openStateString.append(nextChangeFormatted, nextChangeColor, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) hasFiniteNextChange = true;
.append("") // Add spacer
.append(getString(R.string.at, localizedTime));
} }
else if (isOpen) }
catch (Throwable ignored) {}
}
if (!hasFiniteNextChange) // No valid next change
{
if (isOpen)
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Closes at 18:00" etc else
else // Closed
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// TODO: Add "Opens at 18:00" etc
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString); UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
return; return;
} }
// No valid timetable
UiUtils.hide(mTvOpenState); String localizedTimeString = OpenStateTextFormatter.formatHoursMinutes(
nextChangeLocal.getHour(), nextChangeLocal.getMinute(), DateUtils.is24HourFormat(context));
final boolean shortHorizonClosing = isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_CLOSE_MIN;
final boolean shortHorizonOpening = !isOpen && minsToNextState >= 0 && minsToNextState <= SHORT_HORIZON_OPEN_MIN;
if (shortHorizonClosing || shortHorizonOpening) // POI Opens/Closes in 60 mins • at 18:00
{
final String minsToChangeStr = getResources().getQuantityString(
R.plurals.minutes_short, Math.max(minsToNextState, 1), Math.max(minsToNextState, 1));
final String nextChangeFormatted = getString(isOpen ? R.string.closes_in : R.string.opens_in, minsToChangeStr);
openStateString.append(nextChangeFormatted, colorYellow, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
.append("") // Add spacer
.append(getString(R.string.at, localizedTimeString));
}
else
{
final String opensAtStr = getString(R.string.opens_at); // "Opens at %s"
final String closesAtStr = getString(R.string.closes_at); // "Closes at %s"
final String opensDayAtStr = getString(R.string.opens_day_at); // "Opens %1$s at %2$s"
final String closesDayAtStr = getString(R.string.closes_day_at); // "Closes %1$s at %2$s"
final boolean isToday =
OpenStateTextFormatter.isSameLocalDate(nextChangeLocal, ZonedDateTime.now(nextChangeLocal.getZone()));
// Full weekday name per design feedback.
final String dayName =
nextChangeLocal.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.getDefault());
if (isOpen) // > 60 minutes OR negative (safety). Show “Open now • Closes at 18:00”
{
openStateString.append(getString(R.string.open_now), colorGreen, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(false, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
else // Closed
{
openStateString.append(getString(R.string.closed_now), colorRed, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
final String atLabel =
OpenStateTextFormatter.buildAtLabel(true, isToday, dayName, localizedTimeString,
opensAtStr, closesAtStr, opensDayAtStr, closesDayAtStr);
if (!TextUtils.isEmpty(atLabel))
openStateString.append("").append(atLabel);
}
}
UiUtils.setTextAndHideIfEmpty(mTvOpenState, openStateString);
} }
private void addPlace() private void addPlace()
@@ -882,6 +991,8 @@ public class PlacePageView extends Fragment
mMapObject.getName()); mMapObject.getName());
Utils.openUri(requireContext(), Uri.parse(uri), R.string.uri_open_location_failed); Utils.openUri(requireContext(), Uri.parse(uri), R.string.uri_open_location_failed);
} }
else if (id == R.id.ll__place_open_phviewer)
Utils.openUrl(requireContext(), buildPanoramaxURL(mMapObject.getLat(),mMapObject.getLon()));
else if (id == R.id.direction_frame) else if (id == R.id.direction_frame)
showBigDirection(); showBigDirection();
else if (id == R.id.item_icon) else if (id == R.id.item_icon)
@@ -929,6 +1040,10 @@ public class PlacePageView extends Fragment
mMapObject.getName()); mMapObject.getName());
PlacePageUtils.copyToClipboard(requireContext(), mFrame, uri); PlacePageUtils.copyToClipboard(requireContext(), mFrame, uri);
} }
else if (id == R.id.ll__place_open_phviewer)
{
PlacePageUtils.copyToClipboard(requireContext(),mFrame, buildPanoramaxURL(mMapObject.getLat(),mMapObject.getLon()));
}
else if (id == R.id.ll__place_operator) else if (id == R.id.ll__place_operator)
items.add(mTvOperator.getText().toString()); items.add(mTvOperator.getText().toString());
else if (id == R.id.ll__place_network) else if (id == R.id.ll__place_network)

View File

@@ -1,13 +1,13 @@
package app.organicmaps.widget.placepage.sections; package app.organicmaps.widget.placepage.sections;
import static android.view.View.INVISIBLE;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.GridLayout; import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
@@ -21,7 +21,6 @@ import app.organicmaps.R;
import app.organicmaps.sdk.Framework; import app.organicmaps.sdk.Framework;
import app.organicmaps.sdk.bookmarks.data.ChargeSocketDescriptor; import app.organicmaps.sdk.bookmarks.data.ChargeSocketDescriptor;
import app.organicmaps.sdk.bookmarks.data.MapObject; import app.organicmaps.sdk.bookmarks.data.MapObject;
import app.organicmaps.sdk.bookmarks.data.Metadata;
import app.organicmaps.widget.placepage.PlacePageViewModel; import app.organicmaps.widget.placepage.PlacePageViewModel;
import java.text.DecimalFormat; import java.text.DecimalFormat;
@@ -89,7 +88,7 @@ public class PlacePageChargeSocketsFragment extends Fragment implements Observer
// load SVG icon converted into VectorDrawable in res/drawable // load SVG icon converted into VectorDrawable in res/drawable
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.type(), "drawable", int resIconId = getResources().getIdentifier("ic_charge_socket_" + socket.visualType(), "drawable",
requireContext().getPackageName()); requireContext().getPackageName());
if (resIconId != 0) if (resIconId != 0)
{ {
@@ -98,7 +97,7 @@ public class PlacePageChargeSocketsFragment extends Fragment implements Observer
@SuppressLint("DiscouragedApi") @SuppressLint("DiscouragedApi")
int resTypeId = int resTypeId =
getResources().getIdentifier("charge_socket_" + socket.type(), "string", requireContext().getPackageName()); getResources().getIdentifier("charge_socket_" + socket.visualType(), "string", requireContext().getPackageName());
if (resTypeId != 0) if (resTypeId != 0)
{ {
type.setText(resTypeId); type.setText(resTypeId);
@@ -109,6 +108,9 @@ public class PlacePageChargeSocketsFragment extends Fragment implements Observer
DecimalFormat df = new DecimalFormat("#.##"); DecimalFormat df = new DecimalFormat("#.##");
power.setText(getString(R.string.kw_label, df.format(socket.power()))); power.setText(getString(R.string.kw_label, df.format(socket.power())));
} }
else if (socket.ignorePower()) {
power.setVisibility(INVISIBLE);
}
if (socket.count() != 0) if (socket.count() != 0)
{ {

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<!-- Material3 alternative to textColorHighlight for dark theme -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="@dimen/material_emphasis_medium" android:color="@color/m3_sys_color_dark_primary" />
</selector>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2021 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<!-- Material3 alternative to textColorHighlight for light theme -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="@dimen/material_emphasis_medium" android:color="?attr/colorOnPrimaryContainer" />
</selector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M20,8 C20.82725,8 21.5,8.67275 21.5,9.5 L21.5,18.5 C21.5,19.32725 20.82725,20 20,20 L8,20 C7.17275,20 6.5,19.32725 6.5,18.5 L6.5,9.5 C6.5,8.67275 7.17275,8 8,8 L20,8 Z M20.00075,14 L8,14 L8,18.5 L20.0015,18.5 L20.00075,14 Z M14,15.5 L14,17 L9.5,17 L9.5,15.5 L14,15.5 Z M20,9.5 L8,9.5 L8,11 L20,11 L20,9.5 Z" /> android:pathData="M20,8 C20.82725,8 21.5,8.67275 21.5,9.5 L21.5,18.5 C21.5,19.32725 20.82725,20 20,20 L8,20 C7.17275,20 6.5,19.32725 6.5,18.5 L6.5,9.5 C6.5,8.67275 7.17275,8 8,8 L20,8 Z M20.00075,14 L8,14 L8,18.5 L20.0015,18.5 L20.00075,14 Z M14,15.5 L14,17 L9.5,17 L9.5,15.5 L14,15.5 Z M20,9.5 L8,9.5 L8,11 L20,11 L20,9.5 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M7,9.53073333 L14,6.3 L21,9.53073333 L21,10.60766 L19.9230733,10.60766 L19.9230733,18.68461 L21,18.68461 L21,20.2999767 L7,20.2999767 L7,18.68461 L8.07692667,18.68461 L8.07692667,10.60766 L7,10.60766 L7,9.53073333 Z M16.6923167,15.2756333 C16.6923167,14.0852833 15.4814333,13.1208 13.9976667,13.1208 C13.50468,13.1208 13.09784,12.7993017 13.09784,12.4012583 C13.09784,12.003215 13.4998967,11.6817167 13.9976667,11.6817167 C14.4954483,11.6817167 14.8974933,12.0070417 14.8974933,12.4012583 L16.69241,12.4012583 C16.69241,11.4673883 15.94096,10.6789083 14.8974933,10.3803583 L14.8974933,9.53068667 L13.1025767,9.53068667 L13.1025767,10.3803583 C12.0591567,10.6788967 11.30766,11.46733 11.30766,12.4012583 C11.30766,13.5916083 12.5185433,14.5560917 14.00231,14.5560917 C14.5000917,14.5560917 14.9021367,14.87759 14.9021367,15.2756333 C14.9021367,15.6736767 14.50008,15.995175 14.00231,15.995175 C13.5045283,15.995175 13.1024833,15.66985 13.1024833,15.2756333 L11.3075667,15.2756333 C11.3075667,16.2095033 12.0590167,16.9979833 13.1024833,17.2965333 L13.1024833,18.146205 L14.8974,18.146205 L14.8974,17.2965333 C15.94082,16.997995 16.6923167,16.2095617 16.6923167,15.2756333 Z" /> android:pathData="M7,9.53073333 L14,6.3 L21,9.53073333 L21,10.60766 L19.9230733,10.60766 L19.9230733,18.68461 L21,18.68461 L21,20.2999767 L7,20.2999767 L7,18.68461 L8.07692667,18.68461 L8.07692667,10.60766 L7,10.60766 L7,9.53073333 Z M16.6923167,15.2756333 C16.6923167,14.0852833 15.4814333,13.1208 13.9976667,13.1208 C13.50468,13.1208 13.09784,12.7993017 13.09784,12.4012583 C13.09784,12.003215 13.4998967,11.6817167 13.9976667,11.6817167 C14.4954483,11.6817167 14.8974933,12.0070417 14.8974933,12.4012583 L16.69241,12.4012583 C16.69241,11.4673883 15.94096,10.6789083 14.8974933,10.3803583 L14.8974933,9.53068667 L13.1025767,9.53068667 L13.1025767,10.3803583 C12.0591567,10.6788967 11.30766,11.46733 11.30766,12.4012583 C11.30766,13.5916083 12.5185433,14.5560917 14.00231,14.5560917 C14.5000917,14.5560917 14.9021367,14.87759 14.9021367,15.2756333 C14.9021367,15.6736767 14.50008,15.995175 14.00231,15.995175 C13.5045283,15.995175 13.1024833,15.66985 13.1024833,15.2756333 L11.3075667,15.2756333 C11.3075667,16.2095033 12.0590167,16.9979833 13.1024833,17.2965333 L13.1024833,18.146205 L14.8974,18.146205 L14.8974,17.2965333 C15.94082,16.997995 16.6923167,16.2095617 16.6923167,15.2756333 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#7F5933" /> <solid android:color="#802D19" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -18,7 +18,7 @@
android:pivotY="12"> android:pivotY="12">
<path <path
android:pathData="M10.7398398,14.5988166 C11.2766539,14.5988166 11.7741396,14.7668787 12.1823664,15.0532612 C11.7724801,15.4914625 11.5235582,16.0775925 11.5235582,16.7240712 L11.529303,16.8892426 L11.5491056,17.0705775 C11.6012609,17.429281 11.7280184,17.7632492 11.9167798,18.0556079 L11.9546499,18.1104694 L11.9142567,18.13405 C11.1417478,18.5947243 10.6376499,19.4380664 10.6376499,20.3887564 L10.637,21.073 L5.952,21.073 L5.95232411,17.1079171 C5.95232411,15.7221656 7.06098553,14.5988166 8.46443574,14.5988166 L10.7398398,14.5988166 Z M14.7363802,18.7647355 C15.6343829,18.7647355 16.3623501,19.4913492 16.3623501,20.3887564 L16.362,21.073 L11.637,21.073 L11.6376499,20.3887564 C11.6376499,19.4918257 12.3552335,18.7647355 13.2636198,18.7647355 L14.7363802,18.7647355 Z M19.4916069,12.4068343 C20.8792516,12.4068343 22.0041478,13.5296391 22.0041478,14.9163636 L22.004,21.073 L17.362,21.073 L17.3623501,20.3887564 L17.3567032,20.2194334 L17.3385166,20.043376 C17.2273964,19.2299207 16.7526866,18.5346787 16.0784713,18.1328785 L16.0416499,18.1124694 L16.0806774,18.0575117 C16.336328,17.665886 16.4764418,17.2070581 16.4764418,16.7240712 C16.4764418,15.6254025 15.757471,14.7010059 14.7609634,14.3838791 C15.0006762,13.2537372 15.9971232,12.4068343 17.215814,12.4068343 L19.4916069,12.4068343 Z M14,15.2664694 C14.8194057,15.2664694 15.4764418,15.9151249 15.4764418,16.7240712 C15.4764418,17.5330608 14.819449,18.1816731 14,18.1816731 C13.1805943,18.1816731 12.5235582,17.5330175 12.5235582,16.7240712 C12.5235582,15.9150816 13.1805943,15.2664694 14,15.2664694 Z M9.60213775,9.19402109 C10.8681135,9.19402109 11.8832295,10.1961892 11.8832295,11.4460053 C11.8832295,12.6958883 10.8681805,13.6979895 9.60213775,13.6979895 C8.33616197,13.6979895 7.32104605,12.6958214 7.32104605,11.4460053 C7.32104605,10.1961223 8.33616197,9.19402109 9.60213775,9.19402109 Z M18.3537105,7.00111521 C19.6199026,7.00111521 20.635192,8.00345456 20.635192,9.25348422 C20.635192,10.5035808 19.6199695,11.5058532 18.3537105,11.5058532 C17.0875184,11.5058532 16.072229,10.5035139 16.072229,9.25348422 C16.072229,8.00338763 17.0875184,7.00111521 18.3537105,7.00111521 Z" android:pathData="M10.7398398,14.5988166 C11.2766539,14.5988166 11.7741396,14.7668787 12.1823664,15.0532612 C11.7724801,15.4914625 11.5235582,16.0775925 11.5235582,16.7240712 L11.529303,16.8892426 L11.5491056,17.0705775 C11.6012609,17.429281 11.7280184,17.7632492 11.9167798,18.0556079 L11.9546499,18.1104694 L11.9142567,18.13405 C11.1417478,18.5947243 10.6376499,19.4380664 10.6376499,20.3887564 L10.637,21.073 L5.952,21.073 L5.95232411,17.1079171 C5.95232411,15.7221656 7.06098553,14.5988166 8.46443574,14.5988166 L10.7398398,14.5988166 Z M14.7363802,18.7647355 C15.6343829,18.7647355 16.3623501,19.4913492 16.3623501,20.3887564 L16.362,21.073 L11.637,21.073 L11.6376499,20.3887564 C11.6376499,19.4918257 12.3552335,18.7647355 13.2636198,18.7647355 L14.7363802,18.7647355 Z M19.4916069,12.4068343 C20.8792516,12.4068343 22.0041478,13.5296391 22.0041478,14.9163636 L22.004,21.073 L17.362,21.073 L17.3623501,20.3887564 L17.3567032,20.2194334 L17.3385166,20.043376 C17.2273964,19.2299207 16.7526866,18.5346787 16.0784713,18.1328785 L16.0416499,18.1124694 L16.0806774,18.0575117 C16.336328,17.665886 16.4764418,17.2070581 16.4764418,16.7240712 C16.4764418,15.6254025 15.757471,14.7010059 14.7609634,14.3838791 C15.0006762,13.2537372 15.9971232,12.4068343 17.215814,12.4068343 L19.4916069,12.4068343 Z M14,15.2664694 C14.8194057,15.2664694 15.4764418,15.9151249 15.4764418,16.7240712 C15.4764418,17.5330608 14.819449,18.1816731 14,18.1816731 C13.1805943,18.1816731 12.5235582,17.5330175 12.5235582,16.7240712 C12.5235582,15.9150816 13.1805943,15.2664694 14,15.2664694 Z M9.60213775,9.19402109 C10.8681135,9.19402109 11.8832295,10.1961892 11.8832295,11.4460053 C11.8832295,12.6958883 10.8681805,13.6979895 9.60213775,13.6979895 C8.33616197,13.6979895 7.32104605,12.6958214 7.32104605,11.4460053 C7.32104605,10.1961223 8.33616197,9.19402109 9.60213775,9.19402109 Z M18.3537105,7.00111521 C19.6199026,7.00111521 20.635192,8.00345456 20.635192,9.25348422 C20.635192,10.5035808 19.6199695,11.5058532 18.3537105,11.5058532 C17.0875184,11.5058532 16.072229,10.5035139 16.072229,9.25348422 C16.072229,8.00338763 17.0875184,7.00111521 18.3537105,7.00111521 Z"
android:fillColor="#FFF" /> android:fillColor="#000" />
</group> </group>
</vector> </vector>
</item> </item>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#BB9342" /> <solid android:color="#8C491C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -18,7 +18,7 @@
android:pivotY="12"> android:pivotY="12">
<path <path
android:pathData="M12.5416667,11.1416783 L12.5416667,7.70257833 C12.5416667,7.31455667 12.232395,7 11.8466717,7 L11.7783342,7 C11.3945008,7 11.0833392,7.32498667 11.0833392,7.70257833 L11.0833392,11.1416783 L9.62500583,11.1416783 L9.62500583,7.70257833 C9.62500583,7.31455667 9.31573417,7 8.93001083,7 L8.86167333,7 C8.47784,7 8.16667833,7.32498667 8.16667833,7.70257833 L8.16667833,11.1416783 C8.16667833,12.749345 9.62501167,14.0000117 11.0104283,14.0000117 L10.8211833,20.055945 C10.8048897,20.5773283 11.2048417,21 11.7169383,21 L11.9080967,21 C12.4190967,21 12.815985,20.58308 12.7940167,20.055945 L12.54169,14.0000117 C14.0000233,14.0000117 15.7500233,12.749345 15.4583567,11.1416783 L15.4583567,7.70257833 C15.4583567,7.31455667 15.149085,7 14.7633617,7 L14.6950242,7 C14.3111908,7 14.0000292,7.32498667 14.0000292,7.70257833 L14.0000292,11.1416783 L12.5416958,11.1416783 L12.5416667,11.1416783 Z M16.3333333,14.933345 L18.0833333,14.933345 L18.0833333,20.130845 C18.0833333,20.6108933 18.4717167,21.0000467 18.9583333,21.0000467 C19.4415783,21.0000467 19.8333333,20.6109983 19.8333333,20.1242883 L19.8333333,7.000455 C17.3903333,7.000455 16.275,8.69912167 16.3333333,10.0337883 L16.3333333,14.9337883 L16.3333333,14.933345 Z" android:pathData="M12.5416667,11.1416783 L12.5416667,7.70257833 C12.5416667,7.31455667 12.232395,7 11.8466717,7 L11.7783342,7 C11.3945008,7 11.0833392,7.32498667 11.0833392,7.70257833 L11.0833392,11.1416783 L9.62500583,11.1416783 L9.62500583,7.70257833 C9.62500583,7.31455667 9.31573417,7 8.93001083,7 L8.86167333,7 C8.47784,7 8.16667833,7.32498667 8.16667833,7.70257833 L8.16667833,11.1416783 C8.16667833,12.749345 9.62501167,14.0000117 11.0104283,14.0000117 L10.8211833,20.055945 C10.8048897,20.5773283 11.2048417,21 11.7169383,21 L11.9080967,21 C12.4190967,21 12.815985,20.58308 12.7940167,20.055945 L12.54169,14.0000117 C14.0000233,14.0000117 15.7500233,12.749345 15.4583567,11.1416783 L15.4583567,7.70257833 C15.4583567,7.31455667 15.149085,7 14.7633617,7 L14.6950242,7 C14.3111908,7 14.0000292,7.32498667 14.0000292,7.70257833 L14.0000292,11.1416783 L12.5416958,11.1416783 L12.5416667,11.1416783 Z M16.3333333,14.933345 L18.0833333,14.933345 L18.0833333,20.130845 C18.0833333,20.6108933 18.4717167,21.0000467 18.9583333,21.0000467 C19.4415783,21.0000467 19.8333333,20.6109983 19.8333333,20.1242883 L19.8333333,7.000455 C17.3903333,7.000455 16.275,8.69912167 16.3333333,10.0337883 L16.3333333,14.9337883 L16.3333333,14.933345 Z"
android:fillColor="#FFF" /> android:fillColor="#000" />
</group> </group>
</vector> </vector>
</item> </item>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#7F5933" /> <solid android:color="#802D19" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -18,7 +18,7 @@
android:pivotY="12"> android:pivotY="12">
<path <path
android:pathData="M14.8166667,12.2166667 L14.8166667,17.525 C14.8166667,20.0076667 12.8076667,22.0166667 10.325,22.0166667 C7.84233333,22.0166667 5.83333333,20.0076667 5.83333333,17.525 L5.83333333,12.2166667 L14.8166667,12.2166667 Z M12.3666667,17.9333333 L8.28333333,17.9333333 C8.28333333,18.6111667 9.198,19.1583333 10.325,19.1583333 C11.452,19.1583333 12.3666667,18.6111667 12.3666667,17.9333333 Z M22.1666667,6.5 L22.1666667,11.8083333 C22.1666667,14.291 20.1576667,16.3 17.675,16.3 C16.94,16.3 16.2458333,16.1121667 15.6333333,15.8018333 L15.6333333,11.4 L13.1833333,11.4 L13.1833333,6.5 L22.1666667,6.5 Z M12.3666667,14.6666667 C11.9175,14.6666667 11.55,15.0341667 11.55,15.4833333 C11.55,15.9325 11.9175,16.3 12.3666667,16.3 C12.8158333,16.3 13.1833333,15.9325 13.1833333,15.4833333 C13.1833333,15.0341667 12.8158333,14.6666667 12.3666667,14.6666667 Z M8.28333333,14.6666667 C7.83416667,14.6666667 7.46666667,15.0341667 7.46666667,15.4833333 C7.46666667,15.9325 7.83416667,16.3 8.28333333,16.3 C8.7325,16.3 9.1,15.9325 9.1,15.4833333 C9.1,15.0341667 8.7325,14.6666667 8.28333333,14.6666667 Z M17.675,12.2166667 C16.548,12.2166667 15.6333333,12.7638333 15.6333333,13.4416667 L19.7166667,13.4416667 C19.7166667,12.7638333 18.802,12.2166667 17.675,12.2166667 Z M15.6333333,9.01533333 C15.1841667,9.01533333 14.8166667,9.38283333 14.8166667,9.832 C14.8166667,10.2811667 15.1841667,10.6486667 15.6333333,10.6486667 C16.0825,10.6486667 16.45,10.2893333 16.45,9.832 C16.45,9.38283333 16.0825,9.01533333 15.6333333,9.01533333 Z M19.7166667,9.01533333 C19.2675,9.01533333 18.9,9.38283333 18.9,9.832 C18.9,10.2811667 19.2675,10.6486667 19.7166667,10.6486667 C20.1658333,10.6486667 20.5333333,10.2893333 20.5333333,9.832 C20.5333333,9.38283333 20.1658333,9.01533333 19.7166667,9.01533333 Z" android:pathData="M14.8166667,12.2166667 L14.8166667,17.525 C14.8166667,20.0076667 12.8076667,22.0166667 10.325,22.0166667 C7.84233333,22.0166667 5.83333333,20.0076667 5.83333333,17.525 L5.83333333,12.2166667 L14.8166667,12.2166667 Z M12.3666667,17.9333333 L8.28333333,17.9333333 C8.28333333,18.6111667 9.198,19.1583333 10.325,19.1583333 C11.452,19.1583333 12.3666667,18.6111667 12.3666667,17.9333333 Z M22.1666667,6.5 L22.1666667,11.8083333 C22.1666667,14.291 20.1576667,16.3 17.675,16.3 C16.94,16.3 16.2458333,16.1121667 15.6333333,15.8018333 L15.6333333,11.4 L13.1833333,11.4 L13.1833333,6.5 L22.1666667,6.5 Z M12.3666667,14.6666667 C11.9175,14.6666667 11.55,15.0341667 11.55,15.4833333 C11.55,15.9325 11.9175,16.3 12.3666667,16.3 C12.8158333,16.3 13.1833333,15.9325 13.1833333,15.4833333 C13.1833333,15.0341667 12.8158333,14.6666667 12.3666667,14.6666667 Z M8.28333333,14.6666667 C7.83416667,14.6666667 7.46666667,15.0341667 7.46666667,15.4833333 C7.46666667,15.9325 7.83416667,16.3 8.28333333,16.3 C8.7325,16.3 9.1,15.9325 9.1,15.4833333 C9.1,15.0341667 8.7325,14.6666667 8.28333333,14.6666667 Z M17.675,12.2166667 C16.548,12.2166667 15.6333333,12.7638333 15.6333333,13.4416667 L19.7166667,13.4416667 C19.7166667,12.7638333 18.802,12.2166667 17.675,12.2166667 Z M15.6333333,9.01533333 C15.1841667,9.01533333 14.8166667,9.38283333 14.8166667,9.832 C14.8166667,10.2811667 15.1841667,10.6486667 15.6333333,10.6486667 C16.0825,10.6486667 16.45,10.2893333 16.45,9.832 C16.45,9.38283333 16.0825,9.01533333 15.6333333,9.01533333 Z M19.7166667,9.01533333 C19.2675,9.01533333 18.9,9.38283333 18.9,9.832 C18.9,10.2811667 19.2675,10.6486667 19.7166667,10.6486667 C20.1658333,10.6486667 20.5333333,10.2893333 20.5333333,9.832 C20.5333333,9.38283333 20.1658333,9.01533333 19.7166667,9.01533333 Z"
android:fillColor="#FFF" /> android:fillColor="#000" />
</group> </group>
</vector> </vector>
</item> </item>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#8C5F93" /> <solid android:color="#6B425C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M11.3735667,18.307716 C10.6313217,18.307716 10.0307333,18.9134843 10.0307333,19.653816 C10.0307333,20.394206 10.631275,20.999916 11.3735667,20.999916 C12.1158117,20.999916 12.72305,20.3941477 12.72305,19.653816 C12.72305,18.913426 12.115765,18.307716 11.3735667,18.307716 Z M6.8,7.48804933 C6.8,7.813281 7.06993167,8.07692433 7.38562,8.07692433 L8.2,8.07692433 L10.3,14.5385077 C9.55654167,14.5385077 8.9539,15.3205827 8.9539,16.286291 L8.9539,16.0215277 C8.9539,16.9867927 9.739055,17.769311 10.7023833,17.769311 L18.8085,17.769311 C19.1352133,17.769311 19.4000583,17.5195393 19.4000583,17.180436 L19.4000583,17.2812663 C19.4000583,16.9560347 19.129765,16.6923913 18.8139717,16.6923913 L10.6169717,16.6923913 C10.29328,16.6923913 10.030885,16.4426197 10.030885,16.1035163 L10.030885,16.2043467 C10.030885,15.879115 10.2980983,15.6154717 10.6084667,15.6154717 L18.0620667,15.6154717 C19.2169033,15.6154717 19.113315,15.3197567 19.2870667,14.969325 L20.7161167,10.1360583 C20.7721167,10.0380583 20.8001167,9.91905833 20.8001167,9.80005833 C20.8001167,9.41505833 20.4851167,9.10005833 20.2616533,9.1539 L9.74707,9.1539 L8.90007,7 L7.37395333,7 C7.05702833,7 6.8,7.24977167 6.8,7.588875 L6.8,7.48804467 L6.8,7.48804933 Z M17.8350333,18.307716 C17.0927883,18.307716 16.4922,18.9134843 16.4922,19.653816 C16.4922,20.394206 17.0927417,20.999916 17.8350333,20.999916 C18.577325,20.999916 19.1845167,20.3941477 19.1845167,19.653816 C19.1845167,18.913426 18.5772317,18.307716 17.8350333,18.307716 Z" /> android:pathData="M11.3735667,18.307716 C10.6313217,18.307716 10.0307333,18.9134843 10.0307333,19.653816 C10.0307333,20.394206 10.631275,20.999916 11.3735667,20.999916 C12.1158117,20.999916 12.72305,20.3941477 12.72305,19.653816 C12.72305,18.913426 12.115765,18.307716 11.3735667,18.307716 Z M6.8,7.48804933 C6.8,7.813281 7.06993167,8.07692433 7.38562,8.07692433 L8.2,8.07692433 L10.3,14.5385077 C9.55654167,14.5385077 8.9539,15.3205827 8.9539,16.286291 L8.9539,16.0215277 C8.9539,16.9867927 9.739055,17.769311 10.7023833,17.769311 L18.8085,17.769311 C19.1352133,17.769311 19.4000583,17.5195393 19.4000583,17.180436 L19.4000583,17.2812663 C19.4000583,16.9560347 19.129765,16.6923913 18.8139717,16.6923913 L10.6169717,16.6923913 C10.29328,16.6923913 10.030885,16.4426197 10.030885,16.1035163 L10.030885,16.2043467 C10.030885,15.879115 10.2980983,15.6154717 10.6084667,15.6154717 L18.0620667,15.6154717 C19.2169033,15.6154717 19.113315,15.3197567 19.2870667,14.969325 L20.7161167,10.1360583 C20.7721167,10.0380583 20.8001167,9.91905833 20.8001167,9.80005833 C20.8001167,9.41505833 20.4851167,9.10005833 20.2616533,9.1539 L9.74707,9.1539 L8.90007,7 L7.37395333,7 C7.05702833,7 6.8,7.24977167 6.8,7.588875 L6.8,7.48804467 L6.8,7.48804933 Z M17.8350333,18.307716 C17.0927883,18.307716 16.4922,18.9134843 16.4922,19.653816 C16.4922,20.394206 17.0927417,20.999916 17.8350333,20.999916 C18.577325,20.999916 19.1845167,20.3941477 19.1845167,19.653816 C19.1845167,18.913426 18.5772317,18.307716 17.8350333,18.307716 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#574469" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M17.846514,4.676 C17.5575662,4.7216586 17.3186367,4.92551065 17.2280519,5.20366514 C17.1374671,5.48181964 17.2105329,5.78727723 17.4171807,5.99433333 L19.428514,8.00566667 C19.799514,8.37666667 20.062014,8.83516667 20.1973474,9.33333333 L19.523014,9.33333333 C18.2431807,9.33333333 17.1896807,10.3868333 17.1896807,11.6666667 C17.1896807,12.9465 18.2431807,14 19.523014,14 L20.300007,14 L20.300007,19.4448333 C20.300007,19.8835 19.9616807,20.2218333 19.523014,20.2218333 C19.315878,20.2250062 19.1162779,20.1442015 18.9696836,19.997827 C18.8230893,19.8514525 18.7419852,19.6519738 18.7448474,19.4448333 L18.7448474,17.8885 C18.7448474,16.6098333 17.6913474,15.5551667 16.411514,15.5551667 L15.6333474,15.5551667 L15.6333474,7.77816667 C15.6345903,7.36522389 15.4711795,6.96881891 15.1792931,6.67671349 C14.8874066,6.38460807 14.4911243,6.22090001 14.0781807,6.22183333 L7.85634735,6.22183333 C7.44320185,6.22058891 7.04661893,6.38415963 6.75447962,6.67629894 C6.46234031,6.96843825 6.2987696,7.36502117 6.30000697,7.77816667 L6.30000697,20.2218333 C6.2987696,20.6349788 6.46234031,21.0315618 6.75447962,21.3237011 C7.04661893,21.6158404 7.44320185,21.7794111 7.85634735,21.7781737 L14.0781807,21.7781737 C14.4911243,21.7791 14.8874066,21.6153919 15.1792931,21.3232865 C15.4711795,21.0311811 15.6345903,20.6347761 15.6333474,20.2218333 L15.6333474,17.1115 L16.411514,17.1115 C16.8501807,17.1115 17.1896807,17.4498333 17.1896807,17.8885 L17.1896807,19.4448333 C17.1896807,20.7235 18.2431807,21.7781737 19.523014,21.7781737 C20.8016807,21.7781737 21.8563474,20.7235 21.8563474,19.4448333 L21.8563474,10.1115 C21.8563474,8.90940677 21.3788136,7.75655029 20.5286807,6.90666667 L18.5173474,4.89416667 C18.3411731,4.71808596 18.0913541,4.63698153 17.8453474,4.676 L17.846514,4.676 Z M8.63218069,7.77816667 L13.2988474,7.77816667 C13.730514,7.77816667 14.077014,8.12466667 14.077014,8.55516667 L14.077014,12.4448333 L7.85634735,12.4448333 L7.85634735,8.55516667 C7.85634735,8.12466667 8.20284735,7.77816667 8.63334735,7.77816667 L8.63218069,7.77816667 Z M19.523014,10.5 C20.1673462,10.5 20.6896807,11.0223345 20.6896807,11.6666667 C20.6896807,12.3109989 20.1673462,12.8333333 19.523014,12.8333333 C18.8786818,12.8333333 18.3563474,12.3109989 18.3563474,11.6666667 C18.3563474,11.0223345 18.8786818,10.5 19.523014,10.5 Z" /> android:pathData="M17.846514,4.676 C17.5575662,4.7216586 17.3186367,4.92551065 17.2280519,5.20366514 C17.1374671,5.48181964 17.2105329,5.78727723 17.4171807,5.99433333 L19.428514,8.00566667 C19.799514,8.37666667 20.062014,8.83516667 20.1973474,9.33333333 L19.523014,9.33333333 C18.2431807,9.33333333 17.1896807,10.3868333 17.1896807,11.6666667 C17.1896807,12.9465 18.2431807,14 19.523014,14 L20.300007,14 L20.300007,19.4448333 C20.300007,19.8835 19.9616807,20.2218333 19.523014,20.2218333 C19.315878,20.2250062 19.1162779,20.1442015 18.9696836,19.997827 C18.8230893,19.8514525 18.7419852,19.6519738 18.7448474,19.4448333 L18.7448474,17.8885 C18.7448474,16.6098333 17.6913474,15.5551667 16.411514,15.5551667 L15.6333474,15.5551667 L15.6333474,7.77816667 C15.6345903,7.36522389 15.4711795,6.96881891 15.1792931,6.67671349 C14.8874066,6.38460807 14.4911243,6.22090001 14.0781807,6.22183333 L7.85634735,6.22183333 C7.44320185,6.22058891 7.04661893,6.38415963 6.75447962,6.67629894 C6.46234031,6.96843825 6.2987696,7.36502117 6.30000697,7.77816667 L6.30000697,20.2218333 C6.2987696,20.6349788 6.46234031,21.0315618 6.75447962,21.3237011 C7.04661893,21.6158404 7.44320185,21.7794111 7.85634735,21.7781737 L14.0781807,21.7781737 C14.4911243,21.7791 14.8874066,21.6153919 15.1792931,21.3232865 C15.4711795,21.0311811 15.6345903,20.6347761 15.6333474,20.2218333 L15.6333474,17.1115 L16.411514,17.1115 C16.8501807,17.1115 17.1896807,17.4498333 17.1896807,17.8885 L17.1896807,19.4448333 C17.1896807,20.7235 18.2431807,21.7781737 19.523014,21.7781737 C20.8016807,21.7781737 21.8563474,20.7235 21.8563474,19.4448333 L21.8563474,10.1115 C21.8563474,8.90940677 21.3788136,7.75655029 20.5286807,6.90666667 L18.5173474,4.89416667 C18.3411731,4.71808596 18.0913541,4.63698153 17.8453474,4.676 L17.846514,4.676 Z M8.63218069,7.77816667 L13.2988474,7.77816667 C13.730514,7.77816667 14.077014,8.12466667 14.077014,8.55516667 L14.077014,12.4448333 L7.85634735,12.4448333 L7.85634735,8.55516667 C7.85634735,8.12466667 8.20284735,7.77816667 8.63334735,7.77816667 L8.63218069,7.77816667 Z M19.523014,10.5 C20.1673462,10.5 20.6896807,11.0223345 20.6896807,11.6666667 C20.6896807,12.3109989 20.1673462,12.8333333 19.523014,12.8333333 C18.8786818,12.8333333 18.3563474,12.3109989 18.3563474,11.6666667 C18.3563474,11.0223345 18.8786818,10.5 19.523014,10.5 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#C15746" /> <solid android:color="#983E44" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M21.1291111,17.1111111 L17.1106444,17.1111111 L17.1106444,21.1295778 C17.1106444,21.9138422 16.4689778,22.5555089 15.6847133,22.5555089 L12.3142911,22.5555089 C11.5300267,22.5555089 10.88836,21.9138422 10.88836,21.1295778 L10.88836,17.1111111 L6.86973778,17.1111111 C6.08547333,17.1111111 5.44383778,16.4694444 5.44383778,15.68518 L5.44383778,12.3147578 C5.44383778,11.5304933 6.08550444,10.8888267 6.86973778,10.8888267 L10.88836,10.8888267 L10.88836,6.87036 C10.88836,6.08609556 11.5300267,5.44442889 12.3142911,5.44442889 L15.6847133,5.44442889 C16.4689778,5.44442889 17.1106444,6.08609556 17.1106444,6.87036 L17.1106444,10.8888267 L21.1291111,10.8888267 C21.9133756,10.8888267 22.5550422,11.5304933 22.5550422,12.3147578 L22.5550422,15.68518 C22.5550422,16.4694444 21.9133756,17.1111111 21.1291111,17.1111111 Z" /> android:pathData="M21.1291111,17.1111111 L17.1106444,17.1111111 L17.1106444,21.1295778 C17.1106444,21.9138422 16.4689778,22.5555089 15.6847133,22.5555089 L12.3142911,22.5555089 C11.5300267,22.5555089 10.88836,21.9138422 10.88836,21.1295778 L10.88836,17.1111111 L6.86973778,17.1111111 C6.08547333,17.1111111 5.44383778,16.4694444 5.44383778,15.68518 L5.44383778,12.3147578 C5.44383778,11.5304933 6.08550444,10.8888267 6.86973778,10.8888267 L10.88836,10.8888267 L10.88836,6.87036 C10.88836,6.08609556 11.5300267,5.44442889 12.3142911,5.44442889 L15.6847133,5.44442889 C16.4689778,5.44442889 17.1106444,6.08609556 17.1106444,6.87036 L17.1106444,10.8888267 L21.1291111,10.8888267 C21.9133756,10.8888267 22.5550422,11.5304933 22.5550422,12.3147578 L22.5550422,15.68518 C22.5550422,16.4694444 21.9133756,17.1111111 21.1291111,17.1111111 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#664E42" /> <solid android:color="#614A43" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M10.2879,14.1061667 C11.5203667,14.1061667 12.5151833,13.111315 12.5151833,11.8788833 C12.5151833,10.6464167 11.5203317,9.6516 10.2879,9.6516 C9.05543333,9.6516 8.06061667,10.6464517 8.06061667,11.8788833 C8.06061667,13.11135 9.05546833,14.1061667 10.2879,14.1061667 Z M19.1970333,9.6516 L14.7424667,9.6516 C13.9258,9.6516 13.25765,10.319785 13.25765,11.1364167 L13.25765,14.8485167 L7.31826667,14.8485167 L7.31826667,8.90913333 C7.31826667,8.5008 6.98418,8.16671333 6.57584667,8.16671333 C6.16751333,8.16671333 5.83342667,8.5008 5.83342667,8.90913333 L5.83342667,18.5606167 C5.83342667,18.96895 6.16751333,19.3030367 6.57584667,19.3030367 C6.98418,19.3030367 7.31826667,18.96895 7.31826667,18.5606167 L7.31826667,17.0758 L20.6824333,17.0758 L20.6824333,18.5606167 C20.6824333,18.96895 21.01652,19.3030367 21.4248533,19.3030367 C21.8331867,19.3030367 22.1672733,18.96895 22.1672733,18.5606167 L22.1672733,12.6212333 C22.1672733,10.9804333 20.8383233,9.65148333 19.1975233,9.65148333 L19.1970333,9.6516 Z" /> android:pathData="M10.2879,14.1061667 C11.5203667,14.1061667 12.5151833,13.111315 12.5151833,11.8788833 C12.5151833,10.6464167 11.5203317,9.6516 10.2879,9.6516 C9.05543333,9.6516 8.06061667,10.6464517 8.06061667,11.8788833 C8.06061667,13.11135 9.05546833,14.1061667 10.2879,14.1061667 Z M19.1970333,9.6516 L14.7424667,9.6516 C13.9258,9.6516 13.25765,10.319785 13.25765,11.1364167 L13.25765,14.8485167 L7.31826667,14.8485167 L7.31826667,8.90913333 C7.31826667,8.5008 6.98418,8.16671333 6.57584667,8.16671333 C6.16751333,8.16671333 5.83342667,8.5008 5.83342667,8.90913333 L5.83342667,18.5606167 C5.83342667,18.96895 6.16751333,19.3030367 6.57584667,19.3030367 C6.98418,19.3030367 7.31826667,18.96895 7.31826667,18.5606167 L7.31826667,17.0758 L20.6824333,17.0758 L20.6824333,18.5606167 C20.6824333,18.96895 21.01652,19.3030367 21.4248533,19.3030367 C21.8331867,19.3030367 22.1672733,18.96895 22.1672733,18.5606167 L22.1672733,12.6212333 C22.1672733,10.9804333 20.8383233,9.65148333 19.1975233,9.65148333 L19.1970333,9.6516 Z" />
</group> </group>
</vector> </vector>

View File

@@ -20,7 +20,7 @@
android:scaleX="0.5" android:scaleX="0.5"
android:scaleY="0.5"> android:scaleY="0.5">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M8.5714,5.1429l6.8571,0l0,-1.7143l-6.8571,0ZM24,13.7143l0,6.4286c0,0.5893 -0.2098,1.0938 -0.6295,1.5134 -0.4196,0.4196 -0.9241,0.6295 -1.5134,0.6295l-19.7143,0c-0.5893,0 -1.0938,-0.2098 -1.5134,-0.6295 -0.4196,-0.4196 -0.6295,-0.9241 -0.6295,-1.5134l0,-6.4286l9,0l0,2.1429c0,0.2321 0.0848,0.433 0.2545,0.6027 0.1696,0.1696 0.3705,0.2545 0.6027,0.2545l4.2857,0c0.2321,0 0.433,-0.0848 0.6027,-0.2545 0.1696,-0.1696 0.2545,-0.3705 0.2545,-0.6027l0,-2.1429ZM13.7143,13.7143l0,1.7143l-3.4286,0l0,-1.7143ZM24,7.2857l0,5.1429l-24,0l0,-5.1429c0,-0.5893 0.2098,-1.0938 0.6295,-1.5134 0.4196,-0.4196 0.9241,-0.6295 1.5134,-0.6295l4.7143,0l0,-2.1429c0,-0.3571 0.125,-0.6607 0.375,-0.9107 0.25,-0.25 0.5536,-0.375 0.9107,-0.375l7.7143,0c0.3571,0 0.6607,0.125 0.9107,0.375 0.25,0.25 0.375,0.5536 0.375,0.9107l0,2.1429l4.7143,0c0.5893,0 1.0938,0.2098 1.5134,0.6295 0.4196,0.4196 0.6295,0.9241 0.6295,1.5134Z" /> android:pathData="M8.5714,5.1429l6.8571,0l0,-1.7143l-6.8571,0ZM24,13.7143l0,6.4286c0,0.5893 -0.2098,1.0938 -0.6295,1.5134 -0.4196,0.4196 -0.9241,0.6295 -1.5134,0.6295l-19.7143,0c-0.5893,0 -1.0938,-0.2098 -1.5134,-0.6295 -0.4196,-0.4196 -0.6295,-0.9241 -0.6295,-1.5134l0,-6.4286l9,0l0,2.1429c0,0.2321 0.0848,0.433 0.2545,0.6027 0.1696,0.1696 0.3705,0.2545 0.6027,0.2545l4.2857,0c0.2321,0 0.433,-0.0848 0.6027,-0.2545 0.1696,-0.1696 0.2545,-0.3705 0.2545,-0.6027l0,-2.1429ZM13.7143,13.7143l0,1.7143l-3.4286,0l0,-1.7143ZM24,7.2857l0,5.1429l-24,0l0,-5.1429c0,-0.5893 0.2098,-1.0938 0.6295,-1.5134 0.4196,-0.4196 0.9241,-0.6295 1.5134,-0.6295l4.7143,0l0,-2.1429c0,-0.3571 0.125,-0.6607 0.375,-0.9107 0.25,-0.25 0.5536,-0.375 0.9107,-0.375l7.7143,0c0.3571,0 0.6607,0.125 0.9107,0.375 0.25,0.25 0.375,0.5536 0.375,0.9107l0,2.1429l4.7143,0c0.5893,0 1.0938,0.2098 1.5134,0.6295 0.4196,0.4196 0.6295,0.9241 0.6295,1.5134Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#BB9342" /> <solid android:color="#8C491C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M21,8.42778167 C21,7.80556333 20.4944483,7.3 19.8722183,7.3 L8.127385,7.3 C7.50516667,7.3 6.99960333,7.80555167 6.99960333,8.42778167 C6.99960333,8.7 7.10071483,8.97223 7.287385,9.17444833 L13.2218683,15.8555983 L13.2218683,19.7444483 L10.1107183,19.7444483 C9.68293667,19.7444483 9.33293667,20.0944483 9.33293667,20.52223 C9.33293667,20.9500117 9.68293667,21.3000117 10.1107183,21.3000117 L17.888535,21.3000117 C18.3163167,21.3000117 18.6663167,20.9500117 18.6663167,20.52223 C18.6663167,20.0944483 18.3163167,19.7444483 17.888535,19.7444483 L14.777385,19.7444483 L14.777385,15.8555983 L20.7118683,9.17444833 C20.898535,8.97223 20.99965,8.7 20.99965,8.42778167 L21,8.42778167 Z M10.4455167,10.411115 L9.06885,8.85559833 L18.93885,8.85559833 L17.5543667,10.411115 L10.4455167,10.411115 L10.4455167,10.411115 Z" /> android:pathData="M21,8.42778167 C21,7.80556333 20.4944483,7.3 19.8722183,7.3 L8.127385,7.3 C7.50516667,7.3 6.99960333,7.80555167 6.99960333,8.42778167 C6.99960333,8.7 7.10071483,8.97223 7.287385,9.17444833 L13.2218683,15.8555983 L13.2218683,19.7444483 L10.1107183,19.7444483 C9.68293667,19.7444483 9.33293667,20.0944483 9.33293667,20.52223 C9.33293667,20.9500117 9.68293667,21.3000117 10.1107183,21.3000117 L17.888535,21.3000117 C18.3163167,21.3000117 18.6663167,20.9500117 18.6663167,20.52223 C18.6663167,20.0944483 18.3163167,19.7444483 17.888535,19.7444483 L14.777385,19.7444483 L14.777385,15.8555983 L20.7118683,9.17444833 C20.898535,8.97223 20.99965,8.7 20.99965,8.42778167 L21,8.42778167 Z M10.4455167,10.411115 L9.06885,8.85559833 L18.93885,8.85559833 L17.5543667,10.411115 L10.4455167,10.411115 L10.4455167,10.411115 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#2E89B0" /> <solid android:color="#20607C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M9.35,22.3 L13.1840042,22.3 L13.1840042,16.379733 L14.4487167,16.379733 C16.4953333,16.379733 18.0936417,15.9233039 19.1939042,14.9897598 C20.3178375,14.0448193 20.85,12.6687324 20.85,10.8925278 C20.85,9.17330503 20.3522033,7.86253173 19.3111083,6.99727004 C18.2581875,6.12060241 16.709425,5.7 14.6982667,5.7 L9.3502875,5.7002873 L9.35,22.3 Z M13.1840042,8.60425301 L14.5565292,8.60425301 C15.5029792,8.60425301 16.17755,8.78662355 16.6154125,9.17371683 C17.0649667,9.57220647 17.2884404,10.1637639 17.2884404,10.9949323 C17.2884404,11.8032888 17.0518663,12.4290544 16.5076479,12.8616374 C15.9752746,13.282891 15.1586979,13.5329885 14.0820104,13.5329885 L13.1840042,13.5329885 L13.1840042,8.60425301 Z" /> android:pathData="M9.35,22.3 L13.1840042,22.3 L13.1840042,16.379733 L14.4487167,16.379733 C16.4953333,16.379733 18.0936417,15.9233039 19.1939042,14.9897598 C20.3178375,14.0448193 20.85,12.6687324 20.85,10.8925278 C20.85,9.17330503 20.3522033,7.86253173 19.3111083,6.99727004 C18.2581875,6.12060241 16.709425,5.7 14.6982667,5.7 L9.3502875,5.7002873 L9.35,22.3 Z M13.1840042,8.60425301 L14.5565292,8.60425301 C15.5029792,8.60425301 16.17755,8.78662355 16.6154125,9.17371683 C17.0649667,9.57220647 17.2884404,10.1637639 17.2884404,10.9949323 C17.2884404,11.8032888 17.0518663,12.4290544 16.5076479,12.8616374 C15.9752746,13.282891 15.1586979,13.5329885 14.0820104,13.5329885 L13.1840042,13.5329885 L13.1840042,8.60425301 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#C15746" /> <solid android:color="#983E44" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M16.961,6.99999417 C15.9026933,6.99999417 14.84875,7.41071333 14.0726833,8.17973333 L8.2299,13.9907833 C7.02531667,15.1842833 6.69806667,16.9171333 7.28183167,18.3600667 C7.28183167,18.3600667 7.71838667,19.382475 8.14171167,19.80195 C8.54021,20.1968083 9.021355,20.4748717 9.508695,20.675795 C9.64324667,20.7452082 9.744875,20.770512 9.86146,20.80687 C9.877112,20.8116985 9.88986133,20.8240783 9.9055565,20.8287158 C11.3082398,21.2432442 12.8732065,20.907362 13.9403565,19.8019442 L17.4680065,16.3064942 L19.7830232,13.9907775 C21.4057398,12.3828775 21.4057398,9.80501083 19.7830232,8.26711083 C19.0774815,7.42821917 18.0191398,6.99999417 16.9608565,6.99999417 L16.961,6.99999417 Z M16.961,8.39813333 C17.6665417,8.39813333 18.3852667,8.67339667 18.8792333,9.162755 C19.3732,9.65211333 19.6509133,10.364305 19.6509133,11.0633717 C19.6509133,11.76245 19.3731067,12.452755 18.8792333,12.9421717 L16.4760167,15.323455 L12.6658,11.523155 L14.9987833,9.22832167 C15.5632167,8.66905667 16.1849333,8.39813333 16.9611167,8.39813333 L16.961,8.39813333 Z" /> android:pathData="M16.961,6.99999417 C15.9026933,6.99999417 14.84875,7.41071333 14.0726833,8.17973333 L8.2299,13.9907833 C7.02531667,15.1842833 6.69806667,16.9171333 7.28183167,18.3600667 C7.28183167,18.3600667 7.71838667,19.382475 8.14171167,19.80195 C8.54021,20.1968083 9.021355,20.4748717 9.508695,20.675795 C9.64324667,20.7452082 9.744875,20.770512 9.86146,20.80687 C9.877112,20.8116985 9.88986133,20.8240783 9.9055565,20.8287158 C11.3082398,21.2432442 12.8732065,20.907362 13.9403565,19.8019442 L17.4680065,16.3064942 L19.7830232,13.9907775 C21.4057398,12.3828775 21.4057398,9.80501083 19.7830232,8.26711083 C19.0774815,7.42821917 18.0191398,6.99999417 16.9608565,6.99999417 L16.961,6.99999417 Z M16.961,8.39813333 C17.6665417,8.39813333 18.3852667,8.67339667 18.8792333,9.162755 C19.3732,9.65211333 19.6509133,10.364305 19.6509133,11.0633717 C19.6509133,11.76245 19.3731067,12.452755 18.8792333,12.9421717 L16.4760167,15.323455 L12.6658,11.523155 L14.9987833,9.22832167 C15.5632167,8.66905667 16.1849333,8.39813333 16.9611167,8.39813333 L16.961,8.39813333 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M14,5.833275 L7.31815,8.803025 L7.31815,13.2575917 C7.31815,17.378025 10.1690167,21.231175 14,22.166725 C17.8308667,21.2312683 20.68185,17.3781417 20.68185,13.2575917 L20.68185,8.803025 L14,5.833275 L14,5.833275 Z M15.85605,14.438025 L16.524235,17.3186417 L14.000035,15.796725 L11.475835,17.3186417 L12.14402,14.4454917 L9.91673667,12.5225917 L12.8567367,12.2701717 L14.00007,9.560355 L15.1434033,12.2628217 L18.0834033,12.5152417 L15.85612,14.4381417 L15.85605,14.438025 Z" /> android:pathData="M14,5.833275 L7.31815,8.803025 L7.31815,13.2575917 C7.31815,17.378025 10.1690167,21.231175 14,22.166725 C17.8308667,21.2312683 20.68185,17.3781417 20.68185,13.2575917 L20.68185,8.803025 L14,5.833275 L14,5.833275 Z M15.85605,14.438025 L16.524235,17.3186417 L14.000035,15.796725 L11.475835,17.3186417 L12.14402,14.4454917 L9.91673667,12.5225917 L12.8567367,12.2701717 L14.00007,9.560355 L15.1434033,12.2628217 L18.0834033,12.5152417 L15.85612,14.4381417 L15.85605,14.438025 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M20.5333333,7 C21.4316667,7 22.1666667,7.735 22.1666667,8.63333333 L22.1666667,18.4333333 C22.1666667,19.3316667 21.4316667,20.0666667 20.5333333,20.0666667 L7.46666667,20.0666667 C6.56833333,20.0666667 5.83333333,19.3316667 5.83333333,18.4333333 L5.8415,8.63333333 C5.8415,7.735 6.56833333,7 7.46666667,7 L20.5333333,7 Z M20.5333333,9.88283333 C20.5333333,9.33566667 19.9371667,9.009 19.4716667,9.29483333 L14,12.7166667 L8.52833333,9.29483333 C8.06283333,9.009 7.46666667,9.33566667 7.46666667,9.88283333 C7.46666667,10.1196667 7.58916667,10.3401667 7.79333333,10.4708333 L13.5671667,14.0805 C13.8285,14.2438333 14.1715,14.2438333 14.4328333,14.0805 L20.2066667,10.4708333 C20.4108333,10.3401667 20.5333333,10.1196667 20.5333333,9.88283333 Z" /> android:pathData="M20.5333333,7 C21.4316667,7 22.1666667,7.735 22.1666667,8.63333333 L22.1666667,18.4333333 C22.1666667,19.3316667 21.4316667,20.0666667 20.5333333,20.0666667 L7.46666667,20.0666667 C6.56833333,20.0666667 5.83333333,19.3316667 5.83333333,18.4333333 L5.8415,8.63333333 C5.8415,7.735 6.56833333,7 7.46666667,7 L20.5333333,7 Z M20.5333333,9.88283333 C20.5333333,9.33566667 19.9371667,9.009 19.4716667,9.29483333 L14,12.7166667 L8.52833333,9.29483333 C8.06283333,9.009 7.46666667,9.33566667 7.46666667,9.88283333 C7.46666667,10.1196667 7.58916667,10.3401667 7.79333333,10.4708333 L13.5671667,14.0805 C13.8285,14.2438333 14.1715,14.2438333 14.4328333,14.0805 L20.2066667,10.4708333 C20.4108333,10.3401667 20.5333333,10.1196667 20.5333333,9.88283333 Z" />
</group> </group>
</vector> </vector>

View File

@@ -5,7 +5,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -18,7 +18,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M9.26178239,9.86916295 L10.4193833,7.95061481 L11.2531868,6.56634591 C11.5688972,6.04016587 12.3298444,6.04016587 12.6455913,6.56634591 L13.843676,8.5577503 L12.8479738,10.2253086 L12.0384558,11.5367213 L9.26178239,9.86916295 Z M22.1731256,14.5805343 L20.8778628,12.4272676 L18.0769039,14.0462551 L19.8658893,17.0333617 L20.7806361,17.0333617 C21.3958708,17.0333617 21.9544354,16.6852666 22.2296256,16.1348011 C22.3429572,15.9081332 22.3996236,15.665279 22.3996236,15.4143378 C22.3996236,15.1229127 22.3186718,14.8395869 22.1729556,14.5805343 L22.1731256,14.5805343 Z M17.5427461,21.0808911 L18.7570171,21.0808911 C19.3722518,21.0808911 19.9308164,20.732796 20.2060066,20.1823306 L21.379806,17.8427947 L17.5427097,17.8427947 L17.5427097,16.2238072 L14.3046133,19.4619036 L17.5427097,22.7 L17.5427097,21.0810125 L17.5427461,21.0808911 Z M12.6856622,17.8427947 L9.20471166,17.8427947 L8.52471991,18.9842094 C8.28186572,19.3889623 8.26567949,19.8908691 8.47614908,20.3199075 C8.70281704,20.7813304 9.18042624,21.0808547 9.70656985,21.0808547 L12.6855408,21.0808547 L12.6855408,17.8427583 L12.6856622,17.8427947 Z M9.54470753,15.6975422 L10.9451262,16.5394327 L9.83609613,12.0952009 L5.4,13.204231 L6.77613329,14.0299353 L6.44423661,14.5884999 C6.16091076,15.0661091 6.13662534,15.6489592 6.38757022,16.1427668 L7.70711848,18.7817419 L9.54467474,15.6974936 L9.54470753,15.6975422 Z M18.3684504,8.24191842 L17.3160782,6.48523261 C17.0165539,5.99952422 16.4903739,5.7 15.9236736,5.7 L13.0661298,5.7 L15.5918134,9.90951317 L14.1994089,10.7433166 L18.6436406,11.8523467 L19.7526707,7.40811497 L18.3684018,8.24191842 L18.3684504,8.24191842 Z" /> android:pathData="M9.26178239,9.86916295 L10.4193833,7.95061481 L11.2531868,6.56634591 C11.5688972,6.04016587 12.3298444,6.04016587 12.6455913,6.56634591 L13.843676,8.5577503 L12.8479738,10.2253086 L12.0384558,11.5367213 L9.26178239,9.86916295 Z M22.1731256,14.5805343 L20.8778628,12.4272676 L18.0769039,14.0462551 L19.8658893,17.0333617 L20.7806361,17.0333617 C21.3958708,17.0333617 21.9544354,16.6852666 22.2296256,16.1348011 C22.3429572,15.9081332 22.3996236,15.665279 22.3996236,15.4143378 C22.3996236,15.1229127 22.3186718,14.8395869 22.1729556,14.5805343 L22.1731256,14.5805343 Z M17.5427461,21.0808911 L18.7570171,21.0808911 C19.3722518,21.0808911 19.9308164,20.732796 20.2060066,20.1823306 L21.379806,17.8427947 L17.5427097,17.8427947 L17.5427097,16.2238072 L14.3046133,19.4619036 L17.5427097,22.7 L17.5427097,21.0810125 L17.5427461,21.0808911 Z M12.6856622,17.8427947 L9.20471166,17.8427947 L8.52471991,18.9842094 C8.28186572,19.3889623 8.26567949,19.8908691 8.47614908,20.3199075 C8.70281704,20.7813304 9.18042624,21.0808547 9.70656985,21.0808547 L12.6855408,21.0808547 L12.6855408,17.8427583 L12.6856622,17.8427947 Z M9.54470753,15.6975422 L10.9451262,16.5394327 L9.83609613,12.0952009 L5.4,13.204231 L6.77613329,14.0299353 L6.44423661,14.5884999 C6.16091076,15.0661091 6.13662534,15.6489592 6.38757022,16.1427668 L7.70711848,18.7817419 L9.54467474,15.6974936 L9.54470753,15.6975422 Z M18.3684504,8.24191842 L17.3160782,6.48523261 C17.0165539,5.99952422 16.4903739,5.7 15.9236736,5.7 L13.0661298,5.7 L15.5918134,9.90951317 L14.1994089,10.7433166 L18.6436406,11.8523467 L19.7526707,7.40811497 L18.3684018,8.24191842 L18.3684504,8.24191842 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M8.33758333,7.43983333 C6.95648333,7.43983333 5.83333333,8.590085 5.83333333,10.0056833 L5.83333333,16.9397667 C5.83333333,18.0495583 6.52384833,18.99765 7.48766667,19.3551167 C7.45779982,19.1965237 7.44027578,19.0357487 7.43526,18.87431 C7.43522971,18.0654358 7.74879599,17.2897014 8.30693531,16.7178646 C8.86507462,16.1460278 9.62203578,15.8249626 10.4111933,15.8253433 C12.0537082,15.8258056 13.3849729,17.1907579 13.38491,18.87431 C13.3830282,19.0874192 13.3593515,19.2997388 13.3142683,19.5077867 L23.3312683,19.5077867 C23.6679333,19.5077867 23.9419483,19.2262233 23.9419483,18.8811467 C23.9419483,18.53607 23.6679217,18.2567933 23.3312683,18.2567933 L21.4741683,18.2567933 C21.6999883,17.87135 21.82964,17.4210517 21.82964,16.9397433 L21.82964,13.3690433 C21.82964,10.09841 19.2349733,7.43983333 16.04414,7.43983333 L8.33772333,7.43983333 L8.33758333,7.43983333 Z M8.88445833,9.60225 L10.9944917,9.60225 C11.3312033,9.60225 11.6051833,9.88155 11.6051833,10.226615 L11.6051833,12.391365 C11.6051833,12.7364417 11.3311567,13.0157183 10.9944917,13.0157183 L8.88445833,13.0157183 C8.54779333,13.0157183 8.27376667,12.7364183 8.27376667,12.391365 L8.27376667,10.226615 C8.27376667,9.88153833 8.54779333,9.60225 8.88445833,9.60225 Z M16.647925,10.684625 L16.8097067,10.684625 C18.2658233,10.684625 19.4484733,11.8992417 19.4484733,13.3916417 L19.4484733,18.2566417 L18.2294233,18.2566417 L18.2294233,13.3916417 C18.2294233,12.5883683 17.5935433,11.9333083 16.8098233,11.9333083 L16.6480417,11.9333083 C15.8643567,11.9333083 15.2284417,12.5883683 15.2284417,13.3916417 L15.2284417,18.2566417 L14.0070583,18.2566417 L14.0070583,13.3916417 C14.0070583,11.8992417 15.191925,10.684625 16.6480417,10.684625 L16.647925,10.684625 Z M10.4111583,17.0581247 C9.94104172,17.0578394 9.49008616,17.2490609 9.15757567,17.5896894 C8.82506518,17.9303179 8.63829167,18.3924263 8.63829167,18.874275 C8.63829167,19.3561237 8.82506518,19.8182321 9.15757567,20.1588606 C9.49008616,20.4994891 9.94104172,20.6907106 10.4111583,20.6904253 C11.3892489,20.6896989 12.1817548,19.8767746 12.1816917,18.874275 C12.1817548,17.8717754 11.3892489,17.0588511 10.4111583,17.0581247 Z" /> android:pathData="M8.33758333,7.43983333 C6.95648333,7.43983333 5.83333333,8.590085 5.83333333,10.0056833 L5.83333333,16.9397667 C5.83333333,18.0495583 6.52384833,18.99765 7.48766667,19.3551167 C7.45779982,19.1965237 7.44027578,19.0357487 7.43526,18.87431 C7.43522971,18.0654358 7.74879599,17.2897014 8.30693531,16.7178646 C8.86507462,16.1460278 9.62203578,15.8249626 10.4111933,15.8253433 C12.0537082,15.8258056 13.3849729,17.1907579 13.38491,18.87431 C13.3830282,19.0874192 13.3593515,19.2997388 13.3142683,19.5077867 L23.3312683,19.5077867 C23.6679333,19.5077867 23.9419483,19.2262233 23.9419483,18.8811467 C23.9419483,18.53607 23.6679217,18.2567933 23.3312683,18.2567933 L21.4741683,18.2567933 C21.6999883,17.87135 21.82964,17.4210517 21.82964,16.9397433 L21.82964,13.3690433 C21.82964,10.09841 19.2349733,7.43983333 16.04414,7.43983333 L8.33772333,7.43983333 L8.33758333,7.43983333 Z M8.88445833,9.60225 L10.9944917,9.60225 C11.3312033,9.60225 11.6051833,9.88155 11.6051833,10.226615 L11.6051833,12.391365 C11.6051833,12.7364417 11.3311567,13.0157183 10.9944917,13.0157183 L8.88445833,13.0157183 C8.54779333,13.0157183 8.27376667,12.7364183 8.27376667,12.391365 L8.27376667,10.226615 C8.27376667,9.88153833 8.54779333,9.60225 8.88445833,9.60225 Z M16.647925,10.684625 L16.8097067,10.684625 C18.2658233,10.684625 19.4484733,11.8992417 19.4484733,13.3916417 L19.4484733,18.2566417 L18.2294233,18.2566417 L18.2294233,13.3916417 C18.2294233,12.5883683 17.5935433,11.9333083 16.8098233,11.9333083 L16.6480417,11.9333083 C15.8643567,11.9333083 15.2284417,12.5883683 15.2284417,13.3916417 L15.2284417,18.2566417 L14.0070583,18.2566417 L14.0070583,13.3916417 C14.0070583,11.8992417 15.191925,10.684625 16.6480417,10.684625 L16.647925,10.684625 Z M10.4111583,17.0581247 C9.94104172,17.0578394 9.49008616,17.2490609 9.15757567,17.5896894 C8.82506518,17.9303179 8.63829167,18.3924263 8.63829167,18.874275 C8.63829167,19.3561237 8.82506518,19.8182321 9.15757567,20.1588606 C9.49008616,20.4994891 9.94104172,20.6907106 10.4111583,20.6904253 C11.3892489,20.6896989 12.1817548,19.8767746 12.1816917,18.874275 C12.1817548,17.8717754 11.3892489,17.0588511 10.4111583,17.0581247 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#8C5F93" /> <solid android:color="#6B425C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M13.9999526,5 C11.853286,5 10.110286,6.743 10.110286,8.88966667 L8.55628597,8.88966667 C7.7007343,8.88966667 7.00683597,9.58815 7.00683597,10.4436667 L7,19.777 C7,20.6325517 7.70075833,21.3333333 8.55633333,21.3333333 L19.4436667,21.3333333 C20.2992183,21.3333333 21,20.632575 21,19.777 L21,10.4436667 C21,9.588115 20.2992417,8.88966667 19.4436667,8.88966667 L17.8896667,8.88966667 C17.8896667,6.743 16.1466667,5 14,5 L13.9999526,5 Z M13.9999526,6.55633333 C15.2911026,6.55633333 16.333286,7.59855167 16.333286,8.88966667 L11.6666193,8.88966667 C11.6666193,7.59851667 12.7088376,6.55633333 13.9999526,6.55633333 Z M13.4348426,10.5098167 C13.4948839,10.5028588 13.5551031,10.5212898 13.6009647,10.5606609 C13.6468264,10.6000319 13.6741635,10.6567658 13.6763776,10.7171683 L13.7151145,11.8291533 C13.7184994,11.938957 13.6391949,12.0339269 13.5305478,12.0501783 C12.9058678,12.1446293 12.3049645,12.4314333 11.8238311,12.9160667 C10.7022678,14.04575 10.6473645,15.8238667 11.6255911,17.0426833 L12.6851578,15.97628 C12.7471434,15.914964 12.8398366,15.8967615 12.9204066,15.9300834 C13.0009766,15.9634054 13.0537346,16.0417631 13.0543028,16.12895 L13.0611383,19.2483833 C13.0611463,19.307801 13.0367599,19.3646163 12.9936828,19.4055408 C12.9506056,19.4464653 12.8926159,19.4679097 12.8332766,19.4648583 L9.88697663,19.3053517 C9.80143518,19.3012871 9.72630824,19.2472336 9.69526871,19.1674188 C9.66422918,19.0876039 9.68309816,18.996996 9.7434183,18.9362067 L10.54094,18.1295617 C8.97060663,16.3068783 9.02648997,13.5555283 10.7414666,11.829095 C11.495705,11.069245 12.4494666,10.629295 13.4348333,10.5097117 L13.4348426,10.5098167 Z M15.1711926,10.7559133 L18.1174926,10.917695 C18.2026243,10.9225973 18.2769698,10.9769641 18.3074479,11.056604 C18.3379261,11.1362439 18.3188721,11.2263546 18.2587643,11.28684 L17.4612426,12.0911983 C19.032976,13.9128317 18.980126,16.6660483 17.2652776,18.3938817 C17.2645181,18.3938777 17.2637586,18.3938777 17.2629991,18.3938817 C16.5080141,19.1533467 15.5524325,19.5913483 14.5674158,19.7109317 C14.5073745,19.7178895 14.4471553,19.6994585 14.4012937,19.6600875 C14.3554321,19.6207164 14.3280949,19.5639825 14.3258808,19.50358 L14.2894225,18.3938817 C14.2860376,18.284078 14.365342,18.1891081 14.4739891,18.1728567 C15.0982141,18.0784745 15.6977058,17.7894083 16.1783725,17.3046933 C16.179132,17.3046973 16.1798915,17.3046973 16.180651,17.3046933 C17.3022143,16.1759783 17.357351,14.4000433 16.378891,13.1802933 L15.3193243,14.2466967 C15.2573387,14.3080127 15.1646455,14.3262151 15.0840755,14.2928932 C15.0035055,14.2595713 14.9507475,14.1812135 14.9501793,14.0940267 L14.9433438,10.97226 C14.9433358,10.9128424 14.9677222,10.8560271 15.0107993,10.8151026 C15.0538765,10.7741781 15.1118662,10.7527337 15.1712055,10.755785 L15.1711926,10.7559133 Z" /> android:pathData="M13.9999526,5 C11.853286,5 10.110286,6.743 10.110286,8.88966667 L8.55628597,8.88966667 C7.7007343,8.88966667 7.00683597,9.58815 7.00683597,10.4436667 L7,19.777 C7,20.6325517 7.70075833,21.3333333 8.55633333,21.3333333 L19.4436667,21.3333333 C20.2992183,21.3333333 21,20.632575 21,19.777 L21,10.4436667 C21,9.588115 20.2992417,8.88966667 19.4436667,8.88966667 L17.8896667,8.88966667 C17.8896667,6.743 16.1466667,5 14,5 L13.9999526,5 Z M13.9999526,6.55633333 C15.2911026,6.55633333 16.333286,7.59855167 16.333286,8.88966667 L11.6666193,8.88966667 C11.6666193,7.59851667 12.7088376,6.55633333 13.9999526,6.55633333 Z M13.4348426,10.5098167 C13.4948839,10.5028588 13.5551031,10.5212898 13.6009647,10.5606609 C13.6468264,10.6000319 13.6741635,10.6567658 13.6763776,10.7171683 L13.7151145,11.8291533 C13.7184994,11.938957 13.6391949,12.0339269 13.5305478,12.0501783 C12.9058678,12.1446293 12.3049645,12.4314333 11.8238311,12.9160667 C10.7022678,14.04575 10.6473645,15.8238667 11.6255911,17.0426833 L12.6851578,15.97628 C12.7471434,15.914964 12.8398366,15.8967615 12.9204066,15.9300834 C13.0009766,15.9634054 13.0537346,16.0417631 13.0543028,16.12895 L13.0611383,19.2483833 C13.0611463,19.307801 13.0367599,19.3646163 12.9936828,19.4055408 C12.9506056,19.4464653 12.8926159,19.4679097 12.8332766,19.4648583 L9.88697663,19.3053517 C9.80143518,19.3012871 9.72630824,19.2472336 9.69526871,19.1674188 C9.66422918,19.0876039 9.68309816,18.996996 9.7434183,18.9362067 L10.54094,18.1295617 C8.97060663,16.3068783 9.02648997,13.5555283 10.7414666,11.829095 C11.495705,11.069245 12.4494666,10.629295 13.4348333,10.5097117 L13.4348426,10.5098167 Z M15.1711926,10.7559133 L18.1174926,10.917695 C18.2026243,10.9225973 18.2769698,10.9769641 18.3074479,11.056604 C18.3379261,11.1362439 18.3188721,11.2263546 18.2587643,11.28684 L17.4612426,12.0911983 C19.032976,13.9128317 18.980126,16.6660483 17.2652776,18.3938817 C17.2645181,18.3938777 17.2637586,18.3938777 17.2629991,18.3938817 C16.5080141,19.1533467 15.5524325,19.5913483 14.5674158,19.7109317 C14.5073745,19.7178895 14.4471553,19.6994585 14.4012937,19.6600875 C14.3554321,19.6207164 14.3280949,19.5639825 14.3258808,19.50358 L14.2894225,18.3938817 C14.2860376,18.284078 14.365342,18.1891081 14.4739891,18.1728567 C15.0982141,18.0784745 15.6977058,17.7894083 16.1783725,17.3046933 C16.179132,17.3046973 16.1798915,17.3046973 16.180651,17.3046933 C17.3022143,16.1759783 17.357351,14.4000433 16.378891,13.1802933 L15.3193243,14.2466967 C15.2573387,14.3080127 15.1646455,14.3262151 15.0840755,14.2928932 C15.0035055,14.2595713 14.9507475,14.1812135 14.9501793,14.0940267 L14.9433438,10.97226 C14.9433358,10.9128424 14.9677222,10.8560271 15.0107993,10.8151026 C15.0538765,10.7741781 15.1118662,10.7527337 15.1712055,10.755785 L15.1711926,10.7559133 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#8C5F93" /> <solid android:color="#6B425C" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M19.4443861,8.88885 L17.8888695,8.88885 C17.8888695,6.74218333 16.1466861,5 14.0000195,5 C11.8533528,5 10.1111695,6.74218333 10.1111695,8.88885 L8.55565282,8.88885 C7.70010115,8.88885 7.00783615,9.58885 7.00783615,10.4443667 L7.00005833,19.7777 C7.00005833,20.6332517 7.70005833,21.3332167 8.555575,21.3332167 L19.444425,21.3332167 C20.2999767,21.3332167 20.9999417,20.6332167 20.9999417,19.7777 L20.9999417,10.4443667 C20.9999417,9.588815 20.2999417,8.88885 19.444425,8.88885 L19.4443861,8.88885 Z M13.9999028,6.55551667 C15.2910528,6.55551667 16.3332362,7.597735 16.3332362,8.88885 L11.6665695,8.88885 C11.6665695,7.5977 12.7087878,6.55551667 13.9999028,6.55551667 Z M13.9999028,14.3333333 C11.8532362,14.3333333 10.1110528,12.59115 10.1110528,10.4444833 L11.6665695,10.4444833 C11.6665695,11.7356333 12.7087878,12.7778167 13.9999028,12.7778167 C15.2910178,12.7778167 16.3332362,11.7355983 16.3332362,10.4444833 L17.8887528,10.4444833 C17.8887528,12.59115 16.1465695,14.3333333 13.9999028,14.3333333 Z" /> android:pathData="M19.4443861,8.88885 L17.8888695,8.88885 C17.8888695,6.74218333 16.1466861,5 14.0000195,5 C11.8533528,5 10.1111695,6.74218333 10.1111695,8.88885 L8.55565282,8.88885 C7.70010115,8.88885 7.00783615,9.58885 7.00783615,10.4443667 L7.00005833,19.7777 C7.00005833,20.6332517 7.70005833,21.3332167 8.555575,21.3332167 L19.444425,21.3332167 C20.2999767,21.3332167 20.9999417,20.6332167 20.9999417,19.7777 L20.9999417,10.4443667 C20.9999417,9.588815 20.2999417,8.88885 19.444425,8.88885 L19.4443861,8.88885 Z M13.9999028,6.55551667 C15.2910528,6.55551667 16.3332362,7.597735 16.3332362,8.88885 L11.6665695,8.88885 C11.6665695,7.5977 12.7087878,6.55551667 13.9999028,6.55551667 Z M13.9999028,14.3333333 C11.8532362,14.3333333 10.1110528,12.59115 10.1110528,10.4444833 L11.6665695,10.4444833 C11.6665695,11.7356333 12.7087878,12.7778167 13.9999028,12.7778167 C15.2910178,12.7778167 16.3332362,11.7355983 16.3332362,10.4444833 L17.8887528,10.4444833 C17.8887528,12.59115 16.1465695,14.3333333 13.9999028,14.3333333 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#7F5933" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M10.3454333,8.64113333 C11.22839,8.64113333 11.9363,7.94225333 11.9363,7.07056667 C11.9363,6.19892667 11.2283433,5.5 10.3454333,5.5 C9.46252333,5.5 8.75456667,6.19888 8.75456667,7.07056667 C8.75456667,7.94220667 9.46252333,8.64113333 10.3454333,8.64113333 L10.3454333,8.64113333 Z M19.2545667,17.43605 L19.2545667,21.83345 L16.7091333,21.83345 L16.7091333,17.43605 L14.1637,17.43605 L16.3909833,10.5257667 C16.3909833,10.5257667 16.7091683,9.26938333 17.98185,9.26938333 C19.2545317,9.26938333 19.5727167,10.5257667 19.5727167,10.5257667 L21.8,17.43605 L19.2545667,17.43605 L19.2545667,17.43605 Z M11.61815,15.5514167 L11.61815,21.83345 L9.07271667,21.83345 L9.07271667,15.5514167 L7.8,15.5514167 L7.8,11.0192667 C7.8,10.0528233 8.57319667,9.26938333 9.55198333,9.26938333 L11.1388833,9.26938333 C12.1064817,9.26938333 12.8908667,10.05231 12.8908667,11.0192667 L12.8908667,15.5514167 L11.61815,15.5514167 Z M19.7362833,7.07068333 C19.7362833,7.94232333 19.00161,8.64125 18.0853333,8.64125 C17.1690567,8.64125 16.4343833,7.94237 16.4343833,7.07068333 C16.4343833,6.19904333 17.1690567,5.50011667 18.0853333,5.50011667 C19.00161,5.50011667 19.7362833,6.19899667 19.7362833,7.07068333 Z" /> android:pathData="M10.3454333,8.64113333 C11.22839,8.64113333 11.9363,7.94225333 11.9363,7.07056667 C11.9363,6.19892667 11.2283433,5.5 10.3454333,5.5 C9.46252333,5.5 8.75456667,6.19888 8.75456667,7.07056667 C8.75456667,7.94220667 9.46252333,8.64113333 10.3454333,8.64113333 L10.3454333,8.64113333 Z M19.2545667,17.43605 L19.2545667,21.83345 L16.7091333,21.83345 L16.7091333,17.43605 L14.1637,17.43605 L16.3909833,10.5257667 C16.3909833,10.5257667 16.7091683,9.26938333 17.98185,9.26938333 C19.2545317,9.26938333 19.5727167,10.5257667 19.5727167,10.5257667 L21.8,17.43605 L19.2545667,17.43605 L19.2545667,17.43605 Z M11.61815,15.5514167 L11.61815,21.83345 L9.07271667,21.83345 L9.07271667,15.5514167 L7.8,15.5514167 L7.8,11.0192667 C7.8,10.0528233 8.57319667,9.26938333 9.55198333,9.26938333 L11.1388833,9.26938333 C12.1064817,9.26938333 12.8908667,10.05231 12.8908667,11.0192667 L12.8908667,15.5514167 L11.61815,15.5514167 Z M19.7362833,7.07068333 C19.7362833,7.94232333 19.00161,8.64125 18.0853333,8.64125 C17.1690567,8.64125 16.4343833,7.94237 16.4343833,7.07068333 C16.4343833,6.19904333 17.1690567,5.50011667 18.0853333,5.50011667 C19.00161,5.50011667 19.7362833,6.19899667 19.7362833,7.07068333 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#7F5933" /> <solid android:color="#6E4426" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M22.167,11.328l-5.717,-0.816l-2.45,-5.712l-2.45,5.712l-5.717,0.816l4.083,4.08l-0.817,5.726l4.9,-2.463l4.9,2.448l-0.817,-5.711z" /> android:pathData="M22.167,11.328l-5.717,-0.816l-2.45,-5.712l-2.45,5.712l-5.717,0.816l4.083,4.08l-0.817,5.726l4.9,-2.463l4.9,2.448l-0.817,-5.711z" />
</group> </group>
</vector> </vector>

View File

@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M17.7652425,5.6 C19.3205789,5.6 20.6007172,6.82330936 20.6712621,8.37700229 L21.1340668,18.5587623 C21.2018095,20.0490603 20.1357825,21.3284073 18.6981339,21.5620297 L18.2940892,21.5992497 L9.77120086,21.6 C8.27928213,21.6 7.04973517,20.4769811 6.88169744,19.0301853 L6.86287684,18.6248613 L7.3279318,8.37707196 C7.39855249,6.8233354 8.67873133,5.6 10.2339515,5.6 L17.7652425,5.6 Z M9.92695997,17.2362972 C9.28430184,17.2362972 8.76333027,17.7572687 8.76333027,18.3999268 C8.76333027,19.042585 9.28430184,19.5635566 9.92695997,19.5635566 C10.5696181,19.5635566 11.0905897,19.042585 11.0905897,18.3999268 C11.0905897,17.7572687 10.5696181,17.2362972 9.92695997,17.2362972 Z M18.0723679,17.2362972 C17.4297098,17.2362972 16.9087383,17.7572687 16.9087383,18.3999268 C16.9087383,19.042585 17.4297098,19.5635566 18.0723679,19.5635566 C18.7150261,19.5635566 19.2359977,19.042585 19.2359977,18.3999268 C19.2359977,17.7572687 18.7150261,17.2362972 18.0723679,17.2362972 Z M17.2628087,7.78180569 L10.736446,7.78180569 C9.95826161,7.78180569 9.31791619,8.39432582 9.28337093,9.17176139 L9.12032285,12.8726871 C9.12032285,13.675999 9.77154822,14.3272243 10.57486,14.3272243 L17.4890037,14.3257899 C18.2915299,14.2901216 18.9131848,13.6106375 18.8775195,12.8081258 L18.7159058,9.17178293 C18.6813533,8.39434738 18.0410005,7.78180569 17.2628087,7.78180569 Z" /> android:pathData="M17.7652425,5.6 C19.3205789,5.6 20.6007172,6.82330936 20.6712621,8.37700229 L21.1340668,18.5587623 C21.2018095,20.0490603 20.1357825,21.3284073 18.6981339,21.5620297 L18.2940892,21.5992497 L9.77120086,21.6 C8.27928213,21.6 7.04973517,20.4769811 6.88169744,19.0301853 L6.86287684,18.6248613 L7.3279318,8.37707196 C7.39855249,6.8233354 8.67873133,5.6 10.2339515,5.6 L17.7652425,5.6 Z M9.92695997,17.2362972 C9.28430184,17.2362972 8.76333027,17.7572687 8.76333027,18.3999268 C8.76333027,19.042585 9.28430184,19.5635566 9.92695997,19.5635566 C10.5696181,19.5635566 11.0905897,19.042585 11.0905897,18.3999268 C11.0905897,17.7572687 10.5696181,17.2362972 9.92695997,17.2362972 Z M18.0723679,17.2362972 C17.4297098,17.2362972 16.9087383,17.7572687 16.9087383,18.3999268 C16.9087383,19.042585 17.4297098,19.5635566 18.0723679,19.5635566 C18.7150261,19.5635566 19.2359977,19.042585 19.2359977,18.3999268 C19.2359977,17.7572687 18.7150261,17.2362972 18.0723679,17.2362972 Z M17.2628087,7.78180569 L10.736446,7.78180569 C9.95826161,7.78180569 9.31791619,8.39432582 9.28337093,9.17176139 L9.12032285,12.8726871 C9.12032285,13.675999 9.77154822,14.3272243 10.57486,14.3272243 L17.4890037,14.3257899 C18.2915299,14.2901216 18.9131848,13.6106375 18.8775195,12.8081258 L18.7159058,9.17178293 C18.6813533,8.39434738 18.0410005,7.78180569 17.2628087,7.78180569 Z" />
</group> </group>
</vector> </vector>

View File

@@ -18,7 +18,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M14,21.8749 C11.1749,21.8749 8.5482,19.4518 8.5482,16.4231 C8.5482,13.3606 12.6876,7.8747 14,6.1251 C15.3125,7.8751 19.4518,13.3606 19.4518,16.4231 C19.4518,19.4519 16.825,21.8749 14,21.8749 Z" /> android:pathData="M14,21.8749 C11.1749,21.8749 8.5482,19.4518 8.5482,16.4231 C8.5482,13.3606 12.6876,7.8747 14,6.1251 C15.3125,7.8751 19.4518,13.3606 19.4518,16.4231 C19.4518,19.4519 16.825,21.8749 14,21.8749 Z" />
</group> </group>
</vector> </vector>

View File

@@ -4,7 +4,7 @@
<size <size
android:width="40dp" android:width="40dp"
android:height="40dp" /> android:height="40dp" />
<solid android:color="#717065" /> <solid android:color="#51585E" />
</shape> </shape>
</item> </item>
<item> <item>
@@ -17,7 +17,7 @@
android:pivotX="12" android:pivotX="12"
android:pivotY="12"> android:pivotY="12">
<path <path
android:fillColor="#FFF" android:fillColor="#000"
android:pathData="M14,16.98 C15.1045695,16.98 16.1045695,17.4277153 16.8284271,18.1515729 L14,20.98 L11.1715729,18.1515729 C11.8954305,17.4277153 12.8954305,16.98 14,16.98 Z M14,12.48 C16.3472102,12.48 18.4722102,13.4313949 20.0104076,14.9695924 L18.2426407,16.7373593 C17.1568542,15.6515729 15.6568542,14.98 14,14.98 C12.3431458,14.98 10.8431458,15.6515729 9.75735931,16.7373593 L7.98959236,14.9695924 C9.52778981,13.4313949 11.6527898,12.48 14,12.48 Z M14,7.98 C17.5898509,7.98 20.8398509,9.43507456 23.1923882,11.7876118 L21.4251209,13.5558785 C19.5249552,11.6554586 16.8997491,10.48 14,10.48 C11.1002509,10.48 8.47504482,11.6554586 6.57487909,13.5558785 L4.80761184,11.7876118 C7.16014913,9.43507456 10.4101491,7.98 14,7.98 Z" /> android:pathData="M14,16.98 C15.1045695,16.98 16.1045695,17.4277153 16.8284271,18.1515729 L14,20.98 L11.1715729,18.1515729 C11.8954305,17.4277153 12.8954305,16.98 14,16.98 Z M14,12.48 C16.3472102,12.48 18.4722102,13.4313949 20.0104076,14.9695924 L18.2426407,16.7373593 C17.1568542,15.6515729 15.6568542,14.98 14,14.98 C12.3431458,14.98 10.8431458,15.6515729 9.75735931,16.7373593 L7.98959236,14.9695924 C9.52778981,13.4313949 11.6527898,12.48 14,12.48 Z M14,7.98 C17.5898509,7.98 20.8398509,9.43507456 23.1923882,11.7876118 L21.4251209,13.5558785 C19.5249552,11.6554586 16.8997491,10.48 14,10.48 C11.1002509,10.48 8.47504482,11.6554586 6.57487909,13.5558785 L4.80761184,11.7876118 C7.16014913,9.43507456 10.4101491,7.98 14,7.98 Z" />
</group> </group>
</vector> </vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?colorControlNormal">
<path
android:pathData="M80,360v-160q0,-33 23.5,-56.5T160,120h640q33,0 56.5,23.5T880,200v160h-80v-160L160,200v160L80,360ZM160,720q-33,0 -56.5,-23.5T80,640v-200h80v200h640v-200h80v200q0,33 -23.5,56.5T800,720L160,720ZM40,840v-80h880v80L40,840ZM480,420ZM80,440v-80h240q11,0 21,6t15,16l47,93 123,-215q5,-9 14,-14.5t20,-5.5q11,0 21,5.5t15,16.5l49,98h235v80L620,440q-11,0 -21,-5.5T584,418l-26,-53 -123,215q-5,10 -15,15t-21,5q-11,0 -20.5,-6T364,578l-69,-138L80,440Z"
android:fillColor="#fff"/>
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,536L284,732Q273,743 256,743Q239,743 228,732Q217,721 217,704Q217,687 228,676L424,480L228,284Q217,273 217,256Q217,239 228,228Q239,217 256,217Q273,217 284,228L480,424L676,228Q687,217 704,217Q721,217 732,228Q743,239 743,256Q743,273 732,284L536,480L732,676Q743,687 743,704Q743,721 732,732Q721,743 704,743Q687,743 676,732L480,536Z"/>
</vector>

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