diff --git a/OsmAnd/res/drawable-hdpi/ic_action_openstreetmap_logo.png b/OsmAnd/res/drawable-hdpi/ic_action_openstreetmap_logo.png new file mode 100644 index 0000000000..546d3cbbd8 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/ic_action_openstreetmap_logo.png differ diff --git a/OsmAnd/res/drawable-hdpi/ic_plugin_wikipedia.png b/OsmAnd/res/drawable-hdpi/ic_plugin_wikipedia.png index 70448e3601..c926feacf2 100644 Binary files a/OsmAnd/res/drawable-hdpi/ic_plugin_wikipedia.png and b/OsmAnd/res/drawable-hdpi/ic_plugin_wikipedia.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_action_openstreetmap_logo.png b/OsmAnd/res/drawable-mdpi/ic_action_openstreetmap_logo.png new file mode 100644 index 0000000000..f1ec5f4784 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/ic_action_openstreetmap_logo.png differ diff --git a/OsmAnd/res/drawable-mdpi/ic_plugin_wikipedia.png b/OsmAnd/res/drawable-mdpi/ic_plugin_wikipedia.png index 3c23c0b38b..19092a1584 100644 Binary files a/OsmAnd/res/drawable-mdpi/ic_plugin_wikipedia.png and b/OsmAnd/res/drawable-mdpi/ic_plugin_wikipedia.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_openstreetmap_logo.png b/OsmAnd/res/drawable-xhdpi/ic_action_openstreetmap_logo.png new file mode 100644 index 0000000000..6e1783b1a3 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/ic_action_openstreetmap_logo.png differ diff --git a/OsmAnd/res/drawable-xhdpi/ic_plugin_wikipedia.png b/OsmAnd/res/drawable-xhdpi/ic_plugin_wikipedia.png index a49dfdaf85..a0ff70291f 100644 Binary files a/OsmAnd/res/drawable-xhdpi/ic_plugin_wikipedia.png and b/OsmAnd/res/drawable-xhdpi/ic_plugin_wikipedia.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_openstreetmap_logo.png b/OsmAnd/res/drawable-xxhdpi/ic_action_openstreetmap_logo.png new file mode 100644 index 0000000000..cf79a126f2 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/ic_action_openstreetmap_logo.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/ic_plugin_wikipedia.png b/OsmAnd/res/drawable-xxhdpi/ic_plugin_wikipedia.png index 3c3b20e1ec..10b9f02b82 100644 Binary files a/OsmAnd/res/drawable-xxhdpi/ic_plugin_wikipedia.png and b/OsmAnd/res/drawable-xxhdpi/ic_plugin_wikipedia.png differ diff --git a/OsmAnd/res/layout/wpt_list_item.xml b/OsmAnd/res/layout/wpt_list_item.xml index cff6ee964e..990454ebfa 100644 --- a/OsmAnd/res/layout/wpt_list_item.xml +++ b/OsmAnd/res/layout/wpt_list_item.xml @@ -1,101 +1,151 @@ - - - - - + android:visibility="gone" + tools:visibility="visible"> - - - - - - - - - - - - - - - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/wpt_list_item_category.xml b/OsmAnd/res/layout/wpt_list_item_category.xml index 7d24ccb6fb..3f373f0a10 100644 --- a/OsmAnd/res/layout/wpt_list_item_category.xml +++ b/OsmAnd/res/layout/wpt_list_item_category.xml @@ -1,10 +1,11 @@ - + + android:minHeight="@dimen/wpt_list_category_height" + android:orientation="horizontal" + android:paddingLeft="@dimen/list_content_padding"> @@ -45,19 +46,19 @@ + android:layout_weight="1" + android:orientation="vertical" + android:paddingBottom="8dp" + android:paddingTop="8dp"> @@ -66,20 +67,21 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:textColor="?android:textColorSecondary" + android:textColor="@color/wikivoyage_secondary_text" android:textSize="@dimen/default_sub_text_size" + osmand:typeface="@string/font_roboto_regular" tools:text="Important points in this route"/> diff --git a/OsmAnd/res/values-b+ast/phrases.xml b/OsmAnd/res/values-b+ast/phrases.xml index 6d005f1553..558bdcc4a4 100644 --- a/OsmAnd/res/values-b+ast/phrases.xml +++ b/OsmAnd/res/values-b+ast/phrases.xml @@ -9,8 +9,8 @@ Tresporte aereu Tresporte acuáticu Comunicación -Triba - Triba +Triba de combustible + Triba de combustible (avia) Triba de pagu Tarxetes pa gasolineres Adicional diff --git a/OsmAnd/res/values-b+ast/strings.xml b/OsmAnd/res/values-b+ast/strings.xml index de1c43c452..98a6112fbd 100644 --- a/OsmAnd/res/values-b+ast/strings.xml +++ b/OsmAnd/res/values-b+ast/strings.xml @@ -973,7 +973,7 @@ Puntos Importar ficheru Puntos de ruta añadíos a los marcadores del mapa Hai qu\'amestar polo menos un marcador pa usar esta función. - Hebo una esceición: Nun se camudó la nota + Nun pudo camudase la nota ¡Toma notes! Ayeri Esti añu @@ -1050,8 +1050,15 @@ Puntos Más aiciones Ficheru GPX con coordenaes y datos de les notes esbillaes. Ficheru GPX con coordenaes y datos de toles notes. - \\022 + \\022 Nuevu menú Viaxe : consultar los artículos de WikiVoyage ensin conexón \n +\n • Wikipedia : nuevu aspeutu, imaxes +\n +\n • Interfazd\'apertura de traces : ver grupos de puntos de ruta +\n +\n • Marcadores del mapa : importar grupos seleicionaos dende ficheros GPX, nuevu aspeutu de la entrada de coordenaes +\n +\n • La suscripción a OsmAnd Live agora incluye toles funciones d\'OsmAnd \n Cambiar la consulta de la gueta. Aiciones @@ -1076,11 +1083,11 @@ Puntos Puntos de ruta de la traza Categoría de favoritos Amestar un grupu - Puedes importar grupos dende favoritos o de puntos de ruta d\\\'una traza. + Importar grupos dende favoritos o de puntos de ruta de la traza. ¡Crea marcadores de mapa! Da un toque llargu o curtiu en «Llugares», llueu toca nel botón de bandera de marcador. Importar grupos - Puedes importar grupos de favoritos o puntos de ruta d\\\'una traza como marcadores. + Importar grupos de favoritos o puntos de ruta de la traza como marcadores. Dos Un Amosar llinies de direición dende la to posición a les de marcadores activos. diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index da104da1d6..dfb84a8cbc 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -3930,4 +3930,15 @@ Laveste punkt Gennemsnitlig hældning +Kontrolpunktstype + +Vandretur kontrolpunkt + Stemplepunkt + Kode + Notesbog + Nåle + Quiz + Elektronisk + Bane + diff --git a/OsmAnd/res/values-el/phrases.xml b/OsmAnd/res/values-el/phrases.xml index f67e472300..de67912037 100644 --- a/OsmAnd/res/values-el/phrases.xml +++ b/OsmAnd/res/values-el/phrases.xml @@ -1413,4 +1413,89 @@ Ψάρια Θέσεις + Χωρίς οδική σήμανση + Καουτσουκόδεντρο + Πλάτη καθίσματος: ναι + Πλάτη καθίσματος: όχι + + Διακεκομμένο + + Κτίριο + Αδιέξοδος + + Πηγή ενέργειας: κάρβουνο + Πηγή ενέργειας: γκάζι + Πηγή ενέργειας: πυρηνική + Πηγή ενέργειας: ηλιακή + Πηγή ενέργειας: υδροηλεκτρική + Πηγή ενέργειας: άνεμος + Πηγή ενέργειας: γεωθερμική + Πηγή ενέργειας: πετρέλαιο + Πηγή ενέργειας: ντίζελ + + Διεθνές όνομα + Εθνικό όνομα + Περιφερειακό όνομα + Τοπικό όνομα + Παλιό όνομα + Εναλλακτικό όνομα + + Χειροκίνητη + Τροφοδοτούμενη + Χωρίς αντλία + Ναι + + Μεταλλικό + Χαρακτηριστικό νερού: λάσπη + Θειικό + + Σημείο νερού + + Οδοδείκτης + Πίνακας + Χάρτης + Γραφείο + Σημάδι μονοπατιού + Τερματικό + Δείκτης διαδρομής + Πεζοπορικός χάρτης + Φύση + Ιστορικό + Σήμα + Ηχητικός οδηγός + Ποδηλατικός χάρτης + Απτικό πρότυπο + Απτικός χάρτης + Πίνακας ανακοινώσεων + Φυτά + Γεωλογία + Δημόσιες συγκοινωνίες + Τεχνολογία + Αστρονομία + + Ναι + Χωρίς τζάκι + + Ναι + Δεν καλύπτεται + + Δεν επιτρέπεται + Μόνο έξω + Επιτρέπεται + Σε ξεχωριστό δωμάτιο + Σε απομονωμένο δωμάτιο + Μόνο για καπνιστές + + Διόδια + Χωρίς διόδια + Διόδια για βαρέα οχήματα + Ναι + Χωρίς απτικό πλακόστρωτο + Ναι + Όχι + Μόνο όταν επιτρέπεται το περπάτημα + + Σταθμός διάσωσης + + ΣΕΑ diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index f58056c0f7..8289d94ce7 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -2832,8 +2832,15 @@ Indikas lokon: %1$s x %2$s" Laŭ dato Laŭ speco Modifi serĉpeton - \\022 + • nova menuo “Vojaĝo”: legi artikolojn de Vikivojaĝo seninterrete \n +\n• Vikipedio: nova stilo, aktivaj ligiloj, bildoj +\n +\n• menuo de malfermita kurso: vidigi grupojn de navigadpunktojn +\n +\n• map-markoj: enporti elektitajn grupojn el GPX-dosieroj, plibonigita vido de koordinata enigo +\n +\n• abono al OsmAnd-Live nur inkluzivas ĉiujn eblaĵojn de OsmAnd \n Tie ĉi: parkumita je diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 6a3cf3f409..c625dbfa30 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -3038,7 +3038,15 @@ représentant la zone : %1$s x %2$s Par date Par type Modifier la recherche. - \\022 + \\022 Nouveau Menu Voyage : consulter les articles WikiVoyage hors connexion +\n +\n • Wikipedia : nouvelle apparence, images +\n +\n • Ouverture des traces : affichage de groupes d\'étapes +\n +\n • Marques : import depuis des fichiers GPX, création par saisie de coordonnées +\n +\n • L\'abonnement OsmAnd Live inclut désormais toutes les fonctionnalités d\'OsmAnd \n \n Total des dons diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml index c8a77a1bd0..62271927df 100644 --- a/OsmAnd/res/values-hu/phrases.xml +++ b/OsmAnd/res/values-hu/phrases.xml @@ -3859,4 +3859,6 @@ Legalacsonyabb pont Átlagos lejtés (%) +Ellenőrzőpont típusa + diff --git a/OsmAnd/res/values-hy/strings.xml b/OsmAnd/res/values-hy/strings.xml index 67d335f97d..aa766f3bfe 100644 --- a/OsmAnd/res/values-hy/strings.xml +++ b/OsmAnd/res/values-hy/strings.xml @@ -148,21 +148,21 @@ Այս plugin-նը ապահովում է քարտեզի էկրանի վրա վիջեթ, որը հնարավորություն է տալիս ստեղծել ուղիներ, քարտեզի վրա կտտացնելով, նաև օգտագործել կամ փոփոխել առկա GPX ֆայլերը, ուղեւորություն պլանավորել և չափել կետերի միջև հեռավորությունը։ Ոչ Այո - Բացառություն է տեղի ունեցել՝ նշումը չի փոփոխվել + Չհաջողվեց փոփոխել նշումը Ձևափոխել նշումը Ձևափոխել OSM նշումը Ավելացնել սկզբնակետի պատճեն որպես նպատակակետ։ Կլոր ուղևորություն Մարկերներ - Կոորդինատների ձեւաչափը + Կոորդինատների ձևաչափը Օգտագործել համակարգի ստեղնաշարը - Ընտրեք կոորդինատների մուտքագրման ձեւաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։ - Կոորդինատների արագ մուտքագրումը + Ընտրեք կոորդինատների մուտքագրման ձևաչափը: Դուք միշտ կարող եք փոխել այն սեղմելով Հատկություններ։ + Կոորդինատների արագ մուտքագրում Խուսափել սառույցի ճանապարհներից, ծանծաղուտ Խուսափել սառույցի ճանապարհներից և ծանծաղուտներից։ Օգտագործել դիրքը - Ավելացրեք ձեր դիրքը, որպես առաջին կետ, երթուղին կատարյալ պլանավորելու համար։ + Ավելացրեք ձեր դիրքը, որպես մեկնարկային կետ, երթուղին կատարյալ պլանավորելու համար։ Իմ դիրքը Վերջ Պլանավորել երթուղին @@ -172,19 +172,19 @@ Արտահանեք ձեր մարկերները այն ֆայլի մեջ, որը կարող եք նշել այստեղ: Պահպանել որպես հետեւել Տեղափոխեք պատմություն - Հերթական ծրագրի վերագործարկվելուց հետո խումբը կհեռացվի։ + Ծրագրի հերթական վերագործարկվելուց հետո խումբը կհեռացվի։ Ցույց տալ ուղեցույցներ Ցույց տալ սլաքները քարտեզի վրա Ցույց տալ անցած Թաքցնել անցած - Մաքրել Մարկերները քարտեզից + Ջնջել քարտեզի Մարկերներից նվազում աճող Ամսաթիվ ավելացված է Դասավորել ըստ: Ընտրեք, թե ինչպես ցույց տա քարտեզի էկրանին մարկերները քարտեզագրելու հեռավորությունը եւ ուղղությունը: Քարտեզի կողմնորոշման շեմը - "Ընտրեք ստորեւ, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։" + "Ընտրեք, թե ինչ արագության հասնելուց քարտեզի կողմնորոշումը կպոխվի \"Շարժման ուղղություն\" դեպի «Կողմնացույց»։" Բոլոր Մարկերները տեղափոխվել են պատմություն Քարտեզի Մարկերները տեղափոխվել են պատմություն Քարտեզի Մարկերները տեղափոխվեցին ակտիվ @@ -199,7 +199,7 @@ Բոլորը տեղափոխել պատմություն Հեռավորության ցուցիչ Դասավորել ըստ - Մի օգտագործեք անիմացիաները + Առանց անիմացիաները Անջատում է անիմացիաները։ Ցուցադրել քարտեզի վրա Ելք առանց պահպանման? @@ -212,25 +212,25 @@ Ավելացել կետ Ընտրանքներ OsmAnd կմիացնի կետերը երթուղիների հետ ընտրված պրոֆիլի համար։ - "Դուք կարող եք պահպանել կետերը որպես երթուղի կամ որպես գիծ:" + "Պահպանել կետերը որպես երթուղի կամ որպես գիծ:" Ընտրեք նավիգացիոն պրոֆիլը Անհրաժեշտ է ավելացնել գոնե մեկ կետ։ GPX Ֆայլի անունը՝ Ցույց տալ քարտեզի վրա պահպանելուց հետո Դիտեք քարտեզը եւ ավելացրեք կետերը Չափել հեռավորությունը - Վերսկսել/կասեցնել նավիգացիյան + Դադար/վերսկսել նավիգացիյան "Սեղմել այս կոճակը նավիգացիան կասեցնելու կամ վերսկսելու։" - Ցույց տալ նավարկության վերջնական երկխոսությունը + Ցույց տալ \'Նավիգացիան ավարտվեց\' երկխոսությունը Սկսել / ավարտել նավարկությունը Հպեք այս կոճակը, նավիգացիան սկսելու կամ ավարտելու համար: Պահպանել թղթապանակներում գրանցված տրեկերը ամսական - Պահպանել տրեկները ենթա-թղթապանակներում ըստ գրանցված ամսին (օրինակ 2017-01)։ + Պահպանել տրեկները ենթա-թղթապանակներում ըստ գրանցված ամսին (օրինակ 2018-01)։ Վերագործարկեք Վերբեռնել Վերբեռնել սալիկներ ընթացիկ տվյալները ցուցադրելու համար: Սալիկներ կեշ - Սխալ օգտագործողի անուն! + Սխալ օգտագործողի անուն (username) Մինչև Սկսած Դիտել միայն ավելացրած լուսանկարներ @@ -238,7 +238,7 @@ "Մուտքագրեք օգտատերի անունը" Դիտել լուսանկարները ավելացրած օգտագործողի կողմից Օգտատերի անունը - Դուք կարող եք դասավորել լուսանկարներ ըստ ուղարկողի կամ ամսաթվի: Զտիչները օգտագործվում են միայն մեծ չափերի համար: + Դասավորել լուսանկարները ըստ ուղարկողի կամ ամսաթվի: Միայն մեծ չափերի համար: Շառավիղ-քանոն Թույլտվություն OsmAnd-ը չի կարող ներմուծել ֆայլը: Ստուգեք, արդյոք OsmAnd-ը իրավունք ունի կարդալ ֆայլը իր գտնվելու վայրից: @@ -247,8 +247,7 @@ Բացել Mapillary Տեղադրել Կատարելագործել լուսանկարի ծածկույթը Mapillary- ի միջոցով - "Դուք կարող եք ձեր սեփական լուսանկարները կամ մի շարք լուսանկարներ կցել քարտեզի գտնվելու վայրի: -\nԴա անելու համարանհրաժեշտ է տեղադրել Mapillary ծրագիրը Google Play խանութից:" + "Տեղադրել Mapillary ծրագիրը լուսանկարն կամ մի շարք լուսանկարներ կցելու քարտեզին գտնվելու վայրում:" Առցանց լուսանկարներ Ավելացնել լուսանկարներ Այս վայրի համար լուսանկարներ չունենք։ @@ -258,23 +257,23 @@ Առցանց փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը: Մափիլարի(Mapillary) Փողոցային նկարներ բոլորի համար: Բացահայտեք վայրերը, համագործակցեք, նկարեք աշխարհը: - "Նպատակակետը գտնվում է մասնավորի տարածքում: Ցանկանում եք թույլատրել այս ուղեւորությանը մասնավոր ճանապարհներ մուտք գործել?" + "Նպատակակետը գտնվում է մասնավորի տարածքում: Թույլատրել այս ուղևորությանը մասնավոր ճանապարհներ մուտք գործել?" Նորից որոնեք Ավելացնել որոնման շառավղը - Ոչինչ չի գտնվել :( + Ոչինչ չի գտնվել "Փոխել հարցումը կամ ավելացնել որոնման շառավիղը։" Ցույց տալ/թաքցնել OSM նշումները Ցույց տալ OSM նշումները Թաքցնել OSM նշումները - Գործողությունների կոճակը հպելով, քարտեզի վրա ցույց կտա կամ կթաքցնի OSM- ի նշումները: + Գործողությունների կոճակը սխմելով, քարտեզի վրա ցույց կտա կամ կթաքցնի OSM-ի նշումները: Դասավորված է ըստ հեռավորության Որոնում Սիրվածում - Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է ներբեռնել հատուկ քարտեզ այս տարածքի համար: - Ռելիեֆի ստվերները ցուցադրելու համար անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin + Ներբեռնել \"Ռելիեֆի ստվերները\" հատուկ քարտեզ այս տարածքի համար: + Տեղադրել Contour Lines plugin \"Ռելիեֆի ստվերները\" ցուցադրելու համար "Թաքցնել մոտեցման մասշտաբից" - Եզրագծերը դիտելու համար անհրաժեշտ է ներբեռնել հատուկ քարտեզ այս տարածքի համար: + Ներբեռնել \"Եզրագծեր\" հատուկ քարտեզ այս տարածքի համար: Պլագին - Եզրագծերը դիտելու համար անհրաժեշտ անհրաժեշտ է գնել եւ տեղադրել Contour Lines plugin + "\"Եզրագծերը\" դիտելու համար անհրաժեշտ է գնել և տեղադրել \"Contour Lines\" plugin" Գունային սխեմա Ցուցադրել խոշորացման մակարդակից Թույլ տալ մասնավոր մուտք @@ -294,21 +293,21 @@ Ընտրեք քաղաքը Ընտրեք փոստային կոդը Քարտեզի ավտոմասշտաբ on/off - "Գործողությունների կոճակը հպելով, ավտոմասշտաբի on/off համաձայն ձեր արագությանը:" + Սխմելով այս գործողությունների կոճակը ակտիվացնում է ավտոմասշտաբի on/off համաձայն ձեր արագությանը: Միացնել ավտոմասշտաբ Անջատել ավտոմաստաբ Ավելացնել նպատակակետ Փոխարինել նպատակակետը Ավելացնել առաջին միջանկյալ կետը - Գործողությունների կոճակը հպելով, ավելացննում նպատակակետ էկրանի կենտրոնում։ Մինչ այդ ընտրած նպատակակետը կդառնա միջանկյալ կետ։ - Գործողությունների կոճակը հպելով, տեղափոխում նպատակակետը էկրանի կենտրոն։ - Գործողությունների կոճակը հպելով, ավելացննում է առաջին միջանկյալ կետ էկրանի կենտրոնում։ + Սխմելով այս գործողությունների կոճակը, ավելացննում նպատակակետ էկրանի կենտրոնում։ Մինչ այդ ընտրած նպատակակետը կդառնա միջանկյալ կետ։ + Սխմելով այս գործողությունների կոճակը, տեղափոխում նպատակակետը էկրանի կենտրոն։ + Սխմելով այս գործողությունների կոճակը, ավելացննում է առաջին միջանկյալ կետ էկրանի կենտրոնում։ Ծածկույթի քարտեզը անջատված է Նեքեվի շերնը անջատված է Սխալ - Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին եւ ստացիր 3 լրացուցիչ քարտեզների ներբեռնում: - Քարտեզներ, որոնք պարունակոմ են եզրագծեր և ծովային խորության կետեր։ - Շնորհակալություն ծովային խորքային ուրվագծերի ձեռքբերման համար: + Բաժանորդագրվեք մեր էլեկտրոնային փոստի առաքմանը `OsmAnd զեղչերի մասին և ստացիր 3 լրացուցիչ քարտեզների ներբեռնում: + Քարտեզներ՝ ծովային եզրագծեր և խորության կետեր։ + Շնորհակալություն \"Ծովային խորքային ուրվագծերի\" ձեռքբերման համար Ծովային խորքային ուրվագծեր Ծովային խորքային ուրվագիծը Ծովային քարտեզներ @@ -321,17 +320,17 @@ Չհավաքել օգտագործման վիճակագրությունը Չցուցադրել հաղորդագրությունները մեկնարկին Ավտոկանգառի ընտրանքներ - Շնորհակալություն OsmAnd-ի ամբողջական տարբերակի ձեռք բերեման համար! + Շնորհակալություն OsmAnd-ի վճարովի տարբերակի ձեռք բերեման համար։ Լեռնոտ Քիչ լեռնոտ Բնակարան Կարճ երթուղիները Հավասարակշռված նախընտրում անընդմեջ - Նախընտրելի տեղանք`հարթ կամ լեռնոտ։ + Նախընտրելի տեղանք`Հարթ կամ լեռնոտ։ Լանջ Ավելացնել նոր թղթապանակ - Կետ(եր)ը հաջողությամբ ջնջված է: + Կետ(եր)ը ջնջված է: Դուք մտադիր եք ջնջել կետ(եր)ը: Համոզված եք? Հայտնի կետեր այս երթուղու վրա Տրեկ @@ -340,8 +339,8 @@ Ժամանակն շարժման մեջ Ընդհանուր ժամանակը Առավելագույն - Սկսման Ժամկետ - Ավարտման Ժամկետ + Մեկնում + Ժամանում Գույնը Ընտրեք թղթապանակ տրեկերի համար Ֆայլը չի կարող տեղափոխվել: @@ -373,7 +372,7 @@ Ցույց տալ հին որոնման տեսակը Թույլատրել ավտոմայրուղիներ Թույլատրել ավտոմայրուղիներ։ - Դուք կարող եք վերբեռնել ձեր OSM Նշումը անանուն կամ ձեր OpenStreetMap.org պրոֆիլի միջոցով: + Վերբեռնել ձեր OSM \"Նշումը\" անանուն կամ ձեր OpenStreetMap.org պրոֆիլի միջոցով: Վիքիպեդիայի հոդվածներ Որոնել քաղաք կամ երկիր Վերցրեք %1$d ելքը @@ -405,10 +404,10 @@ Պահպանել ֆիլտրը Ջնջել ֆիլտրը Նոր ֆիլտր - Մուտքագրեք նոր ֆիլտրի անունը: Դուք կարող եք գտնել այն Կատեգորիաների ցանկում: - "Բաժանորդային վճարը գանձվում է ամսական կտրվածքով:Դուք կարող եք չեղարկել բաժանորդագրությունը Google Play- յում ցանկացած պահի:" + Մուտքագրեք նոր ֆիլտրի անունը: Դուք կարող եք գտնել այն \"Կատեգորիաների\" ցանկում: + "Բաժանորդային վճարը գանձվում է ամսական կտրվածքով:Դուք կարող եք չեղարկել բաժանորդագրությունը Google Play-յում ցանկացած պահի:" Նվիրատվություն OpenStreetMap համայնքին - Ձեր նվիրատվության մի մասը կուղարկվի OSM մասնակիցներին, որոնք փոփոխություններ են մտցմում OpenStreetMap-ուն: Բաժանորդագրության արժեքը մնում է նույնը: + Ձեր նվիրատվության մի մասը ուղարկվում է OSM մասնակիցներին, որոնք փոփոխություններ են մտցմում OpenStreetMap-ուն: Բաժանորդագրության արժեքը մնում է նույնը: Բաժանորդագրությունը հնարավորութուն է տալիս անսահմանափակ թարմացումներ ներբեռնել աշխարհի ցանկացած քարտեզներ ամեն ժամ, ամենօրյա, շաբաթական: Ստանալ այն Ստանալ %1$s @@ -417,7 +416,7 @@ Անսահմանափակ քարտեզների ներբեռնում , թարմացումներ, եւ Wikipedia plugin։ Մղոններ/մետր Բաց թողնել քարտեզների ներբեռնումը - Դուք չունեք անցանց քարտեզներ: Դուք կարող եք ընտրել քարտեզը ցուցակից կամ ներբեռնել քարտեզները հետագայում Menu - %1$s միջոցով: + Դուք չունեք անցանց քարտեզներ: Դուք կարող եք ընտրել քարտեզը ցուցակից կամ ներբեռնել քարտեզները հետագայում \"Menu - %1$s\" միջոցով: Ընտրեք այլ տարածաշրջան Քարտեզների որոնում… OsmAnd-ը կորոշի ձեր դիրքը և առաջարկի քարտեզներ ներբեռնման համար այդ տարածաշրջանի համար: @@ -436,22 +435,22 @@ Սկսել նոր սեգմենտ 6 րոպեանոց ընդմիջումից հետո, նոր տրեկ 2 ժամանոց ընդմիջումից հետո կամ նոր ֆայլ երկարատև ընդմիջումից հետո (եթե ամսաթիվը փոխվել է): Եզրագծերի գունային սխեման Նվազագույն արագությունը մուտքագրելու համար - Ֆիլտր՝ Նշանակել նվազագույն արագություն կետի համար։ + Ֆիլտր՝ Չգրանցել կետերը այս արագությունից ցածր լինելու դեպքում: Նվազագույն տեղաշարժը մուտքագրելու համար - Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը կետի համար վերջին դիրքից։ + Ֆիլտր՝ Նշանակել նվազագույն հեռավորությունը այս կետից նոր կետ գրանցելու համար։ Նվազագույն ճշգրտությունը մուտքագրելու համար - Ֆիլտր՝ Նշանակել նվազագույն ճշգրտություն կետի համար։ + Ֆիլտր՝ Չարձանագրել, եթե այդ ճշգրտության չի հասել։ Սուրբ Ծննդյան եւ Ամանորյա տոների նախօրեին դուք կարող եք ընտրել Սուրբ Ծնունդի հետ կապված POI-ների ցուցադրումը՝ տոնածառեր, տոնավաճառներ և այլն: Բաց-շագանակագույն Մուգ շագանակագույն Contour lines գունային սխեման Transliterate եթե %1$s անունը բացակայում է Transliterate անունները - Ստացեք երթուղիներ եւ հայտնաբերեք նոր վայրեր առանց ինտերնետ կապի + Ստացեք երթուղիներ և հայտնաբերեք նոր վայրեր առանց ինտերնետ կապի Գտնել իմ դիրքը Չստուգել թարմացումների համար կամ թարմացումներ կապված OsmAnd-ի զեղչեր հետ։ - Չցուցադրել թարմացումներ - Ցանկանում եք թարմացնել բոլոր քարտեզները հիմա? + Չցուցադրել թարմացումներ/նոր տարբերակներ + Թարմացնել բոլոր քարտեզները հիմա? "Ջնջել բոլոր տայլերը" Վառելիք տնտեսող ճանապարհ Կիրառել վառելիք տնտեսող ճանապարհ (սովորաբար ավելի կարճ)։ @@ -463,7 +462,7 @@ Որոնել ըստ կոորդինատների Ընդլայնված որոնում ըստ կոորդինատների Վերադառնալ որոնմանը - Ցանկանում եք ջնջե՞լ ընտրված առարկաները պատմությունից? + Ջնջե՞լ ընտրված առարկաները \"Պատմությունից\"? Ցույց տալ %1$s քարտեզի վրա Որոնում %1$s գտնվելու դիքից Կատեգորիաներ @@ -480,13 +479,13 @@ Գնացք Ընթացիկ տրեկ Մարտկոցի լիցքավորման մակարդակը - Տեղափոխել մարկերը դիրքը + Տեղափոխել մարկերի դիրքը Տեքաշարժեք քարտեզը որպեսզի փոխեք մարկերի դիրքը Բաժանորդագրվեք մեզ Ձայնով ազդարարել նպատակակետի ուղղութունը։ "Միացնել նավիգացիան հաշվը առնելով OsmAnd Live թարմացումները։" OsmAnd Live նավիգացիա - Նպատակը սահմանված չէ + Նպատակակետը սահմանված չէ Մագնիսական կրող Երթուղին դադարեցնելուց հետո երթուղու վերահաշվարկ չի կատարվում Կանխել երթուղու ավտոմատ վերահաշվարկը երթուղին դադարեցնելուց հետո։ @@ -959,26 +958,26 @@ Իմ դիրքը Իմ վայրերը Իմ Սիրածները - Նոր առանձնահատկություն. Արագ գործողության կոճակ -\n -\n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ եւ մեծացնելու) -\n -\n• Նոր քարտեզ տառատեսակներ, որոնք ընդգրկելով ավելի շատ տեղական վայրեր -\n -\n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (եւ շեշտադրումները) -\n -\n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում եւ վիքիպեդիայում -\n -\n• Աջակցում Բաց գտնվելու վայրի կոդը (OLC) -\n -\n• Ցուցադրել բարձրության, թեքության և արագության պրոֆիլը գրանցված GPX և հաշվարկված երթուղիները համար -\n -\n• Հեծանիվների երթուղիներում «Շարժիչային ոճ» կարգավորում և տրամաբանական բարելավում -\n -\n• Հեծանիվների երթուղիներում բարձրության տվյալների օգտագործման պարամետրեր -\n -\n• Այլ բարելավումներ և սխալներ ուղղում -\n + Նոր առանձնահատկություն. Արագ գործողության կոճակ +\n +\n• Բարելավված սենսորային էկրանի արձագանք (օրինակ `զուգահեռ համաժամանակ և մեծացնելու) +\n +\n• Նոր քարտեզ տառատեսակներ, որոնք ընդգրկելով ավելի շատ տեղական վայրեր +\n +\n•Աջակցություն TTS-ը տարածաշրջանային լեզվական տարբերակների (և շեշտադրումները) +\n +\n• Տեսանելիության բարելավում մի քանի քարտեզի ոճերում և Վիքիպեդիայում(Wikipedia) +\n +\n• Աջակցում Բաց գտնվելու վայրի կոդը (OLC) +\n +\n• Ցուցադրել բարձրության, թեքության և արագության պրոֆիլը գրանցված GPX և հաշվարկված երթուղիները համար +\n +\n• Հեծանիվների երթուղիներում «Շարժիչային ոճ» կարգավորում և տրամաբանական բարելավում +\n +\n• Հեծանիվների երթուղիներում բարձրության տվյալների օգտագործման պարամետրեր +\n +\n• Այլ բարելավումներ և սխալներ ուղղում +\n \nև ավելին… • Հպեք պիտակներ քարտեզի վրա \n @@ -2207,8 +2206,8 @@ Աջ Ձախ Տեղադրել - Տեղափոխվեք հաջորդ դաշտ - կարող են ներմուծվել որպես «Սիրելի» կետեր, կամ որպես հետևի(track) ֆայլ: + Հաջորդ դաշտը + կարող են ներմուծվել որպես «Սիրելի», կամ որպես track ֆայլ: @@ -2582,9 +2581,9 @@ Կրկնել Տրեկի (track) կետերը Ավելացնել խումբ - Դուք կարող եք ներմուծել խումբ «Սիրված»-ներից կամ տրեկի կետերից: + Ներմուծել խումբեր «Սիրված»-ներից կամ տրեկի կետերից: Ներմուծել խմբերը - Դուք կարող եք ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ: + Ներմուծել «Սիրված» խմբեր կամ տրեկի կետերը որպես մարկերներ: Երկու Մեկ Ավելացնել կետ @@ -2603,11 +2602,11 @@ Ավելացնել սեգմենտը GPX-ին Ավելին Տեսքը քարտեզի վրա - "Ընտրեք տրեկը ճանապարհային կետերը ավելացնելու մարկերներին։ (Ցուցադրված միայն այն տրեկների որոնք ունեն ճանապարհային կետեր։)" + "Ճանապարհային կետերը կարող եք ավելացնել մարկերներին ընտրելով այս տրեկերից մեկը, որը պարունակոմ է ճանապարհային կետեր(waypoints)։" Ընտրեք «Սիրված» խումբը, որը ցանկանում եք ավելացնել մարկերներին։ «Սիրված»-ի կատեգորիան Ստեղծեք քարտեզի մարկերներ! - Սեղմեք ցանկալի վայրում, ապա մարկերի վրա: + Սեղմեք ցանկալի վայրում, ապա մարկերի կոճակի վրա: Այս էկրանին կհայտնվեն մարկերներ, որոնք նշված են ինչպես անցած։ Տասներորդ թվերի թվաքանակը Ցուցադրել թվային վահանակը @@ -2633,9 +2632,18 @@ Լրացուցիչ գործողություններ GPX ֆայլը կոորդինատներով և ընտրված գրառումների տվյալներով: GPX ֆայլը կոորդինատներով և բոլոր նշումների տվյալները։ - \\022 + \\022 \n +\nՆոր Ճամփորդության մենյու. Դիտեք WikiVoyage- ի հոդվածները առանց ինտերնետի օգտագործման \n +\n • Wikipedia՝ նոր տեսք, ակտիվ հղումներ, պատկերներ +\n +\n • Open Track UI՝ ցուցադրում waypoint խմբերը +\n +\n • Քարտեզի մարկերներ՝ Ընտրված խմբերի ներմուծում GPX ֆայլերից, կոորդինատների մուտքագրման նոր տեսքը +\n +\n • OsmAnd Live բաժանորդագրությունը այժմ ներառում է բոլոր OsmAnd առանձնահատկությունները +\n \n \n Փոխել որոնման հարցումը: @@ -2654,7 +2662,7 @@ Ցուցադրել ուղեցույցները ձեր գտնվելու վայրից մինչև ակտիվ մարկերներ: Ցուցադրել մեկ կամ երկու նետ, նշելով ակտիվ մարկերների ուղղությունը: Ընտրեք, թե ինչպես ցուցադրեք հեռավորությունը մինչև ակտիվ մարկերներին: - Ընտրեք, թե որքան ուղղության ցուցիչներ ցույց տալ: + Ընտրեք, թե որքան \"ուղղության ցուցիչներ\" ցույց տալ: Ավտոմատ առաջընթաց հաջորդ դաշտ տասնորդական կետից հետո մուտքագրելուց %1$d թվեր: Սեղմելով քարտեզի վրա փոխարինում են հսկողության կոճակները եւ վիջեթները: Ամբողջ էկրանով ռեժիմ @@ -2705,11 +2713,11 @@ Ընտրեք արտահանման տեսակը`OSM նշումներ, POI կամ երկուսն էլ: Բոլոր տվյալները OSM նշումներ - Վաղը կբացվի ժամը + "Վաղը կբացվի " POI պիտակներ Առանց անունի Ցույց տալ փակած նշումները - Ցույց տալ/թաքցնել OSM նշումները քարտեզի վրա․ + Ցույց տալ/թաքցնել OSM նշումները քարտեզի վրա: "\\022 \n • Թարմացվել է համատեքստային մենյու`ցույց տալ, թե երբ POI- ն բացվում է / փակվում է \n @@ -2767,4 +2775,16 @@ Ստանալ OsmAnd բոլոր գործառույթները Ընտրեք Փաթեթ + Թաքցնել ամբողջական նկարագրությունը + Ցույց տալ ամբողջական նկարագրությունը + Հարմար է օգտագործել անանցանելի ճանապարհներին երթեւեկության ժամանակ: Հարմար է կանաչ արբանյակային պատկերներով օգտագործելու համար, որպես քարտի հիմքը: Հիմնական առանձնահատկությունները`նվազեցված հիմնական ճանապարհների հաստությունը, ավալացված հաստությունը արահետների, ուղիներ, հեծանիվային և այլ երթուղիների: Այն հիմնված է «Տոպո» ոճովի վրա: + Ծովային նավարկության ոճը։ Հիմնական առանձնահատկությունները ` փարոսներ, գետի երթուղիները, ծովային երթուղիները և նշանները, նավահանգիստները, ծովային նավերի ծառայությունները, խորքային ուրվագիծը: + Դահուկային ոճ: Հիմնական առանձնահատկություններ. ցուցադրում - երթուղիների, լեռնադահուկային վերելակների և այլ լեռնադահուկային առանձնահատկություններ: Ավելի քիչ շեղող երկրորդային օբյեկտներ: + Պարզ և հակապատկեր ոճը ավտոմեքենաների նավարկության համար: Աչքերի համար հարմար է գիշերային ռեժիմում: Հիմնական առանձնահատկությունները. Եզրագծերը, հակապատկեր նարնջագույն ճանապարհներ, ավելի քիչ շեղող երկրորդային օբյեկտներ: + "Հակապատկեր ոճը, որը նախատեսված է հիմնականում արշավային զբոսանքի, հետիոտն և հեծանվային զբոսանքի համար. Լավ ընթեռնելիություն բարդ արտաքին լուսավորման ժամանակ. Հիմնական առանձնահատկությունները. հակապատկեր ճանապարհներ և բնական օբյեկտներ, տարբեր տեսակի երթուղիներ, ուրվագծային գծի առաջադեմ պարամետրերով, ավելի մանրամասն տեղեկատվություններ ներկայացված են համապատասխան մակարդակների չափման, քան հիմնական ոճում. Ճանապարհային որակի ծածկույթը տարբերակը թույլ է տալիս տարբերակել ճանապարհի տարբեր որակի մակերեսին. Չկան գիշերային ռեժիմ." + Հին ցուցադրման ոճը «Mapnik» է: Հիմնական առանձնահատկությունները` Գույները նման են «Mapnik» ոճին: + "Բարձր մանրամասն ոճ շրջագայության համար: Ներառում է կանխադրված ոճի բոլոր կազմաձևային տարբերակները, բացի այդ, ցուցադրվում է որքան հնարավոր է մանրամասն, մասնավորապես, բոլոր ճանապարհները, ճանապարհները և ճանապարհորդելու այլ ուղիներ: Հստակ տեսողական տարբերություն բոլոր տեսակների ճանապարհների միջև, բազմաթիվ զբոսաշրջային ատլասների հիշեցում: Արտաքին օգտագործման, ցերեկային և գիշերային ռեժիմի բարձր հակադրություն գունային սխեման:" + Ընդհանուր ոճ: Խիտ բնակեցված քաղաքներում պարզեցված ռենդերինգ: Հիմնական առանձնահատկություններ՝ Եզրագծային գծեր, երթուղիներ, ճանապարհերի մակերեսային որակնը, մուտքի սահմանափակումներ, ճանապարհային նշաններ, SAC սանդղակի երթուղիների արտացոլում, սպորտային համաձուլվածքների բնութագրեր: + Բացել Wikipedia հղումը առցանց + Հղումը կբացվի վեբ բրաուզերում: diff --git a/OsmAnd/res/values-is/phrases.xml b/OsmAnd/res/values-is/phrases.xml index 5693ee0a72..91776e313b 100644 --- a/OsmAnd/res/values-is/phrases.xml +++ b/OsmAnd/res/values-is/phrases.xml @@ -3831,4 +3831,13 @@ Lægsti punktur Meðalhalli +Gerð eftirlitsstöðvar + +Gönguferðastöð + Stimpilstöð + Kóði + Gestabók + Rafrænt + Leið + diff --git a/OsmAnd/res/values-it/strings.xml b/OsmAnd/res/values-it/strings.xml index 3bb711a71a..dcc7c40797 100644 --- a/OsmAnd/res/values-it/strings.xml +++ b/OsmAnd/res/values-it/strings.xml @@ -3167,4 +3167,6 @@ Rappresenta l\'area: %1$s x %2$s Leggi Wikipedia senza una connessione dati Scarica tutto Segnalibro + Adatto all’uso durante la guida fuoristrada. Adatto all’uso con immagini satellitari come sfondo. Caratteristiche principali: Larghezza delle strade principali ridotta, larghezza di sentieri, carrarecce, piste ciclabili ed altri percorsi aumentata. Basato sullo stile ‘Topo’. + Stile molto dettagliato per le necessità del turista. Include tutte le opzioni di configurazioni dello stile predefinito e in più: Mostra più dettaglio possibile, in particolare, le strade, i percorsi e altri itinerari per chi viaggia. Distinzione chiara dei vari tipi di strada, come avviene negli atlanti per turisti. Schema dei colori ad alto contrasto per l’uso all’esterno, modalità diurna e notturna. diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index 98dbf1206f..f29c6d9b03 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -2890,7 +2890,7 @@ Лаосский вых. Зимний/лыжный - Туристический (контраст и детали) + Туристический Морской Названия POI diff --git a/OsmAnd/res/values-sk/strings.xml b/OsmAnd/res/values-sk/strings.xml index 4993242312..1ec67aa686 100644 --- a/OsmAnd/res/values-sk/strings.xml +++ b/OsmAnd/res/values-sk/strings.xml @@ -2859,7 +2859,15 @@ Zodpovedá oblasti: %1$s x %2$s Podľa typu Jedno stlačenie aktívne Upraviť vyhľadávacie kritériá. - \\022 + \\022 Nové menu Cestovanie: zobrazte si články WikiVoyage bez použitia Internetu +\n +\n • Wikipédia: nový vzhľad, aktívne linky, obrázky +\n +\n • Rozhranie zobrazovania stôp: zobrazuje skupiny prechodných bodov (waypointov) +\n +\n • Mapové značky: import vybraných skupín z GPX súborov, nový vzhľad zadávania súradníc +\n +\n • Predplatné OsmAnd Live zahŕňa všetky funkcie OsmAnd \n Čo je tu: zaparkované o diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index e7de4bd565..0f45acc177 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -1749,8 +1749,15 @@ Додаје прво стајање Прикажи/Сакриј ОСМ белешке на карти. GPX фајл - \\022 + \\022 Нови турустички мени: гледајте WikiVoyage чланке без коришћења интернета \n +\n • Википедија: нови изглед, активне везе, слике +\n +\n • Open Track UI: приказ група пролазних тачака +\n +\n • Маркери на карти: увезите означене групе из GPX фајлова +\n +\n • OsmAnd Live претплата сада укључује све OsmAnd функционалности \n GPX - погодно за извоз у ЈОСМ и друге ОСМ уређиваче. ОСЦ - погодно за извоз у OpenStreetMap. @@ -2571,13 +2578,13 @@ Страна доступна само док сте на мрежи. Отворити је у веб читачу? Кеш слика Обриши историјат претрага - Преузми слике + Прикажи слике Карте путовања Wikivoyage Чланак уклоњен Претрага: држава, град, покрајина Читај - Сачувани чланци + Забележени чланци Истражи Садржаји Резултат @@ -2717,7 +2724,7 @@ Прикажи дијалог међувремена Задато име брзе радње је већ у употреби, промењено је у %1$s да би се избегло дуплирање. Већ постоји брза радња са овим именом - На основу чланака који сте читали, предлажено је да скинете следеће карте: + На основу чланака који сте забележили, предложено је да скинете следеће карте: Са овим додатком, функције приступачности из уређаја могу да се користе директно у OsmAnd-у. Може да управља брзином изговора синтетизованих гласова, коришћење трекбола за контролу зумирања, изговара текст, нпр. да Вам каже положај. Оптимизуј редослед успутних одредишта ка крајњем одредишту. Глобални преглед карти на мобилним уређајима & навигација за ОСМ карте на мрежи и ван мреже @@ -2799,11 +2806,11 @@ Извештај за Унапред постављено име Фајл %1$s не садржи пролазне тачке, да га увезем као путању? - Туристички преглед (контраст и детаљи) + Туристички преглед Сакриј цео опис Прикажи цео опис Стил за речно и морско навођење. Главне одлике: бове, светионици, речни и морски путеви, луке, поморске ознаке, изобате. - Стил за скијање. Главне одлике: исцртавање стаза, ваздушних путева и остали скијашких објеката на лак начин. Остали објекти на карти мање одвраћају пажњу. + Стил за скијање. Главне одлике: исцртавање стаза, ски лифтова и осталих скијашких објеката на лак начин. Остали објекти на карти мање одвраћају пажњу. Једноставан стил са контрастом за навођење у колима. Пријатан за очи ноћу. Главне одлике: изохипсе, наранџасти путеви са добрим контрастом, остали објекти на карти мање одвраћају пажњу. Контрастни стил примарно намењен шетању, пешачењу, трекингу и бициклизму у природи. Добра читљивост у тешким спољним условима осветљености. Главне одлике: добар контраст за путеве и природне објекте, различити типови путања, изохипсе са напредним подешавањима, више детаља на истим нивоима увећања у односу на основни стил. Опција интегритета подлоге Вам омогућава да разликујете путеве са различитим квалитетима подлога. Нема ноћног режима. Стари \"Мапник\" стил исцртавања. Главне одлике: боје су сличне као у \"Мапник\" стилу. @@ -2855,4 +2862,11 @@ Да видите положај, пратите везу ка веб локацији %1$s или Андроид intent везу %2$s Нема доступног гласовног навођења, идите у \"Поставке\" → \"Опште\" → \"Гласовно навођење\" и одаберите или скините пакет са гласовима. Број редова на табли %1$s + Забележи + Постојеће векторске карте за овај положај. +\n\t +\n\tДа бисте их користили, идите на \'Мени\' → \'Подеси карту\' → \'Извор карте…\' → \'Векторске карте ван мреже\'. + OsmAnd навођење ван мреже је експериментална функционалност и не ради за удаљености преко 20 km. +\n +\nНавођење привремено пребачено на мрежни CloudMade сервис. diff --git a/OsmAnd/res/values-zh-rTW/phrases.xml b/OsmAnd/res/values-zh-rTW/phrases.xml index dd9c63b31e..8f25eecbc8 100644 --- a/OsmAnd/res/values-zh-rTW/phrases.xml +++ b/OsmAnd/res/values-zh-rTW/phrases.xml @@ -894,10 +894,10 @@ 地區性自行車網路節點 本地自行車網路節點 - 國際步行網路節點 - 全國步行網路節點 - 地區性步行網路節點 - 本地步行網路節點 + 國際登山健行網路節點 + 全國登山健行網路節點 + 地區性登山健行網路節點 + 本地登山健行網路節點 營業時間 採收時間 @@ -925,14 +925,14 @@ 費用 已遺棄的物件 - 國際徒步登山路線 - 全國徒步登山路線 - 地區性徒步登山路線 - 當地徒步登山路線 - 徒步旅行路線參考 + 國際登山健行登山路線 + 全國登山健行路線 + 地區性登山健行路線 + 當地登山健行路線 + 登山健行路線參考 - 徒步旅行/自行車網路節點 - 徒步路線 + 登山健行/自行車網路節點 + 登山健行路線 交通執法 私人通路 禁止通行 @@ -1275,7 +1275,7 @@ 小徑 資訊終端機 路線標識 - 徒步旅行地圖 + 登山健行地圖 資訊標誌:大自然 錨泊點 @@ -3877,4 +3877,10 @@ 最低點 平均坡度 - +檢查站類型 + +登山健行檢查站 + 程式碼 + 筆記電腦 + 電子 + diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 97d0817958..21c37bd950 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -3019,8 +3019,16 @@ 按照類型 輕點在地圖上的標記,將其移動到活動標記的頂端,而不用打開內容選單。 變更搜尋的查詢。 - "\\022 -\n " + \\022 新的旅行選單:檢視不用網路的維基導遊文章 +\n +\n• 維基百科:嶄新的面貌、活動連結、圖片 +\n +\n• 開放式軌跡使用者介面:顯示航點群組 +\n +\n• 地圖標記:從 GPX 檔案匯入所選擇的群組,嶄新的座標輸入外觀 +\n +\n• OsmAnd Live 訂閱,現在包括了 OsmAnd 所有的功能 +\n 包括座標和所選註解資料的 GPX 檔案。 包括座標和所有註解資料的 GPX 檔案。 編輯 %1$s,合計 %2$s mBTC diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index f27d83c02e..867ba18bbf 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -1,6 +1,9 @@ + 60dp + 56dp + 4dp 64dp 32dp 20dp diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 0b19d91b22..a0fd3fada5 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -81,7 +81,7 @@ Images cache Delete search history Show images - Travel maps + Travel guides Wikivoyage Article removed Search: Country, city, province @@ -416,7 +416,7 @@ Point(s) deleted. You are going to delete %1$d point(s). Are you sure? Turns to pass on this route - Prominent points on this route + Waypoints, points of interest, named features Track Maximum speed Average speed diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java index 739fe9fe3e..b6903b0900 100644 --- a/OsmAnd/src/net/osmand/AndroidUtils.java +++ b/OsmAnd/src/net/osmand/AndroidUtils.java @@ -12,7 +12,10 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.os.IBinder; +import android.support.annotation.AttrRes; +import android.support.annotation.ColorInt; import android.support.annotation.ColorRes; +import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.content.ContextCompat; import android.text.Spannable; @@ -284,6 +287,13 @@ public class AndroidUtils { ); } + @ColorInt + public static int getColorFromAttr(@NonNull Context ctx, @AttrRes int colorAttribute) { + TypedValue typedValue = new TypedValue(); + ctx.getTheme().resolveAttribute(colorAttribute, typedValue, true); + return typedValue.data; + } + public static int resolveAttribute(Context ctx, int attribute) { TypedValue outValue = new TypedValue(); ctx.getTheme().resolveAttribute(attribute, outValue, true); diff --git a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java index 690f4637e1..fb843bbf35 100644 --- a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java +++ b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java @@ -761,6 +761,10 @@ public class GpxSelectionHelper { public int getColor() { return color; } + + public void setColor(int color) { + this.color = color; + } } public static class GpxDisplayItem { diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java index a09e58b937..4c11d9f79d 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java @@ -1,5 +1,43 @@ package net.osmand.plus.download.ui; +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; + +import net.osmand.AndroidUtils; +import net.osmand.Collator; +import net.osmand.IndexConstants; +import net.osmand.OsmAndCollator; +import net.osmand.map.ITileSource; +import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuAdapter.ItemClickListener; +import net.osmand.plus.ContextMenuItem; +import net.osmand.plus.IconsCache; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; +import net.osmand.plus.R; +import net.osmand.plus.activities.LocalIndexHelper; +import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType; +import net.osmand.plus.activities.LocalIndexInfo; +import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; +import net.osmand.plus.base.OsmandExpandableListFragment; +import net.osmand.plus.dialogs.DirectionsDialogs; +import net.osmand.plus.download.DownloadActivity; +import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents; +import net.osmand.plus.download.IndexItem; +import net.osmand.plus.helpers.FileNameTranslationHelper; +import net.osmand.plus.inapp.InAppPurchaseHelper; +import net.osmand.plus.resources.IncrementalChangesManager; +import net.osmand.util.Algorithms; import android.app.Activity; import android.content.DialogInterface; import android.content.res.Resources; @@ -36,44 +74,6 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import net.osmand.AndroidUtils; -import net.osmand.IndexConstants; -import net.osmand.map.ITileSource; -import net.osmand.plus.ContextMenuAdapter; -import net.osmand.plus.ContextMenuAdapter.ItemClickListener; -import net.osmand.plus.ContextMenuItem; -import net.osmand.plus.IconsCache; -import net.osmand.plus.OsmandApplication; -import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.R; -import net.osmand.plus.activities.LocalIndexHelper; -import net.osmand.plus.activities.LocalIndexHelper.LocalIndexType; -import net.osmand.plus.activities.LocalIndexInfo; -import net.osmand.plus.activities.OsmandBaseExpandableListAdapter; -import net.osmand.plus.base.OsmandExpandableListFragment; -import net.osmand.plus.dialogs.DirectionsDialogs; -import net.osmand.plus.download.DownloadActivity; -import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents; -import net.osmand.plus.download.IndexItem; -import net.osmand.plus.helpers.FileNameTranslationHelper; -import net.osmand.plus.inapp.InAppPurchaseHelper; -import net.osmand.plus.resources.IncrementalChangesManager; -import net.osmand.util.Algorithms; - -import java.io.File; -import java.text.Collator; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Pattern; - public class LocalIndexesFragment extends OsmandExpandableListFragment implements DownloadEvents { public static final Pattern ILLEGAL_FILE_NAME_CHARACTERS = Pattern.compile("[?:\"*|/\\<>]"); @@ -851,7 +851,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement } public void sortData() { - final Collator cl = Collator.getInstance(); + final Collator cl = OsmAndCollator.primaryCollator(); for (List i : data.values()) { Collections.sort(i, new Comparator() { @Override diff --git a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java index b4f2176ab8..ae13ea412d 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/UpdatesIndexFragment.java @@ -1,8 +1,24 @@ package net.osmand.plus.download.ui; +import java.util.Comparator; +import java.util.List; + +import net.osmand.Collator; +import net.osmand.OsmAndCollator; +import net.osmand.map.OsmandRegions; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandSettings; +import net.osmand.plus.R; +import net.osmand.plus.base.OsmAndListFragment; +import net.osmand.plus.chooseplan.ChoosePlanDialogFragment; +import net.osmand.plus.download.DownloadActivity; +import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents; +import net.osmand.plus.download.DownloadResources; +import net.osmand.plus.download.IndexItem; +import net.osmand.plus.inapp.InAppPurchaseHelper; +import net.osmand.util.Algorithms; import android.app.Activity; import android.content.Context; -import android.icu.text.Collator; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBar; @@ -16,21 +32,6 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; -import net.osmand.map.OsmandRegions; -import net.osmand.plus.OsmandApplication; -import net.osmand.plus.OsmandSettings; -import net.osmand.plus.R; -import net.osmand.plus.base.OsmAndListFragment; -import net.osmand.plus.chooseplan.ChoosePlanDialogFragment; -import net.osmand.plus.download.DownloadActivity; -import net.osmand.plus.download.DownloadIndexesThread.DownloadEvents; -import net.osmand.plus.download.DownloadResources; -import net.osmand.plus.download.IndexItem; -import net.osmand.plus.inapp.InAppPurchaseHelper; -import net.osmand.util.Algorithms; - -import java.util.Comparator; -import java.util.List; public class UpdatesIndexFragment extends OsmAndListFragment implements DownloadEvents { private static final int RELOAD_ID = 5; @@ -94,7 +95,7 @@ public class UpdatesIndexFragment extends OsmAndListFragment implements Download OsmandSettings settings = getMyApplication().getSettings(); listAdapter = new UpdateIndexAdapter(a, R.layout.download_index_list_item, indexItems, !InAppPurchaseHelper.isSubscribedToLiveUpdates(getMyApplication()) || settings.SHOULD_SHOW_FREE_VERSION_BANNER.get()); - final Collator collator = Collator.getInstance(); + final Collator collator = OsmAndCollator.primaryCollator(); listAdapter.sort(new Comparator() { @Override public int compare(IndexItem indexItem, IndexItem indexItem2) { diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java index c092c253fc..bf91a52fb9 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/builders/AmenityMenuBuilder.java @@ -56,6 +56,8 @@ import java.util.Map; public class AmenityMenuBuilder extends MenuBuilder { + private static final String WIKI_LINK = ".wikipedia.org/w"; + private final Amenity amenity; public AmenityMenuBuilder(MapActivity mapActivity, final Amenity amenity) { @@ -100,7 +102,12 @@ public class AmenityMenuBuilder extends MenuBuilder { ll.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - String textToCopy = !Algorithms.isEmpty(textPrefix) ? textPrefix + ": " + txt : txt; + String textToCopy; + if (txt.contains(WIKI_LINK)) { + textToCopy = txt; + } else { + textToCopy = !Algorithms.isEmpty(textPrefix) ? textPrefix + ": " + txt : txt; + } copyToClipboard(textToCopy, view.getContext()); return true; } @@ -293,7 +300,7 @@ public class AmenityMenuBuilder extends MenuBuilder { ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (text.contains(".wikipedia.org/w")) { + if (text.contains(WIKI_LINK)) { if (Version.isPaidVersion(app)) { WikiArticleHelper wikiArticleHelper = new WikiArticleHelper(mapActivity, !light); wikiArticleHelper.showWikiArticle(amenity.getLocation(), text); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java index 1123df3ac2..ca7a2db8f2 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java @@ -130,6 +130,11 @@ public class AmenityMenuController extends MenuController { return 0; } + @Override + public boolean isWaypointButtonEnabled() { + return marker == null; + } + @Override public boolean displayDistanceDirection() { return true; diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java index fe1ecd810f..ead498bb4d 100644 --- a/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/mapmarkers/adapters/MapMarkersGroupsAdapter.java @@ -447,7 +447,7 @@ public class MapMarkersGroupsAdapter extends RecyclerView.Adapter groups = new ArrayList<>(); Filter myFilter; private Set filter; + Comparator comparator; + + PointGPXAdapter() { + final Collator collator = Collator.getInstance(); + collator.setStrength(Collator.SECONDARY); + comparator = new Comparator() { + @Override + public int compare(String s1, String s2) { + return collator.compare(s1, s2); + } + }; + } public void synchronizeGroups(@NonNull List gs) { itemGroups.clear(); @@ -680,21 +708,81 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements continue; } boolean empty = true; + List displayItems = g.getModifiableList(); + Map> itemsMap = new HashMap<>(); + for (GpxDisplayItem item : displayItems) { + String category; + if (item.locationStart != null && g.getType() == GpxDisplayItemType.TRACK_POINTS) { + category = item.locationStart.category; + if (TextUtils.isEmpty(category)) { + category = ""; + } + } else { + category = ""; + } + List items = itemsMap.get(category); + if (items == null) { + items = new ArrayList<>(); + itemsMap.put(category, items); + } + items.add(item); + } if (flt == null) { empty = false; - itemGroups.put(g, new ArrayList<>(g.getModifiableList())); } else { - ArrayList list = new ArrayList<>(); - for (GpxDisplayItem i : g.getModifiableList()) { - if (flt.contains(i)) { - list.add(i); + Map> itemsMapFiltered = new HashMap<>(); + for (Entry> e : itemsMap.entrySet()) { + String category = e.getKey(); + List items = e.getValue(); + if (flt.contains(category)) { + itemsMapFiltered.put(category, items); empty = false; + } else { + for (GpxDisplayItem i : items) { + if (flt.contains(i)) { + List itemsFiltered = itemsMapFiltered.get(category); + if (itemsFiltered == null) { + itemsFiltered = new ArrayList<>(); + itemsMapFiltered.put(category, itemsFiltered); + } + itemsFiltered.add(i); + empty = false; + } + } } } - itemGroups.put(g, list); + itemsMap = itemsMapFiltered; } if (!empty) { - groups.add(g); + List items = new ArrayList<>(); + List categories = new ArrayList<>(itemsMap.keySet()); + Collections.sort(categories, comparator); + if (g.getType() == GpxDisplayItemType.TRACK_POINTS) { + itemGroups.put(g, items); + groups.add(g); + } + for (String category : categories) { + List values = itemsMap.get(category); + if (g.getType() == GpxDisplayItemType.TRACK_POINTS) { + GpxDisplayGroup headerGroup = g.cloneInstance(); + headerGroup.setType(GpxDisplayItemType.TRACK_POINTS); + headerGroup.setName(category); + for (GpxDisplayItem i : values) { + if (i.locationStart != null && i.locationStart.getColor() != 0) { + headerGroup.setColor(i.locationStart.getColor(g.getColor())); + break; + } + } + itemGroups.put(headerGroup, values); + groups.add(headerGroup); + } else { + items.addAll(values); + } + } + if (items.size() > 0) { + itemGroups.put(g, items); + groups.add(g); + } } } notifyDataSetChanged(); @@ -757,23 +845,94 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View row = convertView; final GpxDisplayGroup group = getGroup(groupPosition); - boolean checkBox = row != null && row.findViewById(R.id.toggle_item) instanceof CheckBox; - boolean same = (selectionMode && checkBox) || (!selectionMode && !checkBox); - if (row == null || !same) { + IconsCache iconsCache = app.getIconsCache(); + if (row == null) { LayoutInflater inflater = getLayoutInflater(); - row = inflater.inflate(R.layout.wpt_list_item_category, parent, false); + row = inflater.inflate(R.layout.wpt_list_item, parent, false); + ImageView options = (ImageView) row.findViewById(R.id.options); + options.setFocusable(false); + options.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white)); } - row.setOnClickListener(null); - row.findViewById(R.id.group_divider).setVisibility(groupPosition == 0 ? View.GONE : View.VISIBLE); - TextView label = (TextView) row.findViewById(R.id.category_name); - TextView description = (TextView) row.findViewById(R.id.category_desc); - if (group.getType() == GpxDisplayItemType.TRACK_POINTS) { - label.setText(getString(R.string.waypoints)); - description.setText(getString(R.string.track_points_category_name)); + ImageView icon = (ImageView) row.findViewById(R.id.icon); + TextView groupTitle = (TextView) row.findViewById(R.id.bold_label); + TextView title = (TextView) row.findViewById(R.id.label); + TextViewEx button = (TextViewEx) row.findViewById(R.id.button); + TextView description = (TextView) row.findViewById(R.id.description); + ImageView expandImage = (ImageView) row.findViewById(R.id.expand_image); + ImageView options = (ImageView) row.findViewById(R.id.options); + + button.setVisibility(View.GONE); + + if (groupPosition == 0 || group.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS) { + icon.setVisibility(View.GONE); + options.setVisibility(View.GONE); + expandImage.setVisibility(View.GONE); + title.setVisibility(View.GONE); + groupTitle.setVisibility(View.VISIBLE); + description.setVisibility(View.VISIBLE); + row.findViewById(R.id.divider).setVisibility(View.GONE); + row.findViewById(R.id.list_divider).setVisibility(View.GONE); + row.setOnClickListener(null); + if (group.getType() == GpxDisplayItemType.TRACK_POINTS) { + groupTitle.setText(getString(R.string.waypoints)); + description.setText(getString(R.string.track_points_category_name)); + } else { + groupTitle.setText(getString(R.string.route_points)); + description.setText(getString(R.string.route_points_category_name)); + } } else { - label.setText(getString(R.string.route_points)); - description.setText(getString(R.string.route_points_category_name)); + icon.setVisibility(View.VISIBLE); + boolean expanded = listView.isGroupExpanded(groupPosition); + expandImage.setImageDrawable(iconsCache.getThemedIcon( + expanded ? R.drawable.ic_action_arrow_up : R.drawable.ic_action_arrow_down)); + expandImage.setVisibility(View.VISIBLE); + description.setVisibility(View.GONE); + expandImage.setVisibility(View.VISIBLE); + options.setVisibility(View.VISIBLE); + row.findViewById(R.id.divider).setVisibility(View.VISIBLE); + row.findViewById(R.id.list_divider).setVisibility(View.GONE); + + row.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (listView.isGroupExpanded(groupPosition)) { + listView.collapseGroup(groupPosition); + } else { + listView.expandGroup(groupPosition); + } + } + }); + + title.setVisibility(View.VISIBLE); + groupTitle.setVisibility(View.GONE); + + String categoryName = group.getName(); + if (TextUtils.isEmpty(categoryName)) { + categoryName = getString(R.string.waypoints); + } + SpannableStringBuilder text = new SpannableStringBuilder(categoryName).append(" — ").append(String.valueOf(getChildrenCount(groupPosition))); + text.setSpan(new ForegroundColorSpan(AndroidUtils.getColorFromAttr(app, R.attr.wikivoyage_primary_text_color)), + 0, categoryName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + text.setSpan(new ForegroundColorSpan(ContextCompat.getColor(app, R.color.wikivoyage_secondary_text)), + categoryName.length() + 1, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + title.setText(text); + + int groupColor = group.getColor(); + if (groupColor == 0) { + groupColor = ContextCompat.getColor(app, R.color.gpx_color_point); + } + icon.setImageDrawable(app.getIconsCache().getPaintedIcon(R.drawable.ic_action_folder, groupColor | 0xff000000)); + options.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Activity activity = getActivity(); + if (activity != null) { + // todo + } + } + }); } + row.findViewById(R.id.group_divider).setVisibility(group.getType() == GpxDisplayItemType.TRACK_ROUTE_POINTS ? View.VISIBLE : View.GONE); final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item); if (selectionMode) { @@ -785,19 +944,17 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements public void onClick(View v) { List items = itemGroups.get(group); if (ch.isChecked()) { - selectedGroups.add(groupPosition); - if (items != null) { - Set set = selectedItems.get(group.getType()); - if (set != null) { - set.addAll(items); - } else { - set = new LinkedHashSet<>(items); - selectedItems.put(group.getType(), set); - } + if (groupPosition == 0) { + setTrackPointsSelection(true); + } else { + setGroupSelection(items, groupPosition, true); } } else { - selectedGroups.remove(groupPosition); - selectedItems.remove(group.getType()); + if (groupPosition == 0) { + setTrackPointsSelection(false); + } else { + setGroupSelection(items, groupPosition, false); + } } adapter.notifyDataSetInvalidated(); updateSelectionMode(actionMode); @@ -806,19 +963,52 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements } else { ch.setVisibility(View.GONE); } - row.findViewById(R.id.category_icon).setVisibility(View.GONE); - row.findViewById(R.id.options).setVisibility(View.GONE); return row; } + private void setTrackPointsSelection(boolean select) { + if (groups.size() > 1) { + setGroupSelection(null, 0, select); + for (int i = 1; i < groups.size(); i++) { + GpxDisplayGroup g = groups.get(i); + if (g.getType() == GpxDisplayItemType.TRACK_POINTS) { + setGroupSelection(itemGroups.get(g), i, select); + } + } + } + } + + private void setGroupSelection(List items, int groupPosition, boolean select) { + GpxDisplayGroup group = groups.get(groupPosition); + if (select) { + selectedGroups.add(groupPosition); + if (items != null) { + Set set = selectedItems.get(group.getType()); + if (set != null) { + set.addAll(items); + } else { + set = new LinkedHashSet<>(items); + selectedItems.put(group.getType(), set); + } + } + } else { + selectedGroups.remove(groupPosition); + selectedItems.remove(group.getType()); + } + } + @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { View row = convertView; + IconsCache iconsCache = getMyApplication().getIconsCache(); if (row == null) { LayoutInflater inflater = getLayoutInflater(); row = inflater.inflate(R.layout.wpt_list_item, parent, false); + ImageView options = (ImageView) row.findViewById(R.id.options); + options.setFocusable(false); + options.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white)); } if (childPosition == 0) { row.findViewById(R.id.divider).setVisibility(View.VISIBLE); @@ -832,76 +1022,29 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements TextView title = (TextView) row.findViewById(R.id.label); TextViewEx button = (TextViewEx) row.findViewById(R.id.button); TextView description = (TextView) row.findViewById(R.id.description); - - final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition); - boolean isWpt = gpxItem != null && gpxItem.group.getType() == GpxDisplayItemType.TRACK_POINTS; + ImageView expandImage = (ImageView) row.findViewById(R.id.expand_image); ImageView options = (ImageView) row.findViewById(R.id.options); - if (isWpt) { - title.setVisibility(View.VISIBLE); - description.setVisibility(View.VISIBLE); - button.setVisibility(View.GONE); - options.setFocusable(false); - options.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon( - R.drawable.ic_overflow_menu_white)); - options.setVisibility(View.VISIBLE); - options.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - IconsCache iconsCache = getMyApplication().getIconsCache(); - Activity activity = getActivity(); - if (activity != null) { - popupItemMenu = new PopupMenu(activity, v); - DirectionsDialogs.setupPopUpMenuIcon(popupItemMenu); - - MenuItem menuItem = popupItemMenu.getMenu().add(R.string.shared_string_edit).setIcon(iconsCache.getThemedIcon(R.drawable.ic_action_edit_dark)); - menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem mItem) { - final OsmandSettings settings = app.getSettings(); - LatLon location = new LatLon(gpxItem.locationStart.lat, gpxItem.locationStart.lon); - if (gpxItem.group.getGpx() != null) { - app.getSelectedGpxHelper().setGpxFileToDisplay(gpxItem.group.getGpx()); - } - settings.setMapLocationToShow(location.getLatitude(), location.getLongitude(), - settings.getLastKnownMapZoom(), - new PointDescription(PointDescription.POINT_TYPE_WPT, gpxItem.name), - false, - gpxItem.locationStart); - settings.setEditObjectToShow(); - - MapActivity.launchMapActivityMoveToTop(getActivity()); - return true; - } - }); - popupItemMenu.show(); - } - } - }); - int groupColor = gpxItem.group.getColor(); - if (gpxItem.locationStart != null) { - groupColor = gpxItem.locationStart.getColor(groupColor); + final GpxDisplayGroup group = getGroup(groupPosition); + final GpxDisplayItem gpxItem = getChild(groupPosition, childPosition); + final WptPt wpt = gpxItem != null ? gpxItem.locationStart : null; + boolean isWaypoint = gpxItem != null && group.getType() == GpxDisplayItemType.TRACK_POINTS; + if (isWaypoint) { + int groupColor = group.getColor(); + if (wpt != null) { + groupColor = wpt.getColor(groupColor); } if (groupColor == 0) { groupColor = ContextCompat.getColor(app, R.color.gpx_color_point); } - icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), groupColor, false)); - } else { - boolean showAll = gpxItem == null; - title.setVisibility(showAll ? View.GONE : View.VISIBLE); - description.setVisibility(showAll ? View.GONE : View.VISIBLE); - button.setVisibility(!showAll ? View.GONE : View.VISIBLE); - if (showAll) { - int count = itemGroups.get(groups.get(groupPosition)).size(); - button.setText(getString(R.string.shared_string_show_all) + " - " + count); - icon.setImageDrawable(null); - } else { - icon.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark)); - } + title.setVisibility(View.VISIBLE); + button.setVisibility(View.GONE); + + expandImage.setVisibility(View.GONE); options.setVisibility(View.GONE); - } - if (gpxItem != null) { + options.setOnClickListener(null); + title.setText(gpxItem.name); if (!Algorithms.isEmpty(gpxItem.description)) { description.setText(gpxItem.description); @@ -909,12 +1052,36 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements } else { description.setVisibility(View.GONE); } + icon.setImageDrawable(FavoriteImageDrawable.getOrCreate(getActivity(), groupColor, false)); + + } else { + boolean showAll = gpxItem == null; + title.setVisibility(showAll ? View.GONE : View.VISIBLE); + description.setVisibility(showAll ? View.GONE : View.VISIBLE); + button.setVisibility(!showAll ? View.GONE : View.VISIBLE); + expandImage.setVisibility(View.GONE); + options.setVisibility(View.GONE); + + if (showAll) { + int count = itemGroups.get(groups.get(groupPosition)).size(); + button.setText(getString(R.string.shared_string_show_all) + " - " + count); + icon.setImageDrawable(null); + } else { + title.setText(gpxItem.name); + if (!Algorithms.isEmpty(gpxItem.description)) { + description.setText(gpxItem.description); + description.setVisibility(View.VISIBLE); + } else { + description.setVisibility(View.GONE); + } + icon.setImageDrawable(app.getIconsCache().getThemedIcon(R.drawable.ic_action_marker_dark)); + } } final CheckBox ch = (CheckBox) row.findViewById(R.id.toggle_item); if (selectionMode && gpxItem != null) { ch.setVisibility(View.VISIBLE); - ch.setChecked(selectedItems.get(gpxItem.group.getType()) != null && selectedItems.get(gpxItem.group.getType()).contains(gpxItem)); + ch.setChecked(selectedItems.get(group.getType()) != null && selectedItems.get(group.getType()).contains(gpxItem)); row.findViewById(R.id.icon).setVisibility(View.GONE); options.setVisibility(View.GONE); ch.setOnClickListener(new View.OnClickListener() { @@ -922,16 +1089,16 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements @Override public void onClick(View v) { if (ch.isChecked()) { - Set set = selectedItems.get(gpxItem.group.getType()); + Set set = selectedItems.get(group.getType()); if (set != null) { set.add(gpxItem); } else { set = new LinkedHashSet<>(); set.add(gpxItem); - selectedItems.put(gpxItem.group.getType(), set); + selectedItems.put(group.getType(), set); } } else { - Set set = selectedItems.get(gpxItem.group.getType()); + Set set = selectedItems.get(group.getType()); if (set != null) { set.remove(gpxItem); } @@ -979,6 +1146,8 @@ public class TrackPointFragment extends OsmandExpandableListFragment implements for (GpxDisplayItem i : g.getModifiableList()) { if (i.name.toLowerCase().contains(cs)) { filter.add(i); + } else if (i.locationStart != null && cs.equals(i.locationStart.category)) { + filter.add(i.locationStart.category); } } } diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java index 2623cc5907..13b807e514 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/article/WikivoyageArticleNavigationFragment.java @@ -100,7 +100,7 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { WikivoyageSearchResult articleItem = listAdapter.getArticleItem(groupPosition, childPosition); - sendResults(articleItem.getCityId()); + sendResults(articleItem.getTripId()); dismiss(); return true; } @@ -109,10 +109,10 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { WikivoyageSearchResult articleItem = (WikivoyageSearchResult) listAdapter.getGroup(groupPosition); - if (articleItem.getCityId() == UNDEFINED) { + if (articleItem.getTripId() == UNDEFINED) { Toast.makeText(getContext(), R.string.wiki_article_not_found, Toast.LENGTH_LONG).show(); } else { - sendResults(articleItem.getCityId()); + sendResults(articleItem.getTripId()); dismiss(); } return true; @@ -235,7 +235,7 @@ public class WikivoyageArticleNavigationFragment extends MenuBottomSheetDialogFr boolean isLastChild, View convertView, ViewGroup parent) { WikivoyageSearchResult articleItem = getArticleItem(groupPosition, childPosition); String childTitle = articleItem.getArticleTitles().get(0); - boolean selected = cityId == articleItem.getCityId() || parentsList.contains(childTitle); + boolean selected = cityId == articleItem.getTripId() || parentsList.contains(childTitle); if (convertView == null) { convertView = LayoutInflater.from(context) diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java index 36b513f2a9..b067031273 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelArticle.java @@ -24,7 +24,7 @@ public class TravelArticle { double lon; String imageTitle; GPXFile gpxFile; - long cityId; + long tripId; long originalId; String lang; String contentsJson; @@ -62,8 +62,8 @@ public class TravelArticle { return gpxFile; } - public long getCityId() { - return cityId; + public long getTripId() { + return tripId; } public long getOriginalId() { diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java index 2f7c71a784..ab8b849d6b 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelDbHelper.java @@ -3,7 +3,6 @@ package net.osmand.plus.wikivoyage.data; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; - import net.osmand.Collator; import net.osmand.CollatorStringMatcher; import net.osmand.CollatorStringMatcher.StringMatcherMode; @@ -33,9 +32,11 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Random; import java.util.Set; import gnu.trove.map.hash.TLongObjectHashMap; @@ -44,10 +45,11 @@ public class TravelDbHelper { private static final Log LOG = PlatformUtil.getLog(TravelDbHelper.class); - private static final String ARTICLES_TABLE_NAME = "wikivoyage_articles"; + private static final String ARTICLES_TABLE_NAME = "travel_articles"; private static final String POPULAR_TABLE_NAME = "popular_articles"; private static final String ARTICLES_COL_ID = "article_id"; private static final String ARTICLES_POP_INDEX = "popularity_index"; + private static final String ARTICLES_POP_ORDER = "order_index"; private static final String ARTICLES_COL_TITLE = "title"; private static final String ARTICLES_COL_CONTENT = "content_gz"; private static final String ARTICLES_COL_IS_PART_OF = "is_part_of"; @@ -55,7 +57,7 @@ public class TravelDbHelper { private static final String ARTICLES_COL_LON = "lon"; private static final String ARTICLES_COL_IMAGE_TITLE = "image_title"; private static final String ARTICLES_COL_GPX_GZ = "gpx_gz"; - private static final String ARTICLES_COL_CITY_ID = "city_id"; + private static final String ARTICLES_COL_TRIP_ID = "trip_id"; private static final String ARTICLES_COL_ORIGINAL_ID = "original_id"; private static final String ARTICLES_COL_LANG = "lang"; private static final String ARTICLES_COL_CONTENTS_JSON = "contents_json"; @@ -70,7 +72,7 @@ public class TravelDbHelper { ARTICLES_COL_LON + ", " + ARTICLES_COL_IMAGE_TITLE + ", " + ARTICLES_COL_GPX_GZ + ", " + - ARTICLES_COL_CITY_ID + ", " + + ARTICLES_COL_TRIP_ID + ", " + ARTICLES_COL_ORIGINAL_ID + ", " + ARTICLES_COL_LANG + ", " + ARTICLES_COL_CONTENTS_JSON + ", " + @@ -81,14 +83,15 @@ public class TravelDbHelper { ARTICLES_COL_TITLE + ", " + ARTICLES_COL_LAT + ", " + ARTICLES_COL_LON + ", " + - ARTICLES_COL_CITY_ID + ", " + + ARTICLES_COL_TRIP_ID + ", " + ARTICLES_COL_LANG + ", " + + ARTICLES_POP_ORDER + ", " + ARTICLES_POP_INDEX + " FROM " + POPULAR_TABLE_NAME; - private static final String SEARCH_TABLE_NAME = "wikivoyage_search"; + private static final String SEARCH_TABLE_NAME = "travel_search"; private static final String SEARCH_COL_SEARCH_TERM = "search_term"; - private static final String SEARCH_COL_CITY_ID = "city_id"; + private static final String SEARCH_COL_trip_id = "trip_id"; private static final String SEARCH_COL_ARTICLE_TITLE = "article_title"; private static final String SEARCH_COL_LANG = "lang"; @@ -194,9 +197,9 @@ public class TravelDbHelper { String[] queries = searchQuery.replace('_', ' ').replace('/', ' ').split(" "); if (conn != null) { List params = new ArrayList<>(); - String query = "SELECT distinct wa.city_id, wa.title, wa.lang, wa.is_part_of, wa.image_title " - + "FROM wikivoyage_articles wa WHERE wa.city_id in " - + " (SELECT city_id FROM wikivoyage_search WHERE search_term LIKE"; + String query = "SELECT distinct wa.trip_id, wa.title, wa.lang, wa.is_part_of, wa.image_title " + + "FROM travel_articles wa WHERE wa.trip_id in " + + " (SELECT trip_id FROM travel_search WHERE search_term LIKE"; for (String q : queries) { if (q.trim().length() > 0) { if (params.size() > 5) { @@ -204,7 +207,7 @@ public class TravelDbHelper { break; } if (params.size() > 0) { - query += " AND city_id IN (SELECT city_id FROM wikivoyage_search WHERE search_term LIKE ?) "; + query += " AND trip_id IN (SELECT trip_id FROM travel_search WHERE search_term LIKE ?) "; } else { query += "?"; } @@ -217,7 +220,7 @@ public class TravelDbHelper { if (cursor.moveToFirst()) { do { WikivoyageSearchResult rs = new WikivoyageSearchResult(); - rs.cityId = cursor.getLong(0); + rs.tripId = cursor.getLong(0); rs.articleTitles.add(cursor.getString(1)); rs.langs.add(cursor.getString(2)); rs.isPartOf.add(cursor.getString(3)); @@ -242,45 +245,107 @@ public class TravelDbHelper { @NonNull public List loadPopularArticles() { - List res = new ArrayList<>(); String language = application.getLanguage(); - List popReadArticles = new ArrayList<>(); SQLiteConnection conn = openConnection(); if (conn == null) { - return res; + popularArticles = new ArrayList(); + return popularArticles; } String LANG_WHERE = " WHERE " + ARTICLES_COL_LANG + " = '" + language + "'"; SQLiteCursor cursor = conn.rawQuery(POP_ARTICLES_TABLE_SELECT + LANG_WHERE, null); + // read popular articles + List popReadArticlesOrder = new ArrayList<>(); + List popReadArticlesLocation = new ArrayList<>(); + List popReadArticles = new ArrayList<>(); if (cursor.moveToFirst()) { do { PopularArticle travelArticle = PopularArticle.readArticle(cursor); if (language.equals(travelArticle.lang)) { - popReadArticles.add(travelArticle); + if(travelArticle.order != -1) { + popReadArticlesOrder.add(travelArticle); + } if(travelArticle.isLocationSpecified()) { + popReadArticlesLocation.add(travelArticle); + } else { + popReadArticles.add(travelArticle); + } } } while (cursor.moveToNext()); } cursor.close(); - sortPopArticlesByDistance(popReadArticles); + // shuffle, sort & mix + Random rm = new Random(); + Collections.shuffle(popReadArticles, rm); + Collections.sort(popReadArticlesOrder, new Comparator() { + @Override + public int compare(PopularArticle article1, PopularArticle article2) { + return Integer.compare(article1.order, article2.order); + } + }); + sortPopArticlesByDistance(popReadArticlesLocation); + List resArticleOrder = new ArrayList(); + Iterator orderIterator = popReadArticlesOrder.iterator(); + Iterator locIterator = popReadArticlesLocation.iterator(); + Iterator otherIterator = popReadArticles.iterator(); + int initialLocationArticles = 2; + for (int i = 0; i < POPULAR_LIMIT; i++) { + PopularArticle pa = null; + if(orderIterator.hasNext()) { + pa = orderIterator.next(); + } else if(initialLocationArticles-- > 0 && locIterator.hasNext()) { + // first 2 by location + pa = locIterator.next(); + } else if((!otherIterator.hasNext() || (rm.nextDouble() > 0.4)) && locIterator.hasNext()) { + // 60% case we select location iterator + pa = locIterator.next(); + } else if(otherIterator.hasNext()){ + pa = otherIterator.next(); + } + if (pa == null) { + break; + } else { + resArticleOrder.add(pa.tripId); + } + } + + + Map ts = readTravelArticles(conn, LANG_WHERE, resArticleOrder); + popularArticles = sortArticlesToInitialOrder(resArticleOrder, ts); + return popularArticles; + } + + private Map readTravelArticles(SQLiteConnection conn, String whereCondition, + List articleIds) { + SQLiteCursor cursor; StringBuilder bld = new StringBuilder(); - bld.append(ARTICLES_TABLE_SELECT).append(LANG_WHERE) - .append(" and ").append(ARTICLES_COL_CITY_ID).append(" IN ("); - for (int i = 0; i < popReadArticles.size() && i < POPULAR_LIMIT; i++) { + bld.append(ARTICLES_TABLE_SELECT).append(whereCondition) + .append(" and ").append(ARTICLES_COL_TRIP_ID).append(" IN ("); + for (int i = 0; i < articleIds.size(); i++) { if (i > 0) { bld.append(", "); } - bld.append(popReadArticles.get(i).cityId); + bld.append(articleIds.get(i)); } bld.append(")"); cursor = conn.rawQuery(bld.toString(), null); + Map ts = new HashMap(); if (cursor.moveToFirst()) { do { TravelArticle travelArticle = readArticle(cursor); - res.add(travelArticle); + ts.put(travelArticle.tripId, travelArticle); } while (cursor.moveToNext()); } cursor.close(); - sortArticlesByDistance(res); - popularArticles = res; + return ts; + } + + private List sortArticlesToInitialOrder(List resArticleOrder, Map ts) { + List res = new ArrayList<>(); + for (int i = 0; i < resArticleOrder.size(); i++) { + TravelArticle ta = ts.get(resArticleOrder.get(i)); + if(ta != null) { + res.add(ta); + } + } return res; } @@ -304,23 +369,16 @@ public class TravelDbHelper { }); } - private void sortArticlesByDistance(List list) { - Location location = application.getLocationProvider().getLastKnownLocation(); - if (location != null) { - final LatLon loc = new LatLon(location.getLatitude(), location.getLongitude()); - Collections.sort(list, new Comparator() { - @Override - public int compare(TravelArticle article1, TravelArticle article2) { - return Double.compare(MapUtils.getDistance(loc, article1.getLat(), article1.getLon()), MapUtils.getDistance(loc, article2.getLat(), article2.getLon())); - } - }); - } - } private void sortPopArticlesByDistance(List list) { Location location = application.getLocationProvider().getLastKnownLocation(); - if (location != null) { - final LatLon loc = new LatLon(location.getLatitude(), location.getLongitude()); + final LatLon loc ; + if(location == null) { + loc = application.getSettings().getLastKnownMapLocation(); + } else { + loc = new LatLon(location.getLatitude(), location.getLongitude()); + } + if (loc != null) { Collections.sort(list, new Comparator() { @Override public int compare(PopularArticle article1, PopularArticle article2) { @@ -330,12 +388,13 @@ public class TravelDbHelper { }); } } + private Collection groupSearchResultsByCityId(List res) { String baseLng = application.getLanguage(); TLongObjectHashMap wikivoyage = new TLongObjectHashMap<>(); for (WikivoyageSearchResult rs : res) { - WikivoyageSearchResult prev = wikivoyage.get(rs.cityId); + WikivoyageSearchResult prev = wikivoyage.get(rs.tripId); if (prev != null) { int insInd = prev.langs.size(); if (rs.langs.get(0).equals(baseLng)) { @@ -351,7 +410,7 @@ public class TravelDbHelper { prev.langs.add(insInd, rs.langs.get(0)); prev.isPartOf.add(insInd, rs.isPartOf.get(0)); } else { - wikivoyage.put(rs.cityId, rs); + wikivoyage.put(rs.tripId, rs); } } return wikivoyage.valueCollection(); @@ -382,20 +441,20 @@ public class TravelDbHelper { Map headerObjs = new HashMap<>(); if (conn != null) { List params = new ArrayList<>(); - StringBuilder query = new StringBuilder("SELECT a.city_id, a.title, a.lang, a.is_part_of " + - "FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? "); + StringBuilder query = new StringBuilder("SELECT a.trip_id, a.title, a.lang, a.is_part_of " + + "FROM travel_articles a WHERE is_part_of = ? and lang = ? "); params.add(title); params.add(lang); if (parts != null && parts.length > 0) { headers = new HashSet<>(Arrays.asList(parts)); headers.add(title); - query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " + - "FROM wikivoyage_articles a WHERE title = ? and lang = ? "); + query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " + + "FROM travel_articles a WHERE title = ? and lang = ? "); params.add(parts[0]); params.add(lang); for (String part : parts) { - query.append("UNION SELECT a.city_id, a.title, a.lang, a.is_part_of " + - "FROM wikivoyage_articles a WHERE is_part_of = ? and lang = ? "); + query.append("UNION SELECT a.trip_id, a.title, a.lang, a.is_part_of " + + "FROM travel_articles a WHERE is_part_of = ? and lang = ? "); params.add(part); params.add(lang); } @@ -404,7 +463,7 @@ public class TravelDbHelper { if (cursor.moveToFirst()) { do { WikivoyageSearchResult rs = new WikivoyageSearchResult(); - rs.cityId = cursor.getLong(0); + rs.tripId = cursor.getLong(0); rs.articleTitles.add(cursor.getString(1)); rs.langs.add(cursor.getString(2)); rs.isPartOf.add(cursor.getString(3)); @@ -436,7 +495,7 @@ public class TravelDbHelper { }); WikivoyageSearchResult emptyResult = new WikivoyageSearchResult(); emptyResult.articleTitles.add(header); - emptyResult.cityId = -1; + emptyResult.tripId = -1; searchResult = searchResult != null ? searchResult : emptyResult; res.put(searchResult, results); } @@ -450,7 +509,7 @@ public class TravelDbHelper { TravelArticle res = null; SQLiteConnection conn = openConnection(); if (conn != null) { - SQLiteCursor cursor = conn.rawQuery(ARTICLES_TABLE_SELECT + " WHERE " + ARTICLES_COL_CITY_ID + " = ? AND " + SQLiteCursor cursor = conn.rawQuery(ARTICLES_TABLE_SELECT + " WHERE " + ARTICLES_COL_TRIP_ID + " = ? AND " + ARTICLES_COL_LANG + " = ?", new String[]{String.valueOf(cityId), lang}); if (cursor.moveToFirst()) { res = readArticle(cursor); @@ -464,7 +523,7 @@ public class TravelDbHelper { long res = 0; SQLiteConnection conn = openConnection(); if (conn != null) { - SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_CITY_ID + " FROM " + SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_TRIP_ID + " FROM " + ARTICLES_TABLE_NAME + " WHERE " + ARTICLES_COL_TITLE + " = ? AND " + ARTICLES_COL_LANG + " = ?", new String[]{title, lang}); if (cursor.moveToFirst()) { @@ -481,7 +540,7 @@ public class TravelDbHelper { SQLiteConnection conn = openConnection(); if (conn != null) { SQLiteCursor cursor = conn.rawQuery("SELECT " + ARTICLES_COL_LANG + " FROM " + ARTICLES_TABLE_NAME - + " WHERE " + ARTICLES_COL_CITY_ID + " = ?", new String[]{String.valueOf(cityId)}); + + " WHERE " + ARTICLES_COL_TRIP_ID + " = ?", new String[]{String.valueOf(cityId)}); if (cursor.moveToFirst()) { String baseLang = application.getLanguage(); do { @@ -519,7 +578,7 @@ public class TravelDbHelper { res.lat = cursor.isNull(4) ? Double.NaN : cursor.getDouble(4); res.lon = cursor.isNull(5) ? Double.NaN : cursor.getDouble(5); res.imageTitle = cursor.getString(6); - res.cityId = cursor.getLong(8); + res.tripId = cursor.getLong(8); res.originalId = cursor.isNull(9) ? 0 : cursor.getLong(9); res.lang = cursor.getString(10); res.contentsJson = cursor.getString(11); @@ -556,10 +615,11 @@ public class TravelDbHelper { } private static class PopularArticle { - long cityId; + long tripId; String title; String lang; int popIndex; + int order; double lat; double lon; @@ -572,9 +632,10 @@ public class TravelDbHelper { res.title = cursor.getString(0); res.lat = cursor.isNull(1) ? Double.NaN : cursor.getDouble(1); res.lon = cursor.isNull(2) ? Double.NaN : cursor.getDouble(2); - res.cityId = cursor.getLong(3); + res.tripId = cursor.getLong(3); res.lang = cursor.getString(4); - res.popIndex = cursor.isNull(5) ? 0 : cursor.getInt(5); + res.order = cursor.isNull(5) ? -1 : cursor.getInt(5); + res.popIndex = cursor.isNull(6) ? 0 : cursor.getInt(6); return res; } } diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java index 74cbb38c79..cdba65ad8f 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/TravelLocalDataHelper.java @@ -62,7 +62,7 @@ public class TravelLocalDataHelper { } public void addToHistory(@NonNull TravelArticle article) { - addToHistory(article.getCityId(), article.getTitle(), article.getLang(), article.getIsPartOf()); + addToHistory(article.getTripId(), article.getTitle(), article.getLang(), article.getIsPartOf()); } public void addToHistory(long cityId, String title, String lang, String isPartOf) { @@ -98,7 +98,7 @@ public class TravelLocalDataHelper { public void addArticleToSaved(@NonNull TravelArticle article) { if (!isArticleSaved(article)) { TravelArticle saved = new TravelArticle(); - saved.cityId = article.cityId; + saved.tripId = article.tripId; saved.title = article.title; saved.lang = article.lang; saved.aggregatedPartOf = article.aggregatedPartOf; @@ -121,7 +121,7 @@ public class TravelLocalDataHelper { } public void removeArticleFromSaved(@NonNull TravelArticle article) { - TravelArticle savedArticle = getArticle(article.cityId, article.lang); + TravelArticle savedArticle = getArticle(article.tripId, article.lang); if (savedArticle != null) { savedArticles.remove(savedArticle); dbHelper.removeSavedArticle(savedArticle); @@ -130,7 +130,7 @@ public class TravelLocalDataHelper { } public boolean isArticleSaved(@NonNull TravelArticle article) { - return getArticle(article.cityId, article.lang) != null; + return getArticle(article.tripId, article.lang) != null; } private void notifySavedUpdated() { @@ -142,7 +142,7 @@ public class TravelLocalDataHelper { @Nullable private TravelArticle getArticle(long cityId, String lang) { for (TravelArticle article : savedArticles) { - if (article.cityId == cityId && article.lang != null && article.lang.equals(lang)) { + if (article.tripId == cityId && article.lang != null && article.lang.equals(lang)) { return article; } } @@ -402,7 +402,7 @@ public class TravelLocalDataHelper { if (conn != null) { try { conn.execSQL("INSERT INTO " + BOOKMARKS_TABLE_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", - new Object[]{article.cityId, article.title, article.lang, + new Object[]{article.tripId, article.title, article.lang, article.aggregatedPartOf, article.imageTitle, article.content, travelBook, article.lat, article.lon}); } finally { @@ -423,7 +423,7 @@ public class TravelLocalDataHelper { " WHERE " + BOOKMARKS_COL_CITY_ID + " = ?" + " AND " + BOOKMARKS_COL_LANG + " = ?" + " AND " + BOOKMARKS_COL_TRAVEL_BOOK + " = ?", - new Object[]{article.cityId, article.lang, travelBook}); + new Object[]{article.tripId, article.lang, travelBook}); } finally { conn.close(); } @@ -454,7 +454,7 @@ public class TravelLocalDataHelper { private TravelArticle readSavedArticle(SQLiteCursor cursor) { TravelArticle res = new TravelArticle(); - res.cityId = cursor.getLong(0); + res.tripId = cursor.getLong(0); res.title = cursor.getString(1); res.lang = cursor.getString(2); res.aggregatedPartOf = cursor.getString(3); diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/data/WikivoyageSearchResult.java b/OsmAnd/src/net/osmand/plus/wikivoyage/data/WikivoyageSearchResult.java index 2188c99934..b7acea2e4b 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/data/WikivoyageSearchResult.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/data/WikivoyageSearchResult.java @@ -9,14 +9,14 @@ public class WikivoyageSearchResult { private static final int SHOW_LANGS = 3; - long cityId; + long tripId; List articleTitles = new ArrayList<>(); List langs = new ArrayList<>(); List isPartOf = new ArrayList<>(); String imageTitle; - public long getCityId() { - return cityId; + public long getTripId() { + return tripId; } public List getArticleTitles() { diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/SavedArticlesTabFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/SavedArticlesTabFragment.java index b92556d8f1..ab5ee00476 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/SavedArticlesTabFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/SavedArticlesTabFragment.java @@ -49,7 +49,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav FragmentActivity activity = getActivity(); if (activity != null) { FragmentManager fm = activity.getSupportFragmentManager(); - WikivoyageArticleDialogFragment.showInstance(app, fm, article.getCityId(), article.getLang()); + WikivoyageArticleDialogFragment.showInstance(app, fm, article.getTripId(), article.getLang()); } } }); @@ -138,7 +138,7 @@ public class SavedArticlesTabFragment extends BaseOsmAndFragment implements Trav } TravelArticle oldArticle = (TravelArticle) oldItem; TravelArticle newArticle = (TravelArticle) newItem; - return oldArticle.getCityId() == newArticle.getCityId() + return oldArticle.getTripId() == newArticle.getTripId() && oldArticle.getLang().equals(newArticle.getLang()); } return false; diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/ArticleTravelCard.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/ArticleTravelCard.java index 15749c9204..818dd1f5c8 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/ArticleTravelCard.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/ArticleTravelCard.java @@ -72,7 +72,7 @@ public class ArticleTravelCard extends BaseTravelCard { @Override public void onClick(View v) { if (fragmentManager != null) { - WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, article.getCityId(), article.getLang()); + WikivoyageArticleDialogFragment.showInstance(app, fragmentManager, article.getTripId(), article.getLang()); } } }; diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/search/WikivoyageSearchDialogFragment.java b/OsmAnd/src/net/osmand/plus/wikivoyage/search/WikivoyageSearchDialogFragment.java index ed71622482..e435a2b10b 100644 --- a/OsmAnd/src/net/osmand/plus/wikivoyage/search/WikivoyageSearchDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/wikivoyage/search/WikivoyageSearchDialogFragment.java @@ -112,7 +112,7 @@ public class WikivoyageSearchDialogFragment extends WikiBaseDialogFragment { if (item instanceof WikivoyageSearchResult) { WikivoyageSearchResult res = (WikivoyageSearchResult) item; WikivoyageArticleDialogFragment - .showInstance(fm, res.getCityId(), new ArrayList<>(res.getLangs())); + .showInstance(fm, res.getTripId(), new ArrayList<>(res.getLangs())); } else if (item instanceof WikivoyageSearchHistoryItem) { WikivoyageSearchHistoryItem historyItem = (WikivoyageSearchHistoryItem) item; WikivoyageArticleDialogFragment