diff --git a/OsmAnd/AndroidManifest.xml b/OsmAnd/AndroidManifest.xml index 088c5652ae..0f6d79cfbd 100644 --- a/OsmAnd/AndroidManifest.xml +++ b/OsmAnd/AndroidManifest.xml @@ -37,7 +37,7 @@ - + @@ -303,4 +303,4 @@ android:label="@string/osm_live"/> - \ No newline at end of file + diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward.png b/OsmAnd/res/drawable-hdpi/map_turn_forward.png new file mode 100644 index 0000000000..39eff5a3ff Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn.png new file mode 100644 index 0000000000..132513feb9 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn_small.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn_small.png new file mode 100644 index 0000000000..a8c31c4d63 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn.png new file mode 100644 index 0000000000..61e2369dd5 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn_small.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn_small.png new file mode 100644 index 0000000000..0423af6252 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_slight_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_small.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_small.png new file mode 100644 index 0000000000..4d8d5d6220 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right.png new file mode 100644 index 0000000000..bdb4615100 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right_small.png b/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right_small.png new file mode 100644 index 0000000000..371d917de1 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_forward_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_right.png b/OsmAnd/res/drawable-hdpi/map_turn_right.png new file mode 100644 index 0000000000..ebec78a249 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_right.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_right2.png b/OsmAnd/res/drawable-hdpi/map_turn_right2.png new file mode 100644 index 0000000000..d6430b5a27 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_right2.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_right2_small.png b/OsmAnd/res/drawable-hdpi/map_turn_right2_small.png new file mode 100644 index 0000000000..92f9a82bd0 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_right2_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_right_small.png b/OsmAnd/res/drawable-hdpi/map_turn_right_small.png new file mode 100644 index 0000000000..036bb98d4f Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_right_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_slight_right.png b/OsmAnd/res/drawable-hdpi/map_turn_slight_right.png new file mode 100644 index 0000000000..9e1697651e Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_slight_right.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_slight_right_small.png b/OsmAnd/res/drawable-hdpi/map_turn_slight_right_small.png new file mode 100644 index 0000000000..75bd68cc5a Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_slight_right_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_uturn.png b/OsmAnd/res/drawable-hdpi/map_turn_uturn.png new file mode 100644 index 0000000000..7731d4de0f Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_uturn.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_uturn_right.png b/OsmAnd/res/drawable-hdpi/map_turn_uturn_right.png new file mode 100644 index 0000000000..e592adb980 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_uturn_right.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_uturn_right_small.png b/OsmAnd/res/drawable-hdpi/map_turn_uturn_right_small.png new file mode 100644 index 0000000000..f7b1638d01 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-hdpi/map_turn_uturn_small.png b/OsmAnd/res/drawable-hdpi/map_turn_uturn_small.png new file mode 100644 index 0000000000..bb3725e373 Binary files /dev/null and b/OsmAnd/res/drawable-hdpi/map_turn_uturn_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward.png b/OsmAnd/res/drawable-mdpi/map_turn_forward.png new file mode 100644 index 0000000000..bdf4c96ff4 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn.png new file mode 100644 index 0000000000..baeeca9271 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn_small.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn_small.png new file mode 100644 index 0000000000..fb3fdbefa4 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn.png new file mode 100644 index 0000000000..452ecefdec Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn_small.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn_small.png new file mode 100644 index 0000000000..dfc000e52d Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_slight_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_small.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_small.png new file mode 100644 index 0000000000..d70eace6b7 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right.png new file mode 100644 index 0000000000..c5d5f24f36 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right_small.png b/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right_small.png new file mode 100644 index 0000000000..a2a5cfff46 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_forward_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_right.png b/OsmAnd/res/drawable-mdpi/map_turn_right.png new file mode 100644 index 0000000000..cf5e5f0243 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_right.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_right2.png b/OsmAnd/res/drawable-mdpi/map_turn_right2.png new file mode 100644 index 0000000000..594b8c6b8b Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_right2.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_right2_small.png b/OsmAnd/res/drawable-mdpi/map_turn_right2_small.png new file mode 100644 index 0000000000..56f5cb01cc Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_right2_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_right_small.png b/OsmAnd/res/drawable-mdpi/map_turn_right_small.png new file mode 100644 index 0000000000..6a70faf237 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_right_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_slight_right.png b/OsmAnd/res/drawable-mdpi/map_turn_slight_right.png new file mode 100644 index 0000000000..45db48c507 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_slight_right.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_slight_right_small.png b/OsmAnd/res/drawable-mdpi/map_turn_slight_right_small.png new file mode 100644 index 0000000000..ce5e3a6992 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_slight_right_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_uturn.png b/OsmAnd/res/drawable-mdpi/map_turn_uturn.png new file mode 100644 index 0000000000..e8f4a529e2 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_uturn.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_uturn_right.png b/OsmAnd/res/drawable-mdpi/map_turn_uturn_right.png new file mode 100644 index 0000000000..c1e4ddc1d4 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_uturn_right.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_uturn_right_small.png b/OsmAnd/res/drawable-mdpi/map_turn_uturn_right_small.png new file mode 100644 index 0000000000..252fde0150 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-mdpi/map_turn_uturn_small.png b/OsmAnd/res/drawable-mdpi/map_turn_uturn_small.png new file mode 100644 index 0000000000..badcad0df2 Binary files /dev/null and b/OsmAnd/res/drawable-mdpi/map_turn_uturn_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward.png new file mode 100644 index 0000000000..0a222d0a11 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn.png new file mode 100644 index 0000000000..7756a121f4 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn_small.png new file mode 100644 index 0000000000..1b90789e77 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn.png new file mode 100644 index 0000000000..97de9a60fe Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn_small.png new file mode 100644 index 0000000000..81a4cbfa68 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_slight_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_small.png new file mode 100644 index 0000000000..b014067f03 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right.png new file mode 100644 index 0000000000..d259fdbe3d Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right_small.png new file mode 100644 index 0000000000..a65c919bd2 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_forward_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_right.png b/OsmAnd/res/drawable-xhdpi/map_turn_right.png new file mode 100644 index 0000000000..84b2fe9948 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_right.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_right2.png b/OsmAnd/res/drawable-xhdpi/map_turn_right2.png new file mode 100644 index 0000000000..28faea75f1 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_right2.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_right2_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_right2_small.png new file mode 100644 index 0000000000..d8de267510 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_right2_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_right_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_right_small.png new file mode 100644 index 0000000000..a05a592788 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_right_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_slight_right.png b/OsmAnd/res/drawable-xhdpi/map_turn_slight_right.png new file mode 100644 index 0000000000..ca38c26726 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_slight_right.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_slight_right_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_slight_right_small.png new file mode 100644 index 0000000000..a00bd7cbca Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_slight_right_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_uturn.png b/OsmAnd/res/drawable-xhdpi/map_turn_uturn.png new file mode 100644 index 0000000000..0f758155e0 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_uturn.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right.png b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right.png new file mode 100644 index 0000000000..0870146a93 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right_small.png new file mode 100644 index 0000000000..daad2b4386 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-xhdpi/map_turn_uturn_small.png b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_small.png new file mode 100644 index 0000000000..c3e50eca92 Binary files /dev/null and b/OsmAnd/res/drawable-xhdpi/map_turn_uturn_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward.png new file mode 100644 index 0000000000..c1015b73dd Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn.png new file mode 100644 index 0000000000..0435ded215 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn_small.png new file mode 100644 index 0000000000..a744e9f595 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn.png new file mode 100644 index 0000000000..9ecc92c619 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn_small.png new file mode 100644 index 0000000000..a44916e491 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_slight_right_turn_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_small.png new file mode 100644 index 0000000000..dafb941c83 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right.png new file mode 100644 index 0000000000..62fc53f569 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right_small.png new file mode 100644 index 0000000000..ace2fed237 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_forward_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_right.png b/OsmAnd/res/drawable-xxhdpi/map_turn_right.png new file mode 100644 index 0000000000..2a7f0fff53 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_right.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_right2.png b/OsmAnd/res/drawable-xxhdpi/map_turn_right2.png new file mode 100644 index 0000000000..87a839262d Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_right2.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_right2_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_right2_small.png new file mode 100644 index 0000000000..832135fc13 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_right2_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_right_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_right_small.png new file mode 100644 index 0000000000..43af5e43a2 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_right_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right.png b/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right.png new file mode 100644 index 0000000000..357ed538b8 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right_small.png new file mode 100644 index 0000000000..60f4fee398 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_slight_right_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_uturn.png b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn.png new file mode 100644 index 0000000000..c645cb9158 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right.png b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right.png new file mode 100644 index 0000000000..018ce214e6 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right_small.png new file mode 100644 index 0000000000..5429bc0dcf Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_right_small.png differ diff --git a/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_small.png b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_small.png new file mode 100644 index 0000000000..41e2bf50c9 Binary files /dev/null and b/OsmAnd/res/drawable-xxhdpi/map_turn_uturn_small.png differ diff --git a/OsmAnd/res/layout/fragment_data_storage_place_dialog.xml b/OsmAnd/res/layout/fragment_data_storage_place_dialog.xml index a9d6c1de34..664ba213f1 100644 --- a/OsmAnd/res/layout/fragment_data_storage_place_dialog.xml +++ b/OsmAnd/res/layout/fragment_data_storage_place_dialog.xml @@ -118,6 +118,7 @@ Падтрымоўваны рэгіён Калі ласка ўвядзіце імя Абярыце маркеры - + Назва файлу зьмяшчае недапушчальны сымбаль + diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index 22b0533637..9f8599524b 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -2675,7 +2675,7 @@ Eksplosionstype: rummet (højde over 80 km) Eksplosionstype: undersøisk Eksplosionsdato (UTC) - Skudnavnet (en) + Skudnavn (en) Eksplosionsserie Eksplosionsformål: atomvåben relateret Eksplosionsformål: våbeneffekt @@ -2688,11 +2688,11 @@ Eksplosionsformål: industriel anvendelse Eksplosionsformål: industriel anvendelse, jordflytning Eksplosionstidpunkt (UTC) - Eksplosion udbytte + Eksplosionsudbytte Eksplosionshul Eksplosionenshøjde Højde over jordoverfladen - bølge størrelsesorden + Seismiskbølge størrelsesorden Eksplosionssalve: første detonation af en salvetest Eksplosionssalve: anden eller senere detonation af en salvetest Eksplosion: kraterdiameter @@ -2715,7 +2715,7 @@ Støvsuger Freeflying (sport) -Cykel reparation stander +Cykelreparationsstander Vandhane @@ -2726,25 +2726,25 @@ Paragliding: nej Hanggliding: ja Hanggliding: nej - Freeflying sted orientering: S - Freeflying sted orientering: SV - Freeflying sted orientering: V - Freeflying sted orientering: NV - Freeflying sted orientering: N - Freeflying sted orientering: NØ - Freeflying sted orientering: Ø - Freeflying sted orientering: SØ + Freeflying flyvepladsorientering: S + Freeflying flyvepladsorientering: SV + Freeflying flyvepladsorientering: V + Freeflying flyvepladsorientering: NV + Freeflying flyvepladsorientering: N + Freeflying flyvepladsorientering: NØ + Freeflying flyvepladsorientering: Ø + Freeflying flyvepladsorientering: SØ Ingen flyvetid (Freeflying) Gæsteretningslinjer for freeflying: ja Gæsteretningslinjer for freeflying: nej Solarium -Freeflying sted: start - Freeflying sted: landing - Freeflying sted: toplanding - Freeflying sted: trækanordning - "Freeflying sted: træning" +Freeflying flyveplads: start + Freeflying flyveplads: landing + Freeflying flyveplads: toplanding + Freeflying flyveplads: trækanordning + "Freeflying flyveplads: træning" Freeflying funktionær: ja Freeflying funktionær: nej Freeflying fastvinge: ja diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 3580c5808f..73390c5f01 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -788,4 +788,33 @@ Politiko Uzantnomo Grupnomo + Kupli kun aparato + Kupli kun grupo + Krei grupon + Servilo de OsMo malfunkciis + OpenStreetMap Observado + Sendi mian pozicion + Rapidaliro al OsMo + horoj antaŭe + minutoj antaŭe + sekundoj antaŭe + Konektitaj aparatoj + Seanca ĵetono: %1$s + Atendanta rajtigadon… + "Pozicioj senditaj %1$d (en bufro %2$d) " + "Konektita: %1$s " + "Problemo kun OsMo konekto: " + Ununura aparata identigilo + Prikalkuli kurson inter punktojn + Restartigi OsMo seancon + Ĉesigi OsMo seancon + Eki OsMo seancon + Informoj pri senerarigo + Agordu observadon kaj personan observadan kanalon + OsMo + Ĉiam montri centrigitan pozicion + Loko + adresoj tutmondaj + Korekto de altitudo + Mondaj maraj navigadpunktoj diff --git a/OsmAnd/res/values-ja/strings.xml b/OsmAnd/res/values-ja/strings.xml index 0ee2378de3..5c65ba1a20 100644 --- a/OsmAnd/res/values-ja/strings.xml +++ b/OsmAnd/res/values-ja/strings.xml @@ -482,7 +482,7 @@ POIの更新は利用できません 住所を検索 建物を選ぶ 通りを選ぶ - 市町村を選ぶ + 郵便番号または市町村を選ぶ 国を選ぶ @@ -562,7 +562,7 @@ POIの更新は利用できません お気に入りを編集 お気に入りを削除 -本当にお気に入り地点を削除しますか? \'%s\' +お気に入り地点を削除しますか? \'%s\' お気に入り地点 {0} は削除されました。 @@ -663,9 +663,9 @@ POIの更新は利用できません スピードカメラ(オービス) 通行に関する警告 OSMのユーザー名とパスワードを設定して下さい - 中間点をクリア - 中間点を保持 - 中間点はすでに設定されています。 + 経由地点をクリア + 経由地点を保持 + 経由地点はすでに設定されています。 ここへ行く ここから出発 マップ: @@ -799,13 +799,13 @@ POIの更新は利用できません オフライン等高線のためのOsmAndプラグイン 距離の測定 オンラインマップを使用します(SDカードにダウンロードしたタイルのキャッシュを使用) - ダウンロードを中止しますか? + ファイルのダウンロードを中止しますか? シミュレーション停止 シミュレーション開始 左側通行に設定 車が道路を左側通行する国は選択してください 選択地点の削除 - 経由地点 %1$s + 目的地 %1$s 経由地点 %1$s 最後の経由地点として追加 最初の経由地点として追加 @@ -833,7 +833,7 @@ POIの更新は利用できません セーフモード アプリケーションは、セーフモードで実行されています(設定で無効にできます)。 OsmAnd機能の一部がバックグラウンドで動作しています。停止しますか? - ZXingバーコードスキャナアプリケーションがインストールされていません。マーケットで検索しますか? + QRコードスキャナー(ZXing Barcode Scanner/ZXing Team)がインストールされていません。Google Playで検索しますか? 道路の配色を選択します: 道路の配色 目的地の方向を表示 @@ -844,7 +844,7 @@ POIの更新は利用できません ルートがありません 目的地の入れ替え すでに目的地が設定されています。 - 経由地点 + 目的地 終点が最寄りの道路より遠すぎます。 タグの追加 拡張モード… @@ -885,7 +885,7 @@ POIの更新は利用できません 縮尺 視線方向 - 透明なスキン + ウィジェットの透過 動作中\n バックグラウンドモード @@ -936,7 +936,7 @@ POIの更新は利用できません 注意 あなたが車の場所を探す予定をカレンダーアプリに追加した場合、カレンダーアプリの予定は手動で削除されるまで残ります。 駐車場の制限時間を設定する - 停車中の車の場所を削除しますか? + 駐車位置マーカーを削除しますか? 駐車マーカーを削除 駐車場のタイプを選択 時間制限あり @@ -1091,7 +1091,7 @@ POIの更新は利用できません または - OsmAndオフラインルート計算は、指定地点間の距離が200km以上有ると非常に時間がかかります(場合によっては動作しません)。 中間経由地点を作成することでルート計算に掛かる時間を短くすることが出来ます。 + OsmAndオフラインルート計算は、指定地点間の距離が200km以上有ると非常に時間がかかります(場合によっては動作しません)。 経由地点を作成することでルート計算に掛かる時間を短くすることが出来ます。 自動ズームしない ズーム 大 ズーム 中 @@ -1185,7 +1185,7 @@ POIの更新は利用できません オンラインNominatimを使用 位置を検索しています… - 位置(見つかりました) + 現在地(確定) 住所… お気に入り… 未定義 @@ -1284,9 +1284,9 @@ POIの更新は利用できません " OsmAnd(OSM Automated Navigation Directionsの略) OsmAndはグローバルOpenStreetMap(OSM)を利用したさまざまなデータへのアクセス可能なオープンソースのナビゲーションアプリです。すべてのマップデータ(ベクター形式またはタイルマップ)がオフラインで使用する場合の携帯電話の内部メモリに保存することができます。 OsmAndもターンバイターンの音声案内など、オフラインとオンライン両方のルート設定機能を有しています。 主要機能の一部: - 完全なオフライン機能(ストアでダウンロードした任意のフォルダ内のベクター形式またはタイルマップ) - 全世界で利用できるコンパクトなベクター形式オフラインマップ - 国または地域マップのダウンロードは、アプリから直接可能 - GPXやナビゲーショントラック、名所、お気に入り、等高線、公共交通機関、カスタマイズ可能な透明性を持つ追加マップ等のオーバーレイマップ(重ね合わせ)表示 - オフラインアドレスや場所(POI)の検索 - 短い距離のオフラインルート設定(実験的) - 車、自転車、歩行者モード: - オプションにて自動化された日中/夜間表示の切り替え - オプションで速度に応じたマップの拡大縮小 - オプションで動きやコンパスや向きに応じてマップの向きを変更 - 任意のレーン案内、制限速度表示、録音およびTTS合成音声の使用 OsmAnd無料版の制限事項: - マップダウンロード数の制限 - ウィキペディアのオフラインのPOIへのアクセス無し OsmAndは積極的に開発されている最中で、我々のプロジェクトとその更なる進展、開発と、新しい機能の試験には財政的貢献を必要としています。 新機能搭載のために資金提供したりOsmAnd+を購入したり、osmand.netに寄付をすることをご検討ください。 " - " ↵ OsmAnd(OSM Automated Navigation Directions)は世界的にかつ高品質のOpenStreetMap(OSM)にアクセスすることの出来るマップ&ナビゲーションアプリです。すべてのマップデータはオフラインで使用するために、デバイスの内蔵メモリに保存することができます。お使いのデバイスのGPSを経由して、 OsmAndは、車、バイク、歩行者のために、画面表示と音声案内でルートを示してくれます。すべての主要な機能は、オンラインとオフライン(インターネット接続無し)の両方で動作します。↵ ↵ 主な機能のいくつか:↵ ↵ ナビゲーション↵ - オンライン(早い)とオフライン(海外でローミングを使用しない)の両方で動作↵ - ターンバイターンの音声ガイダンス(録音音声又は、音声合成)↵ - オプションのレーン案内、街路名表示、および到着予定時刻↵ - 旅程上の中間経由地点(経路)をサポート↵ - ルートから外れた場合は自動ルート再設定↵ - タイプ(例:レストラン、ホテル、ガソリンスタンド、美術館)で、住所または地理的座標で場所を検索↵ ↵ マップ表示↵ - マップ上の位置と方向を表示 - オプションでコンパスや動きの方向に応じてマップを回転↵ - お気に入りとして最も重要な場所を保存↵ - あなたの周りのディスプレイのPOI(関心地点)↵ - 専門のオンラインのタイルマップを表示↵ - 衛星ビューを表示することができます(Bingから)↵ - ツーリング/ナビゲーション、GPXトラックとカスタマイズ可能な透明性を持つ追加マップのオーバーレイ表示が可能↵ - オプションで、英語、ローカル、あるいは発音表記で地名を表示↵ ↵ OpenStreetMapとウィキペディアのデータを使用↵ - 世界最高の共同プロジェクトからの質の高い情報↵ - 国または地域ごとに使用可能なOpenStreetMapのグローバルマップ↵ - 観光に便利なウィキペディアのPOI(※無料版では利用できません)↵ - アプリから直接から無制限の無料ダウンロード(無料版ではダウンロード制限あり16個まで/追記:現在は10個まで)↵ - 常に最新のマップ(少なくとも月に一度程度更新)↵ - コンパクトなオフラインベクター形式マップ↵ - 完全なマップデータか道路網のみとの間で選択(例:日本全体で700MB、または道路網のみの場合200MB)↵ - オンラインまたはキャッシュタイルマップをサポート↵ ↵ 安全機能↵ - オプションにて自動化された日中/夜間表示の切り替え↵ - オプションにて設定した制限速度を超過した場合アラームで案内↵ - オプションにて速度に応じたマップの拡大縮小↵ - あなたの友人があなたを見つけることができるように場所を共有↵ ↵ 自転車と歩行者の機能↵ - マップはアウトドア向けの遊歩道、ハイキング、および自転車用道路を含みます↵ - 自転車と歩行者のための特別なルート設定および表示モード↵ - オプションにて路線名を含む公共交通機関の停留所(バス、路面電車、電車)↵ - オプションにてローカルのGPXファイルまたはオンラインを利用した記録サービス↵ - オプションにて速度と高度を表示↵ - 等高線や丘シェーディングの表示(追加プラグイン経由)↵ ↵ 直接OpenStreetMapのに貢献↵ - レポートマップへ注釈↵ - OSMフォルダ内のGPXトラック記録をアプリから直接アップロード↵ - POIを追加し、直接OSMに(オフラインの場合後で)アップロード↵ - オプションにてバックグラウンドモードで任意の旅行記録の作成(デバイスがスリープモードにある間)↵ ↵ OsmAndはオープンソースであり、活発に開発が進められいます。誰もが注釈での報告、翻訳の改善、新しい機能のコーディング等でアプリケーションに貢献することができます。プロジェクトはフォーラムにて開発者とユーザーとの対話にて進んでいます。プロジェクトの進捗状況、また新たな機能の開発、コーディング、およびテストの為に皆様の資金的貢献を頼りとしています。 OsmAnd+を購入することにより、アプリケーションがより良くなります!また特定の新機能に資金を供給したり、osmand.netに寄付をすることも可能です。↵ ↵ ↵ おおよそのマップ範囲と品質:↵ - 西ヨーロッパ: **** ↵ - 東ヨーロッパ: *** ↵ - ロシア: *** ↵ - 北米*** ↵ - 南アメリカ:** ↵ - アジア: ** ↵ - 日本と韓国: *** ↵ - 中東: ** ↵ - アフリカ: ** ↵ - 南極: * ↵ ↵ サポートする国のリスト(基本的には全世界対応):↵ アフガニスタン、アルバニア、アルジェリア、アンドラ、アンゴラ、アンギラ、アンティグア·バーブーダ、アルゼンチン、アルメニア、アルバ、オーストラリア、オーストリア、アゼルバイジャン、バハマ、バーレーン、バングラデシュ、バルバドス、ベラルーシ、ベルギー、ベリーズ、ベナン、バミューダ、ブータン、ボリビア、ボネール、ボスニア·ヘルツェゴビナ、ボツワナ、ブラジル、英領バージン諸島、ブルネイ、ブルガリア、ブルキナファソ、ブルンジ、カンボジア、カメルーン、カナダ、カーボベルデ、中央アフリカ共和国、チャド、チリ、中国、コロンビア、コモロ、コンゴ、コスタリカ、コートジボワール、クロアチア、キューバ、キュラソー、キプロス、チェコ共和国、デンマーク、ジブチ、ドミニカ、ドミニカ共和国、エクアドル、エジプト、エルサルバドル、赤道ギニア、エリトリア、エストニア、エチオピア、フィジー、フィンランド、フランス、フランス領ギアナ、フランス領ポリネシア、ガボン、ガンビア、ジョージア、ドイツ、ガーナ、ジブラルタル、ギリシャ、グリーンランド、グレナダ、グアドループ、グアム、グアテマラ、ガーンジー島、ギニア、ギニアビサウ、ガイアナ、ハイチ、バチカン、ホンジュラス、香港、ハンガリー、アイスランド、インド、インドネシア、イラン、イラク、アイルランド、マン島、イスラエル、イタリア、ジャマイカ、日本、ジャージ、ヨルダン、カザフスタン、ケニア、キリバス、北朝鮮と韓国、クウェート、キルギスタン、ラオス、ラトビア、レバノン、レソト、リベリア、リビア、リヒテンシュタイン、リトアニア、ルクセンブルグ、マカオ、マケドニア、マダガスカル、マラウイ、マレーシア、モルディブ、マリ、マルタ、マルティニク、モーリタニア、モーリシャス、マヨット、メキシコ、ミクロネシア、モルドバ、モナコ、モンゴル、モンテネグロ、モントセラト、モロッコ、モザンビーク、ミャンマー、ナミビア、ナウル、ネパール、オランダ、オランダ領アンティル、ニューカレドニア、ニュージーランド、ニカラグア、ニジェール、ナイジェリア、ノルウェー、オマーン、パキスタン、パラオ、パレスチナ、パナマ、パプアニューギニア、パラグアイ、ペルー、フィリピン、ポーランド、ポルトガル、プエルトリコ、カタール、ルーマニア、ロシア、ルワンダ、サン·バルテルミー島、セントヘレナ島、セントクリストファー·ネイビス、セントルシア、サンマルタン、サンピエール島·ミクロン島、セントビンセント·グレナディーン、サモア、サンマリノ、サウジアラビア、セネガル、セルビア、セイシェル、シエラレオネ、シンガポール、スロバキア、スロベニア、ソマリア、南アフリカ共和国、サウスジョージア、南スーダン、スペイン、スリランカ、スーダン、スリナム、スワジランド、スウェーデン、スイス、シリア、台湾、タジキスタン、タンザニア、タイ、東ティモール、トーゴ、トケラウ、トンガ、トリニダード·トバゴ、チュニジア、トルコ、トルクメニスタン、ツバル、ウガンダ、ウクライナ、アラブ首長国連邦、イギリス(UK) 、アメリカ合衆国(USA) 、ウルグアイ、ウズベキスタン、バヌアツ、ベネズエラ、ベトナム、ウォリス·フツナ、西サハラ、イエメン、ザンビア、ジンバブエ " + " ↵ OsmAnd(OSM Automated Navigation Directions)は世界的にかつ高品質のOpenStreetMap(OSM)にアクセスすることの出来るマップ&ナビゲーションアプリです。すべてのマップデータはオフラインで使用するために、デバイスの内蔵メモリに保存することができます。お使いのデバイスのGPSを経由して、 OsmAndは、車、バイク、歩行者のために、画面表示と音声案内でルートを示してくれます。すべての主要な機能は、オンラインとオフライン(インターネット接続無し)の両方で動作します。↵ ↵ 主な機能のいくつか:↵ ↵ ナビゲーション↵ - オンライン(早い)とオフライン(海外でローミングを使用しない)の両方で動作↵ - ターンバイターンの音声ガイダンス(録音音声又は、音声合成)↵ - オプションのレーン案内、街路名表示、および到着予定時刻↵ - 旅程上の経由地点をサポート↵ - ルートから外れた場合は自動ルート再設定↵ - タイプ(例:レストラン、ホテル、ガソリンスタンド、美術館)で、住所または地理的座標で場所を検索↵ ↵ マップ表示↵ - マップ上の位置と方向を表示 - オプションでコンパスや動きの方向に応じてマップを回転↵ - お気に入りとして最も重要な場所を保存↵ - あなたの周りのディスプレイのPOI(関心地点)↵ - 専門のオンラインのタイルマップを表示↵ - 衛星ビューを表示することができます(Bingから)↵ - ツーリング/ナビゲーション、GPXトラックとカスタマイズ可能な透明性を持つ追加マップのオーバーレイ表示が可能↵ - オプションで、英語、ローカル、あるいは発音表記で地名を表示↵ ↵ OpenStreetMapとウィキペディアのデータを使用↵ - 世界最高の共同プロジェクトからの質の高い情報↵ - 国または地域ごとに使用可能なOpenStreetMapのグローバルマップ↵ - 観光に便利なウィキペディアのPOI(※無料版では利用できません)↵ - アプリから直接から無制限の無料ダウンロード(無料版ではダウンロード制限あり16個まで/追記:現在は10個まで)↵ - 常に最新のマップ(少なくとも月に一度程度更新)↵ - コンパクトなオフラインベクター形式マップ↵ - 完全なマップデータか道路網のみとの間で選択(例:日本全体で700MB、または道路網のみの場合200MB)↵ - オンラインまたはキャッシュタイルマップをサポート↵ ↵ 安全機能↵ - オプションにて自動化された日中/夜間表示の切り替え↵ - オプションにて設定した制限速度を超過した場合アラームで案内↵ - オプションにて速度に応じたマップの拡大縮小↵ - あなたの友人があなたを見つけることができるように場所を共有↵ ↵ 自転車と歩行者の機能↵ - マップはアウトドア向けの遊歩道、ハイキング、および自転車用道路を含みます↵ - 自転車と歩行者のための特別なルート設定および表示モード↵ - オプションにて路線名を含む公共交通機関の停留所(バス、路面電車、電車)↵ - オプションにてローカルのGPXファイルまたはオンラインを利用した記録サービス↵ - オプションにて速度と高度を表示↵ - 等高線や丘シェーディングの表示(追加プラグイン経由)↵ ↵ 直接OpenStreetMapのに貢献↵ - レポートマップへ注釈↵ - OSMフォルダ内のGPXトラック記録をアプリから直接アップロード↵ - POIを追加し、直接OSMに(オフラインの場合後で)アップロード↵ - オプションにてバックグラウンドモードで任意の旅行記録の作成(デバイスがスリープモードにある間)↵ ↵ OsmAndはオープンソースであり、活発に開発が進められいます。誰もが注釈での報告、翻訳の改善、新しい機能のコーディング等でアプリケーションに貢献することができます。プロジェクトはフォーラムにて開発者とユーザーとの対話にて進んでいます。プロジェクトの進捗状況、また新たな機能の開発、コーディング、およびテストの為に皆様の資金的貢献を頼りとしています。 OsmAnd+を購入することにより、アプリケーションがより良くなります!また特定の新機能に資金を供給したり、osmand.netに寄付をすることも可能です。↵ ↵ ↵ おおよそのマップ範囲と品質:↵ - 西ヨーロッパ: **** ↵ - 東ヨーロッパ: *** ↵ - ロシア: *** ↵ - 北米*** ↵ - 南アメリカ:** ↵ - アジア: ** ↵ - 日本と韓国: *** ↵ - 中東: ** ↵ - アフリカ: ** ↵ - 南極: * ↵ ↵ サポートする国のリスト(基本的には全世界対応):↵ アフガニスタン、アルバニア、アルジェリア、アンドラ、アンゴラ、アンギラ、アンティグア·バーブーダ、アルゼンチン、アルメニア、アルバ、オーストラリア、オーストリア、アゼルバイジャン、バハマ、バーレーン、バングラデシュ、バルバドス、ベラルーシ、ベルギー、ベリーズ、ベナン、バミューダ、ブータン、ボリビア、ボネール、ボスニア·ヘルツェゴビナ、ボツワナ、ブラジル、英領バージン諸島、ブルネイ、ブルガリア、ブルキナファソ、ブルンジ、カンボジア、カメルーン、カナダ、カーボベルデ、中央アフリカ共和国、チャド、チリ、中国、コロンビア、コモロ、コンゴ、コスタリカ、コートジボワール、クロアチア、キューバ、キュラソー、キプロス、チェコ共和国、デンマーク、ジブチ、ドミニカ、ドミニカ共和国、エクアドル、エジプト、エルサルバドル、赤道ギニア、エリトリア、エストニア、エチオピア、フィジー、フィンランド、フランス、フランス領ギアナ、フランス領ポリネシア、ガボン、ガンビア、ジョージア、ドイツ、ガーナ、ジブラルタル、ギリシャ、グリーンランド、グレナダ、グアドループ、グアム、グアテマラ、ガーンジー島、ギニア、ギニアビサウ、ガイアナ、ハイチ、バチカン、ホンジュラス、香港、ハンガリー、アイスランド、インド、インドネシア、イラン、イラク、アイルランド、マン島、イスラエル、イタリア、ジャマイカ、日本、ジャージ、ヨルダン、カザフスタン、ケニア、キリバス、北朝鮮と韓国、クウェート、キルギスタン、ラオス、ラトビア、レバノン、レソト、リベリア、リビア、リヒテンシュタイン、リトアニア、ルクセンブルグ、マカオ、マケドニア、マダガスカル、マラウイ、マレーシア、モルディブ、マリ、マルタ、マルティニク、モーリタニア、モーリシャス、マヨット、メキシコ、ミクロネシア、モルドバ、モナコ、モンゴル、モンテネグロ、モントセラト、モロッコ、モザンビーク、ミャンマー、ナミビア、ナウル、ネパール、オランダ、オランダ領アンティル、ニューカレドニア、ニュージーランド、ニカラグア、ニジェール、ナイジェリア、ノルウェー、オマーン、パキスタン、パラオ、パレスチナ、パナマ、パプアニューギニア、パラグアイ、ペルー、フィリピン、ポーランド、ポルトガル、プエルトリコ、カタール、ルーマニア、ロシア、ルワンダ、サン·バルテルミー島、セントヘレナ島、セントクリストファー·ネイビス、セントルシア、サンマルタン、サンピエール島·ミクロン島、セントビンセント·グレナディーン、サモア、サンマリノ、サウジアラビア、セネガル、セルビア、セイシェル、シエラレオネ、シンガポール、スロバキア、スロベニア、ソマリア、南アフリカ共和国、サウスジョージア、南スーダン、スペイン、スリランカ、スーダン、スリナム、スワジランド、スウェーデン、スイス、シリア、台湾、タジキスタン、タンザニア、タイ、東ティモール、トーゴ、トケラウ、トンガ、トリニダード·トバゴ、チュニジア、トルコ、トルクメニスタン、ツバル、ウガンダ、ウクライナ、アラブ首長国連邦、イギリス(UK) 、アメリカ合衆国(USA) 、ウルグアイ、ウズベキスタン、バヌアツ、ベネズエラ、ベトナム、ウォリス·フツナ、西サハラ、イエメン、ザンビア、ジンバブエ " " OsmAnd+(OSM Automated Navigation Directionsの略) OsmAnd+はグローバルOpenStreetMap(OSM)を利用したさまざまなデータへのアクセス可能なオープンソースのナビゲーションアプリです。すべてのマップデータ(ベクター形式またはタイルマップ)がオフラインで使用する場合の携帯電話の内部メモリに保存することができます。 OsmAndもターンバイターンの音声案内など、オフラインとオンライン両方のルート設定機能を有しています。 OsmAnd+は最新の更新情報を受けとることが出来る、有料バージョンのアプリケーションです。また購入することでプロジェクトの支援と新機能の開発における資金援助となります。 主要機能の一部: - 完全なオフライン機能(ストアでダウンロードした任意のフォルダ内のベクター形式またはタイルマップ) - 全世界で利用できるコンパクトなベクター形式オフラインマップ - 国または地域マップのダウンロードは、アプリから直接可能 - GPXやナビゲーショントラック、名所、お気に入り、等高線、公共交通機関、カスタマイズ可能な透明性を持つ追加マップ等のオーバーレイマップ(重ね合わせ)表示 - オフラインアドレスや場所(POI)の検索 - 短い距離のオフラインルート設定(実験的) - 車、自転車、歩行者モード: - オプションにて自動化された日中/夜間表示の切り替え - オプションで速度に応じたマップの拡大縮小 - オプションで動きやコンパスや向きに応じてマップの向きを変更 - 任意のレーン案内、制限速度表示、録音およびTTS合成音声の使用 " - " ↵ OsmAnd(OSM Automated Navigation Directions)は世界的にかつ高品質のOpenStreetMap(OSM)にアクセスすることの出来るマップ&ナビゲーションアプリです。すべてのマップデータはオフラインで使用するために、デバイスの内蔵メモリに保存することができます。お使いのデバイスのGPSを経由して、 OsmAndは、車、バイク、歩行者のために、画面表示と音声案内でルートを示してくれます。すべての主要な機能は、オンラインとオフライン(インターネット接続無し)の両方で動作します。↵ ↵ OsmAnd+は有料バージョンのアプリケーションです。購入することで最新の更新プログラムを受け取ることが出来ます。また、あなたがプロジェクトをサポートし新機能の開発に資金援助をしてくれた証となります。OsmAndと呼ばれる無料版をインストールすることで、購入する前にアプリケーションを試用することができます。 主な機能のいくつか:↵ ↵ ナビゲーション↵ - オンライン(早い)とオフライン(海外でローミングを使用しない)の両方で動作↵ - ターンバイターンの音声ガイダンス(録音音声又は、音声合成)↵ - オプションのレーン案内、街路名表示、および到着予定時刻↵ - 旅程上の中間経由地点(経路)をサポート↵ - ルートから外れた場合は自動ルート再設定↵ - タイプ(例:レストラン、ホテル、ガソリンスタンド、美術館)で、住所または地理的座標で場所を検索↵ ↵ マップ表示↵ - マップ上の位置と方向を表示 - オプションでコンパスや動きの方向に応じてマップを回転↵ - お気に入りとして最も重要な場所を保存↵ - あなたの周りのディスプレイのPOI(関心地点)↵ - 専門のオンラインのタイルマップを表示↵ - 衛星ビューを表示することができます(Bingから)↵ - ツーリング/ナビゲーション、GPXトラックとカスタマイズ可能な透明性を持つ追加マップのオーバーレイ表示が可能↵ - オプションで、英語、ローカル、あるいは発音表記で地名を表示↵ ↵ OpenStreetMapとウィキペディアのデータを使用↵ - 世界最高の共同プロジェクトからの質の高い情報↵ - 国または地域ごとに使用可能なOpenStreetMapのグローバルマップ↵ - 観光に便利なウィキペディアのPOI↵ - アプリから直接から無制限の無料ダウンロード↵ - 常に最新のマップ(少なくとも月に一度程度更新)↵ - コンパクトなオフラインベクター形式マップ↵ - 完全なマップデータか道路網のみとの間で選択(例:日本全体で700MB、または道路網のみの場合200MB)↵ - オンラインまたはキャッシュタイルマップをサポート↵ ↵ 安全機能↵ - オプションにて自動化された日中/夜間表示の切り替え↵ - オプションにて設定した制限速度を超過した場合アラームで案内↵ - オプションにて速度に応じたマップの拡大縮小↵ - あなたの友人があなたを見つけることができるように場所を共有↵ ↵ 自転車と歩行者の機能↵ - マップはアウトドア向けの遊歩道、ハイキング、および自転車用道路を含みます↵ - 自転車と歩行者のための特別なルート設定および表示モード↵ - オプションにて路線名を含む公共交通機関の停留所(バス、路面電車、電車)↵ - オプションにてローカルのGPXファイルまたはオンラインを利用した記録サービス↵ - オプションにて速度と高度を表示↵ - 等高線や丘シェーディングの表示(追加プラグイン経由)↵ ↵ 直接OpenStreetMapのに貢献↵ - レポートマップのバグ↵ - OSMフォルダ内のGPXトラック記録をアプリから直接アップロード↵ - POIを追加し、直接OSMに(オフラインの場合後で)アップロード↵ - オプションにてバックグラウンドモードで任意の旅行記録の作成(デバイスがスリープモードにある間)↵ ↵ OsmAndはオープンソースであり、活発に開発が進められいます。誰もがバグの報告、翻訳の改善、新しい機能のコーディング等でアプリケーションに貢献することができます。プロジェクトはフォーラムにて開発者とユーザーとの対話にて進んでいます。プロジェクトの進捗状況、また新たな機能の開発、コーディング、およびテストの為に皆様の資金的貢献を頼りとしています。 OsmAnd+を購入することにより、アプリケーションがより良くなります!また特定の新機能に資金を供給したり、osmand.netに寄付をすることも可能です。↵ ↵ ↵ おおよそのマップ範囲と品質:↵ - 西ヨーロッパ: **** ↵ - 東ヨーロッパ: *** ↵ - ロシア: *** ↵ - 北米*** ↵ - 南アメリカ:** ↵ - アジア: ** ↵ - 日本と韓国: *** ↵ - 中東: ** ↵ - アフリカ: ** ↵ - 南極: * ↵ ↵ サポートする国のリスト(基本的には全世界対応):↵ アフガニスタン、アルバニア、アルジェリア、アンドラ、アンゴラ、アンギラ、アンティグア·バーブーダ、アルゼンチン、アルメニア、アルバ、オーストラリア、オーストリア、アゼルバイジャン、バハマ、バーレーン、バングラデシュ、バルバドス、ベラルーシ、ベルギー、ベリーズ、ベナン、バミューダ、ブータン、ボリビア、ボネール、ボスニア·ヘルツェゴビナ、ボツワナ、ブラジル、英領バージン諸島、ブルネイ、ブルガリア、ブルキナファソ、ブルンジ、カンボジア、カメルーン、カナダ、カーボベルデ、中央アフリカ共和国、チャド、チリ、中国、コロンビア、コモロ、コンゴ、コスタリカ、コートジボワール、クロアチア、キューバ、キュラソー、キプロス、チェコ共和国、デンマーク、ジブチ、ドミニカ、ドミニカ共和国、エクアドル、エジプト、エルサルバドル、赤道ギニア、エリトリア、エストニア、エチオピア、フィジー、フィンランド、フランス、フランス領ギアナ、フランス領ポリネシア、ガボン、ガンビア、ジョージア、ドイツ、ガーナ、ジブラルタル、ギリシャ、グリーンランド、グレナダ、グアドループ、グアム、グアテマラ、ガーンジー島、ギニア、ギニアビサウ、ガイアナ、ハイチ、バチカン、ホンジュラス、香港、ハンガリー、アイスランド、インド、インドネシア、イラン、イラク、アイルランド、マン島、イスラエル、イタリア、ジャマイカ、日本、ジャージ、ヨルダン、カザフスタン、ケニア、キリバス、北朝鮮と韓国、クウェート、キルギスタン、ラオス、ラトビア、レバノン、レソト、リベリア、リビア、リヒテンシュタイン、リトアニア、ルクセンブルグ、マカオ、マケドニア、マダガスカル、マラウイ、マレーシア、モルディブ、マリ、マルタ、マルティニク、モーリタニア、モーリシャス、マヨット、メキシコ、ミクロネシア、モルドバ、モナコ、モンゴル、モンテネグロ、モントセラト、モロッコ、モザンビーク、ミャンマー、ナミビア、ナウル、ネパール、オランダ、オランダ領アンティル、ニューカレドニア、ニュージーランド、ニカラグア、ニジェール、ナイジェリア、ノルウェー、オマーン、パキスタン、パラオ、パレスチナ、パナマ、パプアニューギニア、パラグアイ、ペルー、フィリピン、ポーランド、ポルトガル、プエルトリコ、カタール、ルーマニア、ロシア、ルワンダ、サン·バルテルミー島、セントヘレナ島、セントクリストファー·ネイビス、セントルシア、サンマルタン、サンピエール島·ミクロン島、セントビンセント·グレナディーン、サモア、サンマリノ、サウジアラビア、セネガル、セルビア、セイシェル、シエラレオネ、シンガポール、スロバキア、スロベニア、ソマリア、南アフリカ共和国、サウスジョージア、南スーダン、スペイン、スリランカ、スーダン、スリナム、スワジランド、スウェーデン、スイス、シリア、台湾、タジキスタン、タンザニア、タイ、東ティモール、トーゴ、トケラウ、トンガ、トリニダード·トバゴ、チュニジア、トルコ、トルクメニスタン、ツバル、ウガンダ、ウクライナ、アラブ首長国連邦、イギリス(UK) 、アメリカ合衆国(USA) 、ウルグアイ、ウズベキスタン、バヌアツ、ベネズエラ、ベトナム、ウォリス·フツナ、西サハラ、イエメン、ザンビア、ジンバブエ " + " ↵ OsmAnd(OSM Automated Navigation Directions)は世界的にかつ高品質のOpenStreetMap(OSM)にアクセスすることの出来るマップ&ナビゲーションアプリです。すべてのマップデータはオフラインで使用するために、デバイスの内蔵メモリに保存することができます。お使いのデバイスのGPSを経由して、 OsmAndは、車、バイク、歩行者のために、画面表示と音声案内でルートを示してくれます。すべての主要な機能は、オンラインとオフライン(インターネット接続無し)の両方で動作します。↵ ↵ OsmAnd+は有料バージョンのアプリケーションです。購入することで最新の更新プログラムを受け取ることが出来ます。また、あなたがプロジェクトをサポートし新機能の開発に資金援助をしてくれた証となります。OsmAndと呼ばれる無料版をインストールすることで、購入する前にアプリケーションを試用することができます。 主な機能のいくつか:↵ ↵ ナビゲーション↵ - オンライン(早い)とオフライン(海外でローミングを使用しない)の両方で動作↵ - ターンバイターンの音声ガイダンス(録音音声又は、音声合成)↵ - オプションのレーン案内、街路名表示、および到着予定時刻↵ - 旅程上の経由地点をサポート↵ - ルートから外れた場合は自動ルート再設定↵ - タイプ(例:レストラン、ホテル、ガソリンスタンド、美術館)で、住所または地理的座標で場所を検索↵ ↵ マップ表示↵ - マップ上の位置と方向を表示 - オプションでコンパスや動きの方向に応じてマップを回転↵ - お気に入りとして最も重要な場所を保存↵ - あなたの周りのディスプレイのPOI(関心地点)↵ - 専門のオンラインのタイルマップを表示↵ - 衛星ビューを表示することができます(Bingから)↵ - ツーリング/ナビゲーション、GPXトラックとカスタマイズ可能な透明性を持つ追加マップのオーバーレイ表示が可能↵ - オプションで、英語、ローカル、あるいは発音表記で地名を表示↵ ↵ OpenStreetMapとウィキペディアのデータを使用↵ - 世界最高の共同プロジェクトからの質の高い情報↵ - 国または地域ごとに使用可能なOpenStreetMapのグローバルマップ↵ - 観光に便利なウィキペディアのPOI↵ - アプリから直接から無制限の無料ダウンロード↵ - 常に最新のマップ(少なくとも月に一度程度更新)↵ - コンパクトなオフラインベクター形式マップ↵ - 完全なマップデータか道路網のみとの間で選択(例:日本全体で700MB、または道路網のみの場合200MB)↵ - オンラインまたはキャッシュタイルマップをサポート↵ ↵ 安全機能↵ - オプションにて自動化された日中/夜間表示の切り替え↵ - オプションにて設定した制限速度を超過した場合アラームで案内↵ - オプションにて速度に応じたマップの拡大縮小↵ - あなたの友人があなたを見つけることができるように場所を共有↵ ↵ 自転車と歩行者の機能↵ - マップはアウトドア向けの遊歩道、ハイキング、および自転車用道路を含みます↵ - 自転車と歩行者のための特別なルート設定および表示モード↵ - オプションにて路線名を含む公共交通機関の停留所(バス、路面電車、電車)↵ - オプションにてローカルのGPXファイルまたはオンラインを利用した記録サービス↵ - オプションにて速度と高度を表示↵ - 等高線や丘シェーディングの表示(追加プラグイン経由)↵ ↵ 直接OpenStreetMapのに貢献↵ - レポートマップのバグ↵ - OSMフォルダ内のGPXトラック記録をアプリから直接アップロード↵ - POIを追加し、直接OSMに(オフラインの場合後で)アップロード↵ - オプションにてバックグラウンドモードで任意の旅行記録の作成(デバイスがスリープモードにある間)↵ ↵ OsmAndはオープンソースであり、活発に開発が進められいます。誰もがバグの報告、翻訳の改善、新しい機能のコーディング等でアプリケーションに貢献することができます。プロジェクトはフォーラムにて開発者とユーザーとの対話にて進んでいます。プロジェクトの進捗状況、また新たな機能の開発、コーディング、およびテストの為に皆様の資金的貢献を頼りとしています。 OsmAnd+を購入することにより、アプリケーションがより良くなります!また特定の新機能に資金を供給したり、osmand.netに寄付をすることも可能です。↵ ↵ ↵ おおよそのマップ範囲と品質:↵ - 西ヨーロッパ: **** ↵ - 東ヨーロッパ: *** ↵ - ロシア: *** ↵ - 北米*** ↵ - 南アメリカ:** ↵ - アジア: ** ↵ - 日本と韓国: *** ↵ - 中東: ** ↵ - アフリカ: ** ↵ - 南極: * ↵ ↵ サポートする国のリスト(基本的には全世界対応):↵ アフガニスタン、アルバニア、アルジェリア、アンドラ、アンゴラ、アンギラ、アンティグア·バーブーダ、アルゼンチン、アルメニア、アルバ、オーストラリア、オーストリア、アゼルバイジャン、バハマ、バーレーン、バングラデシュ、バルバドス、ベラルーシ、ベルギー、ベリーズ、ベナン、バミューダ、ブータン、ボリビア、ボネール、ボスニア·ヘルツェゴビナ、ボツワナ、ブラジル、英領バージン諸島、ブルネイ、ブルガリア、ブルキナファソ、ブルンジ、カンボジア、カメルーン、カナダ、カーボベルデ、中央アフリカ共和国、チャド、チリ、中国、コロンビア、コモロ、コンゴ、コスタリカ、コートジボワール、クロアチア、キューバ、キュラソー、キプロス、チェコ共和国、デンマーク、ジブチ、ドミニカ、ドミニカ共和国、エクアドル、エジプト、エルサルバドル、赤道ギニア、エリトリア、エストニア、エチオピア、フィジー、フィンランド、フランス、フランス領ギアナ、フランス領ポリネシア、ガボン、ガンビア、ジョージア、ドイツ、ガーナ、ジブラルタル、ギリシャ、グリーンランド、グレナダ、グアドループ、グアム、グアテマラ、ガーンジー島、ギニア、ギニアビサウ、ガイアナ、ハイチ、バチカン、ホンジュラス、香港、ハンガリー、アイスランド、インド、インドネシア、イラン、イラク、アイルランド、マン島、イスラエル、イタリア、ジャマイカ、日本、ジャージ、ヨルダン、カザフスタン、ケニア、キリバス、北朝鮮と韓国、クウェート、キルギスタン、ラオス、ラトビア、レバノン、レソト、リベリア、リビア、リヒテンシュタイン、リトアニア、ルクセンブルグ、マカオ、マケドニア、マダガスカル、マラウイ、マレーシア、モルディブ、マリ、マルタ、マルティニク、モーリタニア、モーリシャス、マヨット、メキシコ、ミクロネシア、モルドバ、モナコ、モンゴル、モンテネグロ、モントセラト、モロッコ、モザンビーク、ミャンマー、ナミビア、ナウル、ネパール、オランダ、オランダ領アンティル、ニューカレドニア、ニュージーランド、ニカラグア、ニジェール、ナイジェリア、ノルウェー、オマーン、パキスタン、パラオ、パレスチナ、パナマ、パプアニューギニア、パラグアイ、ペルー、フィリピン、ポーランド、ポルトガル、プエルトリコ、カタール、ルーマニア、ロシア、ルワンダ、サン·バルテルミー島、セントヘレナ島、セントクリストファー·ネイビス、セントルシア、サンマルタン、サンピエール島·ミクロン島、セントビンセント·グレナディーン、サモア、サンマリノ、サウジアラビア、セネガル、セルビア、セイシェル、シエラレオネ、シンガポール、スロバキア、スロベニア、ソマリア、南アフリカ共和国、サウスジョージア、南スーダン、スペイン、スリランカ、スーダン、スリナム、スワジランド、スウェーデン、スイス、シリア、台湾、タジキスタン、タンザニア、タイ、東ティモール、トーゴ、トケラウ、トンガ、トリニダード·トバゴ、チュニジア、トルコ、トルクメニスタン、ツバル、ウガンダ、ウクライナ、アラブ首長国連邦、イギリス(UK) 、アメリカ合衆国(USA) 、ウルグアイ、ウズベキスタン、バヌアツ、ベネズエラ、ベトナム、ウォリス·フツナ、西サハラ、イエメン、ザンビア、ジンバブエ " マップ上の土地の特徴を透明にする @@ -1308,7 +1308,7 @@ POIの更新は利用できません 最終目的地として追加 GPXファイルを選択… 目的地を選択 - マップ上を選択 + マップから選択 お気に入り ルート設定 ルート情報 @@ -1605,7 +1605,7 @@ POIの更新は利用できません 手動のみ(矢印をタップ) Online OSM画像とマップの分類 - ポイントをGPXファイルとして保存、またはお気に入りにインポートしますか? + 経由地点をGPXファイルとして保存、またはお気に入りにインポートしますか? 共有 OsmAndを介してお気に入りを共有 @@ -1667,7 +1667,7 @@ POIの更新は利用できません 方向転換地点に近づいたらデバイスの画面を(オフの場合指定時間)オンにします しない - 無視する道路… + 通行止め指定する道路… 電車でのルート 路面電車でのルート @@ -2035,7 +2035,7 @@ POIの更新は利用できません %.1f MB 全て更新(%1$s MB) 使用済み無料ダウンロード枠 - 使用する無料ダウンロード枠を設定できます + 使用した無料ダウンロード枠を表示します 基本世界地図(ズーム最小時世界中をカバーする為の物)が見当たらないか古くなっています。使用環境に対応した基本世界地図を再度ダウンロードしてください。 QRコード %1$sのマップはダウンロード済みです。対応した地点を参照することでマップを使用できます。 @@ -2146,11 +2146,11 @@ POIの更新は利用できません 使用しない道路 現在選択されているデータ保存フォルダーは読み取り専用です。保存フォルダーは一時的に内部メモリに設定されました。書き込み可能なストレージのフォルダを選択してください。 共有メモリ - 完全なレポート + より詳細な情報は以下へ ルートの再計算 OpenStreetMapのログイン名とパスワード - 寄付 - 編集 %1$s, ランク %2$s, 総編集数 %3$s + 寄付額 + 編集数 %1$s, ランク %2$s, 総編集数 %3$s OSM編集者ランキング パブリック名 レポートに自分の名前を表示しない @@ -2162,7 +2162,7 @@ POIの更新は利用できません 有効な電子メールアドレスを入力してください パブリック名を入力してください ライブ更新を購読いただきありがとうございます! - あなたの寄付の一部がその地域のマップ更新に貢献したユーザーへ還元されます + あなたの寄付の一部がその地域のOSM更新に貢献したユーザーへ還元されます マップマーカーの選択 その他のマーカー 匿名でアップロード @@ -2181,7 +2181,7 @@ POIの更新は利用できません マップ画面でマップマーカーを追加してください 経由地点が見つかりませんでした 情報提供への謝礼を示すためにあなたの情報を必要としています - 逆順にする + 逆順で並べ替え マップマーカー機能を有効化します アクティブマーカーをすべて削除しますか? マップマーカーの履歴を消去しますか? @@ -2204,7 +2204,7 @@ POIの更新は利用できません 利用可能なマップ 音声案内を選択 使用したい言語の音声案内を選択しダウンロードします - ナビゲーション中に避けたい道路を選択します + ルート検索やナビゲーション中に避けたい道路を選択します 音声 指定されたデータ保存場所にアクセスする権限がありません。 カメラ機能を使用する権限がありません。 @@ -2251,4 +2251,8 @@ POIの更新は利用できません この購読により世界中のマップを時間毎更新することが可能です。購読収入の大半はOSMコミュニティに還元され、OSMに貢献した各ユーザーにも支払われます。OsmAndとOSMをサポートする方法として現状最適な方法であると思われます。 設定しない + 貢献者数 + 編集数 + レポート対象 + geo: diff --git a/OsmAnd/res/values-kn/strings.xml b/OsmAnd/res/values-kn/strings.xml index e30894b536..2ec617362c 100644 --- a/OsmAnd/res/values-kn/strings.xml +++ b/OsmAnd/res/values-kn/strings.xml @@ -1,17 +1,18 @@ -ಅರ್ಜಿಂಟಿನೆಯಾದ ಸ್ಪೇನಿಷ್ + +ಅರ್ಜಿಂಟಿನೆಯಾದ ಸ್ಪೇನಿಷ್ ಥಾಯಿ ತೆಲುಗು ನೇಪಾಳಿ - ಮಲೇಷ್ಯಾ + ಮಲೇಷ್ಯಾನ್ ನೀವು ಅಧಿಕ ವಿಕಿಪೀಡಿಯ ದತ್ತಾಂಶವನ್ನು (%1$s MB) ಡೌನ್ ಲೋಡ್ ಮಾಡಲು ಇಚ್ಚಿಸುವಿರಾ? ಪೂರ್ಣ ಲೇಖನ ಓದಿ(ಮಿಂಬಲೆಯೊಳಗೆ) ವಿಕಿಪೀಡಿಯ ವಿಕಿಪೀಡಿಯ ವಿವರಣೆ ತೋರಿಸಿ ಒಎಸ್ಎಂ ಸಂಪಾದನೆಯನ್ನು ಅಳಿಸು - ಹೆಳವುಗೊಳಿಸು - ನನ್ನ ಜಾಗವನ್ನು ಇತರರೊಡನೆ ಹಂಚು + ನಿಷ್ಕ್ರೀಯೆಗೊಳಿಸಿದೆ + ನಾನಿರುವ ಸ್ಥಳವನ್ನು ಬೇರೆಯವರಿಗೆ ಕಳಿಸು ಹೊರನಡೆ ಮನೆ ಸಂಖ್ಯಯನ್ನು ಅಡಗಿಸು ಪ್ರತಿ @@ -97,7 +98,7 @@ ಒಕ್ಕಣೆ ಸೇರಿಸು ಇಷ್ಟವಾದವುಗಳಿಗೆ ಸೇರಿಸು - ನನ್ನ ಜಾಗ + ನನ್ನ ಈಗಿನ ಸ್ಥಳ ನನ್ನ ಸ್ಥಳಗಳು ನನ್ನ ಇಷ್ಟವಾದವುಗಳು ನನ್ನ ಟ್ರ್ಯಾಕ್ ಗಳು @@ -107,7 +108,7 @@ ಛಾಯಾಚಿತ್ರ ಮಿಂಬಲೆ ನಕ್ಷೆಗಳು ಪ್ರಯಾಣ ದಾಖಲಿಸಿಕೊಳ್ಳುವುದು - ಒಸ್ಮೊ (ಒಎಸ್ಎಂ ಪರಿವೀಕ್ಷಿಸುವಿಕೆ) + ಒಪನ್‌ಸ್ಟ್ರೀಟ್‌ಮ್ಯಾಪ್ ಪರಿವೀಕ್ಷಿಸುವಿಕೆ ಹಡಗಿನ ನಕ್ಷೆ ವೀಕ್ಷಣೆ ಆಕಾಶ ನಕ್ಷೆ ವೀಕ್ಷಣೆ ದೃಶ್ಯ / ಶ್ರಾವ್ಯ ಟಿಪ್ಪಣೆಗಳು @@ -115,7 +116,7 @@ ಲಭ್ಯಾರ್ಹತೆ ಒಎಸ್ಎಂ ಸಂಪಾದನೆ ಒಸ್ಮಾಂಡ್ ತಂತ್ರಾಶ ಅಭಿವೃದ್ಧಿ - ಮರುನಾಮಕರಣ ವಿಫಲವಾಗಿದೆ + ಮರುನಾಮಕರಣ ವಿಫಲವಾಗಿದೆ. ದಿನಗಳು ಹಿಂದುಗಡೆಗೆ ನಕ್ಷೆಗೆ ಹಿಂದುರುಗಿ ಟಿಪ್ಪಣಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಿ @@ -125,7 +126,7 @@ ಕೇವಲ ರಸ್ತೆಗಳು ಗುಂಪನ್ನು ಸಂಪಾದಿಸಿ ನಿಲುಗಡೆ ಸ್ಥಳ - + ಟ್ಯಾಗ್ಅನ್ನು ತೆಗೆಯಿರಿ ಜಿಪಿಎಸ್ ಮಟ್ಟ ದಾರಿ ದೀಪಗಳು ಗುಪ್ತತೆ @@ -143,7 +144,7 @@ ವಲಯ ಉತ್ತರದಿಕ್ಕಿನೆಡೆಗೆ ಪೂರ್ವದಿಕ್ಕಿನೆಡೆಗೆ - ಎಲ್ಲಾ ನಕಲಿಳಿಸುಗಳು + ಎಲ್ಲಾ ಡೌನ್‌ಲೋಡ್‌ಗಳು ಇಂದಿನವುಗಳು ಸ್ಥಳಿಯ ಎಲ್ಲಾ ಕಡತಗಳು ಇಂದಿನವಾಗಿವೆ @@ -174,4 +175,73 @@ ವೇಗದ ಮಿತಿ ದಾಟುಸುಂಕ ನಿಲುಗಡೆ ಫಲಕ - \ No newline at end of file + ವರದಿ ಮಾಡಿ + ಜೊತೆಗೂಡಿ + ರಾತ್ರಿ + ತಿಂಗಳು ಮತ್ತು ದೇಶವನ್ನು ಆಯ್ದುಕೊಳ್ಳಿ + ಪ್ರತಿದಿನ + ಪ್ರತಿವಾರ + ಮುಂಜಾನೆ + ದಯವಿಟ್ಟು ನಕ್ಷೆಯ ಮೇಲೆ ಚಿಹ್ನೆಯನ್ನು ಸೇರಿಸಿ + ಒಸ್ಮೋ ಗುಂಪುಗಳು + ಮೇಲೆ ಸರಿಸಿ + ಕೆಳಗೆ ಸರಿಸಿ + ಪೂರ್ಣ ವರದಿ + ಒಪನ್‌ಸ್ಟ್ರೀಟ್‌ಮ್ಯಾಪ್ ಬಳಕೆದಾರರ ಹೆಸರು ಮತ್ತು ಗುಪ್ತಪದ + ದೇಣಿಗೆಗಳು + ಒಎಸ್ಎಂ ಸಂಪಾದಕರ ರ‍್ಯಾಂಕಿಗ್ + ಚಂದಾದಾರರಾಗಿ + ಸಾರ್ವಜನಿಕ ಹೆಸರು + ವರದಿಯಲ್ಲಿ ನನ್ನ ಹೆಸರು ತೋರಿಸಬೇಡಿ + ನಕ್ಷೆಯ ಗುರುತನ್ನು ಆರಿಸಿ + ಇತರೆ ಗುರುತುಗಳು + ಅನಾಮದೇಯರಾಗಿ ಅಪ್ಲೋಡ್ ಮಾಡಿ + ಒಎಸ್ಎಂ ಟಿಪ್ಪಣಿಯನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ + ಮೊದಲ ನಕಾಶೆಯ ಗುರುತು + ಎರಡನೆಯ ನಕಾಶೆಯ ಗುರುತು + ನಕಾಶೆಯ ಗುರುತುಗಳಿಗೆ ಸೇರಿಸಿ + ನಕಾಶೆಯ ಗುರುತುಗಳನ್ನು ಆರಿಸಿ + ನಕಾಶೆಯ ಗುರುತುಗಳು + ನಕಾಶೆಯ ಗುರುತು + ಸ್ಥಿತಿಗತಿ + ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಿ + ಈ-ಮೇಲ್ ವಿಳಾಸ + ತೆಗೆಯಿರಿ + ಆಯ್ದುಕೊಳ್ಳಿ + ಬಿಡುವ ಸ್ಥಳ + ಹತ್ತಿರ + ಸಮಯ: + ಲಭ್ಯವಿರುವ ನಕ್ಷೆಗಳು + ದೂರ: + ಒಎಸ್ಎಂ ಟಿಪ್ಪಣಿಯನ್ನು ತೆರೆಯಿರಿ + ಅಳಿಸಲಾದ ಒಎಸ್ಎಂ ಟಿಪ್ಪಣಿ + ಸೃಷ್ಟಿಸಲಾದ ಒಎಸ್ಎಂ ಟಿಪ್ಪಣಿ + ಒಎಸ್ಎಂ ಟಿಪ್ಪಣಿ + ಟಿಪ್ಪಣಿಯನ್ನು ಹಾಕಿರಿ + ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸೇರಿಸಿ + ಟಿಪ್ಪಣಿಯನ್ನು ಮುಚ್ಚಿರಿ + ಸಂದೇಶ + ಬರೆದವರ ಹೆಸರು + ಸ್ಥಳ + ಇದರಲ್ಲಿ ಹೊಸದೇನಿದೆ + ನಕ್ಷೆಗೆ ಹೋಗಿ + ಕಳುಹಿಸಿ + ಪ್ರದೇಶಗಳು + ಪ್ರದೇಶಗಳ ನಕ್ಷೆಗಳು + ಪ್ರಪಂಚದ ನಕ್ಷೆಗಳು + ಹೊಸದನ್ನು ಸೇರಿಸಿ + ಕೆಂಪು + ಹಳದಿ + ಹಸಿರು + ತೆಳು ನೀಲಿ + ನೀಲಿ + ಬೆಂಗಾಲಿ + ಅಜೇರಿ + ಬ್ರೆಟನ್ + ಐರಿಷ್ + ಲ್ಯಾಟಿನ್ + ಕುರ್ಡಿಷ್ + ತಮಿಳು + ಮಲಯಾಳಂ + ಒಸ್ಮಾಂಡ್‌ಗೆ ಆಮದುಮಾಡಿ + diff --git a/OsmAnd/res/values-lt/strings.xml b/OsmAnd/res/values-lt/strings.xml index e59b7d4f04..8a11775ec6 100644 --- a/OsmAnd/res/values-lt/strings.xml +++ b/OsmAnd/res/values-lt/strings.xml @@ -1319,7 +1319,7 @@ Konfigūruoti stebėjimo nustatymus ir nustatyti asmeninį stebėjimo kanalą "Pateikia OsMo - taip vadinamo pažangaus tiesioginio stebėjimo, nustatymus, daugiau http://osmo.mobi. \nSuteikia galimybę stebėti visus įrenginius konkrečioje grupėje realiuoju laiku bei bendrauti tarpusavyje. Tebėti glima tik konkrečios sesijos metu arba pastoviai.\nSusikurkite anonimines grupes tik kelioms dienoms su ribotomis funkcijomis, t.y. nėra nuotolinio valdymo ar grupės administratoriaus. Viso funkcionalumo grupes galima susikurti interneto svetainėje ir tik registruoti vartotojai galės prie jų prieiti. " - OsMo (OSM stebėjimas) + OpenStreetMap stebėjimas OsMo Tik rankiniu būdu (spauskite rodyklę) Maršruto instrukcijas pakartotinai pranešinėti reguliariais intervalais @@ -1339,10 +1339,10 @@ Prijungti įrenginiai - OsMo grupės/įrenginiai + OsMo grupės Automatiškai pradėti sekimo sesiją ir siųsti buvimo vietą tik paleidus programą Automatiškai pradėti sekimo sesiją - Asmeninis sekiklio ID + Sekiklio ID Paspauskite peržiūrėti ar bendrinti sekiklio ID. Naudodami sekiklio ID prijungti prietaisai galės stebėti visą šio įrenginio judėjimą! Norėdami atjungti pasirinkite Regeneravimo nustatymą. Sesijos žymė: %1$s @@ -1390,7 +1390,7 @@ Centruoti ekrane Nustatyti judančiu taikiniu Registruotas vardas - Mano slapyvardis + Slapyvardis Vartotojas rožinė @@ -1516,7 +1516,7 @@ Pakvietimas… Ar norite atsijungti nuo grupės %1$s? - Prašome nurodyti id + Prašome nurodyti ID Anksti Įprastai Vėlai @@ -1572,7 +1572,7 @@ Greičio ribojimo viršijimo reikšmė Pasirinkite greičio ribojimo viršijimo ribą, kurią pasiekus bus pranešta balsu. Įrenginys neaptiktas - OsMo paslauga negalima:\n- patikrinkite internetinį ryšį;\n- patikrinkite nustatymus;\n- užeikite į Twitter: https://twitter.com/OsMomobi + Nepavykp prisijungti prie OsMo serverio:\n- patikrinkite internetinį ryšį;\n- patikrinkite nustatymus;\n- užeikite į Twitter: https://twitter.com/OsMomobi Anonimas negali:\n- kurti grupių;\n- sinchronizuoti grupes bei įranginius su sreveriu;\n- valdyti grupes bei įrenginius privačiame biure. Anonimas Prisijungėte kaip %1$s @@ -1779,7 +1779,7 @@ Nurodykite transporto priemonės aukštį, leidžiamą maršrutuose Perskaičiuoti tik pradinę ilgos kelionės maršruto dalį Išjungtas - Pasidalinti mano vieta + Perduoti mano vieta Atsijungti Rašykite, norėdami pradėti paiešką Maršruto taškai @@ -1847,7 +1847,7 @@ Permatoma mėlyna Purpurinė Permatoma purpurinė - Siekiant viviškai pritaikyti pakeitimus, būtina iš naujo startuoti programą. + Siekiant visiškai pritaikyti pakeitimus, būtina iš naujo startuoti programą. Bišnuprų GPX spalva GPX plotis @@ -1963,7 +1963,7 @@ Susisiekti Pasaulio žemėlapis (padengiantis visą pasauli stambiu masteliu) neįdiegtas arba pasenęs. Prašome atsisiųsti arba atnaujinti. geo: - nm + nmi Kelionės įrašymas Pagrindinis Išplėstinis @@ -2131,4 +2131,19 @@ Prašome pirmiau įsigyti OSM Live prenumeratą Nepakanka vietos! Failams reikalinga {3} MB laikinai ir {1} MB pastoviai. Šiuo metu galimi tik {2} MB vietos. + Ataskaita + Perkelti viršun + Perkelti žemyn + Vengti kelių + Visa ataskaita + Iš naujo perskaičiuoti maršrutą + Paremti + Pasirinite žymeklį + Kiti žymekliai + Siųsti anonimiškai + Pirmasis žymeklis + Antrasis žymeklis + Atvirkštinė tvarka + Sukeisti vietomis pradžios tašką ir galutinį tikslą + Vengti sienų kirtimo diff --git a/OsmAnd/res/values-pl/phrases.xml b/OsmAnd/res/values-pl/phrases.xml index d75d3e264f..58754558d2 100644 --- a/OsmAnd/res/values-pl/phrases.xml +++ b/OsmAnd/res/values-pl/phrases.xml @@ -922,17 +922,17 @@ Obiekt opuszczony Wyłączony z użycia - Obsługujący + Operator Marka Opłata - Sygnalizacja świetlna - Fotoradar - Kontrola wysokości pojazdu - Kontrola minimalnego dystansu - Kontrola - Kontrola dostępu - Kontrola opłat + Egzekwowanie: Sygnalizacja świetlna + Egzekwowanie: ograniczeń prędkości + Egzekwowanie: wysokości pojazdu + Egzekwowanie: minimalnego dystansu + Egzekwowanie: kontrola + Egzekwowanie: dostępu + Egzekwowanie: opłat Drzwi Perfumeria @@ -1050,7 +1050,7 @@ Wysokość Wysokość nad poziomem morza Bez opłat - Woda pitna + Woda pitna: tak Sezonowe Wiosna Lato @@ -1068,8 +1068,8 @@ Nudyzm: zwyczajowy Materiały budowlane Populacja - Podziemny - Wielopoziomowy + Typ: podziemny + Typ: wielopoziomowy Liściaste Iglaste @@ -1077,10 +1077,10 @@ Bezlistne Gatunki Olej palmowy - Schronisko dla psów - Schronisko dla kotów - Schronisko dla psów i kotów - Schronisko dla ptaków + Typ schroniska: dla psów + Typ schroniska: dla kotów + Typ schroniska: dla psów i kotów + Typ schroniska: dla ptaków Siedzenia Oparcia: tak @@ -1115,10 +1115,10 @@ Znacznik trasy Znak Mapa rowerowa - Informacje o roślinach - Informacje na temat transportu publicznego - Informacje o technologii - Informacje na temat astronomii + Informacje: o roślinach + Informacje: na temat transportu publicznego + Informacje: technologiczne + Informacje: astronomiczne Zakaz palenia Palenie dozwolone na zewnątrz @@ -1202,7 +1202,7 @@ Holenderski Kościół Reformowany Kościół Apostolski Kościół Jezusa Chrystusa Świętych w Dniach Ostatnich - + Kościół Chrystusowy Gruziński prawosławny Rumuński prawosławny Koptyjski @@ -1252,4 +1252,13 @@ Odkurzacz + Chłodnia przemysłowa + Silos do składowania sypkich materiałów + Bezwyznaniowy + Kongregacyjny + Spirytyczny + Zjednoczony Kościół Chrystusowy + Etiopski ortodoksyjny tewahedo + Iglesia ni cristo + Zjednoczony diff --git a/OsmAnd/res/values-pl/strings.xml b/OsmAnd/res/values-pl/strings.xml index e36f301119..b830884dd2 100644 --- a/OsmAnd/res/values-pl/strings.xml +++ b/OsmAnd/res/values-pl/strings.xml @@ -2138,7 +2138,7 @@ Liczba odbiorców Raport Omiń drogę - Wyznacz trasę ponownie + Przelicz trasę Nazwa użytkownika i hasło OpenStreetMap Ranking edytorów OSM Proszę wprowadzić prawidłowy adres e-mail diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java index c924902889..e609ec89ad 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java @@ -6,11 +6,10 @@ import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; import android.support.annotation.DrawableRes; -import android.support.annotation.IdRes; import android.support.annotation.LayoutRes; -import android.support.annotation.StringRes; import android.support.v4.content.ContextCompat; import android.support.v4.graphics.drawable.DrawableCompat; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -33,11 +32,314 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; -import gnu.trove.list.array.TIntArrayList; - public class ContextMenuAdapter { private static final Log LOG = PlatformUtil.getLog(ContextMenuAdapter.class); + private final Context ctx; + @LayoutRes + private int defaultLayoutId = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? + R.layout.list_menu_item : R.layout.list_menu_item_native; + List items = new ArrayList<>(); + private ConfigureMapMenu.OnClickListener changeAppModeListener = null; + //neded to detect whether user opened all modes or not + private BooleanResult allModes = new BooleanResult(); + + public ContextMenuAdapter(Context ctx, boolean allModes) { + this.ctx = ctx; + this.allModes.setResult(allModes); + } + + public ContextMenuAdapter(Context ctx) { + this.ctx = ctx; + } + + public int length() { + return items.size(); + } + + public int getElementId(int position) { + return items.get(position).getTitleId(); + } + + public OnContextMenuClick getClickAdapter(int position) { + return items.get(position).getCheckBoxListener(); + } + + public OnIntegerValueChangedListener getIntegerLister(int position) { + return items.get(position).getIntegerListener(); + } + + public String getItemName(int position) { + return items.get(position).getTitle(); + } + + public String getItemDescr(int position) { + return items.get(position).getDescription(); + } + + public Boolean getSelection(int position) { + return items.get(position).getSelected(); + } + + public int getProgress(int position) { + return items.get(position).getProgress(); + } + + public int getLoading(int position) { + return items.get(position).isLoading() ? 1 : 0; + } + + public Drawable getImage(OsmandApplication ctx, int position, boolean light) { + @DrawableRes + int lst = items.get(position).getIcon(); + if (lst != -1) { + return ctx.getResources().getDrawable(lst); + } + @DrawableRes + int lstLight = items.get(position).getLightIcon(); + if (lstLight != -1) { + return ctx.getIconsCache().getIcon(lstLight, light); + } + return null; + } + + public Drawable getSecondaryImage(OsmandApplication ctx, int position, boolean light) { + @DrawableRes + int secondaryDrawableId = items.get(position).getSecondaryLightIcon(); + if (secondaryDrawableId != -1) { + return ctx.getIconsCache().getIcon(secondaryDrawableId, light); + } + return null; + } + + public int getBackgroundColor(Context ctx, boolean holoLight) { + if (holoLight) { + return ctx.getResources().getColor(R.color.bg_color_light); + } else { + return ctx.getResources().getColor(R.color.bg_color_dark); + } + } + + public boolean isCategory(int pos) { + return items.get(pos).isCategory(); + } + + public int getLayoutId(int position) { + int l = items.get(position).getLayout(); + if (l != -1) { + return l; + } + return defaultLayoutId; + } + + public void setItemName(int position, String str) { + items.get(position).setTitle(str); + } + + public void setItemDescription(int position, String str) { + items.get(position).setDescription(str); + } + + public void setSelection(int position, boolean s) { + items.get(position).setSelected(s); + } + + public void setProgress(int position, int progress) { + items.get(position).setProgress(progress); + } + + // Adapter related + public String[] getItemNames() { + String[] itemNames = new String[items.size()]; + for (int i = 0; i < items.size(); i++) { + itemNames[i] = items.get(i).getTitle(); + } + return itemNames; + } + + public void addItem(ContextMenuItem item) { + items.add(item); + } + + public void removeItem(int pos) { + items.remove(pos); + } + + public void setDefaultLayoutId(int defaultLayoutId) { + this.defaultLayoutId = defaultLayoutId; + } + + + public void setChangeAppModeListener(ConfigureMapMenu.OnClickListener changeAppModeListener) { + this.changeAppModeListener = changeAppModeListener; + } + + + public ArrayAdapter createListAdapter(final Activity activity, final boolean holoLight) { + final int layoutId = defaultLayoutId; + final OsmandApplication app = ((OsmandApplication) activity.getApplication()); + return new ContextMenuArrayAdapter(activity, layoutId, R.id.title, + items.toArray(new ContextMenuItem[items.size()]), app, holoLight); + } + + public class ContextMenuArrayAdapter extends ArrayAdapter { + private OsmandApplication app; + private boolean holoLight; + private int layoutId; + + public ContextMenuArrayAdapter(Activity context, int resource, int textViewResourceId, + ContextMenuItem[] objects, OsmandApplication app, boolean holoLight) { + super(context, resource, textViewResourceId, objects); + this.app = app; + this.holoLight = holoLight; + layoutId = resource; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // User super class to create the View + final ContextMenuItem item = getItem(position); + Integer lid = getLayoutId(position); + if (lid == R.layout.mode_toggles) { + final Set selected = new LinkedHashSet(); + return AppModeDialog.prepareAppModeDrawerView((Activity) getContext(), + selected, allModes, true, new View.OnClickListener() { + @Override + public void onClick(View view) { + if (selected.size() > 0) { + app.getSettings().APPLICATION_MODE.set(selected.iterator().next()); + notifyDataSetChanged(); + } + if (changeAppModeListener != null) { + changeAppModeListener.onClick(allModes.getResult()); + } + } + }); + } + if (convertView == null || (!lid.equals(convertView.getTag()))) { + convertView = LayoutInflater.from(getContext()).inflate(lid, parent, false); +// AndroidUtils.setListItemBackground(ctx, convertView, !holoLight); + convertView.setTag(lid); + } + TextView tv = (TextView) convertView.findViewById(R.id.title); + if (!isCategory(position)) { + AndroidUtils.setTextPrimaryColor(getContext(), tv, !holoLight); + } + tv.setText(isCategory(position) ? getItemName(position).toUpperCase() : getItemName(position)); + + if (layoutId == R.layout.simple_list_menu_item) { + int color = ContextCompat.getColor(getContext(), + holoLight ? R.color.icon_color : R.color.dashboard_subheader_text_dark); + Drawable imageId = ContextCompat.getDrawable(getContext(), item.getLightIcon()); + DrawableCompat.setTint(imageId, color); + float density = getContext().getResources().getDisplayMetrics().density; + int paddingInPixels = (int) (24 * density); + int drawableSizeInPixels = (int) (24 * density); // 32 + imageId.setBounds(0, 0, drawableSizeInPixels, drawableSizeInPixels); + tv.setCompoundDrawables(imageId, null, null, null); + tv.setCompoundDrawablePadding(paddingInPixels); + } else { + Drawable drawable = getImage(app, position, holoLight); + if (drawable != null) { + + ((ImageView) convertView.findViewById(R.id.icon)).setImageDrawable(drawable); + convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); + } else if (convertView.findViewById(R.id.icon) != null) { + convertView.findViewById(R.id.icon).setVisibility(View.GONE); + } + } + @DrawableRes + int secondaryLightDrawable = item.getSecondaryLightIcon(); + if (secondaryLightDrawable != -1) { + int color = ContextCompat.getColor(getContext(), + holoLight ? R.color.icon_color : R.color.dashboard_subheader_text_dark); + Drawable drawable = getSecondaryImage(app, position, holoLight); + DrawableCompat.setTint(drawable, color); + ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon); + imageView.setImageDrawable(drawable); + imageView.setVisibility(View.VISIBLE); + } else { + ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon); + if (imageView != null) { + imageView.setVisibility(View.GONE); + } + } + + if (isCategory(position)) { + tv.setTypeface(Typeface.DEFAULT_BOLD); + } else { + tv.setTypeface(null); + } + + if (convertView.findViewById(R.id.toggle_item) != null) { + final CompoundButton ch = (CompoundButton) convertView.findViewById(R.id.toggle_item); + if (item.getSelected() != null) { + ch.setOnCheckedChangeListener(null); + ch.setVisibility(View.VISIBLE); + ch.setChecked(item.getSelected()); + final ArrayAdapter la = this; + final OnCheckedChangeListener listener = new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + OnContextMenuClick ca = getClickAdapter(position); + item.setSelected(isChecked); + if (ca != null) { + ca.onContextMenuClick(la, getElementId(position), position, isChecked); + } + } + }; + ch.setOnCheckedChangeListener(listener); + ch.setVisibility(View.VISIBLE); + } else if (ch != null) { + ch.setVisibility(View.GONE); + } + } + + if (convertView.findViewById(R.id.seekbar) != null) { + SeekBar seekBar = (SeekBar) convertView.findViewById(R.id.seekbar); + if (item.getProgress() != -1) { + seekBar.setProgress(getProgress(position)); + seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + OnIntegerValueChangedListener listener = getIntegerLister(position); + item.setProgress(progress); + if (listener != null && fromUser) { + listener.onIntegerValueChangedListener(progress); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + } + }); + seekBar.setVisibility(View.VISIBLE); + } else if (seekBar != null) { + seekBar.setVisibility(View.GONE); + } + } + + if (convertView.findViewById(R.id.ProgressBar) != null) { + ProgressBar bar = (ProgressBar) convertView.findViewById(R.id.ProgressBar); + if (item.isLoading()) { + bar.setVisibility(View.VISIBLE); + } else { + bar.setVisibility(View.INVISIBLE); + } + } + + String itemDescr = getItemDescr(position); + if (convertView.findViewById(R.id.description) != null) { + ((TextView) convertView.findViewById(R.id.description)).setText(itemDescr); + } + return convertView; + } + } public interface OnContextMenuClick { //boolean return type needed to desribe if drawer needed to be close or not @@ -77,459 +379,4 @@ public class ContextMenuAdapter { } } - private final Context ctx; - private View anchor; - @LayoutRes - private int defaultLayoutId = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? - R.layout.list_menu_item : R.layout.list_menu_item_native; - final TIntArrayList items = new TIntArrayList(); - final TIntArrayList isCategory = new TIntArrayList(); - final ArrayList itemNames = new ArrayList(); - final ArrayList checkListeners = new ArrayList<>(); - final ArrayList integerListeners = new ArrayList<>(); - final TIntArrayList selectedList = new TIntArrayList(); - final TIntArrayList progressList = new TIntArrayList(); - final TIntArrayList loadingList = new TIntArrayList(); - final TIntArrayList layoutIds = new TIntArrayList(); - final TIntArrayList iconList = new TIntArrayList(); - final TIntArrayList lightIconList = new TIntArrayList(); - final TIntArrayList secondaryLightIconList = new TIntArrayList(); - final ArrayList itemDescription = new ArrayList(); - private List visibleModes = new ArrayList(); - private ConfigureMapMenu.OnClickListener changeAppModeListener = null; - //neded to detect whether user opened all modes or not - private BooleanResult allModes = new BooleanResult(); - - public ContextMenuAdapter(Context ctx, boolean allModes) { - this.ctx = ctx; - this.allModes.setResult(allModes); - } - - public ContextMenuAdapter(Context ctx) { - this.ctx = ctx; - } - - public void setAnchor(View anchor) { - this.anchor = anchor; - } - - public View getAnchor() { - return anchor; - } - - public int length() { - return items.size(); - } - - public int getElementId(int pos) { - return items.get(pos); - } - - public OnContextMenuClick getClickAdapter(int i) { - return checkListeners.get(i); - } - - public OnIntegerValueChangedListener getIntegerLister(int i) { - return integerListeners.get(i); - } - - public String getItemName(int pos) { - return itemNames.get(pos); - } - - public String getItemDescr(int pos) { - return itemDescription.get(pos); - } - - public void setItemName(int pos, String str) { - itemNames.set(pos, str); - } - - public void setItemDescription(int pos, String str) { - itemDescription.set(pos, str); - } - - public int getSelection(int pos) { - return selectedList.get(pos); - } - - public int getProgress(int pos) { - return progressList.get(pos); - } - - public int getLoading(int pos) { - return loadingList.get(pos); - } - - public void setSelection(int pos, int s) { - selectedList.set(pos, s); - } - - public void setProgress(int pos, int s) { - progressList.set(pos, s); - } - - - public Drawable getImage(OsmandApplication ctx, int pos, boolean light) { - int lst = iconList.get(pos); - if (lst != 0) { - return ctx.getResources().getDrawable(lst); - } - int lstLight = lightIconList.get(pos); - if (lstLight != 0) { - return ctx.getIconsCache().getIcon(lstLight, light); - } - return null; - } - - public Drawable getSecondaryImage(OsmandApplication ctx, int pos, boolean light) { - @DrawableRes - int secondaryDrawableId = secondaryLightIconList.get(pos); - if (secondaryDrawableId != 0) { - return ContextCompat.getDrawable(ctx, secondaryDrawableId); - } - return null; - } - - public int getBackgroundColor(Context ctx, boolean holoLight) { - if (holoLight) { - return ctx.getResources().getColor(R.color.bg_color_light); - } else { - return ctx.getResources().getColor(R.color.bg_color_dark); - } - } - - - public boolean isCategory(int pos) { - return isCategory.get(pos) > 0; - } - - public Item item(String name) { - Item i = new Item(); - i.id = (name.hashCode() << 4) | items.size(); - i.name = name; - return i; - } - - - public Item item(@StringRes int resId) { - Item i = new Item(); - i.id = resId; - i.name = ctx.getString(resId); - return i; - } - - public class Item { - @DrawableRes - int icon = 0; - @DrawableRes - int lightIcon = 0; - @DrawableRes - int secondaryLightIcon = 0; - @IdRes - int id; - String name; - int selected = -1; - int progress = -1; - @LayoutRes - int layout = -1; - int loading = -1; - boolean cat; - int pos = -1; - String description = ""; - private OnContextMenuClick checkBoxListener; - private OnIntegerValueChangedListener integerListener; - - private Item() { - } - - public Item icon(@DrawableRes int icon) { - this.icon = icon; - return this; - } - - public Item colorIcon(@DrawableRes int icon) { - this.lightIcon = icon; - return this; - } - - public Item secondaryIconColor(@DrawableRes int icon) { - this.secondaryLightIcon = icon; - return this; - } - - public Item position(int pos) { - this.pos = pos; - return this; - } - - public Item selected(int selected) { - this.selected = selected; - return this; - } - - public Item progress(int progress) { - this.progress = progress; - return this; - } - - public Item loading(int loading) { - this.loading = loading; - return this; - } - - public Item layout(@LayoutRes int l) { - this.layout = l; - return this; - } - - public Item description(String descr) { - this.description = descr; - return this; - } - - public Item listen(OnContextMenuClick l) { - this.checkBoxListener = l; - return this; - } - - public Item listenInteger(OnIntegerValueChangedListener l) { - this.integerListener = l; - return this; - } - - public void reg() { - if (pos >= items.size() || pos < 0) { - pos = items.size(); - } - items.insert(pos, id); - itemNames.add(pos, name); - itemDescription.add(pos, description); - selectedList.insert(pos, selected); - progressList.insert(pos, progress); - loadingList.insert(pos, loading); - layoutIds.insert(pos, layout); - iconList.insert(pos, icon); - lightIconList.insert(pos, lightIcon); - secondaryLightIconList.insert(pos, secondaryLightIcon); - checkListeners.add(pos, checkBoxListener); - integerListeners.add(pos, integerListener); - isCategory.insert(pos, cat ? 1 : 0); - } - - public Item setCategory(boolean b) { - cat = b; - return this; - } - - public Item name(String name) { - this.name = name; - return this; - } - - } - - public String[] getItemNames() { - return itemNames.toArray(new String[itemNames.size()]); - } - - public void removeItem(int pos) { - items.removeAt(pos); - itemNames.remove(pos); - selectedList.removeAt(pos); - progressList.removeAt(pos); - iconList.removeAt(pos); - lightIconList.removeAt(pos); - secondaryLightIconList.removeAt(pos); - checkListeners.remove(pos); - integerListeners.remove(pos); - isCategory.removeAt(pos); - layoutIds.removeAt(pos); - loadingList.removeAt(pos); - } - - public int getLayoutId(int position) { - int l = layoutIds.get(position); - if (l != -1) { - return l; - } - return defaultLayoutId; - } - - - public void setDefaultLayoutId(int defaultLayoutId) { - this.defaultLayoutId = defaultLayoutId; - } - - - public void setChangeAppModeListener(ConfigureMapMenu.OnClickListener changeAppModeListener) { - this.changeAppModeListener = changeAppModeListener; - } - - - public ArrayAdapter createListAdapter(final Activity activity, final boolean holoLight) { - final int layoutId = defaultLayoutId; - final OsmandApplication app = ((OsmandApplication) activity.getApplication()); - return new ContextMenuArrayAdapter(activity, layoutId, R.id.title, - getItemNames(), app, holoLight); - } - - public class ContextMenuArrayAdapter extends ArrayAdapter { - private Activity activity; - private OsmandApplication app; - private boolean holoLight; - private int layoutId; - - public ContextMenuArrayAdapter(Activity context, int resource, int textViewResourceId, - String[] objects, OsmandApplication app, boolean holoLight) { - super(context, resource, textViewResourceId, objects); - activity = context; - this.app = app; - this.holoLight = holoLight; - layoutId = resource; - } - - @Override - public View getView(final int position, View convertView, ViewGroup parent) { - // User super class to create the View - Integer lid = getLayoutId(position); - if (lid == R.layout.mode_toggles) { - final Set selected = new LinkedHashSet(); - return AppModeDialog.prepareAppModeDrawerView(activity, visibleModes, selected, allModes, true, new View.OnClickListener() { - @Override - public void onClick(View view) { - if (selected.size() > 0) { - app.getSettings().APPLICATION_MODE.set(selected.iterator().next()); - notifyDataSetChanged(); - } - if (changeAppModeListener != null) { - changeAppModeListener.onClick(allModes.getResult()); - } - } - }); - } - if (convertView == null || (!lid.equals(convertView.getTag()))) { - convertView = activity.getLayoutInflater().inflate(lid, parent, false); -// AndroidUtils.setListItemBackground(ctx, convertView, !holoLight); - convertView.setTag(lid); - } - TextView tv = (TextView) convertView.findViewById(R.id.title); - if (!isCategory(position)) { - AndroidUtils.setTextPrimaryColor(ctx, tv, !holoLight); - } - tv.setText(isCategory(position) ? getItemName(position).toUpperCase() : getItemName(position)); - - if (layoutId == R.layout.simple_list_menu_item) { - int color = activity.getResources() - .getColor(holoLight ? R.color.icon_color : R.color.dashboard_subheader_text_dark); - Drawable imageId = app.getIconsCache().getPaintedContentIcon( - lightIconList.get(position), color); - float density = activity.getResources().getDisplayMetrics().density; - int paddingInPixels = (int) (24 * density); - int drawableSizeInPixels = (int) (24 * density); // 32 - imageId.setBounds(0, 0, drawableSizeInPixels, drawableSizeInPixels); - tv.setCompoundDrawables(imageId, null, null, null); - tv.setCompoundDrawablePadding(paddingInPixels); - } else { - Drawable drawable = getImage(app, position, holoLight); - if (drawable != null) { - - ((ImageView) convertView.findViewById(R.id.icon)).setImageDrawable(drawable); - convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); - } else if (convertView.findViewById(R.id.icon) != null) { - convertView.findViewById(R.id.icon).setVisibility(View.GONE); - } - } - @DrawableRes - int secondaryLightDrawable = secondaryLightIconList.get(position); - if (secondaryLightDrawable != 0) { - int color = ContextCompat.getColor(ctx, - holoLight ? R.color.icon_color : R.color.dashboard_subheader_text_dark); - Drawable drawable = getSecondaryImage(app, position, holoLight); - DrawableCompat.setTint(drawable, color); - ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon); - imageView.setImageDrawable(drawable); - imageView.setVisibility(View.VISIBLE); - } else { - ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon); - if (imageView != null) { - imageView.setVisibility(View.GONE); - } - } - - if (isCategory(position)) { - tv.setTypeface(Typeface.DEFAULT_BOLD); - } else { - tv.setTypeface(null); - } - - if (convertView.findViewById(R.id.toggle_item) != null) { - final CompoundButton ch = (CompoundButton) convertView.findViewById(R.id.toggle_item); - if (selectedList.get(position) != -1) { - ch.setOnCheckedChangeListener(null); - ch.setVisibility(View.VISIBLE); - ch.setChecked(selectedList.get(position) > 0); - final ArrayAdapter la = this; - final OnCheckedChangeListener listener = new OnCheckedChangeListener() { - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - OnContextMenuClick ca = getClickAdapter(position); - selectedList.set(position, isChecked ? 1 : 0); - if (ca != null) { - ca.onContextMenuClick(la, getElementId(position), position, isChecked); - } - } - }; - ch.setOnCheckedChangeListener(listener); - ch.setVisibility(View.VISIBLE); - } else if (ch != null) { - ch.setVisibility(View.GONE); - } - } - - if (convertView.findViewById(R.id.seekbar) != null) { - SeekBar seekBar = (SeekBar) convertView.findViewById(R.id.seekbar); - if (progressList.get(position) != -1) { - seekBar.setProgress(getProgress(position)); - seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - OnIntegerValueChangedListener listener = getIntegerLister(position); - progressList.set(position, progress); - if (listener != null && fromUser) { - listener.onIntegerValueChangedListener(progress); - } - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - } - }); - seekBar.setVisibility(View.VISIBLE); - } else if (seekBar != null) { - seekBar.setVisibility(View.GONE); - } - } - - if (convertView.findViewById(R.id.ProgressBar) != null) { - ProgressBar bar = (ProgressBar) convertView.findViewById(R.id.ProgressBar); - if (loadingList.get(position) == 1) { - bar.setVisibility(View.VISIBLE); - } else { - bar.setVisibility(View.INVISIBLE); - } - } - - String itemDescr = getItemDescr(position); - if (convertView.findViewById(R.id.description) != null) { - ((TextView) convertView.findViewById(R.id.description)).setText(itemDescr); - } - return convertView; - } - } } \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuItem.java b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java new file mode 100644 index 0000000000..75b4969404 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java @@ -0,0 +1,235 @@ +package net.osmand.plus; + +import android.content.Context; +import android.support.annotation.DrawableRes; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; + +/** + * Created by GaidamakUA on 3/25/16. + */ +public class ContextMenuItem { + @StringRes + private final int titleId; + private String title; + @DrawableRes + private final int icon; + @DrawableRes + private final int lightIcon; + @DrawableRes + private final int secondaryLightIcon; + private Boolean selected; + private int progress; + @LayoutRes + private final int layout; + private boolean loading; + private final boolean category; + private final int pos; + private String description; + private ContextMenuAdapter.OnContextMenuClick checkBoxListener; + private ContextMenuAdapter.OnIntegerValueChangedListener integerListener; + + private ContextMenuItem(int titleId, String title, int icon, int lightIcon, int secondaryLightIcon, + Boolean selected, int progress, int layout, boolean loading, boolean category, + int pos, String description, ContextMenuAdapter.OnContextMenuClick checkBoxListener, + ContextMenuAdapter.OnIntegerValueChangedListener integerListener) { + this.titleId = titleId; + this.title = title; + this.icon = icon; + this.lightIcon = lightIcon; + this.secondaryLightIcon = secondaryLightIcon; + this.selected = selected; + this.progress = progress; + this.layout = layout; + this.loading = loading; + this.category = category; + this.pos = pos; + this.description = description; + this.checkBoxListener = checkBoxListener; + this.integerListener = integerListener; + } + + public int getTitleId() { + return titleId; + } + + public String getTitle() { + return title; + } + + public int getIcon() { + return icon; + } + + public int getLightIcon() { + return lightIcon; + } + + public int getSecondaryLightIcon() { + return secondaryLightIcon; + } + + public Boolean getSelected() { + return selected; + } + + public int getProgress() { + return progress; + } + + public int getLayout() { + return layout; + } + + public boolean isLoading() { + return loading; + } + + public boolean isCategory() { + return category; + } + + public int getPos() { + return pos; + } + + public String getDescription() { + return description; + } + + public ContextMenuAdapter.OnContextMenuClick getCheckBoxListener() { + return checkBoxListener; + } + + public ContextMenuAdapter.OnIntegerValueChangedListener getIntegerListener() { + return integerListener; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + + public void setProgress(int progress) { + this.progress = progress; + } + + public void setLoading(boolean loading) { + this.loading = loading; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setCheckBoxListener(ContextMenuAdapter.OnContextMenuClick checkBoxListener) { + this.checkBoxListener = checkBoxListener; + } + + public void setIntegerListener(ContextMenuAdapter.OnIntegerValueChangedListener integerListener) { + this.integerListener = integerListener; + } + + public static ItemBuilder createBuilder(String title) { + return new ItemBuilder().setTitle(title); + } + + public static class ItemBuilder { + private int mTitleId; + private String mTitle; + private int mIcon = -1; + private int mLightIcon = -1; + private int mSecondaryLightIcon = -1; + private Boolean mSelected = null; + private int mProgress = -1; + private int mLayout = -1; + private boolean mLoading = false; + private boolean mCat = false; + private int mPos = -1; + private String mDescription = null; + private ContextMenuAdapter.OnContextMenuClick mCheckBoxListener = null; + private ContextMenuAdapter.OnIntegerValueChangedListener mIntegerListener = null; + + public ItemBuilder setTitleId(int titleId, @Nullable Context context) { + this.mTitleId = titleId; + if (context != null) { + mTitle = context.getString(titleId); + } + return this; + } + + public ItemBuilder setTitle(String title) { + this.mTitle = title; + this.mTitleId = title.hashCode(); + return this; + } + + public ItemBuilder setIcon(int icon) { + mIcon = icon; + return this; + } + + public ItemBuilder setColorIcon(int lightIcon) { + mLightIcon = lightIcon; + return this; + } + + public ItemBuilder setSecondaryLightIcon(int secondaryLightIcon) { + mSecondaryLightIcon = secondaryLightIcon; + return this; + } + + public ItemBuilder setSelected(boolean selected) { + mSelected = selected; + return this; + } + + public ItemBuilder setProgress(int progress) { + mProgress = progress; + return this; + } + + public ItemBuilder setLayout(int layout) { + mLayout = layout; + return this; + } + + public ItemBuilder setLoading(boolean loading) { + mLoading = loading; + return this; + } + + public ItemBuilder setCategory(boolean cat) { + mCat = cat; + return this; + } + + public ItemBuilder setPosition(int pos) { + mPos = pos; + return this; + } + + public ItemBuilder setDescription(String description) { + mDescription = description; + return this; + } + + public ItemBuilder setListener(ContextMenuAdapter.OnContextMenuClick checkBoxListener) { + mCheckBoxListener = checkBoxListener; + return this; + } + + public ItemBuilder setIntegerListener(ContextMenuAdapter.OnIntegerValueChangedListener integerListener) { + mIntegerListener = integerListener; + return this; + } + + public ContextMenuItem createItem() { + return new ContextMenuItem(mTitleId, mTitle, mIcon, mLightIcon, mSecondaryLightIcon, mSelected, mProgress, mLayout, mLoading, mCat, mPos, mDescription, mCheckBoxListener, mIntegerListener); + } + } +} diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java index 1b4e6216f5..dfd5ccbfac 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java @@ -602,7 +602,7 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents, System.err.println("OnCreate for MapActivity took " + (System.currentTimeMillis() - tm) + " ms"); } - if (!permissionDone) { + if (!permissionDone && !app.getAppInitializer().isFirstTime()) { if (!permissionAsked) { if (app.isExternalStorageDirectoryReadOnly() && getSupportFragmentManager().findFragmentByTag(DataStoragePlaceDialogFragment.TAG) == null) { diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index c4ffe64caf..dee089cfcc 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -30,6 +30,7 @@ import net.osmand.map.ITileSource; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile; @@ -279,15 +280,17 @@ public class MapActivityActions implements DialogProvider { public void contextMenuPoint(final double latitude, final double longitude, final ContextMenuAdapter iadapter, Object selectedObj) { final ContextMenuAdapter adapter = iadapter == null ? new ContextMenuAdapter(mapActivity) : iadapter; - adapter.item(R.string.context_menu_item_search).colorIcon(R.drawable.ic_action_search_dark).reg(); + ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder(); + adapter.addItem(itemBuilder.setTitleId(R.string.context_menu_item_search, mapActivity) + .setColorIcon(R.drawable.ic_action_search_dark).createItem()); if (!mapActivity.getRoutingHelper().isFollowingMode() && !mapActivity.getRoutingHelper().isRoutePlanningMode()) { - adapter.item(R.string.context_menu_item_directions_from).colorIcon( - R.drawable.ic_action_gdirections_dark).reg(); + adapter.addItem(itemBuilder.setTitleId(R.string.context_menu_item_directions_from, mapActivity) + .setColorIcon(R.drawable.ic_action_gdirections_dark).createItem()); } - if (getMyApplication().getTargetPointsHelper().getPointToNavigate() != null && + if (getMyApplication().getTargetPointsHelper().getPointToNavigate() != null && (mapActivity.getRoutingHelper().isFollowingMode() || mapActivity.getRoutingHelper().isRoutePlanningMode())) { - adapter.item(R.string.context_menu_item_last_intermediate_point).colorIcon( - R.drawable.ic_action_intermediate).reg(); + adapter.addItem(itemBuilder.setTitleId(R.string.context_menu_item_last_intermediate_point, mapActivity) + .setColorIcon(R.drawable.ic_action_intermediate).createItem()); } OsmandPlugin.registerMapContextMenu(mapActivity, latitude, longitude, adapter, selectedObj); @@ -593,8 +596,9 @@ public class MapActivityActions implements DialogProvider { final OsmandApplication app = mapActivity.getMyApplication(); ContextMenuAdapter optionsMenuHelper = new ContextMenuAdapter(app); - optionsMenuHelper.item(R.string.home).colorIcon(R.drawable.map_dashboard) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.home, mapActivity) + .setColorIcon(R.drawable.map_dashboard) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); @@ -602,30 +606,33 @@ public class MapActivityActions implements DialogProvider { mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.DASHBOARD); return true; } - }).reg(); + }).createItem()); if (settings.USE_MAP_MARKERS.get()) { - optionsMenuHelper.item(R.string.map_markers).colorIcon(R.drawable.ic_action_flag_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_markers, mapActivity) + .setColorIcon(R.drawable.ic_action_flag_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.MAP_MARKERS); return false; } - }).reg(); + }).createItem()); } else { - optionsMenuHelper.item(R.string.waypoints).colorIcon(R.drawable.ic_action_intermediate) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.waypoints, mapActivity) + .setColorIcon(R.drawable.ic_action_intermediate) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.WAYPOINTS); return false; } - }).reg(); + }).createItem()); } - optionsMenuHelper.item(R.string.get_directions).colorIcon(R.drawable.ic_action_gdirections_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.get_directions, mapActivity) + .setColorIcon(R.drawable.ic_action_gdirections_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); @@ -640,11 +647,11 @@ public class MapActivityActions implements DialogProvider { } return true; } - }).reg(); + }).createItem()); // Default actions (Layers, Configure Map screen, Settings, Search, Favorites) - optionsMenuHelper.item(R.string.search_button) - .colorIcon(R.drawable.ic_action_search_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.search_button, mapActivity) + .setColorIcon(R.drawable.ic_action_search_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() @@ -659,10 +666,11 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(newIntent); return true; } - }).reg(); + }).createItem()); - optionsMenuHelper.item(R.string.shared_string_my_places).colorIcon(R.drawable.ic_action_fav_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.shared_string_my_places, mapActivity) + .setColorIcon(R.drawable.ic_action_fav_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() @@ -671,38 +679,41 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(newIntent); return true; } - }).reg(); + }).createItem()); - optionsMenuHelper.item(R.string.show_point_options).colorIcon(R.drawable.ic_action_marker_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.show_point_options, mapActivity) + .setColorIcon(R.drawable.ic_action_marker_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); mapActivity.getMapLayers().getContextMenuLayer().showContextMenu(mapView.getLatitude(), mapView.getLongitude(), true); return true; } - }).reg(); + }).createItem()); - optionsMenuHelper.item(R.string.configure_map).colorIcon(R.drawable.ic_action_layers_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.configure_map, mapActivity) + .setColorIcon(R.drawable.ic_action_layers_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_MAP); return false; } - }).reg(); + }).createItem()); - optionsMenuHelper.item(R.string.layer_map_appearance).colorIcon(R.drawable.ic_configure_screen_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_map_appearance, mapActivity) + .setColorIcon(R.drawable.ic_configure_screen_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { MapActivity.clearPrevActivityIntent(); mapActivity.getDashboard().setDashboardVisibility(true, DashboardType.CONFIGURE_SCREEN); return false; } - }).reg(); + }).createItem()); String d = getString(R.string.index_settings); if (app.getDownloadThread().getIndexes().isDownloadedFromInternet) { @@ -711,8 +722,9 @@ public class MapActivityActions implements DialogProvider { d += " (" + updt.size() + ")"; } } - optionsMenuHelper.item(R.string.index_settings).name(d).colorIcon(R.drawable.ic_type_archive) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.index_settings, null) + .setTitle(d).setColorIcon(R.drawable.ic_type_archive) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() @@ -721,11 +733,12 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(newIntent); return true; } - }).reg(); + }).createItem()); if (Version.isGooglePlayEnabled(app)) { - optionsMenuHelper.item(R.string.osm_live).colorIcon(R.drawable.ic_action_osm_live) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.osm_live, mapActivity) + .setColorIcon(R.drawable.ic_action_osm_live) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent intent = new Intent(mapActivity, OsmLiveActivity.class); @@ -733,11 +746,12 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(intent); return false; } - }).reg(); + }).createItem()); } - optionsMenuHelper.item(R.string.prefs_plugins).colorIcon(R.drawable.ic_extension_dark) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.prefs_plugins, mapActivity) + .setColorIcon(R.drawable.ic_extension_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent newIntent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization() @@ -746,11 +760,12 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(newIntent); return true; } - }).reg(); + }).createItem()); - optionsMenuHelper.item(R.string.shared_string_settings).colorIcon(R.drawable.ic_action_settings) - .listen(new OnContextMenuClick() { + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.shared_string_settings, mapActivity) + .setColorIcon(R.drawable.ic_action_settings) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { final Intent settings = new Intent(mapActivity, getMyApplication().getAppCustomization() @@ -759,9 +774,10 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(settings); return true; } - }).reg(); - optionsMenuHelper.item(R.string.shared_string_help).colorIcon(R.drawable.ic_action_help) - .listen(new OnContextMenuClick() { + }).createItem()); + optionsMenuHelper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.shared_string_help, mapActivity) + .setColorIcon(R.drawable.ic_action_help) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent intent = new Intent(mapActivity, HelpActivity.class); @@ -769,7 +785,7 @@ public class MapActivityActions implements DialogProvider { mapActivity.startActivity(intent); return true; } - }).reg(); + }).createItem()); //////////// Others OsmandPlugin.registerOptionsMenu(mapActivity, optionsMenuHelper); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java index f0d25628f4..b481d897c0 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java @@ -14,7 +14,7 @@ import net.osmand.access.AccessibleToast; import net.osmand.map.ITileSource; import net.osmand.map.TileSourceManager.TileSourceTemplate; import net.osmand.plus.ContextMenuAdapter; -import net.osmand.plus.ContextMenuAdapter.Item; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.OsmandApplication; @@ -262,7 +262,9 @@ public class MapActivityLayers { OsmandApplication app = (OsmandApplication) getApplication(); final PoiFiltersHelper poiFilters = app.getPoiFilters(); final ContextMenuAdapter adapter = new ContextMenuAdapter(activity); - adapter.item(R.string.shared_string_search).colorIcon(R.drawable.ic_action_search_dark).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_search, app) + .setColorIcon(R.drawable.ic_action_search_dark).createItem()); final List list = new ArrayList(); list.add(poiFilters.getCustomPOIFilter()); for (PoiUIFilter f : poiFilters.getTopDefinedPoiFilters()) { @@ -301,13 +303,14 @@ public class MapActivityLayers { private void addFilterToList(final ContextMenuAdapter adapter, final List list, PoiUIFilter f) { list.add(f); - Item it = adapter.item(f.getName()).selected(-1); + ContextMenuItem.ItemBuilder builder = new ContextMenuItem.ItemBuilder(); + builder.setTitle(f.getName()); if (RenderingIcons.containsBigIcon(f.getIconId())) { - it.icon(RenderingIcons.getBigIconResourceId(f.getIconId())); + builder.setIcon(RenderingIcons.getBigIconResourceId(f.getIconId())); } else { - it.icon(R.drawable.mx_user_defined); + builder.setIcon(R.drawable.mx_user_defined); } - it.reg(); + adapter.addItem(builder.createItem()); } public void selectMapLayer(final OsmandMapTileView mapView) { diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java index 2a888ae2ba..676cc5687e 100644 --- a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java +++ b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java @@ -36,7 +36,7 @@ public class AppModeDialog { //special method for drawer menu //needed because if there's more than 4 items - the don't fit in drawer - public static View prepareAppModeDrawerView(Activity a, List visible, final Set selected, ContextMenuAdapter.BooleanResult allModes, + public static View prepareAppModeDrawerView(Activity a, final Set selected, ContextMenuAdapter.BooleanResult allModes, boolean useMapTheme, final View.OnClickListener onClickListener) { OsmandSettings settings = ((OsmandApplication) a.getApplication()).getSettings(); final List values = new ArrayList(ApplicationMode.values(settings)); diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index d8eaab3821..1ce3704ef9 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -48,6 +48,7 @@ import net.osmand.data.PointDescription; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -590,8 +591,11 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.layer_recordings).selected(SHOW_RECORDINGS.get() ? 1 : 0) - .colorIcon(R.drawable.ic_action_micro_dark).listen(listener).position(12).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_recordings, app) + .setSelected(SHOW_RECORDINGS.get()) + .setColorIcon(R.drawable.ic_action_micro_dark) + .setPosition(12) + .setListener(listener).createItem()); } @Override @@ -600,33 +604,42 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { if (isRecording()) { return; } - adapter.item(R.string.recording_context_menu_arecord).colorIcon(R.drawable.ic_action_micro_dark) - .listen(new OnContextMenuClick() { + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_arecord, app) + .setColorIcon(R.drawable.ic_action_micro_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { recordAudio(latitude, longitude, mapActivity); return true; } - }).position(6).reg(); - adapter.item(R.string.recording_context_menu_vrecord).colorIcon(R.drawable.ic_action_video_dark) - .listen(new OnContextMenuClick() { + }) + .setPosition(6) + .createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_vrecord, app) + .setColorIcon(R.drawable.ic_action_video_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { recordVideo(latitude, longitude, mapActivity); return true; } - }).position(7).reg(); - adapter.item(R.string.recording_context_menu_precord).colorIcon(R.drawable.ic_action_photo_dark) - .listen(new OnContextMenuClick() { + }) + .setPosition(7) + .createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.recording_context_menu_precord, app) + .setColorIcon(R.drawable.ic_action_photo_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { takePhoto(latitude, longitude, mapActivity, false); return true; } - }).position(8).reg(); + }) + .setPosition(8) + .createItem()); } @Override diff --git a/OsmAnd/src/net/osmand/plus/development/OsmandDevelopmentPlugin.java b/OsmAnd/src/net/osmand/plus/development/OsmandDevelopmentPlugin.java index 8f0974f212..ec8f246ae5 100644 --- a/OsmAnd/src/net/osmand/plus/development/OsmandDevelopmentPlugin.java +++ b/OsmAnd/src/net/osmand/plus/development/OsmandDevelopmentPlugin.java @@ -6,6 +6,7 @@ import android.widget.ArrayAdapter; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; @@ -56,15 +57,17 @@ public class OsmandDevelopmentPlugin extends OsmandPlugin { @Override public void registerOptionsMenuItems(final MapActivity mapActivity, ContextMenuAdapter helper) { if (Version.isDeveloperVersion(mapActivity.getMyApplication())) { - helper.item(R.string.version_settings).colorIcon(R.drawable.ic_action_gabout_dark) - .listen(new OnContextMenuClick() { + helper.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.version_settings, mapActivity) + .setColorIcon(R.drawable.ic_action_gabout_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { final Intent mapIntent = new Intent(mapActivity, ContributionVersionActivity.class); mapActivity.startActivityForResult(mapIntent, 0); return true; } - }).reg(); + }).createItem()); } } diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java index 108001cde0..5bd24db967 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java @@ -15,6 +15,7 @@ import net.osmand.core.android.MapRendererContext; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; import net.osmand.plus.ContextMenuAdapter.OnRowItemClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -54,16 +55,20 @@ import gnu.trove.list.array.TIntArrayList; public class ConfigureMapMenu { private static final Log LOG = PlatformUtil.getLog(ConfigureMapMenu.class); - public interface OnClickListener{ + public interface OnClickListener { public void onClick(boolean result); - }; + } + + ; private boolean allModes = false; public ContextMenuAdapter createListAdapter(final MapActivity ma) { ContextMenuAdapter adapter = new ContextMenuAdapter(ma, allModes); adapter.setDefaultLayoutId(R.layout.drawer_list_item); - adapter.item(R.string.app_modes_choose).layout(R.layout.mode_toggles).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.app_modes_choose, ma) + .setLayout(R.layout.mode_toggles).createItem()); adapter.setChangeAppModeListener(new OnClickListener() { @Override public void onClick(boolean result) { @@ -73,10 +78,10 @@ public class ConfigureMapMenu { }); createLayersItems(adapter, ma); createRenderingAttributeItems(adapter, ma); - + return adapter; } - + private final class LayerMenuListener extends OnRowItemClick { private MapActivity ma; private ContextMenuAdapter cm; @@ -95,16 +100,16 @@ public class ConfigureMapMenu { } return files; } - + @Override public boolean onRowItemClick(ArrayAdapter adapter, View view, int itemId, int pos) { - if(itemId == R.string.layer_poi) { + if (itemId == R.string.layer_poi) { selectPOILayer(ma.getMyApplication().getSettings()); return false; - } else if(itemId == R.string.layer_gpx_layer && cm.getSelection(pos) == 1) { + } else if (itemId == R.string.layer_gpx_layer && cm.getSelection(pos)) { ma.getMapLayers().showGPXFileLayer(getAlreadySelectedGpx(), ma.getMapView()); return false; - } else { + } else { return super.onRowItemClick(adapter, view, itemId, pos); } } @@ -131,13 +136,13 @@ public class ConfigureMapMenu { public void onDismiss(DialogInterface dialog) { boolean areAnyGpxTracksVisible = ma.getMyApplication().getSelectedGpxHelper().isShowingAnyGpxFiles(); - cm.setSelection(pos, areAnyGpxTracksVisible ? 1 : 0); + cm.setSelection(pos, areAnyGpxTracksVisible); adapter.notifyDataSetChanged(); } }); } } else if (itemId == R.string.layer_map) { - if(OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) == null) { + if (OsmandPlugin.getEnabledPlugin(OsmandRasterMapsPlugin.class) == null) { Intent intent = new Intent(ma, PluginActivity.class); intent.putExtra(PluginActivity.EXTRA_PLUGIN_ID, OsmandRasterMapsPlugin.ID); ma.startActivity(intent); @@ -165,29 +170,46 @@ public class ConfigureMapMenu { } } - private void createLayersItems(ContextMenuAdapter adapter , MapActivity activity) { + private void createLayersItems(ContextMenuAdapter adapter, MapActivity activity) { OsmandApplication app = activity.getMyApplication(); OsmandSettings settings = app.getSettings(); LayerMenuListener l = new LayerMenuListener(activity, adapter); - adapter.item(R.string.shared_string_show).setCategory(true).layout(R.layout.drawer_list_sub_header).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_show, activity) + .setCategory(true).setLayout(R.layout.drawer_list_sub_header).createItem()); // String appMode = " [" + settings.getApplicationMode().toHumanString(view.getApplication()) +"] "; - adapter.item(R.string.layer_poi).selected(settings.SELECTED_POI_FILTER_FOR_MAP.get() != null ? 1 : 0) - .colorIcon(R.drawable.ic_action_info_dark).listen(l).reg(); - adapter.item(R.string.layer_amenity_label).selected(settings.SHOW_POI_LABEL.get() ? 1 : 0) - .colorIcon(R.drawable.ic_action_text_dark).listen(l).reg(); - adapter.item(R.string.shared_string_favorites).selected(settings.SHOW_FAVORITES.get() ? 1 : 0) - .colorIcon(R.drawable.ic_action_fav_dark).listen(l).reg(); - adapter.item(R.string.layer_gpx_layer).selected( - app.getSelectedGpxHelper().isShowingAnyGpxFiles() ? 1 : 0) - .colorIcon(R.drawable.ic_action_polygom_dark) - .listen(l).reg(); - adapter.item(R.string.layer_map).colorIcon(R.drawable.ic_world_globe_dark) - .listen(l).reg(); - if(TransportRouteHelper.getInstance().routeIsCalculated()){ - adapter.item(R.string.layer_transport_route).selected(1) - .colorIcon(R.drawable.ic_action_bus_dark).listen(l).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_poi, activity) + .setSelected(settings.SELECTED_POI_FILTER_FOR_MAP.get() != null) + .setColorIcon(R.drawable.ic_action_info_dark) + .setListener(l).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_amenity_label, activity) + .setSelected(settings.SHOW_POI_LABEL.get()) + .setColorIcon(R.drawable.ic_action_text_dark) + .setListener(l).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_favorites, activity) + .setSelected(settings.SHOW_FAVORITES.get()) + .setColorIcon(R.drawable.ic_action_fav_dark) + .setListener(l).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_gpx_layer, activity) + .setSelected(app.getSelectedGpxHelper().isShowingAnyGpxFiles()) + .setColorIcon(R.drawable.ic_action_polygom_dark) + .setListener(l).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_map, activity) + .setColorIcon(R.drawable.ic_world_globe_dark) + .setListener(l).createItem()); + if (TransportRouteHelper.getInstance().routeIsCalculated()) { + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_transport_route, activity) + .setSelected(true) + .setColorIcon(R.drawable.ic_action_bus_dark) + .setListener(l).createItem()); } - + OsmandPlugin.registerLayerContextMenu(activity.getMapView(), adapter, activity); app.getAppCustomization().prepareLayerContextMenu(activity, adapter); } @@ -196,209 +218,224 @@ public class ConfigureMapMenu { activity.getMyApplication().getResourceManager().getRenderer().clearCache(); activity.updateMapSettings(); GPXLayer gpx = activity.getMapView().getLayerByClass(GPXLayer.class); - if(gpx != null) { + if (gpx != null) { gpx.updateLayerStyle(); } RouteLayer rte = activity.getMapView().getLayerByClass(RouteLayer.class); - if(rte != null) { + if (rte != null) { rte.updateLayerStyle(); } activity.getMapView().refreshMap(true); } - + private void createRenderingAttributeItems(final ContextMenuAdapter adapter, final MapActivity activity) { - adapter.item(R.string.map_widget_map_rendering).setCategory(true).layout(R.layout.drawer_list_sub_header).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.map_widget_map_rendering, activity) + .setCategory(true) + .setLayout(R.layout.drawer_list_sub_header).createItem()); String descr = getRenderDescr(activity); - adapter.item(R.string.map_widget_renderer).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - AlertDialog.Builder bld = new AlertDialog.Builder(activity); - bld.setTitle(R.string.renderers); - final OsmandApplication app = activity.getMyApplication(); - Collection rendererNames = app.getRendererRegistry().getRendererNames(); - final String[] items = rendererNames.toArray(new String[rendererNames.size()]); - final String[] visibleNames = new String[items.length]; - int selected = -1; - final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); - for (int j = 0; j < items.length; j++) { - if (items[j].equals(selectedName)) { - selected = j; - } - visibleNames[j] = items[j].replace('_', ' ').replace('-', ' '); - } - bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { - + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.map_widget_renderer, activity) + .setListener(new OnContextMenuClick() { @Override - public void onClick(DialogInterface dialog, int which) { - String renderer = items[which]; - RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); - if (loaded != null) { - OsmandMapTileView view = activity.getMapView(); - view.getSettings().RENDERER.set(renderer); - app.getRendererRegistry().setCurrentSelectedRender(loaded); - refreshMapComplete(activity); - } else { - AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + AlertDialog.Builder bld = new AlertDialog.Builder(activity); + bld.setTitle(R.string.renderers); + final OsmandApplication app = activity.getMyApplication(); + Collection rendererNames = app.getRendererRegistry().getRendererNames(); + final String[] items = rendererNames.toArray(new String[rendererNames.size()]); + final String[] visibleNames = new String[items.length]; + int selected = -1; + final String selectedName = app.getRendererRegistry().getCurrentSelectedRenderer().getName(); + for (int j = 0; j < items.length; j++) { + if (items[j].equals(selectedName)) { + selected = j; + } + visibleNames[j] = items[j].replace('_', ' ').replace('-', ' '); } - adapter.setItemDescription(pos, getRenderDescr(activity)); - activity.getDashboard().refreshContent(true); - dialog.dismiss(); - } + bld.setSingleChoiceItems(visibleNames, selected, new DialogInterface.OnClickListener() { - }); - bld.show(); - return false; - } - }).description(descr).layout(R.layout.drawer_list_doubleitem).reg(); - - adapter.item(R.string.map_widget_day_night).description(getDayNightDescr(activity)).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - final OsmandMapTileView view = activity.getMapView(); - AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); - bld.setTitle(R.string.daynight); - final String[] items = new String[OsmandSettings.DayNightMode.values().length]; - for (int i = 0; i < items.length; i++) { - items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(activity.getMyApplication()); - } - int i = view.getSettings().DAYNIGHT_MODE.get().ordinal(); - bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - view.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); - refreshMapComplete(activity); - dialog.dismiss(); - activity.getDashboard().refreshContent(true); - //adapter.setItemDescription(pos, getDayNightDescr(activity)); - //ad.notifyDataSetInvalidated(); - } - }); - bld.show(); - return false; - } - }).layout(R.layout.drawer_list_doubleitem).reg(); - - adapter.item(R.string.map_magnifier).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - final OsmandMapTileView view = activity.getMapView(); - final OsmandSettings.OsmandPreference mapDensity = view.getSettings().MAP_DENSITY; - final AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); - int p = (int) (mapDensity.get() * 100); - final TIntArrayList tlist = new TIntArrayList(new int[] { 33, 50, 75, 100, 150, 200, 300, 400 }); - final List values = new ArrayList(); - int i = -1; - for (int k = 0; k <= tlist.size(); k++) { - final boolean end = k == tlist.size(); - if (i == -1) { - if ((end || p < tlist.get(k))) { - values.add(p + " %"); - i = k; - } else if (p == tlist.get(k)) { - i = k; - } - } - if (k < tlist.size()) { - values.add(tlist.get(k) + " %"); - } - } - if (values.size() != tlist.size()) { - tlist.insert(i, p); - } - - bld.setTitle(R.string.map_magnifier); - bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, - new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - int p = tlist.get(which); - mapDensity.set(p / 100.0f); - view.setComplexZoom(view.getZoom(), view.getSettingsMapDensity()); - MapRendererContext mapContext = NativeCoreContext.getMapRendererContext(); - if (mapContext != null) { - mapContext.updateMapSettings(); + String renderer = items[which]; + RenderingRulesStorage loaded = app.getRendererRegistry().getRenderer(renderer); + if (loaded != null) { + OsmandMapTileView view = activity.getMapView(); + view.getSettings().RENDERER.set(renderer); + app.getRendererRegistry().setCurrentSelectedRender(loaded); + refreshMapComplete(activity); + } else { + AccessibleToast.makeText(app, R.string.renderer_load_exception, Toast.LENGTH_SHORT).show(); } - adapter.setItemDescription(pos, String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %"); + adapter.setItemDescription(pos, getRenderDescr(activity)); + activity.getDashboard().refreshContent(true); + dialog.dismiss(); + } + + }); + bld.show(); + return false; + } + }).setDescription(descr).setLayout(R.layout.drawer_list_doubleitem).createItem()); + + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.map_widget_day_night, activity) + .setDescription(getDayNightDescr(activity)) + .setListener(new OnContextMenuClick() { + @Override + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + final OsmandMapTileView view = activity.getMapView(); + AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); + bld.setTitle(R.string.daynight); + final String[] items = new String[OsmandSettings.DayNightMode.values().length]; + for (int i = 0; i < items.length; i++) { + items[i] = OsmandSettings.DayNightMode.values()[i].toHumanString(activity.getMyApplication()); + } + int i = view.getSettings().DAYNIGHT_MODE.get().ordinal(); + bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + view.getSettings().DAYNIGHT_MODE.set(OsmandSettings.DayNightMode.values()[which]); + refreshMapComplete(activity); + dialog.dismiss(); + activity.getDashboard().refreshContent(true); + //adapter.setItemDescription(pos, getDayNightDescr(activity)); + //ad.notifyDataSetInvalidated(); + } + }); + bld.show(); + return false; + } + }).setLayout(R.layout.drawer_list_doubleitem).createItem()); + + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.map_magnifier, activity).setListener(new OnContextMenuClick() { + @Override + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + final OsmandMapTileView view = activity.getMapView(); + final OsmandSettings.OsmandPreference mapDensity = view.getSettings().MAP_DENSITY; + final AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); + int p = (int) (mapDensity.get() * 100); + final TIntArrayList tlist = new TIntArrayList(new int[]{33, 50, 75, 100, 150, 200, 300, 400}); + final List values = new ArrayList(); + int i = -1; + for (int k = 0; k <= tlist.size(); k++) { + final boolean end = k == tlist.size(); + if (i == -1) { + if ((end || p < tlist.get(k))) { + values.add(p + " %"); + i = k; + } else if (p == tlist.get(k)) { + i = k; + } + } + if (k < tlist.size()) { + values.add(tlist.get(k) + " %"); + } + } + if (values.size() != tlist.size()) { + tlist.insert(i, p); + } + + bld.setTitle(R.string.map_magnifier); + bld.setSingleChoiceItems(values.toArray(new String[values.size()]), i, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + int p = tlist.get(which); + mapDensity.set(p / 100.0f); + view.setComplexZoom(view.getZoom(), view.getSettingsMapDensity()); + MapRendererContext mapContext = NativeCoreContext.getMapRendererContext(); + if (mapContext != null) { + mapContext.updateMapSettings(); + } + adapter.setItemDescription(pos, String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %"); + ad.notifyDataSetInvalidated(); + dialog.dismiss(); + } + }); + bld.show(); + return false; + } + }).setDescription(String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %") + .setLayout(R.layout.drawer_list_doubleitem) + .createItem()); + + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.text_size, activity).setListener(new OnContextMenuClick() { + @Override + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + final OsmandMapTileView view = activity.getMapView(); + AlertDialog.Builder b = new AlertDialog.Builder(view.getContext()); + // test old descr as title + b.setTitle(R.string.text_size); + final Float[] txtValues = new Float[]{0.75f, 1f, 1.25f, 1.5f, 2f, 3f}; + int selected = -1; + final String[] txtNames = new String[txtValues.length]; + for (int i = 0; i < txtNames.length; i++) { + txtNames[i] = (int) (txtValues[i] * 100) + " %"; + if (Math.abs(view.getSettings().TEXT_SCALE.get() - txtValues[i]) < 0.1f) { + selected = i; + } + } + b.setSingleChoiceItems(txtNames, selected, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + view.getSettings().TEXT_SCALE.set(txtValues[which]); + refreshMapComplete(activity); + adapter.setItemDescription(pos, getScale(activity)); ad.notifyDataSetInvalidated(); dialog.dismiss(); } }); - bld.show(); - return false; - } - }).description(String.format("%.0f", 100f * activity.getMyApplication().getSettings().MAP_DENSITY.get()) + " %").layout(R.layout.drawer_list_doubleitem).reg(); + b.show(); + return false; + } + }).setDescription(getScale(activity)).setLayout(R.layout.drawer_list_doubleitem).createItem()); - adapter.item(R.string.text_size).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - final OsmandMapTileView view = activity.getMapView(); - AlertDialog.Builder b = new AlertDialog.Builder(view.getContext()); - // test old descr as title - b.setTitle(R.string.text_size); - final Float[] txtValues = new Float[]{0.75f, 1f, 1.25f, 1.5f, 2f, 3f}; - int selected = -1; - final String[] txtNames = new String[txtValues.length]; - for (int i = 0; i < txtNames.length; i++) { - txtNames[i] = (int) (txtValues[i] * 100) + " %"; - if (Math.abs(view.getSettings().TEXT_SCALE.get() - txtValues[i]) < 0.1f) { - selected = i; - } - } - b.setSingleChoiceItems(txtNames, selected, new DialogInterface.OnClickListener() { + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.map_locale, activity).setListener(new OnContextMenuClick() { @Override - public void onClick(DialogInterface dialog, int which) { - view.getSettings().TEXT_SCALE.set(txtValues[which]); - refreshMapComplete(activity); - adapter.setItemDescription(pos, getScale(activity)); - ad.notifyDataSetInvalidated(); - dialog.dismiss(); + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + final OsmandMapTileView view = activity.getMapView(); + AlertDialog.Builder b = new AlertDialog.Builder(view.getContext()); + // test old descr as title + b.setTitle(R.string.map_preferred_locale); + final String[] txtIds = getSortedMapNamesIds(activity); + final String[] txtValues = getMapNamesValues(activity, txtIds); + int selected = -1; + for (int i = 0; i < txtIds.length; i++) { + if (view.getSettings().MAP_PREFERRED_LOCALE.get().equals(txtIds[i])) { + selected = i; + break; + } + } + b.setSingleChoiceItems(txtValues, selected, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + view.getSettings().MAP_PREFERRED_LOCALE.set(txtIds[which]); + refreshMapComplete(activity); + adapter.setItemDescription(pos, txtIds[which]); + ad.notifyDataSetInvalidated(); + dialog.dismiss(); + } + }); + b.show(); + return false; } - }); - b.show(); - return false; - } - }).description(getScale(activity)).layout(R.layout.drawer_list_doubleitem).reg(); - - adapter.item(R.string.map_locale).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - final OsmandMapTileView view = activity.getMapView(); - AlertDialog.Builder b = new AlertDialog.Builder(view.getContext()); - // test old descr as title - b.setTitle(R.string.map_preferred_locale); - final String[] txtIds = getSortedMapNamesIds(activity); - final String[] txtValues = getMapNamesValues(activity, txtIds); - int selected = -1; - for (int i = 0; i < txtIds.length; i++) { - if(view.getSettings().MAP_PREFERRED_LOCALE.get().equals(txtIds[i])) { - selected = i; - break; - } - } - b.setSingleChoiceItems(txtValues, selected, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - view.getSettings().MAP_PREFERRED_LOCALE.set(txtIds[which]); - refreshMapComplete(activity); - adapter.setItemDescription(pos, txtIds[which]); - ad.notifyDataSetInvalidated(); - dialog.dismiss(); - } - }); - b.show(); - return false; - } - }).description(activity.getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get()).layout(R.layout.drawer_list_doubleitem).reg(); + }) + .setDescription(activity.getMyApplication().getSettings().MAP_PREFERRED_LOCALE.get()) + .setLayout(R.layout.drawer_list_doubleitem).createItem()); RenderingRulesStorage renderer = activity.getMyApplication().getRendererRegistry().getCurrentSelectedRenderer(); if (renderer != null) { List customRules = new ArrayList(); - for(RenderingRuleProperty p : renderer.PROPS.getCustomRules()) { - if(!RenderingRuleStorageProperties.UI_CATEGORY_HIDDEN.equals(p.getCategory())){ + for (RenderingRuleProperty p : renderer.PROPS.getCustomRules()) { + if (!RenderingRuleStorageProperties.UI_CATEGORY_HIDDEN.equals(p.getCategory())) { customRules.add(p); } } - + createProperties(customRules, R.string.rendering_category_transport, "transport", adapter, activity); createProperties(customRules, R.string.rendering_category_details, "details", @@ -407,30 +444,32 @@ public class ConfigureMapMenu { adapter, activity); createProperties(customRules, R.string.rendering_category_routes, "routes", adapter, activity); - - if(customRules.size() > 0) { - adapter.item(R.string.rendering_category_others).setCategory(true).layout(R.layout.drawer_list_sub_header).reg(); + + if (customRules.size() > 0) { + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.rendering_category_others, activity).setCategory(true) + .setLayout(R.layout.drawer_list_sub_header).createItem()); createCustomRenderingProperties(adapter, activity, customRules); } } } - - public static String[] mapNamesIds = new String[] { "", "en", "als", "af", "ar", "az", "be", "bg", "bn", "bpy", "br", "bs", "ca", "ceb", "cs", "cy", "da", "de", "el", "et", "es", "eu", "fa", "fi", "fr", "fy", "ga", "gl", "he", "hi", "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sh", "sc", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh" }; - + public static String[] mapNamesIds = new String[]{"", "en", "als", "af", "ar", "az", "be", "bg", "bn", "bpy", "br", "bs", "ca", "ceb", "cs", "cy", "da", "de", "el", "et", "es", "eu", "fa", "fi", "fr", "fy", "ga", "gl", "he", "hi", "hr", "ht", "hu", "hy", "id", "is", "it", "ja", "ka", "ko", "ku", "la", "lb", "lt", "lv", "mk", "ml", "mr", "ms", "nds", "new", "nl", "nn", "no", "nv", "os", "pl", "pms", "pt", "ro", "ru", "sh", "sc", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tl", "tr", "uk", "vi", "vo", "zh"}; + + public static String[] getSortedMapNamesIds(Context ctx) { String[] vls = getMapNamesValues(ctx, mapNamesIds); final Map mp = new HashMap(); - for(int i = 0; i < mapNamesIds.length; i++) { + for (int i = 0; i < mapNamesIds.length; i++) { mp.put(mapNamesIds[i], vls[i]); } ArrayList lst = new ArrayList(mp.keySet()); Collections.sort(lst, new Comparator() { @Override public int compare(String lhs, String rhs) { - int i1 = Algorithms.isEmpty(lhs)? 0 : (lhs.equals("en") ? 1 : 2); - int i2 = Algorithms.isEmpty(rhs)? 0 : (rhs.equals("en") ? 1 : 2); - if(i1 != i2) { + int i1 = Algorithms.isEmpty(lhs) ? 0 : (lhs.equals("en") ? 1 : 2); + int i2 = Algorithms.isEmpty(rhs) ? 0 : (rhs.equals("en") ? 1 : 2); + if (i1 != i2) { return i1 < i2 ? -1 : 1; } return mp.get(lhs).compareTo(mp.get(rhs)); @@ -438,26 +477,26 @@ public class ConfigureMapMenu { }); return lst.toArray(new String[lst.size()]); } - + public static String[] getMapNamesValues(Context ctx, String[] ids) { String[] translates = new String[ids.length]; - for(int i = 0; i < translates.length; i++) { - if(Algorithms.isEmpty(ids[i])) { - translates[i] = ctx.getString(R.string.local_map_names); + for (int i = 0; i < translates.length; i++) { + if (Algorithms.isEmpty(ids[i])) { + translates[i] = ctx.getString(R.string.local_map_names); } else { - translates[i] = ((OsmandApplication)ctx.getApplicationContext()).getLangTranslation(ids[i]); + translates[i] = ((OsmandApplication) ctx.getApplicationContext()).getLangTranslation(ids[i]); } } - + return translates; } - private void createProperties(List customRules, final int strId, String cat, - final ContextMenuAdapter adapter, final MapActivity activity) { + private void createProperties(List customRules, final int strId, String cat, + final ContextMenuAdapter adapter, final MapActivity activity) { final List ps = new ArrayList(); final List> prefs = new ArrayList>(); Iterator it = customRules.iterator(); - + while (it.hasNext()) { RenderingRuleProperty p = it.next(); if (cat.equals(p.getCategory()) && p.isBoolean()) { @@ -468,17 +507,20 @@ public class ConfigureMapMenu { it.remove(); } } - if(prefs.size() > 0) { + if (prefs.size() > 0) { final String descr = getDescription(prefs); - adapter.item(strId).description(descr). - layout(R.layout.drawer_list_doubleitem).listen(new OnContextMenuClick() { - + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(strId, activity) + .setDescription(descr) + .setLayout(R.layout.drawer_list_doubleitem) + .setListener(new OnContextMenuClick() { + @Override public boolean onContextMenuClick(ArrayAdapter a, int itemId, int pos, boolean isChecked) { showPreferencesDialog(adapter, a, pos, activity, activity.getString(strId), ps, prefs); return false; } - }).reg(); + }).createItem()); // createCustomRenderingProperties(adapter, activity, ps); } } @@ -496,26 +538,26 @@ public class ConfigureMapMenu { return descr; } - protected void showPreferencesDialog(final ContextMenuAdapter adapter, final ArrayAdapter a, final int pos, final MapActivity activity, - String category, List ps, final List> prefs) { + protected void showPreferencesDialog(final ContextMenuAdapter adapter, final ArrayAdapter a, final int pos, final MapActivity activity, + String category, List ps, final List> prefs) { AlertDialog.Builder bld = new AlertDialog.Builder(activity); boolean[] checkedItems = new boolean[prefs.size()]; for (int i = 0; i < prefs.size(); i++) { checkedItems[i] = prefs.get(i).get(); } - + final boolean[] tempPrefs = new boolean[prefs.size()]; for (int i = 0; i < prefs.size(); i++) { tempPrefs[i] = prefs.get(i).get(); } final String[] vals = new String[ps.size()]; - for(int i = 0; i < ps.size(); i++) { + for (int i = 0; i < ps.size(); i++) { RenderingRuleProperty p = ps.get(i); String propertyName = SettingsActivity.getStringPropertyName(activity, p.getAttrName(), p.getName()); vals[i] = propertyName; } - + bld.setMultiChoiceItems(vals, checkedItems, new OnMultiChoiceClickListener() { @Override @@ -523,13 +565,13 @@ public class ConfigureMapMenu { tempPrefs[which] = isChecked; } }); - + bld.setTitle(category); - + bld.setNegativeButton(R.string.shared_string_cancel, null); - + bld.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int whichButton) { + public void onClick(DialogInterface dialog, int whichButton) { for (int i = 0; i < prefs.size(); i++) { prefs.get(i).set(tempPrefs[i]); } @@ -537,9 +579,9 @@ public class ConfigureMapMenu { a.notifyDataSetInvalidated(); refreshMapComplete(activity); activity.getMapLayers().updateLayers(activity.getMapView()); - } + } }); - + bld.show(); } @@ -557,17 +599,17 @@ public class ConfigureMapMenu { } protected String getScale(final MapActivity activity) { - int scale = (int)(activity.getMyApplication().getSettings().TEXT_SCALE.get() * 100); + int scale = (int) (activity.getMyApplication().getSettings().TEXT_SCALE.get() * 100); return scale + " %"; } - - - private void createCustomRenderingProperties(final ContextMenuAdapter adapter , final MapActivity activity, - List customRules ){ + + + private void createCustomRenderingProperties(final ContextMenuAdapter adapter, final MapActivity activity, + List customRules) { final OsmandMapTileView view = activity.getMapView(); for (final RenderingRuleProperty p : customRules) { if (p.getAttrName().equals(RenderingRuleStorageProperties.A_APP_MODE) || - p.getAttrName().equals(RenderingRuleStorageProperties.A_ENGINE_V1)){ + p.getAttrName().equals(RenderingRuleStorageProperties.A_ENGINE_V1)) { continue; } String propertyName = SettingsActivity.getStringPropertyName(view.getContext(), p.getAttrName(), @@ -578,26 +620,29 @@ public class ConfigureMapMenu { if (p.isBoolean()) { final OsmandSettings.CommonPreference pref = view.getApplication().getSettings() .getCustomRenderBooleanProperty(p.getAttrName()); - adapter.item(propertyName).listen(new OnContextMenuClick() { + adapter.addItem(ContextMenuItem.createBuilder(propertyName) + .setListener(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { - pref.set(!pref.get()); - refreshMapComplete(activity); - return false; - } - }).selected(pref.get() ? 1 : 0).reg(); + @Override + public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { + pref.set(!pref.get()); + refreshMapComplete(activity); + return false; + } + }) + .setSelected(pref.get()) + .createItem()); } else { final OsmandSettings.CommonPreference pref = view.getApplication().getSettings() .getCustomRenderProperty(p.getAttrName()); String descr; - if(!Algorithms.isEmpty(pref.get())) { + if (!Algorithms.isEmpty(pref.get())) { descr = SettingsActivity.getStringPropertyValue(activity, pref.get()); } else { descr = SettingsActivity.getStringPropertyValue(view.getContext(), p.getDefaultValueDescription()); } - adapter.item(propertyName).listen(new OnContextMenuClick() { + adapter.addItem(ContextMenuItem.createBuilder(propertyName).setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { @@ -614,7 +659,7 @@ public class ConfigureMapMenu { String[] possibleValuesString = new String[p.getPossibleValues().length + 1]; possibleValuesString[0] = SettingsActivity.getStringPropertyValue(view.getContext(), - p.getDefaultValueDescription()); + p.getDefaultValueDescription()); for (int j = 0; j < p.getPossibleValues().length; j++) { possibleValuesString[j + 1] = SettingsActivity.getStringPropertyValue(view.getContext(), @@ -624,7 +669,7 @@ public class ConfigureMapMenu { b.setSingleChoiceItems(possibleValuesString, i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - if(which == 0) { + if (which == 0) { pref.set(""); } else { pref.set(p.getPossibleValues()[which - 1]); @@ -638,7 +683,7 @@ public class ConfigureMapMenu { b.show(); return false; } - }).description(descr).layout(R.layout.drawer_list_doubleitem).reg(); + }).setDescription(descr).setLayout(R.layout.drawer_list_doubleitem).createItem()); } } } diff --git a/OsmAnd/src/net/osmand/plus/dialogs/RasterMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/RasterMapMenu.java index e94a3f264e..13112fce97 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/RasterMapMenu.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/RasterMapMenu.java @@ -5,6 +5,7 @@ import android.view.View; import android.widget.ArrayAdapter; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -111,12 +112,17 @@ public class RasterMapMenu { return false; } }; - int selectedCode = selected ? 1 : 0; mapTypeDescr = selected ? mapTypeDescr : mapActivity.getString(R.string.shared_string_none); - contextMenuAdapter.item(toggleActionStringId).listen(l).selected(selectedCode).reg(); + contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(toggleActionStringId, mapActivity) + .setListener(l) + .setSelected(selected).createItem()); if (selected) { - contextMenuAdapter.item(mapTypeString).listen(l).layout(R.layout.two_line_list_item) - .description(mapTypeDescr).reg(); + contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(mapTypeString, mapActivity) + .setListener(l) + .setLayout(R.layout.two_line_list_item) + .setDescription(mapTypeDescr).createItem()); ContextMenuAdapter.OnIntegerValueChangedListener integerListener = new ContextMenuAdapter.OnIntegerValueChangedListener() { @Override @@ -127,20 +133,25 @@ public class RasterMapMenu { } }; // android:max="255" in layout is expected - contextMenuAdapter.item(mapTypeStringTransparency) - .layout(R.layout.progress_list_item) - .colorIcon(R.drawable.ic_action_opacity) - .progress(mapTransparencyPreference.get()) - .listen(l) - .listenInteger(integerListener).reg(); + contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(mapTypeStringTransparency, mapActivity) + .setLayout(R.layout.progress_list_item) + .setColorIcon(R.drawable.ic_action_opacity) + .setProgress(mapTransparencyPreference.get()) + .setListener(l) + .setIntegerListener(integerListener).createItem()); if (type == OsmandRasterMapsPlugin.RasterMapType.UNDERLAY) { - contextMenuAdapter.item(R.string.show_polygons).listen(l) - .selected(hidePolygonsPref.get() ? 0 : 1).reg(); + contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.show_polygons, mapActivity) + .setListener(l) + .setSelected(hidePolygonsPref.get()).createItem()); } Boolean transparencySwitchState = settings.SHOW_LAYER_TRANSPARENCY_SEEKBAR.get() && mapLayers.getMapControlsLayer().isTransparencyBarInitialized(); - contextMenuAdapter.item(R.string.show_transparency_seekbar).listen(l) - .selected(transparencySwitchState ? 1 : 0).reg(); + contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.show_transparency_seekbar, mapActivity) + .setListener(l) + .setSelected(transparencySwitchState).createItem()); } } diff --git a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java index f3b7629a2e..65dbd05d88 100644 --- a/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java +++ b/OsmAnd/src/net/osmand/plus/distancecalculator/DistanceCalculatorPlugin.java @@ -34,6 +34,7 @@ import net.osmand.data.RotatedTileBox; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.Route; @@ -640,7 +641,7 @@ public class DistanceCalculatorPlugin extends OsmandPlugin { } @Override - public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) { + public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { if (o != null && o instanceof WptPt) { final WptPt p = (WptPt) o; boolean containsPoint = false; @@ -675,7 +676,10 @@ public class DistanceCalculatorPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.delete_point).colorIcon(R.drawable.ic_action_delete_dark).listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.delete_point, mapActivity) + .setColorIcon(R.drawable.ic_action_delete_dark) + .setListener(listener).createItem()); } } } diff --git a/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java index 9c18535d48..ea81a394ad 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/DataStoragePlaceDialogFragment.java @@ -90,11 +90,16 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment { internalStorageDescription.setText(getFreeSpace(internalStorage)); View sharedMemoryRow = view.findViewById(R.id.sharedMemoryRow); - sharedMemoryRow.setOnClickListener(sharedMemoryOnClickListener); - ImageView sharedMemoryImageView = (ImageView) view.findViewById(R.id.sharedMemoryImageView); - sharedMemoryImageView.setImageDrawable(getContentIcon(R.drawable.ic_sdcard)); - TextView sharedMemoryDescription = (TextView) view.findViewById(R.id.sharedMemoryDescription); - sharedMemoryDescription.setText(getFreeSpace(sharedStorage)); + if (hasExternalStoragePermission && sharedStorage != null) { + sharedMemoryRow.setOnClickListener(sharedMemoryOnClickListener); + ImageView sharedMemoryImageView = (ImageView) view.findViewById(R.id.sharedMemoryImageView); + sharedMemoryImageView.setImageDrawable(getContentIcon(R.drawable.ic_sdcard)); + TextView sharedMemoryDescription = (TextView) view.findViewById(R.id.sharedMemoryDescription); + sharedMemoryDescription.setText(getFreeSpace(sharedStorage)); + } else { + view.findViewById(R.id.divSharedStorage).setVisibility(View.GONE); + sharedMemoryRow.setVisibility(View.GONE); + } View memoryStickRow = view.findViewById(R.id.memoryStickRow); if (hasExternalStoragePermission && externalStorage != null) { @@ -138,7 +143,7 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment { private String getFreeSpace(File dir) { String sz = ""; - if (dir.canRead()) { + if (dir != null && dir.canRead()) { StatFs fs = new StatFs(dir.getAbsolutePath()); @SuppressWarnings("deprecation") float size = (float) fs.getAvailableBlocks() * fs.getBlockSize(); diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java index 6b424e13ef..2b3f459ac2 100644 --- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java @@ -40,6 +40,7 @@ import net.osmand.IndexConstants; import net.osmand.access.AccessibleToast; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.IconsCache; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -200,16 +201,28 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement if (info.getType() == LocalIndexType.MAP_DATA || info.getType() == LocalIndexType.SRTM_DATA || info.getType() == LocalIndexType.WIKI_DATA) { if (!info.isBackupedData()) { - adapter.item(R.string.local_index_mi_backup).listen(listener).position(1).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.local_index_mi_backup, getContext()) + .setListener(listener) + .setPosition(1).createItem()); } } if (info.isBackupedData()) { - adapter.item(R.string.local_index_mi_restore).listen(listener).position(2).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.local_index_mi_restore, getContext()) + .setListener(listener) + .setPosition(2).createItem()); } if (info.getType() != LocalIndexType.TTS_VOICE_DATA && info.getType() != LocalIndexType.VOICE_DATA) { - adapter.item(R.string.shared_string_rename).listen(listener).position(3).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_rename, getContext()) + .setListener(listener) + .setPosition(3).createItem()); } - adapter.item(R.string.shared_string_delete).listen(listener).position(4).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_delete, getContext()) + .setListener(listener) + .setPosition(4).createItem()); } private boolean performBasicOperation(int resId, final LocalIndexInfo info) { @@ -588,16 +601,24 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement return true; } }; - optionsMenuAdapter.item(R.string.local_index_mi_reload) - .icon(R.drawable.ic_action_refresh_dark) - .listen(listener).position(1).reg(); - optionsMenuAdapter.item(R.string.shared_string_delete) - .icon(R.drawable.ic_action_delete_dark) - .listen(listener).position(2).reg(); - optionsMenuAdapter.item(R.string.local_index_mi_backup) - .listen(listener).position(3).reg(); - optionsMenuAdapter.item(R.string.local_index_mi_restore) - .listen(listener).position(4).reg(); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.local_index_mi_reload,getContext()) + .setIcon(R.drawable.ic_action_refresh_dark) + .setListener(listener) + .createItem()); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_delete,getContext()) + .setIcon(R.drawable.ic_action_delete_dark) + .setListener(listener) + .createItem()); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.local_index_mi_backup,getContext()) + .setListener(listener) + .createItem()); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.local_index_mi_restore,getContext()) + .setListener(listener) + .createItem()); // doesn't work correctly //int max = getResources().getInteger(R.integer.abs__max_action_buttons); int max = 3; diff --git a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java index c94f636d1f..a49bc65601 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java @@ -23,6 +23,7 @@ import net.osmand.CallbackWithObject; import net.osmand.IndexConstants; import net.osmand.access.AccessibleToast; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.GPXTrackAnalysis; @@ -207,8 +208,8 @@ public class GpxUiHelper { } s = s.replace('_', ' '); - adapter.item(s).selected(multipleChoice ? 0 : -1) - .colorIcon(R.drawable.ic_action_polygom_dark).reg(); + adapter.addItem(ContextMenuItem.createBuilder(s).setSelected(multipleChoice) + .setColorIcon(R.drawable.ic_action_polygom_dark).createItem()); //if there's some selected files - need to mark them as selected if (selectedGpxList != null) { @@ -223,12 +224,12 @@ public class GpxUiHelper { final ContextMenuAdapter adapter, int i, String fileName) { if (i == 0 && showCurrentTrack) { if (selectedGpxList.contains("")) { - adapter.setSelection(i, 1); + adapter.setSelection(i, true); } } else { for (String file : selectedGpxList) { if (file.endsWith(fileName)) { - adapter.setSelection(i, 1); + adapter.setSelection(i, true); break; } } @@ -303,15 +304,15 @@ public class GpxUiHelper { // } // tv.setCompoundDrawablePadding(padding); final CheckBox ch = ((CheckBox) v.findViewById(R.id.toggle_item)); - if (adapter.getSelection(position) == -1) { + if (adapter.getSelection(position) == null) { ch.setVisibility(View.INVISIBLE); } else { ch.setOnCheckedChangeListener(null); - ch.setChecked(adapter.getSelection(position) > 0); + ch.setChecked(adapter.getSelection(position)); ch.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - adapter.setSelection(position, isChecked ? 1 : 0); + adapter.setSelection(position, isChecked); } }); } @@ -337,12 +338,12 @@ public class GpxUiHelper { if (app != null && app.getSelectedGpxHelper() != null) { app.getSelectedGpxHelper().clearAllGpxFileToShow(); } - if (showCurrentGpx && adapter.getSelection(0) > 0) { + if (showCurrentGpx && adapter.getSelection(0)) { currentGPX = app.getSavingTrackHelper().getCurrentGpx(); } List s = new ArrayList<>(); for (int i = (showCurrentGpx ? 1 : 0); i < adapter.length(); i++) { - if (adapter.getSelection(i) > 0) { + if (adapter.getSelection(i)) { s.add(list.get(i)); } } @@ -360,7 +361,7 @@ public class GpxUiHelper { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if (multipleChoice) { - adapter.setSelection(position, adapter.getSelection(position) > 0 ? 0 : 1); + adapter.setSelection(position, !adapter.getSelection(position)); listAdapter.notifyDataSetInvalidated(); } else { dlg.dismiss(); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java index a3cb176297..7ba2ec92ca 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenu.java @@ -555,7 +555,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL public void buttonMorePressed() { final ContextMenuAdapter menuAdapter = new ContextMenuAdapter(mapActivity); for (OsmandMapLayer layer : mapActivity.getMapView().getLayers()) { - layer.populateObjectContextMenu(latLon, object, menuAdapter); + layer.populateObjectContextMenu(latLon, object, menuAdapter, mapActivity); } mapActivity.getMapActions().contextMenuPoint(latLon.getLatitude(), latLon.getLongitude(), menuAdapter, object); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java index 372ed6f84f..41eb776da9 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/RoutePreferencesMenu.java @@ -23,6 +23,7 @@ import net.osmand.Location; import net.osmand.data.LatLon; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; @@ -215,7 +216,8 @@ public class RoutePreferencesMenu { String selectedValue = mapActivity.getMyApplication().getSettings().VOICE_PROVIDER.get(); entrieValues[k] = OsmandSettings.VOICE_PROVIDER_NOT_USE; entries[k] = mapActivity.getResources().getString(R.string.shared_string_do_not_use); - adapter.item(entries[k]).reg(); + ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder(); + adapter.addItem(itemBuilder.setTitle(entries[k]).createItem()); if (OsmandSettings.VOICE_PROVIDER_NOT_USE.equals(selectedValue)) { selected = k; } @@ -224,7 +226,7 @@ public class RoutePreferencesMenu { entries[k] = (s.contains("tts") ? mapActivity.getResources().getString(R.string.ttsvoice) + " " : "") + FileNameTranslationHelper.getVoiceName(mapActivity, s); entrieValues[k] = s; - adapter.item(entries[k]).reg(); + adapter.addItem(itemBuilder.setTitle(entries[k]).createItem()); if (s.equals(selectedValue)) { selected = k; } @@ -232,7 +234,7 @@ public class RoutePreferencesMenu { } entrieValues[k] = MORE_VALUE; entries[k] = mapActivity.getResources().getString(R.string.install_more); - adapter.item(entries[k]).reg(); + adapter.addItem(itemBuilder.setTitle(entries[k]).createItem()); AlertDialog.Builder bld = new AlertDialog.Builder(mapActivity); bld.setSingleChoiceItems(entries, selected, new DialogInterface.OnClickListener() { diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java index cf8fd160b6..2fa0154b5f 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java @@ -23,6 +23,7 @@ import net.osmand.ValueHolder; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.NavigationService; import net.osmand.plus.OsmAndFormatter; @@ -140,13 +141,17 @@ public class OsmandMonitoringPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.context_menu_item_add_waypoint).colorIcon(R.drawable.ic_action_gnew_label_dark) - .listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.context_menu_item_add_waypoint, mapActivity) + .setColorIcon(R.drawable.ic_action_gnew_label_dark) + .setListener(listener).createItem()); if (selectedObj instanceof WptPt) { WptPt pt = (WptPt) selectedObj; if (app.getSelectedGpxHelper().getSelectedGPXFile(pt) != null) { - adapter.item(R.string.context_menu_item_edit_waypoint).colorIcon(R.drawable.ic_action_edit_dark) - .listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.context_menu_item_edit_waypoint, mapActivity) + .setColorIcon(R.drawable.ic_action_edit_dark) + .setListener(listener).createItem()); } } } diff --git a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java index 83e468ba40..3cccf990d2 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/AvailableGPXFragment.java @@ -36,6 +36,7 @@ import net.osmand.IndexConstants; import net.osmand.access.AccessibleToast; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.GPXTrackAnalysis; @@ -348,12 +349,13 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { return true; } }; - optionsMenuAdapter.item(R.string.shared_string_show_on_map).icon(R.drawable.ic_show_on_map) - .listen(listener).reg(); - optionsMenuAdapter.item(R.string.shared_string_delete) - .icon(R.drawable.ic_action_delete_dark).listen(listener).reg(); - optionsMenuAdapter.item(R.string.local_index_mi_reload) - .icon(R.drawable.ic_action_refresh_dark).listen(listener).reg(); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.shared_string_show_on_map, getActivity()) + .setIcon(R.drawable.ic_show_on_map) + .setListener(listener).createItem()); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.shared_string_delete, getActivity()) + .setIcon(R.drawable.ic_action_delete_dark).setListener(listener).createItem()); + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_reload, getActivity()) + .setIcon(R.drawable.ic_action_refresh_dark).setListener(listener).createItem()); OsmandPlugin.onOptionsMenuActivity(getActivity(), this, optionsMenuAdapter); for (int j = 0; j < optionsMenuAdapter.length(); j++) { final MenuItem item; diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java index f7fa3c381a..68d6ca1746 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java @@ -21,6 +21,7 @@ import net.osmand.osm.PoiType; import net.osmand.osm.edit.Node; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -216,15 +217,32 @@ public class OsmEditingPlugin extends OsmandPlugin { isEditable = !amenity.getType().isWiki() && !poiType.isNotEditableOsm(); } if (isEditable) { - adapter.item(R.string.poi_context_menu_modify).colorIcon(R.drawable.ic_action_edit_dark).listen(listener).position(1).reg(); - adapter.item(R.string.poi_context_menu_delete).colorIcon(R.drawable.ic_action_delete_dark).listen(listener).position(2).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify, mapActivity) + .setColorIcon(R.drawable.ic_action_edit_dark) + .setListener(listener) + .setPosition(1) + .createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_delete, mapActivity) + .setColorIcon(R.drawable.ic_action_delete_dark) + .setListener(listener) + .setPosition(2) + .createItem()); } else if (selectedObj instanceof OpenstreetmapPoint && ((OpenstreetmapPoint) selectedObj).getAction() != Action.DELETE) { - adapter.item(R.string.poi_context_menu_modify_osm_change) - .colorIcon(R.drawable.ic_action_edit_dark).listen(listener).position(1).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.poi_context_menu_modify_osm_change, mapActivity) + .setColorIcon(R.drawable.ic_action_edit_dark) + .setListener(listener) + .setPosition(1) + .createItem()); } else { - adapter.item(R.string.context_menu_item_create_poi).colorIcon(R.drawable.ic_action_plus_dark).listen(listener).position(-1).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_create_poi, mapActivity) + .setColorIcon(R.drawable.ic_action_plus_dark) + .setListener(listener) + .setPosition(-1) + .createItem()); } - adapter.item(R.string.context_menu_item_open_note).colorIcon(R.drawable.ic_action_bug_dark).listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.context_menu_item_open_note, mapActivity) + .setColorIcon(R.drawable.ic_action_bug_dark) + .setListener(listener).createItem()); } @Override @@ -239,8 +257,10 @@ public class OsmEditingPlugin extends OsmandPlugin { @Override public void registerLayerContextMenuActions(OsmandMapTileView mapView, ContextMenuAdapter adapter, final MapActivity mapActivity) { - adapter.item(R.string.layer_osm_bugs).selected(settings.SHOW_OSM_BUGS.get() ? 1 : 0) - .colorIcon(R.drawable.ic_action_bug_dark).listen(new OnContextMenuClick() { + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_osm_bugs, mapActivity) + .setSelected(settings.SHOW_OSM_BUGS.get()) + .setColorIcon(R.drawable.ic_action_bug_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { @@ -250,7 +270,9 @@ public class OsmEditingPlugin extends OsmandPlugin { } return true; } - }).position(16).reg(); + }) + .setPosition(16) + .createItem()); } @@ -262,16 +284,16 @@ public class OsmEditingPlugin extends OsmandPlugin { @Override public void contextMenuFragment(final Activity la, final Fragment fragment, final Object info, ContextMenuAdapter adapter) { if (fragment instanceof AvailableGPXFragment) { - adapter.item(R.string.local_index_mi_upload_gpx) - .colorIcon(R.drawable.ic_action_export) - .listen(new OnContextMenuClick() { + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_upload_gpx, la) + .setColorIcon(R.drawable.ic_action_export) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { sendGPXFiles(la, (AvailableGPXFragment) fragment, (GpxInfo) info); return true; } - }).reg(); + }).createItem()); } } @@ -279,9 +301,9 @@ public class OsmEditingPlugin extends OsmandPlugin { public void optionsMenuFragment(final Activity activity, final Fragment fragment, ContextMenuAdapter optionsMenuAdapter) { if (fragment instanceof AvailableGPXFragment) { final AvailableGPXFragment f = ((AvailableGPXFragment) fragment); - optionsMenuAdapter.item(R.string.local_index_mi_upload_gpx) - .icon(R.drawable.ic_action_export) - .listen(new OnContextMenuClick() { + optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_upload_gpx, activity) + .setIcon(R.drawable.ic_action_export) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { @@ -296,7 +318,9 @@ public class OsmEditingPlugin extends OsmandPlugin { }); return true; } - }).position(5).reg(); + }) + .setPosition(5) + .createItem()); } } diff --git a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java index d6cfc9403d..c681b18c93 100644 --- a/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java +++ b/OsmAnd/src/net/osmand/plus/osmo/OsMoPlugin.java @@ -13,6 +13,7 @@ import net.osmand.PlatformUtil; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; @@ -274,15 +275,18 @@ public class OsMoPlugin extends OsmandPlugin implements OsMoReactor { @Override public void registerOptionsMenuItems(final MapActivity mapActivity, ContextMenuAdapter helper) { - helper.item(R.string.osmo_groups).colorIcon(R.drawable.ic_osmo_dark).position(6) - .listen(new OnContextMenuClick() { + helper.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.osmo_groups, mapActivity) + .setColorIcon(R.drawable.ic_osmo_dark) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked) { Intent intent = new Intent(mapActivity, OsMoGroupsActivity.class); mapActivity.startActivity(intent); return true; } - }).reg(); + }) + .setPosition(6) + .createItem()); } diff --git a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java index 6c81b908f6..19ad36e18b 100644 --- a/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java +++ b/OsmAnd/src/net/osmand/plus/parkingpoint/ParkingPositionPlugin.java @@ -19,6 +19,7 @@ import net.osmand.data.LatLon; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; @@ -226,9 +227,11 @@ public class ParkingPositionPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.context_menu_item_add_parking_point) - .colorIcon(R.drawable.ic_action_parking_dark).listen(addListener).reg(); - + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.context_menu_item_add_parking_point, mapActivity) + .setColorIcon(R.drawable.ic_action_parking_dark) + .setListener(addListener) + .createItem()); } /** diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java index 8bf8c9395e..840ed58608 100644 --- a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java +++ b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java @@ -24,6 +24,7 @@ import net.osmand.map.TileSourceManager; import net.osmand.map.TileSourceManager.TileSourceTemplate; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -254,12 +255,22 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin { String overlayMapDescr = settings.MAP_OVERLAY.get(); overlayMapDescr = overlayMapDescr != null ? overlayMapDescr : mapActivity.getString(R.string.shared_string_none); - adapter.item(R.string.layer_overlay).layout(R.layout.drawer_list_doubleitem).description(overlayMapDescr) - .colorIcon(R.drawable.ic_layer_top_dark).listen(listener).position(14).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_overlay, mapActivity) + .setLayout(R.layout.drawer_list_doubleitem) + .setDescription(overlayMapDescr) + .setColorIcon(R.drawable.ic_layer_top_dark) + .setListener(listener) + .setPosition(14) + .createItem()); String underlayMapDescr = settings.MAP_UNDERLAY.get(); underlayMapDescr = underlayMapDescr != null ? underlayMapDescr : mapActivity.getString(R.string.shared_string_none); - adapter.item(R.string.layer_underlay).layout(R.layout.drawer_list_doubleitem).description(underlayMapDescr) - .colorIcon(R.drawable.ic_layer_bottom_dark).listen(listener).position(15).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.layer_underlay, mapActivity) + .setLayout(R.layout.drawer_list_doubleitem) + .setDescription(underlayMapDescr) + .setColorIcon(R.drawable.ic_layer_bottom_dark) + .setListener(listener) + .setPosition(15) + .createItem()); } @@ -280,10 +291,14 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.context_menu_item_update_map).colorIcon(R.drawable.ic_action_refresh_dark) - .listen(listener).reg(); - adapter.item(R.string.shared_string_download_map).colorIcon(R.drawable.ic_action_import) - .listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.context_menu_item_update_map, mapActivity) + .setColorIcon(R.drawable.ic_action_refresh_dark) + .setListener(listener).createItem()); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_download_map, mapActivity) + .setColorIcon(R.drawable.ic_action_import) + .setListener(listener).createItem()); } } diff --git a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java index 59d315298e..9b9786f347 100644 --- a/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java +++ b/OsmAnd/src/net/osmand/plus/routepointsnavigation/RoutePointsLayer.java @@ -8,6 +8,7 @@ import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.GPXUtilities; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; @@ -83,7 +84,7 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye } @Override - public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) { + public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { if (o != null && o instanceof GPXUtilities.WptPt && plugin.getCurrentRoute() != null){ final GPXUtilities.WptPt point = (GPXUtilities.WptPt) o; ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @@ -109,23 +110,33 @@ public class RoutePointsLayer extends OsmandMapLayer implements ContextMenuLaye }; if (plugin.getCurrentRoute().getPointStatus(point)){ - adapter.item(R.string.mark_as_not_visited).colorIcon( - R.drawable.ic_action_gremove_dark).listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.mark_as_not_visited, mapActivity) + .setColorIcon(R.drawable.ic_action_gremove_dark) + .setListener(listener) + .createItem()); } else { - adapter.item(R.string.mark_as_visited).colorIcon( - R.drawable.ic_action_done).listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.mark_as_visited, mapActivity) + .setColorIcon(R.drawable.ic_action_done) + .setListener(listener) + .createItem()); } RoutePointsPlugin.RoutePoint routePoint = plugin.getCurrentRoute().getRoutePointFromWpt(point); if (routePoint != null) { if (routePoint.isNextNavigate) { - adapter.item(R.string.navigate_to_next) - .colorIcon(R.drawable.ic_action_gnext_dark).listen(listener) - .reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.navigate_to_next, mapActivity) + .setColorIcon(R.drawable.ic_action_gnext_dark) + .setListener(listener) + .createItem()); } else { - adapter.item(R.string.mark_as_current) - .colorIcon(R.drawable.ic_action_signpost_dark) - .listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.mark_as_current, mapActivity) + .setColorIcon(R.drawable.ic_action_signpost_dark) + .setListener(listener) + .createItem()); } } } diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java index 59c8b2ad55..8d14fc8e3b 100644 --- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -6,6 +6,7 @@ import android.widget.ArrayAdapter; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -114,8 +115,14 @@ public class SRTMPlugin extends OsmandPlugin { return true; } }; - adapter.item(R.string.layer_hillshade).selected(HILLSHADE.get()? 1 : 0) - .colorIcon(R.drawable.ic_action_hillshade_dark).listen(listener).position(13).layout(R.layout.drawer_list_item).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.layer_hillshade, mapActivity) + .setSelected(HILLSHADE.get()) + .setColorIcon(R.drawable.ic_action_hillshade_dark) + .setListener(listener) + .setPosition(13) + .setLayout(R.layout.drawer_list_item) + .createItem()); } @Override diff --git a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java index daf3283f5f..c6c681ba66 100644 --- a/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ContextMenuLayer.java @@ -18,6 +18,7 @@ import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MapContextMenu; @@ -131,7 +132,7 @@ public class ContextMenuLayer extends OsmandMapLayer { } @Override - public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) { + public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { if (menu.hasHiddenBottomInfo()) { ContextMenuAdapter.OnContextMenuClick listener = new ContextMenuAdapter.OnContextMenuClick() { @Override @@ -142,9 +143,10 @@ public class ContextMenuLayer extends OsmandMapLayer { return true; } }; - adapter.item(R.string.shared_string_show_description) - .colorIcon(R.drawable.ic_action_note_dark).listen(listener) - .reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder() + .setTitleId(R.string.shared_string_show_description, activity) + .setColorIcon(R.drawable.ic_action_note_dark).setListener(listener) + .createItem()); } } diff --git a/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java b/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java index c24021d753..9e870f8d5e 100644 --- a/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/ImpassableRoadsLayer.java @@ -13,6 +13,7 @@ import net.osmand.data.LatLon; import net.osmand.data.PointDescription; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.routing.RoutingHelper; @@ -160,7 +161,7 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL } @Override - public void populateObjectContextMenu(final LatLon latLon, final Object o, ContextMenuAdapter adapter) { + public void populateObjectContextMenu(final LatLon latLon, final Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { if (latLon != null && o == null && (routingHelper.isRoutePlanningMode() || routingHelper.isFollowingMode())) { @@ -176,8 +177,10 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL } }; - adapter.item(R.string.avoid_road).colorIcon( - R.drawable.ic_action_road_works_dark).listen(listener).reg(); + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.avoid_road, activity) + .setColorIcon(R.drawable.ic_action_road_works_dark) + .setListener(listener) + .createItem()); } } } diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapLayer.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapLayer.java index 2ca444ef8c..52ce57ee8e 100644 --- a/OsmAnd/src/net/osmand/plus/views/OsmandMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapLayer.java @@ -12,6 +12,7 @@ import net.osmand.data.QuadRect; import net.osmand.data.QuadTree; import net.osmand.data.RotatedTileBox; import net.osmand.plus.ContextMenuAdapter; +import net.osmand.plus.activities.MapActivity; import net.osmand.util.MapAlgorithms; import java.util.ArrayList; @@ -37,7 +38,7 @@ public abstract class OsmandMapLayer { public void onRetainNonConfigurationInstance(Map map) { } - public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter) { + public void populateObjectContextMenu(LatLon latLon, Object o, ContextMenuAdapter adapter, MapActivity mapActivity) { } public boolean onSingleTap(PointF point, RotatedTileBox tileBox) { diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java index 12087c52ea..7ea56c5711 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java @@ -11,6 +11,7 @@ import android.widget.LinearLayout; import net.osmand.plus.ApplicationMode; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter.OnContextMenuClick; +import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings.MapMarkersMode; import net.osmand.plus.OsmandSettings.OsmandPreference; @@ -285,47 +286,50 @@ public class MapWidgetRegistry { addControlId(map, cm, R.string.map_widget_top_text, settings.SHOW_STREET_NAME); } if (settings.USE_MAP_MARKERS.get()) { - cm.item(R.string.map_markers).description(settings.MAP_MARKERS_MODE.get().toHumanString(map)).listen(new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { - final OsmandMapTileView view = map.getMapView(); - AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); - bld.setTitle(R.string.map_markers); - final String[] items = new String[MapMarkersMode.values().length]; - for (int i = 0; i < items.length; i++) { - items[i] = MapMarkersMode.values()[i].toHumanString(map); - } - int i = settings.MAP_MARKERS_MODE.get().ordinal(); - bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_markers, map) + .setDescription(settings.MAP_MARKERS_MODE.get().toHumanString(map)) + .setListener(new OnContextMenuClick() { @Override - public void onClick(DialogInterface dialog, int which) { - settings.MAP_MARKERS_MODE.set(MapMarkersMode.values()[which]); - for (MapWidgetRegInfo info : right) { - if ("map_marker_1st".equals(info.key) || "map_marker_2nd".equals(info.key)) { - changeVisibility(info, settings.MAP_MARKERS_MODE.get().isWidgets()); + public boolean onContextMenuClick(final ArrayAdapter ad, int itemId, final int pos, boolean isChecked) { + final OsmandMapTileView view = map.getMapView(); + AlertDialog.Builder bld = new AlertDialog.Builder(view.getContext()); + bld.setTitle(R.string.map_markers); + final String[] items = new String[MapMarkersMode.values().length]; + for (int i = 0; i < items.length; i++) { + items[i] = MapMarkersMode.values()[i].toHumanString(map); + } + int i = settings.MAP_MARKERS_MODE.get().ordinal(); + bld.setSingleChoiceItems(items, i, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + settings.MAP_MARKERS_MODE.set(MapMarkersMode.values()[which]); + for (MapWidgetRegInfo info : right) { + if ("map_marker_1st".equals(info.key) || "map_marker_2nd".equals(info.key)) { + changeVisibility(info, settings.MAP_MARKERS_MODE.get().isWidgets()); + } + } + MapInfoLayer mil = map.getMapLayers().getMapInfoLayer(); + if (mil != null) { + mil.recreateControls(); + } + map.refreshMap(); + dialog.dismiss(); + cm.setItemDescription(pos, settings.MAP_MARKERS_MODE.get().toHumanString(map)); + ad.notifyDataSetChanged(); } - } - MapInfoLayer mil = map.getMapLayers().getMapInfoLayer(); - if (mil != null) { - mil.recreateControls(); - } - map.refreshMap(); - dialog.dismiss(); - cm.setItemDescription(pos, settings.MAP_MARKERS_MODE.get().toHumanString(map)); - ad.notifyDataSetChanged(); + }); + bld.show(); + return false; } - }); - bld.show(); - return false; - } - }).layout(R.layout.list_item_text_button).reg(); + }).setLayout(R.layout.list_item_text_button).createItem()); } } - private void addControlId(final MapActivity map, ContextMenuAdapter cm, int stringId, OsmandPreference pref) { - cm.item(stringId).selected(pref.get() ? 1 : 0) -// .icons(r.drawableDark, r.drawableLight) - .listen(new ApearanceOnContextMenuClick(pref, map)).reg(); + private void addControlId(final MapActivity map, ContextMenuAdapter cm, + @StringRes int stringId, OsmandPreference pref) { + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(stringId, map) + .setSelected(pref.get()) + .setListener(new ApearanceOnContextMenuClick(pref, map)).createItem()); } class ApearanceOnContextMenuClick implements OnContextMenuClick { @@ -360,13 +364,16 @@ public class MapWidgetRegistry { public void addControls(MapActivity map, ContextMenuAdapter cm, ApplicationMode mode) { - cm.item(R.string.map_widget_right).setCategory(true).layout(R.layout.list_group_title_with_switch).reg(); + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_right, map) + .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); addControls(map, cm, right, mode); if (mode != ApplicationMode.DEFAULT) { - cm.item(R.string.map_widget_left).setCategory(true).layout(R.layout.list_group_title_with_switch).reg(); + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_left, map) + .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); addControls(map, cm, left, mode); } - cm.item(R.string.map_widget_appearance_rem).setCategory(true).layout(R.layout.list_group_title_with_switch).reg(); + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_appearance_rem, map) + .setCategory(true).setLayout(R.layout.list_group_title_with_switch).createItem()); addControlsAppearance(map, cm, mode); } @@ -393,11 +400,11 @@ public class MapWidgetRegistry { if ("map_marker_1st".equals(r.key) || "map_marker_2nd".equals(r.key)) { continue; } - adapter.item(r.messageId) - .selected(r.visibleCollapsed(mode) || r.visible(mode) ? 1 : 0) - .colorIcon(r.drawableMenu) - .secondaryIconColor(R.drawable.ic_action_additional_option) - .listen(new OnContextMenuClick() { + adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(r.messageId, map) + .setSelected(r.visibleCollapsed(mode) || r.visible(mode)) + .setColorIcon(r.drawableMenu) + .setSecondaryLightIcon(R.drawable.ic_action_additional_option) + .setListener(new OnContextMenuClick() { @Override public boolean onContextMenuClick(ArrayAdapter a, int itemId, int pos, boolean isChecked) { changeVisibility(r); @@ -406,12 +413,11 @@ public class MapWidgetRegistry { mil.recreateControls(); } adapter.setItemName(pos, getText(mil.getMapActivity(), mode, r)); - adapter.setSelection(pos, r.visibleCollapsed(mode) || r.visible(mode) ? 1 : 0); + adapter.setSelection(pos, r.visibleCollapsed(mode) || r.visible(mode)); a.notifyDataSetChanged(); return false; } - }) - .reg(); + }).createItem()); adapter.setItemName(adapter.length() - 1, getText(map, mode, r)); } } @@ -492,7 +498,8 @@ public class MapWidgetRegistry { public ContextMenuAdapter getViewConfigureMenuAdapter(final MapActivity map) { final ContextMenuAdapter cm = new ContextMenuAdapter(map); cm.setDefaultLayoutId(R.layout.list_item_icon_and_menu); - cm.item(R.string.app_modes_choose).layout(R.layout.mode_toggles).reg(); + cm.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.app_modes_choose, map) + .setLayout(R.layout.mode_toggles).createItem()); cm.setChangeAppModeListener(new ConfigureMapMenu.OnClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java index c34e4207b4..29b91c300e 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/RouteInfoWidgetsFactory.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import android.content.res.Resources; +import android.graphics.*; import net.osmand.Location; import net.osmand.binary.RouteDataObject; import net.osmand.data.LatLon; @@ -37,13 +39,7 @@ import net.osmand.util.Algorithms; import net.osmand.util.MapUtils; import android.app.Activity; import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ColorFilter; -import android.graphics.Matrix; -import android.graphics.Paint; import android.graphics.Paint.Style; -import android.graphics.Path; import android.graphics.drawable.Drawable; import android.text.format.DateFormat; import android.view.View; @@ -518,7 +514,134 @@ public class RouteInfoWidgetsFactory { paths.set(laneType, p); return p; } - + + private static Bitmap getPathBitmapFromTurnType(Resources res, List paths, int laneType, int secondTurnType, Bitmap defaultType, float coef) { + if(laneType == 0) { + return defaultType; + } + /*while (paths.size() <= laneType) { + paths.add(null); + } + + if(secondTurnType == 0) { + Bitmap b = paths.get(laneType); + if (b != null) { + return b; + } + }*/ + + boolean flip = false; + + int turnResourceId = R.drawable.map_turn_right; + if(secondTurnType == 0){ + TurnType tp = TurnType.valueOf(laneType, false); + switch (tp.getValue()){ + case TurnType.C: + turnResourceId = R.drawable.map_turn_forward; + break; + case TurnType.TR: + turnResourceId = R.drawable.map_turn_right; + break; + case TurnType.TL: + turnResourceId = R.drawable.map_turn_right; + flip = true; + break; + case TurnType.KR: + turnResourceId = R.drawable.map_turn_right; + break; + case TurnType.KL: + turnResourceId = R.drawable.map_turn_right; + flip = true; + break; + case TurnType.TSLR: + turnResourceId = R.drawable.map_turn_slight_right; + break; + case TurnType.TSLL: + turnResourceId = R.drawable.map_turn_slight_right; + flip = true; + break; + case TurnType.TRU: + turnResourceId = R.drawable.map_turn_uturn_right; + break; + case TurnType.TU: + turnResourceId = R.drawable.map_turn_uturn; + flip = true; + break; + } + }else{ + TurnType tp = TurnType.valueOf(laneType, false); + switch (tp.getValue()) { + case TurnType.C: + turnResourceId = R.drawable.map_turn_forward; + break; + case TurnType.TR: + turnResourceId = R.drawable.map_turn_forward_right_turn; + break; + case TurnType.TL: + turnResourceId = R.drawable.map_turn_forward_right_turn; + flip = true; + break; + case TurnType.KR: + turnResourceId = R.drawable.map_turn_forward_slight_right_turn; + break; + case TurnType.KL: + turnResourceId = R.drawable.map_turn_forward_slight_right_turn; + flip = true; + break; + case TurnType.TSLR: + turnResourceId = R.drawable.map_turn_forward_slight_right_turn; + break; + case TurnType.TSLL: + turnResourceId = R.drawable.map_turn_forward_slight_right_turn; + flip = true; + break; + case TurnType.TRU: + turnResourceId = R.drawable.map_turn_forward_uturn_right; + break; + case TurnType.TU: + turnResourceId = R.drawable.map_turn_forward_uturn_right; + flip = true; + break; + default: + turnResourceId = R.drawable.map_turn_forward_right_turn; + break; + } + + } + + Bitmap b = flip ? getFlippedBitmap(res, turnResourceId) : BitmapFactory.decodeResource(res, turnResourceId); + + //Maybe redundant scaling + float bRatio = (float)b.getWidth() / (float)b.getHeight(); + float s = 72f * coef; + int wq = Math.round(s / bRatio); + int hq = Math.round(s); + b = Bitmap.createScaledBitmap(b, wq, hq, false); + + //paths.set(laneType, b); + return b; + } + + public static Bitmap getFlippedBitmap(Resources res, int resId){ + + BitmapFactory.Options opt = new BitmapFactory.Options(); + opt.inJustDecodeBounds = true; + //Below line is necessary to fill in opt.outWidth, opt.outHeight + Bitmap b = BitmapFactory.decodeResource(res, resId, opt); + + b = Bitmap.createBitmap(opt.outWidth, opt.outHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(b); + + Matrix flipHorizontalMatrix = new Matrix(); + flipHorizontalMatrix.setScale(-1, 1); + flipHorizontalMatrix.postTranslate(b.getWidth(), 0); + + Bitmap bb = BitmapFactory.decodeResource(res, resId); + canvas.drawBitmap(bb, flipHorizontalMatrix, null); + + return b; + } + public static class LanesControl { private MapViewTrackingUtilities trackingUtilities; private OsmAndLocationProvider locationProvider; @@ -631,32 +754,40 @@ public class RouteInfoWidgetsFactory { private static class LanesDrawable extends Drawable { - int[] lanes = null; + int[] lanes = null; boolean imminent = false; private Context ctx; private ArrayList paths = new ArrayList(); + private ArrayList pathBitmaps = new ArrayList(); private Paint paintBlack; private Path laneStraight; + private final Bitmap laneStraightBitmap; private Paint paintRouteDirection; + private Paint paintSecondTurn; private float scaleCoefficient; private int height; private int width; private static final float miniCoeff = 2f; - + public LanesDrawable(Context ctx, float scaleCoefficent) { this.ctx = ctx; this.scaleCoefficient = scaleCoefficent; laneStraight = getPathFromTurnType(paths, TurnType.C, null, scaleCoefficient / miniCoeff); + laneStraightBitmap = getPathBitmapFromTurnType(ctx.getResources(), pathBitmaps, TurnType.C, 0, null, scaleCoefficient / miniCoeff); paintBlack = new Paint(); paintBlack.setStyle(Style.STROKE); paintBlack.setColor(Color.BLACK); paintBlack.setAntiAlias(true); paintBlack.setStrokeWidth(2.5f); - paintRouteDirection = new Paint(); - paintRouteDirection.setStyle(Style.FILL); + paintRouteDirection = new Paint(Paint.ANTI_ALIAS_FLAG); + paintRouteDirection.setStyle(Style.FILL_AND_STROKE); paintRouteDirection.setColor(ctx.getResources().getColor(R.color.nav_arrow)); - paintRouteDirection.setAntiAlias(true); + + paintSecondTurn = new Paint(Paint.ANTI_ALIAS_FLAG); + paintSecondTurn.setStyle(Style.FILL_AND_STROKE); + paintSecondTurn.setColor(ctx.getResources().getColor(R.color.nav_arrow_distant)); + } public void updateBounds() { @@ -676,8 +807,48 @@ public class RouteInfoWidgetsFactory { return width; } + @Override public void draw(Canvas canvas) { + float w = 72 * scaleCoefficient / miniCoeff; + //to change color immediately when needed + if (lanes != null && lanes.length > 0) { + canvas.save(); + // canvas.translate((int) (16 * scaleCoefficient), 0); + for (int i = 0; i < lanes.length; i++) { + int turnType; + int secondTurnType; + if ((lanes[i] & 1) == 1) { + paintRouteDirection.setColor(imminent ? ctx.getResources().getColor(R.color.nav_arrow_imminent) : + ctx.getResources().getColor(R.color.nav_arrow)); + } else { + paintRouteDirection.setColor(ctx.getResources().getColor(R.color.nav_arrow_distant)); + } + turnType = TurnType.getPrimaryTurn(lanes[i]); + secondTurnType = TurnType.getSecondaryTurn(lanes[i]); + + Bitmap b = getPathBitmapFromTurnType(ctx.getResources(), pathBitmaps, turnType, secondTurnType, laneStraightBitmap, scaleCoefficient / miniCoeff); + + if(secondTurnType > 0){ + Bitmap bSecond = null; + bSecond = getPathBitmapFromTurnType(ctx.getResources(), pathBitmaps, secondTurnType, secondTurnType, laneStraightBitmap, scaleCoefficient / miniCoeff); + if (bSecond != null){ + paintSecondTurn.setColorFilter(new PorterDuffColorFilter(paintSecondTurn.getColor(), PorterDuff.Mode.SRC_ATOP)); + canvas.drawBitmap(bSecond, 0f, 0f, paintSecondTurn); + } + } + + paintRouteDirection.setColorFilter(new PorterDuffColorFilter(paintRouteDirection.getColor(), PorterDuff.Mode.SRC_ATOP)); + canvas.drawBitmap(b, 0f, 0f, paintRouteDirection); + canvas.translate(w, 0); + } + canvas.restore(); + } + + } + + //@Override + public void drawOld(Canvas canvas) { float w = 72 * scaleCoefficient / miniCoeff; //to change color immediately when needed if (lanes != null && lanes.length > 0) { diff --git a/build.gradle b/build.gradle index 73a4bc4761..63e64403d1 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:1.1.3' } }