diff --git a/OsmAnd-telegram/res/values-is/strings.xml b/OsmAnd-telegram/res/values-is/strings.xml index a915a2e4f4..5a10a5d775 100644 --- a/OsmAnd-telegram/res/values-is/strings.xml +++ b/OsmAnd-telegram/res/values-is/strings.xml @@ -155,7 +155,7 @@ Síðar Stefna Hraðaeining - Landakort + Kort Sía: Engin skráning punkta fyrir neðan valinn hraða í %1$s Leit: Hópur eða tengiliður diff --git a/OsmAnd/res/layout/settings_group_title.xml b/OsmAnd/res/layout/settings_group_title.xml index 269d018021..32629ed2de 100644 --- a/OsmAnd/res/layout/settings_group_title.xml +++ b/OsmAnd/res/layout/settings_group_title.xml @@ -6,56 +6,50 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - + android:ellipsize="end" + android:letterSpacing="@dimen/text_button_letter_spacing" + android:minHeight="@dimen/default_title_line_height" + android:textColor="?android:textColorPrimary" + android:textSize="@dimen/default_list_text_size" + app:lineHeight="@dimen/default_title_line_height" + app:typeface="@string/font_roboto_medium" + tools:text="Some title" /> - - - - - + - + Langs gaden Overdækket parkering LNG + Sirene + Sygeplejerske \ No newline at end of file diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml index 950388e493..9d1ba89f5a 100644 --- a/OsmAnd/res/values-de/phrases.xml +++ b/OsmAnd/res/values-de/phrases.xml @@ -3883,4 +3883,7 @@ Verbindungsbüro Konsulat Botschaft + Sirene + Krankenpfleger/in + Mobiler Geldvermittler \ No newline at end of file diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml index 30855ccc5b..cdb42f90dd 100644 --- a/OsmAnd/res/values-es-rAR/phrases.xml +++ b/OsmAnd/res/values-es-rAR/phrases.xml @@ -3887,4 +3887,7 @@ Enlace Consulado Embajada + Sirena + Enfermera + Agente de dinero móvil \ No newline at end of file diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index 726efe646c..5385b21b40 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3872,4 +3872,7 @@ Összekötő iroda Külképviselet Konzulátus + Ápoló + Sziréna + Mobilpénzfizetési iroda \ No newline at end of file diff --git a/OsmAnd/res/values-is/phrases.xml b/OsmAnd/res/values-is/phrases.xml index 9a88f1bc7c..3f8253cf35 100644 --- a/OsmAnd/res/values-is/phrases.xml +++ b/OsmAnd/res/values-is/phrases.xml @@ -3835,4 +3835,37 @@ Á þaki GPX-punktur Radarturn + Farsímagreiðsluþjónusta + Sendiráð + Nei + Hjúkrunarfræðingur + Vegabréfsáritun fyrir innflytjendur + Aðsetur + Undirþjóðlegt + Sírena + Sendinefnd + Tengifulltrúi + Tenging + + Skrifstofa + Ræðismaður + Ræðismannsskrifstofa + Sendinefnd Vatíkansins (nunciature) + Heiðursræðismaður + Borgaraþjónustur + Vegabréfsáritun fyrir ekki-innflytjendur + Nei + Umboðsskrifstofa + Sendiherra í forsvari + + Hagsmunadeild + + Sendifulltrúi + Sendiráð + Sendinefnd + Nei + Ræðismaður í forsvari + Ræðismannastofnun + Útibú + Ræðisskrifstofa \ No newline at end of file diff --git a/OsmAnd/res/values-is/strings.xml b/OsmAnd/res/values-is/strings.xml index 8af3d89837..b0f780c060 100644 --- a/OsmAnd/res/values-is/strings.xml +++ b/OsmAnd/res/values-is/strings.xml @@ -52,7 +52,7 @@ Færa ↓ Samnýtt minni Endurreikna leið - Gjafir + Styrkir Gerast áskrifandi Virkt Óvirkt @@ -131,7 +131,7 @@ Grænt Ljósblátt Blátt - Fjólublátt + Purpurablátt Bleikt Brúnt Ljóst @@ -229,7 +229,7 @@ Ekki sýna aftur Muna valið Endurnýja - Hlaða niður + Sækja Sæki… Aðgerð {0} Loka @@ -238,7 +238,7 @@ Sýna allt Fella saman Birta á korti - Landakort + Kort Eftirlæti Eftirlæti Heimilisfang @@ -293,8 +293,8 @@ Allt Ferilpunktar Fletta korti - Bíll - Reiðhjól + Akandi + Hjólandi Fótgangandi Halda Svahílí @@ -519,7 +519,7 @@ Á síðustu metrunum Sendi inn… Norður-Ameríka - Mið-Ameríka + MIð-Ameríka Suður-Ameríka Evrópa Rússland @@ -553,7 +553,7 @@ Útgefið Virkja Gera óvirkt - Aftengt + Afvirkjað Ný leit Tungumálið er ekki stutt Kerfi @@ -649,7 +649,7 @@ bæta við breyta eyða - Opna + Opið Athugasemd Enduropna Senda @@ -858,7 +858,7 @@ Grunnkort af heiminum Rennur út (mínútur): %1$s Rennur út (mínútur) - Slóð (URL) + Slóð Byrja nýjan undirferil Deild staðsetning Flákar @@ -968,7 +968,7 @@ Birta leið Hefja leiðsögn Stilltu fyrst áfangastað - Leiðir + Leiðarlýsingar Opnunartímar Hleð inn götum/byggingum… Hleð inn póstnúmerum… @@ -1023,7 +1023,7 @@ Settu heiti lands Skoðun korts Tæknilegar greinar - Kortaskýring + Skýringar á korti Stjórnborð eða valmyndastýring Einungis hlaða niður yfir WiFi-net OsmAnd hefur ekki heimildir til að nota SD-kortið @@ -1165,7 +1165,7 @@ Notandanafn og lykilorð á OSM Kortamerki Kortamerki - Náð í kort + Búið að ná í kort geo: Skráning ferðar Hæðarlínur @@ -1622,7 +1622,7 @@ Stefna korts miðað við skjá: Innflutningur eftirlæta tókst Vista gögn sem GPX-skrá eða flytja ferilpunkta inn í eftirlæti? - biðstöðvar + stoppmerki Næsta ferðaáætlun Fyrri ferðaáætlun Veldu biðstöð þar sem farið er út @@ -1856,13 +1856,13 @@ Jafnvægi Velja frekar hjáleiðir Kjörið landslag: slétt eða hæðótt. - Brekka + Halli Bæta við nýrri möppu Punkti/punktum eytt. Ertu viss um að þú viljir eyða %1$d punkt(i/um) \? Vegpunktar, merkisstaðir, nefnd fyrirbæri Ferill - Mesti hraði + Hámarkshraði Meðalhraði Tími á ferð Tímarammi @@ -2055,7 +2055,7 @@ Keyra forritið í öryggisham (notar hægvirkari Android-kóða í stað þess innbyggða). Bæta við ljósmyndum Byrja leit aftur - Auka radíus leitar + Stækka radíus leitar Ekkert fannst Birta/fela OSM-minnispunkta Birta OSM-minnispunkta @@ -2116,7 +2116,7 @@ Gat ekki flutt skrána inn. Vinsamlegast athugið hvort OsmAnd hafi réttindi til að lesa skrána þar sem hún er. Opna Mapillary Mapillary græja - Mapillary götumyndir + Mapillary Mapillary-mynd Mælistika út frá miðju hrings Heimildir @@ -2125,7 +2125,7 @@ Fela frá og með aðdráttarstigi Endurnýja Endurlesa kortaflísar til að sjá uppfærð gögn. - Tiglaskyndiminni + Kortaflísaskyndiminni Rangt notandanafn Til Frá @@ -2180,7 +2180,7 @@ Eftir gerð Leita að ferlum með ferilpunktum Meira - Framsetning á korti + Framsetning á kortinu Ferilpunktar í ferli Flokkur eftirlæta Bæta við hópi @@ -2685,7 +2685,7 @@ Fljótasiglingar Hreinsa út alla milliáfanga Þú getur bætt við öllum punktum ferilsins, eða valið aðskilda flokka. - Alls + Samtals Ekkert fannst: Punktar fjarlægðir úr kortamerkjum Ferðalög @@ -2784,7 +2784,7 @@ Bæta við punkti Vista sem feril Þú bættir við %1$s punktum. Settu inn heitið á skránni og vistaðu. - Veröld + Heimurinn Punkti %1$s eytt "• Leiðsögn: Framvindustika lagfærð, hraðari víxl á upphafi og enda leiða \n @@ -3438,7 +3438,7 @@ OSM-minnispunktarnir þínir eru í %1$s. Minnispunktar myndskeiða Minnispunktar ljósmynda - Auglýsing + Tilkynna Notandanafn og lykilorð Táknmynd birtist við hvíld. Athugaðu og deildu nákvæmum atvikaskrám úr forritinu @@ -3452,7 +3452,7 @@ Tilkynning Lágmarkshraði Lágmarksnákvæmni - Minnsta hreyfing + Lágmarkshreyfing Frumstilla stillingar viðbótar á sjálfgefin gildi Uppskipting upptöku Nota kerfisforrit @@ -3877,7 +3877,7 @@ Skrá leið í feril Velja annan feril Skrifa feril sjálfkrafa í GPX-skrá á meðan leiðsögn stendur - Nýjungar + Hvað er nýtt Einfaldaður ferill Aðeins leiðarlínan verður vistuð, ferilpunktunum verður eytt. Skráarheiti @@ -3905,10 +3905,10 @@ Tveggja-þátta leiðagerð fyrir bílaleiðsögn. Innbyggð þróun almenningssamgangna Skipta yfir í Java (öruggt) útreikning fyrir almenningssamgöngur - Framkvæma OAuth-innskráningu til að nota osmedit-eiginleika + Skrá inn með OAuth til að nota osmedit-eiginleika Skrá inn í gegnum OAuth Hreinsa OAuth-teikn OpenStreetMap - Útskráning tókst + Skráð út %s GPX-skrár valdar Mun setja GPX-skráningu í bið þegar forritið er drepið (slökkt á því í gegnum skjáinn fyrir nýleg forrit - bakgrunnsvísir OsmAnd hverfur þar með úr tilkynningastiku Android-kerfisins.) Veldu millibil skráninga í almenna leiðarskráningu (virkjað með viðmótshlutanum \'Skráning ferðar\' á kortinu). @@ -3960,7 +3960,7 @@ Það er vandamál með áskriftina þína. Smelltu á hnappinn til að fara í stillingar Google Play áskriftarinnar og laga þar greiðslumátann. Nota notandanafn og lykilorð Skrá inn á OpenStreetMap - Innskrá + Skrá inn Settu inn merki aðskilin með kommu. Senda GPX-skrá til OpenStreetMap Áskrift að OsmAnd Live er útrunnin @@ -3991,4 +3991,26 @@ Ljósmyndir eru í boði frá opna gagnaverkefninu OpenPlaceReviews.org. Til að geta sent inn myndir þarftu að skrá þig á vefsvæðinu. Gera athugasemd við OSM-minnispunkt \"Rekjanlegt\" þýðir að ferillinn birtist ekki á neinum opinberum listum, en meðhöndlaðir ferilpunktar með tímamerkjum úr ferlinum (sem ekki er hægt að tengja beint við þig) munu birtast í gögnum sem eru sótt í gegnum opinbert GPS API-forritsviðmót. + Þú getur notað hæðargögn til útreikninga á hækkun/lækkun í ferðunum þínum + OsmAnd birtir ljósmyndir frá ýmsum þjónustum: +\nOpenPlaceReviews - ljósmyndir POI-merkisstaða; +\nMapillary - myndefni í götuhæð; +\nWeb / Wikimedia - ljósmyndir POI-merkisstaða sem eru í gögnum OpenStreetMap. + Skiptu yfir í að nota dev.openstreetmap.org í staðinn fyrir openstreetmap.org til að prófa innsendingu OSM-minnispunkta / POI-merkisstaða / GPX-ferla. + Þýska (dagleg) + Nota dev.openstreetmap.org + Létt flugfar + Bæta í Mapillary + Ekki er nægilegt pláss + Tækið þitt er aðeins með %1$s laust. Losaðu um eitthvað minni eða afveldu atriði sem á að flytja út. + Bæta í OpenPlaceReviews + Nauðsynlegt fyrir innflutning + Veldu atriði sem á að flytja inn. + Veldu hópa sem á að flytja inn. + Áætluð skráarstærð + Tilföng + %1$s * %2$s + Veldu þau gögn sem á að flytja út í skrána. + Veldu mynd + Mistókst að senda inn mynd, reyndu aftur síðar \ No newline at end of file diff --git a/OsmAnd/res/values-it/phrases.xml b/OsmAnd/res/values-it/phrases.xml index ea5752b771..0c9125eda0 100644 --- a/OsmAnd/res/values-it/phrases.xml +++ b/OsmAnd/res/values-it/phrases.xml @@ -2311,7 +2311,7 @@ Tartan Tipo Checkpoint Ciotole - Accesso all\'acqua + Accesso al luogo dell\'acqua Villaggio turistico Terreno ricreativo Ciambella @@ -2820,4 +2820,176 @@ Berillio Negozio all\'ingrosso Accesso PSV: riservato + Civiltà: etrusca (XII - VI sec. a.C.) + Civiltà: nuragica (XVIII sec. a.C. - II sec. d.C.) + Civiltà: antica romana (753 a.C. - 284 d.C.) + Tipo: colombario + Tipo: caveau + Descrizione per non udenti + Prodotto: carbone + Prodotto: pelle + Prodotto: calce viva + Forno + Musica da camera + Burattino + Musical + Malati + Svantaggiati + Giovanile + Assistenza diurna + Officina + Assistenza ambulatoriale + Rifugiati: no + Servizi per i rifugiati + Tende massime + Improvviso: no + Improvviso: sì + Tipo di castello: castrum + Tipo di castello: difensivo, maestoso + Tipo di castello: cremlino + Tipo di castello: signorile + Pelliccia + Sorveglianza: interna + Allevamento: pollame + Coltivazione: luppolo + Coltivazione: orzo + Coltivazione: cereali + Coltivazione: mais + Ufficio editoriale + Ufficio cooperativo + Ufficio di consulenza + Ufficio della guida + Ufficio del campeggio + Monumento tecnico + Tipo: porto + Formazione: lingua + Binario leggero + Condividi il taxi + Tipo di ponte mobile: retrattile + Tipo di ponte mobile: trasportatore + Tipo di ponte mobile: sommergibile + Tipo di ponte mobile: ponte levatoio + Tipo di ponte mobile: basculante + Tipo di ponte: mobile + Struttura del ponte: trave + Ponte fluviale + Galleria ferroviaria + Galleria stradale + Architettura: postcostruttivismo + Architettura: oldrussian + Architettura: art nouveau + Architettura: umgebinde + Tipo di accesso a Internet: servizio + Cablata + Tipo di riparo: abbandonato + Tipo di riparo: tenda + Rifugio da campo + Riparo dal sole + Riparo in roccia + Capanna di base + Capannone + Palma + Ghiaia + Fango + Marea piatta + Salina + Palude + Palude + Tufo + Ardesia + Ardesia;minerale di ferro;rame + Arenaria + Rutilo + Rubino + Minerale di ferro + Argilla + Cromite + Bismuto + Bauxite + Barite + Antimonio + Decorazione della facciata + A forma di croce + Targa blu + Busto + Pedaggio automatico + Invio di pacchi + Ritiro dei pacchi e consegna della posta + Pescetariano + Dieta halal: no + Halal + Solo halal + Halal + Sede degli eventi + Bancomat (Geldkarte) non accettata + Bancomat (Geldkarte) + Non si accettano carte di credito + Nessuna bolla + Bolla + Scooter + Registrazione + Equitazione + Fango + Fonte di energia: biomassa + Deadlock + Fauna selvatica + Gomma + Frutteto di prato + Latifoglie + Capannone + Rack + Passanti a parete + Stand + Contenuto: foraggio + Contenuto: raccolto + Contenuto: acque reflue + Contenuto: liquame + Contenuto: letame + Contenuto: liquame + Wiki mongolo + Wiki aragonese + Wiki birmano + Wiki lombardo + Wiki punjabi + Wiki scozzese + Wiki giavanese + Wiki tartaro + Wiki malgascio + Wiki occitano + Wiki urdu + Wiki ceceno + Wiki uzbeko + Wiki kazako + Wiki tamil + Wiki serbo-croato + Wiki osseto + Wiki navajo + Wiki basso sassone + Wiki curdo + Wiki farsi + Wiki basco + Wiki esperanto + Wiki gallese + Wiki bosniaco + Wiki bishnupriya + Wiki azero + Wiki alsaziano + Stazione di segnale, avvertimento + Stazione di segnale, traffico + Stazione radio, seamark + Mucchio + Diga di Seamark + Boa di installazione + Piccoli elettrodomestici + Servizi per il cittadino + Visti per immigrati + Visti per non immigrati + Collegamento + Consolato + Ambasciata + Tabellone delle partenze + Ricarica di acqua potabile + Freccia + Vibrazione + Pressione \ No newline at end of file diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 513bce443a..4de19463c6 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -3928,7 +3928,7 @@ POIの更新は利用できません 少なくとも2つの地点を追加する必要があります OpenStreetMapにログイン OpenStreetMap.orgにログイン - OpenStreetMapに登録 + OpenStreetMapにOAuthログイン 変更をアップロードするには、ログインする必要があります。 \n \n安全なOAuth方式を使用してログイン、または通常のユーザー名とパスワード方式が選択できます。 @@ -3949,4 +3949,6 @@ POIの更新は利用できません アカウント ルートが再計算されるのを待ちます。 \nグラフは再計算後に利用できるようになります。 + OSM通知/ POI / GPXのアップロードをテストする場合、openstreetmap.orgではなくdev.openstreetmap.orgを使用するよう切り替えます。 + dev.openstreetmap.orgを使用 \ No newline at end of file diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml index a52a317b33..42c3d92278 100644 --- a/OsmAnd/res/values-pt-rBR/phrases.xml +++ b/OsmAnd/res/values-pt-rBR/phrases.xml @@ -3880,4 +3880,7 @@ Ligação Consulado Embaixada + Sereia + Enfermaria + Agente de dinheiro móvel \ No newline at end of file diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 698a7c2e76..4b760b500b 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -3993,4 +3993,5 @@ Выбор изображения Каяк %1$s * %2$s + Немецкий (повседневный) \ No newline at end of file diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index f58e0f4dc5..ccf77c483c 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -3876,4 +3876,7 @@ Vistos pro immigrantes Vistos pro no immigrantes Ufìtziu de collegamentu + Sirena + Infermieri + Agente de denaru mòbile \ No newline at end of file diff --git a/OsmAnd/res/values-uk/phrases.xml b/OsmAnd/res/values-uk/phrases.xml index 70d6d83d6b..3e8c064f97 100644 --- a/OsmAnd/res/values-uk/phrases.xml +++ b/OsmAnd/res/values-uk/phrases.xml @@ -3868,4 +3868,7 @@ Посольство Консульство Посольство + Сирена + Медсестра + Мобільний грошовий агент \ No newline at end of file diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index 083311b0c0..0ff79b64b8 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -3879,4 +3879,7 @@ 聯絡處 領事館 大使館 + 警報器 + 護理師 + 行動貨幣代理商 \ No newline at end of file diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 34a60ca216..7414ecc26f 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -2655,7 +2655,7 @@ %1$d files left %1$d files left to download Full version - Dismiss route + Dismiss route? Stop navigation Clear destination Not connected to Wi-Fi. Use current connection to the Internet to download? diff --git a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java index f319a878be..467ad76a0f 100644 --- a/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java +++ b/OsmAnd/src/net/osmand/aidl/OsmandAidlApi.java @@ -19,7 +19,6 @@ import android.view.KeyEvent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -55,8 +54,6 @@ import net.osmand.plus.FavouritesDbHelper; import net.osmand.plus.GPXDatabase.GpxDataItem; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; -import net.osmand.plus.mapmarkers.MapMarkersHelper; -import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.SQLiteTileSource; @@ -68,6 +65,8 @@ import net.osmand.plus.helpers.ExternalApiHelper; import net.osmand.plus.helpers.LockHelper; import net.osmand.plus.mapcontextmenu.MapContextMenu; import net.osmand.plus.mapcontextmenu.other.IContextMenuButtonListener; +import net.osmand.plus.mapmarkers.MapMarker; +import net.osmand.plus.mapmarkers.MapMarkersHelper; import net.osmand.plus.monitoring.OsmandMonitoringPlugin; import net.osmand.plus.myplaces.TrackBitmapDrawer; import net.osmand.plus.quickaction.QuickAction; @@ -79,11 +78,11 @@ import net.osmand.plus.routing.RouteDirectionInfo; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.routing.VoiceRouter; import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.OsmAndAppCustomization; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.settings.backend.backup.ProfileSettingsItem; import net.osmand.plus.settings.backend.backup.SettingsHelper; -import net.osmand.plus.settings.backend.ExportSettingsType; import net.osmand.plus.settings.backend.backup.SettingsItem; import net.osmand.plus.views.OsmandMapLayer; import net.osmand.plus.views.OsmandMapTileView; @@ -598,8 +597,7 @@ public class OsmandAidlApi { final RoutingHelper routingHelper = app.getRoutingHelper(); boolean force = intent.getBooleanExtra(AIDL_FORCE, true); if (routingHelper.isFollowingMode() && !force) { - AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { + mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -665,8 +663,7 @@ public class OsmandAidlApi { final RoutingHelper routingHelper = app.getRoutingHelper(); boolean force = intent.getBooleanExtra(AIDL_FORCE, true); if (routingHelper.isFollowingMode() && !force) { - AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { + mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 00bd656b63..0213268a05 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -3,6 +3,7 @@ package net.osmand.plus.activities; import android.app.Activity; import android.app.Dialog; import android.content.DialogInterface; +import android.content.DialogInterface.OnDismissListener; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; @@ -39,8 +40,6 @@ import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.ItemClickListener; import net.osmand.plus.ContextMenuItem; import net.osmand.plus.ContextMenuItem.ItemBuilder; -import net.osmand.plus.mapmarkers.MapMarkersHelper; -import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.OsmAndLocationProvider; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -56,11 +55,14 @@ import net.osmand.plus.download.IndexItem; import net.osmand.plus.liveupdates.OsmLiveActivity; import net.osmand.plus.mapcontextmenu.AdditionalActionsBottomSheetDialogFragment; import net.osmand.plus.mapcontextmenu.AdditionalActionsBottomSheetDialogFragment.ContextMenuItemClickListener; +import net.osmand.plus.mapmarkers.MapMarker; import net.osmand.plus.mapmarkers.MapMarkersDialogFragment; +import net.osmand.plus.mapmarkers.MapMarkersHelper; import net.osmand.plus.mapmarkers.MarkersPlanRouteContext; import net.osmand.plus.measurementtool.MeasurementToolFragment; import net.osmand.plus.measurementtool.StartPlanRouteBottomSheet; import net.osmand.plus.monitoring.OsmandMonitoringPlugin; +import net.osmand.plus.osmedit.dialogs.DismissRouteBottomSheetFragment; import net.osmand.plus.profiles.RoutingProfileDataObject; import net.osmand.plus.routepreparationmenu.MapRouteInfoMenu; import net.osmand.plus.routepreparationmenu.WaypointsFragment; @@ -75,7 +77,6 @@ import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.layers.MapControlsLayer; import net.osmand.plus.wikipedia.WikipediaDialogFragment; import net.osmand.plus.wikivoyage.WikivoyageWelcomeDialogFragment; -import net.osmand.plus.wikivoyage.data.TravelDbHelper; import net.osmand.plus.wikivoyage.data.TravelHelper; import net.osmand.plus.wikivoyage.explore.WikivoyageExploreActivity; import net.osmand.router.GeneralRouter; @@ -1122,26 +1123,12 @@ public class MapActivityActions implements DialogProvider { } } - public AlertDialog stopNavigationActionConfirm() { - return stopNavigationActionConfirm(null); + public void stopNavigationActionConfirm(@Nullable OnDismissListener listener) { + stopNavigationActionConfirm(listener, null); } - public AlertDialog stopNavigationActionConfirm(final Runnable onStopAction) { - AlertDialog.Builder builder = new AlertDialog.Builder(mapActivity); - // Stop the navigation - builder.setTitle(getString(R.string.cancel_route)); - builder.setMessage(getString(R.string.stop_routing_confirm)); - builder.setPositiveButton(R.string.shared_string_yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - stopNavigationWithoutConfirm(); - if (onStopAction != null) { - onStopAction.run(); - } - } - }); - builder.setNegativeButton(R.string.shared_string_no, null); - return builder.show(); + public void stopNavigationActionConfirm(@Nullable OnDismissListener listener, @Nullable Runnable onStopAction) { + DismissRouteBottomSheetFragment.showInstance(mapActivity.getSupportFragmentManager(), listener, onStopAction); } public void whereAmIDialog() { diff --git a/OsmAnd/src/net/osmand/plus/base/MenuBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/base/MenuBottomSheetDialogFragment.java index 71192fafe6..05dbd85340 100644 --- a/OsmAnd/src/net/osmand/plus/base/MenuBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/base/MenuBottomSheetDialogFragment.java @@ -315,7 +315,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra } } - boolean useVerticalButtons() { + protected boolean useVerticalButtons() { Activity activity = requireActivity(); int rightBottomButtonTextId = getRightBottomButtonTextId(); if (getDismissButtonTextId() != DEFAULT_VALUE && rightBottomButtonTextId != DEFAULT_VALUE) { diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java index db4ab19884..b7f359a3e4 100644 --- a/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/dashboard/DashNavigationFragment.java @@ -11,7 +11,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; import net.osmand.plus.R; @@ -85,14 +84,13 @@ public class DashNavigationFragment extends DashBaseFragment { @Override public void onClick(View v) { - AlertDialog dlg = map.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { - + map.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { + @Override public void onDismiss(DialogInterface dialog) { setupNavigation(); DashWaypointsFragment f = dashboard.getFragmentByClass(DashWaypointsFragment.class); - if(f != null) { + if (f != null) { f.onOpenDash(); } } diff --git a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java index c2b1c25591..c92438e850 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/ExternalApiHelper.java @@ -11,7 +11,6 @@ import android.os.ParcelFileDescriptor; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -293,8 +292,7 @@ public class ExternalApiHelper { final RoutingHelper routingHelper = app.getRoutingHelper(); if (routingHelper.isFollowingMode() && !force) { - AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { + mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -353,8 +351,7 @@ public class ExternalApiHelper { final RoutingHelper routingHelper = app.getRoutingHelper(); if (routingHelper.isFollowingMode() && !force) { - AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { + mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { @@ -667,8 +664,7 @@ public class ExternalApiHelper { } final RoutingHelper routingHelper = app.getRoutingHelper(); if (routingHelper.isFollowingMode() && !force) { - AlertDialog dlg = mapActivity.getMapActions().stopNavigationActionConfirm(); - dlg.setOnDismissListener(new DialogInterface.OnDismissListener() { + mapActivity.getMapActions().stopNavigationActionConfirm(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java index a441c7607a..db5a66cdce 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java @@ -886,7 +886,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route app.getTargetPointsHelper().updateRouteAndRefresh(true); app.getRoutingHelper().recalculateRouteDueToSettingsChange(); } else { - mapActivity.getMapActions().stopNavigationActionConfirm(new Runnable() { + mapActivity.getMapActions().stopNavigationActionConfirm(null , new Runnable() { @Override public void run() { MapActivity mapActivity = getMapActivity(); diff --git a/OsmAnd/src/net/osmand/plus/osmedit/dialogs/DismissRouteBottomSheetFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/DismissRouteBottomSheetFragment.java new file mode 100644 index 0000000000..641cee51cc --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/osmedit/dialogs/DismissRouteBottomSheetFragment.java @@ -0,0 +1,106 @@ +package net.osmand.plus.osmedit.dialogs; + +import android.app.Activity; +import android.content.DialogInterface; +import android.content.DialogInterface.OnDismissListener; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + +import net.osmand.plus.R; +import net.osmand.plus.UiUtilities.DialogButtonType; +import net.osmand.plus.activities.MapActivity; +import net.osmand.plus.base.MenuBottomSheetDialogFragment; +import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; +import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription; +import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; + +public class DismissRouteBottomSheetFragment extends MenuBottomSheetDialogFragment { + + public static final String TAG = DismissRouteBottomSheetFragment.class.getSimpleName(); + + private Runnable onStopAction; + private OnDismissListener dismissListener; + + @Override + public void createMenuItems(Bundle savedInstanceState) { + BaseBottomSheetItem descriptionItem = new BottomSheetItemWithDescription.Builder() + .setDescription(getString(R.string.stop_routing_confirm)) + .setTitle(getString(R.string.cancel_route)) + .setLayoutId(R.layout.bottom_sheet_item_list_title_with_descr) + .create(); + + items.add(descriptionItem); + + int padding = getResources().getDimensionPixelSize(R.dimen.content_padding_small); + items.add(new DividerSpaceItem(requireContext(), padding)); + } + + @Override + protected boolean useVerticalButtons() { + return false; + } + + @Override + protected int getDismissButtonTextId() { + return R.string.shared_string_cancel; + } + + @Override + protected int getRightBottomButtonTextId() { + return R.string.shared_string_dismiss; + } + + @Override + protected DialogButtonType getRightBottomButtonType() { + return DialogButtonType.PRIMARY; + } + + @Override + public int getSecondDividerHeight() { + return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin); + } + + @Override + protected void onRightBottomButtonClick() { + MapActivity mapActivity = getMapActivity(); + if (mapActivity != null) { + mapActivity.getMapActions().stopNavigationWithoutConfirm(); + } + if (onStopAction != null) { + onStopAction.run(); + } + dismiss(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + FragmentActivity activity = getActivity(); + if (activity != null && !activity.isChangingConfigurations() && dismissListener != null) { + dismissListener.onDismiss(dialog); + } + } + + @Nullable + public MapActivity getMapActivity() { + Activity activity = getActivity(); + if (activity instanceof MapActivity) { + return (MapActivity) activity; + } + return null; + } + + public static void showInstance(@NonNull FragmentManager fragmentManager, @Nullable OnDismissListener listener, @Nullable Runnable onStopAction) { + if (!fragmentManager.isStateSaved()) { + DismissRouteBottomSheetFragment fragment = new DismissRouteBottomSheetFragment(); + fragment.dismissListener = listener; + fragment.onStopAction = onStopAction; + fragment.setRetainInstance(true); + fragment.show(fragmentManager, TAG); + } + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java index 3ced930a17..f5d52366fe 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ExportItemsBottomSheet.java @@ -379,6 +379,7 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment { iconId = R.drawable.ic_action_photo_dark; } builder.setIcon(uiUtilities.getIcon(iconId, activeColorRes)); + builder.setDescription(AndroidUtils.formatSize(app, size)); } else if (fileSubtype.isMap() || fileSubtype == FileSettingsItem.FileSubtype.TTS_VOICE || fileSubtype == FileSettingsItem.FileSubtype.VOICE) { @@ -389,7 +390,7 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment { String mapDescription = getMapDescription(file); String formattedSize = AndroidUtils.formatSize(app, size); if (mapDescription != null) { - builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_star, mapDescription, formattedSize)); + builder.setDescription(getString(R.string.ltr_or_rtl_combine_via_bold_point, mapDescription, formattedSize)); } else { builder.setDescription(formattedSize); } diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java index 9a24d0aba6..e7cc9b4466 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java @@ -339,7 +339,7 @@ public class MapControlsLayer extends OsmandMapLayer { public void stopNavigation() { mapRouteInfoMenu.hide(); if (mapActivity.getRoutingHelper().isFollowingMode()) { - mapActivity.getMapActions().stopNavigationActionConfirm(); + mapActivity.getMapActions().stopNavigationActionConfirm(null); } else { mapActivity.getMapActions().stopNavigationWithoutConfirm(); } diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java index 0b9398a908..9ccdc5f6c8 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelObfHelper.java @@ -4,6 +4,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import net.osmand.Collator; +import net.osmand.CollatorStringMatcher; import net.osmand.GPXUtilities; import net.osmand.IndexConstants; import net.osmand.OsmAndCollator; @@ -25,7 +26,9 @@ import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -34,7 +37,7 @@ import gnu.trove.map.TLongObjectMap; import gnu.trove.map.hash.TLongObjectHashMap; -public class TravelObfHelper implements TravelHelper{ +public class TravelObfHelper implements TravelHelper { private static final Log LOG = PlatformUtil.getLog(TravelObfHelper.class); @@ -76,7 +79,8 @@ public class TravelObfHelper implements TravelHelper{ return localDataHelper; } - /** TODO + /** + * TODO * 1. implement regional travelbooks * 2. check settings for default? */ @@ -97,7 +101,7 @@ public class TravelObfHelper implements TravelHelper{ } else { selectedTravelBook = null; } - + } /** @@ -143,7 +147,82 @@ public class TravelObfHelper implements TravelHelper{ @NonNull @Override public List search(String searchQuery) { - return null; + List res = new ArrayList<>(); + CollatorStringMatcher matcher = new CollatorStringMatcher(searchQuery, + CollatorStringMatcher.StringMatcherMode.CHECK_STARTS_FROM_SPACE); + + for (TravelArticle article : popularArticles) { + if (checkArticleMatches(matcher, article)) { + + WikivoyageSearchResult searchResult = convertArticleToSearchResult(article); + res.add(searchResult); + } + } + res = new ArrayList<>(groupSearchResultsByCityId(res)); + sortSearchResults(searchQuery, res); + return res; + } + + private WikivoyageSearchResult convertArticleToSearchResult(TravelArticle article) { + WikivoyageSearchResult searchResult = new WikivoyageSearchResult(); + searchResult.articleTitles = new ArrayList<>(Collections.singletonList(article.title)); + searchResult.isPartOf = new ArrayList<>(Collections.singletonList(article.isPartOf)); + searchResult.imageTitle = article.imageTitle; + searchResult.langs = new ArrayList<>(Collections.singletonList(article.lang)); + searchResult.tripId = article.tripId; + return searchResult; + } + + private Collection groupSearchResultsByCityId(List res) { + String baseLng = application.getLanguage(); + TLongObjectHashMap wikivoyage = new TLongObjectHashMap<>(); + for (WikivoyageSearchResult rs : res) { + WikivoyageSearchResult prev = wikivoyage.get(rs.tripId); + if (prev != null) { + int insInd = prev.langs.size(); + if (rs.langs.get(0).equals(baseLng)) { + insInd = 0; + } else if (rs.langs.get(0).equals("en")) { + if (!prev.langs.get(0).equals(baseLng)) { + insInd = 0; + } else { + insInd = 1; + } + } + prev.articleTitles.add(insInd, rs.articleTitles.get(0)); + prev.langs.add(insInd, rs.langs.get(0)); + prev.isPartOf.add(insInd, rs.isPartOf.get(0)); + } else { + wikivoyage.put(rs.tripId, rs); + } + } + return wikivoyage.valueCollection(); + } + + private void sortSearchResults(final String searchQuery, List list) { + Collections.sort(list, new Comparator() { + @Override + public int compare(WikivoyageSearchResult o1, WikivoyageSearchResult o2) { + boolean c1 = CollatorStringMatcher.cmatches(collator, searchQuery, o1.articleTitles.get(0), + CollatorStringMatcher.StringMatcherMode.CHECK_ONLY_STARTS_WITH); + boolean c2 = CollatorStringMatcher.cmatches(collator, searchQuery, o2.articleTitles.get(0), + CollatorStringMatcher.StringMatcherMode.CHECK_ONLY_STARTS_WITH); + if (c1 == c2) { + return collator.compare(o1.articleTitles.get(0), o2.articleTitles.get(0)); + } else if (c1) { + return -1; + } else if (c2) { + return 1; + } + return 0; + } + }); + } + + private boolean checkArticleMatches(CollatorStringMatcher matcher, TravelArticle article) { + return matcher.matches(article.getTitle()) + || matcher.matches(article.getContent()) + || matcher.matches(article.getContentsJson()); } @NonNull @@ -281,14 +360,14 @@ public class TravelObfHelper implements TravelHelper{ // if (aa != null) { // article = readArticle(aa, lang); // } - return article; + return article; } @Override public TravelArticle getArticle(long resId, String lang) { TravelArticle article = getArticleFromCache(resId, lang); if (article != null) { - return article; + return article; } String name = ""; //??? return getArticle(name, lang); @@ -344,7 +423,7 @@ public class TravelObfHelper implements TravelHelper{ } - //TODO finish stub + //TODO finish stub @Override public ArrayList getArticleLangs(long cityId) { ArrayList res = new ArrayList<>();