mirror of
https://codeberg.org/comaps/comaps
synced 2026-01-06 12:34:24 +00:00
Compare commits
1 Commits
test/2025.
...
test/2025.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8462351aba |
12
README.md
12
README.md
@@ -29,16 +29,16 @@
|
||||
|
||||
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org) data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||
|
||||
There are apps for Android and iOS (and ARM MacOS).
|
||||
An alpha Linux / MacOS Qt desktop version, which is also suitable for Linux phones.
|
||||
There are apps for Android and iOS (and ARM macOS).
|
||||
An alpha linux / macOS Qt desktop version, which is also suitable for linux phones.
|
||||
|
||||
The June app release is available on Google Play, F-Droid and as an APK to download now! We are working on publishing in the iOS App Store as well, please stay tuned!
|
||||
The first app release is available as an APK download now! We are still working on publishing on F-Droid, Google Play Store and iOS App Store as well, please stay tuned!
|
||||
|
||||
<!--
|
||||
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/comaps/id1567437057)
|
||||
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps)
|
||||
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps/)
|
||||
-->
|
||||
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps.google)
|
||||
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps.fdroid/)
|
||||
[<img src="docs/badges/codeberg.png" alt="Codeberg" width="160">](https://codeberg.org/comaps/comaps/releases)
|
||||
|
||||
<p float="left">
|
||||
@@ -52,7 +52,7 @@ The June app release is available on Google Play, F-Droid and as an APK to downl
|
||||
|
||||
**Respecting Privacy**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
|
||||
|
||||
**Simple and Polished**: Essential, easy to use features that just work.
|
||||
**Simple and Polished**: essential easy to use features that just work.
|
||||
|
||||
**Saves Your Battery and Space**: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||
|
||||
|
||||
@@ -169,7 +169,6 @@ android {
|
||||
|
||||
fdroid {
|
||||
dimension 'default'
|
||||
applicationIdSuffix '.fdroid'
|
||||
versionName = android.defaultConfig.versionName + '-FDroid'
|
||||
buildConfigField 'String', 'SUPPORT_MAIL', '"fdroid@comaps.app"'
|
||||
}
|
||||
|
||||
@@ -14,19 +14,21 @@ Můžete se zde také připojit ke komunitě pomáhat s vytvářením nejlepší
|
||||
• <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
|
||||
|
||||
<b>Hlavní funkce</b>:
|
||||
• Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google
|
||||
• Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.
|
||||
• Pěší trasy a cyklostezky
|
||||
• Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího
|
||||
• Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu
|
||||
• Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení
|
||||
• Uložení oblíbených míst jedním klepnutím
|
||||
• Offline články z Wikipedie
|
||||
• Vrstva metra a navigace v něm
|
||||
• Záznam tras
|
||||
• Export a import záložek a tras ve formátech KML, KMZ a GPX
|
||||
• Tmavý režim k použití během noci
|
||||
• Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru
|
||||
<ul>
|
||||
<li>Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google</li>
|
||||
<li>Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.</li>
|
||||
<li>Pěší trasy a cyklostezky</li>
|
||||
<li>Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího</li>
|
||||
<li>Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu</li>
|
||||
<li>Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení</li>
|
||||
<li>Uložení oblíbených míst jedním klepnutím</li>
|
||||
<li>Offline články z Wikipedie</li>
|
||||
<li>Vrstva metra a navigace v něm</li>
|
||||
<li>Záznam tras</li>
|
||||
<li>Export a import záložek a tras ve formátech KML, KMZ a GPX</li>
|
||||
<li>Tmavý režim k použití během noci</li>
|
||||
<li>Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru</li>
|
||||
</ul>
|
||||
|
||||
<b>Svoboda je tady</b>
|
||||
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!
|
||||
|
||||
@@ -14,6 +14,7 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
|
||||
|
||||
<b>Hauptfunktionen</b>:
|
||||
<ul>
|
||||
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
||||
• Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
|
||||
• Geh- und Radwege
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
• OpenStreetMap Daten vom 2. Juni
|
||||
• Neue Einstellungsoption zum Ändern oder Ausblenden der "Über CoMaps" Schaltfläche ganz links
|
||||
• Routen als GPS Track speichern
|
||||
• Qingdao Metro, Gärtnereien, Leitplanken, Leitern, Studios, Tanzsäle, Feuerstellen und Stundenhotels hinzugefügt
|
||||
• transparente Navigationsleiste im Light Mode
|
||||
• Mastodon und Bluesky Kontaktoptionen für POIs und im OSM-Editor hinzugefügt
|
||||
• Anzeige der Kompassgradzahl in der Richtungspfeilansicht
|
||||
Erster CoMaps Release!
|
||||
Was ist neu im Vergleich zu Organic Maps:
|
||||
• OpenStreetMap-Daten vom 15. Mai
|
||||
• OSM Login jetzt über den Webbrowser
|
||||
• Der halbtransparente Hintergrund in der U-Bahn-Ansicht wurde entfernt
|
||||
• Größe der lokalen Karte beim ersten Karten download anzeigen
|
||||
• Der Metaserver wurde durch eine feste Liste an Kartenservern ersetzt
|
||||
• Der Nachtmodus schaltet jetzt besser um, auch wenn kein GPS-Signal da ist
|
||||
• Übersetzungen aktualisiert
|
||||
• Rebranding – das Logo ist noch vorläufig
|
||||
|
||||
@@ -14,19 +14,21 @@ Join the community there and help make the best maps app
|
||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||
|
||||
<b>Main Features</b>:
|
||||
• Downloadable detailed maps with places which are not available with Google Maps
|
||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
||||
• Walking paths and cycleways
|
||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
|
||||
• Search by name or an address or by point of interest category
|
||||
• Navigation with voice announcements for walking, cycling, or driving
|
||||
• Bookmark your favorite places with a single tap
|
||||
• Offline Wikipedia articles
|
||||
• Subway transit layer and directions
|
||||
• Track recording
|
||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
||||
• A dark mode to use during the night
|
||||
• Improve map data for everyone using a basic built-in editor
|
||||
<ul>
|
||||
<li>Downloadable detailed maps with places which are not available with Google Maps</li>
|
||||
<li>Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc</li>
|
||||
<li>Walking paths and cycleways</li>
|
||||
<li>Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more</li>
|
||||
<li>Search by name or an address or by point of interest category</li>
|
||||
<li>Navigation with voice announcements for walking, cycling, or driving</li>
|
||||
<li>Bookmark your favorite places with a single tap</li>
|
||||
<li>Offline Wikipedia articles</li>
|
||||
<li>Subway transit layer and directions</li>
|
||||
<li>Track recording</li>
|
||||
<li>Export and import bookmarks and tracks in KML, KMZ, GPX formats</li>
|
||||
<li>A dark mode to use during the night</li>
|
||||
<li>Improve map data for everyone using a basic built-in editor</li>
|
||||
</ul>
|
||||
|
||||
<b>Freedom Is Here</b>
|
||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
• OpenStreetMap data as of June 2
|
||||
• add a setting to change the leftmost button or hide it
|
||||
• save built routes as tracks
|
||||
• add Qingdao metro, plant nurseries, highway guard rails, ladders, studios, dance venues, firepits, love hotels
|
||||
• transparent system navigation bar in the light mode
|
||||
• add Mastodon and Bluesky contact options to POIs and OSM editor
|
||||
• display Azimuth angle in direction arrow view
|
||||
Initial CoMaps release!
|
||||
Changes from the Organic Maps upstream:
|
||||
• OpenStreetMap data as of May 15
|
||||
• login to OSM account via a web browser
|
||||
• removed semi-transparent background in Subway layer
|
||||
• replaced metaserver with a static map servers list
|
||||
• add local map size to the startup download screen
|
||||
• improved auto night mode switch when there is no location fix
|
||||
• fix incorrect map info when tapping on a not downloaded region
|
||||
• update translations
|
||||
• rebranding - the logo is provisional still
|
||||
|
||||
12
android/app/src/fdroid/play/listings/es-ES/release-notes.txt
Normal file
12
android/app/src/fdroid/play/listings/es-ES/release-notes.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
Lanzamiento inicial de CoMaps
|
||||
|
||||
Cambios respecto a la versión de Organic Maps:
|
||||
• Datos nuevos al 15 de mayo
|
||||
• Inicio de sesión a OSM a través de navegador
|
||||
• Eliminado fondo semitransparente en la capa de Metro
|
||||
• Sustitución del metaserver por lista estática de servidores
|
||||
• Añadido tamaño del mapa local al inicio
|
||||
• Mejora del cambio automático al modo nocturno al no conocerse ubicación
|
||||
• Correcciones de fallos
|
||||
• Actualización de traducciones
|
||||
• Cambio de branding con logo provisional
|
||||
@@ -14,19 +14,21 @@ Liitu kogukonnaga ja aita luua parimat kaardirakendust:
|
||||
‣ <b>Organisatsioon on avatud ja kasutab läbipaistvat otsustusprotsessi ning rahastamist ega taotle kasumit. Rakendus on avatud lähtekoodiga.</b>
|
||||
|
||||
<b>Põhifunktsionaalsused</b>:
|
||||
• Allalaaditavad detailsed kaardid, mille sisu tihtipeale ei leia Google Mapsist
|
||||
• Kaardivaade välitingimuste jaoks, kus matkarajad, laagriplatsid, allikad, mäetipud, kontuurjooned ja palju muud vajalikku on esile tõstetud
|
||||
• Jalgrajad, rattateed ning maanteed
|
||||
• Huvipunktid, nagu restoranid, tanklad, hotellid, poed, vaatamisväärsused ja palju muud
|
||||
• Otsida saad nime, aadressi või huvipunkti kategooria alusel
|
||||
• Tee juhatamine hääljuhiste abil toimib nii kõndimisel, rattasõidul kui auto juhtimisel
|
||||
• Ühe puudutusega saad oma lemmikkohad märkida järjehoidjana
|
||||
• Vikipeedia artiklid, mida saad lugeda ilma võrguühenduseta
|
||||
• Metroode plaanid ja suunajuhised
|
||||
• Raja või teekonna salvestamise võimalus
|
||||
• Järjehoidjate ja radade eksport ning import KML, KMZ ja GPX vormingutes
|
||||
• Tume kaardivaade kasutamiseks öösel
|
||||
• Kasutades lihtsat muutmisliidest saad kaarti kõikide huvides täiendada
|
||||
<ul>
|
||||
<li>Allalaaditavad detailsed kaardid, mille sisu tihtipeale ei leia Google Mapsist</li>
|
||||
<li>Kaardivaade välitingimuste jaoks, kus matkarajad, laagriplatsid, allikad, mäetipud, kontuurjooned ja palju muud vajalikku on esile tõstetud</li>
|
||||
<li>Jalgrajad, rattateed ning maanteed</li>
|
||||
<li>Huvipunktid, nagu restoranid, tanklad, hotellid, poed, vaatamisväärsused ja palju muud</li>
|
||||
<li>Otsida saad nime, aadressi või huvipunkti kategooria alusel</li>
|
||||
<li>Tee juhatamine hääljuhiste abil toimib nii kõndimisel, rattasõidul kui auto juhtimisel</li>
|
||||
<li>Ühe puudutusega saad oma lemmikkohad märkida järjehoidjana</li>
|
||||
<li>Vikipeedia artiklid, mida saad lugeda ilma võrguühenduseta</li>
|
||||
<li>Metroode plaanid ja suunajuhised</li>
|
||||
<li>Raja või teekonna salvestamise võimalus</li>
|
||||
<li>Järjehoidjate ja radade eksport ning import KML, KMZ ja GPX vormingutes</li>
|
||||
<li>Tume kaardivaade kasutamiseks öösel</li>
|
||||
<li>Kasutades lihtsat muutmisliidest saad kaarti kõikide huvides täiendada</li>
|
||||
</ul>
|
||||
|
||||
<b>Vabadus on siin</b>
|
||||
Uuri maailma ja avasta uusi teid - tee seda privaatselt ja kogukonnaga arvestades!
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
Helppo karttanavigointi - Löydä lisää matkaltasi - Yhteisön voimin
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Vaella, pyöräile, autoile ilman verkkoyhteyttä, yksityisesti
|
||||
CoMaps - Vaella, pyöräile, autoile ilman verkkoyhteyttä yksityisesti
|
||||
|
||||
@@ -14,19 +14,21 @@ Rejoignez la communauté et aidez-nous à créer la meilleure application de nav
|
||||
‣ <b>Prises de décisions et comptes clairs et transparents, but non lucratif et complètement open source.</b>
|
||||
|
||||
<b>Fonctionnalités principales :</b>
|
||||
• Cartes détaillées téléchargeables avec des lieux non disponibles sur Google Maps
|
||||
• Mode extérieur avec sentiers de randonnée, campings, sources d'eau, sommets, courbes de niveau, etc. surlignés
|
||||
• Chemins piétons et pistes cyclables
|
||||
• Points d'intérêt comme des restaurants, stations-service, hôtels, magasins, lieux touristiques et bien plus
|
||||
• Recherche par nom, adresse ou catégorie de point d'intérêt
|
||||
• Navigation avec annonces vocales pour la marche, le vélo ou la conduite
|
||||
• Mettez en favori vos lieux préférés en un seul clic
|
||||
• Articles Wikipédia hors-ligne
|
||||
• Plan de métro et indications pour s'y rendre
|
||||
• Enregistrement des parcours
|
||||
• Exportez et importez vos favoris aux formats KML, KMZ et GPX
|
||||
• Mode sombre pour utiliser pendant la nuit
|
||||
• Amélioration de la carte par tout le monde avec un éditeur simple intégré
|
||||
<ul>
|
||||
<li>Cartes détaillées téléchargeables avec des lieux non disponibles sur Google Maps</li>
|
||||
<li>Mode extérieur avec sentiers de randonnée, campings, sources d'eau, sommets, courbes de niveau, etc. surlignés</li>
|
||||
<li>Chemins piétons et pistes cyclables</li>
|
||||
<li>Points d'intérêt comme des restaurants, stations-service, hôtels, magasins, lieux touristiques et bien plus</li>
|
||||
<li>Recherche par nom, adresse ou catégorie de point d'intérêt</li>
|
||||
<li>Navigation avec annonces vocales pour la marche, le vélo ou la conduite</li>
|
||||
<li>Mettez en favori vos lieux préférés en un seul clic</li>
|
||||
<li>Articles Wikipédia hors-ligne</li>
|
||||
<li>Plan de métro et indications pour s'y rendre</li>
|
||||
<li>Enregistrement des parcours</li>
|
||||
<li>Exportez et importez vos favoris aux formats KML, KMZ et GPX</li>
|
||||
<li>Mode sombre pour utiliser pendant la nuit</li>
|
||||
<li>Amélioration de la carte par tout le monde avec un éditeur simple intégré</li>
|
||||
</ul>
|
||||
|
||||
<b>La liberté est ici</b>
|
||||
Découvrez votre voyage, naviguez dans le monde en plaçant la vie privée et la communauté au premier plan !
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
• Données OpenStreetMap du 02 juin
|
||||
• Ajout d'une option pour personnaliser le bouton tout à gauche sur l'écran principal
|
||||
• Ajout de la possibilité d'enregistrer un itinéraire en tant que traces GPS
|
||||
• Ajout du métro de Qingdao, et divers objets sur la carte
|
||||
• Support de la barre de navigation transparent en mode clair
|
||||
• Ajout des tags Mastodon et Bluesky sur les lieux et dans l'éditeur
|
||||
• Affichage de l'azimut
|
||||
Première version de CoMaps!
|
||||
Changements par rapport à Organic Maps:
|
||||
• Données OpenStreetMap du 15 mai
|
||||
• Connexion au compte OSM via le navigateur
|
||||
• Retrait du fond semi-transparent sur la couche Métro
|
||||
• Remplacement du metaserveur par une liste statique de serveurs
|
||||
• Ajout de la taille de la carte locale au premier démarrage
|
||||
• Amélioration du mode nuit automatique
|
||||
• Correction de la suggestion de téléchargements de cartes
|
||||
• Mise à jour des traductions
|
||||
• Rebranding - le logo est encore provisoire
|
||||
|
||||
@@ -1 +1 @@
|
||||
CoMaps - Rando, vélo, conduite hors ligne & privée
|
||||
CoMaps - Randonnée, vélo, conduite hors ligne en toute confidentialité
|
||||
|
||||
@@ -14,19 +14,21 @@ Pridružite se otvorenoj zajednici i pomozite izraditi najbolju aplikaciju za ka
|
||||
‣ <b>Otvoreno i transparentno donošenje odluka i korištenja financija, Neprofitna i potpuno Otvorenog koda.</b>
|
||||
|
||||
<b>Glavne značajke</b>:
|
||||
• Preuzimanje detaljnih karti s lokacijama koje nisu dostupne s Google kartama
|
||||
• Karte za izlete s istaknutim pješačkim stazama, kampovima, izvorima vode, planinskim vrhovima, konturnim linijama itd.
|
||||
• Pješačke i biciklističke staze
|
||||
• Točke interesa kao što su restorani, benzinske crpke, hoteli, trgovine, vidikovci i još mnogo toga
|
||||
• Pretražujte po nazivu ili adresi ili po kategoriji interesa
|
||||
• Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili automobilom
|
||||
• Obilježite svoja omiljena mjesta jednim dodirom
|
||||
• Offline članci Wikipedije
|
||||
• Tranzitni sloj podzemne željeznice sa navigacijom
|
||||
• Snimanje GPS tragova
|
||||
• Izvoz i uvoz oznaka i staza u KML, KMZ, i GPX formatima
|
||||
• Tamni način rada za korištenje tijekom noći
|
||||
• Poboljšajte kartu za sve korisnike, koristeći osnovni ugrađeni uređivač karte
|
||||
<ul>
|
||||
<li>Preuzimanje detaljnih karti s lokacijama koje nisu dostupne s Google kartama</li>
|
||||
<li>Karte za izlete s istaknutim pješačkim stazama, kampovima, izvorima vode, planinskim vrhovima, konturnim linijama itd.</li>
|
||||
<li>Pješačke i biciklističke staze</li>
|
||||
<li>Točke interesa kao što su restorani, benzinske crpke, hoteli, trgovine, vidikovci i još mnogo toga</li>
|
||||
<li>Pretražujte po nazivu ili adresi ili po kategoriji interesa</li>
|
||||
<li>Navigacija s glasovnim najavama za hodanje, vožnju biciklom ili automobilom</li>
|
||||
<li>Obilježite svoja omiljena mjesta jednim dodirom</li>
|
||||
<li>Offline članci Wikipedije</li>
|
||||
<li>Tranzitni sloj podzemne željeznice sa navigacijom</li>
|
||||
<li>Snimanje GPS tragova</li>
|
||||
<li>Izvoz i uvoz oznaka i staza u KML, KMZ, i GPX formatima</li>
|
||||
<li>Tamni način rada za korištenje tijekom noći</li>
|
||||
<li>Poboljšajte kartu za sve korisnike, koristeći osnovni ugrađeni uređivač karte</li>
|
||||
</ul>
|
||||
|
||||
<b>Sloboda je ovdje</b>
|
||||
Otkrijte svoje putovanje, navigirajte svijetom s privatnošću i zajednicom na prvom mjestu!
|
||||
|
||||
@@ -14,19 +14,21 @@ Unisciti alla nostra comunità e aiutaci a creare la migliore app di mappe.
|
||||
‣ <b>Aperta e Trasparente nel Processo Decisionale e Finanziario, Senza Scopo di Lucro e Completamente Open Source</b>
|
||||
|
||||
<b>Funzionalità principali</b>:
|
||||
• Scarica mappe dettagliate di luoghi che non sono disponibili su Google Maps
|
||||
• Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altro evidenziati
|
||||
• Strade pedonali e piste ciclabili
|
||||
• Punti d'interesse come ristoranti, stazioni di benzina, hotel, negozi, luoghi turistici e molto altro
|
||||
• Cerca per nome, indirizzo o categoria
|
||||
• Navigazione con assistente vocale a piedi, in bici o in macchina
|
||||
• Salva i tuoi luoghi preferiti con un tocco
|
||||
• Leggi gli articoli Wikipedia Offline
|
||||
• Cartina delle metropolitane con direzioni
|
||||
• Registrazione del percorso
|
||||
• Esporta ed importa i tuoi luoghi preferiti e percorsi nei formati KML, KMZ o GPX
|
||||
• Modalità notturna per la notte
|
||||
• Migliora le mappe per tutti usando l'editor interno
|
||||
<ul>
|
||||
<li>Scarica mappe dettagliate di luoghi che non sono disponibili su Google Maps</li>
|
||||
<li>Modalità Outdoor con percorsi escursionistici, campeggi, sorgenti d'acqua, picchi, dislivelli ed altro evidenziati</li>
|
||||
<li>Strade pedonali e piste ciclabili</li>
|
||||
<li>Punti d'interesse come ristoranti, stazioni di benzina, hotel, negozi, luoghi turistici e molto altro</li>
|
||||
<li>Cerca per nome, indirizzo o categoria</li>
|
||||
<li>Navigazione con assistente vocale a piedi, in bici o in macchina</li>
|
||||
<li>Salva i tuoi luoghi preferiti con un tocco</li>
|
||||
<li>Leggi gli articoli Wikipedia Offline</li>
|
||||
<li>Cartina delle metropolitane con direzioni</li>
|
||||
<li>Registrazione del percorso</li>
|
||||
<li>Esporta ed importa i tuoi luoghi preferiti e percorsi nei formati KML, KMZ o GPX</li>
|
||||
<li>Modalità notturna per la notte</li>
|
||||
<li>Migliora le mappe per tutti usando l'editor interno</li>
|
||||
</ul>
|
||||
|
||||
<b>La Libertà è Qui</b>
|
||||
Esplora la tua nuova avventura, naviga il mondo con Privacy e la comunità in prima linea!
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
• Data di OpenStreetmap fino a giugno 2°
|
||||
• Nuova impostazione per cambiare o modificare la positione del tasto sinistra
|
||||
• Salvare i percorsi costruiti come tracce
|
||||
• È stato aggiunto: metropolitana di Qingdao, giardinaggi, guardrail, scale, studio,
|
||||
sala da ballo, focolari, love hotel
|
||||
• Barra di navigatione transparente di sisteme in moda luce
|
||||
• Aggiungi le opzioni di contatto Mastodon e Bluesky ai POI e all'editor di OSM
|
||||
• Visualizza l'angolo di azimut nella freccia di direzione
|
||||
11
android/app/src/fdroid/play/listings/pl-PL/release-notes.txt
Normal file
11
android/app/src/fdroid/play/listings/pl-PL/release-notes.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
Pierwsze wydanie CoMaps!
|
||||
Zmiany w stosunku do Organic Maps:
|
||||
• dane OSM z 15.05,
|
||||
• logowanie do OSM przez przeglądarkę,
|
||||
• usunięto półprzezroczyste tło w warstwie Metra,
|
||||
• zastąpiono metaserver statyczną listą serwerów map,
|
||||
• dodano rozmiar mapy do ekranu pobierania przy uruchamianiu,
|
||||
• poprawiono przełączanie trybu nocnego bez lokalizacji,
|
||||
• poprawiono niepoprawne informacje o mapie po dotknięciu niepobranego regionu,
|
||||
• zaktualizowano tłumaczenia,
|
||||
• rebranding - logo wciąż tymczasowe.
|
||||
@@ -15,19 +15,21 @@ Junte-se à comunidade e ajude a criar o melhor aplicativo de mapas.
|
||||
‣ <b>Tomada de decisões e finanças abertas e transparentes, sem fins lucrativos e totalmente de código aberto.</b>
|
||||
|
||||
<b>Principais recursos</b>:
|
||||
• Mapas detalhados para download com locais não disponíveis no Google Maps
|
||||
• Modo ao ar livre com trilhas em destaque, acampamentos, fontes de água, picos, curvas de nível, etc.
|
||||
• Trilhas para caminhada e ciclovias
|
||||
• Pontos de interesse como restaurantes, postos de gasolina, hotéis, lojas, pontos turísticos e muito mais
|
||||
• Pesquise por nome, endereço ou categoria de ponto de interesse
|
||||
• Navegação com anúncios de voz para caminhada, ciclismo ou direção
|
||||
• Marque seus lugares favoritos com um único toque
|
||||
• Artigos offline da Wikipédia
|
||||
• Caminho de transporte e direções do metrô
|
||||
• Gravação de trilhas
|
||||
• Exporte e importe favoritos e trilhas em Formatos KML, KMZ, GPX
|
||||
• Um modo escuro para usar à noite
|
||||
• Aprimore os dados do mapa para todos usando um editor básico integrado
|
||||
<ul>
|
||||
<li>Mapas detalhados para download com locais não disponíveis no Google Maps</li>
|
||||
<li>Modo ao ar livre com trilhas em destaque, acampamentos, fontes de água, picos, curvas de nível, etc.</li>
|
||||
<li>Trilhas para caminhada e ciclovias</li>
|
||||
<li>Pontos de interesse como restaurantes, postos de gasolina, hotéis, lojas, pontos turísticos e muito mais</li>
|
||||
<li>Pesquise por nome, endereço ou categoria de ponto de interesse</li>
|
||||
<li>Navegação com anúncios de voz para caminhada, ciclismo ou direção</li>
|
||||
<li>Marque seus lugares favoritos com um único toque</li>
|
||||
<li>Artigos offline da Wikipédia</li>
|
||||
<li>Caminho de transporte e direções do metrô</li>
|
||||
<li>Gravação de trilhas</li>
|
||||
<li>Exporte e importe favoritos e trilhas em Formatos KML, KMZ, GPX</li>
|
||||
<li>Um modo escuro para usar à noite</li>
|
||||
<li>Aprimore os dados do mapa para todos usando um editor básico integrado</li>
|
||||
</ul>
|
||||
|
||||
<b>A Liberdade Chegou</b>
|
||||
Descubra sua jornada, navegue pelo mundo com privacidade e comunidade em primeiro lugar!
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
• Dados do OSM de 2/06
|
||||
• Adicionada uma configuração para alterar ou ocultar o botão mais à esquerda
|
||||
• Salve rotas construídas como trilhas
|
||||
• Adicionado metrô de Qingdao, viveiros de plantas, guarda-corpos de rodovias, escadas, estúdios, casas de dança, fogueiras e motéis
|
||||
• Barra de navegação do sistema transparente no modo claro
|
||||
• Adicionadas opções de contato Mastodon e Bluesky aos POIs e ao editor OSM
|
||||
• Exibição de ângulo de azimute na visualização de seta de direção
|
||||
Lançamento inicial do CoMaps!
|
||||
Alterações em relação ao Organic Maps:
|
||||
• Dados do OSM de 15/05
|
||||
• Login na conta OSM por meio de autenticação no navegador
|
||||
• Remoção do fundo semitransparente na camada Metrô
|
||||
• Substituição do metaserver por uma lista estática de servidores de mapas
|
||||
• Melhoria na alternância automática do modo noturno quando não há localização
|
||||
• Novas traduções
|
||||
• Rebranding - O logo ainda é provisório
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
Lançamento inicial do CoMaps!
|
||||
Alterações em relação ao Organic Maps:
|
||||
• Dados do OSM de 15/05
|
||||
• Login na conta OSM através de um navegador web auth
|
||||
• Removido o fundo semi-transparente na camada do Metro
|
||||
• Substituído o metaserver por uma lista estática de servidores de mapas
|
||||
• Melhoria na mudança automática do modo noturno quando não há localização
|
||||
• Novas traduções
|
||||
• Rebranding - logótipo ainda provisório
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Andar, Pedalar, Dirigir Offline com Privacidade
|
||||
@@ -8,19 +8,21 @@
|
||||
‣ <b>Открытое и прозрачное принятие решений, финансовая отчетность, некоммерческая организация и полностью открытый исходный код.</b>
|
||||
|
||||
<b>Главные особенности</b>:
|
||||
• Загружаемые и подробные карты с местами, которые недоступны в Google Maps
|
||||
• Режим Outdoor с отмеченными туристическими тропами, кемпингами, источниками воды, вершинами, контурными линиями и т.д.
|
||||
• Пешеходные переходы и велодорожки
|
||||
• Точки интереса, такие как: рестораны, заправочные станции, отели, магазины, достопримечательности и многое другое
|
||||
• Поиск по имени, адресу или категории достопримечательностей
|
||||
• Навигация с голосовыми уведомлениями для пешеходов, велосипедистов или водителей
|
||||
• Возможность добавлять любимые места в закладки одним касанием
|
||||
• Загружаемые страницы Википедии
|
||||
• Слой общественного транспорта (метро)
|
||||
• Запись маршрута
|
||||
• Экспорт и импорт закладок и маршрутов в форматах KML, KMZ, GPX
|
||||
• Темный режим для использования в ночное время
|
||||
• Улучшение картографических данных для всех с помощью базового встроенного редактора
|
||||
• Поддержка Android Auto и CarPlay
|
||||
<ul>
|
||||
<li>Загружаемые и подробные карты с местами, которые недоступны в Google Maps</li>
|
||||
<li>Режим Outdoor с отмеченными туристическими тропами, кемпингами, источниками воды, вершинами, контурными линиями и т.д.</li>
|
||||
<li>Пешеходные переходы и велодорожки</li>
|
||||
<li>Точки интереса, такие как: рестораны, заправочные станции, отели, магазины, достопримечательности и многое другое</li>
|
||||
<li>Поиск по имени, адресу или категории достопримечательностей</li>
|
||||
<li>Навигация с голосовыми уведомлениями для пешеходов, велосипедистов или водителей</li>
|
||||
<li>Возможность добавлять любимые места в закладки одним касанием</li>
|
||||
<li>Загружаемые страницы Википедии</li>
|
||||
<li>Слой общественного транспорта (метро)</li>
|
||||
<li>Запись маршрута</li>
|
||||
<li>Экспорт и импорт закладок и маршрутов в форматах KML, KMZ, GPX</li>
|
||||
<li>Темный режим для использования в ночное время</li>
|
||||
<li>Улучшение картографических данных для всех с помощью базового встроенного редактора</li>
|
||||
<li>Поддержка Android Auto и CarPlay</li>
|
||||
</ul>
|
||||
|
||||
<i>Свобода здесь - Открой для себя поездки, навигацию по миру, ставя приватность и сообщество во главе</i>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
• карты OpenStreetMap от 2 июня
|
||||
• настройка для изменения функции левой кнопки или её скрытия
|
||||
• сохранение построенных маршрутов в виде треков
|
||||
• добавлены: метро в Qingdao, питомники растений, отбойники на шоссе, постоянные лестницы-стремянки, студии, места для танцев, кострища, отели любви
|
||||
• прозрачная полоска с системными кнопками (в светлом режиме)
|
||||
• в объекты на карте (а также в их редактор) добавлены Mastodon и Bluesky контакты
|
||||
• к стрелке направления на выбранный объект добавлен азимут
|
||||
@@ -1,33 +0,0 @@
|
||||
Бесплатна апликација отвореног кода коју је обављала заједница и заснива се на ОпенСтреетМап-у подацима, усмерени транспарентност, приватност и непрофитни. ЦОМПАПС је Апликације за органске карте виљушка, које је пак форк мапс.ме.
|
||||
|
||||
Прочитајте о разлозима пројекта и његовог правца на <b><i>codeberg.org/comaps</i></b>
|
||||
Придружите се отвореној заједници и помозите да направимо најбољу апликацију за мапе
|
||||
• Користите апликацију и проширите глас о томе
|
||||
• Дајте повратне информације и пријавите проблеме
|
||||
• Ажурирајте податке на мапи у апликацији или на веб локацији OpenStreetMap
|
||||
‣<b>фокусирано на офлајн Вар </b>: Планирајте и управљајте путовањем у иностранству без потребе за мобилним услугама, тражите путне тачке док је на даљинском покрету, итд.
|
||||
|
||||
Све апликације су дизајниране за рад ван мреже.
|
||||
‣<b> Поштовање приватности </b>: Апликација је осмишљена задржавања у уму приватност - не идентификује људе, не прати или прикупља личне податке. Нема реклама.
|
||||
‣ <b> Једноставно и елегантно </b>: Апликација је тривијална за употребу и једноставно функционише.
|
||||
‣ <b> Чува вашу батерију и простор </b>: не конзумира батерију као остале навигационе апликације. Компактне картице сачувајте драгоцени простор на вашем телефону.
|
||||
‣ <b> Отворено и направио је заједницу </b>: Људи попут вас је помогли да додају апликацију додавањем локација на OpenStreetMap-у, тестирању и давање повратних информација о апликацији и доприносе вашим развојним вештинама и новцу.
|
||||
‣ <b> Отворено и транспарентно доношење одлука и употреба финансија, непрофитна и потпуно отворена извора. </ Б>
|
||||
|
||||
<b> Главне карактеристике </b>:
|
||||
• Преузмите детаљне мапе са локацијама које нису доступне са Гоогле мапама
|
||||
• Улазнице за излете са истакнутим планинарским стазама, камповима, изворима воде, планинске врхове, контурне линије итд.
|
||||
• Стазе за планинарење и бицикле
|
||||
• Тачке интереса као што су ресторани, бензинске пумпе, хотели, продавнице, погледа и још много тога
|
||||
• Претражите име или адресу или по категоријама камате
|
||||
• навигација са гласовним најавама за ходање, бициклизам или аутомобил
|
||||
• Означите своја омиљена места једним додиром
|
||||
• Офлајн чланци Википедије
|
||||
• транзитни слој подземне пруге са навигацијом
|
||||
• Снимање ГПС трагова
|
||||
• Ознака и увоз и увоз у KML, KMZ, GPX формате
|
||||
• Тамни режим за употребу током ноћи
|
||||
• Побољшајте карту за све кориснике, користећи основни уредни уредник мапе
|
||||
|
||||
<b> Слобода је овде </b>
|
||||
Откријте своје путовање, крећете се са свијетом са приватношћу и заједницом на првом месту!
|
||||
@@ -1,2 +0,0 @@
|
||||
Gönüllüler tarafından yürütülen, OpenStreetMap harita verisini kullanan, şeffaf, mahremiyete saygılı, kamu yararına olma kararlılığıyla güçlendirilmiş bir özgür yazılım. CoMaps OrganicMaps isimli, esasen Maps.ME'nin çatalı olan bir özgür yazılımın çatalıdır.
|
||||
Projenin ortaya çıkma sebebini ve gidişatını <b><i>codeberg.org/comaps</i></b>'den okuyabilirsiniz.
|
||||
@@ -1 +0,0 @@
|
||||
Kolayca gezinin - Seyahat etmenin ötesini bulun - Gönüllüler tarafından yapıldı
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - İnternetsiz Seyahat Edin
|
||||
@@ -14,19 +14,21 @@
|
||||
‣ <b>决策问责、财务透明、非营利性、完全开源。</b>
|
||||
|
||||
<b>主要功能</b>:
|
||||
• 可下载详细的地图,包括许多Google地图中未显示的地方
|
||||
• 突出显示远足路线、露营地、水源、山峰、等高线等的户外模式
|
||||
• 步行道和自行车道
|
||||
• 餐厅、加油站、酒店、商店、景点等众多兴趣点
|
||||
• 按名称、地址或兴趣点类别搜索
|
||||
• 步行、骑车或驾驶时,可通过语音提示进行导航
|
||||
• 一键收藏您中意的地点
|
||||
• 离线阅读维基百科文章
|
||||
• 地铁交通图层和路线指示
|
||||
• 轨迹记录
|
||||
• 以 KML、KMZ 和 GPX 格式导出和导入书签和轨迹
|
||||
• 选择天暗后自动开启的黑暗模式
|
||||
• 使用基本的内置编辑器来编辑 OpenStreetMap 地点,帮助大家改进地图数据
|
||||
<ul>
|
||||
<li>可下载详细的地图,包括许多Google地图中未显示的地方</li>
|
||||
<li>突出显示远足路线、露营地、水源、山峰、等高线等的户外模式</li>
|
||||
<li>步行道和自行车道</li>
|
||||
<li>餐厅、加油站、酒店、商店、景点等众多兴趣点</li>
|
||||
<li>按名称、地址或兴趣点类别搜索</li>
|
||||
<li>步行、骑车或驾驶时,可通过语音提示进行导航</li>
|
||||
<li>一键收藏您中意的地点</li>
|
||||
<li>离线阅读维基百科文章</li>
|
||||
<li>地铁交通图层和路线指示</li>
|
||||
<li>轨迹记录</li>
|
||||
<li>以 KML、KMZ 和 GPX 格式导出和导入书签和轨迹</li>
|
||||
<li>选择天暗后自动开启的黑暗模式</li>
|
||||
<li>使用基本的内置编辑器来编辑 OpenStreetMap 地点,帮助大家改进地图数据</li>
|
||||
</ul>
|
||||
|
||||
<b>自由在此</b>
|
||||
探索您的旅程,以隐私和社区为本,畅游世界!
|
||||
|
||||
@@ -14,19 +14,21 @@
|
||||
‣ <b>決策問責、財務透明、非營利性、完全開源。</b>
|
||||
|
||||
<b>主要功能</b>:
|
||||
• 可下載詳細的地圖,包括許多Google地圖中未顯示的地方
|
||||
• 突出顯示遠足路線、露營地、水源、山峰、等高線等的戶外模式
|
||||
• 步道和自行車道
|
||||
• 餐廳、加油站、旅館、商店、景點等眾多興趣點
|
||||
• 按名稱、地址或興趣點類別搜尋
|
||||
• 步行、騎車或駕駛時,可透過語音提示進行導航
|
||||
• 一鍵收藏您喜愛的地點
|
||||
• 離線閱讀維基百科文章
|
||||
• 列車運輸圖層及路線指示
|
||||
• 軌跡記錄
|
||||
• 以 KML、KMZ 和 GPX 格式匯出和匯入書籤和軌跡
|
||||
• 選擇天暗後自動開啟的黑暗模式
|
||||
• 使用基本的內建編輯器來編輯 OpenStreetMap 地點,幫助大家改進地圖資料
|
||||
<ul>
|
||||
<li>可下載詳細的地圖,包括許多Google地圖中未顯示的地方</li>
|
||||
<li>突出顯示遠足路線、露營地、水源、山峰、等高線等的戶外模式</li>
|
||||
<li>步道和自行車道</li>
|
||||
<li>餐廳、加油站、旅館、商店、景點等眾多興趣點</li>
|
||||
<li>按名稱、地址或興趣點類別搜尋</li>
|
||||
<li>步行、騎車或駕駛時,可透過語音提示進行導航</li>
|
||||
<li>一鍵收藏您喜愛的地點</li>
|
||||
<li>離線閱讀維基百科文章</li>
|
||||
<li>列車運輸圖層及路線指示</li>
|
||||
<li>軌跡記錄</li>
|
||||
<li>以 KML、KMZ 和 GPX 格式匯出和匯入書籤和軌跡</li>
|
||||
<li>選擇天暗後自動開啟的黑暗模式</li>
|
||||
<li>使用基本的內建編輯器來編輯 OpenStreetMap 地點,幫助大家改進地圖資料</li>
|
||||
</ul>
|
||||
|
||||
<b>自由在此</b>
|
||||
探索您的旅程,以隱私和社群為本,暢遊世界!
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
Yhteisön johtama vapaa ja avoimeen lähdekoodiin perustuva karttasovellus, jonka karttadata perustuu OpenStreetMap:n avoimeen dataan. Sovelluksessa painottuu vahva sitoutuminen läpinäkyvyyteen, yksityisyyteen ja voittoa tavoittelemattomaan toimintaan.
|
||||
|
||||
Liity yhteisöön ja auta kehittämään parasta karttasovellusta
|
||||
• Käytä sovellusta ja levitä sanaa
|
||||
• Anna palautetta ja raportoi ongelmista
|
||||
• Päivitä karttadataa sovelluksessa tai OpenStreetMap:n verkkosivuilla
|
||||
|
||||
<i>Palautteesi ja 5-tähden arvostelu on paras tukesi meille!</i>
|
||||
|
||||
‣ <b>Yksinkertainen ja viimeistelty</b>: Olennaiset ominaisuudet, joita on helppo käyttää.
|
||||
‣ <b>Offline-painotteinen</b>: Suunnittele ja navigoi matkasi ilman verkkoyhteyttä. Etsi reittipisteitä retkilläsi. Kaikki sovelluksen toiminnot on suunniteltu käytettäväksi ilman verkkoyhteyttä.
|
||||
‣ <b>Kunnioittaa yksityisyyttä</b>: Sovellus on suunniteltu yksityisyyttä silmälläpitäen. Sovellu ei tunnista ihmisä, seuraa toimintaasi, eikä kerää henkilökohtaisia tietojasi. Mainosvapaa.
|
||||
‣ <b>Säästää akkua ja tilaa</b>: Ei kuluta akkua, kuten toiset karttasovellukset. Kompaktit kartat säästävät tilaa puhelimessasi.
|
||||
‣ <b>Ilmainen ja yhteisön rakentama</b>: Ihmiset, kuten sinä ovat auttaneet sovelluksen kehityksessä lisäämällä paikkoja OpenStreetMap:iin, testaamalla sovellusta ja antamalla palautetta. Voit auttaa myös kehittämällä sovellusta ja lahjoittamalla sovelluskehitykseen.
|
||||
‣ <b>Avoin ja läpinäkyvä päätöksenteko ja rahoitus. Voittoa tavoittelematon ja täysin avoimeen lähdekoodiin perustuva.</b>
|
||||
|
||||
<b>Tärkeimmät ominaisuudet</b>:
|
||||
• Ladattavat yksityiskohtaiset kartat paikoista, joita ei löydy edes Google Maps:sta
|
||||
• Ulkoilutila, josta löytyy korostettuna reitit, leirintäpaikat, vesipisteet, huiput ja korkeuserot yms.
|
||||
• Kävely- ja pyörätiet
|
||||
• Kiinnostavat paikat, kuten ravintolat, huoltoasemat, hotellit, kaupat, nähtävyydet ja monta muuta
|
||||
• Etsi nimellä, osoitteella tai kiinnostavan paikan kategorialla
|
||||
• Navigointi ääni-ilmoituksilla kävellessä, pyöräillessä tai ajaessa
|
||||
• Tallenna suosikkipaikkasi yhdellä napautuksella
|
||||
• Offline Wikipedia-artikkelit
|
||||
• Maanalaisen liikenteen tasot ja ohjeet
|
||||
• Reittien tallennus
|
||||
• Tuo ja vie kirjanmerkkejä ja reittejä KML-, KMZ- ja GPX-formaateissa
|
||||
• Tumma tila iltaa ja yötä varten
|
||||
• Paranna karttadataa kaikille sisäänrakennetulla editorilla
|
||||
• Android Auto -tuki
|
||||
|
||||
Raportoi sovellusvirheistä, ehdota ideoita liity yhteisöön osoitteessa <b><i>comaps.app</i></b>
|
||||
|
||||
<b>Vapaus on täällä</b>
|
||||
Löydä matkasi, navigoi maailmassa yksityisyyden ja yhteisön tukemana!
|
||||
@@ -1 +0,0 @@
|
||||
Helppo karttanavigointi - Löydä lisää matkaltasi - Yhteisön voimin
|
||||
@@ -1,45 +0,0 @@
|
||||
Um aplicativo de mapas gratuito e de código aberto, liderado pela comunidade e baseado em dados do OpenStreetMap, reforçado pelo compromisso com a transparência, privacidade e sem fins lucrativos.
|
||||
|
||||
Junte-se à comunidade e ajude a criar o melhor aplicativo de mapas.
|
||||
|
||||
• Use o aplicativo e divulgue-o.
|
||||
• Envie feedback e relate problemas.
|
||||
• Atualize os dados do mapa no aplicativo ou no site do OpenStreetMap.
|
||||
|
||||
<i>Seu feedback e avaliações 5 estrelas são o nosso melhor suporte!</i>
|
||||
|
||||
‣ <b>Simples e refinado</b>: recursos essenciais e fáceis de usar que simplesmente funcionam.
|
||||
‣ <b>Foco offline</b>: Planeje e navegue em sua viagem ao exterior sem a necessidade de sinal de celular, pesquise pontos de referência durante uma caminhada distante, etc. Todas as funções do aplicativo foram projetadas para funcionar offline.
|
||||
‣ <b>Respeitando a privacidade</b>: O aplicativo foi projetado com a privacidade em mente - não identifica pessoas, não rastreia e não coleta informações pessoais. Livre de anúncios.
|
||||
‣ <b>Economiza bateria e espaço</b>: Não esgota a bateria como outros aplicativos de navegação. Mapas compactos economizam espaço precioso no seu celular.
|
||||
‣ <b>Gratuito e desenvolvido pela comunidade</b>: Pessoas como você ajudaram a desenvolver o aplicativo adicionando locais ao OpenStreetMap, testando e dando feedback sobre os recursos, além de contribuir com suas habilidades de desenvolvimento e recursos financeiros.
|
||||
‣ <b>Tomada de decisões e finanças abertas e transparentes, sem fins lucrativos e totalmente de código aberto.</b>
|
||||
|
||||
‣ Simples e sofisticado: recursos essenciais e fáceis de usar que simplesmente funcionam.
|
||||
‣ Foco offline: Planeje e navegue em sua viagem ao exterior sem a necessidade de sinal de celular, pesquise pontos de referência durante uma caminhada distante, etc. Todas as funções do aplicativo foram projetadas para funcionar offline.
|
||||
‣ Respeito à privacidade: O aplicativo foi projetado com a privacidade em mente - não identifica pessoas, não rastreia e não coleta informações pessoais. Livre de anúncios.
|
||||
‣ Economiza bateria e espaço: Não consome bateria como outros aplicativos de navegação. Mapas compactos economizam espaço precioso no seu celular.
|
||||
‣ Gratuito e desenvolvido pela comunidade: Pessoas como você ajudaram a desenvolver o aplicativo adicionando lugares ao OpenStreetMap, testando e dando feedback sobre os recursos e contribuindo com dinheiro e habilidades de desenvolvimento.
|
||||
‣ Tomada de decisões e finanças abertas e transparentes, sem fins lucrativos e totalmente de código aberto.
|
||||
|
||||
Principais recursos:
|
||||
• Mapas detalhados para download com locais que não estão disponíveis em muitos mapas comerciais
|
||||
• Modo ao ar livre com trilhas destacadas, acampamentos, fontes de água, picos, curvas de nível, etc.
|
||||
• Trilhas para caminhada e ciclovias
|
||||
• Pontos de interesse como restaurantes, postos de gasolina, hotéis, lojas, pontos turísticos e muito mais
|
||||
• Pesquise por nome, endereço ou categoria de ponto de interesse
|
||||
• Navegação com anúncios de voz para caminhada, ciclismo ou direção
|
||||
• Marque seus lugares favoritos com um único toque
|
||||
• Sincronização com iCloud para seus favoritos e trilhas
|
||||
• Artigos offline da Wikipédia
|
||||
• Camada e direções de transporte público de metrô
|
||||
• Gravação de trilhas
|
||||
• Exporte e importe favoritos e trilhas nos formatos KML, KMZ e GPX
|
||||
• Modo escuro para usar à noite
|
||||
• Aprimore os dados do mapa para todos usando um editor básico integrado
|
||||
• Suporte para Android Auto
|
||||
|
||||
Por favor, reporte problemas com o aplicativo, sugira ideias e junte-se à nossa comunidade no site <b><i>comaps.app</i></b>.
|
||||
|
||||
<b>A Liberdade Chegou</b>
|
||||
Descubra sua jornada, navegue pelo mundo com privacidade e comunidade em primeiro lugar!
|
||||
@@ -1 +0,0 @@
|
||||
Fácil navegação - Descubra mais sobre sua jornada - Desenvolvido pela comunidade
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Navegue privadamente
|
||||
@@ -1 +0,0 @@
|
||||
Kolayca gezinin - Seyahat etmenin ötesini bulun - Gönüllüler tarafından yapıldı
|
||||
@@ -1 +0,0 @@
|
||||
CoMaps - Mahremiyetli Seyahat
|
||||
@@ -119,7 +119,7 @@
|
||||
|
||||
<data android:scheme="http"/>
|
||||
<data android:scheme="https"/>
|
||||
<data android:host="comaps.at"/>
|
||||
<data android:host="comaps.app"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
|
||||
@@ -34,8 +34,8 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.annotation.UiThread;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -100,9 +100,9 @@ import app.organicmaps.settings.DrivingOptionsActivity;
|
||||
import app.organicmaps.settings.RoadType;
|
||||
import app.organicmaps.settings.SettingsActivity;
|
||||
import app.organicmaps.settings.UnitLocale;
|
||||
import app.organicmaps.leftbutton.LeftButton;
|
||||
import app.organicmaps.leftbutton.LeftButtonsHolder;
|
||||
import app.organicmaps.leftbutton.LeftToggleButton;
|
||||
import app.organicmaps.universalbuttons.UniversalButton;
|
||||
import app.organicmaps.universalbuttons.UniversalButtonsHolder;
|
||||
import app.organicmaps.universalbuttons.UniversalToggleButton;
|
||||
import app.organicmaps.util.Config;
|
||||
import app.organicmaps.util.LocationUtils;
|
||||
import app.organicmaps.util.PowerManagment;
|
||||
@@ -119,8 +119,6 @@ import app.organicmaps.widget.menu.MainMenu;
|
||||
import app.organicmaps.widget.placepage.PlacePageController;
|
||||
import app.organicmaps.widget.placepage.PlacePageData;
|
||||
import app.organicmaps.widget.placepage.PlacePageViewModel;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
@@ -134,10 +132,9 @@ import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static app.organicmaps.location.LocationState.FOLLOW;
|
||||
import static app.organicmaps.location.LocationState.FOLLOW_AND_ROTATE;
|
||||
import static app.organicmaps.location.LocationState.LOCATION_TAG;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_ADD_PLACE_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_RECORD_TRACK_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_SETTINGS_CODE;
|
||||
import static app.organicmaps.universalbuttons.UniversalButtonsHolder.BUTTON_ADD_PLACE_CODE;
|
||||
import static app.organicmaps.universalbuttons.UniversalButtonsHolder.BUTTON_RECORD_TRACK_CODE;
|
||||
import static app.organicmaps.universalbuttons.UniversalButtonsHolder.BUTTON_SETTINGS_CODE;
|
||||
import static app.organicmaps.util.PowerManagment.POWER_MANAGEMENT_TAG;
|
||||
|
||||
public class MwmActivity extends BaseMwmFragmentActivity
|
||||
@@ -188,7 +185,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
private MapFragment mMapFragment;
|
||||
|
||||
private View mPointChooser;
|
||||
private MaterialToolbar mPointChooserToolbar;
|
||||
private Toolbar mPointChooserToolbar;
|
||||
|
||||
private RoutingPlanInplaceController mRoutingPlanInplaceController;
|
||||
|
||||
@@ -211,7 +208,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private int mNavBarHeight;
|
||||
|
||||
private LeftButtonsHolder buttonsHolder;
|
||||
private UniversalButtonsHolder buttonsHolder;
|
||||
|
||||
private PlacePageViewModel mPlacePageViewModel;
|
||||
private MapButtonsViewModel mMapButtonsViewModel;
|
||||
@@ -614,12 +611,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (activityResult.getResultCode() == Activity.RESULT_OK)
|
||||
{
|
||||
Intent data = activityResult.getData();
|
||||
if (data != null && data.hasExtra(MwmActivity.this.getString(R.string.pref_left_button)))
|
||||
if (data != null && data.hasExtra(UniversalButtonsHolder.KEY_PREF_UNIVERSAL_BUTTON))
|
||||
{
|
||||
MapButtonsController mMapButtonsController = (MapButtonsController) getSupportFragmentManager().findFragmentById(R.id.map_buttons);
|
||||
if (mMapButtonsController != null)
|
||||
{
|
||||
mMapButtonsController.reloadLeftButton(buttonsHolder.getActiveButton());
|
||||
mMapButtonsController.reloadUniversalButton(buttonsHolder.getActiveButton());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -826,35 +823,9 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
|
||||
private void prepareNavigationButtons()
|
||||
{
|
||||
buttonsHolder = LeftButtonsHolder.getInstance(this);
|
||||
buttonsHolder.registerButton(new LeftButton()
|
||||
{
|
||||
@Override
|
||||
public String getCode()
|
||||
{
|
||||
return BUTTON_HELP_CODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrefsName()
|
||||
{
|
||||
return getString(R.string.help);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawIcon(FloatingActionButton imageView)
|
||||
{
|
||||
imageView.setImageResource(R.drawable.ic_question_mark);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton left)
|
||||
{
|
||||
Intent intent = new Intent(MwmActivity.this, HelpActivity.class);
|
||||
MwmActivity.this.startActivity(intent);
|
||||
}
|
||||
});
|
||||
buttonsHolder.registerButton(new LeftButton()
|
||||
buttonsHolder = UniversalButtonsHolder.getInstance(this);
|
||||
buttonsHolder.registerDefaultUniversalButtons(this);
|
||||
buttonsHolder.registerButton(new UniversalButton()
|
||||
{
|
||||
@Override
|
||||
public String getCode()
|
||||
@@ -875,12 +846,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton left)
|
||||
public void onClick(FloatingActionButton universalButtonView)
|
||||
{
|
||||
onAddPlace();
|
||||
}
|
||||
});
|
||||
buttonsHolder.registerButton(new LeftButton()
|
||||
buttonsHolder.registerButton(new UniversalButton()
|
||||
{
|
||||
@Override
|
||||
public String getCode()
|
||||
@@ -901,13 +872,13 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton left)
|
||||
public void onClick(FloatingActionButton universalButtonView)
|
||||
{
|
||||
onOpenSettings();
|
||||
}
|
||||
});
|
||||
|
||||
buttonsHolder.registerButton(new LeftToggleButton()
|
||||
buttonsHolder.registerButton(new UniversalToggleButton()
|
||||
{
|
||||
private boolean isRecording = TrackRecorder.nativeIsTrackRecordingEnabled();
|
||||
|
||||
@@ -935,7 +906,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
imageView.setImageResource(R.drawable.ic_track_recording_off);
|
||||
|
||||
int color = isRecording
|
||||
? ContextCompat.getColor(MwmActivity.this, R.color.active_track_recording)
|
||||
? Color.parseColor("#0057ff")
|
||||
: ThemeUtils.getColor(MwmActivity.this, R.attr.iconTint);
|
||||
|
||||
ColorStateList colorStateList = ColorStateList.valueOf(color);
|
||||
@@ -943,10 +914,10 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton left)
|
||||
public void onClick(FloatingActionButton universalButtonView)
|
||||
{
|
||||
onTrackRecordingOptionSelected();
|
||||
drawIcon(left);
|
||||
drawIcon(universalButtonView);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -957,7 +928,7 @@ public class MwmActivity extends BaseMwmFragmentActivity
|
||||
if (mPreviousMapLayoutMode != layoutMode)
|
||||
{
|
||||
MapButtonsController mapButtonsController = new MapButtonsController();
|
||||
mapButtonsController.setLeftButton(buttonsHolder.getActiveButton());
|
||||
mapButtonsController.setUniversalButton(buttonsHolder.getActiveButton());
|
||||
|
||||
FragmentTransaction transaction = getSupportFragmentManager()
|
||||
.beginTransaction().replace(R.id.map_buttons, mapButtonsController);
|
||||
|
||||
@@ -15,12 +15,11 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StyleRes;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.SplashActivity;
|
||||
@@ -149,7 +148,7 @@ public abstract class BaseMwmFragmentActivity extends AppCompatActivity
|
||||
onBackPressed();
|
||||
}
|
||||
|
||||
protected MaterialToolbar getToolbar()
|
||||
protected Toolbar getToolbar()
|
||||
{
|
||||
return findViewById(R.id.toolbar);
|
||||
}
|
||||
|
||||
@@ -10,13 +10,11 @@ import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.LayoutRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
@@ -25,7 +23,7 @@ import app.organicmaps.widget.PlaceholderView;
|
||||
|
||||
public abstract class BaseMwmRecyclerFragment<T extends RecyclerView.Adapter> extends Fragment
|
||||
{
|
||||
private MaterialToolbar mToolbar;
|
||||
private Toolbar mToolbar;
|
||||
|
||||
@SuppressWarnings("NotNullFieldNotInitialized")
|
||||
@NonNull
|
||||
|
||||
@@ -6,13 +6,11 @@ import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentFactory;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
@@ -28,7 +26,7 @@ public abstract class BaseToolbarActivity extends BaseMwmFragmentActivity
|
||||
{
|
||||
super.onSafeCreate(savedInstanceState);
|
||||
|
||||
MaterialToolbar toolbar = getToolbar();
|
||||
Toolbar toolbar = getToolbar();
|
||||
if (toolbar != null)
|
||||
{
|
||||
int title = getToolbarTitle();
|
||||
@@ -44,7 +42,7 @@ public abstract class BaseToolbarActivity extends BaseMwmFragmentActivity
|
||||
}
|
||||
}
|
||||
|
||||
protected void setupHomeButton(@NonNull MaterialToolbar toolbar)
|
||||
protected void setupHomeButton(@NonNull Toolbar toolbar)
|
||||
{
|
||||
UiUtils.showHomeUpButton(toolbar);
|
||||
}
|
||||
@@ -94,7 +92,7 @@ public abstract class BaseToolbarActivity extends BaseMwmFragmentActivity
|
||||
|
||||
if (title != null)
|
||||
{
|
||||
MaterialToolbar toolbar = getToolbar();
|
||||
Toolbar toolbar = getToolbar();
|
||||
if (toolbar != null && toolbar.getTitle() != null)
|
||||
{
|
||||
mLastTitle = toolbar.getTitle().toString();
|
||||
|
||||
@@ -480,13 +480,6 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
|
||||
UiUtils.showIf(mSearchResultsMode && !TextUtils.isEmpty(found), mFoundName);
|
||||
|
||||
long size = getMapDisplaySize();
|
||||
mSize.setText(StringUtils.getFileSizeString(mFragment.requireContext(), size));
|
||||
mStatusIcon.update(mItem);
|
||||
}
|
||||
|
||||
private long getMapDisplaySize()
|
||||
{
|
||||
long size;
|
||||
if (mItem.status == CountryItem.STATUS_ENQUEUED ||
|
||||
mItem.status == CountryItem.STATUS_PROGRESS ||
|
||||
@@ -494,16 +487,13 @@ class DownloaderAdapter extends RecyclerView.Adapter<DownloaderAdapter.ViewHolde
|
||||
{
|
||||
size = mItem.enqueuedSize;
|
||||
}
|
||||
else if (mItem.status == CountryItem.STATUS_FAILED ||
|
||||
mItem.status == CountryItem.STATUS_DOWNLOADABLE)
|
||||
{
|
||||
size = mItem.totalSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
size = ((!mSearchResultsMode && mMyMapsMode) ? mItem.size : mItem.totalSize);
|
||||
}
|
||||
return size;
|
||||
|
||||
mSize.setText(StringUtils.getFileSizeString(mFragment.requireContext(), size));
|
||||
mStatusIcon.update(mItem);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -189,7 +189,6 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_WEBSITE, R.string.error_enter_correct_web);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_WEBSITE_MENU, R.string.error_enter_correct_web);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_EMAIL, R.string.error_enter_correct_email);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_LEVEL, R.string.error_enter_correct_level);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_CONTACT_FEDIVERSE, R.string.error_enter_correct_fediverse_page);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_CONTACT_FACEBOOK, R.string.error_enter_correct_facebook_page);
|
||||
initMetadataEntry(Metadata.MetadataType.FMD_CONTACT_INSTAGRAM, R.string.error_enter_correct_instagram_page);
|
||||
@@ -432,7 +431,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
|
||||
// Details
|
||||
View mBlockLevels = view.findViewById(R.id.block_levels);
|
||||
mBuildingLevels = findInputAndInitBlock(mBlockLevels, R.drawable.ic_floor, R.string.editor_building_levels);
|
||||
mBuildingLevels = findInputAndInitBlock(mBlockLevels, R.drawable.ic_floor,
|
||||
getString(R.string.editor_storey_number, Editor.nativeGetMaxEditableBuildingLevels()));
|
||||
mBuildingLevels.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||
mInputBuildingLevels = mBlockLevels.findViewById(R.id.custom_input);
|
||||
View blockPhone = view.findViewById(R.id.block_phone);
|
||||
@@ -446,8 +446,6 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
R.drawable.ic_website_menu, R.string.website_menu, InputType.TYPE_TEXT_VARIATION_URI);
|
||||
View emailBlock = initBlock(view, Metadata.MetadataType.FMD_EMAIL, R.id.block_email,
|
||||
R.drawable.ic_email, R.string.email, InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||
View levelBlock = initBlock(view, Metadata.MetadataType.FMD_LEVEL, R.id.block_level,
|
||||
R.drawable.ic_level_white, R.string.editor_level, InputType.TYPE_CLASS_NUMBER);
|
||||
View fediverseContactBlock = initBlock(view, Metadata.MetadataType.FMD_CONTACT_FEDIVERSE, R.id.block_fediverse,
|
||||
R.drawable.ic_mastodon_white, R.string.mastodon, InputType.TYPE_TEXT_VARIATION_URI);
|
||||
View facebookContactBlock = initBlock(view, Metadata.MetadataType.FMD_CONTACT_FACEBOOK, R.id.block_facebook,
|
||||
@@ -505,7 +503,6 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
|
||||
mDetailsBlocks.put(Metadata.MetadataType.FMD_WEBSITE, websiteBlock);
|
||||
mDetailsBlocks.put(Metadata.MetadataType.FMD_WEBSITE_MENU, websiteMenuBlock);
|
||||
mDetailsBlocks.put(Metadata.MetadataType.FMD_EMAIL, emailBlock);
|
||||
mDetailsBlocks.put(Metadata.MetadataType.FMD_LEVEL, levelBlock);
|
||||
mDetailsBlocks.put(Metadata.MetadataType.FMD_OPERATOR, operatorBlock);
|
||||
|
||||
mSocialMediaBlocks.put(Metadata.MetadataType.FMD_CONTACT_FEDIVERSE, fediverseContactBlock);
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.ScrollView;
|
||||
|
||||
@@ -23,16 +24,14 @@ import app.organicmaps.util.Utils;
|
||||
import app.organicmaps.util.WindowInsetUtils.ScrollableContentInsetsListener;
|
||||
import app.organicmaps.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.util.concurrency.UiThread;
|
||||
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
|
||||
public class OsmLoginFragment extends BaseMwmToolbarFragment
|
||||
{
|
||||
private ProgressBar mProgress;
|
||||
private MaterialButton mLoginButton;
|
||||
private MaterialButton mLostPasswordButton;
|
||||
private Button mLoginButton;
|
||||
private Button mLostPasswordButton;
|
||||
private TextInputEditText mLoginInput;
|
||||
private TextInputEditText mPasswordInput;
|
||||
|
||||
@@ -52,7 +51,7 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment
|
||||
mPasswordInput = view.findViewById(R.id.osm_password);
|
||||
mLoginButton = view.findViewById(R.id.login);
|
||||
mLostPasswordButton = view.findViewById(R.id.lost_password);
|
||||
MaterialButton registerButton = view.findViewById(R.id.register);
|
||||
Button registerButton = view.findViewById(R.id.register);
|
||||
registerButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_REGISTER));
|
||||
mProgress = view.findViewById(R.id.osm_login_progress);
|
||||
final String dataVersion = DateUtils.getShortDateFormatter().format(Framework.getDataVersion());
|
||||
|
||||
@@ -6,7 +6,9 @@ import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -20,17 +22,15 @@ import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.util.concurrency.ThreadPool;
|
||||
import app.organicmaps.util.concurrency.UiThread;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.text.NumberFormat;
|
||||
|
||||
public class ProfileFragment extends BaseMwmToolbarFragment
|
||||
{
|
||||
private View mUserInfoBlock;
|
||||
private MaterialTextView mEditsSent;
|
||||
private MaterialTextView mProfileName;
|
||||
private ShapeableImageView mProfileImage;
|
||||
private TextView mEditsSent;
|
||||
private TextView mProfileName;
|
||||
private ImageView mProfileImage;
|
||||
private ProgressBar mProfileInfoLoading;
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
package app.organicmaps.leftbutton;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
public interface LeftButton
|
||||
{
|
||||
String getCode();
|
||||
|
||||
String getPrefsName();
|
||||
|
||||
default void drawIcon(FloatingActionButton imageView) {}
|
||||
|
||||
default void onClick(FloatingActionButton leftButtonView) {}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
package app.organicmaps.leftbutton;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import app.organicmaps.R;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LeftButtonsHolder
|
||||
{
|
||||
private static volatile LeftButtonsHolder instance;
|
||||
|
||||
public static final String DISABLE_BUTTON_CODE = "disable";
|
||||
public static final String BUTTON_HELP_CODE = "help";
|
||||
public static final String BUTTON_SETTINGS_CODE = "settings";
|
||||
public static final String BUTTON_ADD_PLACE_CODE = "add-place";
|
||||
public static final String BUTTON_RECORD_TRACK_CODE = "record-track";
|
||||
private static final String DEFAULT_BUTTON_CODE = BUTTON_HELP_CODE;
|
||||
|
||||
private final String leftButtonPreferenceKey;
|
||||
|
||||
private final SharedPreferences prefs;
|
||||
private final Map<String, LeftButton> availableButtons = new LinkedHashMap<>();
|
||||
|
||||
private LeftButtonsHolder(Context context)
|
||||
{
|
||||
this.prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
this.leftButtonPreferenceKey = context.getString(R.string.pref_left_button);
|
||||
initDisableButton(context);
|
||||
}
|
||||
|
||||
public void registerButton(LeftButton button)
|
||||
{
|
||||
availableButtons.put(button.getCode(), button);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public LeftButton getActiveButton()
|
||||
{
|
||||
String activeButtonCode = prefs.getString(leftButtonPreferenceKey, DEFAULT_BUTTON_CODE);
|
||||
if (!TextUtils.isEmpty(activeButtonCode))
|
||||
return availableButtons.get(activeButtonCode);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public Collection<LeftButton> getAllButtons()
|
||||
{
|
||||
return availableButtons.values();
|
||||
}
|
||||
|
||||
public static LeftButtonsHolder getInstance(Context context)
|
||||
{
|
||||
LeftButtonsHolder localInstance = instance;
|
||||
if (localInstance == null)
|
||||
{
|
||||
synchronized (LeftButtonsHolder.class)
|
||||
{
|
||||
localInstance = instance;
|
||||
if (localInstance == null)
|
||||
{
|
||||
instance = localInstance = new LeftButtonsHolder(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
return localInstance;
|
||||
}
|
||||
|
||||
private void initDisableButton(Context context)
|
||||
{
|
||||
availableButtons.put(DISABLE_BUTTON_CODE, new LeftButton()
|
||||
{
|
||||
@Override
|
||||
public String getCode()
|
||||
{
|
||||
return DISABLE_BUTTON_CODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrefsName()
|
||||
{
|
||||
return context.getString(R.string.pref_left_button_disable);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
package app.organicmaps.leftbutton;
|
||||
|
||||
public interface LeftToggleButton extends LeftButton
|
||||
{
|
||||
void setChecked(boolean checked);
|
||||
}
|
||||
@@ -213,7 +213,7 @@ public class LocationHelper implements BaseLocationProvider.Listener
|
||||
|
||||
if (mSavedLocation != null)
|
||||
{
|
||||
if (!LocationUtils.isLocationBetterThanLast(location, mSavedLocation))
|
||||
if (!LocationUtils.isFromFusedProvider(location) && !LocationUtils.isLocationBetterThanLast(location, mSavedLocation))
|
||||
{
|
||||
Logger.d(TAG, "The new " + location + " is worse than the last " + mSavedLocation);
|
||||
return;
|
||||
|
||||
@@ -2,7 +2,6 @@ package app.organicmaps.location;
|
||||
|
||||
import android.content.Context;
|
||||
import android.location.Location;
|
||||
import android.os.SystemClock;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
@@ -58,7 +57,6 @@ class RouteSimulationProvider extends BaseLocationProvider
|
||||
location.setLatitude(mPoints[mCurrentPoint].mLat);
|
||||
location.setLongitude(mPoints[mCurrentPoint].mLon);
|
||||
location.setAccuracy(1.0f);
|
||||
location.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
|
||||
mListener.onLocationChanged(location);
|
||||
mCurrentPoint += 1;
|
||||
UiThread.runLater(this::nextPoint, INTERVAL_MS);
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package app.organicmaps.maplayer;
|
||||
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.BUTTON_HELP_CODE;
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
|
||||
|
||||
import android.animation.ArgbEvaluator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
@@ -36,8 +33,8 @@ import app.organicmaps.maplayer.isolines.IsolinesManager;
|
||||
import app.organicmaps.maplayer.subway.SubwayManager;
|
||||
import app.organicmaps.maplayer.traffic.TrafficManager;
|
||||
import app.organicmaps.routing.RoutingController;
|
||||
import app.organicmaps.leftbutton.LeftButton;
|
||||
import app.organicmaps.leftbutton.LeftToggleButton;
|
||||
import app.organicmaps.universalbuttons.UniversalButton;
|
||||
import app.organicmaps.universalbuttons.UniversalToggleButton;
|
||||
import app.organicmaps.util.Config;
|
||||
import app.organicmaps.util.ThemeUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
@@ -84,11 +81,11 @@ public class MapButtonsController extends Fragment
|
||||
private final Observer<Boolean> mTrackRecorderObserver = (enable) -> {
|
||||
updateMenuBadge(enable);
|
||||
showButton(enable, MapButtons.trackRecordingStatus);
|
||||
updateLeftButtonToggleState(enable);
|
||||
updateUniversalButtonState(enable);
|
||||
};
|
||||
private final Observer<Integer> mTopButtonMarginObserver = this::updateTopButtonsMargin;
|
||||
|
||||
private LeftButton mLeftButton;
|
||||
private UniversalButton mUniversalButton;
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
@@ -156,7 +153,7 @@ public class MapButtonsController extends Fragment
|
||||
private void initBottomButtons()
|
||||
{
|
||||
// universal button
|
||||
applyLeftButton();
|
||||
applyUniversalButton();
|
||||
|
||||
// bookmarks button
|
||||
View bookmarksButton = mFrame.findViewById(R.id.btn_bookmarks);
|
||||
@@ -193,32 +190,32 @@ public class MapButtonsController extends Fragment
|
||||
}
|
||||
}
|
||||
|
||||
private void applyLeftButton()
|
||||
private void applyUniversalButton()
|
||||
{
|
||||
FloatingActionButton leftButtonView = mFrame.findViewById(R.id.left_button);
|
||||
if (leftButtonView != null && mLeftButton != null && !mLeftButton.getCode().equals(DISABLE_BUTTON_CODE))
|
||||
FloatingActionButton universalButtonView = mFrame.findViewById(R.id.universal_button);
|
||||
if (universalButtonView != null && mUniversalButton != null)
|
||||
{
|
||||
UiUtils.show(leftButtonView);
|
||||
UiUtils.show(universalButtonView);
|
||||
|
||||
Context context = getContext();
|
||||
if (context == null)
|
||||
return;
|
||||
|
||||
leftButtonView.setImageTintList(ColorStateList.valueOf(ThemeUtils.getColor(context, R.attr.iconTint)));
|
||||
universalButtonView.setImageTintList(ColorStateList.valueOf(ThemeUtils.getColor(context, R.attr.iconTint)));
|
||||
|
||||
// Christmas tree with help button
|
||||
if (Config.isNY() &&
|
||||
mLeftButton.getCode().equals(BUTTON_HELP_CODE) &&
|
||||
mUniversalButton.getCode().equals("help") &&
|
||||
!TextUtils.isEmpty(Config.getDonateUrl(requireContext()))
|
||||
)
|
||||
{
|
||||
leftButtonView.setImageResource(R.drawable.ic_christmas_tree);
|
||||
leftButtonView.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.help));
|
||||
universalButtonView.setImageResource(R.drawable.ic_christmas_tree);
|
||||
universalButtonView.setOnClickListener((v) -> mMapButtonClickListener.onMapButtonClick(MapButtons.help));
|
||||
}
|
||||
else
|
||||
{
|
||||
mLeftButton.drawIcon(leftButtonView);
|
||||
leftButtonView.setOnClickListener((v) -> mLeftButton.onClick(leftButtonView));
|
||||
mUniversalButton.drawIcon(universalButtonView);
|
||||
universalButtonView.setOnClickListener((v) -> mUniversalButton.onClick(universalButtonView));
|
||||
}
|
||||
// else
|
||||
// {
|
||||
@@ -228,9 +225,9 @@ public class MapButtonsController extends Fragment
|
||||
// if (!ThemeUtils.isNightTheme(requireContext()))
|
||||
// helpButton.getDrawable().setTintList(null);
|
||||
}
|
||||
else if (leftButtonView != null)
|
||||
else if (universalButtonView != null)
|
||||
{
|
||||
UiUtils.hide(leftButtonView);
|
||||
UiUtils.hide(universalButtonView);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -481,8 +478,6 @@ public class MapButtonsController extends Fragment
|
||||
.setAllSides()
|
||||
.build();
|
||||
ViewCompat.setOnApplyWindowInsetsListener(mFrame, insetsListener);
|
||||
// Fixes insets on older Androids and with a search opened via API on all Androids.
|
||||
mFrame.post(() -> ViewCompat.requestApplyInsets(mFrame));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -509,24 +504,24 @@ public class MapButtonsController extends Fragment
|
||||
mSearchWheel.reset();
|
||||
}
|
||||
|
||||
public void setLeftButton(LeftButton leftButton)
|
||||
public void setUniversalButton(UniversalButton universalButton)
|
||||
{
|
||||
this.mLeftButton = leftButton;
|
||||
this.mUniversalButton = universalButton;
|
||||
}
|
||||
|
||||
public void reloadLeftButton(LeftButton leftButton)
|
||||
public void reloadUniversalButton(UniversalButton universalButton)
|
||||
{
|
||||
setLeftButton(leftButton);
|
||||
applyLeftButton();
|
||||
setUniversalButton(universalButton);
|
||||
applyUniversalButton();
|
||||
}
|
||||
|
||||
private void updateLeftButtonToggleState(boolean isEnabled)
|
||||
private void updateUniversalButtonState(boolean isEnabled)
|
||||
{
|
||||
if (mLeftButton instanceof LeftToggleButton)
|
||||
if (mUniversalButton instanceof UniversalToggleButton)
|
||||
{
|
||||
((LeftToggleButton) mLeftButton).setChecked(isEnabled);
|
||||
((UniversalToggleButton) mUniversalButton).setChecked(isEnabled);
|
||||
|
||||
reloadLeftButton(mLeftButton);
|
||||
reloadUniversalButton(mUniversalButton);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
@@ -46,7 +47,6 @@ import app.organicmaps.util.WindowInsetUtils;
|
||||
import app.organicmaps.widget.PlaceholderView;
|
||||
import app.organicmaps.widget.SearchToolbarController;
|
||||
import com.google.android.material.appbar.AppBarLayout;
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
@@ -226,7 +226,7 @@ public class SearchFragment extends BaseMwmFragment
|
||||
private void updateFrames()
|
||||
{
|
||||
final boolean hasQuery = mToolbarController.hasQuery();
|
||||
MaterialToolbar toolbar = mToolbarController.getToolbar();
|
||||
Toolbar toolbar = mToolbarController.getToolbar();
|
||||
AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
|
||||
lp.setScrollFlags(hasQuery ? AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS
|
||||
| AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL : 0);
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package app.organicmaps.settings;
|
||||
|
||||
import static app.organicmaps.leftbutton.LeftButtonsHolder.DISABLE_BUTTON_CODE;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -27,8 +25,8 @@ import app.organicmaps.help.HelpActivity;
|
||||
import app.organicmaps.location.LocationHelper;
|
||||
import app.organicmaps.location.LocationProviderFactory;
|
||||
import app.organicmaps.sdk.routing.RoutingOptions;
|
||||
import app.organicmaps.leftbutton.LeftButton;
|
||||
import app.organicmaps.leftbutton.LeftButtonsHolder;
|
||||
import app.organicmaps.universalbuttons.UniversalButton;
|
||||
import app.organicmaps.universalbuttons.UniversalButtonsHolder;
|
||||
import app.organicmaps.util.Config;
|
||||
import app.organicmaps.util.NetworkPolicy;
|
||||
import app.organicmaps.util.PowerManagment;
|
||||
@@ -41,8 +39,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@@ -77,22 +73,26 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
initSearchPrivacyPrefsCallbacks();
|
||||
initScreenSleepEnabledPrefsCallbacks();
|
||||
initShowOnLockScreenPrefsCallbacks();
|
||||
initLeftButtonPrefs();
|
||||
initUniversalButtonPrefs();
|
||||
}
|
||||
|
||||
private void initLeftButtonPrefs()
|
||||
private void initUniversalButtonPrefs()
|
||||
{
|
||||
final String leftButtonPreferenceKey = getString(R.string.pref_left_button);
|
||||
final ListPreference pref = getPreference(leftButtonPreferenceKey);
|
||||
LeftButtonsHolder holder = LeftButtonsHolder.getInstance(requireContext());
|
||||
final ListPreference pref = getPreference(UniversalButtonsHolder.KEY_PREF_UNIVERSAL_BUTTON);
|
||||
UniversalButtonsHolder holder = UniversalButtonsHolder.getInstance(requireContext());
|
||||
|
||||
LeftButton currentButton = holder.getActiveButton();
|
||||
Collection<LeftButton> buttons = holder.getAllButtons();
|
||||
UniversalButton currentButton = holder.getActiveButton();
|
||||
Collection<UniversalButton> buttons = holder.getAllButtons();
|
||||
|
||||
List<String> entryList = new ArrayList<>(buttons.size());
|
||||
List<String> valueList = new ArrayList<>(buttons.size());
|
||||
List<String> entryList = new ArrayList<>(buttons.size() + 1);
|
||||
List<String> valueList = new ArrayList<>(buttons.size() + 1);
|
||||
|
||||
for (LeftButton button : buttons)
|
||||
String notDisplayId = "not_display";
|
||||
|
||||
entryList.add(requireContext().getString(R.string.pref_universal_button_not_display));
|
||||
valueList.add(notDisplayId);
|
||||
|
||||
for (UniversalButton button : buttons)
|
||||
{
|
||||
entryList.add(button.getPrefsName());
|
||||
valueList.add(button.getCode());
|
||||
@@ -108,8 +108,8 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
}
|
||||
else
|
||||
{
|
||||
pref.setSummary(R.string.pref_left_button_disable);
|
||||
pref.setValue(DISABLE_BUTTON_CODE);
|
||||
pref.setSummary(R.string.pref_universal_button_not_display);
|
||||
pref.setValue(notDisplayId);
|
||||
}
|
||||
|
||||
pref.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
@@ -120,7 +120,7 @@ public class SettingsPrefsFragment extends BaseXmlSettingsFragment implements La
|
||||
}
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.putExtra(leftButtonPreferenceKey, newValue.toString());
|
||||
intent.putExtra(UniversalButtonsHolder.KEY_PREF_UNIVERSAL_BUTTON, newValue.toString());
|
||||
|
||||
requireActivity().setResult(-1, intent);
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package app.organicmaps.universalbuttons;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
public interface UniversalButton
|
||||
{
|
||||
String getCode();
|
||||
|
||||
String getPrefsName();
|
||||
|
||||
void drawIcon(FloatingActionButton imageView);
|
||||
|
||||
void onClick(FloatingActionButton universalButtonView);
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package app.organicmaps.universalbuttons;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.help.HelpActivity;
|
||||
|
||||
public class UniversalButtonsHolder
|
||||
{
|
||||
private static volatile UniversalButtonsHolder instance;
|
||||
|
||||
public static final String KEY_PREF_UNIVERSAL_BUTTON = "universal_button";
|
||||
private static final String BUTTON_HELP_CODE = "help";
|
||||
public static final String BUTTON_SETTINGS_CODE = "settings";
|
||||
public static final String BUTTON_ADD_PLACE_CODE = "add-place";
|
||||
public static final String BUTTON_RECORD_TRACK_CODE = "record-track";
|
||||
private static final String DEFAULT_BUTTON_CODE = BUTTON_HELP_CODE;
|
||||
|
||||
private final Context context;
|
||||
private final SharedPreferences prefs;
|
||||
private final Map<String, UniversalButton> availableButtons = new HashMap<>();
|
||||
|
||||
private UniversalButtonsHolder(Context context)
|
||||
{
|
||||
this.context = context;
|
||||
this.prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||
}
|
||||
|
||||
public void registerButton(UniversalButton button)
|
||||
{
|
||||
availableButtons.put(button.getCode(), button);
|
||||
}
|
||||
|
||||
public void registerDefaultUniversalButtons(Context context)
|
||||
{
|
||||
registerButton(new UniversalButton()
|
||||
{
|
||||
@Override
|
||||
public String getCode()
|
||||
{
|
||||
return BUTTON_HELP_CODE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPrefsName()
|
||||
{
|
||||
return context.getString(R.string.help);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawIcon(FloatingActionButton imageView)
|
||||
{
|
||||
imageView.setImageResource(R.drawable.ic_question_mark);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(FloatingActionButton universalButtonView)
|
||||
{
|
||||
Intent intent = new Intent(context, HelpActivity.class);
|
||||
context.startActivity(intent);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public UniversalButton getActiveButton()
|
||||
{
|
||||
String activeButtonCode = prefs.getString(KEY_PREF_UNIVERSAL_BUTTON, DEFAULT_BUTTON_CODE);
|
||||
if (!TextUtils.isEmpty(activeButtonCode))
|
||||
return availableButtons.get(activeButtonCode);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public Collection<UniversalButton> getAllButtons()
|
||||
{
|
||||
return availableButtons.values();
|
||||
}
|
||||
|
||||
public static UniversalButtonsHolder getInstance(Context context)
|
||||
{
|
||||
UniversalButtonsHolder localInstance = instance;
|
||||
if (localInstance == null)
|
||||
{
|
||||
synchronized (UniversalButtonsHolder.class)
|
||||
{
|
||||
localInstance = instance;
|
||||
if (localInstance == null)
|
||||
{
|
||||
instance = localInstance = new UniversalButtonsHolder(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
return localInstance;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package app.organicmaps.universalbuttons;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
|
||||
public interface UniversalToggleButton extends UniversalButton
|
||||
{
|
||||
void setChecked(boolean checked);
|
||||
}
|
||||
@@ -13,7 +13,7 @@ public final class Constants
|
||||
public static class Url
|
||||
{
|
||||
public static final String SHORT_SHARE_PREFIX = "cm://";
|
||||
public static final String HTTP_SHARE_PREFIX = "https://comaps.at/";
|
||||
public static final String HTTP_SHARE_PREFIX = "https://comaps.app/";
|
||||
|
||||
public static final String MAILTO_SCHEME = "mailto:";
|
||||
public static final String MAIL_SUBJECT = "?subject=";
|
||||
@@ -23,6 +23,7 @@ public final class Constants
|
||||
public static final String MASTODON = "https://floss.social/@comaps";
|
||||
public static final String FB_OM_COMMUNITY_HTTP = "https://www.facebook.com/profile.php?id=61575286559965";
|
||||
public static final String FB_OM_COMMUNITY_NATIVE = "fb://profile/61575286559965";
|
||||
//public static final String TWITTER = "https://twitter.com/user";
|
||||
|
||||
public static final String CODE_REPO = "https://codeberg.org/comaps/comaps";
|
||||
|
||||
|
||||
@@ -84,9 +84,6 @@ public class LocationUtils
|
||||
|
||||
public static boolean isLocationBetterThanLast(@NonNull Location newLocation, @NonNull Location lastLocation)
|
||||
{
|
||||
if (newLocation.getElapsedRealtimeNanos() < lastLocation.getElapsedRealtimeNanos())
|
||||
return false;
|
||||
|
||||
// As described in isAccuracySatisfied, GPS may have zero accuracy "for some reasons".
|
||||
if (isFromGpsProvider(lastLocation) && lastLocation.getAccuracy() == 0.0f)
|
||||
return true;
|
||||
|
||||
@@ -27,6 +27,7 @@ import androidx.annotation.DimenRes;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import androidx.core.graphics.Insets;
|
||||
@@ -36,8 +37,6 @@ import androidx.core.view.WindowInsetsControllerCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import app.organicmaps.MwmApplication;
|
||||
import app.organicmaps.R;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import java.util.Objects;
|
||||
@@ -194,7 +193,7 @@ public final class UiUtils
|
||||
hide(tv);
|
||||
}
|
||||
|
||||
public static void showHomeUpButton(MaterialToolbar toolbar)
|
||||
public static void showHomeUpButton(Toolbar toolbar)
|
||||
{
|
||||
toolbar.setNavigationIcon(ThemeUtils.getResource(toolbar.getContext(), androidx.appcompat.R.attr.homeAsUpIndicator));
|
||||
}
|
||||
@@ -298,7 +297,7 @@ public final class UiUtils
|
||||
systemInsets.right, view.getPaddingBottom());
|
||||
}
|
||||
|
||||
public static void setupNavigationIcon(@NonNull MaterialToolbar toolbar,
|
||||
public static void setupNavigationIcon(@NonNull Toolbar toolbar,
|
||||
@NonNull View.OnClickListener listener)
|
||||
{
|
||||
View customNavigationButton = toolbar.findViewById(R.id.back);
|
||||
@@ -312,14 +311,14 @@ public final class UiUtils
|
||||
}
|
||||
}
|
||||
|
||||
public static void setupHomeUpButtonAsNavigationIcon(@NonNull MaterialToolbar toolbar,
|
||||
public static void setupHomeUpButtonAsNavigationIcon(@NonNull Toolbar toolbar,
|
||||
@NonNull View.OnClickListener listener)
|
||||
{
|
||||
UiUtils.showHomeUpButton(toolbar);
|
||||
toolbar.setNavigationOnClickListener(listener);
|
||||
}
|
||||
|
||||
public static void clearHomeUpButton(@NonNull MaterialToolbar toolbar)
|
||||
public static void clearHomeUpButton(@NonNull Toolbar toolbar)
|
||||
{
|
||||
toolbar.setNavigationIcon(null);
|
||||
toolbar.setNavigationOnClickListener(null);
|
||||
|
||||
@@ -3,15 +3,14 @@ package app.organicmaps.util.bottomsheet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.imageview.ShapeableImageView;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.location.TrackRecorder;
|
||||
import app.organicmaps.util.Config;
|
||||
@@ -50,7 +49,7 @@ public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder>
|
||||
public void onBindViewHolder(ViewHolder viewHolder, final int position)
|
||||
{
|
||||
final MenuBottomSheetItem item = dataSet.get(position);
|
||||
final ShapeableImageView iv = viewHolder.getIconImageView();
|
||||
final ImageView iv = viewHolder.getIconImageView();
|
||||
if (item.iconRes == R.drawable.ic_donate && Config.isNY())
|
||||
{
|
||||
iv.setImageResource(R.drawable.ic_christmas_tree);
|
||||
@@ -60,7 +59,7 @@ public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder>
|
||||
iv.setImageResource(item.iconRes);
|
||||
viewHolder.getContainer().setOnClickListener((v) -> onMenuItemClick(item));
|
||||
viewHolder.getTitleTextView().setText(item.titleRes);
|
||||
MaterialTextView badge = viewHolder.getBadgeTextView();
|
||||
TextView badge = viewHolder.getBadgeTextView();
|
||||
if (item.badgeCount > 0)
|
||||
{
|
||||
badge.setText(String.valueOf(item.badgeCount));
|
||||
@@ -88,9 +87,9 @@ public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder>
|
||||
public static class ViewHolder extends RecyclerView.ViewHolder
|
||||
{
|
||||
private final LinearLayout container;
|
||||
private final ShapeableImageView iconImageView;
|
||||
private final MaterialTextView titleTextView;
|
||||
private final MaterialTextView badgeTextView;
|
||||
private final ImageView iconImageView;
|
||||
private final TextView titleTextView;
|
||||
private final TextView badgeTextView;
|
||||
|
||||
public ViewHolder(View view)
|
||||
{
|
||||
@@ -101,17 +100,17 @@ public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.ViewHolder>
|
||||
badgeTextView = view.findViewById(R.id.bottom_sheet_menu_item_badge);
|
||||
}
|
||||
|
||||
public ShapeableImageView getIconImageView()
|
||||
public ImageView getIconImageView()
|
||||
{
|
||||
return iconImageView;
|
||||
}
|
||||
|
||||
public MaterialTextView getTitleTextView()
|
||||
public TextView getTitleTextView()
|
||||
{
|
||||
return titleTextView;
|
||||
}
|
||||
|
||||
public MaterialTextView getBadgeTextView()
|
||||
public TextView getBadgeTextView()
|
||||
{
|
||||
return badgeTextView;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.Window;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -19,7 +20,6 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Objects;
|
||||
@@ -93,7 +93,7 @@ public class MenuBottomSheetFragment extends BottomSheetDialogFragment
|
||||
{
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
attachToNearestContext();
|
||||
MaterialTextView titleView = view.findViewById(R.id.bottomSheetTitle);
|
||||
TextView titleView = view.findViewById(R.id.bottomSheetTitle);
|
||||
RecyclerView recyclerView = view.findViewById(R.id.bottomSheetMenuContainer);
|
||||
if (getArguments() != null)
|
||||
{
|
||||
|
||||
@@ -9,10 +9,8 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
|
||||
import app.organicmaps.R;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.Utils;
|
||||
@@ -23,7 +21,7 @@ public class ToolbarController
|
||||
@Nullable
|
||||
private Activity mActivity;
|
||||
@NonNull
|
||||
private final MaterialToolbar mToolbar;
|
||||
private final Toolbar mToolbar;
|
||||
@NonNull
|
||||
protected final View.OnClickListener mNavigationClickListener = view -> onUpClick();
|
||||
|
||||
@@ -41,7 +39,7 @@ public class ToolbarController
|
||||
setSupportActionBar(activity, mToolbar);
|
||||
}
|
||||
|
||||
private void setSupportActionBar(@NonNull Activity activity, @NonNull MaterialToolbar toolbar)
|
||||
private void setSupportActionBar(@NonNull Activity activity, @NonNull Toolbar toolbar)
|
||||
{
|
||||
AppCompatActivity appCompatActivity = (AppCompatActivity) activity;
|
||||
appCompatActivity.setSupportActionBar(toolbar);
|
||||
@@ -88,7 +86,7 @@ public class ToolbarController
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public MaterialToolbar getToolbar()
|
||||
public Toolbar getToolbar()
|
||||
{
|
||||
return mToolbar;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
@@ -32,8 +33,6 @@ import app.organicmaps.util.Graphics;
|
||||
import app.organicmaps.util.InputUtils;
|
||||
import app.organicmaps.util.UiUtils;
|
||||
import app.organicmaps.util.WindowInsetUtils.PaddingInsetsListener;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
@@ -204,7 +203,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
|
||||
|
||||
private void initToolbar(View view)
|
||||
{
|
||||
MaterialToolbar toolbar = view.findViewById(R.id.toolbar);
|
||||
Toolbar toolbar = view.findViewById(R.id.toolbar);
|
||||
|
||||
ViewCompat.setOnApplyWindowInsetsListener(toolbar, PaddingInsetsListener.excludeBottom());
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.IdRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
@@ -51,8 +52,6 @@ import app.organicmaps.widget.placepage.sections.PlacePageOpeningHoursFragment;
|
||||
import app.organicmaps.widget.placepage.sections.PlacePagePhoneFragment;
|
||||
import app.organicmaps.widget.placepage.sections.PlacePageProductsFragment;
|
||||
import app.organicmaps.widget.placepage.sections.PlacePageWikipediaFragment;
|
||||
|
||||
import com.google.android.material.appbar.MaterialToolbar;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -87,7 +86,7 @@ public class PlacePageView extends Fragment implements View.OnClickListener,
|
||||
private View mFrame;
|
||||
// Preview.
|
||||
private ViewGroup mPreview;
|
||||
private MaterialToolbar mToolbar;
|
||||
private Toolbar mToolbar;
|
||||
private TextView mTvTitle;
|
||||
private TextView mTvSecondaryTitle;
|
||||
private TextView mTvSubtitle;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:viewportHeight="80">
|
||||
<path
|
||||
android:pathData="m4.858,10.076c0,-5.523 4.477,-10 10,-10h60c5.523,0 10,4.477 10,10v60c0,5.523 -4.477,10 -10,10h-60c-5.523,0 -10,-4.477 -10,-10z"
|
||||
android:fillColor="@color/active_track_recording"
|
||||
android:fillColor="#0057ff"
|
||||
android:fillAlpha="0.78" />
|
||||
<path
|
||||
android:pathData="m78.907,32.87 l-31.833,13.318 13.335,5.772 6.188,13.147z"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="?attr/menuBackground"/>
|
||||
<solid android:color="#FFFFFF"/>
|
||||
<corners android:radius="10dp"/>
|
||||
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
|
||||
</shape>
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners android:radius="12dp" />
|
||||
<solid android:color="@color/active_track_recording" />
|
||||
<solid android:color="#0057ff" />
|
||||
</shape>
|
||||
@@ -52,15 +52,5 @@
|
||||
android:layout_marginTop="@dimen/margin_direction_mid"
|
||||
android:textSize="@dimen/text_direction_dist"
|
||||
tools:text="9000 km"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv__azimuth"
|
||||
style="@style/MwmWidget.TextView.Direction"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_direction_small"
|
||||
android:gravity="center_horizontal"
|
||||
android:textSize="@dimen/text_direction_subtitle"
|
||||
tools:text="123.4°" />
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/margin_base">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -47,7 +47,7 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/imageView"
|
||||
android:layout_width="@dimen/osm_logo"
|
||||
android:layout_height="@dimen/osm_logo"
|
||||
@@ -56,7 +56,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/osm_presentation"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -108,7 +108,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_base">
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/login"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
@@ -123,7 +123,7 @@
|
||||
android:elevation="@dimen/design_fab_elevation"
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/lost_password"
|
||||
style="@style/MwmWidget.Button"
|
||||
android:layout_width="match_parent"
|
||||
@@ -138,14 +138,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_base"
|
||||
android:layout_marginBottom="@dimen/margin_base" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@string/robotoRegular"
|
||||
android:text="@string/no_osm_account"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body2"
|
||||
android:textColor="?android:textColorPrimary" />
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/register"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false">
|
||||
<include
|
||||
android:id="@+id/left_button"
|
||||
android:id="@+id/universal_button"
|
||||
layout="@layout/map_buttons_help"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -25,7 +25,7 @@
|
||||
android:layout_marginStart="@dimen/margin_base_plus"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_goneMarginStart="@dimen/margin_half_plus"
|
||||
app:layout_constraintStart_toEndOf="@+id/left_button" />
|
||||
app:layout_constraintStart_toEndOf="@+id/universal_button" />
|
||||
<include
|
||||
android:id="@+id/btn_bookmarks"
|
||||
layout="@layout/map_buttons_bookmarks_square"
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<merge
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<LinearLayout
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<Button
|
||||
android:id="@+id/accept_btn"
|
||||
style="@style/MwmWidget.Button.Primary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/accept"/>
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/sharing_options_img_size">
|
||||
<TextView
|
||||
android:id="@+id/decline_btn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:fontFamily="@string/robotoMedium"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="0.01"
|
||||
android:textAllCaps="true"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:textSize="@dimen/text_size_body_3"
|
||||
android:textStyle="normal"
|
||||
android:text="@string/learn_more"
|
||||
tools:ignore="UnusedAttribute"
|
||||
tools:text="NOT NOW" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</merge>
|
||||
@@ -8,7 +8,7 @@
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="32dp"
|
||||
@@ -22,7 +22,7 @@
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
@@ -31,7 +31,7 @@
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/car_used_on_the_car_screen"
|
||||
@@ -39,7 +39,7 @@
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/btn_continue"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="32dp"
|
||||
app:srcCompat="@drawable/ic_location_permission_request" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="32dp"
|
||||
@@ -23,7 +23,7 @@
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline4"
|
||||
android:textStyle="bold" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/btn_grant_permissions"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/bottomSheetTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="4dp"
|
||||
android:layout_marginTop="@dimen/margin_quarter"
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
android:background="?clickableBackground"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/bottom_sheet_menu_item_icon"
|
||||
android:layout_width="@dimen/bookmark_icon_size"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
tools:src="@drawable/ic_menu_download"
|
||||
app:tint="?android:textColorSecondary"/>
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/bottom_sheet_menu_item_text"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body1"
|
||||
android:layout_width="0dp"
|
||||
@@ -29,7 +29,7 @@
|
||||
android:gravity="center_vertical"
|
||||
android:singleLine="true"
|
||||
tools:text="Menu Item" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/bottom_sheet_menu_item_badge"
|
||||
style="@style/MwmWidget.Counter"
|
||||
android:layout_gravity="end|center_vertical"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:background="?cardBackground"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -15,7 +15,7 @@
|
||||
android:gravity="end|center_vertical"
|
||||
android:theme="@style/MwmWidget.ToolbarTheme"
|
||||
tools:ignore="UnusedAttribute">
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
<LinearLayout
|
||||
android:layout_marginTop="@dimen/margin_half_double_plus"
|
||||
android:orientation="horizontal"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?windowBackgroundForced">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -22,7 +22,7 @@
|
||||
android:layout_gravity="end|center_vertical"
|
||||
android:scaleType="centerInside"
|
||||
android:contentDescription="@string/save" />
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
<FrameLayout
|
||||
style="@style/MwmWidget.FrameLayout.Elevation"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -228,9 +228,7 @@
|
||||
android:id="@+id/block_email"
|
||||
layout="@layout/item_editor_input"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/block_level"
|
||||
layout="@layout/item_editor_input"/>
|
||||
<!-- ToDo: Level is missing compared with iOS. -->
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/block_wifi"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/fragment_container"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/margin_base"
|
||||
tools:ignore="ScrollViewSize">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -39,7 +39,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_base">
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/osm_logo"
|
||||
android:layout_width="@dimen/osm_logo"
|
||||
android:layout_height="@dimen/osm_logo"
|
||||
@@ -48,7 +48,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/osm_presentation"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -92,7 +92,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="@dimen/margin_base">
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/login"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
@@ -107,7 +107,7 @@
|
||||
android:elevation="@dimen/design_fab_elevation"
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/lost_password"
|
||||
style="@style/MwmWidget.Button"
|
||||
android:layout_width="wrap_content"
|
||||
@@ -122,14 +122,14 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/margin_base"
|
||||
android:layout_marginBottom="@dimen/margin_base" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="@string/robotoRegular"
|
||||
android:text="@string/no_osm_account"
|
||||
android:textAppearance="@style/MwmTextAppearance.Body2"
|
||||
android:textColor="?android:textColorPrimary" />
|
||||
<com.google.android.material.button.MaterialButton
|
||||
<Button
|
||||
android:id="@+id/register"
|
||||
style="@style/MwmWidget.Button.Accent"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -15,7 +15,7 @@
|
||||
android:gravity="end|center_vertical"
|
||||
android:theme="@style/MwmWidget.ToolbarTheme"
|
||||
tools:ignore="UnusedAttribute">
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/logout"
|
||||
android:layout_width="?actionBarSize"
|
||||
android:layout_height="?actionBarSize"
|
||||
@@ -24,7 +24,7 @@
|
||||
android:scaleType="center"
|
||||
app:srcCompat="@drawable/ic_logout"
|
||||
android:contentDescription="@string/logout" />
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -44,7 +44,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:orientation="horizontal">
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
<ImageView
|
||||
android:id="@+id/user_profile_image"
|
||||
android:layout_width="100dp"
|
||||
android:layout_height="match_parent"
|
||||
@@ -57,7 +57,7 @@
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/user_profile_name"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -68,7 +68,7 @@
|
||||
android:autoSizeTextType="uniform"
|
||||
android:textSize="25sp"
|
||||
tools:text="Long Username" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/user_sent_edits"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -76,7 +76,7 @@
|
||||
android:textSize="35sp"
|
||||
android:textStyle="bold"
|
||||
tools:text="2,000,000" />
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<androidx.appcompat.widget.AppCompatTextView
|
||||
android:id="@+id/verified_changes_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
@@ -93,7 +93,7 @@
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/osm_history"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -110,7 +110,7 @@
|
||||
android:textColor="?colorAccent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/osm_notes"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -126,7 +126,7 @@
|
||||
android:textColor="?colorAccent"
|
||||
app:layout_constraintTop_toBottomOf="@id/osm_history" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
<TextView
|
||||
android:id="@+id/about_osm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -18,7 +18,7 @@
|
||||
android:id="@+id/save"
|
||||
style="@style/MwmWidget.Downloader.ToolbarButton"
|
||||
android:text="@string/editor_report_problem_send_button"/>
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scrollView"
|
||||
|
||||
@@ -9,10 +9,9 @@
|
||||
<CheckBox
|
||||
android:id="@+id/checkbox"
|
||||
android:layout_width="@dimen/margin_double_plus"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignBottom="@id/bottom_line_container"
|
||||
android:layout_marginStart="@dimen/margin_quarter"
|
||||
android:background="@null"
|
||||
android:button="@drawable/button_visibility_centre_inset"
|
||||
android:buttonTint="?accentColorSelector" />
|
||||
@@ -33,7 +32,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/name"
|
||||
android:layout_alignStart="@id/name"
|
||||
android:paddingBottom="@dimen/margin_half_plus"
|
||||
android:layout_marginBottom="@dimen/margin_half_plus"
|
||||
android:layout_toStartOf="@id/more"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
@@ -49,11 +48,9 @@
|
||||
<ImageView
|
||||
android:id="@+id/more"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_alignBottom="@id/bottom_line_container"
|
||||
android:background="?selectableItemBackgroundBorderless"
|
||||
android:importantForAccessibility="no"
|
||||
android:paddingHorizontal="@dimen/margin_half"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
android:clipChildren="false"
|
||||
android:clipToPadding="false">
|
||||
<include
|
||||
android:id="@+id/left_button"
|
||||
android:id="@+id/universal_button"
|
||||
layout="@layout/map_buttons_help"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -32,7 +32,7 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@+id/btn_bookmarks"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/left_button" />
|
||||
app:layout_constraintStart_toEndOf="@+id/universal_button" />
|
||||
<include
|
||||
android:id="@+id/btn_bookmarks"
|
||||
layout="@layout/map_buttons_bookmarks_square"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
android:clipChildren="false"
|
||||
android:layout_gravity="center"
|
||||
android:gravity="center_horizontal"
|
||||
android:backgroundTint="?menuBackground"
|
||||
android:background="@drawable/onmap_downloader_background"
|
||||
tools:ignore="UselessParent">
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar_point_chooser"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<FrameLayout android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:theme="@style/MwmWidget.ToolbarTheme"
|
||||
@@ -131,7 +131,7 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
</FrameLayout>
|
||||
<FrameLayout
|
||||
android:id="@+id/driving_options_btn_container"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle.NoElevation"
|
||||
@@ -11,4 +11,4 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"/>
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle"
|
||||
@@ -13,4 +13,4 @@
|
||||
android:orientation="vertical">
|
||||
<include layout="@layout/toolbar_search_controls" />
|
||||
</LinearLayout>
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/toolbar"
|
||||
style="@style/MwmWidget.ToolbarStyle.NoElevation"
|
||||
@@ -12,4 +12,4 @@
|
||||
android:orientation="vertical">
|
||||
<include layout="@layout/toolbar_search_controls" />
|
||||
</LinearLayout>
|
||||
</com.google.android.material.appbar.MaterialToolbar>
|
||||
</androidx.appcompat.widget.Toolbar>
|
||||
|
||||
@@ -484,6 +484,7 @@
|
||||
<string name="download_over_mobile_header">Laai af oor ’n mobieledataverbinding?</string>
|
||||
<string name="download_over_mobile_message">Dit kan behoorlik duur wees met sommige planne of indien dooldata aktief is.</string>
|
||||
<string name="error_enter_correct_house_number">Voer ’n geldige gebounommer in</string>
|
||||
<string name="editor_storey_number">Aantal verdiepings (maksimum van %d)</string>
|
||||
<!-- Error message in Editor when a user tries to set the number of floors for a building higher than %d floors -->
|
||||
<string name="error_enter_correct_storey_number">Die aantal verdiepings mag nie %d oorskry nie</string>
|
||||
<string name="editor_zip_code">Poskode</string>
|
||||
|
||||
@@ -510,6 +510,7 @@
|
||||
<string name="download_over_mobile_header">تنزيل باستخدام بيانات الجوال؟</string>
|
||||
<string name="download_over_mobile_message">قد يكون هذا مكلفاً جداً في بعض الاحيان أو عند التجوال.</string>
|
||||
<string name="error_enter_correct_house_number">أدخل رقم بناء صحيح</string>
|
||||
<string name="editor_storey_number">عدد الطوابق (بحد أقصى %d)</string>
|
||||
<!-- Error message in Editor when a user tries to set the number of floors for a building higher than %d floors -->
|
||||
<string name="error_enter_correct_storey_number">يجب ألا يتجاوز عدد طوابق المبنى %d</string>
|
||||
<string name="editor_zip_code">الرمز البريدي</string>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<string name="type.amenity.charging_station">محطة شحن</string>
|
||||
<string name="type.amenity.charging_station.bicycle">محطة شحن الدراجات</string>
|
||||
<string name="type.amenity.charging_station.motorcar">محطة شحن السيارات</string>
|
||||
<string name="type.amenity.childcare">حضّانة</string>
|
||||
<string name="type.amenity.childcare">حضانة</string>
|
||||
<string name="type.amenity.cinema">سينما</string>
|
||||
<string name="type.leisure.bowling_alley">صالة بولينج</string>
|
||||
<string name="type.amenity.clinic">عيادة</string>
|
||||
@@ -62,7 +62,7 @@
|
||||
<string name="type.amenity.exhibition_centre">مركز المعرض</string>
|
||||
<string name="type.amenity.money_transfer">تحويل المال</string>
|
||||
<string name="type.amenity.music_school">مدرسة موسيقى</string>
|
||||
<string name="type.amenity.language_school">مدرسة لغات</string>
|
||||
<string name="type.amenity.language_school">مدرسة لغة</string>
|
||||
<string name="type.office.diplomatic">سفارة</string>
|
||||
<string name="type.amenity.fast_food">وجبات سريعة</string>
|
||||
<string name="type.amenity.ferry_terminal">محطة عبّارات</string>
|
||||
@@ -1278,7 +1278,4 @@
|
||||
<string name="type.amenity.dojo">دوجو</string>
|
||||
<!-- https://wiki.openstreetmap.org/wiki/Tag:leisure=sports_hall -->
|
||||
<string name="type.leisure.sports_hall">الصالة الرياضية</string>
|
||||
<string name="type.aerialway.mixed_lift">رفع مختلط</string>
|
||||
<string name="type.amenity.love_hotel">فندق جب</string>
|
||||
<string name="type.amenity.studio">معرض</string>
|
||||
</resources>
|
||||
|
||||
@@ -499,6 +499,7 @@
|
||||
<string name="download_over_mobile_header">Mobil şəbəkə vasitəsilə endirilsin?</string>
|
||||
<string name="download_over_mobile_message">Bəzi planlarda və ya rouminqlə bu olduqca bahalı hesab oluna bilərr.</string>
|
||||
<string name="error_enter_correct_house_number">Etibarlı bina nömrəsini daxil edin</string>
|
||||
<string name="editor_storey_number">Mərtəbə sayı (maks. %d)</string>
|
||||
<!-- Error message in Editor when a user tries to set the number of floors for a building higher than %d floors -->
|
||||
<string name="error_enter_correct_storey_number">Mərtəbələrin sayı %d-dən çox olmamalıdır</string>
|
||||
<string name="editor_zip_code">Poçt kodu</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user