Compare commits
49 commits
Author | SHA1 | Date | |
---|---|---|---|
|
4604f17b4d | ||
|
d567ba1c38 | ||
|
387e36e552 | ||
|
e8df27ef0b | ||
|
c5b197beaf | ||
|
fef2d1c648 | ||
|
f51997540c | ||
|
02757c1878 | ||
|
1e05e51d72 | ||
|
f693f766c9 | ||
|
28630f460b | ||
|
e98835d617 | ||
|
4bd5b46e20 | ||
|
b66893bfeb | ||
|
7f8fbc5032 | ||
|
28df425008 | ||
|
dc562279b9 | ||
|
a3d95d0213 | ||
|
8c62acef07 | ||
|
e09508f651 | ||
|
296b9cb308 | ||
|
571bcf15bf | ||
|
90481f92d6 | ||
|
230de1cb2e | ||
|
342bc1b8a1 | ||
|
9ca4428668 | ||
|
fef8f7f3d2 | ||
|
4ab88abcf1 | ||
|
718fcec2e8 | ||
|
ab1b25524c | ||
|
6ab2ee629f | ||
|
e88d32b5bd | ||
|
8e0ae5d241 | ||
|
a31fa8e7a7 | ||
|
ce0ac13cc3 | ||
|
02620f4981 | ||
|
45038e51ac | ||
|
4e96ac0e0c | ||
|
e8fb5e1fb4 | ||
|
b26ce7fee4 | ||
|
9918b3ccc2 | ||
|
bc967c5521 | ||
|
53a4073246 | ||
|
96e4c6a1d3 | ||
|
39963fce65 | ||
|
aa34ffe510 | ||
|
11a9473de1 | ||
|
d5f69bd318 | ||
|
3b5e02b109 |
73 changed files with 543 additions and 1103 deletions
1
OsmAnd-java/.gitignore
vendored
1
OsmAnd-java/.gitignore
vendored
|
@ -4,7 +4,6 @@ OsmAnd-core.jar
|
|||
protobuf-src/com
|
||||
OsmAnd-core-android.jar
|
||||
src/net/osmand/core/jni/*
|
||||
result.*
|
||||
|
||||
# Android Studio
|
||||
/.idea
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
]
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
13
OsmAnd/res/drawable/btn_round_shade_n.xml
Normal file
13
OsmAnd/res/drawable/btn_round_shade_n.xml
Normal 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>
|
13
OsmAnd/res/drawable/btn_round_shade_p.xml
Normal file
13
OsmAnd/res/drawable/btn_round_shade_p.xml
Normal 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>
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -118,6 +118,7 @@
|
|||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/divSharedStorage"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="1dp"
|
||||
android:layout_gravity="fill_horizontal"
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 & 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>
|
||||
|
|
|
@ -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<>();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -168,6 +168,7 @@ public class AvoidSpecificRoads {
|
|||
if (menu.isActive() && menu.getLatLon().equals(loc)) {
|
||||
menu.close();
|
||||
}
|
||||
activity.refreshMap();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
1
api-test/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
/build
|
|
@ -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'
|
||||
}
|
17
api-test/proguard-rules.pro
vendored
17
api-test/proguard-rules.pro
vendored
|
@ -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 *;
|
||||
#}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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 |
|
@ -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>
|
|
@ -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>
|
|
@ -1,5 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#ff8f00</color>
|
||||
<color name="colorPrimaryDark">#e68200</color>
|
||||
</resources>
|
|
@ -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>
|
|
@ -1,4 +0,0 @@
|
|||
<resources>
|
||||
<string name="app_name">Osmand API Test App</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
</resources>
|
|
@ -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>
|
|
@ -1,4 +1,4 @@
|
|||
include ':OsmAnd-java', ':api-test'
|
||||
include ':OsmAnd-java'
|
||||
include ':eclipse-compile:gridlayout'
|
||||
include ':eclipse-compile:cardview'
|
||||
include ':eclipse-compile:design'
|
||||
|
|
Loading…
Reference in a new issue