Compare commits

...

49 commits
master ... r2.3

Author SHA1 Message Date
xmd5a
4604f17b4d Update strings 2016-04-05 19:04:02 +03:00
Alexey Kulish
d567ba1c38 Fix swipe 2016-04-04 15:30:33 +03:00
Alexey Kulish
387e36e552 Fix #2419 2016-04-04 13:32:32 +03:00
Alexey Kulish
e8df27ef0b Fix https://github.com/osmandapp/Osmand/issues/2389 2016-04-01 13:03:34 +03:00
Alexey Kulish
c5b197beaf Fix https://github.com/osmandapp/Osmand/issues/2393 2016-04-01 12:40:11 +03:00
Alexey Kulish
fef2d1c648 Remove thread, add sync 2016-03-30 18:03:26 +03:00
Alexey Kulish
f51997540c Clean code 2016-03-30 17:40:44 +03:00
Alexey Kulish
02757c1878 Fix lock ui and crash while calc route 2016-03-30 17:25:00 +03:00
Alexey Kulish
1e05e51d72 Fix location permission crash (NavigationService) 2016-03-29 18:48:32 +03:00
Alexey Kulish
f693f766c9 Fix storage selection crash 2016-03-26 20:42:04 +03:00
Alexey Kulish
28630f460b Skip permission and storage dialog first time 2016-03-24 16:50:09 +03:00
Alexey Kulish
e98835d617 Revert "Fix first start screen after permission"
This reverts commit 4bd5b46e20.
2016-03-24 16:45:09 +03:00
Alexey Kulish
4bd5b46e20 Fix first start screen after permission 2016-03-24 15:33:31 +03:00
GaidamakUA
b66893bfeb Revert "Better design for Configure Screen implementation in progress."
This reverts commit 90481f92d6.
2016-03-24 11:15:47 +02:00
vshcherb
7f8fbc5032 Update AndroidManifest.xml 2016-03-24 10:07:35 +01:00
Alexey Kulish
28df425008 Context menu fixes 2016-03-22 19:56:54 +03:00
GaidamakUA
dc562279b9 merge 2016-03-21 12:01:34 +02:00
GaidamakUA
a3d95d0213 Merge branch 'r2.3' of https://github.com/osmandapp/Osmand into r2.3 2016-03-21 11:59:49 +02:00
Alexey Kulish
8c62acef07 Fix crash 2016-03-20 15:36:31 +03:00
Alexey Kulish
e09508f651 Fix route preferences (set profile for nav settings, refresh params, UI). Fix geocoding result crash. 2016-03-18 19:49:44 +03:00
Victor Shcherb
296b9cb308 Add turn info to exposed api 2016-03-18 14:44:20 +01:00
Victor Shcherb
571bcf15bf Try to fix issue #2341, #2346 2016-03-18 09:34:43 +01:00
GaidamakUA
90481f92d6 Better design for Configure Screen implementation in progress. 2016-03-17 16:36:04 +02:00
GaidamakUA
230de1cb2e Fixed formatting for localosm_child.xml 2016-03-17 16:27:37 +02:00
Alexey Kulish
342bc1b8a1 Try to fix storage dialog crash 2016-03-17 17:01:59 +03:00
GaidamakUA
9ca4428668 Merge branch 'r2.3' of https://github.com/osmandapp/Osmand into r2.3 2016-03-17 14:57:12 +02:00
GaidamakUA
fef8f7f3d2 Fixed bug: Click on overlay transparency row closed the settings screen. 2016-03-17 14:56:45 +02:00
GaidamakUA
4ab88abcf1 Fixed bug: Now user details aren't send if "Anonymous" switch checked. 2016-03-17 14:56:36 +02:00
Alexey Kulish
718fcec2e8 Fixes: live updates + select storage 2016-03-17 15:34:08 +03:00
Alexey Kulish
ab1b25524c Remove api-test from settings 2016-03-17 12:56:16 +03:00
Victor Shcherb
6ab2ee629f Fix issue with route recalculation crash 2016-03-17 10:22:32 +01:00
GaidamakUA
e88d32b5bd Support for username with any characters after location. 2016-03-17 10:16:25 +01:00
GaidamakUA
8e0ae5d241 OsMo rollback. 2016-03-17 10:16:25 +01:00
GaidamakUA
a31fa8e7a7 Location for OsMo now always has time. 2016-03-17 10:16:25 +01:00
GaidamakUA
ce0ac13cc3 Formatting 2016-03-17 10:16:25 +01:00
Alexey Kulish
02620f4981 Added empty list message for dashboard 2016-03-17 12:15:23 +03:00
Victor Shcherb
45038e51ac Revert changes 2016-03-17 10:03:12 +01:00
GaidamakUA
4e96ac0e0c Support for username with any characters after location. 2016-03-17 10:41:16 +02:00
GaidamakUA
e8fb5e1fb4 Merge branch 'r2.3' of https://github.com/osmandapp/Osmand into r2.3 2016-03-17 10:33:53 +02:00
Victor Shcherb
b26ce7fee4 Delete api test 2016-03-16 18:19:41 +01:00
Alexey Kulish
9918b3ccc2 Added api-test app 2016-03-16 19:42:11 +03:00
Alexey Kulish
bc967c5521 Api fixes 2016-03-16 19:10:28 +03:00
Alexey Kulish
53a4073246 Osmand API done 2016-03-16 16:59:26 +03:00
xmd5a
96e4c6a1d3 Update ru string 2016-03-16 00:47:05 +03:00
xmd5a
39963fce65 Update strings 2016-03-15 20:39:10 +03:00
xmd5a
aa34ffe510 fix 2016-03-15 20:32:24 +03:00
Alexey Kulish
11a9473de1 Osmand Api in progress. Map markers fixes. 2016-03-15 19:59:37 +03:00
xmd5a
d5f69bd318 Update ru strings 2016-03-15 18:40:16 +03:00
GaidamakUA
3b5e02b109 Fixes bug: unable to share favourites. 2016-03-15 17:36:08 +02:00
73 changed files with 543 additions and 1103 deletions

View file

@ -4,7 +4,6 @@ OsmAnd-core.jar
protobuf-src/com
OsmAnd-core-android.jar
src/net/osmand/core/jni/*
result.*
# Android Studio
/.idea

View file

@ -423,6 +423,14 @@ public class GeoPointParserUtil {
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint(dlat, dlon, z));
// whatsapp
// https://maps.google.com/maps?q=loc:34.99393,-106.61568 (USER NAME)
z = GeoParsedPoint.NO_ZOOM;
url = "https://maps.google.com/maps?q=loc:" + dlat + "," + dlon + " (+55 99 99999-9999)";
System.out.println("url: " + url);
actual = GeoPointParserUtil.parse(url);
assertGeoPoint(actual, new GeoParsedPoint(dlat, dlon, z));
// whatsapp
// https://www.google.com/maps/search/34.99393,-106.61568/data=!4m4!2m3!3m1!2s-23.2776,-45.8443128!4b1
url = "https://maps.google.com/maps?q=loc:" + dlat + "," + dlon + "/data=!4m4!2m3!3m1!2s-23.2776,-45.8443128!4b1";
@ -972,7 +980,7 @@ public class GeoPointParserUtil {
if(opath.contains(pref)) {
opath = opath.substring(opath.lastIndexOf(pref) + pref.length());
}
final String postf = "\\s\\((\\p{L}|\\s)*\\)$";
final String postf = "\\s\\((\\p{L}|\\p{M}|\\p{Z}|\\p{S}|\\p{N}|\\p{P}|\\p{C})*\\)$";
opath = opath.replaceAll(postf, "");
System.out.println("opath=" + opath);
return parseGoogleMapsPath(opath, params);

View file

@ -1,162 +1,34 @@
[
{
"testName": "1.Preston road TR Lorimar drive",
"testName": "Amstelveenseweg",
"startPoint": {
"latitude": 45.69539,
"longitude": 35.43936
"longitude": 35.51630312204361,
"latitude": 45.6971206184178
},
"endPoint": {
"latitude": 45.69567,
"longitude": 35.440113
},
"expectedResults": {
"-8827": "TL, C, C, C, +TR"
}
},
{
"testName": "1.2.Preston road TL Lorimar drive",
"startPoint": {
"latitude": 45.69716379996895,
"longitude": 35.43819894718172
},
"endPoint": {
"latitude": 45.69602851362186,
"longitude": 35.44070949481966
},
"expectedResults": {
"-9105": "+TL, C, C, C, TR",
"-8512": "+TL, C, C, C",
"-8827": "TL, +C, +C"
}
},
{
"testName": "1.3.Baywater drive TR Preston road",
"startPoint": {
"latitude": 45.6960514631203,
"longitude": 35.43735606299879
},
"endPoint": {
"latitude": 45.695624319890825,
"longitude": 35.438198276629464
},
"expectedResults": {
"-8644": "TL, C, C, +TR"
}
},
{
"testName": "2.Valley View Lane TU Highway 161 Service Road",
"startPoint": {
"latitude": 45.694859388262195,
"longitude": 35.467755138874054
},
"endPoint": {
"latitude": 45.694132477954575,
"longitude": 35.46842032670975
},
"expectedResults": {
"-41125": "+TU, +TL, +C;TL, C, C;TR"
}
},
{
"testName": "3.Motorway link from Ringweg Zuid TL Amstelveenseweg",
"startPoint": {
"latitude": 45.6971206184178,
"longitude": 35.51630312204361
},
"endPoint": {
"latitude": 45.6952846638807,
"longitude": 35.51303619146347
"longitude": 35.51303619146347,
"latitude": 45.6952846638807
},
"expectedResults": {
"-94361": "TL, TL, TL, C, TR, TR",
"-96062": "+TL, +TL, +TL, +C, TR, TR",
"-96063": "+TL, +TL, +TL, +C, TR, TR"
}
},
{
"testName": "4.Martinistraße TL Wilhelm-Kaisen-Brücke",
"testName": "Amstelveenseweg2",
"startPoint": {
"latitude": 45.700375542702446,
"longitude": 35.538462191820145
"longitude": 35.51630312204361,
"latitude": 45.6971206184178
},
"endPoint": {
"latitude": 45.70025377916235,
"longitude": 35.539058312773705
"longitude": 35.51303619146347,
"latitude": 45.6952846638807
},
"expectedResults": {
"-62200": "TL, +C"
"-96061": "+TL, +TL, +TL, +C, TR, TR",
"-96062": "+TL, +TL, +TL, C, TR, TR",
"-96063": "+TL, +TL, +TL, +C, TR, TR"
}
},
{
"testName": "5.1.Fritz-Foerster-Platz (S 172) TR Bergstraße (B 170)",
"startPoint": {
"latitude": 45.69942484339974,
"longitude": 35.552937403321266
},
"endPoint": {
"latitude": 45.698372030432985,
"longitude": 35.553747430443764
},
"expectedResults": {
"-68071": "C, C, +TR, +TR"
}
},
{
"testName": "5.2.Zellescher Weg (S 172) TL Bergstraße (B 170)",
"startPoint": {
"latitude": 45.69887876939763,
"longitude": 35.55432008206844
},
"endPoint": {
"latitude": 45.69869143574982,
"longitude": 35.553684398531914
},
"expectedResults": {
"-68128": "+TL, +TL, C, C;TR",
"-68107": "+TL, +TL, C, C",
"-68071": "TL, +C, +C"
}
},
{
"testName": "6.Platz der Vereinten Nationen TR Platz der Vereinten Nationen",
"startPoint": {
"latitude": 45.69942016011204,
"longitude": 35.568235382437706
},
"endPoint": {
"latitude": 45.70020132709422,
"longitude": 35.56931899487972
},
"expectedResults": {
"-71975": "TL, C, +TR;C"
}
},
{
"testName": "7.1.Spindlersfelder Straße TR Oberspreestraße",
"startPoint": {
"latitude": 45.699817301524455,
"longitude": 35.58391557633877
},
"endPoint": {
"latitude": 45.69793647478804,
"longitude": 35.58106707036495
},
"expectedResults": {
"-77184": "TL, +TR;TL"
}
},
{
"testName": "7.2.Spindlersfelder Straße TL Oberspreestraße",
"startPoint": {
"latitude": 45.699817301524455,
"longitude": 35.58391557633877
},
"endPoint": {
"latitude": 45.69657639532305,
"longitude": 35.586447581
},
"expectedResults": {
"-77187": "+TL, TL;TR",
"-77197": "TL, +C, +C"
}
}
]
]

View file

@ -1,11 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application tools:replace="android:icon"
android:icon="@drawable/icon_free">
<service tools:replace="android:process"
android:process="net.osmand"
android:name="net.osmand.plus.NavigationService"/>
</application>
xmlns:tools="http://schemas.android.com/tools">
<application
android:icon="@drawable/icon_free"
tools:replace="android:icon">
<service
android:name="net.osmand.plus.NavigationService"
android:process="net.osmand"
tools:replace="android:process"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="net.osmand.fileprovider"
tools:replace="android:authorities"/>
</application>
</manifest>

View file

@ -1,11 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application tools:replace="android:icon"
android:icon="@drawable/icon_free">
<service tools:replace="android:process"
android:process="net.osmand.dev"
android:name="net.osmand.plus.NavigationService"/>
</application>
xmlns:tools="http://schemas.android.com/tools">
<application
android:icon="@drawable/icon_free"
tools:replace="android:icon">
<service
android:name="net.osmand.plus.NavigationService"
android:process="net.osmand.dev"
tools:replace="android:process"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="net.osmand.dev.fileprovider"
tools:replace="android:authorities"/>
</application>
</manifest>

View file

@ -37,7 +37,7 @@
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="com.sec.feature.spen_usp" android:required="true"/>
<uses-feature android:name="com.sec.feature.spen_usp" android:required="false"/>
@ -64,7 +64,7 @@
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="net.osmand.fileprovider"
android:authorities="net.osmand.plus.fileprovider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
@ -303,4 +303,4 @@
android:label="@string/osm_live"/>
<receiver android:name="net.osmand.plus.liveupdates.LiveUpdatesAlarmReceiver"/>
</application>
</manifest>
</manifest>

View file

@ -1,13 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:shape="rectangle">
<solid android:color="@color/map_widget_dark_pressed" />
<corners android:radius="@dimen/map_button_rect_rad" />
</shape></item>
<item><shape android:shape="rectangle">
<solid android:color="@color/fab_color_pressed" />
<corners android:radius="@dimen/map_button_rect_rad" />
</shape></item>
<item android:drawable="@drawable/btn_round_shade_p" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_round_shade_n"/>
</selector>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_card_shadow"/>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/fab_color_pressed"/>
<corners android:radius="@dimen/map_button_rect_rad"/>
</shape>
</item>
</layer-list>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_card_shadow"/>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/map_widget_dark_pressed"/>
<corners android:radius="@dimen/map_button_rect_rad"/>
</shape>
</item>
</layer-list>

View file

@ -59,6 +59,19 @@
android:background="?attr/bg_color"
android:fadeScrollbars="true" >
</net.osmand.plus.views.controls.DynamicListView>
<TextView
android:id="@+id/emptyTextView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="?attr/bg_color"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:clickable="true"
android:textSize="@dimen/default_list_text_size_large"
android:visibility="gone"/>
</FrameLayout>
</LinearLayout>

View file

@ -55,11 +55,26 @@
android:layout_height="match_parent"
android:visibility="gone" >
<View
<LinearLayout
android:id="@+id/dash_list_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/bg_color" />
android:layout_height="match_parent"
android:background="?attr/bg_color"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/emptyTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:gravity="center"
android:textSize="@dimen/default_list_text_size_large"
android:visibility="gone"/>
</LinearLayout>
<net.osmand.plus.views.controls.DynamicListView
android:id="@+id/dash_list_view"

View file

@ -118,6 +118,7 @@
</LinearLayout>
<View
android:id="@+id/divSharedStorage"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="fill_horizontal"

View file

@ -5,8 +5,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:paddingTop="16dp">
<LinearLayout
@ -15,9 +15,9 @@
android:layout_height="wrap_content"
android:background="@drawable/bg_card_orange"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingBottom="12dp"
android:paddingLeft="24dp"
android:paddingRight="8dp"
android:paddingRight="12dp"
android:paddingTop="16dp">
<LinearLayout
@ -63,6 +63,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/btn_round_shade"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:text="@string/shared_string_read_more"
android:textColor="@color/color_white"/>
@ -70,7 +72,9 @@
android:id="@+id/subscription_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:layout_marginLeft="12dp"
android:background="@drawable/btn_round_shade"
android:text="@string/osm_live_subscribe_btn"
android:textColor="@color/color_white"/>
@ -146,13 +150,14 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:gravity="center_vertical"
android:minHeight="48dp">
<net.osmand.plus.widgets.TextViewEx
android:layout_width="120dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:text="@string/osm_live_support_region"
@ -162,10 +167,10 @@
<net.osmand.plus.widgets.TextViewEx
android:id="@+id/regionTextView"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:layout_marginBottom="4dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="4dp"
android:gravity="right"

View file

@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/showmod" android:title="@string/shared_string_show_on_map"></item>
<item android:id="@+id/deletemod" android:title="@string/local_openstreetmap_delete"></item>
<item android:id="@+id/uploadmods" android:title="@string/local_openstreetmap_upload"></item>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/showmod"
android:title="@string/shared_string_show_on_map"/>
<item
android:id="@+id/deletemod"
android:title="@string/local_openstreetmap_delete"/>
<item
android:id="@+id/uploadmods"
android:title="@string/local_openstreetmap_upload"/>
</menu>

View file

@ -1283,7 +1283,7 @@
<string name="share_fav_subject">Упадабанае адаслана праз OsmAnd</string>
<string name="use_points_as_intermediates">Разлічыць маршрут паміж кропкамі</string>
<string name="osmo_auto_send_locations_descr">Аўтаматычна пачынаць падарожжа і перадачу месцазнаходжаньня пасьля старту праграмы</string>
<string name="osmo_auto_send_locations_descr">Аўтаматычна пачынаць запіс сьледу і перадачу месцазнаходжаньня пасьля старту праграмы</string>
<string name="osmo_auto_send_locations">Аўтаматычна пачынаць падарожжа</string>
<string name="osmo_tracker_id">ID трэкера</string>
<string name="osmo_tracker_id_descr">Націсніце, каб паглядзець ідэнтыфікатар трэкера</string>
@ -1521,7 +1521,7 @@
<string name="osmo_device_not_found">Прыстасаваньне ня знойдзена</string>
<string name="anonymous_user">Ананімны карыстальнік</string>
<string name="logged_as">Вы ўвайшлі як %1$s</string>
<string name="osmo_no_connection_msg">Сэрвіс OsMo не даступны:\n- Праверце Інтэрнэт-злучэньне;\n- Праверце налады;\n- Праверце наш Twitter: https://twitter.com/OsMomobi</string>
<string name="osmo_no_connection_msg">Сэрвіс OsMo не даступны:\n- Праверце злучэньне;\n- Праверце налады;\n- Праверце наш Twitter: https://twitter.com/OsMomobi</string>
<string name="anonymous_user_hint">Ананімнаму карыстальніку недаступныя:\n- Стварэньне груп;\n- Сінхранізацыя груп і прыстасаваньняў з серверам;\n- Кіраваньне групамі і прыстасаваньнямі ў асабістым кабінеце.</string>
<string name="configure_map">Налады мапы</string>
<string name="search_radius_proximity">Паблізу ад</string>
@ -2164,16 +2164,4 @@
<string name="upload_osm_note_description">Вы можаце адаслаць Вашу OSM заўвагу ананімна, калі вы выкарыстоўваеце свой профіль OpenStreetMap.org.</string>
<string name="upload_osm_note">Адаслаць OSM заўвагу</string>
<string name="report">Справаздача</string>
<string name="release_2_3">" • OSM Live. Падтрымка аўтараў і распрацоўнікаў мапаў і атрыманьне штогадзінных абнаўленьняў мапы.\n\n• Маркеры. Новы спосаб для хуткага выбару месцаў на мапе.\n\n• Больш падрабязныя OSM мапы са спэцыфічнымі дарожнымі знакамі краін і з вялікай колькасьцю новых функцый.\n\n• Палепшаны вонкавы выгляд і падрыхтоўка маршруту.\n\n• Мноства паляпшэньняў у кантэкстным мэню мапы такіх як пошук адрасу.\n\nІ шматлікае іншае... "</string>
<string name="shared_string_move_up">Перамясьціць угару</string>
<string name="shared_string_move_down">Перамясьціць уніз</string>
<string name="finish_navigation">Завяршыць навігацыю</string>
<string name="avoid_road">Пазьбягаць дарог</string>
<string name="shared_string_topbar">Верхняя панэль</string>
<string name="osm_user_stat">Правак: %1$s, ранг: %2$s, усяго правак: %3$s</string>
<string name="osm_editors_ranking">Рэйтынг картографаў OSM</string>
<string name="osm_live_user_public_name">Публічнае імя</string>
<string name="osm_live_support_region">Падтрымоўваны рэгіён</string>
<string name="osm_live_enter_user_name">Калі ласка ўвядзіце імя</string>
<string name="select_map_markers">Абярыце маркеры</string>
</resources>

View file

@ -1469,8 +1469,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su
<string name="osmo_auth_error_short">Anmeldung fehlgeschlagen</string>
<string name="osmo_auth_error">Fehler bei der OsMo-Anmeldung: %1$s.\n Möglicherweise ist der Dienst nicht verfügbar oder Ihre Anmeldung ist abgelaufen.\n Fortsetzen mit einer neuen Registrierung?</string>
<string name="osmo_group_by_invite">Auf Einladung beitreten</string>
<string name="osmo_group_information_desc">" - Zum Erstellen einer Gruppe bitte Namen und Beschreibung angeben\n - Die App legt nur Gruppen vom Typ \"einfache Gruppe\" an, mehr dazu auf der Website https://osmo.mobi/g/new
\n - Auf der Webseite kann man die Gruppe bearbeiten um Orte, Strecken und Punkte hinzuzufügen\n - Wir empfehlen es keine Gruppen mit nur einem Nutzer zu erstellen, wenn es keine POI Gruppe ist\n - Private Gruppen sind auf 8 Personen beschränkt\n - Detaillierte Vertragsbedingungen sind auf der Webseite OsMo.mobi zu finden\n - Wenn besondere Bedürfnisse bestehen, bitte den Support kontaktieren: osmo.mobi@gmail.com "</string>
<string name="osmo_group_information_desc">" - Alle angelegten Gruppen sind öffentlich! Für eine anonyme Verbindung bitte direkt mittels Tracker-ID verbinden.\n - In einer privaten Gruppe können sich bis zu 8 Mitglieder anmelden.\n - Bei Inaktivität oder nur einem einzigen Mitglied über 2 Wochen wird die Gruppe gelöscht.\n - Der Zugang zu einer Gruppe kann beschränkt werden: \"nur auf Einladung\". Zur Steuerung der Gruppe benötigt man Zugang zur Admin-Konsole.\n - Zum Erstellen einer Gruppe mit abweichenden Bedingungen bitte Kontakt aufnehmen unter http://osmo.mobi"</string>
<string name="osmo_group_information">Bitte vor dem Erstellen von Gruppen beachten!</string>
<string name="osmo_not_signed_in">OsMo-Anmeldung fehlgeschlagen</string>
<string name="osmo_gpx_points_downloaded">OsMo-Punkte %1$s heruntergeladen.</string>
@ -1549,7 +1548,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su
<string name="speed_limit_exceed">Toleranz für Tempolimit</string>
<string name="speed_limit_exceed_message">Schwellenwert für Warnung bei Überschreiten der Höchstgeschwindigkeit.</string>
<string name="osmo_device_not_found">Gerät wurde nicht gefunden</string>
<string name="osmo_no_connection_msg">Keine Verbindung zum OsMo Server:\n- bitte Verbindung prüfen;\n- bitte Einstellungen prüfen;\n- ggf. Meldung auf Twitter prüfen: https://twitter.com/OsMomobi</string>
<string name="osmo_no_connection_msg">OsMo-Dienst ist nicht verfügbar:\n- bitte Verbindung prüfen;\n- bitte Einstellungen prüfen;\n- ggf. Meldung auf Twitter: https://twitter.com/OsMomobi</string>
<string name="anonymous_user">Anonymer Benutzer</string>
<string name="logged_as">Angemeldet als %1$s</string>
<string name="anonymous_user_hint">Anonyme Benutzer können keine:\n- Gruppen bilden;\n- Gruppen und Geräte mit dem Server synchronisieren;\n- Gruppen und Geräte im Privatbereich verwalten.</string>
@ -2117,7 +2116,7 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su
<string name="avoid_road">Straßen vermeiden</string>
<string name="storage_directory_readonly_desc">Der momentan gewählte Speicherort ist schreibgeschützt. Es wurde vorübergehend zum internen Speicher gewechselt. Bitte einen gültigen Speicherort wählen.</string>
<string name="storage_directory_shared">Gemeinsamer Speicher</string>
<string name="release_2_3">" • OSM Live. Unterstütze Karten-Mitwirkende und Entwickler und erhalte stündliche Karten Aktualisierungen.\n\n • Kartenmarkierung. Eine neue Methode Orte auf der Karte schnell auszuwählen.\n\n • Detailliertere OSM Karten mit länderspezifischen Straßenschildern und vielen neuen Kartenmerkmalen.\n\n • Verbessertes Aussehen und Verhalten der Routenerstellung.\n\n • Viele Verbesserungen im Kontextmenü der Karte, wie beispielsweise kontextabhängige Adresssuche.
<string name="release_2_3">" • OSM Live. Unterstütze Karten-Mitwirkende und Entwickler und erhalte stündliche Karten Aktualisierungen.\n\n • Karten Markierungen. Ein neuer Weg um schnell ausgewählte Plätze auf der Karte auszuwählen.\n\n • Detailliertere OSM Karten mit länderspezifischen Straßenschildern und einer Menge weitere Funktionalitäten.\n\n • Verbessertes Aussehen und Gefühl der Routen Vorbereitung.\n\n • Viele Verbesserungen der Karten Kontextmenüs, wie beispielsweise kontextabhängige Adresssuche.
\n\n und mehr… "</string>
<string name="full_report">Vollständiger Report</string>
<string name="open_street_map_login_and_pass">OpenStreetMap Zugang und Passwort</string>
@ -2127,5 +2126,5 @@ Für Hilfe mit der OsmAnd-App kontaktieren Sie bitte unser Support-Team unter su
<string name="storage_permission_restart_is_required">Die Anwendung darf nun auf den externen Speicher schreiben. Ein manueller Neustart der Anwendung ist nötig.</string>
<string name="shared_string_move_up">Hoch bewegen</string>
<string name="shared_string_move_down">Runter bewegen</string>
<string name="file_name_containes_illegal_char">Datenname beinhaltet nicht erlaubte Zeichen</string>
<string name="file_name_containes_illegal_char">Datenname beinhaltet nicht erlaubt Zeichen</string>
</resources>

View file

@ -674,13 +674,5 @@
<string name="srtm_paid_version_title">Nivelkurba kromprogramo</string>
<string name="osmand_srtm_short_description_80_chars">OsmAnd-kromprogramo por desegni nivelkurbojn eksterrete</string>
<string name="srtm_plugin_name">Nivelkurboj</string>
<string name="osmand_srtm_long_description_1000_chars">"Tiu ĉi kromprogramo ebligas vidigi kaj tavolon de nivelkurboj kaj tavolon de nivel-ombrumo (reliefo) supre normaj OsmAnd-mapoj. Tiu ĉi ebleco estas dezirata de atletoj, migrantoj, turistoj, kaj ĉiuj scivolaj en reliefa strukturo de lando.\n\nLa mondaj datumoj (inter 70-a norda kaj 70-a suda grado de latitudo) estas bazitaj sur mezuroj de la SRTM (Shuttle Radar Topography Mission) kaj de la ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), bildiga aparato en la Terra - ĉefa sputniko de Sistemo de Tera Observado de NASA. ASTER estas kunlaboraĵo de NASA, de Japana Ministerio pri Ekonomio, Komerco kaj Industrio (METI) kaj de Japanaj Spacaj Sistemoj (J-spacesystems). "</string>
<string name="srtm_plugin_description">"Tiu ĉi kromprogramo ebligas vidigi kaj tavolon de nivelkurboj kaj tavolon de nivel-ombrumo (reliefo) supre normaj OsmAnd-mapoj. Tiu ĉi ebleco estas dezirata de atletoj, migrantoj, turistoj, kaj ĉiuj scivolaj en reliefa strukturo de lando.\n\nLa mondaj datumoj (inter 70-a norda kaj 70-a suda grado de latitudo) estas bazitaj sur mezuroj de la SRTM (Shuttle Radar Topography Mission) kaj de la ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), bildiga aparato en la Terra - ĉefa sputniko de Sistemo de Tera Observado de NASA. ASTER estas kunlaboraĵo de NASA, de Japana Ministerio pri Ekonomio, Komerco kaj Industrio (METI) kaj de Japanaj Spacaj Sistemoj (J-spacesystems). "</string>
<string name="no_index_file_to_download">Elŝutado de trovita, bonvolu kontroli vian retkonekton.</string>
<string name="select_index_file_to_download">Trovis nenion. Se vi ne povas trovi vian regionon, vi povas fari ĝin mem (rigardu na http://osmand.net).</string>
<string name="none_selected_gpx">Nenia GPX-dosiero elektita. Por elekti bonvolu premteni disponeblan kurson.</string>
<string name="local_index_select_gpx_file">Elektu por montri</string>
<string name="gpx_split_interval">Divid-intervalo</string>
<string name="sort_by_distance">Ordigi laŭ distanco</string>
<string name="sort_by_name">Ordigi laŭ nomo</string>
<string name="osmand_srtm_long_description_1000_chars">"Tiu ĉi kromprogramo ebligas vidigi kaj tavolon de nivelkurboj kaj tavolon de nivel-ombrumo (reliefo) supre normaj OsmAnd-mapoj. Tiu ĉi ebleco estas dezirata de atletoj, migrantoj, turistoj, kaj ĉiuj scivolaj en reliefa strukturo de lando. "</string>
</resources>

View file

@ -1951,7 +1951,7 @@
<string name="osmand_running_in_background">Esecuzione in backgroung</string>
<string name="default_speed_system_descr">Specifica l\'unità di misura della velocità</string>
<string name="default_speed_system">Misurazione della velocità</string>
<string name="nm">nmi</string>
<string name="nm">nm</string>
<string name="si_nm">Miglia nautiche</string>
<string name="si_kmh">Chilometri all\'ora</string>
<string name="si_mph">Miglia per ora</string>
@ -1959,7 +1959,7 @@
<string name="si_min_km">Minuti al chilometro</string>
<string name="si_min_m">Minuti per miglia</string>
<string name="si_nm_h">Miglia nautiche per ora (knot)</string>
<string name="nm_h">nmi/h</string>
<string name="nm_h">nmh</string>
<string name="min_mile">min/m</string>
<string name="min_km">min/km</string>
<string name="m_s">m/s</string>
@ -2216,7 +2216,4 @@
<string name="storage_directory_readonly_desc">La carella di memorizzazione selezionata è in sola lettura. La cartella di memorizzazione sarà temporaneamente cambiata nella memoria interna. Per favore scegliere una cartella di destinazione valida.</string>
<string name="report">Rapporto</string>
<string name="storage_permission_restart_is_required">Ora l\'applicazione ha i permessi per scrivere sulla memoria esterna. È necessario riavviare l\'applicazione.</string>
<string name="full_report">Rapporto completo</string>
<string name="open_street_map_login_and_pass">Nome utente e password OpenStreetMap</string>
<string name="file_name_containes_illegal_char">Il nome del file contiene caratteri non ammessi</string>
</resources>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version='1.0' encoding='utf-8'?>
<resources><string name="installing_new_resources">新しいデータを展開中…</string>
<string name="internet_connection_required_for_online_route">オンライン経路案内を使用しようとしていますが
インターネット接続されていません。</string>
@ -1744,7 +1744,7 @@ POIの更新は利用できません</string>
<string name="error_avoid_specific_road">バイパスが見つかりません</string>
<string name="save_track_to_gpx_globally_headline">要求時に経路を保存</string>
<string name="enable_proxy_title">HTTPプロキシを使用</string>
<string name="enable_proxy_descr">すべてのネットワーク要求に使用されるプロキシの設定を行います</string>
<string name="enable_proxy_descr">有効にした場合すべてのネットワーク接続に使用されるので設定をする必要があります</string>
<string name="proxy_host_title">プロキシホスト</string>
<string name="proxy_host_descr">プロキシのホスト名を設定します(例127.0.0.1)</string>
<string name="proxy_port_title">プロキシポート</string>
@ -1864,8 +1864,8 @@ POIの更新は利用できません</string>
<string name="routing_attr_height_description">ルート上で通行可能な車両の高さを指定します</string>
<string name="use_fast_recalculation">スマートなルート再計算</string>
<string name="use_fast_recalculation_desc">経路が長い場合、最初の部分のみ再計算します</string>
<string name="light_theme">白色</string>
<string name="dark_theme">黒色</string>
<string name="light_theme">ライト</string>
<string name="dark_theme">ダーク</string>
<string name="lang_pms">ピエモンテ語</string>
<string name="lang_bn">ベンガル語</string>
<string name="lang_tl">タガログ語</string>
@ -2135,45 +2135,4 @@ POIの更新は利用できません</string>
<string name="shared_string_type">タイプ</string>
<string name="starting_point">出発地</string>
<string name="shared_string_not_selected">無選択</string>
<string name="report">レポート</string>
<string name="storage_permission_restart_is_required">外部ストレージへの書き込みが許可されました。手動でアプリケーションを再起動してください。</string>
<string name="release_2_3">" ・ OSM Live. 地図作成者と開発者をサポートする機能と時間毎の地図更新。\n\n・ マップマーカー. マップ上の場所を選択する新しい方法。\n\n・ より詳細なOSMマップと国または地域別の道路標識とマップの新しい機能\n\n・ 改良された見て分かりやすいルート準備\n\n・ 住所検索などコンテキストメニューの大幅改良\n\n・ 等々… "</string>
<string name="shared_string_move_up">上に移動</string>
<string name="shared_string_move_down">下に移動</string>
<string name="finish_navigation">ナビゲーションの終了</string>
<string name="avoid_road">使用しない道路</string>
<string name="storage_directory_readonly_desc">現在選択されているデータ保存フォルダーは読み取り専用です。保存フォルダーは一時的に内部メモリに設定されました。書き込み可能なストレージのフォルダを選択してください。</string>
<string name="storage_directory_shared">共有メモリ</string>
<string name="full_report">完全なレポート</string>
<string name="recalculate_route">ルートの再計算</string>
<string name="open_street_map_login_and_pass">OpenStreetMapのログイン名とパスワード</string>
<string name="donations">寄付</string>
<string name="osm_user_stat">編集 %1$s, ランク %2$s, 総編集数 %3$s</string>
<string name="osm_editors_ranking">OSM編集者ランキング</string>
<string name="osm_live_user_public_name">パブリック名</string>
<string name="osm_live_hide_user_name">レポートに自分の名前を表示しない</string>
<string name="osm_live_support_region">サポート地域</string>
<string name="osm_live_month_cost">月間コスト</string>
<string name="osm_live_month_cost_desc">毎月の支払額</string>
<string name="osm_live_active">アクティブ</string>
<string name="osm_live_not_active">非アクティブ</string>
<string name="osm_live_enter_email">有効な電子メールアドレスを入力してください</string>
<string name="osm_live_enter_user_name">パブリック名を入力してください</string>
<string name="osm_live_thanks">ライブ更新を購読いただきありがとうございます!</string>
<string name="osm_live_region_desc">あなたの寄付の一部がその地域のマップ更新に貢献したユーザーへ還元されます</string>
<string name="select_map_marker">マップマーカーの選択</string>
<string name="map_markers_other">その他のマーカー</string>
<string name="upload_anonymously">匿名でアップロード</string>
<string name="show_transparency_seekbar">透過タイプシークバーを表示</string>
<string name="download_files_error_not_enough_space">空き容量が足りません! 一時ファイルの置き場に {3}MB、維持のため {1}MBが必要で、現在利用可能なのは {2}MBです。</string>
<string name="download_files_question_space_with_temp">{0}個のファイルを本当にダウンロードしますか? 一時的に {3}MB 維持のために {1}MB が必要です。現在利用可能なのは {2}MBです。</string>
<string name="upload_osm_note_description">OpenStreetMap.orgプロファイルを使用する場合は、OSMメモを匿名でアップロードできます。</string>
<string name="upload_osm_note">OSMメモをアップロード</string>
<string name="map_marker_1st">最初のマップマーカー</string>
<string name="map_marker_2nd">2番目のマップマーカー</string>
<string name="shared_string_toolbar">ツールバー</string>
<string name="shared_string_widgets">ウィジェット</string>
<string name="add_points_to_map_markers_q">マップマーカーにすべての地点を追加しますか?</string>
<string name="shared_string_add_to_map_markers">マップマーカーに追加</string>
<string name="select_map_markers">マップマーカーを選択</string>
</resources>

View file

@ -641,7 +641,7 @@
<string name="osm_editing_plugin_description">Umożliwia wprowadzanie zmian w zasobach OSM, takich jak dodawanie lub modyfikowanie obiektów POI, zgłaszanie i komentowanie błędów oraz wysyłanie zarejestrowanych plików GPX. OSM jest publicznym projektem tworzenia map przez społeczność. Więcej szczegółów pod adresem http://openstreetmap.org. Aktywny udział jest mile widziany, modyfikacji można dokonywać bezpośrednio z poziomu programu po wprowadzeniu danych uwierzytelniających OSM.</string>
<string name="vector_maps_may_display_faster_on_some_devices">Mapy wektorowe mogą wyświetlać się szybciej. Może nie działać dobrze na niektórych urządzeniach.</string>
<string name="play_commands_of_currently_selected_voice">Odtwarza komunikaty wybranym głosem nawigatora</string>
<string name="play_commands_of_currently_selected_voice">Odtwórz komendy w wybranym głosie</string>
<string name="debugging_and_development">Rozwój OsmAnd</string>
<string name="native_rendering">Renderowanie natywne</string>
@ -649,7 +649,7 @@
<string name="send_files_to_osm">Wysłać pliki GPX do OSM?</string>
<string name="gpx_visibility_txt">Widoczność</string>
<string name="gpx_tags_txt">Etykiety</string>
<string name="gpx_tags_txt">Tagi</string>
<string name="gpx_description_txt">Opis</string>
<string name="validate_gpx_upload_name_pwd">Proszę podać nazwę użytkownika OSM oraz hasło aby wysłać pliki GPX.</string>
<string name="default_buttons_support">Wsparcie</string>
@ -1920,7 +1920,7 @@
<string name="m_s">m/s</string>
<string name="shared_string_trip_recording">Nagrywanie trasy</string>
<string name="simulate_your_location_descr">Symuluje lokalizację za pomocą wyznaczonej trasy lub zarejestrowanego śladu GPX</string>
<string name="simulate_your_location_descr">Symuluj używając wyliczonej trasy lub nagranej trasy GPX</string>
<string name="downloads_left_template">pozostało %1$s pobrań</string>
<string name="regions">Regiony</string>

View file

@ -8,7 +8,7 @@
<string name="show_polygons">Отображать полигоны</string>
<string name="rendering_attr_showMtbRoutes_name">Отображать MTB маршруты</string>
<string name="shared_string_select">Выбрать</string>
<string name="rendering_attr_hideIcons_name">Скрыть значки POI</string>
<string name="rendering_attr_hideIcons_name">Значки POI</string>
<string name="rendering_attr_horseRoutes_name">Конные маршруты</string>
<string name="av_video_quality_low">Низкое качество</string>
<string name="av_video_quality_high">Высокое качество</string>
@ -51,7 +51,7 @@
<string name="lang_mk">Македонский</string>
<string name="lang_fy">Западнофризский</string>
<string name="lang_als">Албанский (тоскский)</string>
<string name="rendering_attr_hideProposed_name">Скрыть планируемые объекты</string>
<string name="rendering_attr_hideProposed_name">Планируемые объекты</string>
<string name="osmo_use_https_descr">Использовать безопасное подключение к серверу</string>
<string name="osmo_use_https">Использовать HTTPS</string>
<string name="srtm_plugin_description">"Этот плагин обеспечивает как наложение контурных линий, так и отображения затеняющего слоя рельефа поверх стандартных карт OsmAnd. Эта функция высоко оценится спортсменами, туристами, путешественниками и всеми, кто заинтересован в рельефной структуре ландшафта.\n\nГлобальные данные (между 70 градусами на севере и 70 градусами на юге) основываются на измерениях SRTM (Shuttle Radar Topography Mission) и ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer) — инструментом визуализации Terra, флагманского спутника Системы Наблюдения Земли NASA. ASTER является результатом совместных усилий NASA, министерства экономики Японии, торговли и промышленности (METI), а также Космических Систем Японии (J-spacesystems). "</string>
@ -1315,16 +1315,16 @@
<string name="none_selected_gpx">Нет выбранных файлов GPX. Используйте длительное нажатие для выбора доступного трека.</string>
<string name="local_index_select_gpx_file">Выбрать для отображения</string>
<string name="osmo_group_by_invite">Войти по приглашению</string>
<string name="rendering_attr_hideBuildings_name">Скрыть строения</string>
<string name="rendering_attr_hideText_name">Скрыть текст</string>
<string name="rendering_attr_hideWoodScrubs_name">Скрыть леса и кустарники</string>
<string name="rendering_attr_hideBuildings_name">Строения</string>
<string name="rendering_attr_hideText_name">Текст</string>
<string name="rendering_attr_hideWoodScrubs_name">Леса и кустарники</string>
<string name="rendering_attr_moreDetailed_name">Более подробно</string>
<string name="rendering_attr_lessDetailed_name">Менее подробно</string>
<string name="rendering_attr_showSurfaceGrade_name">Отображать качество дорог</string>
<string name="rendering_attr_showSurfaces_name">Отображать тип покрытия</string>
<string name="rendering_attr_hideNonVehicleHighways_name">Скрыть непроезжие дороги</string>
<string name="rendering_attr_hideNonVehicleHighways_name">Непроезжие дороги</string>
<string name="rendering_attr_buildings15zoom_name">Здания на масштабе 15</string>
<string name="rendering_attr_hideAccess_name">Скрыть ограничения доступа</string>
<string name="rendering_attr_hideAccess_name">Ограничения доступа</string>
<string name="rendering_attr_showAccess_name">Отображать ограничения доступа</string>
<string name="rendering_attr_showCycleRoutes_name">Отображать веломаршруты</string>
<string name="osmo_auth_error_short">Сбой авторизации</string>
@ -1650,7 +1650,7 @@
<string name="shared_string_copy">Копировать</string>
<string name="application_dir_change_warning3">Переместить также файлы данных OsmAnd в новое место назначения?</string>
<string name="search_poi_category_hint">Напечатайте для поиска</string>
<string name="rendering_attr_hideHouseNumbers_name">Скрыть номера домов</string>
<string name="rendering_attr_hideHouseNumbers_name">Номера домов</string>
<string name="routing_attr_avoid_borders_description">Избегать пересечения границы с другой страной</string>
<string name="routing_attr_height_name">Ограничение высоты</string>
@ -1909,7 +1909,7 @@
<string name="rec_split_desc">Циклическая перезапись клипов при превышении заданного объема хранилища</string>
<string name="switch_start_finish">Поменять местами пункт отправления и пункт назначения</string>
<string name="shared_string_remove">Удалить</string>
<string name="rendering_attr_hideUnderground_name">Скрыть подземные объекты</string>
<string name="rendering_attr_hideUnderground_name">Подземные объекты</string>
<string name="data_is_not_available">Данные недоступны</string>
<string name="clear_updates_proposition_message">Загруженные обновления можно удалить и вернуться к первоначальной редакции карты</string>

View file

@ -1921,8 +1921,8 @@
<string name="rendering_category_others">Diğer harita özellikleri</string>
<string name="map_widget_appearance_rem">Kalan unsurlar</string>
<string name="search_radius_proximity">Yakınında</string>
<string name="osmo_no_connection_msg">Sunucu OSMO bağlanamıyor:\n- Internet bağlantınızı kontrol;\n- Ayarlarını kontrol;\n- Check out bizim Twitter: https://twitter.com/OsMomobi</string>
<string name="anonymous_user_hint">Bir anonim kullanıcı olamaz:\n- Grupları oluşturmak;\n- Sunucuyla grupları ve cihazları senkronize;\n- Web sitesinde kişisel pano grupları ve aygıtları yönetmek.</string>
<string name="osmo_no_connection_msg">Osmo hizmeti kullanılabilir değil:\n- Bağlantısını kontrol edin;\n- Ayarları kontrol edin;\n- Check out bizim Twitter: https://twitter.com/OsMomobi</string>
<string name="anonymous_user_hint">Bir anonim kullanıcı olamaz:\n- Grupları oluşturmak;\n- Sunucuyla grupları ve cihazları senkronize;\n- Özel ofiste grupları ve aygıtları yönetmek.</string>
<string name="anonymous_user">Anonim Kullanıcı</string>
<string name="logged_as">%1$s olarak giriş</string>
<string name="speed_limit_exceed_message">Bir sesli uyarı alırsınız yukarıda seç hız limiti tolerans marjı.</string>
@ -1965,7 +1965,7 @@
<string name="rendering_value_browse_map_name">Haritaya göz at</string>
<string name="rendering_attr_coloredBuildings_name">Binalar türüne göre renk kodu</string>
<string name="osmo_leave_confirmation_msg">Grup %1$s ayrılmak istiyor musunuz?</string>
<string name="osmo_specify_tracker_id">Lütfen belirtin</string>
<string name="osmo_specify_tracker_id">Lütfen kimlik belirtin</string>
<string name="keep_navigation_service">Devam et</string>
<string name="map_preferred_locale_descr">Harita üzerinde etiket için tercih edilen dil (yerel adlarıyla İngilizce veya geçecektir mevcut değilse)</string>
<string name="map_preferred_locale">Harita Tercih dili</string>
@ -1988,7 +1988,7 @@
<string name="rendering_attr_showCycleRoutes_name">Döngüsü yolları göster</string>
<string name="osmo_auth_error_short">Yetkilendirme başarısız oldu</string>
<string name="osmo_auth_error">OsMo yetkilendirme hata oluştu: %1$s.\nAşağı bir geçici olarak hizmet olabilir veya kayıt süresi.\nYeni kayıt devam etmek istiyor musunuz?</string>
<string name="osmo_group_information_desc">" -Bir grup oluşturma ona bir isim vermek ve açıklama doldurunuz\n- Uygulama grubundan, sadece Basit türü ile oluşturulan web sitesinde daha fazla okumak https://osmo.mobi/g/new\n  - Bir grup yönetebilecek bir web sitesi aracılığıyla, parça ve mevcut tüm noktalarını yerleştirmek için\n  - Bu POI grubu değilse Biz grubun yalnızca bir kullanıcı kullanımını uygun bulmuyorum\n  - Özel gruplar 8 kişilik sınırlıdır\n  - Detaylı şartları her zaman OsMo.mobi web sitesinde bir var\n  Eğer özel şartları gerekiyorsa - - irtibata geçiniz desteği: osmo.mobi@gmail.com "</string>
<string name="osmo_group_information_desc">" -Tüm oluşturulan grupları genel! Anonim olmak istiyorsan, izci kimlikleri üzerinden doğrudan aygıtlarını bağlayın.\n-Özel gruplar için 8 kişi sınırlıdır\nHareketsizlik ya da 2 hafta için sadece 1 kişi faaliyet-grup-ecek var olmak silmek.\n-Sadece davet, ama kontrol grubuna yönetici konsolu için gitmek gerekir gibi grup giriş, sınırlayabilirsiniz.\n-Bir grup oluşturun, ancak diğer koşulları ile lütfen http://osmo.mobi başvurun gerekiyorsa"</string>
<string name="update">Bütün Güncellemler</string>
<string name="only_download_over_wifi">Sadece WiFi üzerinden İndir</string>
<string name="live_update">Canlı güncelleştirme</string>
@ -2107,5 +2107,4 @@
<string name="storage_directory_shared">Paylaşılan bellek</string>
<string name="shared_string_topbar">Topbar</string>
<string name="recalculate_route">Rota yeniden hesaplama</string>
<string name="report">Rapor</string>
</resources>

View file

@ -2153,5 +2153,4 @@
<string name="report">報告</string>
<string name="file_name_containes_illegal_char">檔案名稱含有違反規則的字符</string>
<string name="storage_permission_restart_is_required">現在應用程式允許寫入外部記憶體。應用程式需要手動重新啟動。</string>
<string name="release_2_3">" • OSM實況。支援地圖貢獻者和開發者和每小時獲得地圖更新。\n\n• 地圖標記。一種新的方式以快速在地圖上選擇地點。\n\n• 更詳細的 OSM 地圖與國家具體的公路標誌和許多新的地圖功能。\n\n• 改善外觀和感覺的路線準備。\n\n• 在地圖下拉選單中有許多改善,如下拉地址查找。\n\n以及更多… "</string>
</resources>

View file

@ -9,6 +9,8 @@
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
-->
<string name="no_map_markers_found">Please add map markers via map</string>
<string name="no_waypoints_found">No waypoints found</string>
<string name="osmo_group_information_desc">
- Creating a group please give it a name and fill in description\n
- From the application group are created only with Simple type, read more on the website https://osmo.mobi/g/new \n
@ -118,7 +120,7 @@
<string name="shared_string_status">Status</string>
<string name="shared_string_save_changes">Save changes</string>
<string name="shared_string_email_address">E-mail address</string>
<string name="rendering_attr_hideUnderground_name">Hide underground objects</string>
<string name="rendering_attr_hideUnderground_name">Underground objects</string>
<string name="data_is_not_available">Data is not available</string>
<string name="shared_string_remove">Remove</string>
<string name="shared_string_read_more">Read more</string>
@ -127,7 +129,7 @@
<string name="road_blocked">Road blocked</string>
<string name="shared_string_select">Select</string>
<string name="switch_start_finish">Reverse starting point &amp; destination</string>
<string name="rendering_attr_hideIcons_name">Hide POI icons</string>
<string name="rendering_attr_hideIcons_name">POI icons</string>
<string name="item_removed">Item removed</string>
<string name="n_items_removed">items removed</string>
<string name="shared_string_undo_all">UNDO ALL</string>
@ -215,7 +217,7 @@
<string name="lang_als">Albanian (Tosk)</string>
<string name="read_more">Read more</string>
<string name="whats_new">What\'s new in</string>
<string name="rendering_attr_hideProposed_name">Hide proposed objects</string>
<string name="rendering_attr_hideProposed_name">Proposed objects</string>
<string name="shared_string_update">Update</string>
<string name="shared_string_upload">Upload</string>
<string name="osm_edit_created_poi">Created OSM POI</string>
@ -343,7 +345,7 @@
<string name="rendering_value_walkingRoutesScopeOSMC_name">Coloring according to route scope</string>
<string name="rendering_value_walkingRoutesOSMC_name">Coloring according to OSMC</string>
<string name="shared_string_logoff">Log Off</string>
<string name="rendering_attr_hideHouseNumbers_name">Hide house numbers</string>
<string name="rendering_attr_hideHouseNumbers_name">House numbers</string>
<string name="application_dir_change_warning3">Do you want OsmAnd to also copy its data files to the new destination?</string>
<string name="specified_directiory_not_writeable">Maps could not be created in specified directory</string>
<string name="copying_osmand_file_failed">Copying files failed</string>
@ -697,14 +699,14 @@
<string name="gpx_monitoring_start">Start GPX logging</string>
<string name="gpx_monitoring_stop">Stop GPX logging</string>
<string name="gpx_start_new_segment">Start new segment</string>
<string name="rendering_attr_hideBuildings_name">Hide buildings</string>
<string name="rendering_attr_hideNonVehicleHighways_name">Hide non-vehicle highways</string>
<string name="rendering_attr_hideText_name">Hide text</string>
<string name="rendering_attr_hideWoodScrubs_name">Hide wood and scrubs</string>
<string name="rendering_attr_hideBuildings_name">Buildings</string>
<string name="rendering_attr_hideNonVehicleHighways_name">Non-vehicle highways</string>
<string name="rendering_attr_hideText_name">Text</string>
<string name="rendering_attr_hideWoodScrubs_name">Wood and scrubs</string>
<string name="rendering_attr_buildings15zoom_name">Buildings on zoom 15</string>
<string name="rendering_attr_moreDetailed_name">More details</string>
<string name="rendering_attr_lessDetailed_name">Fewer details</string>
<string name="rendering_attr_hideAccess_name">Hide access restrictions</string>
<string name="rendering_attr_hideAccess_name">Access restrictions</string>
<string name="rendering_attr_showAccess_name">Show access restrictions</string>
<string name="rendering_attr_showSurfaceGrade_name">Show road quality</string>
<string name="rendering_attr_showSurfaces_name">Show road surface</string>

View file

@ -1,5 +1,7 @@
package net.osmand.plus;
import android.os.AsyncTask;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@ -44,50 +46,60 @@ public class CurrentPositionHelper {
} else if (am.isDerivedRoutingFrom(ApplicationMode.CAR)) {
p = GeneralRouterProfile.CAR;
} else {
p = GeneralRouterProfile.PEDESTRIAN;
p = GeneralRouterProfile.CAR;
}
RoutingConfiguration cfg = app.getDefaultRoutingConfig().build(p.name().toLowerCase(), 10,
BinaryMapIndexReader[] rs = new BinaryMapIndexReader[app.getResourceManager().getAddressRepositories().size()];
int i = 0;
for (RegionAddressRepository rep : app.getResourceManager().getAddressRepositories()) {
rs[i++] = rep.getFile();
}
RoutingConfiguration cfg = app.getDefaultRoutingConfig().build(p.name().toLowerCase(), 10,
new HashMap<String, String>());
ctx = new RoutePlannerFrontEnd(false).buildRoutingContext(cfg, null, app.getResourceManager().getRoutingMapFiles());
ctx = new RoutePlannerFrontEnd(false).buildRoutingContext(cfg, null, rs);
RoutingConfiguration defCfg = app.getDefaultRoutingConfig().build(GeneralRouterProfile.CAR.name().toLowerCase(), 10,
new HashMap<String, String>());
defCtx = new RoutePlannerFrontEnd(false).buildRoutingContext(defCfg, null, app.getResourceManager().getRoutingMapFiles());
defCtx = new RoutePlannerFrontEnd(false).buildRoutingContext(defCfg, null, rs);
}
private boolean scheduleRouteSegmentFind(final Location loc, final boolean storeFound, final ResultMatcher<GeocodingResult> geoCoding, final ResultMatcher<RouteDataObject> result) {
boolean res = false;
if (loc != null) {
Runnable run = new Runnable() {
new AsyncTask<Void, Void, Void>() {
@Override
public void run() {
protected Void doInBackground(Void... params) {
try {
final List<GeocodingResult> gr = runUpdateInThread(loc.getLatitude(), loc.getLongitude(),
geoCoding != null);
if (storeFound) {
lastAskedLocation = loc;
lastFound = gr == null || gr.isEmpty() ? null : gr.get(0).point.getRoad();
} else if(geoCoding != null) {
justifyResult(gr, geoCoding);
} else if(result != null) {
app.runInUIThread(new Runnable() {
@Override
public void run() {
result.publish(gr == null || gr.isEmpty() ? null : gr.get(0).point.getRoad());
}
});
}
processGeocoding(loc, geoCoding, storeFound, result);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
};
res = app.getRoutingHelper().startTaskInRouteThreadIfPossible(run);
}.execute((Void) null);
res = true;
}
return res;
}
private synchronized void processGeocoding(Location loc, ResultMatcher<GeocodingResult> geoCoding, boolean storeFound, final ResultMatcher<RouteDataObject> result) throws IOException {
final List<GeocodingResult> gr = runUpdateInThread(loc.getLatitude(), loc.getLongitude(),
geoCoding != null);
if (storeFound) {
lastAskedLocation = loc;
lastFound = gr == null || gr.isEmpty() ? null : gr.get(0).point.getRoad();
} else if(geoCoding != null) {
justifyResult(gr, geoCoding);
} else if(result != null) {
app.runInUIThread(new Runnable() {
@Override
public void run() {
result.publish(gr == null || gr.isEmpty() ? null : gr.get(0).point.getRoad());
}
});
}
}
protected void justifyResult(List<GeocodingResult> res, final ResultMatcher<GeocodingResult> result) {
List<GeocodingResult> complete = new ArrayList<>();

View file

@ -144,6 +144,9 @@ public class NavigationService extends Service implements LocationListener {
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
locationManager.requestLocationUpdates(serviceOffProvider, 0, 0, NavigationService.this);
} catch (SecurityException e) {
Toast.makeText(this, R.string.no_location_permission, Toast.LENGTH_LONG).show();
Log.d(PlatformUtil.TAG, "Location service permission not granted"); //$NON-NLS-1$
} catch (IllegalArgumentException e) {
Toast.makeText(this, R.string.gps_not_available, Toast.LENGTH_LONG).show();
Log.d(PlatformUtil.TAG, "GPS location provider not available"); //$NON-NLS-1$
@ -202,7 +205,11 @@ public class NavigationService extends Service implements LocationListener {
usedBy = 0;
// remove updates
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.removeUpdates(this);
try {
locationManager.removeUpdates(this);
} catch (SecurityException e) {
Log.d(PlatformUtil.TAG, "Location service permission not granted"); //$NON-NLS-1$
}
if (!isContinuous()) {
WakeLock lock = getLock(this);
@ -225,7 +232,11 @@ public class NavigationService extends Service implements LocationListener {
if (!isContinuous()) {
// unregister listener and wait next time
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.removeUpdates(this);
try {
locationManager.removeUpdates(this);
} catch (SecurityException e) {
Log.d(PlatformUtil.TAG, "Location service permission not granted"); //$NON-NLS-1$
}
WakeLock lock = getLock(this);
if (lock.isHeld()) {
lock.release();

View file

@ -2004,19 +2004,27 @@ public class OsmandSettings {
List<LatLon> ps = getPoints();
List<String> ds = getPointDescriptions(ps.size());
int i = ps.indexOf(new LatLon(latitude, longitude));
ds.set(i, PointDescription.serializeToString(historyDescription));
if (historyDescription != null && !historyDescription.isSearchingAddress(ctx)) {
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription);
if (i != -1) {
ds.set(i, PointDescription.serializeToString(historyDescription));
if (historyDescription != null && !historyDescription.isSearchingAddress(ctx)) {
SearchHistoryHelper.getInstance(ctx).addNewItemToHistory(latitude, longitude, historyDescription);
}
return savePoints(ps, ds);
} else {
return false;
}
return savePoints(ps, ds);
}
public boolean deletePoint(int index) {
List<LatLon> ps = getPoints();
List<String> ds = getPointDescriptions(ps.size());
ps.remove(index);
ds.remove(index);
return savePoints(ps, ds);
if (index < ps.size()) {
ps.remove(index);
ds.remove(index);
return savePoints(ps, ds);
} else {
return false;
}
}
public boolean savePoints(List<LatLon> ps, List<String> ds) {

View file

@ -138,10 +138,12 @@ public class TargetPointsHelper {
AddressLookupRequest lookupRequest = new AddressLookupRequest(targetPoint.point, new GeocodingLookupService.OnAddressLookupResult() {
@Override
public void geocodingDone(String address) {
targetPoint.pointDescription.setName(address);
settings.updateIntermediatePoint(targetPoint.point.getLatitude(), targetPoint.point.getLongitude(),
targetPoint.pointDescription);
updateRouteAndRefresh(false);
if (intermediatePoints.contains(targetPoint)) {
targetPoint.pointDescription.setName(address);
settings.updateIntermediatePoint(targetPoint.point.getLatitude(), targetPoint.point.getLongitude(),
targetPoint.pointDescription);
updateRouteAndRefresh(false);
}
}
}, null);
ctx.getGeocodingLookupService().lookupAddress(lookupRequest);
@ -156,10 +158,12 @@ public class TargetPointsHelper {
@Override
public void geocodingDone(String address) {
startPointRequest = null;
pointToStart.pointDescription.setName(address);
settings.setPointToStart(pointToStart.point.getLatitude(), pointToStart.point.getLongitude(),
pointToStart.pointDescription);
updateRouteAndRefresh(false);
if (pointToStart != null) {
pointToStart.pointDescription.setName(address);
settings.setPointToStart(pointToStart.point.getLatitude(), pointToStart.point.getLongitude(),
pointToStart.pointDescription);
updateRouteAndRefresh(false);
}
}
}, null);
ctx.getGeocodingLookupService().lookupAddress(startPointRequest);
@ -174,10 +178,12 @@ public class TargetPointsHelper {
@Override
public void geocodingDone(String address) {
targetPointRequest = null;
pointToNavigate.pointDescription.setName(address);
settings.setPointToNavigate(pointToNavigate.point.getLatitude(), pointToNavigate.point.getLongitude(),
pointToNavigate.pointDescription);
updateRouteAndRefresh(false);
if (pointToNavigate != null) {
pointToNavigate.pointDescription.setName(address);
settings.setPointToNavigate(pointToNavigate.point.getLatitude(), pointToNavigate.point.getLongitude(),
pointToNavigate.pointDescription);
updateRouteAndRefresh(false);
}
}
}, null);
ctx.getGeocodingLookupService().lookupAddress(targetPointRequest);

View file

@ -580,7 +580,9 @@ public class FavoritesTreeFragment extends OsmandExpandableListFragment {
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Favourites.gpx:\n\n\n" + GPXUtilities.asString(gpxFile, getMyApplication()));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.share_fav_subject));
sendIntent.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(getActivity(), "net.osmand.fileprovider", dst));
sendIntent.putExtra(Intent.EXTRA_STREAM,
FileProvider.getUriForFile(getActivity(),
getActivity().getPackageName() + ".fileprovider", dst));
sendIntent.setType("text/plain");
startActivity(sendIntent);
} catch (IOException e) {

View file

@ -486,6 +486,8 @@ public class MapActivity extends AccessibleActivity implements DownloadEvents,
new RateUsBottomSheetDialog().show(getSupportFragmentManager(), "dialog");
}
}
} else {
dashboardOnMap.updateDashboard();
}
}
dashboardOnMap.updateLocation(true, true, false);
@ -600,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) {

View file

@ -44,10 +44,10 @@ import java.util.Set;
public abstract class SettingsBaseActivity extends ActionBarPreferenceActivity
implements OnPreferenceChangeListener, OnPreferenceClickListener {
public static final String INTENT_APP_MODE = "INTENT_APP_MODE";
protected OsmandSettings settings;
protected final boolean profileSettings ;
protected final boolean profileSettings;
protected List<ApplicationMode> modes = new ArrayList<ApplicationMode>();
private ApplicationMode previousAppMode;
@ -388,7 +388,14 @@ public abstract class SettingsBaseActivity extends ActionBarPreferenceActivity
super.onResume();
if (profileSettings) {
previousAppMode = settings.getApplicationMode();
boolean found = setSelectedAppMode(previousAppMode);
boolean found;
if (getIntent() != null && getIntent().hasExtra(INTENT_APP_MODE)) {
String modeStr = getIntent().getStringExtra(INTENT_APP_MODE);
ApplicationMode mode = ApplicationMode.valueOfStringKey(modeStr, previousAppMode);
found = setSelectedAppMode(mode);
} else {
found = setSelectedAppMode(previousAppMode);
}
if (!found) {
getSpinner().setSelection(0);
}

View file

@ -169,7 +169,9 @@ public class AudioNotesLayer extends OsmandMapLayer implements IContextMenuProvi
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> objects) {
getRecordingsFromPoint(point, tileBox, objects);
if (tileBox.getZoom() >= startZoom) {
getRecordingsFromPoint(point, tileBox, objects);
}
}
public void getRecordingsFromPoint(PointF point, RotatedTileBox tileBox, List<? super Recording> am) {

View file

@ -1520,6 +1520,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
if (mapActivity != null && rec != null) {
MapContextMenu menu = mapActivity.getContextMenu();
menu.show(new LatLon(rec.lat, rec.lon), audioNotesLayer.getObjectName(rec), rec);
if (app.getRoutingHelper().isFollowingMode()) {
menu.hideWithTimeout(3000);
}
}
}

View file

@ -29,6 +29,7 @@ public abstract class BottomSheetDialogFragment extends DialogFragment {
final Dialog dialog = new Dialog(getActivity(), themeId);
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().getAttributes().windowAnimations = R.style.Animations_PopUpMenu_Bottom;
dialog.setCanceledOnTouchOutside(true);
return dialog;
}

View file

@ -36,6 +36,7 @@ import com.github.ksoichiro.android.observablescrollview.ObservableScrollView;
import com.github.ksoichiro.android.observablescrollview.ObservableScrollViewCallbacks;
import com.github.ksoichiro.android.observablescrollview.ScrollState;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.ValueHolder;
import net.osmand.data.LatLon;
@ -151,6 +152,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
private int mFlexibleBlurSpaceHeight;
private boolean portrait;
private long lastUpOrCancelMotionEventTime;
private TextView listEmptyTextView;
int baseColor;
@ -218,6 +220,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
//listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setDrawSelectorOnTop(true);
listView.setDynamicListViewCallbacks(this);
listEmptyTextView = (TextView) dashboardView.findViewById(R.id.emptyTextView);
// Create a ListView-specific touch listener. ListViews are given special treatment because
// by default they handle touches for their list items... i.e. they're in charge of drawing
@ -781,14 +784,12 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
} else {
scrollView.setVisibility(View.GONE);
listViewLayout.setVisibility(View.VISIBLE);
listView.scrollTo(0, 0);
listView.clearParams();
if (listView instanceof ObservableListView) {
onScrollChanged(listView.getScrollY(), false, false);
}
if (refresh) {
refreshContent(false);
} else {
listView.scrollTo(0, 0);
listView.clearParams();
onScrollChanged(listView.getScrollY(), false, false);
updateListAdapter();
}
updateListBackgroundHeight();
@ -833,12 +834,19 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
}
}
public void updateDashboard() {
if (visibleType == DashboardType.ROUTE_PREFERENCES) {
refreshContent(false);
}
}
private void applyDayNightMode() {
if (nightMode) {
if (listBackgroundView != null) {
listBackgroundView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_dark));
} else {
listView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_dark));
listEmptyTextView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_dark));
}
if (visibleType != DashboardType.WAYPOINTS && visibleType != DashboardType.MAP_MARKERS
&& visibleType != DashboardType.MAP_MARKERS_SELECTION) {
@ -853,6 +861,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
listBackgroundView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_light));
} else {
listView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_light));
listEmptyTextView.setBackgroundColor(mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_light));
}
if (visibleType != DashboardType.WAYPOINTS && visibleType != DashboardType.MAP_MARKERS
&& visibleType != DashboardType.MAP_MARKERS_SELECTION) {
@ -863,6 +872,7 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
listView.setDivider(null);
}
}
AndroidUtils.setTextSecondaryColor(mapActivity, listEmptyTextView, nightMode);
/*
listView.setOverscrollFooter(new ColorDrawable(
nightMode ? mapActivity.getResources().getColor(R.color.ctx_menu_info_view_bg_dark)
@ -876,6 +886,8 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
}
private void updateListAdapter() {
listEmptyTextView.setVisibility(View.GONE);
listView.setEmptyView(null);
ContextMenuAdapter cm = null;
if (DashboardType.WAYPOINTS == visibleType || DashboardType.WAYPOINTS_FLAT == visibleType) {
@ -887,6 +899,15 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
setDynamicListItems(listView, listAdapter);
updateListAdapter(listAdapter, listener);
if (listAdapter.getObjects().size() == 0) {
listEmptyTextView.setText(mapActivity.getString(R.string.no_waypoints_found));
if (landscape) {
listView.setEmptyView(listEmptyTextView);
} else {
listEmptyTextView.setVisibility(View.VISIBLE);
}
}
} else if (DashboardType.MAP_MARKERS == visibleType || visibleType == DashboardType.MAP_MARKERS_SELECTION) {
mapMarkerDialogHelper.setSelectionMode(visibleType == DashboardType.MAP_MARKERS_SELECTION);
@ -900,6 +921,15 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
showMarkersRouteOnMap();
}
if (listAdapter.getObjects().size() == 0) {
listEmptyTextView.setText(mapActivity.getString(R.string.no_map_markers_found));
if (landscape) {
listView.setEmptyView(listEmptyTextView);
} else {
listEmptyTextView.setVisibility(View.VISIBLE);
}
}
} else {
if (DashboardType.CONFIGURE_SCREEN == visibleType) {
@ -1383,9 +1413,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
@Override
public void onItemSwapping(int position) {
if (swipeDismissListener != null) {
swipeDismissListener.setEnabled(false);
}
}
@SuppressWarnings("unchecked")
@ -1422,10 +1449,6 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, DynamicLis
getMyApplication().getMapMarkersHelper().saveMapMarkers(markers, null);
reloadAdapter();
}
if (swipeDismissListener != null) {
swipeDismissListener.setEnabled(true);
}
}
}, 50);
}

View file

@ -131,6 +131,7 @@ public class RasterMapMenu {
.layout(R.layout.progress_list_item)
.iconColor(R.drawable.ic_action_opacity)
.progress(mapTransparencyPreference.get())
.listen(l)
.listenInteger(integerListener).reg();
if (type == OsmandRasterMapsPlugin.RasterMapType.UNDERLAY) {
contextMenuAdapter.item(R.string.show_polygons).listen(l)

View file

@ -614,9 +614,7 @@ public class DownloadActivity extends AbstractDownloadActivity implements Downlo
}
private void chooseDataStorage() {
if (getMyApplication().getSettings().getSecondaryStorage() != null) {
DataStoragePlaceDialogFragment.showInstance(getSupportFragmentManager(), false);
}
DataStoragePlaceDialogFragment.showInstance(getSupportFragmentManager(), false);
}
public static boolean hasPermissionToWriteExternalStorage(Context ctx) {

View file

@ -3,7 +3,6 @@ package net.osmand.plus.download.ui;
import android.app.Activity;
import android.os.Bundle;
import android.os.StatFs;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Gravity;
import android.view.LayoutInflater;
@ -57,8 +56,8 @@ public class DataStoragePlaceDialogFragment extends BottomSheetDialogFragment {
hasExternalStoragePermission = DownloadActivity.hasPermissionToWriteExternalStorage(getActivity());
internalStorage = getInternalStorageDirectory(getActivity());
sharedStorage = getSharedStorageDirectory(getActivity());
if (hasExternalStoragePermission) {
sharedStorage = getSharedStorageDirectory(getActivity());
externalStorage = getMyApplication().getSettings().getSecondaryStorage();
}
@ -91,14 +90,19 @@ 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) {
if (hasExternalStoragePermission && externalStorage != null) {
memoryStickRow.setOnClickListener(externalMemoryOnClickListener);
ImageView memoryStickImageView = (ImageView) view.findViewById(R.id.memoryStickImageView);
memoryStickImageView.setImageDrawable(getContentIcon(R.drawable.ic_sdcard));
@ -139,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();

View file

@ -168,6 +168,7 @@ public class AvoidSpecificRoads {
if (menu.isActive() && menu.getLatLon().equals(loc)) {
menu.close();
}
activity.refreshMap();
}
return true;
}

View file

@ -1,9 +1,8 @@
package net.osmand.plus.helpers;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.util.Arrays;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
@ -25,11 +24,15 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.audionotes.AudioVideoNotesPlugin;
import net.osmand.plus.mapcontextmenu.MapContextMenu;
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.routing.RouteDirectionInfo;
import net.osmand.plus.routing.RoutingHelper;
import net.osmand.router.TurnType;
import net.osmand.util.Algorithms;
import java.io.ByteArrayInputStream;
import java.io.File;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
public class ExternalApiHelper {
@ -54,7 +57,9 @@ public class ExternalApiHelper {
public static final String API_CMD_STOP_GPX_REC = "stop_gpx_rec";
public static final String API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS = "subscribe_voice_notifications";
public static final int VERSION_CODE = 1;
public static final String PARAM_NAME = "name";
public static final String PARAM_DESC = "desc";
public static final String PARAM_CATEGORY = "category";
@ -75,9 +80,16 @@ public class ExternalApiHelper {
public static final String PARAM_DEST_LON = "dest_lon";
public static final String PARAM_PROFILE = "profile";
public static final String PARAM_VERSION = "version";
public static final String PARAM_ETA = "eta";
public static final String PARAM_TIME_LEFT = "time_left";
public static final String PARAM_DISTANCE_LEFT = "time_distance_left";
public static final String PARAM_NT_DISTANCE = "turn_distance";
public static final String PARAM_NT_IMMINENT = "turn_imminent";
public static final String PARAM_NT_DIRECTION_NAME = "turn_name";
public static final String PARAM_NT_DIRECTION_TURN = "turn_type";
public static final String PARAM_NT_DIRECTION_LANES = "turn_lanes";
public static final ApplicationMode[] VALID_PROFILES = new ApplicationMode[]{
ApplicationMode.CAR,
@ -95,6 +107,7 @@ public class ExternalApiHelper {
public static final int RESULT_CODE_ERROR_GPX_NOT_FOUND = 20;
public static final int RESULT_CODE_ERROR_INVALID_PROFILE = 30;
private MapActivity mapActivity;
private int resultCode;
private boolean finish;
@ -260,13 +273,27 @@ public class ExternalApiHelper {
}
final RoutingHelper routingHelper = app.getRoutingHelper();
if (routingHelper.isFollowingMode()) {
if (routingHelper.isRouteCalculated()) {
int time = routingHelper.getLeftTime();
result.putExtra(PARAM_TIME_LEFT, time);
long eta = time + System.currentTimeMillis() / 1000;
result.putExtra(PARAM_ETA, eta);
result.putExtra(PARAM_DISTANCE_LEFT, routingHelper.getLeftDistance());
NextDirectionInfo ni = routingHelper.getNextRouteDirectionInfo(new NextDirectionInfo(), true);
if(ni.distanceTo > 0) {
updateTurnInfo("next_", result, ni);
ni = routingHelper.getNextRouteDirectionInfoAfter(ni, new NextDirectionInfo(), true);
if(ni.distanceTo > 0) {
updateTurnInfo("after_next", result, ni);
}
}
routingHelper.getNextRouteDirectionInfo(new NextDirectionInfo(), false);
if(ni.distanceTo > 0) {
updateTurnInfo("no_speak_next_", result, ni);
}
}
result.putExtra(PARAM_VERSION, VERSION_CODE);
finish = true;
resultCode = RESULT_CODE_OK;
@ -359,6 +386,20 @@ public class ExternalApiHelper {
return result;
}
private void updateTurnInfo(String prefix, Intent result, NextDirectionInfo ni) {
result.putExtra(prefix + PARAM_NT_DISTANCE, ni.distanceTo);
result.putExtra(prefix + PARAM_NT_IMMINENT, ni.imminent);
if(ni.directionInfo != null && ni.directionInfo.getTurnType() != null) {
TurnType tt = ni.directionInfo.getTurnType();
RouteDirectionInfo a = ni.directionInfo;
result.putExtra(prefix + PARAM_NT_DIRECTION_NAME, RoutingHelper.formatStreetName(a.getStreetName(), a.getRef(), a.getDestinationName()));
result.putExtra(prefix + PARAM_NT_DIRECTION_TURN, tt.toXmlString());
if(tt.getLanes() != null) {
result.putExtra(prefix + PARAM_NT_DIRECTION_LANES, Arrays.toString(tt.getLanes()));
}
}
}
private void showOnMap(double lat, double lon, Object object, PointDescription pointDescription) {
MapContextMenu mapContextMenu = mapActivity.getContextMenu();
mapContextMenu.setMapCenter(new LatLon(lat, lon));

View file

@ -71,6 +71,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
private boolean inLocationUpdate = false;
private boolean appModeChanged;
private boolean appModeListenerAdded;
private boolean autoHide;
private int favActionIconId;
@ -300,6 +301,7 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
active = false;
}
centerMarker = false;
autoHide = false;
}
}
@ -348,6 +350,19 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
}
}
// timeout in msec
public void hideWithTimeout(long timeout) {
autoHide = true;
mapActivity.getMyApplication().runInUIThread(new Runnable() {
@Override
public void run() {
if (autoHide) {
hide();
}
}
}, timeout);
}
public void updateMenuUI() {
WeakReference<MapContextMenuFragment> fragmentRef = findMenuFragment();
if (fragmentRef != null) {

View file

@ -70,6 +70,11 @@ public class RoutePreferencesMenu {
public static class LocalRoutingParameter {
public GeneralRouter.RoutingParameter routingParameter;
private ApplicationMode am;
public LocalRoutingParameter(ApplicationMode am) {
this.am = am;
}
public String getText(MapActivity mapActivity) {
return SettingsBaseActivity.getRoutingStringPropertyName(mapActivity, routingParameter.getId(),
@ -79,33 +84,66 @@ public class RoutePreferencesMenu {
public boolean isSelected(OsmandSettings settings) {
final OsmandSettings.CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter
.getId());
return property.get();
if(am != null) {
return property.getModeValue(am);
} else {
return property.get();
}
}
public void setSelected(OsmandSettings settings, boolean isChecked) {
final OsmandSettings.CommonPreference<Boolean> property = settings.getCustomRoutingBooleanProperty(routingParameter
.getId());
property.set(isChecked);
if(am != null) {
property.setModeValue(am, isChecked);
} else {
property.set(isChecked);
}
}
}
private static class MuteSoundRoutingParameter extends LocalRoutingParameter {
public MuteSoundRoutingParameter() {
super(null);
}
}
private static class InterruptMusicRoutingParameter extends LocalRoutingParameter {
public InterruptMusicRoutingParameter() {
super(null);
}
}
private static class VoiceGuidanceRoutingParameter extends LocalRoutingParameter {
public VoiceGuidanceRoutingParameter() {
super(null);
}
}
private static class AvoidRoadsRoutingParameter extends LocalRoutingParameter {
public AvoidRoadsRoutingParameter() {
super(null);
}
}
private static class GpxLocalRoutingParameter extends LocalRoutingParameter {
public GpxLocalRoutingParameter() {
super(null);
}
}
private static class OtherSettingsRoutingParameter extends LocalRoutingParameter {
public OtherSettingsRoutingParameter() {
super(null);
}
}
private static class OtherLocalRoutingParameter extends LocalRoutingParameter {
@ -114,6 +152,7 @@ public class RoutePreferencesMenu {
public int id;
public OtherLocalRoutingParameter(int id, String text, boolean selected) {
super(null);
this.text = text;
this.selected = selected;
this.id = id;
@ -253,6 +292,7 @@ public class RoutePreferencesMenu {
if (obj instanceof OtherSettingsRoutingParameter) {
final Intent settings = new Intent(mapActivity, SettingsNavigationActivity.class);
settings.putExtra(SettingsNavigationActivity.INTENT_SKIP_DIALOG, true);
settings.putExtra(SettingsBaseActivity.INTENT_APP_MODE, routingHelper.getAppMode().getStringKey());
mapActivity.startActivity(settings);
} else if (obj instanceof MuteSoundRoutingParameter) {
final CompoundButton btn = (CompoundButton) view.findViewById(R.id.check_item);
@ -425,7 +465,7 @@ public class RoutePreferencesMenu {
ch.setOnCheckedChangeListener(null);
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")) {
// if short route settings - it should be inverse of fast_route_mode
ch.setChecked(!settings.FAST_ROUTE_MODE.get());
ch.setChecked(!settings.FAST_ROUTE_MODE.getModeValue(routingHelper.getAppMode()));
} else {
ch.setChecked(rp.isSelected(settings));
}
@ -435,7 +475,7 @@ public class RoutePreferencesMenu {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// if short way that it should set valut to fast mode opposite of current
if (rp.routingParameter != null && rp.routingParameter.getId().equals("short_way")) {
settings.FAST_ROUTE_MODE.set(!isChecked);
settings.FAST_ROUTE_MODE.setModeValue(routingHelper.getAppMode(), !isChecked);
}
rp.setSelected(settings, isChecked);
@ -550,7 +590,7 @@ public class RoutePreferencesMenu {
}
for (GeneralRouter.RoutingParameter r : rm.getParameters().values()) {
if (r.getType() == GeneralRouter.RoutingParameterType.BOOLEAN) {
LocalRoutingParameter rp = new LocalRoutingParameter();
LocalRoutingParameter rp = new LocalRoutingParameter(am);
rp.routingParameter = r;
list.add(rp);
}

View file

@ -532,7 +532,9 @@ public class OsmBugsLayer extends OsmandMapLayer implements IContextMenuProvider
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res) {
getBugFromPoint(tileBox, point, res);
if (tileBox.getZoom() >= startZoom) {
getBugFromPoint(tileBox, point, res);
}
}
@Override

View file

@ -95,14 +95,15 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
return loginResult;
}
}
return editingPOI(b.toString(), POST, msg);
return editingPOI(b.toString(), POST, msg, anonymous);
}
public OsmBugResult validateLoginDetails() {
return editingPOI(getUserDetailsApi(), GET, "validate_login");
return editingPOI(getUserDetailsApi(), GET, "validate_login", false);
}
private OsmBugResult editingPOI(String url, String requestMethod, String userOperation) {
private OsmBugResult editingPOI(String url, String requestMethod, String userOperation,
boolean anonymous) {
OsmBugResult r = new OsmBugResult();
try {
HttpURLConnection connection = NetworkUtils.getHttpURLConnection(url);
@ -111,8 +112,10 @@ public class OsmBugsRemoteUtil implements OsmBugsUtil {
connection.setRequestMethod(requestMethod);
connection.setRequestProperty("User-Agent", Version.getFullVersion(app)); //$NON-NLS-1$
String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); //$NON-NLS-1$
connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (!anonymous) {
String token = settings.USER_NAME.get() + ":" + settings.USER_PASSWORD.get(); //$NON-NLS-1$
connection.addRequestProperty("Authorization", "Basic " + Base64.encode(token.getBytes("UTF-8"))); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
connection.setDoInput(true);
connection.connect();

View file

@ -56,13 +56,15 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
@Override
public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSettings settings) {
if (tileBox.getZoom() >= startZoom) {
drawPoints(canvas, tileBox, plugin.getDBBug().getOsmbugsPoints());
drawPoints(canvas, tileBox, plugin.getDBPOI().getOpenstreetmapPoints());
List<LatLon> fullObjectsLatLon = new ArrayList<>();
drawPoints(canvas, tileBox, plugin.getDBBug().getOsmbugsPoints(), fullObjectsLatLon);
drawPoints(canvas, tileBox, plugin.getDBPOI().getOpenstreetmapPoints(), fullObjectsLatLon);
this.fullObjectsLatLon = fullObjectsLatLon;
}
}
private void drawPoints(Canvas canvas, RotatedTileBox tileBox, List<? extends OsmPoint> objects) {
List<LatLon> fullObjectsLatLon = new ArrayList<>();
private void drawPoints(Canvas canvas, RotatedTileBox tileBox, List<? extends OsmPoint> objects,
List<LatLon> fullObjectsLatLon) {
for (OsmPoint o : objects) {
float x = tileBox.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
float y = tileBox.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
@ -77,7 +79,6 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
canvas.drawBitmap(b, x - b.getWidth() / 2, y - b.getHeight() / 2, paintIcon);
fullObjectsLatLon.add(new LatLon(o.getLatitude(), o.getLongitude()));
}
this.fullObjectsLatLon = fullObjectsLatLon;
}
@Override
@ -144,7 +145,9 @@ public class OsmEditsLayer extends OsmandMapLayer implements ContextMenuLayer.IC
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) {
getOsmEditsFromPoint(point, tileBox, o);
if (tileBox.getZoom() >= startZoom) {
getOsmEditsFromPoint(point, tileBox, o);
}
}
@Override

View file

@ -914,30 +914,7 @@ public class RoutingHelper {
}
}
}
public boolean startTaskInRouteThreadIfPossible(final Runnable r) {
if (currentRunningJob == null) {
synchronized (this) {
currentRunningJob = new Thread(new Runnable() {
@Override
public void run() {
try {
r.run();
} finally {
synchronized (RoutingHelper.this) {
currentRunningJob = null;
}
}
}
}, "Calculating position"); //$NON-NLS-1$
currentRunningJob.start();
return true;
}
}
return false;
}
private void updateProgress(final RouteCalculationParams params) {
if(progressRoute != null ) {
app.runInUIThread(new Runnable() {

View file

@ -280,13 +280,13 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex
true).getIntrinsicWidth() * 3 / 2.5f;
QuadTree<QuadRect> boundIntersections = initBoundIntersections(tileBox);
List<LatLon> fullObjectsLatLon = new ArrayList<>();
List<LatLon> smallObjectsLatLon = new ArrayList<>();
// request to load
final QuadRect latLonBounds = tileBox.getLatLonBounds();
for (SelectedGpxFile g : selectedGPXFiles) {
List<WptPt> pts = getListStarPoints(g);
List<WptPt> fullObjects = new ArrayList<>();
List<LatLon> fullObjectsLatLon = new ArrayList<>();
List<LatLon> smallObjectsLatLon = new ArrayList<>();
int fcolor = g.getColor() == 0 ? defPointColor : g.getColor();
for (WptPt o : pts) {
if (o.lat >= latLonBounds.bottom && o.lat <= latLonBounds.top
@ -315,9 +315,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex
FavoriteImageDrawable fid = FavoriteImageDrawable.getOrCreate(view.getContext(), pointColor, true);
fid.drawBitmapInCenter(canvas, x, y);
}
this.fullObjectsLatLon = fullObjectsLatLon;
this.smallObjectsLatLon = smallObjectsLatLon;
}
this.fullObjectsLatLon = fullObjectsLatLon;
this.smallObjectsLatLon = smallObjectsLatLon;
}
}
@ -482,7 +482,9 @@ public class GPXLayer extends OsmandMapLayer implements ContextMenuLayer.IContex
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res) {
getWptFromPoint(tileBox, point, res);
if (tileBox.getZoom() >= startZoom) {
getWptFromPoint(tileBox, point, res);
}
}
@Override

View file

@ -117,18 +117,20 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) {
int ex = (int) point.x;
int ey = (int) point.y;
int compare = getRadiusPoi(tileBox);
int radius = compare * 3 / 2;
if (tileBox.getZoom() >= startZoom) {
int ex = (int) point.x;
int ey = (int) point.y;
int compare = getRadiusPoi(tileBox);
int radius = compare * 3 / 2;
for (RouteDataObject road : getMissingRoads()) {
Location location = getMissingRoadLocations().get(road.getId());
int x = (int) tileBox.getPixXFromLatLon(location.getLatitude(), location.getLongitude());
int y = (int) tileBox.getPixYFromLatLon(location.getLatitude(), location.getLongitude());
if (calculateBelongs(ex, ey, x, y, compare)) {
compare = radius;
o.add(road);
for (RouteDataObject road : getMissingRoads()) {
Location location = getMissingRoadLocations().get(road.getId());
int x = (int) tileBox.getPixXFromLatLon(location.getLatitude(), location.getLongitude());
int y = (int) tileBox.getPixYFromLatLon(location.getLatitude(), location.getLongitude());
if (calculateBelongs(ex, ey, x, y, compare)) {
compare = radius;
o.add(road);
}
}
}
}
@ -169,7 +171,6 @@ public class ImpassableRoadsLayer extends OsmandMapLayer implements ContextMenuL
activity.getMyApplication().getAvoidSpecificRoads().addImpassableRoad(
activity, latLon, false);
}
activity.refreshMap();
return true;
}
};

View file

@ -392,6 +392,10 @@ public class MapMarkersLayer extends OsmandMapLayer implements IContextMenuProvi
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) {
if (tileBox.getZoom() < 3 || !map.getMyApplication().getSettings().USE_MAP_MARKERS.get()) {
return;
}
MapMarkersHelper markersHelper = map.getMyApplication().getMapMarkersHelper();
List<MapMarker> markers = markersHelper.getActiveMapMarkers();
int r = getRadiusPoi(tileBox);

View file

@ -820,6 +820,10 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
}
}
if (twoFingerTapDetector.onTouchEvent(event)) {
ContextMenuLayer contextMenuLayer = getLayerByClass(ContextMenuLayer.class);
if (contextMenuLayer != null) {
contextMenuLayer.onTouchEvent(event, getCurrentRotatedTileBox());
}
return true;
}

View file

@ -305,11 +305,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
public static void showWikipediaDialog(Context ctx, OsmandApplication app, Amenity a) {
String lang = app.getSettings().MAP_PREFERRED_LOCALE.get();
if (a.getType().isWiki()) {
String preferredLang = lang;
if (Algorithms.isEmpty(preferredLang)) {
preferredLang = app.getLanguage();
}
showWiki(ctx, app, a, preferredLang);
showWiki(ctx, app, a, lang);
}
}
@ -326,11 +322,15 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
}
private static void showWiki(final Context ctx, final OsmandApplication app, final Amenity a, final String lang) {
String preferredLang = lang;
if (Algorithms.isEmpty(preferredLang)) {
preferredLang = app.getLanguage();
}
final Dialog dialog = new Dialog(ctx,
app.getSettings().isLightContent() ?
R.style.OsmandLightTheme :
R.style.OsmandDarkTheme);
final String title = a.getName(lang);
final String title = Algorithms.isEmpty(lang) ? a.getName() : a.getName(lang);
LinearLayout ll = new LinearLayout(ctx);
ll.setOrientation(LinearLayout.VERTICAL);
@ -342,7 +342,7 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
topBar.setBackgroundColor(ctx.getResources().getColor(getResIdFromAttribute(ctx, R.attr.pstsTabBackground)));
topBar.setTitleTextColor(ctx.getResources().getColor(getResIdFromAttribute(ctx, R.attr.pstsTextColor)));
String lng = a.getContentSelected("content", lang, "en");
String lng = a.getContentSelected("content", preferredLang, "en");
if (Algorithms.isEmpty(lng)) {
lng = "en";
}
@ -507,7 +507,9 @@ public class POIMapLayer extends OsmandMapLayer implements ContextMenuLayer.ICon
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> objects) {
getAmenityFromPoint(tileBox, point, objects);
if (tileBox.getZoom() >= startZoom) {
getAmenityFromPoint(tileBox, point, objects);
}
}
@Override

View file

@ -165,7 +165,9 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) {
getMyLocationFromPoint(tileBox, point, o);
if (tileBox.getZoom() >= 3) {
getMyLocationFromPoint(tileBox, point, o);
}
}
@Override

View file

@ -180,24 +180,24 @@ public class PointNavigationLayer extends OsmandMapLayer implements IContextMenu
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> o) {
TargetPointsHelper tg = map.getMyApplication().getTargetPointsHelper();
List<TargetPoint> intermediatePoints = tg.getAllPoints();
int r = getRadiusPoi(tileBox);
for (int i = 0; i < intermediatePoints.size(); i++) {
TargetPoint tp = intermediatePoints.get(i);
LatLon latLon = tp.point;
if (latLon != null) {
int ex = (int) point.x;
int ey = (int) point.y;
int x = (int) tileBox.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
int y = (int) tileBox.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
if (calculateBelongs(ex, ey, x, y, r)) {
o.add(tp);
if (tileBox.getZoom() >= 3) {
TargetPointsHelper tg = map.getMyApplication().getTargetPointsHelper();
List<TargetPoint> intermediatePoints = tg.getAllPoints();
int r = getRadiusPoi(tileBox);
for (int i = 0; i < intermediatePoints.size(); i++) {
TargetPoint tp = intermediatePoints.get(i);
LatLon latLon = tp.point;
if (latLon != null) {
int ex = (int) point.x;
int ey = (int) point.y;
int x = (int) tileBox.getPixXFromLatLon(latLon.getLatitude(), latLon.getLongitude());
int y = (int) tileBox.getPixYFromLatLon(latLon.getLatitude(), latLon.getLongitude());
if (calculateBelongs(ex, ey, x, y, r)) {
o.add(tp);
}
}
}
}
}
private boolean calculateBelongs(int ex, int ey, int objx, int objy, int radius) {

View file

@ -205,7 +205,9 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
@Override
public void collectObjectsFromPoint(PointF point, RotatedTileBox tileBox, List<Object> res) {
getFromPoint(tileBox, point, res);
if (tileBox.getZoom() >= startZoom) {
getFromPoint(tileBox, point, res);
}
}
@Override

View file

@ -108,6 +108,7 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
private int mDownPosition;
private View mSwipeDownView;
private boolean mSwipePaused;
private boolean mSwipeCanceled;
private PopupWindow mUndoPopup;
private int mValidDelayedMsgId;
@ -635,6 +636,7 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
mSwipeDownView = mSwipeDownChild = null;
mDownPosition = ListView.INVALID_POSITION;
mSwiping = false;
mSwipeCanceled = false;
break;
}
@ -677,17 +679,24 @@ public class SwipeDismissListViewTouchListener implements View.OnTouchListener {
mSwipeDownChild = null;
mDownPosition = AbsListView.INVALID_POSITION;
mSwiping = false;
mSwipeCanceled = false;
break;
}
case MotionEvent.ACTION_MOVE: {
if (mVelocityTracker == null || mSwipePaused) {
if (mVelocityTracker == null || mSwipePaused || mSwipeCanceled) {
break;
}
mVelocityTracker.addMovement(ev);
float deltaX = ev.getRawX() - mDownX;
float deltaY = ev.getRawY() - mDownY;
if (!mSwiping && Math.abs(deltaY) > mSlop * 2) {
mSwipeCanceled = true;
break;
}
// Only start swipe in correct direction
if (isSwipeDirectionValid(deltaX)) {
ViewParent parent = mListView.getParent();

1
api-test/.gitignore vendored
View file

@ -1 +0,0 @@
/build

View file

@ -1,27 +0,0 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "net.osmand.osmandapitestapp"
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
}

View file

@ -1,17 +0,0 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/admin/Library/Android/sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View file

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="net.osmand.osmandapitestapp"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>

View file

@ -1,353 +0,0 @@
package net.osmand.osmandapitestapp;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static final int REQUEST_OSMAND_API = 101;
public static final String API_CMD_SHOW_GPX = "show_gpx";
public static final String API_CMD_NAVIGATE_GPX = "navigate_gpx";
public static final String API_CMD_NAVIGATE = "navigate";
public static final String API_CMD_RECORD_AUDIO = "record_audio";
public static final String API_CMD_RECORD_VIDEO = "record_video";
public static final String API_CMD_RECORD_PHOTO = "record_photo";
public static final String API_CMD_STOP_AV_REC = "stop_av_rec";
public static final String API_CMD_GET_INFO = "get_info";
public static final String API_CMD_ADD_FAVORITE = "add_favorite";
public static final String API_CMD_ADD_MAP_MARKER = "add_map_marker";
public static final String API_CMD_START_GPX_REC = "start_gpx_rec";
public static final String API_CMD_STOP_GPX_REC = "stop_gpx_rec";
public static final String API_CMD_SUBSCRIBE_VOICE_NOTIFICATIONS = "subscribe_voice_notifications";
public static final String PARAM_NAME = "name";
public static final String PARAM_DESC = "desc";
public static final String PARAM_CATEGORY = "category";
public static final String PARAM_LAT = "lat";
public static final String PARAM_LON = "lon";
public static final String PARAM_COLOR = "color";
public static final String PARAM_VISIBLE = "visible";
public static final String PARAM_PATH = "path";
public static final String PARAM_DATA = "data";
public static final String PARAM_FORCE = "force";
public static final String PARAM_START_NAME = "start_name";
public static final String PARAM_DEST_NAME = "dest_name";
public static final String PARAM_START_LAT = "start_lat";
public static final String PARAM_START_LON = "start_lon";
public static final String PARAM_DEST_LAT = "dest_lat";
public static final String PARAM_DEST_LON = "dest_lon";
public static final String PARAM_PROFILE = "profile";
public static final String PARAM_ETA = "eta";
public static final String PARAM_TIME_LEFT = "time_left";
public static final String PARAM_DISTANCE_LEFT = "time_distance_left";
public static final int RESULT_CODE_OK = 0;
public static final int RESULT_CODE_ERROR_UNKNOWN = -1;
public static final int RESULT_CODE_ERROR_NOT_IMPLEMENTED = -2;
public static final int RESULT_CODE_ERROR_PLUGIN_INACTIVE = 10;
public static final int RESULT_CODE_ERROR_GPX_NOT_FOUND = 20;
public static final int RESULT_CODE_ERROR_INVALID_PROFILE = 30;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Button btn = (Button) findViewById(R.id.btn_add_favorite);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_ADD_FAVORITE);
}
});
}
btn = (Button) findViewById(R.id.btn_add_map_marker);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_ADD_MAP_MARKER);
}
});
}
btn = (Button) findViewById(R.id.btn_start_audio_rec);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_RECORD_AUDIO);
}
});
}
btn = (Button) findViewById(R.id.btn_start_video_rec);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_RECORD_VIDEO);
}
});
}
btn = (Button) findViewById(R.id.btn_stop_rec);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_STOP_AV_REC);
}
});
}
btn = (Button) findViewById(R.id.btn_take_photo);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_RECORD_PHOTO);
}
});
}
btn = (Button) findViewById(R.id.btn_start_gpx_rec);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_START_GPX_REC);
}
});
}
btn = (Button) findViewById(R.id.btn_stop_gpx_rec);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_STOP_GPX_REC);
}
});
}
btn = (Button) findViewById(R.id.btn_show_gpx);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_SHOW_GPX);
}
});
}
btn = (Button) findViewById(R.id.btn_navigate_gpx);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_NAVIGATE_GPX);
}
});
}
btn = (Button) findViewById(R.id.btn_navigate);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_NAVIGATE);
}
});
}
btn = (Button) findViewById(R.id.btn_get_info);
if (btn != null) {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exec(API_CMD_GET_INFO);
}
});
}
}
public void exec(String command) {
Uri uri = null;
Intent intent = null;
String lat = "44.98062";
String lon = "34.09258";
String destLat = "44.97799";
String destLon = "34.10286";
String gpxName = "xxx.gpx";
try {
if (API_CMD_GET_INFO.equals(command)) {
uri = Uri.parse("osmand.api://get_info");
}
if (API_CMD_NAVIGATE.equals(command)) {
// test navigate
uri = Uri.parse("osmand.api://navigate" +
"?start_lat=" + lat + "&start_lon=" + lon + "&start_name=Start" +
"&dest_lat=" + destLat + "&dest_lon=" + destLon + "&dest_name=Finish" +
"&profile=bicycle");
}
if (API_CMD_RECORD_AUDIO.equals(command)) {
// test record audio
uri = Uri.parse("osmand.api://record_audio?lat=" + lat + "&lon=" + lon);
}
if (API_CMD_RECORD_VIDEO.equals(command)) {
// test record video
uri = Uri.parse("osmand.api://record_video?lat=" + lat + "&lon=" + lon);
}
if (API_CMD_RECORD_PHOTO.equals(command)) {
// test take photo
uri = Uri.parse("osmand.api://record_photo?lat=" + lat + "&lon=" + lon);
}
if (API_CMD_STOP_AV_REC.equals(command)) {
// test record video
uri = Uri.parse("osmand.api://stop_av_rec");
}
if (API_CMD_ADD_MAP_MARKER.equals(command)) {
// test marker
uri = Uri.parse("osmand.api://add_map_marker?lat=" + lat + "&lon=" + lon + "&name=Marker");
}
if (API_CMD_ADD_FAVORITE.equals(command)) {
// test favorite
uri = Uri.parse("osmand.api://add_favorite?lat=" + lat + "&lon=" + lon + "&name=Favorite&desc=Description&category=test2&color=red&visible=true");
}
if (API_CMD_START_GPX_REC.equals(command)) {
// test start gpx recording
uri = Uri.parse("osmand.api://start_gpx_rec");
}
if (API_CMD_STOP_GPX_REC.equals(command)) {
// test stop gpx recording
uri = Uri.parse("osmand.api://stop_gpx_rec");
}
if (API_CMD_SHOW_GPX.equals(command)) {
// test show gpx (path)
//File gpx = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxName);
//uri = Uri.parse("osmand.api://show_gpx?path=" + URLEncoder.encode(gpx.getAbsolutePath(), "UTF-8"));
// test show gpx (data)
uri = Uri.parse("osmand.api://show_gpx");
intent = new Intent(Intent.ACTION_VIEW, uri);
//intent.putExtra("data", AndroidUtils.getFileAsString(
// new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxName)));
}
if (API_CMD_NAVIGATE_GPX.equals(command)) {
// test navigate gpx (path)
//File gpx = new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxName);
//uri = Uri.parse("osmand.api://navigate_gpx?force=true&path=" + URLEncoder.encode(gpx.getAbsolutePath(), "UTF-8"));
// test navigate gpx (data)
uri = Uri.parse("osmand.api://navigate_gpx?force=true");
intent = new Intent(Intent.ACTION_VIEW, uri);
//intent.putExtra("data", AndroidUtils.getFileAsString(
// new File(app.getAppPath(IndexConstants.GPX_INDEX_DIR), gpxName)));
}
if (intent == null && uri != null) {
intent = new Intent(Intent.ACTION_VIEW, uri);
}
if (intent != null) {
startActivityForResult(intent, REQUEST_OSMAND_API);
/*
// setup the Intent to deep link into Android Market
Uri marketUri = Uri.parse("market://search?q=pname:net.osmand");
Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);
PackageManager pm = getPackageManager();
startActivity(pm.queryIntentActivities(intent, 0).size() == 0 ?
intent : marketIntent);
*/
}
} catch (Exception e) {
Log.e("Osmand API", "Error", e);
}
}
/*
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_OSMAND_API) {
View view = findViewById(R.id.main_view);
if (view != null) {
StringBuilder sb = new StringBuilder();
sb.append("ResultCode=").append(resultCodeStr(resultCode));
Bundle extras = data.getExtras();
if (extras != null && extras.size() > 0) {
for (String key : data.getExtras().keySet()) {
Object val = extras.get(key);
if (sb.length() > 0) {
sb.append("\n");
}
sb.append(key).append("=").append(val);
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(sb.toString());
builder.setPositiveButton("OK", null);
builder.create().show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
private String resultCodeStr(int resultCode) {
switch (resultCode) {
case RESULT_CODE_OK:
return "OK";
case RESULT_CODE_ERROR_UNKNOWN:
return "Unknown error";
case RESULT_CODE_ERROR_NOT_IMPLEMENTED:
return "Feature is not implemented";
case RESULT_CODE_ERROR_GPX_NOT_FOUND:
return "GPX not found";
case RESULT_CODE_ERROR_INVALID_PROFILE:
return "Invalid profile";
case RESULT_CODE_ERROR_PLUGIN_INACTIVE:
return "Plugin inactive";
}
return "" + resultCode;
}
}

View file

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/main_view"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="net.osmand.osmandapitestapp.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="net.osmand.osmandapitestapp.MainActivity"
tools:showIn="@layout/activity_main">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="10dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:gravity="center"
android:text="My places"/>
<Button
android:id="@+id/btn_add_favorite"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Add favorite"/>
<Button
android:id="@+id/btn_add_map_marker"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Add map marker"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="Audio/video plugin"/>
<Button
android:id="@+id/btn_start_audio_rec"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Start audio recording"/>
<Button
android:id="@+id/btn_start_video_rec"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Start video recording"/>
<Button
android:id="@+id/btn_stop_rec"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Stop recording"/>
<Button
android:id="@+id/btn_take_photo"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Take photo"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="GPX recording"/>
<Button
android:id="@+id/btn_start_gpx_rec"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Start gpx recording"/>
<Button
android:id="@+id/btn_stop_gpx_rec"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Stop gpx recording"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="GPX display/navigation"/>
<Button
android:id="@+id/btn_show_gpx"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Show gpx"/>
<Button
android:id="@+id/btn_navigate_gpx"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Navigate gpx"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="Navigation"/>
<Button
android:id="@+id/btn_navigate"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Navigate"/>
<Button
android:id="@+id/btn_get_info"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="Get info"/>
</LinearLayout>
</ScrollView>
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View file

@ -1,9 +0,0 @@
<resources>>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>

View file

@ -1,6 +0,0 @@
<resources>
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
(such as screen margins) for screens with more than 820dp of available width. This
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
<dimen name="activity_horizontal_margin">64dp</dimen>
</resources>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#ff8f00</color>
<color name="colorPrimaryDark">#e68200</color>
</resources>

View file

@ -1,6 +0,0 @@
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="fab_margin">16dp</dimen>
</resources>

View file

@ -1,4 +0,0 @@
<resources>
<string name="app_name">Osmand API Test App</string>
<string name="action_settings">Settings</string>
</resources>

View file

@ -1,19 +0,0 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
</resources>

View file

@ -1,4 +1,4 @@
include ':OsmAnd-java', ':api-test'
include ':OsmAnd-java'
include ':eclipse-compile:gridlayout'
include ':eclipse-compile:cardview'
include ':eclipse-compile:design'