Merge branch 'r3.9' into graph-toggle
This commit is contained in:
commit
252319f619
159 changed files with 7285 additions and 2879 deletions
157
GPX.md
157
GPX.md
|
@ -1,157 +0,0 @@
|
||||||
The OsmAnd's GPX file format conforms to the GPX 1.1 specification with additional data written as extensions. There are several sections of such data:
|
|
||||||
|
|
||||||
## Track appearance
|
|
||||||
The following parameters are used to customize the appearance of a track on the map. They are used inside the "gpx" tag and apply to all tracks contained in the gpx.
|
|
||||||
#### Parameters
|
|
||||||
* **show_arrows** [*true, false*] - show / hide arrows along the path line.
|
|
||||||
* **width** [*thin, medium, bold, 1-24*] - width of the track line on the map. The thin, medium, and bold are style depended values (should be defined as currentTrackWidth attribute).
|
|
||||||
* **color** [*#AARRGGBB, #RRGGBB*] - color of a track line on the map. Hex value.
|
|
||||||
* **split_type** [*no_split, distance, time*] - split type for a track.
|
|
||||||
* **split_interval** [*double*] - split interval for a track. Distance (meters), time (seconds).
|
|
||||||
|
|
||||||
#### Example:
|
|
||||||
```xml
|
|
||||||
<gpx version="1.1" creator="OsmAndRouterV2" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
|
|
||||||
...
|
|
||||||
<extensions>
|
|
||||||
<show_arrows>true</show_arrows>
|
|
||||||
<color>#4e4eff</color>
|
|
||||||
<split_type>distance</split_type>
|
|
||||||
<split_interval>2000.0</split_interval>
|
|
||||||
<width>bold</width>
|
|
||||||
</extensions>
|
|
||||||
</gpx>
|
|
||||||
```
|
|
||||||
## Details of a track point (trkpt)
|
|
||||||
Written to a gpx file while recording a track.
|
|
||||||
* **speed** (meters per second)
|
|
||||||
* **heading** (0-359 degrees)
|
|
||||||
|
|
||||||
#### Example:
|
|
||||||
```xml
|
|
||||||
<trkpt lat="52.397799" lon="4.575998">
|
|
||||||
<ele>203</ele>
|
|
||||||
<time>2019-05-08T10:36:43Z</time>
|
|
||||||
<hdop>3</hdop>
|
|
||||||
<extensions>
|
|
||||||
<heading>273</heading>
|
|
||||||
<speed>5.02</speed>
|
|
||||||
</extensions>
|
|
||||||
</trkpt>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Calculated route(s)
|
|
||||||
This data contains all details of a route built with **OsmAnd** (route segments, turns, road names, road types, restrictions, etc.). The route can be completely restored as if just built, even in the absence of the respective offline maps.
|
|
||||||
|
|
||||||
A gpx file may contain several routes. Each of them is contained in a specific segment under **trkseg** / **extensions**. A gpx file is saved in this form when exporting a constructed route or when saving a track that consists of several separate segments via the **Plan a route** functionality.
|
|
||||||
**Plan a route** also adds one (or several, in accordance with the number of contained separate segments / tracks) **rte** blocks to the gpx file, containing route key points (**rtept**).
|
|
||||||
#### Gpx structure:
|
|
||||||
```xml
|
|
||||||
<trk>
|
|
||||||
<trkseg>
|
|
||||||
<!-- List of segment points. The order of the points corresponds to the order and length of the route segments (<route><segment length="x" ... />). -->
|
|
||||||
<!-- The value of the "length" attribute corresponds to the number of points in this segment of the route. -->
|
|
||||||
<trkpt ... ></trkpt>
|
|
||||||
<extensions>
|
|
||||||
<!-- List of route segments -->
|
|
||||||
<route>
|
|
||||||
<segment ... />
|
|
||||||
</route>
|
|
||||||
<!-- Properties of segments included in the route. -->
|
|
||||||
<!-- This data is taken from offline maps during the initial construction of a route. -->
|
|
||||||
<types>
|
|
||||||
<type ... />
|
|
||||||
</types>
|
|
||||||
</extensions>
|
|
||||||
</trkseg>
|
|
||||||
</trk>
|
|
||||||
|
|
||||||
<!-- List of intermediate route points. If there are multiple routes, the order of the rte list matches the order of the route segments. -->
|
|
||||||
<rte>
|
|
||||||
<rtept ... />
|
|
||||||
<!-- For routes built with the "Plan route", the parameters of key points are saved. -->
|
|
||||||
<extensions>
|
|
||||||
<!-- Route profile type for next segment (car, bicycle, pedestrian, etc.). -->
|
|
||||||
<profile>...</profile>
|
|
||||||
<!-- The index of the point in the gpx segment that corresponds to the first point of the calculated route for this segment. -->
|
|
||||||
<trkpt_idx>...</trkpt_idx>
|
|
||||||
</extensions>
|
|
||||||
</rtept>
|
|
||||||
</rte>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Example:
|
|
||||||
```xml
|
|
||||||
<gpx version="1.1" creator="OsmAndRouterV2" xmlns="http://www.topografix.com/GPX/1/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
|
|
||||||
<metadata>
|
|
||||||
<name>Fri 06 Nov 2020</name>
|
|
||||||
</metadata>
|
|
||||||
<trk>
|
|
||||||
<name>Fri 06 Nov 2020</name>
|
|
||||||
<trkseg>
|
|
||||||
<trkpt lat="52.3639849" lon="4.8900533">
|
|
||||||
<ele>0.801</ele>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="52.3636917" lon="4.8922849">
|
|
||||||
<ele>0.998</ele>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="52.3636885" lon="4.892309">
|
|
||||||
<ele>1</ele>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="52.3636426" lon="4.8922902">
|
|
||||||
<ele>0.963</ele>
|
|
||||||
</trkpt>
|
|
||||||
<trkpt lat="52.363564" lon="4.8922607">
|
|
||||||
<ele>0.899</ele>
|
|
||||||
</trkpt>
|
|
||||||
|
|
||||||
....
|
|
||||||
|
|
||||||
<extensions>
|
|
||||||
<route>
|
|
||||||
<segment id="7372058" length="3" segmentTime="178.44" speed="1.11" turnType="C" types="0,1,2,3,4,5,6" names="57" />
|
|
||||||
<segment id="334164679" length="5" segmentTime="86.11" speed="1.11" turnType="TR" turnAngle="91.88" types="7,8,0,9,10,11,12,13,6" pointTypes=";;14,15;16,17,18;" names="58" />
|
|
||||||
<segment id="334603581" length="6" segmentTime="75.5" speed="1.11" types="19,20,21,7,8,0,22,9,10,11,12,13,23,6" pointTypes=";14;16,24;16,24;14;" names="58" />
|
|
||||||
<segment id="446707354" length="3" segmentTime="8.32" speed="1.11" turnType="TSLL" turnAngle="-25.44" types="19,25,21,7,8,22,9,1,11,12,13,6" names="58" />
|
|
||||||
...
|
|
||||||
</route>
|
|
||||||
<types>
|
|
||||||
<type t="lit" v="yes" />
|
|
||||||
<type t="oneway" v="yes" />
|
|
||||||
<type t="highway" v="unclassified" />
|
|
||||||
<type t="surface" v="paving_stones" />
|
|
||||||
<type t="maxspeed" v="30" />
|
|
||||||
...
|
|
||||||
</types>
|
|
||||||
</extensions>
|
|
||||||
</trkseg>
|
|
||||||
</trk>
|
|
||||||
|
|
||||||
<rte>
|
|
||||||
<rtept lat="52.3639945" lon="4.8900532">
|
|
||||||
<extensions>
|
|
||||||
<profile>pedestrian</profile>
|
|
||||||
<trkpt_idx>0</trkpt_idx>
|
|
||||||
</extensions>
|
|
||||||
</rtept>
|
|
||||||
<rtept lat="52.3612797" lon="4.8911677">
|
|
||||||
<extensions>
|
|
||||||
<profile>pedestrian</profile>
|
|
||||||
<trkpt_idx>24</trkpt_idx>
|
|
||||||
</extensions>
|
|
||||||
</rtept>
|
|
||||||
<rtept lat="52.356996" lon="4.8912071">
|
|
||||||
<extensions>
|
|
||||||
<profile>pedestrian</profile>
|
|
||||||
<trkpt_idx>89</trkpt_idx>
|
|
||||||
</extensions>
|
|
||||||
</rtept>
|
|
||||||
<rtept lat="52.3542374" lon="4.8947024">
|
|
||||||
<extensions>
|
|
||||||
<profile>pedestrian</profile>
|
|
||||||
<trkpt_idx>121</trkpt_idx>
|
|
||||||
</extensions>
|
|
||||||
</rtept>
|
|
||||||
</rte>
|
|
||||||
</gpx>
|
|
||||||
```
|
|
|
@ -8,6 +8,7 @@ import net.osmand.aidlapi.AidlParams;
|
||||||
import net.osmand.aidlapi.profile.AExportSettingsType;
|
import net.osmand.aidlapi.profile.AExportSettingsType;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static net.osmand.aidlapi.profile.ExportProfileParams.SETTINGS_TYPE_KEY;
|
import static net.osmand.aidlapi.profile.ExportProfileParams.SETTINGS_TYPE_KEY;
|
||||||
|
|
||||||
|
@ -15,16 +16,18 @@ public class ProfileSettingsParams extends AidlParams {
|
||||||
|
|
||||||
public static final String VERSION_KEY = "version";
|
public static final String VERSION_KEY = "version";
|
||||||
public static final String REPLACE_KEY = "replace";
|
public static final String REPLACE_KEY = "replace";
|
||||||
|
public static final String SILENT_IMPORT_KEY = "silentImport";
|
||||||
public static final String LATEST_CHANGES_KEY = "latestChanges";
|
public static final String LATEST_CHANGES_KEY = "latestChanges";
|
||||||
public static final String PROFILE_SETTINGS_URI_KEY = "profileSettingsUri";
|
public static final String PROFILE_SETTINGS_URI_KEY = "profileSettingsUri";
|
||||||
private Uri profileSettingsUri;
|
private Uri profileSettingsUri;
|
||||||
private String latestChanges;
|
private String latestChanges;
|
||||||
private int version;
|
private int version;
|
||||||
private ArrayList<String> settingsTypeKeyList = new ArrayList<>();
|
private List<String> settingsTypeKeyList = new ArrayList<>();
|
||||||
boolean replace;
|
private boolean silent;
|
||||||
|
private boolean replace;
|
||||||
|
|
||||||
public ProfileSettingsParams(Uri profileSettingsUri, ArrayList<AExportSettingsType> settingsTypeList, boolean replace,
|
public ProfileSettingsParams(Uri profileSettingsUri, List<AExportSettingsType> settingsTypeList, boolean replace,
|
||||||
String latestChanges, int version) {
|
boolean silent, String latestChanges, int version) {
|
||||||
this.profileSettingsUri = profileSettingsUri;
|
this.profileSettingsUri = profileSettingsUri;
|
||||||
for (AExportSettingsType settingsType : settingsTypeList) {
|
for (AExportSettingsType settingsType : settingsTypeList) {
|
||||||
settingsTypeKeyList.add(settingsType.name());
|
settingsTypeKeyList.add(settingsType.name());
|
||||||
|
@ -32,6 +35,7 @@ public class ProfileSettingsParams extends AidlParams {
|
||||||
this.replace = replace;
|
this.replace = replace;
|
||||||
this.latestChanges = latestChanges;
|
this.latestChanges = latestChanges;
|
||||||
this.version = version;
|
this.version = version;
|
||||||
|
this.silent = silent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileSettingsParams(Parcel in) {
|
public ProfileSettingsParams(Parcel in) {
|
||||||
|
@ -62,7 +66,7 @@ public class ProfileSettingsParams extends AidlParams {
|
||||||
return profileSettingsUri;
|
return profileSettingsUri;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<String> getSettingsTypeKeys() {
|
public List<String> getSettingsTypeKeys() {
|
||||||
return settingsTypeKeyList;
|
return settingsTypeKeyList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,13 +74,18 @@ public class ProfileSettingsParams extends AidlParams {
|
||||||
return replace;
|
return replace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isSilent() {
|
||||||
|
return silent;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToBundle(Bundle bundle) {
|
public void writeToBundle(Bundle bundle) {
|
||||||
bundle.putInt(VERSION_KEY, version);
|
bundle.putInt(VERSION_KEY, version);
|
||||||
bundle.putString(LATEST_CHANGES_KEY, latestChanges);
|
bundle.putString(LATEST_CHANGES_KEY, latestChanges);
|
||||||
bundle.putParcelable(PROFILE_SETTINGS_URI_KEY, profileSettingsUri);
|
bundle.putParcelable(PROFILE_SETTINGS_URI_KEY, profileSettingsUri);
|
||||||
bundle.putStringArrayList(SETTINGS_TYPE_KEY, settingsTypeKeyList);
|
bundle.putStringArrayList(SETTINGS_TYPE_KEY, new ArrayList<>(settingsTypeKeyList));
|
||||||
bundle.putBoolean(REPLACE_KEY, replace);
|
bundle.putBoolean(REPLACE_KEY, replace);
|
||||||
|
bundle.putBoolean(SILENT_IMPORT_KEY, silent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -86,5 +95,6 @@ public class ProfileSettingsParams extends AidlParams {
|
||||||
profileSettingsUri = bundle.getParcelable(PROFILE_SETTINGS_URI_KEY);
|
profileSettingsUri = bundle.getParcelable(PROFILE_SETTINGS_URI_KEY);
|
||||||
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
|
settingsTypeKeyList = bundle.getStringArrayList(SETTINGS_TYPE_KEY);
|
||||||
replace = bundle.getBoolean(REPLACE_KEY);
|
replace = bundle.getBoolean(REPLACE_KEY);
|
||||||
|
silent = bundle.getBoolean(SILENT_IMPORT_KEY);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -449,6 +449,10 @@ public class GPXUtilities {
|
||||||
public String getArticleLang() {
|
public String getArticleLang() {
|
||||||
return getExtensionsToRead().get("article_lang");
|
return getExtensionsToRead().get("article_lang");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return getExtensionsToRead().get("desc");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Author extends GPXExtensions {
|
public static class Author extends GPXExtensions {
|
||||||
|
|
|
@ -274,6 +274,10 @@ public class Amenity extends MapObject {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getTagContent(String tag) {
|
||||||
|
return getTagContent(tag, null);
|
||||||
|
}
|
||||||
|
|
||||||
public String getTagContent(String tag, String lang) {
|
public String getTagContent(String tag, String lang) {
|
||||||
if (lang != null) {
|
if (lang != null) {
|
||||||
String translateName = getAdditionalInfo(tag + ":" + lang);
|
String translateName = getAdditionalInfo(tag + ":" + lang);
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class NetworkUtils {
|
||||||
if(userNamePassword != null) {
|
if(userNamePassword != null) {
|
||||||
conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$
|
conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$
|
conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
log.info("Response code and message : " + conn.getResponseCode() + " " + conn.getResponseMessage());
|
log.info("Response code and message : " + conn.getResponseCode() + " " + conn.getResponseMessage());
|
||||||
if(conn.getResponseCode() != 200){
|
if(conn.getResponseCode() != 200){
|
||||||
return conn.getResponseMessage();
|
return conn.getResponseMessage();
|
||||||
|
@ -57,7 +57,7 @@ public class NetworkUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String sendPostDataRequest(String urlText, InputStream data) {
|
public static String sendPostDataRequest(String urlText, String formName, String fileName, InputStream data) {
|
||||||
try {
|
try {
|
||||||
log.info("POST : " + urlText);
|
log.info("POST : " + urlText);
|
||||||
HttpURLConnection conn = getHttpURLConnection(urlText);
|
HttpURLConnection conn = getHttpURLConnection(urlText);
|
||||||
|
@ -69,7 +69,7 @@ public class NetworkUtils {
|
||||||
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
|
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
|
||||||
OutputStream ous = conn.getOutputStream();
|
OutputStream ous = conn.getOutputStream();
|
||||||
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
||||||
ous.write(("content-disposition: form-data; name=\"" + "file" + "\"; filename=\"" + "image1" + "\"\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
ous.write(("Content-Disposition: form-data; name=\"" + formName + "\"; filename=\"" + fileName + "\"\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
ous.write(("Content-Type: application/octet-stream\r\n\r\n").getBytes()); //$NON-NLS-1$
|
ous.write(("Content-Type: application/octet-stream\r\n\r\n").getBytes()); //$NON-NLS-1$
|
||||||
Algorithms.streamCopy(data, ous);
|
Algorithms.streamCopy(data, ous);
|
||||||
ous.write(("\r\n--" + BOUNDARY + "--\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
ous.write(("\r\n--" + BOUNDARY + "--\r\n").getBytes()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
@ -146,9 +146,9 @@ public class NetworkUtils {
|
||||||
conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$
|
conn.setRequestProperty("Authorization", "Basic " + Base64.encode(userNamePassword)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); //$NON-NLS-1$ //$NON-NLS-2$
|
conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$
|
conn.setRequestProperty("User-Agent", "OsmAnd"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
OutputStream ous = conn.getOutputStream();
|
OutputStream ous = conn.getOutputStream();
|
||||||
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
ous.write(("--" + BOUNDARY + "\r\n").getBytes());
|
||||||
String filename = fileToUpload.getName();
|
String filename = fileToUpload.getName();
|
||||||
if (gzip) {
|
if (gzip) {
|
||||||
|
|
|
@ -1222,7 +1222,7 @@ public class RouteResultPreparation {
|
||||||
// 3. calculate angle difference
|
// 3. calculate angle difference
|
||||||
// This method doesn't work if you go from S to N touching only 1 point of roundabout,
|
// This method doesn't work if you go from S to N touching only 1 point of roundabout,
|
||||||
// but it is very important to identify very sharp or very large angle to understand did you pass whole roundabout or small entrance
|
// but it is very important to identify very sharp or very large angle to understand did you pass whole roundabout or small entrance
|
||||||
float turnAngleBasedOnCircle = (float) MapUtils.degreesDiff(firstRoundabout.getBearingBegin(), lastRoundabout.getBearingEnd() + 180);
|
float turnAngleBasedOnCircle = (float) -MapUtils.degreesDiff(firstRoundabout.getBearingBegin(), lastRoundabout.getBearingEnd() + 180);
|
||||||
if (Math.abs(turnAngleBasedOnOutRoads) > 120) {
|
if (Math.abs(turnAngleBasedOnOutRoads) > 120) {
|
||||||
// correctly identify if angle is +- 180, so we approach from left or right side
|
// correctly identify if angle is +- 180, so we approach from left or right side
|
||||||
t.setTurnAngle(turnAngleBasedOnCircle) ;
|
t.setTurnAngle(turnAngleBasedOnCircle) ;
|
||||||
|
|
|
@ -93,9 +93,9 @@
|
||||||
<string name="shared_string_share">Поділитися</string>
|
<string name="shared_string_share">Поділитися</string>
|
||||||
<string name="shared_string_back">Назад</string>
|
<string name="shared_string_back">Назад</string>
|
||||||
<string name="set_time">Оберіть час</string>
|
<string name="set_time">Оберіть час</string>
|
||||||
<string name="location_sharing_description">Оберіть контакти та групи, з якими ви бажаєте поділитися своїм місцезнаходженням.</string>
|
<string name="location_sharing_description">Виберіть контакти та групи, з якими ви бажаєте поділитися своїм місцеперебуванням.</string>
|
||||||
<string name="my_location_search_hint">Пошук: Група або контакт</string>
|
<string name="my_location_search_hint">Пошук: Група або контакт</string>
|
||||||
<string name="start_location_sharing">Поділитися місцезнаходженням</string>
|
<string name="start_location_sharing">Поділитися розташуванням</string>
|
||||||
<string name="show_on_map">Показати на карті</string>
|
<string name="show_on_map">Показати на карті</string>
|
||||||
<string name="app_name">OsmAnd онлайн GPS Tracker</string>
|
<string name="app_name">OsmAnd онлайн GPS Tracker</string>
|
||||||
<string name="phone_number_title">Номер телефону</string>
|
<string name="phone_number_title">Номер телефону</string>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<string name="initialization">Запуск</string>
|
<string name="initialization">Запуск</string>
|
||||||
<string name="logging_out">Вихід із системи</string>
|
<string name="logging_out">Вихід із системи</string>
|
||||||
<string name="closing">Закриття</string>
|
<string name="closing">Закриття</string>
|
||||||
<string name="gps_network_not_enabled">Служба визначення місцезнаходження вимкнена. Увімкнути\?</string>
|
<string name="gps_network_not_enabled">Служба визначення розташування вимкнена. Увімкнути\?</string>
|
||||||
<string name="not_logged_in">Ви не увійшли до системи</string>
|
<string name="not_logged_in">Ви не увійшли до системи</string>
|
||||||
<string name="shared_string_continue">Продовжити</string>
|
<string name="shared_string_continue">Продовжити</string>
|
||||||
<string name="shared_string_cancel">Скасувати</string>
|
<string name="shared_string_cancel">Скасувати</string>
|
||||||
|
@ -225,8 +225,8 @@
|
||||||
<string name="start_end_date">Дата початку - кінця</string>
|
<string name="start_end_date">Дата початку - кінця</string>
|
||||||
<string name="gpx_settings">Налаштування GPX</string>
|
<string name="gpx_settings">Налаштування GPX</string>
|
||||||
<string name="timeline_no_data_descr">Ми не збирали дані за вибраний день</string>
|
<string name="timeline_no_data_descr">Ми не збирали дані за вибраний день</string>
|
||||||
<string name="send_location_as">Надіслати місцезнаходження як</string>
|
<string name="send_location_as">Надіслати місцеперебування як</string>
|
||||||
<string name="send_location_as_descr">Виберіть, як виглядатимуть повідомлення з вашим місцезнаходженням.</string>
|
<string name="send_location_as_descr">Виберіть, як виглядатимуть повідомлення з вашим місцеперебуванням.</string>
|
||||||
<string name="time_on_the_move">Час руху</string>
|
<string name="time_on_the_move">Час руху</string>
|
||||||
<string name="show_gps_points_descr">Показати кількість зібраних та відправлених GPS-точок.</string>
|
<string name="show_gps_points_descr">Показати кількість зібраних та відправлених GPS-точок.</string>
|
||||||
<string name="set_time_timeline_descr">Виберіть час для відображення</string>
|
<string name="set_time_timeline_descr">Виберіть час для відображення</string>
|
||||||
|
@ -234,7 +234,7 @@
|
||||||
<string name="stale_location">Не рухається</string>
|
<string name="stale_location">Не рухається</string>
|
||||||
<string name="set_visible_time_for_all">Встановити денний час для всіх</string>
|
<string name="set_visible_time_for_all">Встановити денний час для всіх</string>
|
||||||
<string name="visible_time_for_all">Видимий час для всіх</string>
|
<string name="visible_time_for_all">Видимий час для всіх</string>
|
||||||
<string name="set_time_description">Встановіть час, коли вибрані контакти та групи будуть бачити ваше місцезнаходження в режимі реального часу.</string>
|
<string name="set_time_description">Встановіть час, коли вибрані контакти та групи бачитимуть ваше місцеперебування в режимі реального часу.</string>
|
||||||
<string name="location_service_no_gps_available">Виберіть одного з локальних постачальників, щоб поділитися своїм місцеположенням.</string>
|
<string name="location_service_no_gps_available">Виберіть одного з локальних постачальників, щоб поділитися своїм місцеположенням.</string>
|
||||||
<string name="search_contacts">Пошук контактів</string>
|
<string name="search_contacts">Пошук контактів</string>
|
||||||
<string name="search_contacts_descr">Пошук у всіх своїх групах та контактах.</string>
|
<string name="search_contacts_descr">Пошук у всіх своїх групах та контактах.</string>
|
||||||
|
|
|
@ -40,7 +40,8 @@
|
||||||
<string name="items_modified">items modified</string>
|
<string name="items_modified">items modified</string>
|
||||||
<string name="osmand_unlimited">OsmAnd Unlimited</string>
|
<string name="osmand_unlimited">OsmAnd Unlimited</string>
|
||||||
<string name="markers">Markers</string>
|
<string name="markers">Markers</string>
|
||||||
<string name="opr_base_url">https://test.openplacereviews.org/</string>
|
<string name="opr_base_url">https://openplacereviews.org/</string>
|
||||||
|
<string name="dev_opr_base_url">https://test.openplacereviews.org/</string>
|
||||||
<string name="osm_oauth_developer_key">v8G8r9NLJZGMV4he5lwbQlz620FNVARKjI9Bm5UJ</string>
|
<string name="osm_oauth_developer_key">v8G8r9NLJZGMV4he5lwbQlz620FNVARKjI9Bm5UJ</string>
|
||||||
<string name="osm_oauth_developer_secret">jDvM95Ne1Bq2BDTmIfB6b3ZMxvdK87WGfp6DC07J</string>
|
<string name="osm_oauth_developer_secret">jDvM95Ne1Bq2BDTmIfB6b3ZMxvdK87WGfp6DC07J</string>
|
||||||
<string name="osm_oauth_consumer_key">Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y</string>
|
<string name="osm_oauth_consumer_key">Ti2qq3fo4i4Wmuox3SiWRIGq3obZisBHnxmcM05y</string>
|
||||||
|
|
7
OsmAnd/res/drawable/btn_border_active.xml
Normal file
7
OsmAnd/res/drawable/btn_border_active.xml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
|
||||||
|
<corners android:radius="4dp" />
|
||||||
|
<solid android:color="?attr/switch_button_active" />
|
||||||
|
</shape>
|
17
OsmAnd/res/drawable/ic_action_user_account_16.xml
Normal file
17
OsmAnd/res/drawable/ic_action_user_account_16.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="16dp"
|
||||||
|
android:height="16dp"
|
||||||
|
android:viewportWidth="16"
|
||||||
|
android:viewportHeight="16">
|
||||||
|
<path
|
||||||
|
android:pathData="M15,8C15,11.866 11.866,15 8,15C4.134,15 1,11.866 1,8C1,4.134 4.134,1 8,1C11.866,1 15,4.134 15,8Z"
|
||||||
|
android:strokeAlpha="0.2"
|
||||||
|
android:fillColor="#727272"
|
||||||
|
android:fillAlpha="0.2"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M4.2594,11.3179C4.5408,10.7297 5.0357,10.2524 5.6667,10C7.1567,9.3614 8.8433,9.3614 10.3334,10C10.9644,10.2524 11.4592,10.7297 11.7406,11.3179C10.8247,12.3498 9.4883,13 8,13C6.5117,13 5.1753,12.3498 4.2594,11.3179Z"
|
||||||
|
android:fillColor="#727272"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M10,6C10,7.1046 9.1046,8 8,8C6.8955,8 6,7.1046 6,6C6,4.8954 6.8955,4 8,4C9.1046,4 10,4.8954 10,6Z"
|
||||||
|
android:fillColor="#727272"/>
|
||||||
|
</vector>
|
10
OsmAnd/res/layout/bottom_sheet_item_progress.xml
Normal file
10
OsmAnd/res/layout/bottom_sheet_item_progress.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/progress"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/context_menu_progress_min_height"
|
||||||
|
android:gravity="center"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small" />
|
48
OsmAnd/res/layout/bottom_sheet_with_progress_bar.xml
Normal file
48
OsmAnd/res/layout/bottom_sheet_with_progress_bar.xml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingTop="@dimen/measurement_tool_menu_title_padding_top"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="Some title" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progress_bar"
|
||||||
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/route_info_buttons_padding_left_right"
|
||||||
|
android:layout_marginBottom="@dimen/route_info_buttons_padding_left_right"
|
||||||
|
android:minHeight="0dp"
|
||||||
|
android:visibility="visible" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:lineSpacingMultiplier="@dimen/bottom_sheet_text_spacing_multiplier"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="Some description" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -1,80 +1,83 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:baselineAligned="false"
|
android:baselineAligned="false"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
|
android:minHeight="@dimen/bottom_sheet_selected_item_title_height">
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingLeft="@dimen/content_padding">
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/basic_item_body"
|
android:id="@+id/basic_item_body"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:background="?attr/selectableItemBackground">
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:paddingTop="@dimen/content_padding_small"
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
android:paddingBottom="@dimen/content_padding"
|
android:paddingBottom="@dimen/content_padding"
|
||||||
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
android:textAppearance="@style/TextAppearance.ListItemTitle"
|
||||||
tools:text="Some title" />
|
tools:text="Some title" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||||
android:id="@+id/switch_button"
|
android:id="@+id/switch_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
android:layout_marginStart="@dimen/bottom_sheet_content_margin"
|
||||||
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
android:layout_marginLeft="@dimen/bottom_sheet_content_margin"
|
||||||
android:layout_marginEnd="@dimen/bottom_sheet_content_margin"
|
android:clickable="false"
|
||||||
android:layout_marginRight="@dimen/bottom_sheet_content_margin"
|
android:focusable="false"
|
||||||
tools:checked="true" />
|
android:focusableInTouchMode="false"
|
||||||
|
tools:checked="true" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/additional_button"
|
android:id="@+id/additional_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="1dp"
|
android:layout_width="1dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_marginTop="@dimen/content_padding_half"
|
android:layout_marginTop="@dimen/content_padding_half"
|
||||||
android:layout_marginBottom="@dimen/content_padding_half"
|
android:layout_marginBottom="@dimen/content_padding_half"
|
||||||
android:background="?attr/divider_color_basic" />
|
android:background="?attr/divider_color_basic" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/icon_after_divider"
|
android:id="@+id/icon_after_divider"
|
||||||
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
||||||
android:layout_width="@dimen/favorites_icon_right_margin"
|
android:layout_width="@dimen/favorites_icon_right_margin"
|
||||||
android:layout_height="@dimen/favorites_icon_right_margin"
|
android:layout_height="@dimen/favorites_icon_right_margin"
|
||||||
android:layout_gravity="center"
|
android:layout_gravity="center"
|
||||||
android:layout_marginStart="@dimen/content_padding"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:layout_marginLeft="@dimen/content_padding"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
app:srcCompat="@drawable/ic_action_track_line_bold_color" />
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
app:srcCompat="@drawable/ic_action_track_line_bold_color" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
30
OsmAnd/res/layout/context_menu_controls.xml
Normal file
30
OsmAnd/res/layout/context_menu_controls.xml
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/map_controls_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
tools:visibility="invisible">
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/map_ruler"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="start|bottom"
|
||||||
|
android:layout_marginStart="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginLeft="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginEnd="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginRight="@dimen/fab_margin_right" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/map_hud_controls"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end|bottom"
|
||||||
|
android:layout_marginStart="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginLeft="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginEnd="@dimen/fab_margin_right"
|
||||||
|
android:layout_marginRight="@dimen/fab_margin_right" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
100
OsmAnd/res/layout/dialog_edit_gpx_description.xml
Normal file
100
OsmAnd/res/layout/dialog_edit_gpx_description.xml
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="?attr/card_and_list_background_basic"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/action_bar_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/btn_close"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginStart="@dimen/card_padding"
|
||||||
|
android:layout_marginLeft="@dimen/card_padding"
|
||||||
|
android:padding="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:paddingStart="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:paddingEnd="@dimen/context_menu_padding_margin_small">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="@dimen/favorites_icon_size_small"
|
||||||
|
android:layout_height="@dimen/favorites_icon_size_small"
|
||||||
|
android:tint="?attr/default_icon_color"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_close" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/card_content_padding_large"
|
||||||
|
android:layout_marginStart="@dimen/card_content_padding_large"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/context_menu_edit_descr"
|
||||||
|
android:textColor="?attr/searchbar_text"
|
||||||
|
android:textSize="@dimen/dialog_header_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:background="@drawable/btn_border_active">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/btn_save"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingBottom="@dimen/content_padding_half"
|
||||||
|
android:text="@string/shared_string_save"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/divider_color" />
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.EditTextEx
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginBottom="@dimen/content_padding_half"
|
||||||
|
android:background="?attr/card_and_list_background_basic"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="Amsterdam is the Netherlands' capital and financial, cultural and creative centre with more than 850,000 inhabitants. Amsterdam is known for the canals that criss-cross the city, its impressive architecture and more than 1,500 bridges. The city has a heritage dating back to the Dutch Golden Age in the 17th century as well as a diverse art scene and a bustling nightlife." />
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
113
OsmAnd/res/layout/dialog_read_gpx_description.xml
Normal file
113
OsmAnd/res/layout/dialog_read_gpx_description.xml
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:id="@+id/root"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="?attr/list_background_color">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/pstsTabBackground">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/action_bar_height"
|
||||||
|
app:titleTextColor="?attr/list_background_color" />
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ll"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="?attr/list_background_color">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/main_image"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
tools:visibility="visible"
|
||||||
|
tools:src="@drawable/img_help_announcement_time_day"/>
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.WebViewEx
|
||||||
|
android:id="@+id/content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_margin="@dimen/content_padding"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:background="@color/color_transparent" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/ctx_menu_info_divider"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:layout_marginBottom="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:background="@drawable/rounded_background_3dp">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/btn_edit"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:padding="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:paddingStart="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:paddingEnd="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:drawablePadding="@dimen/list_content_padding_large"
|
||||||
|
osmand:drawableLeftCompat="@drawable/ic_action_edit_dark"
|
||||||
|
osmand:drawableStartCompat="@drawable/ic_action_edit_dark"
|
||||||
|
osmand:drawableTint="?attr/active_color_basic"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:text="@string/shared_string_edit"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/bottom_empty_space"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/card_row_min_height"
|
||||||
|
android:foreground="@drawable/bg_contextmenu_shadow"
|
||||||
|
android:foregroundGravity="top|fill_horizontal"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/activity_background_basic" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -99,34 +99,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<include layout="@layout/context_menu_controls" />
|
||||||
android:id="@+id/map_controls_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="bottom"
|
|
||||||
tools:visibility="invisible">
|
|
||||||
|
|
||||||
<include
|
|
||||||
layout="@layout/map_ruler"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="start|bottom"
|
|
||||||
android:layout_marginStart="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginLeft="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginEnd="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginRight="@dimen/fab_margin_right" />
|
|
||||||
|
|
||||||
<include
|
|
||||||
layout="@layout/map_hud_controls"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="end|bottom"
|
|
||||||
android:layout_marginStart="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginLeft="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginEnd="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginRight="@dimen/fab_margin_right" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/control_buttons"
|
android:id="@+id/control_buttons"
|
||||||
|
|
|
@ -145,6 +145,14 @@
|
||||||
tools:drawableStart="@drawable/ic_action_markers_dark"
|
tools:drawableStart="@drawable/ic_action_markers_dark"
|
||||||
android:paddingEnd="@dimen/bottom_sheet_content_padding_small" />
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/gpx_progress"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:padding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/save_button"
|
android:id="@+id/save_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
172
OsmAnd/res/layout/gpx_description_preview_card.xml
Normal file
172
OsmAnd/res/layout/gpx_description_preview_card.xml
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="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:orientation="vertical"
|
||||||
|
android:background="?attr/list_background_color">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/activity_background_basic">
|
||||||
|
|
||||||
|
<include layout="@layout/list_item_divider" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:text="@string/shared_string_description"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/main_image"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_small"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:adjustViewBounds="true"
|
||||||
|
tools:visibility="visible"
|
||||||
|
tools:src="@drawable/img_help_announcement_time_day"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@id/description_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/description"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginTop="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:textColor="?android:textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
android:lineSpacingMultiplier="1.1"
|
||||||
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
|
tools:text="Amsterdam is the Netherlands' capital and financial, cultural and creative centre with more than 850,000 inhabitants. Amsterdam is known for the canals that criss-cross the city, its impressive architecture and more than 1,500 bridges. The city has a heritage dating back to the Dutch Golden Age in the 17th century as well as a diverse art scene and a bustling nightlife."/>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:layout_marginLeft="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:background="@drawable/rounded_background_3dp">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/btn_read_full"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="start"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:padding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingStart="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:drawablePadding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
osmand:drawableStartCompat="@drawable/ic_action_read_article"
|
||||||
|
osmand:drawableLeftCompat="@drawable/ic_action_read_article"
|
||||||
|
osmand:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
android:text="@string/context_menu_read_full"
|
||||||
|
android:textColor="?attr/wikivoyage_active_color"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginRight="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:layout_marginEnd="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:background="@drawable/rounded_background_3dp">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/btn_edit"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:padding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingStart="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:drawablePadding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
osmand:drawableRightCompat="@drawable/ic_action_edit_dark"
|
||||||
|
osmand:drawableEndCompat="@drawable/ic_action_edit_dark"
|
||||||
|
osmand:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
android:text="@string/shared_string_edit"
|
||||||
|
android:textColor="?attr/wikivoyage_active_color"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/btn_add"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/card_padding"
|
||||||
|
android:layout_marginLeft="@dimen/card_padding"
|
||||||
|
android:layout_marginTop="@dimen/content_padding"
|
||||||
|
android:background="@drawable/rounded_background_3dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:padding="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingStart="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:drawablePadding="@dimen/dialog_button_height"
|
||||||
|
osmand:drawableStartCompat="@drawable/ic_action_add"
|
||||||
|
osmand:drawableLeftCompat="@drawable/ic_action_add"
|
||||||
|
osmand:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
android:text="@string/add_description"
|
||||||
|
android:textColor="?attr/wikivoyage_active_color"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/context_menu_padding_margin_small"
|
||||||
|
android:background="?attr/activity_background_basic">
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/shadow"
|
||||||
|
layout="@layout/card_bottom_divider" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -1,368 +1,321 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:background="?attr/bg_color"
|
||||||
android:background="?attr/bg_color">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<com.github.mikephil.charting.charts.LineChart
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/chart"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical">
|
android:layout_height="@dimen/list_item_description_width"
|
||||||
|
android:layout_gravity="center_vertical" />
|
||||||
|
|
||||||
<com.github.mikephil.charting.charts.LineChart
|
<LinearLayout
|
||||||
android:id="@+id/chart"
|
android:id="@+id/gpx_join_gaps_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="150dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"/>
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/card_row_min_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/gpx_join_gaps_container"
|
android:id="@+id/gpx_join_gaps_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:layout_weight="1"
|
||||||
android:minHeight="@dimen/card_row_min_height"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/join_segments"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/gpx_join_gaps_text"
|
android:id="@+id/gpx_join_gaps_switch"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:background="@null"
|
||||||
android:gravity="center_vertical"
|
android:clickable="false"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:focusable="false"
|
||||||
android:paddingRight="@dimen/content_padding"
|
android:focusableInTouchMode="false"
|
||||||
android:text="@string/join_segments"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:paddingEnd="@dimen/content_padding"
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
android:paddingRight="@dimen/content_padding" />
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
</LinearLayout>
|
||||||
android:id="@+id/gpx_join_gaps_switch"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@null"
|
|
||||||
android:clickable="false"
|
|
||||||
android:focusable="false"
|
|
||||||
android:focusableInTouchMode="false"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/average_range"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/average_range"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:orientation="horizontal"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:paddingTop="13dp"
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
android:paddingBottom="11dp">
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/average_icon"
|
android:id="@+id/average_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_altitude_average"/>
|
android:text="@string/average_altitude"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/average_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="40 m" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/average_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="40 m"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/average_desc"
|
android:id="@+id/average_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_altitude_average" />
|
||||||
android:text="@string/average_altitude"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/range_icon"
|
android:id="@+id/range_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_altitude_average"/>
|
android:text="@string/altitude_range"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/range_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="30m - 53m" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/range_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="30m - 53m"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/range_desc"
|
android:id="@+id/range_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_altitude_average" />
|
||||||
android:text="@string/altitude_range"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/list_divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<View
|
||||||
android:id="@+id/list_divider"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="1dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
android:orientation="horizontal">
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:background="?attr/dashboard_divider" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingRight="8dp"
|
|
||||||
android:paddingStart="16dp"
|
|
||||||
android:paddingEnd="8dp">
|
|
||||||
|
|
||||||
<View
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/ascent_descent"
|
||||||
android:layout_height="1dp"
|
android:layout_width="match_parent"
|
||||||
android:background="?attr/dashboard_divider"/>
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="8dp"
|
|
||||||
android:paddingRight="16dp"
|
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingEnd="16dp">
|
|
||||||
|
|
||||||
<View
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/ascent_desc"
|
||||||
android:layout_height="1dp"
|
android:layout_width="match_parent"
|
||||||
android:background="?attr/dashboard_divider"/>
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:text="@string/altitude_ascent"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/ascent_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="174" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/ascent_descent"
|
android:id="@+id/ascent_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:orientation="horizontal"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:paddingTop="13dp"
|
osmand:srcCompat="@drawable/ic_action_altitude_ascent" />
|
||||||
android:paddingBottom="11dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<LinearLayout
|
||||||
android:id="@+id/ascent_icon"
|
android:layout_width="0dp"
|
||||||
android:layout_width="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:layout_marginTop="5dp"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
osmand:srcCompat="@drawable/ic_action_altitude_ascent"/>
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_weight="1"
|
||||||
android:layout_marginLeft="18dp"
|
android:orientation="vertical">
|
||||||
android:layout_marginStart="18dp">
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<TextView
|
||||||
android:id="@+id/ascent_text"
|
android:id="@+id/descent_desc"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
tools:text="174"
|
android:text="@string/altitude_descent"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/ascent_desc"
|
android:id="@+id/descent_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
android:layout_marginTop="3dp"
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
android:text="@string/altitude_ascent"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
tools:text="164" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/descent_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_altitude_descent" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</LinearLayout>
|
||||||
android:id="@+id/descent_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_altitude_descent"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
<View
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="1dp"
|
||||||
android:orientation="vertical"
|
android:background="?attr/dashboard_divider" />
|
||||||
android:layout_marginLeft="18dp"
|
|
||||||
android:layout_marginStart="18dp">
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<LinearLayout
|
||||||
android:id="@+id/descent_text"
|
android:id="@+id/details_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="48dp"
|
||||||
android:background="@null"
|
android:gravity="center"
|
||||||
tools:text="164"
|
android:orientation="horizontal">
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/descent_desc"
|
android:id="@+id/analyze_on_map"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="@null"
|
android:layout_weight="1"
|
||||||
android:layout_marginTop="3dp"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:text="@string/altitude_descent"
|
android:gravity="start|center_vertical"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/analyze_on_map"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/overflow_menu"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="end|center_vertical"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/shared_string_options"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dashboard_divider"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/details_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:id="@+id/overflow_menu"
|
|
||||||
android:background="@null"
|
|
||||||
android:paddingRight="16dp"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:src="@drawable/ic_overflow_menu_dark"
|
|
||||||
android:paddingStart="16dp"
|
|
||||||
android:paddingEnd="16dp" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/split_interval"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingRight="16dp"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/gpx_split_interval"
|
|
||||||
android:paddingEnd="16dp"
|
|
||||||
android:paddingStart="16dp" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/analyze_on_map"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingRight="16dp"
|
|
||||||
android:gravity="end|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/analyze_on_map"
|
|
||||||
android:paddingEnd="16dp"
|
|
||||||
android:paddingStart="16dp" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -1,386 +1,339 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:background="?attr/bg_color"
|
||||||
android:background="?attr/bg_color">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<com.github.mikephil.charting.charts.LineChart
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/chart"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical">
|
android:layout_height="@dimen/list_item_description_width"
|
||||||
|
android:layout_gravity="center_vertical" />
|
||||||
|
|
||||||
<com.github.mikephil.charting.charts.LineChart
|
<LinearLayout
|
||||||
android:id="@+id/chart"
|
android:id="@+id/gpx_join_gaps_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="150dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"/>
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/card_row_min_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/gpx_join_gaps_container"
|
android:id="@+id/gpx_join_gaps_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:layout_weight="1"
|
||||||
android:minHeight="@dimen/card_row_min_height"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/join_segments"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/gpx_join_gaps_text"
|
android:id="@+id/gpx_join_gaps_switch"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:background="@null"
|
||||||
android:gravity="center_vertical"
|
android:clickable="false"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:focusable="false"
|
||||||
android:paddingRight="@dimen/content_padding"
|
android:focusableInTouchMode="false"
|
||||||
android:text="@string/join_segments"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:paddingEnd="@dimen/content_padding"
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
android:paddingRight="@dimen/content_padding" />
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
</LinearLayout>
|
||||||
android:id="@+id/gpx_join_gaps_switch"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@null"
|
|
||||||
android:clickable="false"
|
|
||||||
android:focusable="false"
|
|
||||||
android:focusableInTouchMode="false"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/distance_time_span"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||||
|
android:paddingBottom="@dimen/content_padding">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/distance_time_span"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:orientation="horizontal"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:paddingTop="13dp"
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
android:paddingBottom="11dp">
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/distance_icon"
|
android:id="@+id/distance_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_polygom_dark"/>
|
android:text="@string/distance"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/distance_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="40 km" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/distance_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="40 km"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/distance_desc"
|
android:id="@+id/distance_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_distance_16" />
|
||||||
android:text="@string/distance"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="16dp"
|
|
||||||
android:paddingStart="16dp">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/duration_icon"
|
android:id="@+id/duration_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_time_start"/>
|
android:text="@string/shared_string_time_span"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/duration_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="3:32:44" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/duration_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="3:32:44"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/duration_desc"
|
android:id="@+id/duration_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_time_span_16" />
|
||||||
android:text="@string/shared_string_time_span"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/list_divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<View
|
||||||
android:id="@+id/list_divider"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="1dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
android:orientation="horizontal">
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:background="?attr/dashboard_divider" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding_half"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding_half">
|
|
||||||
|
|
||||||
<View
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/start_end_time"
|
||||||
android:layout_height="1dp"
|
android:layout_width="match_parent"
|
||||||
android:background="?attr/dashboard_divider"/>
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="@dimen/context_menu_first_line_top_margin"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="@dimen/content_padding_half"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding_half">
|
|
||||||
|
|
||||||
<View
|
<TextView
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/start_time_desc"
|
||||||
android:layout_height="1dp"
|
android:layout_width="match_parent"
|
||||||
android:background="?attr/dashboard_divider"/>
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:text="@string/shared_string_start_time"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/start_time_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="15:04:58" />
|
||||||
|
|
||||||
</LinearLayout>
|
<TextView
|
||||||
|
android:id="@+id/start_date_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="Aug 8, 2016" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:id="@+id/start_end_time"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingTop="13dp"
|
|
||||||
android:paddingBottom="11dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="0dp"
|
android:id="@+id/start_time_icon"
|
||||||
android:layout_weight="1"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:orientation="horizontal"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
osmand:srcCompat="@drawable/ic_action_time_start_16" />
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</LinearLayout>
|
||||||
android:id="@+id/start_time_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_time_start"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:layout_marginLeft="18dp"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:layout_marginStart="18dp">
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<LinearLayout
|
||||||
android:id="@+id/start_time_text"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"
|
||||||
android:background="@null"
|
android:orientation="vertical">
|
||||||
tools:text="15:04:58"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/start_date_text"
|
android:id="@+id/end_time_desc"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
tools:text="Aug 8, 2016"
|
android:text="@string/shared_string_end_time"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<TextView
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/start_time_desc"
|
android:id="@+id/end_time_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
android:layout_marginTop="@dimen/content_padding_half"
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
android:text="@string/shared_string_start_time"
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
tools:text="20:58:00" />
|
||||||
|
|
||||||
</LinearLayout>
|
<TextView
|
||||||
|
android:id="@+id/end_date_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="Aug 8, 2016" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="0dp"
|
android:id="@+id/end_time_icon"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:orientation="horizontal"
|
android:layout_marginTop="@dimen/subHeaderPadding"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
osmand:srcCompat="@drawable/ic_action_time_end_16" />
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</LinearLayout>
|
||||||
android:id="@+id/end_time_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_time_start"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_marginLeft="18dp"
|
|
||||||
android:layout_marginStart="18dp">
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<View
|
||||||
android:id="@+id/end_time_text"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="1dp"
|
||||||
android:layout_height="wrap_content"
|
android:background="?attr/dashboard_divider" />
|
||||||
android:background="@null"
|
|
||||||
tools:text="20:58:00"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/end_date_text"
|
android:id="@+id/details_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="48dp"
|
||||||
android:background="@null"
|
android:gravity="center"
|
||||||
tools:text="Aug 8, 2016"
|
android:orientation="horizontal">
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/end_time_desc"
|
android:id="@+id/analyze_on_map"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="@null"
|
android:layout_weight="1"
|
||||||
android:layout_marginTop="@dimen/content_padding_half"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:text="@string/shared_string_end_time"
|
android:gravity="start|center_vertical"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/analyze_on_map"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/overflow_menu"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="end|center_vertical"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/shared_string_options"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dashboard_divider"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/details_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:id="@+id/overflow_menu"
|
|
||||||
android:background="@null"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:src="@drawable/ic_overflow_menu_dark"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/split_interval"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/gpx_split_interval"
|
|
||||||
android:paddingEnd="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/analyze_on_map"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:gravity="end|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/analyze_on_map"
|
|
||||||
android:paddingEnd="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -1,368 +1,323 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:orientation="vertical"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:background="?attr/bg_color"
|
||||||
android:background="?attr/bg_color">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<LinearLayout
|
<com.github.mikephil.charting.charts.LineChart
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/chart"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical">
|
android:layout_height="150dp"
|
||||||
|
android:layout_gravity="center_vertical" />
|
||||||
|
|
||||||
<com.github.mikephil.charting.charts.LineChart
|
<LinearLayout
|
||||||
android:id="@+id/chart"
|
android:id="@+id/gpx_join_gaps_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="150dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"/>
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:minHeight="@dimen/card_row_min_height"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/gpx_join_gaps_container"
|
android:id="@+id/gpx_join_gaps_text"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/selectableItemBackground"
|
android:layout_weight="1"
|
||||||
android:minHeight="@dimen/card_row_min_height"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/join_segments"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/gpx_join_gaps_text"
|
android:id="@+id/gpx_join_gaps_switch"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:background="@null"
|
||||||
android:gravity="center_vertical"
|
android:clickable="false"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:focusable="false"
|
||||||
android:paddingRight="@dimen/content_padding"
|
android:focusableInTouchMode="false"
|
||||||
android:text="@string/join_segments"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:paddingEnd="@dimen/content_padding"
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
android:paddingRight="@dimen/content_padding" />
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
</LinearLayout>
|
||||||
android:id="@+id/gpx_join_gaps_switch"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:background="@null"
|
|
||||||
android:clickable="false"
|
|
||||||
android:focusable="false"
|
|
||||||
android:focusableInTouchMode="false"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/average_max"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="13dp"
|
||||||
|
android:paddingBottom="11dp">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/average_max"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:orientation="horizontal"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:paddingTop="13dp"
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
android:paddingBottom="11dp">
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/average_icon"
|
android:id="@+id/average_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_speed"/>
|
android:text="@string/average_speed"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/average_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="6.8 km/h" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/average_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="6.8 km/h"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/average_desc"
|
android:id="@+id/average_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="2dp"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_speed" />
|
||||||
android:text="@string/average_speed"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="horizontal"
|
android:orientation="vertical">
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<TextView
|
||||||
android:id="@+id/max_icon"
|
android:id="@+id/max_desc"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="5dp"
|
android:background="@null"
|
||||||
osmand:srcCompat="@drawable/ic_action_max_speed"/>
|
android:text="@string/max_speed"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
<LinearLayout
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/max_text"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:orientation="vertical"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="18dp"
|
android:background="@null"
|
||||||
android:layout_marginStart="18dp">
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="31.3 km/h" />
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
</LinearLayout>
|
||||||
android:id="@+id/max_text"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:background="@null"
|
|
||||||
tools:text="31.3 km/h"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/max_desc"
|
android:id="@+id/max_icon"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:background="@null"
|
android:layout_marginTop="2dp"
|
||||||
android:layout_marginTop="3dp"
|
osmand:srcCompat="@drawable/ic_action_max_speed_16" />
|
||||||
android:text="@string/max_speed"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/list_divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<LinearLayout
|
<View
|
||||||
android:id="@+id/list_divider"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="1dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_marginStart="@dimen/content_padding_small"
|
||||||
android:orientation="horizontal">
|
android:layout_marginLeft="@dimen/content_padding_small"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:background="?attr/dashboard_divider" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding_half"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding_half">
|
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dashboard_divider"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
<LinearLayout
|
||||||
|
android:id="@+id/time_distance"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="13dp"
|
||||||
|
android:paddingBottom="11dp">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:orientation="horizontal"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:paddingLeft="@dimen/content_padding_half"
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
android:paddingRight="@dimen/content_padding"
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
android:paddingEnd="@dimen/content_padding"
|
android:layout_weight="1"
|
||||||
android:paddingStart="@dimen/content_padding_half">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<View
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="0dp"
|
||||||
android:layout_height="1dp"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/dashboard_divider"/>
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
</LinearLayout>
|
<TextView
|
||||||
|
android:id="@+id/time_moving_desc"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:text="@string/shared_string_time_moving"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/time_moving_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="174" />
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:id="@+id/time_distance"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:paddingTop="13dp"
|
|
||||||
android:paddingBottom="11dp">
|
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="0dp"
|
android:id="@+id/time_moving_icon"
|
||||||
android:layout_weight="1"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:orientation="horizontal"
|
android:layout_marginTop="2dp"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
osmand:srcCompat="@drawable/ic_action_time_span" />
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</LinearLayout>
|
||||||
android:id="@+id/time_moving_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_time_span"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
android:layout_marginLeft="18dp"
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
android:layout_marginStart="18dp">
|
android:layout_marginEnd="@dimen/content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_small"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<LinearLayout
|
||||||
android:id="@+id/time_moving_text"
|
android:layout_width="0dp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_weight="1"
|
||||||
android:background="@null"
|
android:orientation="vertical">
|
||||||
tools:text="174"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/time_moving_desc"
|
android:id="@+id/distance_desc"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:layout_marginTop="3dp"
|
||||||
android:layout_marginTop="3dp"
|
android:background="@null"
|
||||||
android:text="@string/shared_string_time_moving"
|
android:text="@string/distance_moving"
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
android:textSize="@dimen/default_desc_text_size" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/distance_text"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="42 km" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="0dp"
|
android:id="@+id/distance_icon"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_height="@dimen/poi_icon_size"
|
||||||
android:orientation="horizontal"
|
android:layout_marginTop="5dp"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
osmand:srcCompat="@drawable/ic_action_polygom_dark" />
|
||||||
android:paddingStart="@dimen/content_padding">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
</LinearLayout>
|
||||||
android:id="@+id/distance_icon"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="5dp"
|
|
||||||
osmand:srcCompat="@drawable/ic_action_polygom_dark"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
</LinearLayout>
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_marginLeft="18dp"
|
|
||||||
android:layout_marginStart="18dp">
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<View
|
||||||
android:id="@+id/distance_text"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="1dp"
|
||||||
android:layout_height="wrap_content"
|
android:background="?attr/dashboard_divider" />
|
||||||
android:background="@null"
|
|
||||||
tools:text="42 km"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:textSize="@dimen/default_desc_text_size"/>
|
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/distance_desc"
|
android:id="@+id/details_view"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="48dp"
|
||||||
android:background="@null"
|
android:gravity="center"
|
||||||
android:layout_marginTop="3dp"
|
android:orientation="horizontal">
|
||||||
android:text="@string/distance_moving"
|
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/analyze_on_map"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="start|center_vertical"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/analyze_on_map"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/overflow_menu"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:gravity="end|center_vertical"
|
||||||
|
android:paddingStart="@dimen/content_padding"
|
||||||
|
android:paddingLeft="@dimen/content_padding"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding"
|
||||||
|
android:text="@string/shared_string_options"
|
||||||
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_regular" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dashboard_divider"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/details_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<ImageButton
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:id="@+id/overflow_menu"
|
|
||||||
android:background="@null"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
tools:src="@drawable/ic_overflow_menu_dark"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/split_interval"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:gravity="start|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/gpx_split_interval"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:background="?attr/selectableItemBackground"
|
|
||||||
android:id="@+id/analyze_on_map"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:paddingLeft="@dimen/content_padding"
|
|
||||||
android:paddingRight="@dimen/content_padding"
|
|
||||||
android:gravity="end|center_vertical"
|
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
|
||||||
android:textSize="@dimen/default_sub_text_size"
|
|
||||||
osmand:textAllCapsCompat="true"
|
|
||||||
osmand:typeface="@string/font_roboto_medium"
|
|
||||||
android:text="@string/analyze_on_map"
|
|
||||||
android:paddingStart="@dimen/content_padding"
|
|
||||||
android:paddingEnd="@dimen/content_padding" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
109
OsmAnd/res/layout/gpx_overview_fragment.xml
Normal file
109
OsmAnd/res/layout/gpx_overview_fragment.xml
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recycler_overview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/list_header_height"
|
||||||
|
android:layout_marginBottom="@dimen/content_padding_small_half"
|
||||||
|
android:clipToPadding="false"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
tools:itemCount="4"
|
||||||
|
tools:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||||
|
tools:listitem="@layout/item_gpx_stat_block" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:gravity="center"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingTop="@dimen/dash_margin"
|
||||||
|
android:paddingBottom="@dimen/dash_margin">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/direction"
|
||||||
|
android:layout_width="@dimen/context_menu_transport_icon_size"
|
||||||
|
android:layout_height="@dimen/context_menu_transport_icon_size"
|
||||||
|
osmand:srcCompat="@drawable/ic_direction_arrow" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/distance"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_small_half"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_small_half"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="?android:textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="300 km" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/setting_list_item_small_height"
|
||||||
|
android:layout_marginStart="@dimen/card_padding"
|
||||||
|
android:layout_marginLeft="@dimen/card_padding"
|
||||||
|
android:layout_marginTop="@dimen/content_padding_half"
|
||||||
|
android:layout_marginEnd="@dimen/card_padding"
|
||||||
|
android:layout_marginRight="@dimen/card_padding"
|
||||||
|
android:layout_marginBottom="@dimen/content_padding"
|
||||||
|
android:baselineAligned="false"
|
||||||
|
android:minHeight="@dimen/context_menu_controller_height"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="4">
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/show_button"
|
||||||
|
layout="@layout/item_gpx_action"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginLeft="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginEnd="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginRight="@dimen/list_item_button_padding"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/appearance_button"
|
||||||
|
layout="@layout/item_gpx_action"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginLeft="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginEnd="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginRight="@dimen/list_item_button_padding"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/edit_button"
|
||||||
|
layout="@layout/item_gpx_action"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginLeft="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginEnd="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginRight="@dimen/list_item_button_padding"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/directions_button"
|
||||||
|
layout="@layout/item_gpx_action"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginLeft="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginEnd="@dimen/list_item_button_padding"
|
||||||
|
android:layout_marginRight="@dimen/list_item_button_padding"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
23
OsmAnd/res/layout/item_gpx_action.xml
Normal file
23
OsmAnd/res/layout/item_gpx_action.xml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:minHeight="@dimen/context_menu_controller_height"
|
||||||
|
android:minWidth="@dimen/context_menu_top_right_button_min_width"
|
||||||
|
android:layout_width="@dimen/fab_recycler_view_padding_bottom"
|
||||||
|
android:layout_height="@dimen/setting_list_item_small_height">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/filled"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:alpha="0.1"
|
||||||
|
tools:srcCompat="@drawable/bg_topbar_shield_exit_ref" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="@dimen/standard_icon_size"
|
||||||
|
android:layout_height="@dimen/standard_icon_size"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
tools:srcCompat="@drawable/ic_action_hide" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
80
OsmAnd/res/layout/item_gpx_stat_block.xml
Normal file
80
OsmAnd/res/layout/item_gpx_stat_block.xml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="@dimen/list_header_height"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:maxWidth="@dimen/grid_menu_item_width"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="2">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/value"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:background="@null"
|
||||||
|
android:lines="1"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="700 km" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
android:layout_weight="1">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/image"
|
||||||
|
android:layout_width="@dimen/context_menu_transport_icon_size"
|
||||||
|
android:layout_height="@dimen/context_menu_transport_icon_size"
|
||||||
|
android:layout_gravity="center_vertical|end"
|
||||||
|
tools:src="@drawable/ic_action_track_16" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@null"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:lines="1"
|
||||||
|
android:maxWidth="@dimen/grid_menu_item_width"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
tools:text="@string/distance" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider"
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginTop="@dimen/map_small_button_margin"
|
||||||
|
android:layout_marginBottom="@dimen/map_small_button_margin"
|
||||||
|
tools:background="@color/divider_color_light" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -1,9 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/list_background_color"
|
android:background="?attr/list_background_color">
|
||||||
android:orientation="vertical">
|
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:id="@+id/appbar"
|
android:id="@+id/appbar"
|
||||||
|
@ -15,21 +14,41 @@
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
|
android:id="@+id/segments_scroll"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1">
|
android:layout_marginBottom="@dimen/dialog_button_ex_height">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/segments_container"
|
android:id="@+id/segments_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical" />
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/dialog_button_ex_height"
|
||||||
|
android:paddingBottom="@dimen/context_menu_buttons_bottom_height" />
|
||||||
|
|
||||||
</ScrollView>
|
</ScrollView>
|
||||||
|
|
||||||
<include
|
<LinearLayout
|
||||||
layout="@layout/bottom_buttons"
|
android:id="@+id/control_buttons"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/dialog_button_ex_height" />
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
</LinearLayout>
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/buttons_shadow"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="8dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:background="@drawable/shadow" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/bottom_buttons"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/dialog_button_ex_height"
|
||||||
|
android:layout_gravity="bottom" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
|
@ -164,36 +164,4 @@
|
||||||
tools:visibility="visible"
|
tools:visibility="visible"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/result_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="@dimen/setting_list_item_group_height"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:visibility="visible"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
|
||||||
android:id="@+id/result_icon"
|
|
||||||
android:layout_width="@dimen/standard_icon_size"
|
|
||||||
android:layout_height="@dimen/standard_icon_size"
|
|
||||||
android:layout_gravity="center_vertical"
|
|
||||||
android:layout_marginRight="@dimen/content_padding"
|
|
||||||
android:layout_marginLeft="@dimen/content_padding"
|
|
||||||
android:tint="?attr/default_icon_color"
|
|
||||||
tools:src="@drawable/ic_action_gdirections_dark" />
|
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
|
||||||
android:id="@+id/result_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="start|center_vertical"
|
|
||||||
android:letterSpacing="@dimen/description_letter_spacing"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textColor="?android:attr/textColorPrimary"
|
|
||||||
android:textSize="@dimen/default_list_text_size"
|
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
|
||||||
tools:text="OK" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:id="@+id/search_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="56dp"
|
android:layout_height="56dp"
|
||||||
android:focusableInTouchMode="true"
|
android:focusableInTouchMode="true"
|
||||||
|
|
|
@ -90,34 +90,7 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<include layout="@layout/context_menu_controls" />
|
||||||
android:id="@+id/map_controls_container"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="bottom"
|
|
||||||
tools:visibility="invisible">
|
|
||||||
|
|
||||||
<include
|
|
||||||
layout="@layout/map_ruler"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="start|bottom"
|
|
||||||
android:layout_marginStart="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginLeft="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginEnd="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginRight="@dimen/fab_margin_right" />
|
|
||||||
|
|
||||||
<include
|
|
||||||
layout="@layout/map_hud_controls"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="end|bottom"
|
|
||||||
android:layout_marginStart="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginLeft="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginEnd="@dimen/fab_margin_right"
|
|
||||||
android:layout_marginRight="@dimen/fab_margin_right" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/control_buttons"
|
android:id="@+id/control_buttons"
|
||||||
|
|
|
@ -43,12 +43,13 @@
|
||||||
android:paddingStart="@dimen/context_menu_padding_margin_default"
|
android:paddingStart="@dimen/context_menu_padding_margin_default"
|
||||||
android:paddingLeft="@dimen/context_menu_padding_margin_default"
|
android:paddingLeft="@dimen/context_menu_padding_margin_default"
|
||||||
android:paddingEnd="@dimen/context_menu_padding_margin_default"
|
android:paddingEnd="@dimen/context_menu_padding_margin_default"
|
||||||
android:paddingRight="@dimen/context_menu_padding_margin_default">
|
android:paddingRight="@dimen/context_menu_padding_margin_default"
|
||||||
|
android:paddingBottom="@dimen/context_menu_direction_margin">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/context_menu_first_line_top_margin"
|
android:layout_marginTop="@dimen/context_menu_second_line_top_margin"
|
||||||
android:layout_marginEnd="@dimen/context_menu_padding_margin_default"
|
android:layout_marginEnd="@dimen/context_menu_padding_margin_default"
|
||||||
android:layout_marginRight="@dimen/context_menu_padding_margin_default"
|
android:layout_marginRight="@dimen/context_menu_padding_margin_default"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
@ -71,6 +72,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_gravity="center_vertical"
|
||||||
|
android:visibility="gone"
|
||||||
tools:text="@string/amenity_type_finance" />
|
tools:text="@string/amenity_type_finance" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
@ -79,7 +81,7 @@
|
||||||
android:id="@+id/icon_view"
|
android:id="@+id/icon_view"
|
||||||
android:layout_width="@dimen/map_widget_icon"
|
android:layout_width="@dimen/map_widget_icon"
|
||||||
android:layout_height="@dimen/map_widget_icon"
|
android:layout_height="@dimen/map_widget_icon"
|
||||||
android:layout_marginTop="@dimen/context_menu_padding_margin_default"
|
android:layout_marginTop="@dimen/context_menu_second_line_top_margin"
|
||||||
android:tint="?attr/default_icon_color"
|
android:tint="?attr/default_icon_color"
|
||||||
osmand:srcCompat="@drawable/ic_action_polygom_dark" />
|
osmand:srcCompat="@drawable/ic_action_polygom_dark" />
|
||||||
|
|
||||||
|
@ -89,6 +91,13 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/header_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/list_background_color"
|
||||||
|
android:orientation="vertical" />
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:id="@+id/bottom_container"
|
android:id="@+id/bottom_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -116,6 +125,81 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:id="@+id/context_menu_toolbar_container"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:alpha="0">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.Toolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/actionModeBackground"
|
||||||
|
android:minHeight="@dimen/toolbar_height"
|
||||||
|
android:padding="0dp"
|
||||||
|
osmand:contentInsetEnd="0dp"
|
||||||
|
osmand:contentInsetLeft="0dp"
|
||||||
|
osmand:contentInsetRight="0dp"
|
||||||
|
osmand:contentInsetStart="0dp"
|
||||||
|
osmand:theme="@style/ThemeOverlay.AppCompat.ActionBar">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:minHeight="@dimen/toolbar_height">
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/close_button"
|
||||||
|
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
||||||
|
android:layout_width="@dimen/toolbar_height"
|
||||||
|
android:layout_height="@dimen/toolbar_height"
|
||||||
|
android:contentDescription="@string/access_shared_string_navigate_up"
|
||||||
|
osmand:srcCompat="@drawable/ic_arrow_back" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/toolbar_title"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textColor="?attr/app_bar_primary_item_color"
|
||||||
|
android:textSize="@dimen/dialog_header_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="@string/routing_settings_2" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/search_text_layout"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/search_button"
|
||||||
|
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
|
||||||
|
android:layout_width="@dimen/toolbar_height"
|
||||||
|
android:layout_height="@dimen/toolbar_height"
|
||||||
|
android:contentDescription="@string/access_shared_string_navigate_up"
|
||||||
|
android:visibility="gone"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_search_dark" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.appcompat.widget.Toolbar>
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<include layout="@layout/context_menu_controls" />
|
||||||
|
|
||||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
android:id="@+id/bottom_navigation"
|
android:id="@+id/bottom_navigation"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
21
OsmAnd/res/layout/track_points_card.xml
Normal file
21
OsmAnd/res/layout/track_points_card.xml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<ExpandableListView
|
||||||
|
android:id="@android:id/list"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginStart="0dp"
|
||||||
|
android:layout_marginLeft="0dp"
|
||||||
|
android:layout_marginTop="0dp"
|
||||||
|
android:layout_marginEnd="0dp"
|
||||||
|
android:layout_marginRight="0dp"
|
||||||
|
android:divider="@null"
|
||||||
|
android:dividerHeight="0dp"
|
||||||
|
android:drawSelectorOnTop="false"
|
||||||
|
android:groupIndicator="@android:color/transparent" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
|
@ -1,114 +1,115 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/title"
|
android:id="@+id/title"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
android:paddingStart="@dimen/content_padding"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:paddingTop="@dimen/content_padding_small"
|
android:paddingTop="@dimen/content_padding_small"
|
||||||
android:paddingEnd="@dimen/content_padding"
|
android:paddingEnd="@dimen/content_padding"
|
||||||
android:paddingRight="@dimen/content_padding"
|
android:paddingRight="@dimen/content_padding"
|
||||||
android:paddingBottom="@dimen/content_padding_small"
|
android:paddingBottom="@dimen/content_padding_small"
|
||||||
android:text="@string/monitoring_settings"
|
android:text="@string/monitoring_settings"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
osmand:typeface="@string/font_roboto_medium" />
|
osmand:typeface="@string/font_roboto_medium" />
|
||||||
|
|
||||||
<include
|
<include
|
||||||
android:id="@+id/show_track_on_map"
|
android:id="@+id/show_track_on_map"
|
||||||
layout="@layout/bottom_sheet_with_switch_divider_and_additional_button" />
|
layout="@layout/bottom_sheet_with_switch_divider_and_additional_button" />
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:background="?attr/dashboard_divider" />
|
android:background="?attr/dashboard_divider" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:id="@+id/interval_view_container"
|
||||||
android:layout_height="0dp"
|
android:background="?attr/selectableItemBackground"
|
||||||
android:layout_gravity="center_vertical"
|
android:layout_width="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_height="0dp"
|
||||||
android:orientation="horizontal"
|
android:layout_gravity="center_vertical"
|
||||||
android:paddingStart="@dimen/content_padding"
|
android:layout_weight="1"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:orientation="horizontal"
|
||||||
android:paddingTop="@dimen/bottom_sheet_content_margin"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:paddingEnd="@dimen/content_padding"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:paddingRight="@dimen/content_padding">
|
android:paddingTop="@dimen/bottom_sheet_content_margin"
|
||||||
|
android:paddingBottom="@dimen/bottom_sheet_content_margin"
|
||||||
|
android:paddingEnd="@dimen/content_padding"
|
||||||
|
android:paddingRight="@dimen/content_padding">
|
||||||
|
|
||||||
<net.osmand.plus.widgets.TextViewEx
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
android:id="@+id/interval_value"
|
android:id="@+id/interval_value"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
tools:text="Interval value" />
|
tools:text="Interval value" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/up_down_button"
|
android:id="@+id/up_down_button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="@null"
|
android:background="@null"
|
||||||
app:srcCompat="@drawable/ic_action_arrow_down" />
|
app:srcCompat="@drawable/ic_action_arrow_down" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/always_ask_and_range_slider_container"
|
android:id="@+id/always_ask_and_range_slider_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:paddingStart="@dimen/content_padding"
|
android:paddingStart="@dimen/content_padding"
|
||||||
android:paddingLeft="@dimen/content_padding"
|
android:paddingLeft="@dimen/content_padding"
|
||||||
android:paddingEnd="@dimen/content_padding"
|
android:paddingEnd="@dimen/content_padding"
|
||||||
android:paddingRight="@dimen/content_padding">
|
android:paddingRight="@dimen/content_padding">
|
||||||
|
|
||||||
<com.google.android.material.slider.RangeSlider
|
<com.google.android.material.slider.RangeSlider
|
||||||
android:id="@+id/interval_slider"
|
android:id="@+id/interval_slider"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/save_track_interval_globally"
|
android:contentDescription="@string/save_track_interval_globally"
|
||||||
android:stepSize="1"
|
android:stepSize="1"
|
||||||
app:haloRadius="@dimen/content_padding_small"
|
app:haloRadius="@dimen/content_padding_small"
|
||||||
app:labelBehavior="gone"
|
app:labelBehavior="gone"
|
||||||
app:thumbColor="@color/profile_icon_color_blue_light"
|
app:thumbColor="@color/profile_icon_color_blue_light"
|
||||||
app:thumbRadius="@dimen/content_padding_small_half"
|
app:thumbRadius="@dimen/content_padding_small_half"
|
||||||
app:trackColorActive="@color/profile_icon_color_blue_light"
|
app:trackColorActive="@color/profile_icon_color_blue_light"
|
||||||
app:trackColorInactive="#4D007EB3"
|
app:trackColorInactive="#4D007EB3"
|
||||||
app:tickColorInactive="#007EB3"
|
app:tickColorInactive="#007EB3"
|
||||||
app:trackHeight="@dimen/slider_track_height"
|
app:trackHeight="@dimen/slider_track_height"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/confirm_every_run"
|
android:id="@+id/confirm_every_run"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:letterSpacing="@dimen/text_button_letter_spacing"
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
android:minHeight="@dimen/context_menu_buttons_bottom_height"
|
android:minHeight="@dimen/context_menu_buttons_bottom_height"
|
||||||
android:paddingLeft="@dimen/content_padding_small"
|
android:paddingLeft="@dimen/content_padding_small"
|
||||||
android:paddingRight="@dimen/content_padding_small"
|
android:paddingRight="@dimen/content_padding_small"
|
||||||
android:text="@string/confirm_every_run"
|
android:text="@string/confirm_every_run"
|
||||||
android:textColor="?attr/color_dialog_buttons"
|
android:textColor="?attr/color_dialog_buttons"
|
||||||
android:textSize="@dimen/default_list_text_size"
|
android:textSize="@dimen/default_list_text_size"
|
||||||
osmand:typeface="@string/font_roboto_regular"
|
osmand:typeface="@string/font_roboto_regular"
|
||||||
tools:visibility="visible" />
|
tools:visibility="visible" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:id="@+id/second_divider"
|
android:id="@+id/second_divider"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
android:layout_marginTop="@dimen/content_padding"
|
android:background="?attr/dashboard_divider" />
|
||||||
android:layout_marginBottom="@dimen/bottom_sheet_content_margin_small"
|
|
||||||
android:background="?attr/dashboard_divider" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
282
OsmAnd/res/layout/wikivoyage_travel_gpx_card.xml
Normal file
282
OsmAnd/res/layout/wikivoyage_travel_gpx_card.xml
Normal file
|
@ -0,0 +1,282 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/background_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/wikivoyage_card_bg_color">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackground"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/content_padding">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding"
|
||||||
|
android:layout_marginRight="@dimen/content_padding"
|
||||||
|
android:layout_marginStart="@dimen/content_padding"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/default_title_line_height"
|
||||||
|
android:layout_marginBottom="@dimen/measurement_tool_menu_title_padding_bottom"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
android:textSize="@dimen/default_list_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:text="London" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/distance"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
|
android:textColor="@null"
|
||||||
|
tools:text="5.3 km" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/distance_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_distance_16"
|
||||||
|
android:contentDescription="@string/distance"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="16dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:background="?attr/wikivoyage_card_divider_color" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/diff_ele_down"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
|
android:textColor="@null"
|
||||||
|
tools:text="145 m" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/down_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_arrow_down_16"
|
||||||
|
android:tint="@color/icon_color_default_light"
|
||||||
|
android:contentDescription="@string/distance" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="1dp"
|
||||||
|
android:layout_height="16dp"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:background="?attr/wikivoyage_card_divider_color" />
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/diff_ele_up"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
|
android:textColor="@null"
|
||||||
|
tools:text="15 m" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/up_icon"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:layout_marginEnd="@dimen/content_padding_half"
|
||||||
|
android:layout_marginRight="@dimen/content_padding_half"
|
||||||
|
android:layout_marginStart="@dimen/content_padding_half"
|
||||||
|
android:layout_marginLeft="@dimen/content_padding_half"
|
||||||
|
osmand:srcCompat="@drawable/ic_action_arrow_up_16"
|
||||||
|
android:tint="@color/icon_color_default_light"
|
||||||
|
android:contentDescription="@string/distance" />
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/user_name"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@drawable/btn_border_bg_light"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingTop="@dimen/subHeaderPadding"
|
||||||
|
android:paddingBottom="@dimen/subHeaderPadding"
|
||||||
|
android:paddingLeft="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingRight="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:textAppearance="@style/TextAppearance.ContextMenuSubtitle"
|
||||||
|
android:textColor="?attr/active_color_basic"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
android:drawablePadding="@dimen/content_padding_small_half"
|
||||||
|
android:drawableStart="@drawable/ic_action_user_account_16"
|
||||||
|
android:drawableLeft="@drawable/ic_action_user_account_16"
|
||||||
|
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
tools:text="Lorem Ipsum" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:visibility="invisible"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/wikivoyage_card_divider_color" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:paddingTop="@dimen/content_padding_small_half"
|
||||||
|
android:paddingBottom="@dimen/content_padding_small_half">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:layout_marginStart="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:background="@drawable/rounded_background_3dp">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/left_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:drawablePadding="@dimen/content_padding_small"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingBottom="@dimen/content_padding_half"
|
||||||
|
android:paddingLeft="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingRight="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
|
android:textColor="?attr/wikivoyage_active_color"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:drawableLeft="@drawable/ic_action_read_article"
|
||||||
|
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
tools:ignore="UnusedAttribute"
|
||||||
|
tools:text="Read"
|
||||||
|
android:paddingStart="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
tools:drawableStart="@drawable/ic_action_read_article" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:layout_marginRight="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:background="@drawable/rounded_background_3dp">
|
||||||
|
|
||||||
|
<net.osmand.plus.widgets.TextViewEx
|
||||||
|
android:id="@+id/right_button"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:drawablePadding="@dimen/content_padding_small"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:letterSpacing="@dimen/text_button_letter_spacing"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:paddingBottom="@dimen/content_padding_half"
|
||||||
|
android:paddingLeft="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingRight="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingTop="@dimen/content_padding_half"
|
||||||
|
android:textColor="?attr/wikivoyage_active_color"
|
||||||
|
android:textSize="@dimen/default_desc_text_size"
|
||||||
|
osmand:typeface="@string/font_roboto_medium"
|
||||||
|
tools:drawableRight="@drawable/ic_action_read_later_fill"
|
||||||
|
tools:drawableTint="?attr/wikivoyage_active_color"
|
||||||
|
tools:ignore="UnusedAttribute"
|
||||||
|
tools:text="Delete"
|
||||||
|
tools:drawableEnd="@drawable/ic_action_read_later_fill"
|
||||||
|
android:paddingEnd="@dimen/bottom_sheet_content_padding_small"
|
||||||
|
android:paddingStart="@dimen/bottom_sheet_content_padding_small" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/divider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="?attr/wikivoyage_card_divider_color" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/shadow"
|
||||||
|
layout="@layout/card_bottom_divider"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
<include
|
||||||
|
android:id="@+id/list_item_divider"
|
||||||
|
layout="@layout/list_item_divider"
|
||||||
|
android:visibility="gone"
|
||||||
|
tools:visibility="visible" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
8
OsmAnd/res/menu/edit_description_menu.xml
Normal file
8
OsmAnd/res/menu/edit_description_menu.xml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:osmand="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item android:id="@+id/action_edit"
|
||||||
|
android:icon="@drawable/ic_action_edit_dark"
|
||||||
|
osmand:showAsAction="always"
|
||||||
|
android:title="@string/shared_string_edit"/>
|
||||||
|
</menu>
|
|
@ -1,14 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<!-- <item-->
|
|
||||||
<!-- android:id="@+id/action_overview"-->
|
<item
|
||||||
<!-- android:icon="@drawable/ic_action_trail_overview"-->
|
android:id="@+id/action_overview"
|
||||||
<!-- android:title="@string/shared_string_overview" />-->
|
android:icon="@drawable/ic_action_trail_overview"
|
||||||
|
android:title="@string/shared_string_overview" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_track"
|
android:id="@+id/action_track"
|
||||||
android:icon="@drawable/ic_action_polygom_dark"
|
android:icon="@drawable/ic_action_polygom_dark"
|
||||||
android:title="@string/shared_string_gpx_track" />
|
android:title="@string/shared_string_gpx_track" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_points"
|
android:id="@+id/action_points"
|
||||||
android:icon="@drawable/ic_action_waypoint"
|
android:icon="@drawable/ic_action_waypoint"
|
||||||
|
|
|
@ -9,4 +9,9 @@
|
||||||
android:id="@+id/action_delete"
|
android:id="@+id/action_delete"
|
||||||
android:icon="@drawable/ic_action_remove_dark"
|
android:icon="@drawable/ic_action_remove_dark"
|
||||||
android:title="@string/shared_string_delete"/>
|
android:title="@string/shared_string_delete"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/split_interval"
|
||||||
|
android:icon="@drawable/ic_action_split_interval"
|
||||||
|
android:title="@string/gpx_split_interval"/>
|
||||||
</menu>
|
</menu>
|
|
@ -3513,7 +3513,7 @@
|
||||||
<string name="shared_string_poi_types">أنواع نقاط الاهتمام</string>
|
<string name="shared_string_poi_types">أنواع نقاط الاهتمام</string>
|
||||||
<string name="shared_string_nothing_selected">لا شيء محدد</string>
|
<string name="shared_string_nothing_selected">لا شيء محدد</string>
|
||||||
<string name="shared_string_quick_actions">زر الإجراء السريع</string>
|
<string name="shared_string_quick_actions">زر الإجراء السريع</string>
|
||||||
<string name="shared_string_profiles">ملفات التعريف</string>
|
<string name="shared_string_profiles">الأوضاع</string>
|
||||||
<string name="replace_all_desc">سيتم استبدال العناصر الحالية بالعناصر التي في الملف</string>
|
<string name="replace_all_desc">سيتم استبدال العناصر الحالية بالعناصر التي في الملف</string>
|
||||||
<string name="replace_all">استبدل الكل</string>
|
<string name="replace_all">استبدل الكل</string>
|
||||||
<string name="get_discount_title">احصل على %1$d %2$s عند %3$s مقابل.</string>
|
<string name="get_discount_title">احصل على %1$d %2$s عند %3$s مقابل.</string>
|
||||||
|
@ -3965,7 +3965,7 @@
|
||||||
<string name="export_not_enough_space_descr">مساحة جهازك %1$s الخالية فقط. يرجى تحرير بعض المساحة أو إلغاء تحديد بعض العناصر للتصدير.</string>
|
<string name="export_not_enough_space_descr">مساحة جهازك %1$s الخالية فقط. يرجى تحرير بعض المساحة أو إلغاء تحديد بعض العناصر للتصدير.</string>
|
||||||
<string name="shared_string_resources">المصادر</string>
|
<string name="shared_string_resources">المصادر</string>
|
||||||
<string name="approximate_file_size">حجم الملف التقريبي</string>
|
<string name="approximate_file_size">حجم الملف التقريبي</string>
|
||||||
<string name="select_data_to_export">حدد البيانات التي سيتم تصديرها إلى الملف.</string>
|
<string name="select_data_to_export">حدد البيانات التي سيتم تصديرها إلى ملف.</string>
|
||||||
<string name="file_size_needed_for_import">مطلوب للاستيراد</string>
|
<string name="file_size_needed_for_import">مطلوب للاستيراد</string>
|
||||||
<string name="export_not_enough_space">لا يوجد مساحة كافية</string>
|
<string name="export_not_enough_space">لا يوجد مساحة كافية</string>
|
||||||
<string name="add_to_mapillary">أضف إلى مابيلاي</string>
|
<string name="add_to_mapillary">أضف إلى مابيلاي</string>
|
||||||
|
@ -3997,10 +3997,10 @@
|
||||||
\n • دعم ألوان مخصصة للمفضلة ونقاط لمسار الطريق
|
\n • دعم ألوان مخصصة للمفضلة ونقاط لمسار الطريق
|
||||||
\n
|
\n
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="profile_type_osmand_string">ملف تعريف أوسماند</string>
|
<string name="profile_type_osmand_string">وضع الاستعراض</string>
|
||||||
<string name="profile_type_user_string">ملف تعريف المستخدم</string>
|
<string name="profile_type_user_string">ملف تعريف المستخدم</string>
|
||||||
<string name="reverse_all_points">عكس جميع النقاط</string>
|
<string name="reverse_all_points">عكس جميع النقاط</string>
|
||||||
<string name="profile_by_default_description">حدد ملف التعريف، الذي سيتم استخدامه في بدء التطبيق.</string>
|
<string name="profile_by_default_description">حدد الوضع الذي سيتم استخدامه في بدء التطبيق.</string>
|
||||||
<string name="shared_string_last_used">آخر استخدام</string>
|
<string name="shared_string_last_used">آخر استخدام</string>
|
||||||
<string name="routing_attr_prefer_hiking_routes_description">تفضيل طرق التنزه</string>
|
<string name="routing_attr_prefer_hiking_routes_description">تفضيل طرق التنزه</string>
|
||||||
<string name="routing_attr_prefer_hiking_routes_name">تفضيل طرق التنزه</string>
|
<string name="routing_attr_prefer_hiking_routes_name">تفضيل طرق التنزه</string>
|
||||||
|
@ -4063,4 +4063,10 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
<string name="message_server_error">خطأ في الخادم: %1$s</string>
|
<string name="message_server_error">خطأ في الخادم: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">الاسم موجود بالفعل</string>
|
<string name="message_name_is_already_exists">الاسم موجود بالفعل</string>
|
||||||
|
<string name="delete_online_routing_engine">هل تريد حذف محرك التوجيه عبر الإنترنت؟</string>
|
||||||
|
<string name="context_menu_read_full">قراءة كاملة</string>
|
||||||
|
<string name="context_menu_edit_descr">تحرير الوصف</string>
|
||||||
|
<string name="delete_waypoints">حذف نقاط الطريق</string>
|
||||||
|
<string name="copy_to_map_markers">نسخ لعلامات الخريطة</string>
|
||||||
|
<string name="copy_to_map_favorites">نسخ للمفضلة</string>
|
||||||
</resources>
|
</resources>
|
|
@ -24,4 +24,8 @@
|
||||||
<string name="osmand_purchases_item">ওএসএমও কেনাকাটা</string>
|
<string name="osmand_purchases_item">ওএসএমও কেনাকাটা</string>
|
||||||
<string name="legend_item_description">একটি মানচিত্রের প্রতীকের জন্য গাইড</string>
|
<string name="legend_item_description">একটি মানচিত্রের প্রতীকের জন্য গাইড</string>
|
||||||
<string name="navigation_profiles_item">ন্যাভিগেশন প্রোফাইল</string>
|
<string name="navigation_profiles_item">ন্যাভিগেশন প্রোফাইল</string>
|
||||||
|
<string name="av_locations">অবস্থানগুলো</string>
|
||||||
|
<string name="shared_string_navigation">দিক নির্ণয়</string>
|
||||||
|
<string name="m_s">মি/সে</string>
|
||||||
|
<string name="nm">নটিকাল মাইল</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3998,4 +3998,14 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">Mountainbike</string>
|
<string name="routing_engine_vehicle_type_mtb">Mountainbike</string>
|
||||||
<string name="message_server_error">Server-Fehler: %1$s</string>
|
<string name="message_server_error">Server-Fehler: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Der Name ist bereits vorhanden</string>
|
<string name="message_name_is_already_exists">Der Name ist bereits vorhanden</string>
|
||||||
|
<string name="announcement_time_passing">Beim Passieren</string>
|
||||||
|
<string name="announcement_time_off_route">Abweichung von der Route</string>
|
||||||
|
<string name="announcement_time_arrive">Ankunft am Ziel</string>
|
||||||
|
<string name="announcement_time_approach">Annährung ans Ziel</string>
|
||||||
|
<string name="context_menu_read_full">Vollständig lesen</string>
|
||||||
|
<string name="delete_online_routing_engine">Dieses Online-Routingmodul löschen\?</string>
|
||||||
|
<string name="context_menu_edit_descr">Beschreibung bearbeiten</string>
|
||||||
|
<string name="delete_waypoints">Wegpunkte löschen</string>
|
||||||
|
<string name="copy_to_map_favorites">In Favoriten kopieren</string>
|
||||||
|
<string name="copy_to_map_markers">In Kartenmarkierungen kopieren</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4000,4 +4000,10 @@
|
||||||
<string name="announcement_time_intervals">Interspacoj distancaj kaj tempaj</string>
|
<string name="announcement_time_intervals">Interspacoj distancaj kaj tempaj</string>
|
||||||
<string name="announcement_time_descr">Tempo de anonco de diversaj voĉaj sciigoj dependas de ilia specoj, nuna naviga kaj implicita naviga rapido.</string>
|
<string name="announcement_time_descr">Tempo de anonco de diversaj voĉaj sciigoj dependas de ilia specoj, nuna naviga kaj implicita naviga rapido.</string>
|
||||||
<string name="announcement_time_title">Tempo de anonco</string>
|
<string name="announcement_time_title">Tempo de anonco</string>
|
||||||
|
<string name="copy_to_map_favorites">Kopii al ŝatataj</string>
|
||||||
|
<string name="delete_online_routing_engine">Ĉu forigi tiun ĉi enretan navigilon\?</string>
|
||||||
|
<string name="context_menu_read_full">Legi pli</string>
|
||||||
|
<string name="context_menu_edit_descr">Redakti priskribon</string>
|
||||||
|
<string name="delete_waypoints">Forigi navigadpunktojn</string>
|
||||||
|
<string name="copy_to_map_markers">Kopii al map‑markoj</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3982,7 +3982,7 @@
|
||||||
<string name="announcement_time_prepare">Preparar</string>
|
<string name="announcement_time_prepare">Preparar</string>
|
||||||
<string name="announcement_time_off_route">Fuera de la ruta</string>
|
<string name="announcement_time_off_route">Fuera de la ruta</string>
|
||||||
<string name="announcement_time_arrive">Has llegado al destino</string>
|
<string name="announcement_time_arrive">Has llegado al destino</string>
|
||||||
<string name="shared_string_turn">Giro</string>
|
<string name="shared_string_turn">Girar</string>
|
||||||
<string name="announcement_time_intervals">Intervalos de tiempo y distancia</string>
|
<string name="announcement_time_intervals">Intervalos de tiempo y distancia</string>
|
||||||
<string name="announcement_time_descr">El tiempo de anuncio de las diferentes indicaciones por voz depende del tipo de mensaje, la velocidad de navegación actual y la velocidad de navegación predefinida.</string>
|
<string name="announcement_time_descr">El tiempo de anuncio de las diferentes indicaciones por voz depende del tipo de mensaje, la velocidad de navegación actual y la velocidad de navegación predefinida.</string>
|
||||||
<string name="announcement_time_title">Tiempo de anuncio</string>
|
<string name="announcement_time_title">Tiempo de anuncio</string>
|
||||||
|
@ -4003,4 +4003,10 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
||||||
<string name="message_server_error">Error de servidor: %1$s</string>
|
<string name="message_server_error">Error de servidor: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">El nombre ya existe</string>
|
<string name="message_name_is_already_exists">El nombre ya existe</string>
|
||||||
|
<string name="delete_online_routing_engine">¿Borrar este motor de navegación en línea\?</string>
|
||||||
|
<string name="context_menu_read_full">Leer completo</string>
|
||||||
|
<string name="context_menu_edit_descr">Editar descripción</string>
|
||||||
|
<string name="delete_waypoints">Borrar puntos de referencia</string>
|
||||||
|
<string name="copy_to_map_markers">Copiar a «Marcadores del mapa»</string>
|
||||||
|
<string name="copy_to_map_favorites">Copiar a favoritos</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3990,4 +3990,10 @@
|
||||||
<string name="routing_engine_vehicle_type_cycling_mountain">Vélo tout terrain</string>
|
<string name="routing_engine_vehicle_type_cycling_mountain">Vélo tout terrain</string>
|
||||||
<string name="routing_engine_vehicle_type_cycling_electric">Vélo électrique</string>
|
<string name="routing_engine_vehicle_type_cycling_electric">Vélo électrique</string>
|
||||||
<string name="routing_engine_vehicle_type_cycling_regular">Vélo</string>
|
<string name="routing_engine_vehicle_type_cycling_regular">Vélo</string>
|
||||||
|
<string name="copy_to_map_markers">Copier vers les marques de carte</string>
|
||||||
|
<string name="copy_to_map_favorites">Copier vers les favoris</string>
|
||||||
|
<string name="delete_online_routing_engine">Supprimer ce moteur de routage en ligne \?</string>
|
||||||
|
<string name="context_menu_read_full">Lire la suite</string>
|
||||||
|
<string name="context_menu_edit_descr">Modifier la description</string>
|
||||||
|
<string name="delete_waypoints">Supprimer les points de passage</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3976,4 +3976,26 @@ Lon %2$s</string>
|
||||||
<string name="select_folder_descr">Selecionar cartafol ou engadir un novo</string>
|
<string name="select_folder_descr">Selecionar cartafol ou engadir un novo</string>
|
||||||
<string name="select_folder">Seleccionar cartafol</string>
|
<string name="select_folder">Seleccionar cartafol</string>
|
||||||
<string name="shared_string_empty">Baleiro</string>
|
<string name="shared_string_empty">Baleiro</string>
|
||||||
|
<string name="announcement_time_arrive">Chegar ao destino</string>
|
||||||
|
<string name="shared_string_turn">Xiro</string>
|
||||||
|
<string name="announcement_time_intervals">Intres de tempo e distancia</string>
|
||||||
|
<string name="announcement_time_descr">A hora do anuncio das diferentes indicacións por voz depende do tipo de mensaxe, a velocidade de navegación actual e a velocidade de navegación predefinida.</string>
|
||||||
|
<string name="announcement_time_title">Hora do anuncio</string>
|
||||||
|
<string name="start_recording">Comezar gravación</string>
|
||||||
|
<string name="show_track_on_map">Amosar pista no mapa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Cadeira de rodas</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Sendeirismo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Camiñando</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Ciclismo eléctrico</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Ciclismo de montaña</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Ciclismo de estrada</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Ciclismo regular</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Vehículos pesados</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Camión pequeno</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Camión</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Scooter</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Bicicleta de carreiras</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">Bicicleta de montaña</string>
|
||||||
|
<string name="message_server_error">Erro do servidor: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">O nome xa existe</string>
|
||||||
</resources>
|
</resources>
|
|
@ -312,7 +312,7 @@
|
||||||
\n
|
\n
|
||||||
\nÁtmenetileg átállítva online CloudMade-re.</string>
|
\nÁtmenetileg átállítva online CloudMade-re.</string>
|
||||||
<string name="specified_dir_doesnt_exist">Nem sikerült megtalálni a megadott mappát.</string>
|
<string name="specified_dir_doesnt_exist">Nem sikerült megtalálni a megadott mappát.</string>
|
||||||
<string name="application_dir">Adatok tárolási helye</string>
|
<string name="application_dir">Adatok tárolási mappája</string>
|
||||||
<string name="build_installed">{0} verzió telepítve ({1}).</string>
|
<string name="build_installed">{0} verzió telepítve ({1}).</string>
|
||||||
<string name="downloading_build">Összeállítás letöltése…</string>
|
<string name="downloading_build">Összeállítás letöltése…</string>
|
||||||
<string name="install_selected_build">OsmAnd {0} – {1}, {2} MB. Telepíted?</string>
|
<string name="install_selected_build">OsmAnd {0} – {1}, {2} MB. Telepíted?</string>
|
||||||
|
@ -362,7 +362,7 @@
|
||||||
<string name="transport_search_again">Tömegközlekedés keresésének alaphelyzetbe állítása</string>
|
<string name="transport_search_again">Tömegközlekedés keresésének alaphelyzetbe állítása</string>
|
||||||
<string name="voice">Felvett hang</string>
|
<string name="voice">Felvett hang</string>
|
||||||
<string name="no_vector_map_loaded">Nincs betöltött vektoros térkép</string>
|
<string name="no_vector_map_loaded">Nincs betöltött vektoros térkép</string>
|
||||||
<string name="gpx_files_not_found">Nem található GPX fálj a tracks könyvtárban</string>
|
<string name="gpx_files_not_found">Nem található GPX-fálj a tracks mappában</string>
|
||||||
<string name="error_reading_gpx">Nem sikerült beolvasni a GPX-adatokat.</string>
|
<string name="error_reading_gpx">Nem sikerült beolvasni a GPX-adatokat.</string>
|
||||||
<string name="vector_data">Vektoros OSM térkép</string>
|
<string name="vector_data">Vektoros OSM térkép</string>
|
||||||
<string name="transport_context_menu">Közlekedés keresése megállónál</string>
|
<string name="transport_context_menu">Közlekedés keresése megállónál</string>
|
||||||
|
@ -491,7 +491,7 @@
|
||||||
<string name="route_general_information">Teljes távolság %1$s, utazási idő %2$d óra %3$d perc.</string>
|
<string name="route_general_information">Teljes távolság %1$s, utazási idő %2$d óra %3$d perc.</string>
|
||||||
<string name="router_service_descr">Online vagy offline útvonaltervező szolgáltatás.</string>
|
<string name="router_service_descr">Online vagy offline útvonaltervező szolgáltatás.</string>
|
||||||
<string name="router_service">Útvonaltervező szolgáltatás</string>
|
<string name="router_service">Útvonaltervező szolgáltatás</string>
|
||||||
<string name="sd_dir_not_accessible">A tárolási könyvtár nem érhető el a memóriakártyán!</string>
|
<string name="sd_dir_not_accessible">A tárolási mappa nem érhető el a memóriakártyán!</string>
|
||||||
<string name="download_question">Letöltés {0} - {1} ?</string>
|
<string name="download_question">Letöltés {0} - {1} ?</string>
|
||||||
<string name="download_question_exist">{0} régióhoz már le van töltve offline adat ({1}). Frissíted ({2})?</string>
|
<string name="download_question_exist">{0} régióhoz már le van töltve offline adat ({1}). Frissíted ({2})?</string>
|
||||||
<string name="address">Cím</string>
|
<string name="address">Cím</string>
|
||||||
|
@ -547,7 +547,7 @@
|
||||||
<string name="save_current_track">Jelenlegi nyomvonal mentése</string>
|
<string name="save_current_track">Jelenlegi nyomvonal mentése</string>
|
||||||
<string name="save_track_interval_descr">A navigáció alatti nyomvonalfelvételhez adja meg a naplózási intervallumot</string>
|
<string name="save_track_interval_descr">A navigáció alatti nyomvonalfelvételhez adja meg a naplózási intervallumot</string>
|
||||||
<string name="save_track_interval">Naplózási intervallum navigáció közben</string>
|
<string name="save_track_interval">Naplózási intervallum navigáció közben</string>
|
||||||
<string name="save_track_to_gpx_descrp">Navigáció közben a GPX útvonal automatikusan mentésre kerül az OsmAnd „tracks” könyvtárába.</string>
|
<string name="save_track_to_gpx_descrp">Navigáció közben a GPX útvonal automatikusan mentésre kerül az OsmAnd „tracks” mappájába.</string>
|
||||||
<string name="reload_tile">Térképcsempe újratöltése</string>
|
<string name="reload_tile">Térképcsempe újratöltése</string>
|
||||||
<string name="mark_point">Célpont</string>
|
<string name="mark_point">Célpont</string>
|
||||||
<string name="shared_string_add_to_favorites">Hozzáadás a „Kedvencek”-hez</string>
|
<string name="shared_string_add_to_favorites">Hozzáadás a „Kedvencek”-hez</string>
|
||||||
|
@ -661,7 +661,7 @@
|
||||||
\n
|
\n
|
||||||
\nA csempés térképek letölthetők internetes forrásokból, vagy előkészíthetők kapcsolat nélküli használathoz (kézzel átmásolva az OsmAnd adatmappájába) SQLite adatbázisként, amely különféle harmadik féltől származó térkép-előkészítő eszközökkel állítható elő.</string>
|
\nA csempés térképek letölthetők internetes forrásokból, vagy előkészíthetők kapcsolat nélküli használathoz (kézzel átmásolva az OsmAnd adatmappájába) SQLite adatbázisként, amely különféle harmadik féltől származó térkép-előkészítő eszközökkel állítható elő.</string>
|
||||||
<string name="osmand_background_plugin_description">Megjeleníti a háttérben futó nyomvonalrögzítés és navigáció beállításait, ami periodikusan felébreszti a GPS modult (kikapcsolt képernyőnél).</string>
|
<string name="osmand_background_plugin_description">Megjeleníti a háttérben futó nyomvonalrögzítés és navigáció beállításait, ami periodikusan felébreszti a GPS modult (kikapcsolt képernyőnél).</string>
|
||||||
<string name="osmand_accessibility_description">Elérhetővé teszi az eszköz akadálymentesítési lehetőségeit közvetlenül az OsmAndban. Ez megkönnyíti például a szövegfelolvasó (TTS) hangok beszédsebességének állítását, az irányító gombok képernyő navigációjának beállítását, egy görgető használatát a nagyítás vezérléséhez, vagy szövegfelolvasó visszajelzés használatát, például a pozíció automatikus bejelentésénél.</string>
|
<string name="osmand_accessibility_description">Elérhetővé teszi az eszköz akadálymentesítési lehetőségeit közvetlenül az OsmAndban. Ez megkönnyíti például a szövegfelolvasó (TTS) hangok beszédsebességének állítását, az irányító gombok képernyő navigációjának beállítását, egy görgető használatát a nagyítás vezérléséhez, vagy szövegfelolvasó visszajelzés használatát, például a pozíció automatikus bemondásánál.</string>
|
||||||
<string name="osmand_development_plugin_description">Beállítások fejlesztői és hibakeresési szolgáltatásokhoz, mint például navigáció szimulálása, a megjelenítés teljesítménye vagy hangutasítások. Fejlesztőknek szánt funkciók, nem szükségesek a normál használathoz.</string>
|
<string name="osmand_development_plugin_description">Beállítások fejlesztői és hibakeresési szolgáltatásokhoz, mint például navigáció szimulálása, a megjelenítés teljesítménye vagy hangutasítások. Fejlesztőknek szánt funkciók, nem szükségesek a normál használathoz.</string>
|
||||||
<string name="plugins_screen">Bővítmények</string>
|
<string name="plugins_screen">Bővítmények</string>
|
||||||
<string name="prefs_plugins_descr">A bővítmények speciális beállításokat és kiegészítő funkciókat aktiválnak.</string>
|
<string name="prefs_plugins_descr">A bővítmények speciális beállításokat és kiegészítő funkciókat aktiválnak.</string>
|
||||||
|
@ -1178,7 +1178,7 @@
|
||||||
<string name="share_route_as_gpx">Útvonal megosztása GPX-ben</string>
|
<string name="share_route_as_gpx">Útvonal megosztása GPX-ben</string>
|
||||||
<string name="share_route_subject">OsmAnd segítségével megosztott útvonal</string>
|
<string name="share_route_subject">OsmAnd segítségével megosztott útvonal</string>
|
||||||
<string name="arrival_distance">Érkezés bemondása</string>
|
<string name="arrival_distance">Érkezés bemondása</string>
|
||||||
<string name="arrival_distance_descr">Milyen korán szeretnéd hallani az érkezés bejelentését\?</string>
|
<string name="arrival_distance_descr">Milyen korán szeretné hallani az érkezés bemondását\?</string>
|
||||||
<string name="keep_informing_never">Csak kézzel (koppintás a nyílra)</string>
|
<string name="keep_informing_never">Csak kézzel (koppintás a nyílra)</string>
|
||||||
<string name="keep_informing_descr">Navigációs utasítások újra bemondása rendszeres időközönként.</string>
|
<string name="keep_informing_descr">Navigációs utasítások újra bemondása rendszeres időközönként.</string>
|
||||||
<string name="keep_informing">Navigációs utasítások ismétlése</string>
|
<string name="keep_informing">Navigációs utasítások ismétlése</string>
|
||||||
|
@ -1818,7 +1818,7 @@
|
||||||
<string name="night">Éjjel</string>
|
<string name="night">Éjjel</string>
|
||||||
<string name="select_month_and_country">Hónap és ország:</string>
|
<string name="select_month_and_country">Hónap és ország:</string>
|
||||||
<string name="shared_string_remove">Eltávolítás</string>
|
<string name="shared_string_remove">Eltávolítás</string>
|
||||||
<string name="storage_directory_readonly_desc">Az alkalmazás átváltott belső memóriára, mert a kijelölt adattároló mappa írásvédett. Kérjük, jelöljön ki egy írható tárolási mappát.</string>
|
<string name="storage_directory_readonly_desc">Az alkalmazás átváltott belső memóriára, mert a kijelölt adattároló mappa írásvédett. Kérjük, jelöljön ki egy írható tárolómappát.</string>
|
||||||
<string name="storage_directory_shared">Osztott memória</string>
|
<string name="storage_directory_shared">Osztott memória</string>
|
||||||
<string name="shared_string_topbar">Felső sáv</string>
|
<string name="shared_string_topbar">Felső sáv</string>
|
||||||
<string name="recalculate_route">Útvonal újraszámítása</string>
|
<string name="recalculate_route">Útvonal újraszámítása</string>
|
||||||
|
@ -1948,10 +1948,10 @@
|
||||||
<string name="access_direction_audio_feedback_descr">Hanggal jelölje a célpont irányát.</string>
|
<string name="access_direction_audio_feedback_descr">Hanggal jelölje a célpont irányát.</string>
|
||||||
<string name="access_direction_haptic_feedback">Rezgő irányjelzés</string>
|
<string name="access_direction_haptic_feedback">Rezgő irányjelzés</string>
|
||||||
<string name="access_direction_haptic_feedback_descr">Rezgéssel jelölje a célpont irányát.</string>
|
<string name="access_direction_haptic_feedback_descr">Rezgéssel jelölje a célpont irányát.</string>
|
||||||
<string name="access_smart_autoannounce">Okos automatikus bejelentés</string>
|
<string name="access_smart_autoannounce">Intelligens automatikus bemondás</string>
|
||||||
<string name="access_smart_autoannounce_descr">Figyelmeztetés, csak ha a célpont iránya megváltozott.</string>
|
<string name="access_smart_autoannounce_descr">Figyelmeztetés, csak ha a célpont iránya megváltozott.</string>
|
||||||
<string name="access_autoannounce_period">Automatikus bejelentések időköz</string>
|
<string name="access_autoannounce_period">Bemondások gyakorisága</string>
|
||||||
<string name="access_autoannounce_period_descr">A bejelentések közötti legkisebb időköz.</string>
|
<string name="access_autoannounce_period_descr">A bemondások közötti legkisebb időköz.</string>
|
||||||
<string name="lang_hu_formal">magyar (magázó)</string>
|
<string name="lang_hu_formal">magyar (magázó)</string>
|
||||||
<string name="current_track">Jelenlegi nyomvonal</string>
|
<string name="current_track">Jelenlegi nyomvonal</string>
|
||||||
<string name="change_markers_position">Jelölő helyének módosítása</string>
|
<string name="change_markers_position">Jelölő helyének módosítása</string>
|
||||||
|
@ -2157,7 +2157,7 @@
|
||||||
<string name="navigate_point_olc_info_area">Érvényes teljes OLC
|
<string name="navigate_point_olc_info_area">Érvényes teljes OLC
|
||||||
\nA következő területet jeleníti meg: %1$s x %2$s</string>
|
\nA következő területet jeleníti meg: %1$s x %2$s</string>
|
||||||
<string name="quick_action_page_list_descr">Gomb, amely lépteti az alábbi listát.</string>
|
<string name="quick_action_page_list_descr">Gomb, amely lépteti az alábbi listát.</string>
|
||||||
<string name="select_gpx_folder">GPX fájlok könyvtárának kijelölése</string>
|
<string name="select_gpx_folder">GPX-fájlok mappájának kijelölése</string>
|
||||||
<string name="file_can_not_be_moved">Nem sikerült áthelyezni a fájlt.</string>
|
<string name="file_can_not_be_moved">Nem sikerült áthelyezni a fájlt.</string>
|
||||||
<string name="shared_string_move">Áthelyezés</string>
|
<string name="shared_string_move">Áthelyezés</string>
|
||||||
<string name="shared_string_gpx_tracks">Nyomvonalak</string>
|
<string name="shared_string_gpx_tracks">Nyomvonalak</string>
|
||||||
|
@ -2191,7 +2191,7 @@
|
||||||
<string name="routing_attr_driving_style_safety_name">Mellékutak előnyben részesítése</string>
|
<string name="routing_attr_driving_style_safety_name">Mellékutak előnyben részesítése</string>
|
||||||
<string name="relief_smoothness_factor_descr">Előnyben részesített terep: sík vagy dombos.</string>
|
<string name="relief_smoothness_factor_descr">Előnyben részesített terep: sík vagy dombos.</string>
|
||||||
<string name="shared_string_slope">Lejtő</string>
|
<string name="shared_string_slope">Lejtő</string>
|
||||||
<string name="add_new_folder">Új mappa létrehozása</string>
|
<string name="add_new_folder">Új mappa hozzáadása</string>
|
||||||
<string name="points_delete_multiple_succesful">Pont(ok) törölve.</string>
|
<string name="points_delete_multiple_succesful">Pont(ok) törölve.</string>
|
||||||
<string name="points_delete_multiple">Biztosan törli ez(eke)t a ponto(ka)t: %1$d\?</string>
|
<string name="points_delete_multiple">Biztosan törli ez(eke)t a ponto(ka)t: %1$d\?</string>
|
||||||
<string name="route_points_category_name">Érintendő fordulók az útvonalon</string>
|
<string name="route_points_category_name">Érintendő fordulók az útvonalon</string>
|
||||||
|
@ -3051,7 +3051,7 @@
|
||||||
<string name="vehicle_parameters_descr">Tömeg, magasság, hossz, sebesség</string>
|
<string name="vehicle_parameters_descr">Tömeg, magasság, hossz, sebesség</string>
|
||||||
<string name="vehicle_parameters">Jármű paraméterek</string>
|
<string name="vehicle_parameters">Jármű paraméterek</string>
|
||||||
<string name="voice_announces_info">A hangbemondások csak navigáció közben kerülnek lejátszásra.</string>
|
<string name="voice_announces_info">A hangbemondások csak navigáció közben kerülnek lejátszásra.</string>
|
||||||
<string name="voice_announces_descr">Navigációs utasítások és bejelentések</string>
|
<string name="voice_announces_descr">Navigációs utasítások és bemondások</string>
|
||||||
<string name="voice_announces">Hangutasítások</string>
|
<string name="voice_announces">Hangutasítások</string>
|
||||||
<string name="screen_alerts">Képernyő riasztások</string>
|
<string name="screen_alerts">Képernyő riasztások</string>
|
||||||
<string name="route_parameters_descr">Útvonal paraméterek testreszabása</string>
|
<string name="route_parameters_descr">Útvonal paraméterek testreszabása</string>
|
||||||
|
@ -3059,7 +3059,7 @@
|
||||||
<string name="plugins_settings">Bővítménybeállítások</string>
|
<string name="plugins_settings">Bővítménybeállítások</string>
|
||||||
<string name="download_detailed_map">Töltsd le a részletes %s térképet a terület megtekintéséhez.</string>
|
<string name="download_detailed_map">Töltsd le a részletes %s térképet a terület megtekintéséhez.</string>
|
||||||
<string name="internal_app_storage_description">Az OsmAnd belső tárolója (felhasználók és más alkalmazások számára rejtett).</string>
|
<string name="internal_app_storage_description">Az OsmAnd belső tárolója (felhasználók és más alkalmazások számára rejtett).</string>
|
||||||
<string name="change_data_storage_folder">Tárolás mappájának módosítása</string>
|
<string name="change_data_storage_folder">Tároló mappa módosítása</string>
|
||||||
<string name="routing_attr_width_name">Szélességkorlátozás</string>
|
<string name="routing_attr_width_name">Szélességkorlátozás</string>
|
||||||
<string name="routing_attr_width_description">Adja meg az útvonalakon a járművekre vonatkozó szélességkorlátozást.</string>
|
<string name="routing_attr_width_description">Adja meg az útvonalakon a járművekre vonatkozó szélességkorlátozást.</string>
|
||||||
<string name="avoid_in_routing_descr_">Bizonyos útvonalak és úttípusok elkerülése</string>
|
<string name="avoid_in_routing_descr_">Bizonyos útvonalak és úttípusok elkerülése</string>
|
||||||
|
@ -3086,10 +3086,10 @@
|
||||||
<string name="tts_initialization_error">Szövegfelolvasó motor indítása sikertelen.</string>
|
<string name="tts_initialization_error">Szövegfelolvasó motor indítása sikertelen.</string>
|
||||||
<string name="data_storage_preference_summary">%1$s • %2$s</string>
|
<string name="data_storage_preference_summary">%1$s • %2$s</string>
|
||||||
<string name="data_storage_space_description">%1$s GB szabad (%2$s GB-ból)</string>
|
<string name="data_storage_space_description">%1$s GB szabad (%2$s GB-ból)</string>
|
||||||
<string name="enter_path_to_folder">Add meg a könyvtár elérési útvonalát</string>
|
<string name="enter_path_to_folder">Add meg a mappa elérési útvonalát</string>
|
||||||
<string name="shared_string_select_folder">Könyvtár…</string>
|
<string name="shared_string_select_folder">Mappa…</string>
|
||||||
<string name="paste_Osmand_data_folder_path">OsmAnd adatok elérési útvonalának beillesztése</string>
|
<string name="paste_Osmand_data_folder_path">Az OsmAnd-adatokat tartalmazó mappa elérési útvonalának beillesztése</string>
|
||||||
<string name="change_osmand_data_folder_question">Módosítod az OsmAnd adatokat tároló könyvtárat\?</string>
|
<string name="change_osmand_data_folder_question">Módosítod az OsmAnd adatok mappáját\?</string>
|
||||||
<string name="move_maps_to_new_destination">Áthelyezés az új helyre</string>
|
<string name="move_maps_to_new_destination">Áthelyezés az új helyre</string>
|
||||||
<string name="shared_string_memory_tb_desc">%1$s TB</string>
|
<string name="shared_string_memory_tb_desc">%1$s TB</string>
|
||||||
<string name="shared_string_memory_gb_desc">%1$s GB</string>
|
<string name="shared_string_memory_gb_desc">%1$s GB</string>
|
||||||
|
@ -3103,11 +3103,11 @@
|
||||||
<string name="quick_action_hillshade_show">Domborzatárnyékolás megjelenítése</string>
|
<string name="quick_action_hillshade_show">Domborzatárnyékolás megjelenítése</string>
|
||||||
<string name="quick_action_hillshade_hide">Domborzatárnyékolás elrejtése</string>
|
<string name="quick_action_hillshade_hide">Domborzatárnyékolás elrejtése</string>
|
||||||
<string name="quick_action_show_hide_hillshade">Domborzatárnyékolás megjelenítése/elrejtése</string>
|
<string name="quick_action_show_hide_hillshade">Domborzatárnyékolás megjelenítése/elrejtése</string>
|
||||||
<string name="track_storage_directory">Nyomvonal tárolási könyvtára</string>
|
<string name="track_storage_directory">Nyomvonal tárolási mappája</string>
|
||||||
<string name="track_storage_directory_descrp">A nyomvonalak a \'rec\' könyvtárban tárolhatók, havi vagy napi bontás szerinti könyvtárakban.</string>
|
<string name="track_storage_directory_descrp">A nyomvonalak tárolhatók a \'rec\' mappában, illetve havi vagy napi bontás szerinti mappákban.</string>
|
||||||
<string name="store_tracks_in_rec_directory">Nyomvonalak felvétele a \'rec\' mappába</string>
|
<string name="store_tracks_in_rec_directory">Nyomvonalak felvétele a \'rec\' mappába</string>
|
||||||
<string name="store_tracks_in_daily_directories">Nyomvonalak felvétele napi bontású mappákba</string>
|
<string name="store_tracks_in_daily_directories">Nyomvonalak felvétele napi bontású mappákba</string>
|
||||||
<string name="store_tracks_in_daily_directories_descrp">Nyomvonalak rögzítése a rögzítés napja szerinti almappákba (pl. 2018-01-01).</string>
|
<string name="store_tracks_in_daily_directories_descrp">Nyomvonalak felvétele a felvétel napja szerinti almappákba (pl. 2018-01-01).</string>
|
||||||
<string name="export_profile">Profil exportálása</string>
|
<string name="export_profile">Profil exportálása</string>
|
||||||
<string name="exported_osmand_profile">OsmAnd profil: %1$s</string>
|
<string name="exported_osmand_profile">OsmAnd profil: %1$s</string>
|
||||||
<string name="overwrite_profile_q">\'%1$s\' már létezik. Felülírja\?</string>
|
<string name="overwrite_profile_q">\'%1$s\' már létezik. Felülírja\?</string>
|
||||||
|
@ -3340,7 +3340,7 @@
|
||||||
<string name="video_notes">Videojegyzetek</string>
|
<string name="video_notes">Videojegyzetek</string>
|
||||||
<string name="photo_notes">Fényképes jegyzetek</string>
|
<string name="photo_notes">Fényképes jegyzetek</string>
|
||||||
<string name="route_recalculation">Útvonal újraszámítása</string>
|
<string name="route_recalculation">Útvonal újraszámítása</string>
|
||||||
<string name="accessibility_announce">Bejelentés</string>
|
<string name="accessibility_announce">Bemondás</string>
|
||||||
<string name="login_and_pass">Felhasználónév és jelszó</string>
|
<string name="login_and_pass">Felhasználónév és jelszó</string>
|
||||||
<string name="plugin_global_prefs_info">Ezek a bővítménybeállítások globálisak, és minden profilra vonatkoznak</string>
|
<string name="plugin_global_prefs_info">Ezek a bővítménybeállítások globálisak, és minden profilra vonatkoznak</string>
|
||||||
<string name="osm_editing">OSM-szerkesztés</string>
|
<string name="osm_editing">OSM-szerkesztés</string>
|
||||||
|
@ -3986,9 +3986,18 @@
|
||||||
<string name="routing_engine_vehicle_type_cycling_mountain">Hegyi kerékpározás</string>
|
<string name="routing_engine_vehicle_type_cycling_mountain">Hegyi kerékpározás</string>
|
||||||
<string name="routing_engine_vehicle_type_cycling_road">Verenykerékpározás</string>
|
<string name="routing_engine_vehicle_type_cycling_road">Verenykerékpározás</string>
|
||||||
<string name="routing_engine_vehicle_type_cycling_regular">Rendes kerékpározás</string>
|
<string name="routing_engine_vehicle_type_cycling_regular">Rendes kerékpározás</string>
|
||||||
<string name="routing_engine_vehicle_type_truck">Tgk.</string>
|
<string name="routing_engine_vehicle_type_truck">Teherautó</string>
|
||||||
<string name="routing_engine_vehicle_type_hgv">Nehéz tgk.</string>
|
<string name="routing_engine_vehicle_type_hgv">Nehéz teherautó</string>
|
||||||
<string name="routing_engine_vehicle_type_small_truck">Kisteherautó</string>
|
<string name="routing_engine_vehicle_type_small_truck">Kisteherautó</string>
|
||||||
<string name="message_server_error">Szerverhiba: %1$s</string>
|
<string name="message_server_error">Szerverhiba: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Ez a név már létezik</string>
|
<string name="message_name_is_already_exists">Ez a név már létezik</string>
|
||||||
|
<string name="announcement_time_descr">A különféle hangutasítások bemondási ideje függ az utasítás típusától, az aktuális navigációs sebességtől és az alapértelmezett navigációs sebességtől.</string>
|
||||||
|
<string name="announcement_time_title">Bemondás ideje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Roller</string>
|
||||||
|
<string name="delete_online_routing_engine">Törli ezt az online útvonaltervezőt\?</string>
|
||||||
|
<string name="context_menu_read_full">Az egész elolvasása</string>
|
||||||
|
<string name="context_menu_edit_descr">Leírás szerkesztése</string>
|
||||||
|
<string name="delete_waypoints">Útpontok törlése</string>
|
||||||
|
<string name="copy_to_map_markers">Másolás a térképjelölők közé</string>
|
||||||
|
<string name="copy_to_map_favorites">Másolás a kedvencek közé</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3966,4 +3966,43 @@
|
||||||
<string name="routing_engine_vehicle_type_bike">Hjólandi</string>
|
<string name="routing_engine_vehicle_type_bike">Hjólandi</string>
|
||||||
<string name="routing_engine_vehicle_type_car">Bíll</string>
|
<string name="routing_engine_vehicle_type_car">Bíll</string>
|
||||||
<string name="copy_address">Afrita heimilisfang</string>
|
<string name="copy_address">Afrita heimilisfang</string>
|
||||||
|
<string name="online_routing_engine">Leiðagerð af netinu</string>
|
||||||
|
<string name="online_routing_engines">Leiðagerð af netinu</string>
|
||||||
|
<string name="shared_string_folders">Möppur</string>
|
||||||
|
<string name="select_folder">Veldu möppu</string>
|
||||||
|
<string name="select_folder_descr">Veldu möppu eða bættu við nýrri</string>
|
||||||
|
<string name="shared_string_empty">Tómt</string>
|
||||||
|
<string name="analyze_by_intervals">Greina eftir millibilum (uppskipting millibila)</string>
|
||||||
|
<string name="upload_to_openstreetmap">Senda inn í OpenStreetMap</string>
|
||||||
|
<string name="edit_track">Breyta ferli</string>
|
||||||
|
<string name="rename_track">Endurnefna feril</string>
|
||||||
|
<string name="change_folder">Skipta um möppu</string>
|
||||||
|
<string name="shared_string_sec">sek</string>
|
||||||
|
<string name="announcement_time_passing">Framhjá</string>
|
||||||
|
<string name="announcement_time_approach">Aðkoma</string>
|
||||||
|
<string name="announcement_time_prepare_long">Langur undirbúningur</string>
|
||||||
|
<string name="announcement_time_prepare">Undirbúa</string>
|
||||||
|
<string name="announcement_time_off_route">Utan leiðar</string>
|
||||||
|
<string name="announcement_time_arrive">Koma á áfangastað</string>
|
||||||
|
<string name="shared_string_turn">Beygja</string>
|
||||||
|
<string name="announcement_time_intervals">Millibil tíma og vegalengda</string>
|
||||||
|
<string name="announcement_time_descr">Tilkynningar mismunandi talskilaboða fara eftir tegund skilaboða, fyrirliggjandi hraða leiðsagnar og sjálfgefnum hraða leiðsagnar.</string>
|
||||||
|
<string name="announcement_time_title">Tími tilkynninga</string>
|
||||||
|
<string name="start_recording">Hefja upptöku</string>
|
||||||
|
<string name="show_track_on_map">Birta feril á korti</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Hjólastólar</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Gönguferðir</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Gangandi</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Rafmagnshjól</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Fjallahjól</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Götuhjól</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Venjulegar hjólreiðar</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Þyngri vöruflutningabifreiðar</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Litlar vöruflutningabifreiðar</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Flutningabifreiðar</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Skellinöðrur</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Götukeppnishjól</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">Fjallahjól</string>
|
||||||
|
<string name="message_server_error">Villa í netþjóni: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">Nafnið er þegar til staðar</string>
|
||||||
</resources>
|
</resources>
|
|
@ -543,7 +543,7 @@
|
||||||
<string name="left_side_navigation">Circolazione a sinistra</string>
|
<string name="left_side_navigation">Circolazione a sinistra</string>
|
||||||
<string name="left_side_navigation_descr">Per i paesi in cui si guida nella parte sinistra della strada.</string>
|
<string name="left_side_navigation_descr">Per i paesi in cui si guida nella parte sinistra della strada.</string>
|
||||||
<string name="unknown_from_location">Posizione di partenza non ancora determinata.</string>
|
<string name="unknown_from_location">Posizione di partenza non ancora determinata.</string>
|
||||||
<string name="confirm_interrupt_download">Annulla il download del file\?</string>
|
<string name="confirm_interrupt_download">Annulla il download\?</string>
|
||||||
<string name="basemap_was_selected_to_download">La mappa di base necessaria per il funzionamento è in coda per il download.</string>
|
<string name="basemap_was_selected_to_download">La mappa di base necessaria per il funzionamento è in coda per il download.</string>
|
||||||
<string name="map_online_plugin_is_not_installed">Abilita il plugin \'Mappe Online\' per scegliere altre sorgenti di mappe</string>
|
<string name="map_online_plugin_is_not_installed">Abilita il plugin \'Mappe Online\' per scegliere altre sorgenti di mappe</string>
|
||||||
<string name="map_online_data">Mappe online e a tasselli</string>
|
<string name="map_online_data">Mappe online e a tasselli</string>
|
||||||
|
@ -929,7 +929,7 @@
|
||||||
<string name="favourites_list_activity">Seleziona Preferito</string>
|
<string name="favourites_list_activity">Seleziona Preferito</string>
|
||||||
<string name="local_openstreetmap_act_title">Modifiche OSM</string>
|
<string name="local_openstreetmap_act_title">Modifiche OSM</string>
|
||||||
<string name="download_using_mobile_internet">Non connesso al Wi-Fi. Usare la connessione a Internet attuale per il download\?</string>
|
<string name="download_using_mobile_internet">Non connesso al Wi-Fi. Usare la connessione a Internet attuale per il download\?</string>
|
||||||
<string name="cancel_route">Cancellare il percorso\?</string>
|
<string name="cancel_route">Ignora il percorso\?</string>
|
||||||
<string name="cancel_navigation">Interrompere la navigazione</string>
|
<string name="cancel_navigation">Interrompere la navigazione</string>
|
||||||
<string name="clear_destination">Cancella la destinazione</string>
|
<string name="clear_destination">Cancella la destinazione</string>
|
||||||
<string name="other_location">Altra</string>
|
<string name="other_location">Altra</string>
|
||||||
|
@ -1399,7 +1399,7 @@
|
||||||
<string name="shared_string_ellipsis">…</string>
|
<string name="shared_string_ellipsis">…</string>
|
||||||
<string name="shared_string_ok">Ok</string>
|
<string name="shared_string_ok">Ok</string>
|
||||||
<string name="shared_string_cancel">Annulla</string>
|
<string name="shared_string_cancel">Annulla</string>
|
||||||
<string name="shared_string_dismiss">Annulla</string>
|
<string name="shared_string_dismiss">Ignora</string>
|
||||||
<string name="shared_string_yes">Sì</string>
|
<string name="shared_string_yes">Sì</string>
|
||||||
<string name="shared_string_no">No</string>
|
<string name="shared_string_no">No</string>
|
||||||
<string name="shared_string_on">Acceso</string>
|
<string name="shared_string_on">Acceso</string>
|
||||||
|
@ -1989,7 +1989,7 @@
|
||||||
<string name="first_usage_greeting">Ottieni indicazioni e scopri nuovi luoghi senza una connessione a Internet</string>
|
<string name="first_usage_greeting">Ottieni indicazioni e scopri nuovi luoghi senza una connessione a Internet</string>
|
||||||
<string name="search_another_country">Scegli un\'altra regione</string>
|
<string name="search_another_country">Scegli un\'altra regione</string>
|
||||||
<string name="skip_map_downloading_desc">Non hai mappe offline installate. Si può scegliere una mappa dalla lista o scaricarle in seguito andando su \'Menù - %1$s\'.</string>
|
<string name="skip_map_downloading_desc">Non hai mappe offline installate. Si può scegliere una mappa dalla lista o scaricarle in seguito andando su \'Menù - %1$s\'.</string>
|
||||||
<string name="osm_live_payment_desc">Il costo della sottoscrizione verrà addebitato ogni mese. Puoi scegliere di annullare la sottoscrizione su Google Play in ogni momento.</string>
|
<string name="osm_live_payment_desc">La sottoscrizione viene addebitata ogni mese. Puoi annullarla su Google Play in ogni momento.</string>
|
||||||
<string name="donation_to_osm">Donazione per la comunità di OpenStreetMap</string>
|
<string name="donation_to_osm">Donazione per la comunità di OpenStreetMap</string>
|
||||||
<string name="donation_to_osm_desc">Parte della tua donazione verrà inviata agli utenti che fanno modifiche su OpenStreetMap. Il costo della sottoscrizione rimane inalterato.</string>
|
<string name="donation_to_osm_desc">Parte della tua donazione verrà inviata agli utenti che fanno modifiche su OpenStreetMap. Il costo della sottoscrizione rimane inalterato.</string>
|
||||||
<string name="osm_live_subscription_desc">La sottoscrizione attiva aggiornamenti orari, quotidiani e settimanali e la possibilità di scaricare senza limiti tutte le mappe del mondo.</string>
|
<string name="osm_live_subscription_desc">La sottoscrizione attiva aggiornamenti orari, quotidiani e settimanali e la possibilità di scaricare senza limiti tutte le mappe del mondo.</string>
|
||||||
|
@ -3134,7 +3134,7 @@
|
||||||
<string name="coordinates_format_info">Il formato selezionato sarà applicato per tutta l\'app.</string>
|
<string name="coordinates_format_info">Il formato selezionato sarà applicato per tutta l\'app.</string>
|
||||||
<string name="pref_selected_by_default_for_profiles">Questa impostazione è selezionata di default per i profili: %s</string>
|
<string name="pref_selected_by_default_for_profiles">Questa impostazione è selezionata di default per i profili: %s</string>
|
||||||
<string name="change_default_settings">Cambia impostazioni</string>
|
<string name="change_default_settings">Cambia impostazioni</string>
|
||||||
<string name="discard_changes">Annulla cambiamenti</string>
|
<string name="discard_changes">Annulla modifiche</string>
|
||||||
<string name="apply_to_current_profile">Applica solo a \"%1$s\"</string>
|
<string name="apply_to_current_profile">Applica solo a \"%1$s\"</string>
|
||||||
<string name="apply_to_all_profiles">Applica a tutti i profili</string>
|
<string name="apply_to_all_profiles">Applica a tutti i profili</string>
|
||||||
<string name="start_up_message_pref">Messaggio di avvio</string>
|
<string name="start_up_message_pref">Messaggio di avvio</string>
|
||||||
|
@ -3704,7 +3704,7 @@
|
||||||
<string name="use_volume_buttons_as_zoom_descr">Abilita per controllare il livello di zoom della mappa con i pulsanti del volume del dispositivo.</string>
|
<string name="use_volume_buttons_as_zoom_descr">Abilita per controllare il livello di zoom della mappa con i pulsanti del volume del dispositivo.</string>
|
||||||
<string name="use_volume_buttons_as_zoom">Pulsanti volume come zoom</string>
|
<string name="use_volume_buttons_as_zoom">Pulsanti volume come zoom</string>
|
||||||
<string name="please_provide_point_name_error">Per favore indica un nome per il punto</string>
|
<string name="please_provide_point_name_error">Per favore indica un nome per il punto</string>
|
||||||
<string name="quick_action_remove_next_destination_descr">Il punto di destinazione corrente sul percorso verrà eliminato. Se sarà la Destinazione, la navigazione verrà interrotta.</string>
|
<string name="quick_action_remove_next_destination_descr">Elimina la destinazione successiva nel percorso. Se questa è la destinazione finale, la navigazione si fermerà.</string>
|
||||||
<string name="search_download_wikipedia_maps">Scarica mappe Wikipedia</string>
|
<string name="search_download_wikipedia_maps">Scarica mappe Wikipedia</string>
|
||||||
<string name="plugin_wikipedia_description">Ottieni informazioni sui punti di interesse da Wikipedia. È la tua guida tascabile offline - basta abilitare il plugin Wikipedia e goderti gli articoli sugli oggetti intorno a te.</string>
|
<string name="plugin_wikipedia_description">Ottieni informazioni sui punti di interesse da Wikipedia. È la tua guida tascabile offline - basta abilitare il plugin Wikipedia e goderti gli articoli sugli oggetti intorno a te.</string>
|
||||||
<string name="app_mode_enduro_motorcycle">Moto da enduro</string>
|
<string name="app_mode_enduro_motorcycle">Moto da enduro</string>
|
||||||
|
|
|
@ -3986,4 +3986,19 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">אופני הרים</string>
|
<string name="routing_engine_vehicle_type_mtb">אופני הרים</string>
|
||||||
<string name="message_server_error">שגיאת שרת: %1$s</string>
|
<string name="message_server_error">שגיאת שרת: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">השם כבר קיים</string>
|
<string name="message_name_is_already_exists">השם כבר קיים</string>
|
||||||
|
<string name="announcement_time_off_route">סטייה ממסלול</string>
|
||||||
|
<string name="announcement_time_arrive">הגעה ליעד</string>
|
||||||
|
<string name="show_track_on_map">הצגת המסלול על המפה</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">רכיבה חשמלית</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">רכיבת הרים</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">רכיבת כביש</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">רכיבה רגילה</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">טיול שטח</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">משאית כבדה</string>
|
||||||
|
<string name="delete_online_routing_engine">למחוק את מנוע הניווט המקוון הזה\?</string>
|
||||||
|
<string name="context_menu_read_full">להציג במלואו</string>
|
||||||
|
<string name="context_menu_edit_descr">עריכת תיאור</string>
|
||||||
|
<string name="delete_waypoints">מחיקת נקודות דרך</string>
|
||||||
|
<string name="copy_to_map_markers">העתקה לסמני המפה</string>
|
||||||
|
<string name="copy_to_map_favorites">העתקה למועדפים</string>
|
||||||
</resources>
|
</resources>
|
|
@ -18,9 +18,8 @@
|
||||||
<string name="osmand_parking_pm">po piet</string>
|
<string name="osmand_parking_pm">po piet</string>
|
||||||
<string name="osmand_parking_am">ryto</string>
|
<string name="osmand_parking_am">ryto</string>
|
||||||
<string name="osmand_parking_position_name">Statymo vieta</string>
|
<string name="osmand_parking_position_name">Statymo vieta</string>
|
||||||
<string name="osmand_parking_plugin_description">Šis įskiepis leidžia įsiminti vietą, kurioje palikote savo automobilį ir kiek laiko liko iki parkavimo pabaigos (jei ribojamas laikas).
|
<string name="osmand_parking_plugin_description">Šis įskiepis leidžia įsiminti vietą, kurioje palikote savo automobilį ir kiek laiko liko iki parkavimo pabaigos .
|
||||||
|
\nTiek vieta, tiek laikas yra matomi OsmAnd valdymo skydelyje bei skydelyje žemėlapyje rodinyje. Šis įskiepis taip pat gali įrašyti priminimą į Android kalendorių.</string>
|
||||||
Tiek vieta, tiek laikas yra matomi OsmAnd valdymo skydelyje bei skydelyje žemėlapyje rodinyje. Šis įskiepis taip pat gali įrašyti priminimą į kalendorių.</string>
|
|
||||||
<string name="osmand_parking_plugin_name">Statymo vieta</string>
|
<string name="osmand_parking_plugin_name">Statymo vieta</string>
|
||||||
<string name="context_menu_item_add_parking_point">Žymėti statymo vietą</string>
|
<string name="context_menu_item_add_parking_point">Žymėti statymo vietą</string>
|
||||||
<string name="context_menu_item_delete_parking_point">Naikinti statymo žymę</string>
|
<string name="context_menu_item_delete_parking_point">Naikinti statymo žymę</string>
|
||||||
|
@ -200,9 +199,8 @@ Tiek vieta, tiek laikas yra matomi OsmAnd valdymo skydelyje bei skydelyje žemė
|
||||||
<string name="osmand_service">Foninis režimas</string>
|
<string name="osmand_service">Foninis režimas</string>
|
||||||
<string name="osmand_service_descr">Reikalinga, jei norite naudoti OsmAnd kai ekranas yra išjungtas.</string>
|
<string name="osmand_service_descr">Reikalinga, jei norite naudoti OsmAnd kai ekranas yra išjungtas.</string>
|
||||||
<string name="download_files_not_enough_space">Neužtenka vietos parsiųsti %1$s MB (laisva: %2$s).</string>
|
<string name="download_files_not_enough_space">Neužtenka vietos parsiųsti %1$s MB (laisva: %2$s).</string>
|
||||||
<string name="download_files_question_space">Atsiųsti {0} failą(-us)?
|
<string name="download_files_question_space">Atsiųsti {0} failą(-us)\?
|
||||||
Tam prireiks {1} MB pastoviam saugojimui.
|
\nTam prireiks {1} MB pastoviam saugojimui. (Dabar laisvos vietos yra {2} MB.)</string>
|
||||||
(Dabar laisvos vietos yra {2} MB.)</string>
|
|
||||||
<string name="use_transparent_map_theme">Permatoma tema</string>
|
<string name="use_transparent_map_theme">Permatoma tema</string>
|
||||||
<string name="native_library_not_supported">Aparatinė biblioteka šiame įrenginyje nepalaikoma.</string>
|
<string name="native_library_not_supported">Aparatinė biblioteka šiame įrenginyje nepalaikoma.</string>
|
||||||
<string name="init_native_library">Inicializuojama aparatinė biblioteka…</string>
|
<string name="init_native_library">Inicializuojama aparatinė biblioteka…</string>
|
||||||
|
@ -778,8 +776,28 @@ Tam prireiks {1} MB pastoviam saugojimui.
|
||||||
<string name="avoid_motorway">Vengti greitkelių</string>
|
<string name="avoid_motorway">Vengti greitkelių</string>
|
||||||
<string name="snap_to_road_descr">Poziciją rodyti ant kelių kai naviguojama.</string>
|
<string name="snap_to_road_descr">Poziciją rodyti ant kelių kai naviguojama.</string>
|
||||||
<string name="snap_to_road">Rodyti ant kelio</string>
|
<string name="snap_to_road">Rodyti ant kelio</string>
|
||||||
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Automated Navigation Directions)
|
<string name="osmand_long_description_1000_chars">OsmAnd (OSM Automated Navigation Directions)
|
||||||
\nOsmAnd yra atviro kodo programa naudojanti įvairius OpenStreetMap (OSM) duomenis. Visi žemėlapių duomenys (vektoriniai ar lakštiniai) gali būti išsaugoti telefone ir naudojami be interneto prieigos. OsmAnd taip pat gali pasiūlyti maršruto skaičiavimo paslaugas internete ar įrenginyje, bei balso nurodymus kelionei apskaičiuotu maršrutu. Dalis pagrindinių savybių: - Veikia be interneto (išsaugokite parsiųstus žemėlapius ar jų lakštus įrenginyje) - Kompaktiški vektoriniai viso pasaulio žemėlapiai - Parsisųskite šalies ar regiono žemėlapius tiesiai iš pačios propgramos - Galima sulieti kelis žemėlapop sluoksnius, tokius kaip GPX ar judėjimo istoriją, Lankytinas Vietas, mėgiamas vietas, kontūrų linijas, viešojo transporto stoteles, papildomus žemėlapius su pasirinktinai nustatomu permatomumo lygiu - Adresų ir LV paieška nenaudojant interneto - Vidutinio ilgio maršruto apskaičiavimas be interneto paslaugų - Automobilio, dviračio ir pėsčiojo režimai su: - pasirinktiniu dineos/nakties rodinio perjungimu - pasirinktiniu pagal judėjimo greitį automatiškai nustatomu mąsteliu - pasirinktine žemėlapio orientacija pagal kompaso arba judėjimo kryptį - pasirinktinis eismo juostų nurodymas, greičio ribojimų rodymas, įrašyti ar generuojami balsai Šios nemokamos OsmAnd versijos apribojimai: - Ribojamas žemėlapių parsiuntimų skaičius - Nėra prieigos prie iš Wikipedia parsiunčiamų LV OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas priklauso nuo finansinės paramos, kuri įgalina tolesnį vystymą ir naujų funkcijų kūrimą. Norime paskatinti jus nusipirkti OsmAnd+ programą arba finansiškai prisidėti prie specifinių funkcijų kūrimo arba šiaip paremti programą osmand.net svetainėje.</string>
|
\n
|
||||||
|
\nOsmAnd yra atviro kodo programa naudojanti įvairius OpenStreetMap (OSM) duomenis. Visi žemėlapių duomenys (vektoriniai ar lakštiniai) gali būti išsaugoti telefone ir naudojami be interneto prieigos. OsmAnd taip pat gali pasiūlyti maršruto skaičiavimo paslaugas internete ar įrenginyje, bei balso nurodymus kelionei apskaičiuotu maršrutu.
|
||||||
|
\n
|
||||||
|
\nDalis pagrindinių savybių:
|
||||||
|
\n- Veikia be interneto (išsaugokite parsiųstus žemėlapius ar jų lakštus įrenginyje)
|
||||||
|
\n- Kompaktiški vektoriniai viso pasaulio žemėlapiai
|
||||||
|
\n- Parsisųskite šalies ar regiono žemėlapius tiesiai iš pačios propgramos
|
||||||
|
\n- Galima sulieti kelis žemėlapop sluoksnius, tokius kaip GPX ar judėjimo istoriją, Lankytinas Vietas, mėgiamas vietas, kontūrų linijas, viešojo transporto stoteles, papildomus žemėlapius su pasirinktinai nustatomu permatomumo lygiu
|
||||||
|
\n - Adresų ir LV paieška nenaudojant interneto
|
||||||
|
\n- Vidutinio ilgio maršruto apskaičiavimas be interneto prieigos
|
||||||
|
\n- Automobilio, dviračio ir pėsčiojo režimai su:
|
||||||
|
\n- pasirinktiniu dineos/nakties rodinio perjungimu
|
||||||
|
\n- pasirinktiniu pagal judėjimo greitį automatiškai nustatomu mąsteliu
|
||||||
|
\n- pasirinktine žemėlapio orientacija pagal kompaso arba judėjimo kryptį
|
||||||
|
\n- pasirinktinis eismo juostų nurodymas, greičio ribojimų rodymas, įrašyti ar generuojami balsai
|
||||||
|
\n
|
||||||
|
\nNemokamos OsmAnd versijos apribojimai:
|
||||||
|
\n- Ribojamas žemėlapių parsiuntimų skaičius
|
||||||
|
\n- Nėra prieigos prie iš Wikipedia parsiunčiamų LV
|
||||||
|
\n
|
||||||
|
\n OsmAnd yra aktyviai tobulinama ir mūsų projektas bei jo tolesnis progresas priklauso nuo finansinės paramos, kuri įgalina tolesnį vystymą ir naujų funkcijų kūrimą. Norime paskatinti jus nusipirkti OsmAnd+ programą arba finansiškai prisidėti prie specifinių funkcijų kūrimo arba šiaip paremti programą https://osmand.net svetainėje.</string>
|
||||||
<string name="osmand_plus_short_description_80_chars">OsmAnd - atviro kodo navigacijos programa su žemėlapiais</string>
|
<string name="osmand_plus_short_description_80_chars">OsmAnd - atviro kodo navigacijos programa su žemėlapiais</string>
|
||||||
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions)
|
<string name="osmand_plus_long_description_1000_chars">OsmAnd+ (OSM Automated Navigation Directions)
|
||||||
\n
|
\n
|
||||||
|
@ -1872,9 +1890,9 @@ Failams reikalinga {3} MB laikinam ir {1} MB pastoviam saugojimui.
|
||||||
<string name="osm_live_header">Prenumerata leidžia kas valandą gauti visų pasaulio žemėlapių atnaujinimus.
|
<string name="osm_live_header">Prenumerata leidžia kas valandą gauti visų pasaulio žemėlapių atnaujinimus.
|
||||||
Dalis pajamų grįžta OSM bendruomenei ir apmokamas kiekvienas indėlis į OSM kūrimą.
|
Dalis pajamų grįžta OSM bendruomenei ir apmokamas kiekvienas indėlis į OSM kūrimą.
|
||||||
Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
|
Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
|
||||||
<string name="download_files_question_space_with_temp">Ar siųsti {0} failų?
|
<string name="download_files_question_space_with_temp">Ar siųsti {0} failų\?
|
||||||
Failams reikalinga {3} MB laikinam ir {1} MB pastoviam saugojimui.
|
\nFailams reikalinga {3} MB laikinam ir {1} MB pastoviam saugojimui.
|
||||||
(Šiuo metu prieinama tik {2} MB vietos.)</string>
|
\n(Šiuo metu prieinama tik {2} MB vietos.)</string>
|
||||||
<string name="lang_es_us">Ispanų (Amerikos)</string>
|
<string name="lang_es_us">Ispanų (Amerikos)</string>
|
||||||
<string name="lang_en_gb">Anglų (Junginė Karalystė)</string>
|
<string name="lang_en_gb">Anglų (Junginė Karalystė)</string>
|
||||||
<string name="lang_be_by">Belarusų (Lotynų)</string>
|
<string name="lang_be_by">Belarusų (Lotynų)</string>
|
||||||
|
@ -2419,7 +2437,9 @@ Tai yra puikus būdas paremti OsmAnd ir OSM, jei jie jums patinka.</string>
|
||||||
<string name="passed">Paskutinį kartą naudota: %1$s</string>
|
<string name="passed">Paskutinį kartą naudota: %1$s</string>
|
||||||
<string name="osm_recipient_stat">Taisymų %1$s, suma %2$s mBTC</string>
|
<string name="osm_recipient_stat">Taisymų %1$s, suma %2$s mBTC</string>
|
||||||
<string name="lang_lo">Laosiečių</string>
|
<string name="lang_lo">Laosiečių</string>
|
||||||
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) yra žemėlapio ir navigacijos programa su prieiga prie nemokamų, pasaulinių ir aukštos kokybės OpenStreetMap (OSM) duomenų. Naudokitės balso ir vaizdo navigatoriumi, peržiūrėkite LV (lankytinas vietas), kurkite ir valdytkite GPX kelius, naudojkite kontūro linijos vizualizaciją ir aukščio info (įskiepių pagalba), pasirinkite vairavimo, dviračių, pėsčiųjų režimus, redaguokite OSM duomenis ir daug daugiau.</string>
|
<string name="osmand_extended_description_part1">OsmAnd (OSM Automated Navigation Directions) yra žemėlapio ir navigacijos programa su prieiga prie nemokamų, pasaulinių ir aukštos kokybės OpenStreetMap (OSM) duomenų.
|
||||||
|
\n
|
||||||
|
\nNaudokitės balso ir vaizdo navigatoriumi, peržiūrėkite LV (lankytinas vietas), kurkite ir valdytkite GPX kelius, naudojkite kontūro linijos vizualizaciją ir aukščio info (įskiepių pagalba), pasirinkite vairavimo, dviračių, pėsčiųjų režimus, redaguokite OSM duomenis ir daug daugiau.</string>
|
||||||
<string name="quick_favorites_name_preset">Nuostatos pavadinimas</string>
|
<string name="quick_favorites_name_preset">Nuostatos pavadinimas</string>
|
||||||
<string name="quick_action_add_marker_descr">Bakstelėję veiksmo mygtuką pridėsite žemėlapio žymeklį ekrano centre.</string>
|
<string name="quick_action_add_marker_descr">Bakstelėję veiksmo mygtuką pridėsite žemėlapio žymeklį ekrano centre.</string>
|
||||||
<string name="quick_action_take_audio_note_descr">Bakstelėję veiksmo mygtuką pridėsite garso įrašą ekrano centre.</string>
|
<string name="quick_action_take_audio_note_descr">Bakstelėję veiksmo mygtuką pridėsite garso įrašą ekrano centre.</string>
|
||||||
|
|
|
@ -1526,7 +1526,7 @@
|
||||||
<string name="voice_data_not_supported">Taledataversjon som ikke støttes</string>
|
<string name="voice_data_not_supported">Taledataversjon som ikke støttes</string>
|
||||||
<string name="background_router_service_descr">Sporer posisjonen din mens skjermen er slått av.</string>
|
<string name="background_router_service_descr">Sporer posisjonen din mens skjermen er slått av.</string>
|
||||||
<string name="share_fav_subject">Favoritter delt via OsmAnd</string>
|
<string name="share_fav_subject">Favoritter delt via OsmAnd</string>
|
||||||
<string name="import_file_favourites">Lagre data som GPX-fil eller importere rutepunkter til Favoritter\?</string>
|
<string name="import_file_favourites">Lagre data som GPX-fil eller importere rutepunkter til favoritter\?</string>
|
||||||
<string name="coords_format_descr">Format for geografiske koordinater.</string>
|
<string name="coords_format_descr">Format for geografiske koordinater.</string>
|
||||||
<string name="coords_format">Koordinatformat</string>
|
<string name="coords_format">Koordinatformat</string>
|
||||||
<string name="map_widget_search">Søk</string>
|
<string name="map_widget_search">Søk</string>
|
||||||
|
@ -3919,4 +3919,18 @@
|
||||||
<string name="routing_engine_vehicle_type_cycling_regular">Vanlig sykling</string>
|
<string name="routing_engine_vehicle_type_cycling_regular">Vanlig sykling</string>
|
||||||
<string name="message_server_error">Tjenerfeil: %1$s</string>
|
<string name="message_server_error">Tjenerfeil: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Navnet finnes allerede</string>
|
<string name="message_name_is_already_exists">Navnet finnes allerede</string>
|
||||||
|
<string name="analyze_by_intervals">Analyser ved intervaller (delt intervall)</string>
|
||||||
|
<string name="announcement_time_off_route">Ruteavvik</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Stor lastebil</string>
|
||||||
|
<string name="delete_online_routing_engine">Slett denne nettbaserte rutingsmotoren\?</string>
|
||||||
|
<string name="context_menu_read_full">Les hele</string>
|
||||||
|
<string name="delete_waypoints">Slett rutepunkt</string>
|
||||||
|
<string name="app_mode_gap">Luke</string>
|
||||||
|
<string name="login_open_street_map">Logg inn på OpenStreetMap</string>
|
||||||
|
<string name="user_login">Logg inn</string>
|
||||||
|
<string name="announcement_time_passing">Tidsforbruk</string>
|
||||||
|
<string name="announcement_time_approach">Ankomst</string>
|
||||||
|
<string name="context_menu_edit_descr">Rediger beskrivelse</string>
|
||||||
|
<string name="copy_to_map_markers">Kopier til kartmarkører</string>
|
||||||
|
<string name="copy_to_map_favorites">Kopier til favoritter</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2178,8 +2178,8 @@
|
||||||
<string name="shared_string_time_span">Tijdsduur</string>
|
<string name="shared_string_time_span">Tijdsduur</string>
|
||||||
<string name="shared_string_time_moving">Tijd in beweging</string>
|
<string name="shared_string_time_moving">Tijd in beweging</string>
|
||||||
<string name="routing_attr_driving_style_name">Rijstijl</string>
|
<string name="routing_attr_driving_style_name">Rijstijl</string>
|
||||||
<string name="routing_attr_height_obstacles_name">Gebruik hoogtegegevens</string>
|
<string name="routing_attr_height_obstacles_name">Hoogtegegevens gebruiken</string>
|
||||||
<string name="routing_attr_height_obstacles_description">Factor in hoogtegegevens (van SRTM, ASTER en EU-DEM data).</string>
|
<string name="routing_attr_height_obstacles_description">Gebruik hoogtegegevens (van SRTM, ASTER en EU-DEM data) bij bepalen route.</string>
|
||||||
<string name="shared_string_gpx_track">Track</string>
|
<string name="shared_string_gpx_track">Track</string>
|
||||||
<string name="right_side_navigation">Rechts rijdend</string>
|
<string name="right_side_navigation">Rechts rijdend</string>
|
||||||
<string name="driving_region_automatic">Automatisch</string>
|
<string name="driving_region_automatic">Automatisch</string>
|
||||||
|
@ -3320,9 +3320,9 @@
|
||||||
<string name="route_recalculation">Route herberekening</string>
|
<string name="route_recalculation">Route herberekening</string>
|
||||||
<string name="accessibility_announce">Meld</string>
|
<string name="accessibility_announce">Meld</string>
|
||||||
<string name="login_and_pass">Gebruikersnaam en wachtwoord</string>
|
<string name="login_and_pass">Gebruikersnaam en wachtwoord</string>
|
||||||
<string name="plugin_global_prefs_info">Deze instellingen hebben betrekking op alle profielen</string>
|
<string name="plugin_global_prefs_info">Deze plugin-instellingen hebben betrekking op alle profielen</string>
|
||||||
<string name="osm_editing">OSM Bewerking</string>
|
<string name="osm_editing">OSM Bewerking</string>
|
||||||
<string name="osm_edits_view_descr">U kan al uw niet geüploade bewerkingen of OSM fouten zien in %1$s. Geüploade punten ziet u niet meer.</string>
|
<string name="osm_edits_view_descr">U kunt alle niet-geüploade bewerkingen of OSM-opmerkingen zien in %1$s. Geüploade wijzigingen ziet u niet meer.</string>
|
||||||
<string name="app_mode_osm">OSM</string>
|
<string name="app_mode_osm">OSM</string>
|
||||||
<string name="select_nav_icon_descr">Tijdens navigatie of beweging getoond icoon.</string>
|
<string name="select_nav_icon_descr">Tijdens navigatie of beweging getoond icoon.</string>
|
||||||
<string name="select_map_icon_descr">Bij rust getoond icoon.</string>
|
<string name="select_map_icon_descr">Bij rust getoond icoon.</string>
|
||||||
|
@ -3667,8 +3667,8 @@
|
||||||
<string name="next_segment">Volgende segment</string>
|
<string name="next_segment">Volgende segment</string>
|
||||||
<string name="all_next_segments">Alle volgende segmenten</string>
|
<string name="all_next_segments">Alle volgende segmenten</string>
|
||||||
<string name="all_next_segments_will_be_recalc">Alle volgende segmenten worden opnieuw berekend met het geselecteerde profiel.</string>
|
<string name="all_next_segments_will_be_recalc">Alle volgende segmenten worden opnieuw berekend met het geselecteerde profiel.</string>
|
||||||
<string name="whole_track">De ganse track</string>
|
<string name="whole_track">De gehele route</string>
|
||||||
<string name="route_between_points_whole_track_button_desc">De ganse track wordt herberekend volgens het geselecteerde profiel.</string>
|
<string name="route_between_points_whole_track_button_desc">De gehele route wordt herberekend volgens het geselecteerde profiel.</string>
|
||||||
<string name="pass_whole_track_descr">Punt van de track om te navigeren</string>
|
<string name="pass_whole_track_descr">Punt van de track om te navigeren</string>
|
||||||
<string name="shared_string_save_as_gpx">Bewaar als nieuw trackbestand</string>
|
<string name="shared_string_save_as_gpx">Bewaar als nieuw trackbestand</string>
|
||||||
<string name="save_as_new_track">Bewaar als nieuwe track</string>
|
<string name="save_as_new_track">Bewaar als nieuwe track</string>
|
||||||
|
@ -3730,8 +3730,8 @@
|
||||||
\nDe grafiek is beschikbaar na herberekening.</string>
|
\nDe grafiek is beschikbaar na herberekening.</string>
|
||||||
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
|
<string name="ltr_or_rtl_combine_via_dash">%1$s — %2$s</string>
|
||||||
<string name="import_track_descr">Kies een trackbestand om te volgen of importeer het, vanaf uw apparaat.</string>
|
<string name="import_track_descr">Kies een trackbestand om te volgen of importeer het, vanaf uw apparaat.</string>
|
||||||
<string name="app_mode_gap">Kloof</string>
|
<string name="app_mode_gap">Onderbreking</string>
|
||||||
<string name="shared_string_custom">Op maat</string>
|
<string name="shared_string_custom">Aangepast</string>
|
||||||
<string name="perform_oauth_authorization_description">Voer een OAuth-login uit om osm edit functies te gebruiken</string>
|
<string name="perform_oauth_authorization_description">Voer een OAuth-login uit om osm edit functies te gebruiken</string>
|
||||||
<string name="release_3_5">"• Bijgewerkte app- en profielinstellingen: instellingen zijn nu gerangschikt op type. Elk profiel kan afzonderlijk worden aangepast.
|
<string name="release_3_5">"• Bijgewerkte app- en profielinstellingen: instellingen zijn nu gerangschikt op type. Elk profiel kan afzonderlijk worden aangepast.
|
||||||
\n
|
\n
|
||||||
|
@ -3843,41 +3843,41 @@
|
||||||
<string name="icon_group_service">Onderhoud</string>
|
<string name="icon_group_service">Onderhoud</string>
|
||||||
<string name="icon_group_symbols">Symbolen</string>
|
<string name="icon_group_symbols">Symbolen</string>
|
||||||
<string name="icon_group_sport">Sport</string>
|
<string name="icon_group_sport">Sport</string>
|
||||||
<string name="icon_group_emergency">Noodtoestand</string>
|
<string name="icon_group_emergency">Noodgevallen</string>
|
||||||
<string name="icon_group_travel">Reizen</string>
|
<string name="icon_group_travel">Reizen</string>
|
||||||
<string name="empty_state_my_tracks_desc">Trackbestanden importeren of opnemen</string>
|
<string name="empty_state_my_tracks_desc">Trackbestanden importeren of opnemen</string>
|
||||||
<string name="quick_action_add_gpx">Track waypoint toevoegen</string>
|
<string name="quick_action_add_gpx">Track waypoint toevoegen</string>
|
||||||
<string name="marker_save_as_track">Opslaan als trackbestand</string>
|
<string name="marker_save_as_track">Opslaan als trackbestand</string>
|
||||||
<string name="monitoring_control_start">Rec</string>
|
<string name="monitoring_control_start">Rec</string>
|
||||||
<string name="message_you_need_add_two_points_to_show_graphs">U moet minimaal twee punten toevoegen</string>
|
<string name="message_you_need_add_two_points_to_show_graphs">U moet minimaal twee punten toevoegen</string>
|
||||||
<string name="login_open_street_map">Login op OpenStreetMap</string>
|
<string name="login_open_street_map">Inloggen bij OpenStreetMap</string>
|
||||||
<string name="login_open_street_map_org">Login op OpenStreetMap.org</string>
|
<string name="login_open_street_map_org">Inloggen bij OpenStreetMap.org</string>
|
||||||
<string name="sign_in_with_open_street_map">Login met OpenStreetMap</string>
|
<string name="sign_in_with_open_street_map">Aanmelden via OpenStreetMap (OAuth)</string>
|
||||||
<string name="open_street_map_login_mode">U moet inloggen om nieuwe of gewijzigde wijzigingen te uploaden.
|
<string name="open_street_map_login_mode">U moet inloggen om wijzigingen te uploaden.
|
||||||
\n
|
\n
|
||||||
\nU kunt inloggen met de veilige OAuth-methode of uw login en wachtwoord gebruiken.</string>
|
\nU kunt inloggen met de veilige OAuth-methode of uw loginnaam en wachtwoord gebruiken.</string>
|
||||||
<string name="use_login_password">Gebruik uw login gegevens</string>
|
<string name="use_login_password">Inloggen met gebruikersnaam en wachtwoord.</string>
|
||||||
<string name="login_account">Account</string>
|
<string name="login_account">Account</string>
|
||||||
<string name="user_login">Inloggen</string>
|
<string name="user_login">Gebruikersnaam</string>
|
||||||
<string name="manage_subscription">Abonnement beheren</string>
|
<string name="manage_subscription">Abonnement beheren</string>
|
||||||
<string name="subscription_payment_issue_title">Er is een probleem met uw abonnement. Klik op de knop om naar de Google Play-abonnementsinstellingen te gaan om uw betalingsmethode te corrigeren.</string>
|
<string name="subscription_payment_issue_title">Er is een probleem met uw abonnement. Klik op de knop om naar de Google Play-abonnementsinstellingen te gaan om uw betalingsmethode te corrigeren.</string>
|
||||||
<string name="subscription_expired_title">OsmAnd Live-abonnement is verlopen</string>
|
<string name="subscription_expired_title">OsmAnd Live-abonnement is verlopen</string>
|
||||||
<string name="subscription_paused_title">OsmAnd Live-abonnement is gepauzeerd</string>
|
<string name="subscription_paused_title">OsmAnd Live-abonnement is gepauzeerd</string>
|
||||||
<string name="subscription_on_hold_title">Het OsmAnd Live-abonnement is op wacht gezet</string>
|
<string name="subscription_on_hold_title">Het OsmAnd Live-abonnement is opgeschort</string>
|
||||||
<string name="markers_history">Markeervlaggen geschiedenis</string>
|
<string name="markers_history">Markeervlaggetjes-geschiedenis</string>
|
||||||
<string name="send_files_to_openstreetmap">Stuur het GPX-bestand naar OpenStreetMap</string>
|
<string name="send_files_to_openstreetmap">Stuur het GPX-bestand naar OpenStreetMap</string>
|
||||||
<string name="enter_text_separated">Voer tags in, gescheiden door komma\'s.</string>
|
<string name="enter_text_separated">Voer tags in, gescheiden door komma\'s.</string>
|
||||||
<string name="gpx_upload_public_visibility_descr">Openbaar betekent dat de trace openbaar zal worden getoond in Uw GPS-sporen en in openbare GPS-traceerlijsten. Gegevens die via de API worden geleverd, verwijzen niet naar uw traceerpagina. Tijdaanduidingen van de traceerpunten zijn niet beschikbaar via de openbare GPS-API en de punten zijn niet chronologisch gerangschikt. Andere gebruikers kunnen de onbewerkte tracering echter nog steeds downloaden van de openbare traceringslijst en eventuele tijdaanduiding erin.</string>
|
<string name="gpx_upload_public_visibility_descr">\"Publiek\" betekent dat de track openbaar wordt getoond in \"Jouw GPS-tracks\" en in openbare GPS-track-lijsten. Trackpoints die d.m.v. de API worden gedownload zullen niet aan je oorspronkelijke trackpagina refereren. Tijden in de tracks zijn niet beschikbaar in de publieke GPS API, maar de punten zullen wel chronologisch geordend zijn. Echter, andere gebruikers kunnen de track van de openbare GPS-track-lijsten downloaden met alle tijdinformatie.</string>
|
||||||
<string name="gpx_upload_private_visibility_descr">Privé betekent dat de trace niet in openbare vermeldingen zal verschijnen, maar trackpoints ervan zullen nog steeds beschikbaar zijn via de openbare GPS API zonder tijdaanduiding, maar zullen niet chronologisch worden gerangschikt.</string>
|
<string name="gpx_upload_private_visibility_descr">\"Persoonlijk\" betekent dat de track niet wordt getoond in openbare GPS-track-lijsten, maar de trackpunten zijn wel beschikbaar in volgorde van tijd door de publieke GPS API, maar zonder tijdinformatie.</string>
|
||||||
<string name="gpx_upload_identifiable_visibility_descr">Identificeerbaar betekent dat de trace openbaar wordt getoond in uw GPS-sporen en in openbare GPS-trace-lijsten, dat wil zeggen dat andere gebruikers de onbewerkte trace kunnen downloaden en deze aan uw gebruikersnaam kunnen koppelen. Gegevens die via de trackpoints-API worden aangeboden, verwijzen naar uw oorspronkelijke tracepagina. Tijdaanduidingen van de traceerpunten zijn beschikbaar via de openbare GPS-API.</string>
|
<string name="gpx_upload_identifiable_visibility_descr">\"Identificeerbaar\" betekent dat de trace openbaar wordt getoond in uw GPS-sporen en in openbare GPS-trace-lijsten. Dat wil zeggen dat andere gebruikers de onbewerkte trace kunnen downloaden en deze aan uw gebruikersnaam kunnen koppelen. Gegevens die via de trackpoints-API worden aangeboden, verwijzen naar uw oorspronkelijke tracepagina. Tijdaanduidingen van de traceerpunten zijn beschikbaar via de openbare GPS-API.</string>
|
||||||
<string name="gpx_upload_trackable_visibility_descr">Trackbaar betekent dat de trace niet in openbare vermeldingen zal verschijnen, maar trackpoints ervan zullen nog steeds beschikbaar zijn via de openbare GPS API met tijdaanduiding. Andere gebruikers kunnen alleen verwerkte trackpoints downloaden van uw trace die niet rechtstreeks aan u kunnen worden gekoppeld.</string>
|
<string name="gpx_upload_trackable_visibility_descr">\"Traceerbaar\" betekent dat de track niet wordt getoond in openbare GPS-track-lijsten maar de trackpunten zijn wel beschikbaar door de publieke GPS API met tijdinformatie. Andere gebruikers kunnen alleen bewerkte trackpunten downloaden die niet aan jou herleid kunnen worden.</string>
|
||||||
<string name="osm_edit_close_note">Sluit OSM Note</string>
|
<string name="osm_edit_close_note">Sluit OSM Note</string>
|
||||||
<string name="osm_edit_comment_note">Opmerking maken bij OSM-nota</string>
|
<string name="osm_edit_comment_note">Opmerking maken bij OSM-nota</string>
|
||||||
<string name="osm_login_descr">U kunt inloggen met de veilige OAuth-methode of uw login en wachtwoord gebruiken.</string>
|
<string name="osm_login_descr">U kunt inloggen met de veilige OAuth-methode, of uw loginnaam en wachtwoord gebruiken.</string>
|
||||||
<string name="shared_string_add_photo">Een foto toevoegen</string>
|
<string name="shared_string_add_photo">Een foto toevoegen</string>
|
||||||
<string name="register_on_openplacereviews">Registreer u op
|
<string name="register_on_openplacereviews">Registreer u op
|
||||||
\nOpenPlaceReviews.org</string>
|
\nOpenPlaceReviews.org</string>
|
||||||
<string name="register_on_openplacereviews_desc">Foto\'s zijn afkomstig van het open data-project OpenPlaceReviews.org. Om uw foto\'s te uploaden, moet u zich aanmelden op deze website.</string>
|
<string name="register_on_openplacereviews_desc">Foto\'s zijn afkomstig van het open data-project OpenPlaceReviews.org. Om uw foto\'s te uploaden, moet u zich aanmelden op hun website.</string>
|
||||||
<string name="register_opr_create_new_account">Maak een nieuw account aan</string>
|
<string name="register_opr_create_new_account">Maak een nieuw account aan</string>
|
||||||
<string name="register_opr_have_account">Ik heb al een account</string>
|
<string name="register_opr_have_account">Ik heb al een account</string>
|
||||||
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
<string name="ltr_or_rtl_combine_via_star">%1$s * %2$s</string>
|
||||||
|
@ -3954,4 +3954,43 @@
|
||||||
<string name="routing_attr_allow_intermittent_name">Laat regelmatig droogvallende waterwegen toe</string>
|
<string name="routing_attr_allow_intermittent_name">Laat regelmatig droogvallende waterwegen toe</string>
|
||||||
<string name="shared_string_enter_param">Geef een parameter</string>
|
<string name="shared_string_enter_param">Geef een parameter</string>
|
||||||
<string name="keep_it_empty_if_not">Laat leeg indien niet</string>
|
<string name="keep_it_empty_if_not">Laat leeg indien niet</string>
|
||||||
|
<string name="analyze_by_intervals">Analyseren met intervallen</string>
|
||||||
|
<string name="upload_to_openstreetmap">Uploaden naar OpenStreetMap</string>
|
||||||
|
<string name="edit_track">GPX-track bewerken</string>
|
||||||
|
<string name="rename_track">GPX-track hernoemen</string>
|
||||||
|
<string name="change_folder">Map wijzigen</string>
|
||||||
|
<string name="shared_string_sec">sec</string>
|
||||||
|
<string name="announcement_time_approach">Bij nadering</string>
|
||||||
|
<string name="announcement_time_passing">Bij passeren</string>
|
||||||
|
<string name="announcement_time_prepare_long">Ruime vooraankondiging</string>
|
||||||
|
<string name="announcement_time_prepare">Vooraankondiging</string>
|
||||||
|
<string name="announcement_time_off_route">Afwijking van de route</string>
|
||||||
|
<string name="announcement_time_arrive">Aankomst op bestemming</string>
|
||||||
|
<string name="shared_string_turn">Bocht</string>
|
||||||
|
<string name="announcement_time_intervals">Tijd- en afstandsintervallen</string>
|
||||||
|
<string name="announcement_time_descr">De aankondigingstijd van verschillende aankondigen hangt af van type en huidige snelheid.</string>
|
||||||
|
<string name="announcement_time_title">Aankondigingstijd</string>
|
||||||
|
<string name="start_recording">Start opname</string>
|
||||||
|
<string name="show_track_on_map">Toon GPX-track op de kaart</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Rolstoel</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Hiken</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Wandelen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Elektische Fiets</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Mountainbiken</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Fietsen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Normaal Fietsen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Vrachtwagen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Kleine Vrachtwagen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Vrachtwagen</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Scooter</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Racefiets</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">Mountainbike</string>
|
||||||
|
<string name="message_server_error">Server fout: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">Deze naam bestaat al</string>
|
||||||
|
<string name="delete_online_routing_engine">Deze Online-routeservice verwijderen\?</string>
|
||||||
|
<string name="context_menu_read_full">Helemaal inlezen</string>
|
||||||
|
<string name="context_menu_edit_descr">Beschrijving bewerken</string>
|
||||||
|
<string name="delete_waypoints">Waypoints verwijderen</string>
|
||||||
|
<string name="copy_to_map_markers">Kopiëren naar Markeervlaggetjes</string>
|
||||||
|
<string name="copy_to_map_favorites">Kopiëren naar Favorieten</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3995,4 +3995,10 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
<string name="message_server_error">Erro de servidor: %1$s</string>
|
<string name="message_server_error">Erro de servidor: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">O nome já existe</string>
|
<string name="message_name_is_already_exists">O nome já existe</string>
|
||||||
|
<string name="context_menu_edit_descr">Editar descrição</string>
|
||||||
|
<string name="delete_waypoints">Apagar ponto fixo</string>
|
||||||
|
<string name="copy_to_map_markers">Copiar para marcadores de mapa</string>
|
||||||
|
<string name="copy_to_map_favorites">Copiar para favoritos</string>
|
||||||
|
<string name="delete_online_routing_engine">Excluir este mecanismo de roteamento online\?</string>
|
||||||
|
<string name="context_menu_read_full">Ler na íntegra</string>
|
||||||
</resources>
|
</resources>
|
|
@ -1185,7 +1185,7 @@
|
||||||
<string name="no_route">Нет маршрута</string>
|
<string name="no_route">Нет маршрута</string>
|
||||||
<string name="gps_not_available">Включите GPS в настройках</string>
|
<string name="gps_not_available">Включите GPS в настройках</string>
|
||||||
<string name="map_widget_show_destination_arrow">Показывать направление к пункту назначения</string>
|
<string name="map_widget_show_destination_arrow">Показывать направление к пункту назначения</string>
|
||||||
<string name="enable_plugin_monitoring_services">Включите плагин «Запись поездки» для использования сервисов мониторинга (запись GPX, сопровождение в реальном времени)</string>
|
<string name="enable_plugin_monitoring_services">Включите плагин «Запись поездки» для использования служб мониторинга (запись GPX, сопровождение в реальном времени)</string>
|
||||||
<string name="rendering_attr_roadColors_description">Выберите цветовую схему дорог:</string>
|
<string name="rendering_attr_roadColors_description">Выберите цветовую схему дорог:</string>
|
||||||
<string name="rendering_attr_roadColors_name">Цветовая схема дорог</string>
|
<string name="rendering_attr_roadColors_name">Цветовая схема дорог</string>
|
||||||
<string name="route_descr_lat_lon">Ш %1$.3f Д %2$.3f</string>
|
<string name="route_descr_lat_lon">Ш %1$.3f Д %2$.3f</string>
|
||||||
|
@ -1731,7 +1731,7 @@
|
||||||
<string name="shared_string_selected_lowercase">выбранные</string>
|
<string name="shared_string_selected_lowercase">выбранные</string>
|
||||||
<string name="shared_string_none">Нет</string>
|
<string name="shared_string_none">Нет</string>
|
||||||
<string name="shared_string_deselect">Отменить выбор</string>
|
<string name="shared_string_deselect">Отменить выбор</string>
|
||||||
<string name="shared_string_deselect_all">Отменить выбор всех</string>
|
<string name="shared_string_deselect_all">Отменить выбор</string>
|
||||||
<string name="shared_string_share">Поделиться</string>
|
<string name="shared_string_share">Поделиться</string>
|
||||||
<string name="shared_string_my_places">Мои места</string>
|
<string name="shared_string_my_places">Мои места</string>
|
||||||
<string name="shared_string_my_favorites">Избранные</string>
|
<string name="shared_string_my_favorites">Избранные</string>
|
||||||
|
@ -3225,7 +3225,7 @@
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="contour_lines_and_hillshade">Контурные линии и затенение рельефа</string>
|
<string name="contour_lines_and_hillshade">Контурные линии и затенение рельефа</string>
|
||||||
<string name="routing_attr_prefer_unpaved_name">Предпочитать грунтовые дороги</string>
|
<string name="routing_attr_prefer_unpaved_name">Предпочитать грунтовые дороги</string>
|
||||||
<string name="routing_attr_prefer_unpaved_description">Предпочитать грунтовые дороги.</string>
|
<string name="routing_attr_prefer_unpaved_description">Предпочитать грунтовые дороги</string>
|
||||||
<string name="update_all_maps_q">Вы уверены, что хотите обновить все карты (%1$d)\?</string>
|
<string name="update_all_maps_q">Вы уверены, что хотите обновить все карты (%1$d)\?</string>
|
||||||
<string name="apply_preference_to_all_profiles">Вы можете применить это ко всем или только к выбранному профилю.</string>
|
<string name="apply_preference_to_all_profiles">Вы можете применить это ко всем или только к выбранному профилю.</string>
|
||||||
<string name="shared_preference">Общий</string>
|
<string name="shared_preference">Общий</string>
|
||||||
|
@ -3713,7 +3713,7 @@
|
||||||
<string name="quick_action_remove_next_destination">Удалить ближайший пункт</string>
|
<string name="quick_action_remove_next_destination">Удалить ближайший пункт</string>
|
||||||
<string name="please_provide_point_name_error">Задайте название точки</string>
|
<string name="please_provide_point_name_error">Задайте название точки</string>
|
||||||
<string name="quick_action_remove_next_destination_descr">Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится.</string>
|
<string name="quick_action_remove_next_destination_descr">Следующая точка маршрута будет удалена. Если это конечный пункт, навигация завершится.</string>
|
||||||
<string name="plugin_wikipedia_description">Информация о достопримечательностях из Википедии. Ваш карманный офлайн-путеводитель — просто включите плагин Википедии и читайте об объектах вокруг вас.</string>
|
<string name="plugin_wikipedia_description">Информация о достопримечательностях из Википедии, карманного автономного путеводителя со статьями о местах и направлениях.</string>
|
||||||
<string name="search_download_wikipedia_maps">Скачать карты Википедии</string>
|
<string name="search_download_wikipedia_maps">Скачать карты Википедии</string>
|
||||||
<string name="app_mode_enduro_motorcycle">Эндуро мотоцикл</string>
|
<string name="app_mode_enduro_motorcycle">Эндуро мотоцикл</string>
|
||||||
<string name="app_mode_motor_scooter">Мотороллер</string>
|
<string name="app_mode_motor_scooter">Мотороллер</string>
|
||||||
|
@ -3937,4 +3937,53 @@
|
||||||
<string name="shared_string_folders">Папки</string>
|
<string name="shared_string_folders">Папки</string>
|
||||||
<string name="select_folder">Выбор папки</string>
|
<string name="select_folder">Выбор папки</string>
|
||||||
<string name="select_folder_descr">Выберите папку или добавьте новую</string>
|
<string name="select_folder_descr">Выберите папку или добавьте новую</string>
|
||||||
|
<string name="voice_prompts_timetable">Время голосовых подсказок</string>
|
||||||
|
<string name="elevation_data">Можно использовать данные о высотах для учёта подъёма/спуска поездки</string>
|
||||||
|
<string name="routing_attr_prefer_hiking_routes_description">Предпочитать пешеходные маршруты</string>
|
||||||
|
<string name="shared_string_subtype">Подтип</string>
|
||||||
|
<string name="shared_string_enter_param">Введите параметр</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Пешеход</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Самокат</string>
|
||||||
|
<string name="analyze_by_intervals">Анализ по интервалам (по отдельности)</string>
|
||||||
|
<string name="announcement_time_prepare_long">Заблаговременно</string>
|
||||||
|
<string name="announcement_time_prepare">Заранее</string>
|
||||||
|
<string name="announcement_time_passing">При прохождении</string>
|
||||||
|
<string name="announcement_time_approach">При приближении</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Инвалидная коляска</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Пеший туризм</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Малый грузовик</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Грузовик</string>
|
||||||
|
<string name="copy_to_map_markers">Копировать в маркеры</string>
|
||||||
|
<string name="copy_to_map_favorites">Копировать в избранное</string>
|
||||||
|
<string name="delete_online_routing_engine">Удалить онлайн-маршрутизатор\?</string>
|
||||||
|
<string name="routing_attr_prefer_hiking_routes_name">Предпочитать пешеходные маршруты</string>
|
||||||
|
<string name="add_online_routing_engine">Добавить онлайн-маршрутизатор</string>
|
||||||
|
<string name="edit_online_routing_engine">Редактировать онлайн-маршрутизатор</string>
|
||||||
|
<string name="shared_string_api_key">Ключ API</string>
|
||||||
|
<string name="shared_string_server_url">URL-адрес сервера</string>
|
||||||
|
<string name="keep_it_empty_if_not">Оставить пустым, если не</string>
|
||||||
|
<string name="online_routing_example_hint">URL со всеми параметрами будет выглядеть так:</string>
|
||||||
|
<string name="test_route_calculation">Тест расчёта маршрута</string>
|
||||||
|
<string name="routing_engine_vehicle_type_car">Автомобиль</string>
|
||||||
|
<string name="online_routing_engine">Онлайн-маршрутизатор</string>
|
||||||
|
<string name="online_routing_engines">Онлайн-маршрутизаторы</string>
|
||||||
|
<string name="shared_string_empty">Пусто</string>
|
||||||
|
<string name="upload_to_openstreetmap">Отправить в OpenStreetMap</string>
|
||||||
|
<string name="edit_track">Редактировать трек</string>
|
||||||
|
<string name="rename_track">Переименовать трек</string>
|
||||||
|
<string name="change_folder">Изменить папку</string>
|
||||||
|
<string name="shared_string_sec">сек.</string>
|
||||||
|
<string name="announcement_time_off_route">Вне маршрута</string>
|
||||||
|
<string name="announcement_time_arrive">Прибытие в пункт назначения</string>
|
||||||
|
<string name="shared_string_turn">Поворот</string>
|
||||||
|
<string name="announcement_time_intervals">Интервалы времени и расстояния</string>
|
||||||
|
<string name="announcement_time_title">Время объявления</string>
|
||||||
|
<string name="announcement_time_descr">Время объявления различных голосовых подсказок зависит от типа подсказки, текущей скорости навигации и скорости навигации по умолчанию.</string>
|
||||||
|
<string name="start_recording">Начать запись</string>
|
||||||
|
<string name="show_track_on_map">Показать трек на карте</string>
|
||||||
|
<string name="message_server_error">Ошибка сервера: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">Имя уже существует</string>
|
||||||
|
<string name="context_menu_read_full">Читать полностью</string>
|
||||||
|
<string name="context_menu_edit_descr">Редактировать описание</string>
|
||||||
|
<string name="delete_waypoints">Удалить путевые точки</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3964,4 +3964,22 @@
|
||||||
<string name="select_folder">Ischerta sa cartella</string>
|
<string name="select_folder">Ischerta sa cartella</string>
|
||||||
<string name="select_folder_descr">Ischerta una cartella o crea·nde una noa</string>
|
<string name="select_folder_descr">Ischerta una cartella o crea·nde una noa</string>
|
||||||
<string name="shared_string_empty">Bòidu</string>
|
<string name="shared_string_empty">Bòidu</string>
|
||||||
|
<string name="announcement_time_intervals">Intervallos de tempus e de distàntzia</string>
|
||||||
|
<string name="start_recording">Incumintza a registrare</string>
|
||||||
|
<string name="show_track_on_map">Ammustra sa rasta in sa mapa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Cadira a rodas</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Escursionismu</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">A pee</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Tziclismu elètricu</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Tziclismu de monte</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Tziclismu in carreras</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Tziclismu regulare</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Veìculu de trasportu</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Camioneta</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Càmion</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Motorinu (Scooter)</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Bitzicleta de cursa</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">MTB (motosilurante)</string>
|
||||||
|
<string name="message_server_error">Errore de su serbidore: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">Su nùmene esistit giai</string>
|
||||||
</resources>
|
</resources>
|
|
@ -160,7 +160,7 @@
|
||||||
<string name="local_openstreetmap_delete">Vymazať úpravu</string>
|
<string name="local_openstreetmap_delete">Vymazať úpravu</string>
|
||||||
<string name="local_openstreetmap_descr_title">Asynchrónne upravovanie OSM:</string>
|
<string name="local_openstreetmap_descr_title">Asynchrónne upravovanie OSM:</string>
|
||||||
<string name="local_openstreetmap_settings">OSM POI/poznámky uložené v zariadení</string>
|
<string name="local_openstreetmap_settings">OSM POI/poznámky uložené v zariadení</string>
|
||||||
<string name="local_openstreetmap_settings_descr">Zobraziť a spravovať OSM bodu záujmu/poznámky uložené v databáze v zariadení.</string>
|
<string name="local_openstreetmap_settings_descr">Zobraziť a spravovať OSM body záujmu/poznámky uložené v databáze v zariadení.</string>
|
||||||
<string name="live_monitoring_interval_descr">Určiť interval stopovania naživo.</string>
|
<string name="live_monitoring_interval_descr">Určiť interval stopovania naživo.</string>
|
||||||
<string name="live_monitoring_interval">Interval stopovania naživo</string>
|
<string name="live_monitoring_interval">Interval stopovania naživo</string>
|
||||||
<string name="live_monitoring_url_descr">Zadajte webovú adresu stopovania naživo so syntaxom parametrov: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
<string name="live_monitoring_url_descr">Zadajte webovú adresu stopovania naživo so syntaxom parametrov: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||||
|
@ -698,7 +698,7 @@
|
||||||
<string name="edit_filter_create_message">Filter \'%1$s\' bol vytvorený</string>
|
<string name="edit_filter_create_message">Filter \'%1$s\' bol vytvorený</string>
|
||||||
<string name="unknown_from_location">Východzí bod nebol zatiaľ zistený.</string>
|
<string name="unknown_from_location">Východzí bod nebol zatiaľ zistený.</string>
|
||||||
<string name="confirm_interrupt_download">Zrušiť sťahovanie\?</string>
|
<string name="confirm_interrupt_download">Zrušiť sťahovanie\?</string>
|
||||||
<string name="basemap_was_selected_to_download">Základná potrebná pre základné funkcie aplikácie bola zaradená na stiahnutie.</string>
|
<string name="basemap_was_selected_to_download">Základná mapa potrebná pre základné funkcie aplikácie bola zaradená na stiahnutie.</string>
|
||||||
<string name="shared_string_name">Názov</string>
|
<string name="shared_string_name">Názov</string>
|
||||||
<string name="favourites_edit_dialog_category">Kategória</string>
|
<string name="favourites_edit_dialog_category">Kategória</string>
|
||||||
<string name="navigate_point_format_D">DDD.DDDDD</string>
|
<string name="navigate_point_format_D">DDD.DDDDD</string>
|
||||||
|
@ -1091,7 +1091,7 @@
|
||||||
<string name="index_item_world_altitude_correction">Svetové korekcie nadmorskej výšky</string>
|
<string name="index_item_world_altitude_correction">Svetové korekcie nadmorskej výšky</string>
|
||||||
<string name="index_item_world_seamarks">Svetové námorné značky</string>
|
<string name="index_item_world_seamarks">Svetové námorné značky</string>
|
||||||
<string name="index_item_world_bitcoin_payments">Svetové platby bitcoinom</string>
|
<string name="index_item_world_bitcoin_payments">Svetové platby bitcoinom</string>
|
||||||
<string name="index_item_world_basemap">Svetová základná mapa</string>
|
<string name="index_item_world_basemap">Svetová prehľadová mapa</string>
|
||||||
<string name="index_item_world_ski">Svetová lyžiarska mapa</string>
|
<string name="index_item_world_ski">Svetová lyžiarska mapa</string>
|
||||||
<string name="lang_hr">Chorvátsky (Hrvatski)</string>
|
<string name="lang_hr">Chorvátsky (Hrvatski)</string>
|
||||||
<string name="lang_zh">Čínsky (中国的)</string>
|
<string name="lang_zh">Čínsky (中国的)</string>
|
||||||
|
@ -2696,7 +2696,7 @@
|
||||||
<string name="shared_string_bookmark">Záložka</string>
|
<string name="shared_string_bookmark">Záložka</string>
|
||||||
<string name="hide_full_description">Skryť celý popis</string>
|
<string name="hide_full_description">Skryť celý popis</string>
|
||||||
<string name="show_full_description">Zobraziť celý popis</string>
|
<string name="show_full_description">Zobraziť celý popis</string>
|
||||||
<string name="off_road_render_descr">Pre jazdenie mimo cesty v teréne (off-road) založený na štýle \'Topo\' a pre použitie s podkladovou mapou zo zelených satelitných snímok. Znížená hrúbka ciest, zvýšená hrúbka poľných ciest, chorníkov, cyklistických a iných trás.</string>
|
<string name="off_road_render_descr">Pre jazdenie mimo cesty v teréne (off-road) založený na štýle \'Topo\' a pre použitie s podkladovou mapou zo zelených satelitných snímok. Znížená hrúbka ciest, zvýšená hrúbka poľných ciest, chodníkov, cyklistických a iných trás.</string>
|
||||||
<string name="nautical_render_descr">Pre námornú navigáciu. Obsahuje bóje, majáky, vodné cesty, morské trasy a značky, prístavy, námorné služby a hĺbkové vrstevnice.</string>
|
<string name="nautical_render_descr">Pre námornú navigáciu. Obsahuje bóje, majáky, vodné cesty, morské trasy a značky, prístavy, námorné služby a hĺbkové vrstevnice.</string>
|
||||||
<string name="ski_map_render_descr">Pre lyžovanie. Obsahuje zjazdovky, lyžiarske vleky a iné objekty pre lyžiarov. Druhoradé objekty na mape sú menej výrazné.</string>
|
<string name="ski_map_render_descr">Pre lyžovanie. Obsahuje zjazdovky, lyžiarske vleky a iné objekty pre lyžiarov. Druhoradé objekty na mape sú menej výrazné.</string>
|
||||||
<string name="light_rs_render_descr">Jednoduchý štýl pre navigáciu auta. Príjemný nočný režim, vrstevnice, kontrastné oranžové cesty, druhoradé objekty na mape sú menej výrazné.</string>
|
<string name="light_rs_render_descr">Jednoduchý štýl pre navigáciu auta. Príjemný nočný režim, vrstevnice, kontrastné oranžové cesty, druhoradé objekty na mape sú menej výrazné.</string>
|
||||||
|
@ -3995,4 +3995,10 @@
|
||||||
<string name="message_server_error">Chyba servera: %1$s</string>
|
<string name="message_server_error">Chyba servera: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Názov už existuje</string>
|
<string name="message_name_is_already_exists">Názov už existuje</string>
|
||||||
<string name="shared_string_turn">Odbočiť</string>
|
<string name="shared_string_turn">Odbočiť</string>
|
||||||
|
<string name="delete_online_routing_engine">Odstrániť túto online navigačnú službu\?</string>
|
||||||
|
<string name="context_menu_read_full">Prečítať celé</string>
|
||||||
|
<string name="context_menu_edit_descr">Upraviť popis</string>
|
||||||
|
<string name="delete_waypoints">Odstrániť body trasy</string>
|
||||||
|
<string name="copy_to_map_markers">Skopírovať do mapových značiek</string>
|
||||||
|
<string name="copy_to_map_favorites">Skopírovať do obľúbených</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3271,4 +3271,42 @@
|
||||||
<string name="plan_route_create_new_route">Ustvari novo pot</string>
|
<string name="plan_route_create_new_route">Ustvari novo pot</string>
|
||||||
<string name="shared_string_done">Končano</string>
|
<string name="shared_string_done">Končano</string>
|
||||||
<string name="overwrite_track">Prepiši sled</string>
|
<string name="overwrite_track">Prepiši sled</string>
|
||||||
|
<string name="shared_string_folders">Mape</string>
|
||||||
|
<string name="select_folder">Izberi mapo</string>
|
||||||
|
<string name="select_folder_descr">Izberi mapo ali dodaj novo</string>
|
||||||
|
<string name="shared_string_empty">Prazno</string>
|
||||||
|
<string name="analyze_by_intervals">Analiziraj po intervalih (razdelitveni interval)</string>
|
||||||
|
<string name="upload_to_openstreetmap">Naloži v OpenStreetMap</string>
|
||||||
|
<string name="edit_track">Uredi sled</string>
|
||||||
|
<string name="rename_track">Preimenuj sled</string>
|
||||||
|
<string name="change_folder">Spremeni mapo</string>
|
||||||
|
<string name="shared_string_sec">sek</string>
|
||||||
|
<string name="announcement_time_approach">Pristop</string>
|
||||||
|
<string name="announcement_time_prepare">Pripravi se</string>
|
||||||
|
<string name="announcement_time_off_route">Izven poti</string>
|
||||||
|
<string name="announcement_time_arrive">Prihod na cilj</string>
|
||||||
|
<string name="shared_string_turn">Zavoj</string>
|
||||||
|
<string name="announcement_time_intervals">Intervali časa in razdalje</string>
|
||||||
|
<string name="announcement_time_descr">Čas objave različnih glasovnih pozivov je odvisen od vrste poziva, trenutne hitrosti navigacije in privzete hitrosti navigacije.</string>
|
||||||
|
<string name="announcement_time_title">Čas objave</string>
|
||||||
|
<string name="start_recording">Začni snemanje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_wheelchair">Invalidski voziček</string>
|
||||||
|
<string name="routing_engine_vehicle_type_walking">Hoja</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hiking">Pohodništvo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_electric">Električno kolesarjenje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_mountain">Gorsko kolesarjenje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_road">Cestno kolesarjenje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_cycling_regular">Redno kolesarjenje</string>
|
||||||
|
<string name="routing_engine_vehicle_type_hgv">Težko tovorno vozilo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_small_truck">Majhno tovorno vozilo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_truck">Tovorno vozilo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_scooter">Skuter</string>
|
||||||
|
<string name="routing_engine_vehicle_type_racingbike">Dirkalno kolo</string>
|
||||||
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
|
<string name="message_server_error">Napaka strežnika: %1$s</string>
|
||||||
|
<string name="message_name_is_already_exists">To ime že obstaja</string>
|
||||||
|
<string name="context_menu_read_full">Preberi v celoti</string>
|
||||||
|
<string name="context_menu_edit_descr">Uredi opis</string>
|
||||||
|
<string name="delete_waypoints">Brisanje točk</string>
|
||||||
|
<string name="copy_to_map_markers">Kopiraj na oznake na zemljevidu</string>
|
||||||
</resources>
|
</resources>
|
|
@ -4001,4 +4001,10 @@
|
||||||
<string name="routing_engine_vehicle_type_racingbike">Yarış bisikleti</string>
|
<string name="routing_engine_vehicle_type_racingbike">Yarış bisikleti</string>
|
||||||
<string name="message_server_error">Sunucu hatası: %1$s</string>
|
<string name="message_server_error">Sunucu hatası: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Ad zaten var</string>
|
<string name="message_name_is_already_exists">Ad zaten var</string>
|
||||||
|
<string name="delete_waypoints">Ara noktaları sil</string>
|
||||||
|
<string name="copy_to_map_markers">Harita işaretleyicilerine kopyala</string>
|
||||||
|
<string name="copy_to_map_favorites">Sık kullanılanlara kopyala</string>
|
||||||
|
<string name="delete_online_routing_engine">Bu çevrim içi yönlendirme motoru silinsin mi\?</string>
|
||||||
|
<string name="context_menu_read_full">Tamamını oku</string>
|
||||||
|
<string name="context_menu_edit_descr">Açıklamayı düzenle</string>
|
||||||
</resources>
|
</resources>
|
|
@ -2790,7 +2790,7 @@
|
||||||
<string name="poi_crop_rice">Вирощується культура: рис</string>
|
<string name="poi_crop_rice">Вирощується культура: рис</string>
|
||||||
<string name="poi_nuclear_explosion_type_cratering_burst">Вид вибуху: неглибокого закладення</string>
|
<string name="poi_nuclear_explosion_type_cratering_burst">Вид вибуху: неглибокого закладення</string>
|
||||||
<string name="poi_provided_for_adult_yes">Послуги надаються дорослим: так</string>
|
<string name="poi_provided_for_adult_yes">Послуги надаються дорослим: так</string>
|
||||||
<string name="poi_xmas_note">Різдво: нотатка</string>
|
<string name="poi_xmas_note">Різдво: примітка</string>
|
||||||
<string name="poi_cuisine_wings">Крильця</string>
|
<string name="poi_cuisine_wings">Крильця</string>
|
||||||
<string name="poi_cuisine_jamaican">Ямайська</string>
|
<string name="poi_cuisine_jamaican">Ямайська</string>
|
||||||
<string name="poi_outdoor_seating_pedestrian_zone">Місця на відкритому повітрі: пішохідна зона</string>
|
<string name="poi_outdoor_seating_pedestrian_zone">Місця на відкритому повітрі: пішохідна зона</string>
|
||||||
|
@ -3019,7 +3019,7 @@
|
||||||
<string name="poi_drink_wine_yes">Вино: так</string>
|
<string name="poi_drink_wine_yes">Вино: так</string>
|
||||||
<string name="poi_vending_drinks_food">Напої і закуски</string>
|
<string name="poi_vending_drinks_food">Напої і закуски</string>
|
||||||
<string name="poi_wetland_saltmarsh">Болото, періодично затоплюване морською водою</string>
|
<string name="poi_wetland_saltmarsh">Болото, періодично затоплюване морською водою</string>
|
||||||
<string name="poi_note">Нотатка</string>
|
<string name="poi_note">Примітка</string>
|
||||||
<string name="poi_crop_flowers">Вирощується культура: квіти</string>
|
<string name="poi_crop_flowers">Вирощується культура: квіти</string>
|
||||||
<string name="poi_water_heater_no">Водонагрівач: відсутній</string>
|
<string name="poi_water_heater_no">Водонагрівач: відсутній</string>
|
||||||
<string name="poi_free_flying_site_orientation_e">Орієнтація майданчика для вільного польоту: схід (E)</string>
|
<string name="poi_free_flying_site_orientation_e">Орієнтація майданчика для вільного польоту: схід (E)</string>
|
||||||
|
|
|
@ -22,12 +22,12 @@
|
||||||
<string name="offline_navigation_not_available">Автономна навігація OsmAnd тимчасово не доступна.</string>
|
<string name="offline_navigation_not_available">Автономна навігація OsmAnd тимчасово не доступна.</string>
|
||||||
<string name="left_side_navigation">Лівосторонній рух</string>
|
<string name="left_side_navigation">Лівосторонній рух</string>
|
||||||
<string name="left_side_navigation_descr">Для країн з лівостороннім рухом.</string>
|
<string name="left_side_navigation_descr">Для країн з лівостороннім рухом.</string>
|
||||||
<string name="unknown_from_location">Початкове місцезнаходження ще не визначено.</string>
|
<string name="unknown_from_location">Початкове місцеперебування ще не визначено.</string>
|
||||||
<string name="unknown_location">Розташування ще не визначено.</string>
|
<string name="unknown_location">Розташування ще не визначено.</string>
|
||||||
<string name="modify_transparency">Встановити прозорість (0 – прозорий, 255 – непрозорий)</string>
|
<string name="modify_transparency">Встановити прозорість (0 – прозорий, 255 – непрозорий)</string>
|
||||||
<string name="confirm_interrupt_download">Скасувати завантаження\?</string>
|
<string name="confirm_interrupt_download">Скасувати завантаження\?</string>
|
||||||
<string name="first_time_msg">Дякуємо за користування OsmAnd. Завантажуйте регіональні дані для користування в автономному режимі за допомогою пункту меню \'Налаштування\' → \'Керування мапами\' для перегляду мап, пошуку адрес, POI, громадського транспорту тощо.</string>
|
<string name="first_time_msg">Дякуємо за користування OsmAnd. Завантажуйте регіональні дані для користування в автономному режимі за допомогою пункту меню \'Налаштування\' → \'Керування мапами\' для перегляду мап, пошуку адрес, POI, громадського транспорту тощо.</string>
|
||||||
<string name="basemap_was_selected_to_download">Основна мапа, необхідна для забезпечення основних можливостей, знаходиться у черзі завантаження.</string>
|
<string name="basemap_was_selected_to_download">Основна мапа, необхідна для забезпечення основних можливостей, перебуває у черзі завантаження.</string>
|
||||||
<string name="select_index_file_to_download">Нічого не знайдено. Якщо Ви не знайшли свій регіон, Ви можете створити його самостійно (див. https://osmand.net).</string>
|
<string name="select_index_file_to_download">Нічого не знайдено. Якщо Ви не знайшли свій регіон, Ви можете створити його самостійно (див. https://osmand.net).</string>
|
||||||
<string name="local_indexes_cat_tile">Мережеві та кешовані растрові мапи</string>
|
<string name="local_indexes_cat_tile">Мережеві та кешовані растрові мапи</string>
|
||||||
<string name="local_indexes_cat_map">Звичайні мапи (векторні)</string>
|
<string name="local_indexes_cat_map">Звичайні мапи (векторні)</string>
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
<string name="switch_to_raster_map_to_see">Для поточної місцевості відсутні векторні автономні мапи. Завантажте їх у \'Налаштуваннях\' (\'Керування файлами мап\') або перемкніться на втулок \'Мережеві мапи\'.</string>
|
<string name="switch_to_raster_map_to_see">Для поточної місцевості відсутні векторні автономні мапи. Завантажте їх у \'Налаштуваннях\' (\'Керування файлами мап\') або перемкніться на втулок \'Мережеві мапи\'.</string>
|
||||||
<string name="send_files_to_osm">Відправити GPX файли в OSM?</string>
|
<string name="send_files_to_osm">Відправити GPX файли в OSM?</string>
|
||||||
<string name="gpx_visibility_txt">Видимість</string>
|
<string name="gpx_visibility_txt">Видимість</string>
|
||||||
<string name="gpx_tags_txt">Теги</string>
|
<string name="gpx_tags_txt">Мітки</string>
|
||||||
<string name="validate_gpx_upload_name_pwd">Для вивантаження GPX-файлів вкажіть ваше ім\'я користувача і пароль в OSM.</string>
|
<string name="validate_gpx_upload_name_pwd">Для вивантаження GPX-файлів вкажіть ваше ім\'я користувача і пароль в OSM.</string>
|
||||||
<string name="default_buttons_support">Підтримка</string>
|
<string name="default_buttons_support">Підтримка</string>
|
||||||
<string name="support_new_features">Підтримати розробку нових функцій</string>
|
<string name="support_new_features">Підтримати розробку нових функцій</string>
|
||||||
|
@ -121,13 +121,13 @@
|
||||||
<string name="offline_edition_descr">Якщо ввімкнено редагування в автономному режимі, тоді зміни буде збережено спочатку локально та завантажено за запитом, інакше зміни буде завантажено негайно.</string>
|
<string name="offline_edition_descr">Якщо ввімкнено редагування в автономному режимі, тоді зміни буде збережено спочатку локально та завантажено за запитом, інакше зміни буде завантажено негайно.</string>
|
||||||
<string name="update_poi_does_not_change_indexes">Зміни POI всередині застосунку не впливають на завантажені файли мап - вони зберігаються в окремий файл на Вашому пристрої.</string>
|
<string name="update_poi_does_not_change_indexes">Зміни POI всередині застосунку не впливають на завантажені файли мап - вони зберігаються в окремий файл на Вашому пристрої.</string>
|
||||||
<string name="local_openstreetmap_uploading">Вивантаження…</string>
|
<string name="local_openstreetmap_uploading">Вивантаження…</string>
|
||||||
<string name="local_openstreetmap_were_uploaded">{0} POI/нотатки вивантажено</string>
|
<string name="local_openstreetmap_were_uploaded">{0} POI/примітки вивантажено</string>
|
||||||
<string name="local_openstreetmap_uploadall">Вивантажити усе</string>
|
<string name="local_openstreetmap_uploadall">Вивантажити усе</string>
|
||||||
<string name="local_openstreetmap_upload">Вивантажити правки в OSM</string>
|
<string name="local_openstreetmap_upload">Вивантажити правки в OSM</string>
|
||||||
<string name="local_openstreetmap_delete">Видалити редагування</string>
|
<string name="local_openstreetmap_delete">Видалити редагування</string>
|
||||||
<string name="local_openstreetmap_descr_title">Асинхронне редагування OSM:</string>
|
<string name="local_openstreetmap_descr_title">Асинхронне редагування OSM:</string>
|
||||||
<string name="local_openstreetmap_settings">OSM-POI/Нотатки, збережено на пристрої</string>
|
<string name="local_openstreetmap_settings">OSM-POI/примітки, збережено на пристрої</string>
|
||||||
<string name="local_openstreetmap_settings_descr">Перегляд і керування OSM-POI/нотатками, збереженими у базі даних на пристрої.</string>
|
<string name="local_openstreetmap_settings_descr">Перегляд і керування OSM-POI/примітками, збереженими у базі даних пристрою.</string>
|
||||||
<string name="live_monitoring_interval_descr">Вкажіть інтервал надсилання даних.</string>
|
<string name="live_monitoring_interval_descr">Вкажіть інтервал надсилання даних.</string>
|
||||||
<string name="live_monitoring_interval">Інтервал надсилання даних</string>
|
<string name="live_monitoring_interval">Інтервал надсилання даних</string>
|
||||||
<string name="live_monitoring_url_descr">Вкажіть веб-адресу з наступними параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
<string name="live_monitoring_url_descr">Вкажіть веб-адресу з наступними параметрами: lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.</string>
|
||||||
|
@ -312,8 +312,8 @@
|
||||||
<string name="send_location_way_choose_title">Поділитись, використовуючи</string>
|
<string name="send_location_way_choose_title">Поділитись, використовуючи</string>
|
||||||
<string name="send_location_sms_pattern">Координати: %1$s\n%2$s</string>
|
<string name="send_location_sms_pattern">Координати: %1$s\n%2$s</string>
|
||||||
<string name="send_location_email_pattern">Щоб побачити розташування, перейдіть за веб-посиланням %1$s або intent-посиланням Android %2$s</string>
|
<string name="send_location_email_pattern">Щоб побачити розташування, перейдіть за веб-посиланням %1$s або intent-посиланням Android %2$s</string>
|
||||||
<string name="send_location">Надіслати місцезнаходження</string>
|
<string name="send_location">Надіслати місцеперебування</string>
|
||||||
<string name="context_menu_item_share_location">Поділитись місцезнаходженням</string>
|
<string name="context_menu_item_share_location">Поділитись місцеперебуванням</string>
|
||||||
<string name="add_waypoint_dialog_added">Маршрутну точку GPX \"{0}\" додано</string>
|
<string name="add_waypoint_dialog_added">Маршрутну точку GPX \"{0}\" додано</string>
|
||||||
<string name="add_waypoint_dialog_title">Додати точку до записаного треку</string>
|
<string name="add_waypoint_dialog_title">Додати точку до записаного треку</string>
|
||||||
<string name="amenity_type_administrative">Адміністративні</string>
|
<string name="amenity_type_administrative">Адміністративні</string>
|
||||||
|
@ -435,7 +435,7 @@
|
||||||
<string name="layer_yandex_traffic">Яндекс Пробки</string>
|
<string name="layer_yandex_traffic">Яндекс Пробки</string>
|
||||||
<string name="layer_route">Маршрут</string>
|
<string name="layer_route">Маршрут</string>
|
||||||
<string name="shared_string_favorites">Закладки</string>
|
<string name="shared_string_favorites">Закладки</string>
|
||||||
<string name="layer_osm_bugs">Нотатки OSM (мережеві)</string>
|
<string name="layer_osm_bugs">Примітки OSM (мережеві)</string>
|
||||||
<string name="layer_poi">POI-накладення…</string>
|
<string name="layer_poi">POI-накладення…</string>
|
||||||
<string name="layer_map">Джерело мапи…</string>
|
<string name="layer_map">Джерело мапи…</string>
|
||||||
<string name="menu_layers">Шари мапи</string>
|
<string name="menu_layers">Шари мапи</string>
|
||||||
|
@ -575,7 +575,7 @@
|
||||||
<string name="shared_string_close">Закрити</string>
|
<string name="shared_string_close">Закрити</string>
|
||||||
<string name="loading_data">Дані завантажуються…</string>
|
<string name="loading_data">Дані завантажуються…</string>
|
||||||
<string name="reading_indexes">Зчитування даних…</string>
|
<string name="reading_indexes">Зчитування даних…</string>
|
||||||
<string name="previous_run_crashed">Помилка у роботі застосунку. Файл журналу знаходиться тут {0}. Будь ласка, напишіть розробнику про помилку (з вкладеним журнальним файлом).</string>
|
<string name="previous_run_crashed">Помилка роботи застосунку. Файл журналу розміщено тут {0}. Повідомте розробника про помилку (з вкладеним файлом журналу).</string>
|
||||||
<string name="saving_gpx_tracks">Збереження GPX-файлу…</string>
|
<string name="saving_gpx_tracks">Збереження GPX-файлу…</string>
|
||||||
<string name="finished_task">Закінчено</string>
|
<string name="finished_task">Закінчено</string>
|
||||||
<string name="use_online_routing_descr">Використовувати Інтернет для прокладання маршруту.</string>
|
<string name="use_online_routing_descr">Використовувати Інтернет для прокладання маршруту.</string>
|
||||||
|
@ -597,7 +597,7 @@
|
||||||
<string name="update_tile">Оновити мапу</string>
|
<string name="update_tile">Оновити мапу</string>
|
||||||
<string name="reload_tile">Оновити частину мапи</string>
|
<string name="reload_tile">Оновити частину мапи</string>
|
||||||
<string name="mark_point">Точка</string>
|
<string name="mark_point">Точка</string>
|
||||||
<string name="shared_string_add_to_favorites">Додати в закладки</string>
|
<string name="shared_string_add_to_favorites">Додати до закладок</string>
|
||||||
<string name="use_english_names_descr">Вибір між місцевими та англійськими назвами.</string>
|
<string name="use_english_names_descr">Вибір між місцевими та англійськими назвами.</string>
|
||||||
<string name="use_english_names">Використовувати англійські назви на мапах</string>
|
<string name="use_english_names">Використовувати англійські назви на мапах</string>
|
||||||
<string name="app_settings">Налаштування програми</string>
|
<string name="app_settings">Налаштування програми</string>
|
||||||
|
@ -657,7 +657,7 @@
|
||||||
<string name="shared_string_apply">Застосувати</string>
|
<string name="shared_string_apply">Застосувати</string>
|
||||||
<string name="shared_string_add">Додати</string>
|
<string name="shared_string_add">Додати</string>
|
||||||
<string name="shared_string_no">Ні</string>
|
<string name="shared_string_no">Ні</string>
|
||||||
<string name="add_favorite_dialog_top_text">Введіть ім’я Закладки</string>
|
<string name="add_favorite_dialog_top_text">Введіть назву Закладки</string>
|
||||||
<string name="add_favorite_dialog_default_favourite_name">Закладка</string>
|
<string name="add_favorite_dialog_default_favourite_name">Закладка</string>
|
||||||
<string name="add_favorite_dialog_favourite_added_template">Точку Закладки \'\'{0}\'\' додано.</string>
|
<string name="add_favorite_dialog_favourite_added_template">Точку Закладки \'\'{0}\'\' додано.</string>
|
||||||
<string name="favourites_context_menu_edit">Редагувати Закладку</string>
|
<string name="favourites_context_menu_edit">Редагувати Закладку</string>
|
||||||
|
@ -683,7 +683,7 @@
|
||||||
<string name="poi_dialog_opening_hours">Відкрити</string>
|
<string name="poi_dialog_opening_hours">Відкрити</string>
|
||||||
<string name="poi_dialog_comment">Коментар</string>
|
<string name="poi_dialog_comment">Коментар</string>
|
||||||
<string name="poi_dialog_comment_default">Зміна POI</string>
|
<string name="poi_dialog_comment_default">Зміна POI</string>
|
||||||
<string name="poi_dialog_other_tags_message">Наступні теги POI не можуть бути змінені</string>
|
<string name="poi_dialog_other_tags_message">Всі інші мітки POI не буде змінено</string>
|
||||||
<string name="default_buttons_commit">Зберегти</string>
|
<string name="default_buttons_commit">Зберегти</string>
|
||||||
<string name="shared_string_clear">Очистити</string>
|
<string name="shared_string_clear">Очистити</string>
|
||||||
<string name="filter_current_poiButton">Фільтр</string>
|
<string name="filter_current_poiButton">Фільтр</string>
|
||||||
|
@ -776,7 +776,7 @@
|
||||||
<string name="recording_photo_description">Світлина %1$s %2$s</string>
|
<string name="recording_photo_description">Світлина %1$s %2$s</string>
|
||||||
<string name="av_def_action_picture">Зробити світлину</string>
|
<string name="av_def_action_picture">Зробити світлину</string>
|
||||||
<string name="recording_context_menu_precord">Зробити світлину</string>
|
<string name="recording_context_menu_precord">Зробити світлину</string>
|
||||||
<string name="dropbox_plugin_description">Взаємозберігайте треки та звуко/відео-нотатки з Вашим обліковим записом Dropbox.</string>
|
<string name="dropbox_plugin_description">Синхронізуйте треки та звуко/відеопримітки з вашим обліковим записом Dropbox.</string>
|
||||||
<string name="dropbox_plugin_name">Втулок Dropbox</string>
|
<string name="dropbox_plugin_name">Втулок Dropbox</string>
|
||||||
<string name="intermediate_points_change_order">Змінити порядок</string>
|
<string name="intermediate_points_change_order">Змінити порядок</string>
|
||||||
<string name="srtm_paid_version_msg">Будь ласка, зверніть увагу на оплату втулка \"Горизонталі\" для підтримки подальшого розвитку.</string>
|
<string name="srtm_paid_version_msg">Будь ласка, зверніть увагу на оплату втулка \"Горизонталі\" для підтримки подальшого розвитку.</string>
|
||||||
|
@ -795,7 +795,7 @@
|
||||||
<string name="recording_unavailable">недоступно</string>
|
<string name="recording_unavailable">недоступно</string>
|
||||||
<string name="shared_string_control_stop">Зупинити</string>
|
<string name="shared_string_control_stop">Зупинити</string>
|
||||||
<string name="shared_string_control_start">Почати</string>
|
<string name="shared_string_control_start">Почати</string>
|
||||||
<string name="map_widget_av_notes">Звуко/відео-нотатки</string>
|
<string name="map_widget_av_notes">Звуко/відеопримітки</string>
|
||||||
<string name="osmand_srtm_short_description_80_chars">Втулок OsmAnd для показу горизонталей в автономному режимі</string>
|
<string name="osmand_srtm_short_description_80_chars">Втулок OsmAnd для показу горизонталей в автономному режимі</string>
|
||||||
<string name="av_use_external_camera">Використовувати програму Камера</string>
|
<string name="av_use_external_camera">Використовувати програму Камера</string>
|
||||||
<string name="av_settings_descr">Налаштування аудіо/відео запису.</string>
|
<string name="av_settings_descr">Налаштування аудіо/відео запису.</string>
|
||||||
|
@ -805,8 +805,8 @@
|
||||||
<string name="recording_default_name">Запис</string>
|
<string name="recording_default_name">Запис</string>
|
||||||
<string name="av_def_action_choose">За запитом\?</string>
|
<string name="av_def_action_choose">За запитом\?</string>
|
||||||
<string name="recording_is_recorded">Аудіо/відео зараз записується. Для зупинки натисніть на AV-віджет.</string>
|
<string name="recording_is_recorded">Аудіо/відео зараз записується. Для зупинки натисніть на AV-віджет.</string>
|
||||||
<string name="recording_context_menu_arecord">Створити аудіо-нотатку</string>
|
<string name="recording_context_menu_arecord">Створити аудіопримітку</string>
|
||||||
<string name="recording_context_menu_vrecord">Створити відео-нотатку</string>
|
<string name="recording_context_menu_vrecord">Створити відеопримітку</string>
|
||||||
<string name="recording_context_menu_delete">Вилучити запис</string>
|
<string name="recording_context_menu_delete">Вилучити запис</string>
|
||||||
<string name="recording_context_menu_play">Грати</string>
|
<string name="recording_context_menu_play">Грати</string>
|
||||||
<string name="map_widget_intermediate_distance">Проміжний пункт призначення</string>
|
<string name="map_widget_intermediate_distance">Проміжний пункт призначення</string>
|
||||||
|
@ -820,9 +820,9 @@
|
||||||
\n
|
\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>
|
\nВсесвітні дані (між 70° на півночі і 70° на півдні) базуються на вимірюваннях SRTM (Shuttle Radar Topography Mission) і ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer), даних інструменту відмальовуванню Terra, флагманського супутника системи спостереження Землі від NASA. ASTER — це підсумок спільної роботи NASA, міністерства економіки Японії, міністерства торгівлі і промисловості Японії (METI), агенції космічних систем Японії (J-spacesystems).</string>
|
||||||
<string name="map_widget_distancemeasurement">Вимірювання відстаней</string>
|
<string name="map_widget_distancemeasurement">Вимірювання відстаней</string>
|
||||||
<string name="map_widget_audionotes">Звуко-нотатки</string>
|
<string name="map_widget_audionotes">Аудіопримітки</string>
|
||||||
<string name="audionotes_plugin_description">Зробіть звуко/світлино/відео нотатки під час подорожі, використовуючи або кнопку мапи, або контекстне меню розташування.</string>
|
<string name="audionotes_plugin_description">Робіть звуко/світлино/відео примітки під час подорожі використовуючи кнопку мапи або контекстне меню розташування.</string>
|
||||||
<string name="audionotes_plugin_name">Звуко/відео-нотатки</string>
|
<string name="audionotes_plugin_name">Звуко/відеопримітки</string>
|
||||||
<string name="index_srtm_parts">частин</string>
|
<string name="index_srtm_parts">частин</string>
|
||||||
<string name="index_srtm_ele">Горизонталі</string>
|
<string name="index_srtm_ele">Горизонталі</string>
|
||||||
<string name="srtm_plugin_description">Цей втулок показує як шар горизонталей, так і шар рельєфу поверх усталених мап OsmAnd. Ця функціональність стане в пригоді спортсменам, туристам, мандрівникам та будь-кому, хто цікавиться структурою рельєфу місцевості. (Зверніть увагу, що дані про горизонталі є окремими від даних про рельєф; додаткові завантаження доступні після задіювання втулку.)
|
<string name="srtm_plugin_description">Цей втулок показує як шар горизонталей, так і шар рельєфу поверх усталених мап OsmAnd. Ця функціональність стане в пригоді спортсменам, туристам, мандрівникам та будь-кому, хто цікавиться структурою рельєфу місцевості. (Зверніть увагу, що дані про горизонталі є окремими від даних про рельєф; додаткові завантаження доступні після задіювання втулку.)
|
||||||
|
@ -843,7 +843,7 @@
|
||||||
<string name="safe_mode_description">Запустити програму в безпечному режимі (використовує повільніші Android-функції замість власних).</string>
|
<string name="safe_mode_description">Запустити програму в безпечному режимі (використовує повільніші Android-функції замість власних).</string>
|
||||||
<string name="safe_mode">Безпечний режим</string>
|
<string name="safe_mode">Безпечний режим</string>
|
||||||
<string name="native_library_not_running">Програму запущено в безпечному режимі (вимкніть його в \'Налаштуваннях\').</string>
|
<string name="native_library_not_running">Програму запущено в безпечному режимі (вимкніть його в \'Налаштуваннях\').</string>
|
||||||
<string name="audionotes_location_not_defined">Оберіть \"Використати місцезнаходження...\" для прив\'язки нотатки до даного місцезнаходження.</string>
|
<string name="audionotes_location_not_defined">Виберіть \"Використати місцеперебування...\" для прив\'язки примітки до поточного розташування.</string>
|
||||||
<string name="background_service_is_enabled_question">Службу OsmAnd у тлі досі запущено. Зупинити її роботу також\?</string>
|
<string name="background_service_is_enabled_question">Службу OsmAnd у тлі досі запущено. Зупинити її роботу також\?</string>
|
||||||
<string name="close_changeset">Закрити набір змін</string>
|
<string name="close_changeset">Закрити набір змін</string>
|
||||||
<string name="zxing_barcode_scanner_not_found">Програма \'ZXing Barcode Scanner\' не встановлена. Шукати в Google Play?</string>
|
<string name="zxing_barcode_scanner_not_found">Програма \'ZXing Barcode Scanner\' не встановлена. Шукати в Google Play?</string>
|
||||||
|
@ -1370,8 +1370,8 @@
|
||||||
<string name="navigate_point_northing">Північної широти</string>
|
<string name="navigate_point_northing">Північної широти</string>
|
||||||
<string name="shared_string_dismiss">Відхилити</string>
|
<string name="shared_string_dismiss">Відхилити</string>
|
||||||
<string name="shared_string_audio">Аудіо</string>
|
<string name="shared_string_audio">Аудіо</string>
|
||||||
<string name="share_note">Поділитись нотаткою</string>
|
<string name="share_note">Поділитись приміткою</string>
|
||||||
<string name="notes">A/V нотатки</string>
|
<string name="notes">A/V примітки</string>
|
||||||
<string name="online_map">Мережева мапа</string>
|
<string name="online_map">Мережева мапа</string>
|
||||||
<string name="roads_only">Тільки дороги</string>
|
<string name="roads_only">Тільки дороги</string>
|
||||||
<string name="free">Вільно %1$s</string>
|
<string name="free">Вільно %1$s</string>
|
||||||
|
@ -1382,7 +1382,7 @@
|
||||||
<string name="nautical_maps_missing">Завантажте спеціальну безмережеву мапу, щоб відобразити морські подробиці.</string>
|
<string name="nautical_maps_missing">Завантажте спеціальну безмережеву мапу, щоб відобразити морські подробиці.</string>
|
||||||
<string name="edit_group">Редагувати групу</string>
|
<string name="edit_group">Редагувати групу</string>
|
||||||
<string name="parking_place">Місце для стоянки</string>
|
<string name="parking_place">Місце для стоянки</string>
|
||||||
<string name="remove_the_tag">ВИЛУЧИТИ ТЕҐ</string>
|
<string name="remove_the_tag">ВИЛУЧИТИ МІТКУ</string>
|
||||||
<string name="gps_status">Стан GPS</string>
|
<string name="gps_status">Стан GPS</string>
|
||||||
<string name="version_settings_descr">Завантажити нічні збірки.</string>
|
<string name="version_settings_descr">Завантажити нічні збірки.</string>
|
||||||
<string name="version_settings">Збірки</string>
|
<string name="version_settings">Збірки</string>
|
||||||
|
@ -1589,7 +1589,7 @@
|
||||||
<string name="lang_ceb">Себуанська</string>
|
<string name="lang_ceb">Себуанська</string>
|
||||||
<string name="archive_wikipedia_data">У Вас є старі несумісні дані з Вікіпедії. Заархівувати їх?</string>
|
<string name="archive_wikipedia_data">У Вас є старі несумісні дані з Вікіпедії. Заархівувати їх?</string>
|
||||||
<string name="download_wikipedia_files">Завантажити додаткові дані з Вікіпедії (%1$s Мб)\?</string>
|
<string name="download_wikipedia_files">Завантажити додаткові дані з Вікіпедії (%1$s Мб)\?</string>
|
||||||
<string name="gps_network_not_enabled">Служба визначення місцезнаходження вимкнена. Увімкнути?</string>
|
<string name="gps_network_not_enabled">Служба визначення розташування вимкнена. Увімкнути\?</string>
|
||||||
<string name="disable_recording_once_app_killed">Запобігти самостійному логуваню</string>
|
<string name="disable_recording_once_app_killed">Запобігти самостійному логуваню</string>
|
||||||
<string name="shared_string_import2osmand">Імпортувати до OsmAnd</string>
|
<string name="shared_string_import2osmand">Імпортувати до OsmAnd</string>
|
||||||
<string name="read_full_article">Читати повну статтю (мережево)</string>
|
<string name="read_full_article">Читати повну статтю (мережево)</string>
|
||||||
|
@ -1624,19 +1624,19 @@
|
||||||
<string name="osm_save_offline">Зберегти локально</string>
|
<string name="osm_save_offline">Зберегти локально</string>
|
||||||
<string name="osm_edit_modified_poi">OSM POI відредаговано</string>
|
<string name="osm_edit_modified_poi">OSM POI відредаговано</string>
|
||||||
<string name="osm_edit_deleted_poi">OSM POI видалено</string>
|
<string name="osm_edit_deleted_poi">OSM POI видалено</string>
|
||||||
<string name="context_menu_item_open_note">Відкрити OSM-нотатку</string>
|
<string name="context_menu_item_open_note">Відкрити примітку OSM</string>
|
||||||
<string name="osm_edit_reopened_note">Відкрити заново OSM-нотатку</string>
|
<string name="osm_edit_reopened_note">Повторно відкрити примітку OSM</string>
|
||||||
<string name="osm_edit_commented_note">До OSM-нотатки додано коментар</string>
|
<string name="osm_edit_commented_note">До примітки OSM додано коментар</string>
|
||||||
<string name="osm_edit_created_note">Створено OSM-нотатку</string>
|
<string name="osm_edit_created_note">Створено примітку OSM</string>
|
||||||
<string name="osn_bug_name">OSM-нотатка</string>
|
<string name="osn_bug_name">Примітка OSM</string>
|
||||||
<string name="osn_add_dialog_title">Створити нотатку</string>
|
<string name="osn_add_dialog_title">Створити примітку</string>
|
||||||
<string name="osn_comment_dialog_title">Додати коментар</string>
|
<string name="osn_comment_dialog_title">Додати коментар</string>
|
||||||
<string name="osn_reopen_dialog_title">Перевідкрити нотатку</string>
|
<string name="osn_reopen_dialog_title">Перевідкрити примітку</string>
|
||||||
<string name="osn_close_dialog_title">Закрити нотатку</string>
|
<string name="osn_close_dialog_title">Закрити примітку</string>
|
||||||
<string name="osn_add_dialog_success">Нотатку створено</string>
|
<string name="osn_add_dialog_success">Примітку створено</string>
|
||||||
<string name="osn_add_dialog_error">Не вдалося створити нотатку.</string>
|
<string name="osn_add_dialog_error">Не вдалося створити примітку.</string>
|
||||||
<string name="osn_close_dialog_success">Нотатку закрито</string>
|
<string name="osn_close_dialog_success">Примітку закрито</string>
|
||||||
<string name="osn_close_dialog_error">Не вдалося закрити нотатку.</string>
|
<string name="osn_close_dialog_error">Не вдалося закрити примітку.</string>
|
||||||
<string name="shared_string_commit">Підтвердити</string>
|
<string name="shared_string_commit">Підтвердити</string>
|
||||||
<string name="context_menu_item_delete_waypoint">Вилучити GPX точку?</string>
|
<string name="context_menu_item_delete_waypoint">Вилучити GPX точку?</string>
|
||||||
<string name="context_menu_item_edit_waypoint">Редагувати GPX точку</string>
|
<string name="context_menu_item_edit_waypoint">Редагувати GPX точку</string>
|
||||||
|
@ -1656,7 +1656,7 @@
|
||||||
<string name="go_to_map">Показати мапу</string>
|
<string name="go_to_map">Показати мапу</string>
|
||||||
<string name="simulate_initial_startup">Імітувати перший запуск застосунку</string>
|
<string name="simulate_initial_startup">Імітувати перший запуск застосунку</string>
|
||||||
<string name="share_geo">гео:</string>
|
<string name="share_geo">гео:</string>
|
||||||
<string name="share_menu_location">Поділитись місцезнаходженням</string>
|
<string name="share_menu_location">Поділитись місцеперебуванням</string>
|
||||||
<string name="shared_string_send">Надіслати</string>
|
<string name="shared_string_send">Надіслати</string>
|
||||||
<string name="favorite_category_dublicate_message">Будь ласка, використовуйте назву категорії, яка ще не існує.</string>
|
<string name="favorite_category_dublicate_message">Будь ласка, використовуйте назву категорії, яка ще не існує.</string>
|
||||||
<string name="favorite_category_name">Назва категорії</string>
|
<string name="favorite_category_name">Назва категорії</string>
|
||||||
|
@ -1790,7 +1790,7 @@
|
||||||
<string name="share_osm_edits_subject">OSM правки, поширені через OsmAnd</string>
|
<string name="share_osm_edits_subject">OSM правки, поширені через OsmAnd</string>
|
||||||
<string name="rendering_attr_hideProposed_name">Заплановані обʼєкти</string>
|
<string name="rendering_attr_hideProposed_name">Заплановані обʼєкти</string>
|
||||||
<string name="save_poi_without_poi_type_message">Ви дійсно хочете зберегти POI, не вказавши його тип?</string>
|
<string name="save_poi_without_poi_type_message">Ви дійсно хочете зберегти POI, не вказавши його тип?</string>
|
||||||
<string name="no_location_permission">Надання доступу до даних про місцезнаходження.</string>
|
<string name="no_location_permission">Надання доступу до даних про місцеперебування.</string>
|
||||||
<string name="no_camera_permission">Надання доступу до камери.</string>
|
<string name="no_camera_permission">Надання доступу до камери.</string>
|
||||||
<string name="no_microphone_permission">Надання доступу до мікрофона.</string>
|
<string name="no_microphone_permission">Надання доступу до мікрофона.</string>
|
||||||
<string name="route_distance">Відстань:</string>
|
<string name="route_distance">Відстань:</string>
|
||||||
|
@ -1947,8 +1947,8 @@
|
||||||
<string name="osm_live_header">Передплата дозволяє щогодини отримувати оновлення для мап по всьому світу.
|
<string name="osm_live_header">Передплата дозволяє щогодини отримувати оновлення для мап по всьому світу.
|
||||||
\nЧастина від передплати переводиться спільноті OSM та виплачується кожному землеписцю за його внесок.
|
\nЧастина від передплати переводиться спільноті OSM та виплачується кожному землеписцю за його внесок.
|
||||||
\nЯкщо Вам подобається OsmAnd та OSM, і хочете підтримати і бути підтриманими ними, це ідеальний спосіб зробити це.</string>
|
\nЯкщо Вам подобається OsmAnd та OSM, і хочете підтримати і бути підтриманими ними, це ідеальний спосіб зробити це.</string>
|
||||||
<string name="upload_osm_note_description">Надішліть Вашу OSM-нотатку таємно, або скориставшись обліковим записом на OSM.org.</string>
|
<string name="upload_osm_note_description">Надішліть примітку OSM знеособлено чи скориставшись профілем OpenStreetMap.org.</string>
|
||||||
<string name="upload_osm_note">Надіслати нотатку в OSM</string>
|
<string name="upload_osm_note">Надіслати примітку в OSM</string>
|
||||||
<string name="file_name_containes_illegal_char">Неприпустимі знаки в назві файлу</string>
|
<string name="file_name_containes_illegal_char">Неприпустимі знаки в назві файлу</string>
|
||||||
<string name="follow_us">Слідкуйте за нами</string>
|
<string name="follow_us">Слідкуйте за нами</string>
|
||||||
<string name="access_direction_audio_feedback">Звукові напрямки</string>
|
<string name="access_direction_audio_feedback">Звукові напрямки</string>
|
||||||
|
@ -2039,7 +2039,7 @@
|
||||||
<string name="location_not_found">Неможливо визначити місце розташування</string>
|
<string name="location_not_found">Неможливо визначити місце розташування</string>
|
||||||
<string name="no_inet_connection">З’єднання з Інтернетом відсутнє</string>
|
<string name="no_inet_connection">З’єднання з Інтернетом відсутнє</string>
|
||||||
<string name="no_inet_connection_desc_map">Необхідно завантажити мапи.</string>
|
<string name="no_inet_connection_desc_map">Необхідно завантажити мапи.</string>
|
||||||
<string name="search_location">Визначення місцезнаходження…</string>
|
<string name="search_location">Визначення місцеперебування…</string>
|
||||||
<string name="storage_free_space">Вільне місце</string>
|
<string name="storage_free_space">Вільне місце</string>
|
||||||
<string name="storage_place_description">Сховище даних OsmAnd (мапи, файли з треками, тощо): %1$s.</string>
|
<string name="storage_place_description">Сховище даних OsmAnd (мапи, файли з треками, тощо): %1$s.</string>
|
||||||
<string name="give_permission">Дати дозвіл</string>
|
<string name="give_permission">Дати дозвіл</string>
|
||||||
|
@ -2162,19 +2162,19 @@
|
||||||
<string name="quick_action_map_underlay_action">Додати підкладку</string>
|
<string name="quick_action_map_underlay_action">Додати підкладку</string>
|
||||||
<string name="quick_action_map_source">Змінити джерело мапи</string>
|
<string name="quick_action_map_source">Змінити джерело мапи</string>
|
||||||
<string name="quick_action_btn_tutorial_descr">Довге натискання з перетягуванням кнопки змінює її розташування на екрані.</string>
|
<string name="quick_action_btn_tutorial_descr">Довге натискання з перетягуванням кнопки змінює її розташування на екрані.</string>
|
||||||
<string name="quick_action_add_osm_bug">Додати нотатку OSM</string>
|
<string name="quick_action_add_osm_bug">Додати примітку OSM</string>
|
||||||
<string name="rendering_value_fine_name">Дуже тонкий</string>
|
<string name="rendering_value_fine_name">Дуже тонкий</string>
|
||||||
<string name="navigate_point_olc">Відкритий код розташування (OLC)</string>
|
<string name="navigate_point_olc">Відкритий код розташування (OLC)</string>
|
||||||
<string name="quick_action_take_audio_note">Нова аудіонотатка</string>
|
<string name="quick_action_take_audio_note">Нова аудіопримітка</string>
|
||||||
<string name="quick_action_take_video_note">Нова відеонотатка</string>
|
<string name="quick_action_take_video_note">Нова відеопримітка</string>
|
||||||
<string name="quick_action_take_photo_note">Нова фотонотатка</string>
|
<string name="quick_action_take_photo_note">Нова фотопримітка</string>
|
||||||
<string name="quick_favorites_name_preset">Найменування</string>
|
<string name="quick_favorites_name_preset">Найменування</string>
|
||||||
<string name="quick_action_add_marker_descr">Кнопка для додавання позначки мапи посередині екрану.</string>
|
<string name="quick_action_add_marker_descr">Кнопка для додавання позначки мапи посередині екрану.</string>
|
||||||
<string name="quick_action_add_gpx_descr">Натискання на цю кнопку додасть маршрутну точку GPX посередині екрану.</string>
|
<string name="quick_action_add_gpx_descr">Натискання на цю кнопку додасть маршрутну точку GPX посередині екрану.</string>
|
||||||
<string name="quick_action_take_audio_note_descr">Натискання цієї кнопки додає аудіонотатку посередині екрану.</string>
|
<string name="quick_action_take_audio_note_descr">Натискання цієї кнопки додає аудіопримітку посередині екрана.</string>
|
||||||
<string name="quick_action_take_video_note_descr">Натискання цієї кнопки додає відеонотатку посередині екрану.</string>
|
<string name="quick_action_take_video_note_descr">Натискання цієї кнопки додає відеопримітку посередині екрана.</string>
|
||||||
<string name="quick_action_take_photo_note_descr">Натискання цієї кнопки додає фотонотатку посередині екрану.</string>
|
<string name="quick_action_take_photo_note_descr">Натискання цієї кнопки додає фотопримітку посередині екрана.</string>
|
||||||
<string name="quick_action_add_osm_bug_descr">Натискання цієї кнопки додає OSM-нотатку посередині екрану.</string>
|
<string name="quick_action_add_osm_bug_descr">Натискання цієї кнопки додає примітку OSM посередині екрану.</string>
|
||||||
<string name="quick_action_add_poi_descr">Натискання цієї кнопки додає POI посередині екрану.</string>
|
<string name="quick_action_add_poi_descr">Натискання цієї кнопки додає POI посередині екрану.</string>
|
||||||
<string name="quick_action_navigation_voice_descr">Перемикач, щоб вимкнути або увімкнути голосові підказки під час навігації.</string>
|
<string name="quick_action_navigation_voice_descr">Перемикач, щоб вимкнути або увімкнути голосові підказки під час навігації.</string>
|
||||||
<string name="quick_action_add_parking_descr">Кнопка для додавання місця паркування посередині екрана.</string>
|
<string name="quick_action_add_parking_descr">Кнопка для додавання місця паркування посередині екрана.</string>
|
||||||
|
@ -2210,12 +2210,12 @@
|
||||||
<string name="restart_search">Шукати знову</string>
|
<string name="restart_search">Шукати знову</string>
|
||||||
<string name="increase_search_radius">Збільшити радіус пошуку</string>
|
<string name="increase_search_radius">Збільшити радіус пошуку</string>
|
||||||
<string name="nothing_found">Нічого не знайдено</string>
|
<string name="nothing_found">Нічого не знайдено</string>
|
||||||
<string name="private_access_routing_req">Місце призначення знаходиться в області з приватним доступом. Дозволити доступ по приватних дорогах для цієї подорожі\?</string>
|
<string name="private_access_routing_req">Місце призначення розташовано в області з приватним доступом. Дозволити доступ до приватних доріг у цій подорожі\?</string>
|
||||||
<string name="nothing_found_descr">Змініть пошуковий запит або ж розширте пошуковий радіус.</string>
|
<string name="nothing_found_descr">Змініть пошуковий запит або ж розширте пошуковий радіус.</string>
|
||||||
<string name="quick_action_showhide_osmbugs_title">Показати/приховати OSM-нотатки</string>
|
<string name="quick_action_showhide_osmbugs_title">Показати/приховати примітки OSM</string>
|
||||||
<string name="quick_action_osmbugs_show">Показати OSM-нотатки</string>
|
<string name="quick_action_osmbugs_show">Показати примітки OSM</string>
|
||||||
<string name="quick_action_osmbugs_hide">Приховати OSM-нотатки</string>
|
<string name="quick_action_osmbugs_hide">Приховати примітки OSM</string>
|
||||||
<string name="quick_action_showhide_osmbugs_descr">Натискання на кнопку дії покаже чи приховає OSM-нотатки на мапі.</string>
|
<string name="quick_action_showhide_osmbugs_descr">Натискання на кнопку дії покаже чи приховає примітки OSM на мапі.</string>
|
||||||
<string name="sorted_by_distance">Відсортоване за відстанню</string>
|
<string name="sorted_by_distance">Відсортоване за відстанню</string>
|
||||||
<string name="search_favorites">Пошук у закладках</string>
|
<string name="search_favorites">Пошук у закладках</string>
|
||||||
<string name="hillshade_menu_download_descr">Завантажте шар мапи «Пагорби», щоб показати вертикальне затінення.</string>
|
<string name="hillshade_menu_download_descr">Завантажте шар мапи «Пагорби», щоб показати вертикальне затінення.</string>
|
||||||
|
@ -2304,12 +2304,12 @@
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="osmand_extended_description_part4">Катання на лижах
|
<string name="osmand_extended_description_part4">Катання на лижах
|
||||||
\nOsmAnd-втулок лижних мап дозволяє бачити лижні траси з рівнем складності та деякою додатковими відомостями на зразок розташування підйомників та інших об’єктів.</string>
|
\nOsmAnd-втулок лижних мап дозволяє бачити лижні траси з рівнем складності та деякою додатковими відомостями на зразок розташування підйомників та інших об’єктів.</string>
|
||||||
<string name="osmand_extended_description_part5">Їзда на велосипеді
|
<string name="osmand_extended_description_part5">Їзда на велосипеді
|
||||||
\n• Знаходьте велосипедні доріжки на мапі
|
\n• Знаходьте велосипедні доріжки на мапі
|
||||||
\n• GPS-навігація у велосипедному режимі будує маршрут з використанням велосипедних доріжок
|
\n• GPS-навігація у велосипедному режимі будує маршрут з використанням велосипедних доріжок
|
||||||
\n• Ви можете бачити свою швидкість та висотне положення
|
\n• Ви можете бачити свою швидкість та висотне положення
|
||||||
\n• Опція запису GPX дозволяє вам записувати Вашу подорож та ділитися нею
|
\n• Параметр запису GPX дозволяє вам записувати вашу подорож та ділитися нею
|
||||||
\n• Через додатковий втулок Ви можете увімкнути відображення горизонталей та рельєфу</string>
|
\n• Через додатковий втулок ви можете увімкнути показ горизонталей та рельєфу</string>
|
||||||
<string name="osmand_extended_description_part6">Прогулянки, походи, екскурсія по місту
|
<string name="osmand_extended_description_part6">Прогулянки, походи, екскурсія по місту
|
||||||
\n• Мапа показує доріжки для прогулянок та походів
|
\n• Мапа показує доріжки для прогулянок та походів
|
||||||
\n• Вікіпедія Вашою обраною мовою може багато розповісти під час екскурсії містом
|
\n• Вікіпедія Вашою обраною мовою може багато розповісти під час екскурсії містом
|
||||||
|
@ -2382,9 +2382,9 @@
|
||||||
<string name="osmand_plus_extended_description_part7">Безпосередній вклад у OSM
|
<string name="osmand_plus_extended_description_part7">Безпосередній вклад у OSM
|
||||||
\n• Звітуйте про помилки в даних
|
\n• Звітуйте про помилки в даних
|
||||||
\n• Вивантажуйте GPX-треки в OSM безпосередньо з програми
|
\n• Вивантажуйте GPX-треки в OSM безпосередньо з програми
|
||||||
\n• Додавайте POI (цікаві точки) та безпосередньо вивантажуйте їх в OSM (чи пізніше, якщо зараз Ви в офлайні)
|
\n• Додавайте POI (цікаві точки) та безпосередньо вивантажуйте їх в OSM (чи пізніше, якщо зараз ви в автономному режимі)
|
||||||
\n• Опція запису подорожі також і в режимі тла (в той час як пристрій знаходиться в сплячому режимі)
|
\n• Параметр запису подорожі також і в тлі (коли пристрій перебуває в режимі сну)
|
||||||
\nOsmAnd — вільне й відкрите програмне забезпечення, що активно розвивається. Кожен може внести свій вклад, звітуючи про помилки, поліпшуючи переклад чи розробляючи нові функції. Також проєкт покладається на фінансові внески для оплати розробки та тестування нових функціональних можливостей.
|
\nOsmAnd — вільне й відкрите програмне забезпечення, що активно розвивається. Кожен може допомогти, звітуючи про помилки, поліпшуючи переклад чи розробляючи нові функції. Також проєкт покладається на фінансові внески для оплати розробки та тестування нових функціональних можливостей.
|
||||||
\n</string>
|
\n</string>
|
||||||
<string name="osmand_plus_extended_description_part8">Приблизне охоплення мап та якість:
|
<string name="osmand_plus_extended_description_part8">Приблизне охоплення мап та якість:
|
||||||
\n • Західна Європа: ****
|
\n • Західна Європа: ****
|
||||||
|
@ -2505,7 +2505,7 @@
|
||||||
<string name="order_by">Сортувати за:</string>
|
<string name="order_by">Сортувати за:</string>
|
||||||
<string name="use_location">Використовувати розташування</string>
|
<string name="use_location">Використовувати розташування</string>
|
||||||
<string name="add_location_as_first_point_descr">Додати Ваше місце розташування як точку початку при плануванні маршруту.</string>
|
<string name="add_location_as_first_point_descr">Додати Ваше місце розташування як точку початку при плануванні маршруту.</string>
|
||||||
<string name="my_location">Моє місцезнаходження</string>
|
<string name="my_location">Моє місцеперебування</string>
|
||||||
<string name="shared_string_finish">Фініш</string>
|
<string name="shared_string_finish">Фініш</string>
|
||||||
<string name="plan_route">Планувати маршрут</string>
|
<string name="plan_route">Планувати маршрут</string>
|
||||||
<string name="shared_string_sort">Впорядкувати</string>
|
<string name="shared_string_sort">Впорядкувати</string>
|
||||||
|
@ -2526,9 +2526,9 @@
|
||||||
<string name="routing_attr_avoid_ice_roads_fords_description">Уникає льодових доріг і бродів.</string>
|
<string name="routing_attr_avoid_ice_roads_fords_description">Уникає льодових доріг і бродів.</string>
|
||||||
<string name="make_round_trip_descr">Додати копію початкової точки як місце призначення.</string>
|
<string name="make_round_trip_descr">Додати копію початкової точки як місце призначення.</string>
|
||||||
<string name="make_round_trip">Зробити кругову подорож</string>
|
<string name="make_round_trip">Зробити кругову подорож</string>
|
||||||
<string name="osn_modify_dialog_error">Не вдалося змінити нотатку.</string>
|
<string name="osn_modify_dialog_error">Не вдалося змінити примітку.</string>
|
||||||
<string name="osn_modify_dialog_title">Змінити нотатку</string>
|
<string name="osn_modify_dialog_title">Змінити примітку</string>
|
||||||
<string name="context_menu_item_modify_note">Змінити OSM-нотатку</string>
|
<string name="context_menu_item_modify_note">Змінити примітку OSM</string>
|
||||||
<string name="wrong_input">Неправильний ввід</string>
|
<string name="wrong_input">Неправильний ввід</string>
|
||||||
<string name="wrong_format">Неправильний формат</string>
|
<string name="wrong_format">Неправильний формат</string>
|
||||||
<string name="shared_string_road">Дорога</string>
|
<string name="shared_string_road">Дорога</string>
|
||||||
|
@ -2576,15 +2576,15 @@
|
||||||
<string name="looking_for_tracks_with_waypoints">Пошук треків з шляховими точками</string>
|
<string name="looking_for_tracks_with_waypoints">Пошук треків з шляховими точками</string>
|
||||||
<string name="shared_string_more_without_dots">Більше</string>
|
<string name="shared_string_more_without_dots">Більше</string>
|
||||||
<string name="empty_state_osm_edits">Створити або змінити OSM-об\'єкти</string>
|
<string name="empty_state_osm_edits">Створити або змінити OSM-об\'єкти</string>
|
||||||
<string name="empty_state_osm_edits_descr">Створюйте або змінюйте цікаві точки в OSM, відкривайте або коментуйте OSM-нотатки, а також надсилайте записані GPX-файли.</string>
|
<string name="empty_state_osm_edits_descr">Створюйте або змінюйте OSM POI, відкривайте або коментуйте примітки OSM та надсилайте записані GPX-файли.</string>
|
||||||
<string name="shared_string_deleted">Вилучено</string>
|
<string name="shared_string_deleted">Вилучено</string>
|
||||||
<string name="shared_string_edited">Відредаговано</string>
|
<string name="shared_string_edited">Відредаговано</string>
|
||||||
<string name="shared_string_added">Додано</string>
|
<string name="shared_string_added">Додано</string>
|
||||||
<string name="marker_activated">Позначку %s задіяно.</string>
|
<string name="marker_activated">Позначку %s задіяно.</string>
|
||||||
<string name="one_tap_active_descr">Натискання на позначку на мапі перемістить її на перше місце в списку задіяних позначок, не відкриваючи контекстне меню.</string>
|
<string name="one_tap_active_descr">Натискання на позначку на мапі перемістить її на перше місце в списку задіяних позначок, не відкриваючи контекстне меню.</string>
|
||||||
<string name="one_tap_active">Задіювання одним натисненням</string>
|
<string name="one_tap_active">Задіювання одним натисненням</string>
|
||||||
<string name="empty_state_av_notes">Робіть нотатки!</string>
|
<string name="empty_state_av_notes">Робіть примітки!</string>
|
||||||
<string name="empty_state_av_notes_desc">Додайте аудіо, відео або фотонотатку в будь-яку точку на мапі, використовуючи віджет або контекстне меню.</string>
|
<string name="empty_state_av_notes_desc">Додайте аудіо, відео або фотопримітку в будь-яку точку на мапі використовуючи віджет або контекстне меню.</string>
|
||||||
<string name="notes_by_date">Примітки за датою</string>
|
<string name="notes_by_date">Примітки за датою</string>
|
||||||
<string name="by_date">За датою</string>
|
<string name="by_date">За датою</string>
|
||||||
<string name="by_type">За типом</string>
|
<string name="by_type">За типом</string>
|
||||||
|
@ -2620,14 +2620,14 @@
|
||||||
<string name="last_intermediate_dest_description">Додає проміжну зупинку</string>
|
<string name="last_intermediate_dest_description">Додає проміжну зупинку</string>
|
||||||
<string name="first_intermediate_dest_description">Додає першу зупинку</string>
|
<string name="first_intermediate_dest_description">Додає першу зупинку</string>
|
||||||
<string name="subsequent_dest_description">Пересунути призначення далі і створити його</string>
|
<string name="subsequent_dest_description">Пересунути призначення далі і створити його</string>
|
||||||
<string name="show_closed_notes">Показати закриті нотатки</string>
|
<string name="show_closed_notes">Показати закриті примітки</string>
|
||||||
<string name="switch_osm_notes_visibility_desc">Показати чи приховати примітки OSM на мапі.</string>
|
<string name="switch_osm_notes_visibility_desc">Показати чи приховати примітки OSM на мапі.</string>
|
||||||
<string name="gpx_file_desc">GPX — підходить для експорту в JOSM та інші OSM-редактори.</string>
|
<string name="gpx_file_desc">GPX — підходить для експорту в JOSM та інші OSM-редактори.</string>
|
||||||
<string name="osc_file_desc">OSC — підходить для експорту в OSM.</string>
|
<string name="osc_file_desc">OSC — підходить для експорту в OSM.</string>
|
||||||
<string name="shared_string_gpx_file">GPX-файл</string>
|
<string name="shared_string_gpx_file">GPX-файл</string>
|
||||||
<string name="osc_file">OSC-файл</string>
|
<string name="osc_file">OSC-файл</string>
|
||||||
<string name="choose_file_type">Виберіть тип файлу</string>
|
<string name="choose_file_type">Виберіть тип файлу</string>
|
||||||
<string name="osm_edits_export_desc">Виберіть вид експорту: OSM-нотатки, POI чи і те і те.</string>
|
<string name="osm_edits_export_desc">Виберіть вид експорту: примітки OSM, POI чи і те і те.</string>
|
||||||
<string name="all_data">Усі дані</string>
|
<string name="all_data">Усі дані</string>
|
||||||
<string name="osm_notes">Примітки OSM</string>
|
<string name="osm_notes">Примітки OSM</string>
|
||||||
<string name="will_open_tomorrow_at">Відкриється завтра о</string>
|
<string name="will_open_tomorrow_at">Відкриється завтра о</string>
|
||||||
|
@ -2844,7 +2844,7 @@
|
||||||
<string name="routeInfo_steepness_name">Крутість</string>
|
<string name="routeInfo_steepness_name">Крутість</string>
|
||||||
<string name="run_full_osmand_header">Запустити OsmAnd\?</string>
|
<string name="run_full_osmand_header">Запустити OsmAnd\?</string>
|
||||||
<string name="shared_string_walk">Пішки</string>
|
<string name="shared_string_walk">Пішки</string>
|
||||||
<string name="save_poi_value_exceed_length">Довжина тегу \"%s\" має бути менше 255 символів.</string>
|
<string name="save_poi_value_exceed_length">Довжина мітки \"%s\" має бути менше 255 символів.</string>
|
||||||
<string name="public_transport_warning_descr_blog">Докладніше про те, як OsmAnd розраховує маршрути, читайте в нашому деннику.</string>
|
<string name="public_transport_warning_descr_blog">Докладніше про те, як OsmAnd розраховує маршрути, читайте в нашому деннику.</string>
|
||||||
<string name="public_transport_warning_title">Навігація громадським транспортом на даний час проходить тестування, можливі помилки та неточності.</string>
|
<string name="public_transport_warning_title">Навігація громадським транспортом на даний час проходить тестування, можливі помилки та неточності.</string>
|
||||||
<string name="add_intermediate">Додати проміжну точку</string>
|
<string name="add_intermediate">Додати проміжну точку</string>
|
||||||
|
@ -3339,13 +3339,13 @@
|
||||||
<string name="multimedia_notes_prefs_descr">Розмір зображення, якість звуку та відео</string>
|
<string name="multimedia_notes_prefs_descr">Розмір зображення, якість звуку та відео</string>
|
||||||
<string name="osm_editing_prefs_descr">Логін, пароль, редагування в безмережному режимі</string>
|
<string name="osm_editing_prefs_descr">Логін, пароль, редагування в безмережному режимі</string>
|
||||||
<string name="accessibility_prefs_descr">Оберіть значок, колір та назву</string>
|
<string name="accessibility_prefs_descr">Оберіть значок, колір та назву</string>
|
||||||
<string name="live_monitoring_descr">Дозволяє ділитися поточним місцезнаходженням, використовуючи запис поїздки.</string>
|
<string name="live_monitoring_descr">Дозволяє ділитися поточним місцеперебуванням, використовуючи запис поїздки.</string>
|
||||||
<string name="live_monitoring">Мережеве відстеження</string>
|
<string name="live_monitoring">Мережеве відстеження</string>
|
||||||
<string name="save_track_logging_accuracy">Точність журналювання</string>
|
<string name="save_track_logging_accuracy">Точність журналювання</string>
|
||||||
<string name="tracks_view_descr">Ви можете знайти всі записи в %1$s або в теці OsmAnd за допомогою файлового провідника.</string>
|
<string name="tracks_view_descr">Ви можете знайти всі записи в %1$s або в теці OsmAnd за допомогою файлового провідника.</string>
|
||||||
<string name="multimedia_notes_view_descr">Ваші нотатки OSM знаходяться в %1$s.</string>
|
<string name="multimedia_notes_view_descr">Ваші примітки OSM розміщено в %1$s.</string>
|
||||||
<string name="video_notes">Відеонотатки</string>
|
<string name="video_notes">Відеопримітки</string>
|
||||||
<string name="photo_notes">Фотонотатки</string>
|
<string name="photo_notes">Фотопримітки</string>
|
||||||
<string name="route_recalculation">Перерахунок маршруту</string>
|
<string name="route_recalculation">Перерахунок маршруту</string>
|
||||||
<string name="accessibility_announce">Оголошення</string>
|
<string name="accessibility_announce">Оголошення</string>
|
||||||
<string name="login_and_pass">Ім\'я користувача і пароль</string>
|
<string name="login_and_pass">Ім\'я користувача і пароль</string>
|
||||||
|
@ -3617,7 +3617,7 @@
|
||||||
<string name="quick_action_show_hide_transport">Показати чи приховати громадський транспорт</string>
|
<string name="quick_action_show_hide_transport">Показати чи приховати громадський транспорт</string>
|
||||||
<string name="quick_action_transport_descr">Кнопка показу або приховування громадського транспорту на мапі.</string>
|
<string name="quick_action_transport_descr">Кнопка показу або приховування громадського транспорту на мапі.</string>
|
||||||
<string name="create_edit_poi">Створити чи змінити POI</string>
|
<string name="create_edit_poi">Створити чи змінити POI</string>
|
||||||
<string name="add_edit_favorite">Додати чи змінити вибране</string>
|
<string name="add_edit_favorite">Додати чи змінити закладку</string>
|
||||||
<string name="reset_deafult_order">Відновити усталене впорядкування</string>
|
<string name="reset_deafult_order">Відновити усталене впорядкування</string>
|
||||||
<string name="back_to_editing">Повернутися до редагування</string>
|
<string name="back_to_editing">Повернутися до редагування</string>
|
||||||
<string name="additional_actions_descr">Ви можете отримати доступ до цих дій, торкнувшись кнопки “%1$s”.</string>
|
<string name="additional_actions_descr">Ви можете отримати доступ до цих дій, торкнувшись кнопки “%1$s”.</string>
|
||||||
|
@ -3999,4 +3999,10 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">Гірський велосипед</string>
|
<string name="routing_engine_vehicle_type_mtb">Гірський велосипед</string>
|
||||||
<string name="message_server_error">Помилка сервера: %1$s</string>
|
<string name="message_server_error">Помилка сервера: %1$s</string>
|
||||||
<string name="message_name_is_already_exists">Назва вже існує</string>
|
<string name="message_name_is_already_exists">Назва вже існує</string>
|
||||||
|
<string name="delete_online_routing_engine">Видалити цей рушій мережної маршрутизації\?</string>
|
||||||
|
<string name="context_menu_read_full">Читати повністю</string>
|
||||||
|
<string name="context_menu_edit_descr">Змінити опис</string>
|
||||||
|
<string name="delete_waypoints">Видалити маршрутні точки</string>
|
||||||
|
<string name="copy_to_map_markers">Копіювати до позначок мапи</string>
|
||||||
|
<string name="copy_to_map_favorites">Копіювати до закладок</string>
|
||||||
</resources>
|
</resources>
|
|
@ -491,7 +491,7 @@
|
||||||
<string name="route_kr">靠右行驶</string>
|
<string name="route_kr">靠右行驶</string>
|
||||||
<string name="rendering_attr_noPolygons_name">隐藏多边形</string>
|
<string name="rendering_attr_noPolygons_name">隐藏多边形</string>
|
||||||
<string name="rendering_attr_appMode_name">渲染模式</string>
|
<string name="rendering_attr_appMode_name">渲染模式</string>
|
||||||
<string name="rendering_attr_contourLines_name"/>
|
<string name="rendering_attr_contourLines_name">显示等高线</string>
|
||||||
<string name="rendering_attr_hmRendered_name">显示更多地图细节</string>
|
<string name="rendering_attr_hmRendered_name">显示更多地图细节</string>
|
||||||
<string name="local_index_routing_data">路线规划数据</string>
|
<string name="local_index_routing_data">路线规划数据</string>
|
||||||
<string name="navigate_point_format">格式</string>
|
<string name="navigate_point_format">格式</string>
|
||||||
|
@ -1120,7 +1120,7 @@
|
||||||
<string name="do_not_send_anonymous_app_usage">不要发送匿名应用使用统计信息</string>
|
<string name="do_not_send_anonymous_app_usage">不要发送匿名应用使用统计信息</string>
|
||||||
<string name="restore_purchases">恢复购买内容</string>
|
<string name="restore_purchases">恢复购买内容</string>
|
||||||
<string name="shared_string_visible">可见性</string>
|
<string name="shared_string_visible">可见性</string>
|
||||||
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd 会搜集您打开应用的哪一部分的信息。您的位置永远不会被发送至服务器,您输入进应用的任何数据或者浏览的区域、搜索内容和下载内容同样不会被搜集。</string>
|
<string name="do_not_send_anonymous_app_usage_desc">OsmAnd 只会搜集您打开应用的那一部分的信息。您的位置永远不会被发送至服务器,您输入进应用的任何数据或者浏览的区域、搜索内容和下载内容同样不会被搜集。</string>
|
||||||
<string name="do_not_show_startup_messages">不要在启动时显示信息</string>
|
<string name="do_not_show_startup_messages">不要在启动时显示信息</string>
|
||||||
<string name="full_version_thanks">感谢您购买完整版本的 OsmAnd!</string>
|
<string name="full_version_thanks">感谢您购买完整版本的 OsmAnd!</string>
|
||||||
<string name="shared_string_action_name">操作名称</string>
|
<string name="shared_string_action_name">操作名称</string>
|
||||||
|
@ -1915,7 +1915,7 @@
|
||||||
<string name="map_widget_av_notes">音频/视频注记</string>
|
<string name="map_widget_av_notes">音频/视频注记</string>
|
||||||
<string name="audionotes_location_not_defined">轻触\"使用位置 …\"以在此添加注记。</string>
|
<string name="audionotes_location_not_defined">轻触\"使用位置 …\"以在此添加注记。</string>
|
||||||
<string name="map_widget_audionotes">音频注记</string>
|
<string name="map_widget_audionotes">音频注记</string>
|
||||||
<string name="rendering_attr_alpineHiking_name"/>
|
<string name="rendering_attr_alpineHiking_name">高山远足表(SAC)</string>
|
||||||
<string name="rendering_attr_alpineHiking_description">依据 SAC 分级计算路径</string>
|
<string name="rendering_attr_alpineHiking_description">依据 SAC 分级计算路径</string>
|
||||||
<string name="rendering_attr_hikingRoutesOSMC_name">徒步旅行符号叠加层</string>
|
<string name="rendering_attr_hikingRoutesOSMC_name">徒步旅行符号叠加层</string>
|
||||||
<string name="rendering_attr_hikingRoutesOSMC_description">根据 OSMC 轨迹渲染路径。</string>
|
<string name="rendering_attr_hikingRoutesOSMC_description">根据 OSMC 轨迹渲染路径。</string>
|
||||||
|
@ -3112,4 +3112,16 @@
|
||||||
<string name="add_address">添加地址</string>
|
<string name="add_address">添加地址</string>
|
||||||
<string name="access_hint_enter_address">输入地址</string>
|
<string name="access_hint_enter_address">输入地址</string>
|
||||||
<string name="monitoring_control_start">REC</string>
|
<string name="monitoring_control_start">REC</string>
|
||||||
|
<string name="measurement_tool_snap_to_road_descr">OsmAnd将为选择的配置文件连接路线点。</string>
|
||||||
|
<string name="add_point_before">在之前添加点</string>
|
||||||
|
<string name="add_point_after">在之后添加点</string>
|
||||||
|
<string name="route_point">路线点</string>
|
||||||
|
<string name="save_as_route_point">保存为路线点</string>
|
||||||
|
<string name="route_point_one">路线点1</string>
|
||||||
|
<string name="save_route_point">保存路线点</string>
|
||||||
|
<string name="live_monitoring_max_interval_to_send">用于在线跟踪的时间缓冲区</string>
|
||||||
|
<string name="quick_action_add_gpx">添加轨迹航点</string>
|
||||||
|
<string name="context_menu_item_add_waypoint">添加轨迹航点</string>
|
||||||
|
<string name="save_track_to_gpx_globally">将轨迹记录到GPX文件</string>
|
||||||
|
<string name="disable_recording_once_app_killed_descrp">当应用程序被杀死时,跟踪日志将被暂停(通过最近的应用程序)。(OsmAnd背景指示会从Android通知栏中消失)。</string>
|
||||||
</resources>
|
</resources>
|
|
@ -3993,4 +3993,10 @@
|
||||||
<string name="routing_engine_vehicle_type_mtb">登山車</string>
|
<string name="routing_engine_vehicle_type_mtb">登山車</string>
|
||||||
<string name="message_server_error">伺服器錯誤:%1$s</string>
|
<string name="message_server_error">伺服器錯誤:%1$s</string>
|
||||||
<string name="message_name_is_already_exists">名稱已存在</string>
|
<string name="message_name_is_already_exists">名稱已存在</string>
|
||||||
|
<string name="delete_online_routing_engine">刪除此線上路線引擎?</string>
|
||||||
|
<string name="context_menu_read_full">讀取全部</string>
|
||||||
|
<string name="context_menu_edit_descr">編輯描述</string>
|
||||||
|
<string name="delete_waypoints">刪除航點</string>
|
||||||
|
<string name="copy_to_map_markers">複製到地圖標記</string>
|
||||||
|
<string name="copy_to_map_favorites">複製到收藏</string>
|
||||||
</resources>
|
</resources>
|
|
@ -141,6 +141,7 @@
|
||||||
<attr name="bg_dash_line" format="reference"/>
|
<attr name="bg_dash_line" format="reference"/>
|
||||||
<attr name="text_input_background" format="reference"/>
|
<attr name="text_input_background" format="reference"/>
|
||||||
<attr name="image_help_announcement_time" format="reference"/>
|
<attr name="image_help_announcement_time" format="reference"/>
|
||||||
|
<attr name="switch_button_active" format="reference" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<declare-styleable name="PagerSlidingTabStrip">
|
<declare-styleable name="PagerSlidingTabStrip">
|
||||||
|
|
|
@ -274,6 +274,7 @@
|
||||||
<color name="gpx_chart_green_label">#197d2a</color>
|
<color name="gpx_chart_green_label">#197d2a</color>
|
||||||
|
|
||||||
<color name="gpx_split_segment_icon_color">#b3b3b3</color>
|
<color name="gpx_split_segment_icon_color">#b3b3b3</color>
|
||||||
|
<color name="gpx_pale_green">#87CC70</color>
|
||||||
|
|
||||||
<color name="map_background_color_light">#fafafa</color>
|
<color name="map_background_color_light">#fafafa</color>
|
||||||
<color name="map_background_color_dark">#101821</color>
|
<color name="map_background_color_dark">#101821</color>
|
||||||
|
|
|
@ -12,6 +12,17 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<string name="toast_select_edits_for_upload">Select edits for upload</string>
|
||||||
|
<string name="uploaded_count">Uploaded %1$d of %2$d</string>
|
||||||
|
<string name="uploading_count">Uploading %1$d of %2$d</string>
|
||||||
|
<string name="upload_photo_completed">Upload completed</string>
|
||||||
|
<string name="upload_photo">Uploading</string>
|
||||||
|
<string name="copy_to_map_favorites">Copy to favorites</string>
|
||||||
|
<string name="copy_to_map_markers">Copy to map markers</string>
|
||||||
|
<string name="delete_waypoints">Delete waypoints</string>
|
||||||
|
<string name="context_menu_edit_descr">Edit description</string>
|
||||||
|
<string name="context_menu_read_full">Read full</string>
|
||||||
|
<string name="delete_online_routing_engine">Delete this online routing engine?</string>
|
||||||
<string name="message_name_is_already_exists">The name is already exists</string>
|
<string name="message_name_is_already_exists">The name is already exists</string>
|
||||||
<string name="message_server_error">Server error: %1$s</string>
|
<string name="message_server_error">Server error: %1$s</string>
|
||||||
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
<string name="routing_engine_vehicle_type_mtb">MTB</string>
|
||||||
|
@ -2433,7 +2444,7 @@
|
||||||
<string name="average">Average</string>
|
<string name="average">Average</string>
|
||||||
<string name="of">%1$d of %2$d</string>
|
<string name="of">%1$d of %2$d</string>
|
||||||
<string name="ascent_descent">Ascent/Descent</string>
|
<string name="ascent_descent">Ascent/Descent</string>
|
||||||
<string name="moving_time">Moving time</string>
|
<string name="moving_time">Time in motion</string>
|
||||||
<string name="max_min">Max/Min</string>
|
<string name="max_min">Max/Min</string>
|
||||||
<string name="min_max">Min/Max</string>
|
<string name="min_max">Min/Max</string>
|
||||||
<string name="index_tours">Tours</string>
|
<string name="index_tours">Tours</string>
|
||||||
|
|
|
@ -248,6 +248,7 @@
|
||||||
<item name="radioButtonStyle">@style/RadioButtonStyle</item>
|
<item name="radioButtonStyle">@style/RadioButtonStyle</item>
|
||||||
<item name="text_input_background">@color/text_input_background_light</item>
|
<item name="text_input_background">@color/text_input_background_light</item>
|
||||||
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_day</item>
|
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_day</item>
|
||||||
|
<item name="switch_button_active">@color/switch_button_active_light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
|
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
|
||||||
|
@ -545,6 +546,7 @@
|
||||||
<item name="radioButtonStyle">@style/RadioButtonStyle</item>
|
<item name="radioButtonStyle">@style/RadioButtonStyle</item>
|
||||||
<item name="text_input_background">@color/text_input_background_dark</item>
|
<item name="text_input_background">@color/text_input_background_dark</item>
|
||||||
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_night</item>
|
<item name="image_help_announcement_time">@drawable/img_help_announcement_time_night</item>
|
||||||
|
<item name="switch_button_active">@color/switch_button_active_dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="FreeVersionBanner" parent="OsmandDarkTheme">
|
<style name="FreeVersionBanner" parent="OsmandDarkTheme">
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package net.osmand;
|
package net.osmand;
|
||||||
|
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
@ -8,6 +9,8 @@ import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
|
import net.osmand.GPXUtilities.Metadata;
|
||||||
import net.osmand.plus.GpxSelectionHelper;
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
@ -109,6 +112,8 @@ public class FileUtils {
|
||||||
selected.getGpxFile().path = dest.getAbsolutePath();
|
selected.getGpxFile().path = dest.getAbsolutePath();
|
||||||
helper.updateSelectedGpxFile(selected);
|
helper.updateSelectedGpxFile(selected);
|
||||||
}
|
}
|
||||||
|
RenameGpxAsyncTask renameGpxAsyncTask = new RenameGpxAsyncTask(app, dest);
|
||||||
|
renameGpxAsyncTask.execute();
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
@ -196,4 +201,34 @@ public class FileUtils {
|
||||||
public interface RenameCallback {
|
public interface RenameCallback {
|
||||||
void renamedTo(File file);
|
void renamedTo(File file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class RenameGpxAsyncTask extends AsyncTask<Void, Void, Exception> {
|
||||||
|
|
||||||
|
private OsmandApplication app;
|
||||||
|
private File file;
|
||||||
|
|
||||||
|
private RenameGpxAsyncTask(@NonNull OsmandApplication app, @NonNull File file) {
|
||||||
|
this.app = app;
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Exception doInBackground(Void... voids) {
|
||||||
|
GpxSelectionHelper helper = app.getSelectedGpxHelper();
|
||||||
|
SelectedGpxFile selected = helper.getSelectedFileByPath(file.getAbsolutePath());
|
||||||
|
|
||||||
|
GPXFile gpxFile;
|
||||||
|
if (selected != null && selected.getGpxFile() != null) {
|
||||||
|
gpxFile = selected.getGpxFile();
|
||||||
|
} else {
|
||||||
|
gpxFile = GPXUtilities.loadGPXFile(file);
|
||||||
|
}
|
||||||
|
if (gpxFile.metadata == null) {
|
||||||
|
gpxFile.metadata = new Metadata();
|
||||||
|
}
|
||||||
|
gpxFile.metadata.name = Algorithms.getFileNameWithoutExtension(file.getName());
|
||||||
|
|
||||||
|
return GPXUtilities.writeGpxFile(file, gpxFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2296,13 +2296,13 @@ public class OsmandAidlApi {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean importProfileV2(final Uri profileUri, ArrayList<String> settingsTypeKeys, boolean replace,
|
public boolean importProfileV2(final Uri profileUri, List<String> settingsTypeKeys, boolean replace,
|
||||||
String latestChanges, int version) {
|
boolean silent, String latestChanges, int version) {
|
||||||
if (profileUri != null) {
|
if (profileUri != null) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putStringArrayList(SettingsHelper.SETTINGS_TYPE_LIST_KEY, settingsTypeKeys);
|
bundle.putStringArrayList(SettingsHelper.SETTINGS_TYPE_LIST_KEY, new ArrayList<>(settingsTypeKeys));
|
||||||
bundle.putBoolean(REPLACE_KEY, replace);
|
bundle.putBoolean(REPLACE_KEY, replace);
|
||||||
bundle.putBoolean(SILENT_IMPORT_KEY, true);
|
bundle.putBoolean(SILENT_IMPORT_KEY, silent);
|
||||||
bundle.putString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY, latestChanges);
|
bundle.putString(SettingsHelper.SETTINGS_LATEST_CHANGES_KEY, latestChanges);
|
||||||
bundle.putInt(SettingsHelper.SETTINGS_VERSION_KEY, version);
|
bundle.putInt(SettingsHelper.SETTINGS_VERSION_KEY, version);
|
||||||
|
|
||||||
|
|
|
@ -1270,7 +1270,7 @@ public class OsmandAidlServiceV2 extends Service implements AidlCallbackListener
|
||||||
try {
|
try {
|
||||||
OsmandAidlApi api = getApi("importProfile");
|
OsmandAidlApi api = getApi("importProfile");
|
||||||
return api != null && api.importProfileV2(params.getProfileSettingsUri(), params.getSettingsTypeKeys(),
|
return api != null && api.importProfileV2(params.getProfileSettingsUri(), params.getSettingsTypeKeys(),
|
||||||
params.isReplace(), params.getLatestChanges(), params.getVersion());
|
params.isReplace(), params.isSilent(), params.getLatestChanges(), params.getVersion());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
handleException(e);
|
handleException(e);
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -45,10 +45,12 @@ import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
public class GpxSelectionHelper {
|
public class GpxSelectionHelper {
|
||||||
|
|
||||||
|
@ -60,6 +62,7 @@ public class GpxSelectionHelper {
|
||||||
private static final String BACKUPMODIFIEDTIME = "backupTime";
|
private static final String BACKUPMODIFIEDTIME = "backupTime";
|
||||||
private static final String COLOR = "color";
|
private static final String COLOR = "color";
|
||||||
private static final String SELECTED_BY_USER = "selected_by_user";
|
private static final String SELECTED_BY_USER = "selected_by_user";
|
||||||
|
private static final String HIDDEN_GROUPS = "hidden_groups";
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
private SavingTrackHelper savingTrackHelper;
|
private SavingTrackHelper savingTrackHelper;
|
||||||
|
@ -150,12 +153,12 @@ public class GpxSelectionHelper {
|
||||||
return followTrackListener;
|
return followTrackListener;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class GpxFileLoaderTask extends AsyncTask<Void, Void, GPXFile> {
|
public static class GpxFileLoaderTask extends AsyncTask<Void, Void, GPXFile> {
|
||||||
|
|
||||||
private File fileToLoad;
|
private File fileToLoad;
|
||||||
private CallbackWithObject<GPXFile> callback;
|
private CallbackWithObject<GPXFile> callback;
|
||||||
|
|
||||||
GpxFileLoaderTask(File fileToLoad, CallbackWithObject<GPXFile> callback) {
|
public GpxFileLoaderTask(File fileToLoad, CallbackWithObject<GPXFile> callback) {
|
||||||
this.fileToLoad = fileToLoad;
|
this.fileToLoad = fileToLoad;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
}
|
}
|
||||||
|
@ -577,7 +580,10 @@ public class GpxSelectionHelper {
|
||||||
} else if (obj.has(BACKUP)) {
|
} else if (obj.has(BACKUP)) {
|
||||||
selectedGpxFilesBackUp.put(gpx, gpx.modifiedTime);
|
selectedGpxFilesBackUp.put(gpx, gpx.modifiedTime);
|
||||||
} else {
|
} else {
|
||||||
selectGpxFile(gpx, true, false, true, selectedByUser, false);
|
SelectedGpxFile file = selectGpxFile(gpx, true, false, true, selectedByUser, false);
|
||||||
|
if (obj.has(HIDDEN_GROUPS)) {
|
||||||
|
readHiddenGroups(file, obj.getString(HIDDEN_GROUPS));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gpx.addGeneralTrack();
|
gpx.addGeneralTrack();
|
||||||
} else if (obj.has(CURRENT_TRACK)) {
|
} else if (obj.has(CURRENT_TRACK)) {
|
||||||
|
@ -598,6 +604,33 @@ public class GpxSelectionHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String saveHiddenGroups(SelectedGpxFile selectedGpxFile) {
|
||||||
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
|
Iterator<String> it = selectedGpxFile.hiddenGroups.iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
String name = it.next();
|
||||||
|
stringBuilder.append(name != null ? name : " ");
|
||||||
|
if (it.hasNext()) {
|
||||||
|
stringBuilder.append(",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return stringBuilder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readHiddenGroups(SelectedGpxFile selectedGpxFile, String text) {
|
||||||
|
StringTokenizer toks = new StringTokenizer(text, ",");
|
||||||
|
Set<String> res = new HashSet<>();
|
||||||
|
while (toks.hasMoreTokens()) {
|
||||||
|
String token = toks.nextToken();
|
||||||
|
if (!Algorithms.isBlank(token)) {
|
||||||
|
res.add(token);
|
||||||
|
} else {
|
||||||
|
res.add(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selectedGpxFile.hiddenGroups = res;
|
||||||
|
}
|
||||||
|
|
||||||
private int parseColor(String color) {
|
private int parseColor(String color) {
|
||||||
try {
|
try {
|
||||||
return Algorithms.isEmpty(color) ? 0 : Algorithms.parseColor(color);
|
return Algorithms.isEmpty(color) ? 0 : Algorithms.parseColor(color);
|
||||||
|
@ -619,6 +652,7 @@ public class GpxSelectionHelper {
|
||||||
if (s.gpxFile.getColor(0) != 0) {
|
if (s.gpxFile.getColor(0) != 0) {
|
||||||
obj.put(COLOR, Algorithms.colorToString(s.gpxFile.getColor(0)));
|
obj.put(COLOR, Algorithms.colorToString(s.gpxFile.getColor(0)));
|
||||||
}
|
}
|
||||||
|
obj.put(HIDDEN_GROUPS, saveHiddenGroups(s));
|
||||||
}
|
}
|
||||||
obj.put(SELECTED_BY_USER, s.selectedByUser);
|
obj.put(SELECTED_BY_USER, s.selectedByUser);
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
@ -765,6 +799,7 @@ public class GpxSelectionHelper {
|
||||||
private GPXFile gpxFile;
|
private GPXFile gpxFile;
|
||||||
private GPXTrackAnalysis trackAnalysis;
|
private GPXTrackAnalysis trackAnalysis;
|
||||||
|
|
||||||
|
private Set<String> hiddenGroups = new HashSet<>();
|
||||||
private List<TrkSegment> processedPointsToDisplay = new ArrayList<>();
|
private List<TrkSegment> processedPointsToDisplay = new ArrayList<>();
|
||||||
private List<GpxDisplayGroup> displayGroups;
|
private List<GpxDisplayGroup> displayGroups;
|
||||||
|
|
||||||
|
@ -832,6 +867,18 @@ public class GpxSelectionHelper {
|
||||||
return processedPointsToDisplay;
|
return processedPointsToDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<String> getHiddenGroups() {
|
||||||
|
return Collections.unmodifiableSet(hiddenGroups);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addHiddenGroups(String group) {
|
||||||
|
hiddenGroups.add(group);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeHiddenGroups(String group) {
|
||||||
|
hiddenGroups.remove(group);
|
||||||
|
}
|
||||||
|
|
||||||
public GPXFile getGpxFile() {
|
public GPXFile getGpxFile() {
|
||||||
return gpxFile;
|
return gpxFile;
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,6 +210,8 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
File mapillaryVectorTilesPath = new File(tilesPath, TileSourceManager.getMapillaryVectorSource().getName());
|
File mapillaryVectorTilesPath = new File(tilesPath, TileSourceManager.getMapillaryVectorSource().getName());
|
||||||
Algorithms.removeAllFiles(mapillaryRasterTilesPath);
|
Algorithms.removeAllFiles(mapillaryRasterTilesPath);
|
||||||
Algorithms.removeAllFiles(mapillaryVectorTilesPath);
|
Algorithms.removeAllFiles(mapillaryVectorTilesPath);
|
||||||
|
// Remove travel sqlite db files
|
||||||
|
removeSqliteDbTravelFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
checkPreferredLocale();
|
checkPreferredLocale();
|
||||||
|
@ -234,6 +236,17 @@ public class OsmandApplication extends MultiDexApplication {
|
||||||
return externalStorageDirectoryReadOnly;
|
return externalStorageDirectoryReadOnly;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void removeSqliteDbTravelFiles() {
|
||||||
|
File[] files = getAppPath(IndexConstants.WIKIVOYAGE_INDEX_DIR).listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
for (File file : files) {
|
||||||
|
if (file.getName().endsWith(IndexConstants.BINARY_WIKIVOYAGE_MAP_INDEX_EXT)) {
|
||||||
|
file.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void attachBaseContext(Context base) {
|
protected void attachBaseContext(Context base) {
|
||||||
super.attachBaseContext(base);
|
super.attachBaseContext(base);
|
||||||
|
|
|
@ -70,7 +70,6 @@ import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OnDismissDialogFragmentListener;
|
import net.osmand.plus.OnDismissDialogFragmentListener;
|
||||||
import net.osmand.plus.OsmAndConstants;
|
import net.osmand.plus.OsmAndConstants;
|
||||||
import net.osmand.plus.OsmAndLocationProvider;
|
|
||||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||||
import net.osmand.plus.OsmAndLocationSimulation;
|
import net.osmand.plus.OsmAndLocationSimulation;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
@ -652,7 +651,9 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
protected void onNewIntent(final Intent intent) {
|
protected void onNewIntent(final Intent intent) {
|
||||||
super.onNewIntent(intent);
|
super.onNewIntent(intent);
|
||||||
setIntent(intent);
|
setIntent(intent);
|
||||||
intentHelper.parseLaunchIntents();
|
if (!intentHelper.parseLaunchIntents()) {
|
||||||
|
intentHelper.parseContentIntent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1201,7 +1202,7 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(gpxFile.path);
|
selectedGpxFile = app.getSelectedGpxHelper().getSelectedFileByPath(gpxFile.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackAppearanceFragment.showInstance(this, selectedGpxFile);
|
TrackAppearanceFragment.showInstance(this, selectedGpxFile, null);
|
||||||
} else if (toShow instanceof QuadRect) {
|
} else if (toShow instanceof QuadRect) {
|
||||||
QuadRect qr = (QuadRect) toShow;
|
QuadRect qr = (QuadRect) toShow;
|
||||||
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
|
mapView.fitRectToMap(qr.left, qr.right, qr.top, qr.bottom, (int) qr.width(), (int) qr.height(), 0);
|
||||||
|
@ -1568,6 +1569,17 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldHideTopControls() {
|
||||||
|
boolean hideTopControls = !mapContextMenu.shouldShowTopControls();
|
||||||
|
|
||||||
|
TrackMenuFragment fragment = getTrackMenuFragment();
|
||||||
|
if (fragment != null) {
|
||||||
|
hideTopControls = hideTopControls || !fragment.shouldShowTopControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
return hideTopControls;
|
||||||
|
}
|
||||||
|
|
||||||
public OsmandMapTileView getMapView() {
|
public OsmandMapTileView getMapView() {
|
||||||
return mapView;
|
return mapView;
|
||||||
}
|
}
|
||||||
|
@ -1628,8 +1640,8 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
|
||||||
launchMapActivityMoveToTop(activity, null);
|
launchMapActivityMoveToTop(activity, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void launchMapActivityMoveToTop(Context activity, Bundle intentParams) {
|
public static void launchMapActivityMoveToTop(Context activity, Bundle prevIntentParams) {
|
||||||
launchMapActivityMoveToTop(activity, intentParams, null, null);
|
launchMapActivityMoveToTop(activity, prevIntentParams, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void clearPrevActivityIntent() {
|
public static void clearPrevActivityIntent() {
|
||||||
|
|
|
@ -928,7 +928,7 @@ public class MapActivityActions implements DialogProvider {
|
||||||
MapActivity.clearPrevActivityIntent();
|
MapActivity.clearPrevActivityIntent();
|
||||||
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
TravelHelper travelHelper = getMyApplication().getTravelHelper();
|
||||||
travelHelper.initializeDataOnAppStartup();
|
travelHelper.initializeDataOnAppStartup();
|
||||||
if (!travelHelper.isAnyTravelBookPresent()) {
|
if (!travelHelper.isAnyTravelBookPresent() && !travelHelper.getBookmarksHelper().hasSavedArticles()) {
|
||||||
WikivoyageWelcomeDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
WikivoyageWelcomeDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(mapActivity, WikivoyageExploreActivity.class);
|
Intent intent = new Intent(mapActivity, WikivoyageExploreActivity.class);
|
||||||
|
|
|
@ -38,10 +38,10 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class SavingTrackHelper extends SQLiteOpenHelper {
|
public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
public final static String DATABASE_NAME = "tracks"; //$NON-NLS-1$
|
public final static String DATABASE_NAME = "tracks"; //$NON-NLS-1$
|
||||||
public final static int DATABASE_VERSION = 6;
|
public final static int DATABASE_VERSION = 7;
|
||||||
|
|
||||||
public final static String TRACK_NAME = "track"; //$NON-NLS-1$
|
public final static String TRACK_NAME = "track"; //$NON-NLS-1$
|
||||||
public final static String TRACK_COL_DATE = "date"; //$NON-NLS-1$
|
public final static String TRACK_COL_DATE = "date"; //$NON-NLS-1$
|
||||||
public final static String TRACK_COL_LAT = "lat"; //$NON-NLS-1$
|
public final static String TRACK_COL_LAT = "lat"; //$NON-NLS-1$
|
||||||
|
@ -50,7 +50,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
public final static String TRACK_COL_SPEED = "speed"; //$NON-NLS-1$
|
public final static String TRACK_COL_SPEED = "speed"; //$NON-NLS-1$
|
||||||
public final static String TRACK_COL_HDOP = "hdop"; //$NON-NLS-1$
|
public final static String TRACK_COL_HDOP = "hdop"; //$NON-NLS-1$
|
||||||
public final static String TRACK_COL_HEADING = "heading"; //$NON-NLS-1$
|
public final static String TRACK_COL_HEADING = "heading"; //$NON-NLS-1$
|
||||||
|
|
||||||
public final static String POINT_NAME = "point"; //$NON-NLS-1$
|
public final static String POINT_NAME = "point"; //$NON-NLS-1$
|
||||||
public final static String POINT_COL_DATE = "date"; //$NON-NLS-1$
|
public final static String POINT_COL_DATE = "date"; //$NON-NLS-1$
|
||||||
public final static String POINT_COL_LAT = "lat"; //$NON-NLS-1$
|
public final static String POINT_COL_LAT = "lat"; //$NON-NLS-1$
|
||||||
|
@ -59,7 +59,9 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
public final static String POINT_COL_CATEGORY = "category"; //$NON-NLS-1$
|
public final static String POINT_COL_CATEGORY = "category"; //$NON-NLS-1$
|
||||||
public final static String POINT_COL_DESCRIPTION = "description"; //$NON-NLS-1$
|
public final static String POINT_COL_DESCRIPTION = "description"; //$NON-NLS-1$
|
||||||
public final static String POINT_COL_COLOR = "color"; //$NON-NLS-1$
|
public final static String POINT_COL_COLOR = "color"; //$NON-NLS-1$
|
||||||
|
public final static String POINT_COL_ICON = "icon"; //$NON-NLS-1$
|
||||||
|
public final static String POINT_COL_BACKGROUND = "background"; //$NON-NLS-1$
|
||||||
|
|
||||||
public final static float NO_HEADING = -1.0f;
|
public final static float NO_HEADING = -1.0f;
|
||||||
|
|
||||||
public final static Log log = PlatformUtil.getLog(SavingTrackHelper.class);
|
public final static Log log = PlatformUtil.getLog(SavingTrackHelper.class);
|
||||||
|
@ -76,8 +78,8 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
private SelectedGpxFile currentTrack;
|
private SelectedGpxFile currentTrack;
|
||||||
private int points;
|
private int points;
|
||||||
private int trkPoints = 0;
|
private int trkPoints = 0;
|
||||||
|
|
||||||
public SavingTrackHelper(OsmandApplication ctx){
|
public SavingTrackHelper(OsmandApplication ctx) {
|
||||||
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
|
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
this.currentTrack = new SelectedGpxFile();
|
this.currentTrack = new SelectedGpxFile();
|
||||||
|
@ -88,11 +90,14 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
prepareCurrentTrackForRecording();
|
prepareCurrentTrackForRecording();
|
||||||
|
|
||||||
updateScript = "INSERT INTO " + TRACK_NAME + " (" + TRACK_COL_LAT + ", " + TRACK_COL_LON + ", "
|
updateScript = "INSERT INTO " + TRACK_NAME + " (" + TRACK_COL_LAT + ", " + TRACK_COL_LON + ", "
|
||||||
+ TRACK_COL_ALTITUDE + ", " + TRACK_COL_SPEED + ", " + TRACK_COL_HDOP + ", "
|
+ TRACK_COL_ALTITUDE + ", " + TRACK_COL_SPEED + ", " + TRACK_COL_HDOP + ", "
|
||||||
+ TRACK_COL_DATE + ", " + TRACK_COL_HEADING + ")"
|
+ TRACK_COL_DATE + ", " + TRACK_COL_HEADING + ")"
|
||||||
+ " VALUES (?, ?, ?, ?, ?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
|
+ " VALUES (?, ?, ?, ?, ?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
insertPointsScript = "INSERT INTO " + POINT_NAME + " VALUES (?, ?, ?, ?, ?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
|
insertPointsScript = "INSERT INTO " + POINT_NAME + " (" + POINT_COL_LAT + ", " + POINT_COL_LON + ", "
|
||||||
|
+ POINT_COL_DATE + ", " + POINT_COL_DESCRIPTION + ", " + POINT_COL_NAME + ", "
|
||||||
|
+ POINT_COL_CATEGORY + ", " + POINT_COL_COLOR + ", " + POINT_COL_ICON + ", "
|
||||||
|
+ POINT_COL_BACKGROUND + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -100,19 +105,19 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
createTableForTrack(db);
|
createTableForTrack(db);
|
||||||
createTableForPoints(db);
|
createTableForPoints(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTableForTrack(SQLiteDatabase db){
|
private void createTableForTrack(SQLiteDatabase db) {
|
||||||
db.execSQL("CREATE TABLE " + TRACK_NAME + " (" + TRACK_COL_LAT + " double, " + TRACK_COL_LON + " double, " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
db.execSQL("CREATE TABLE " + TRACK_NAME + " (" + TRACK_COL_LAT + " double, " + TRACK_COL_LON + " double, " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
+ TRACK_COL_ALTITUDE + " double, " + TRACK_COL_SPEED + " double, " //$NON-NLS-1$ //$NON-NLS-2$
|
+ TRACK_COL_ALTITUDE + " double, " + TRACK_COL_SPEED + " double, " //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
+ TRACK_COL_HDOP + " double, " + TRACK_COL_DATE + " long, "
|
+ TRACK_COL_HDOP + " double, " + TRACK_COL_DATE + " long, "
|
||||||
+ TRACK_COL_HEADING + " float )"); //$NON-NLS-1$ //$NON-NLS-2$
|
+ TRACK_COL_HEADING + " float )"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTableForPoints(SQLiteDatabase db){
|
private void createTableForPoints(SQLiteDatabase db) {
|
||||||
try {
|
try {
|
||||||
db.execSQL("CREATE TABLE " + POINT_NAME + " (" + POINT_COL_LAT + " double, " + POINT_COL_LON + " double, " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
db.execSQL("CREATE TABLE " + POINT_NAME + " (" + POINT_COL_LAT + " double, " + POINT_COL_LON + " double, " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
+ POINT_COL_DATE + " long, " + POINT_COL_DESCRIPTION + " text, " + POINT_COL_NAME + " text, "
|
+ POINT_COL_DATE + " long, " + POINT_COL_DESCRIPTION + " text, " + POINT_COL_NAME + " text, "
|
||||||
+ POINT_COL_CATEGORY + " text, " + POINT_COL_COLOR + " long" + ")"); //$NON-NLS-1$ //$NON-NLS-2$
|
+ POINT_COL_CATEGORY + " text, " + POINT_COL_COLOR + " long, " + POINT_COL_ICON + " text, " + POINT_COL_BACKGROUND + " text )"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
// ignore if already exists
|
// ignore if already exists
|
||||||
}
|
}
|
||||||
|
@ -120,25 +125,29 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
if(oldVersion < 2){
|
if (oldVersion < 2) {
|
||||||
createTableForPoints(db);
|
createTableForPoints(db);
|
||||||
}
|
}
|
||||||
if(oldVersion < 3){
|
if (oldVersion < 3) {
|
||||||
db.execSQL("ALTER TABLE " + TRACK_NAME + " ADD " + TRACK_COL_HDOP + " double");
|
db.execSQL("ALTER TABLE " + TRACK_NAME + " ADD " + TRACK_COL_HDOP + " double");
|
||||||
}
|
}
|
||||||
if(oldVersion < 4){
|
if (oldVersion < 4) {
|
||||||
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_NAME + " text");
|
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_NAME + " text");
|
||||||
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_CATEGORY + " text");
|
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_CATEGORY + " text");
|
||||||
}
|
}
|
||||||
if(oldVersion < 5){
|
if (oldVersion < 5) {
|
||||||
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_COLOR + " long");
|
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_COLOR + " long");
|
||||||
}
|
}
|
||||||
if(oldVersion < 6){
|
if (oldVersion < 6) {
|
||||||
db.execSQL("ALTER TABLE " + TRACK_NAME + " ADD " + TRACK_COL_HEADING + " float");
|
db.execSQL("ALTER TABLE " + TRACK_NAME + " ADD " + TRACK_COL_HEADING + " float");
|
||||||
|
}
|
||||||
|
if (oldVersion < 7) {
|
||||||
|
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_ICON + " text");
|
||||||
|
db.execSQL("ALTER TABLE " + POINT_NAME + " ADD " + POINT_COL_BACKGROUND + " text");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public long getLastTrackPointTime() {
|
public long getLastTrackPointTime() {
|
||||||
long res = 0;
|
long res = 0;
|
||||||
try {
|
try {
|
||||||
|
@ -146,7 +155,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
if (db != null) {
|
if (db != null) {
|
||||||
try {
|
try {
|
||||||
Cursor query = db.rawQuery("SELECT " + TRACK_COL_DATE + " FROM " + TRACK_NAME + " ORDER BY " + TRACK_COL_DATE + " DESC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
Cursor query = db.rawQuery("SELECT " + TRACK_COL_DATE + " FROM " + TRACK_NAME + " ORDER BY " + TRACK_COL_DATE + " DESC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
if(query.moveToFirst()) {
|
if (query.moveToFirst()) {
|
||||||
res = query.getLong(0);
|
res = query.getLong(0);
|
||||||
}
|
}
|
||||||
query.close();
|
query.close();
|
||||||
|
@ -154,11 +163,11 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean hasDataToSave() {
|
public synchronized boolean hasDataToSave() {
|
||||||
try {
|
try {
|
||||||
SQLiteDatabase db = getWritableDatabase();
|
SQLiteDatabase db = getWritableDatabase();
|
||||||
|
@ -172,11 +181,11 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
q = db.query(false, POINT_NAME, new String[]{POINT_COL_LAT, POINT_COL_LON}, null, null, null, null, null, null);
|
q = db.query(false, POINT_NAME, new String[]{POINT_COL_LAT, POINT_COL_LON}, null, null, null, null, null, null);
|
||||||
has = q.moveToFirst();
|
has = q.moveToFirst();
|
||||||
while(has) {
|
while (has) {
|
||||||
if(q.getDouble(0) != 0 || q.getDouble(1) != 0) {
|
if (q.getDouble(0) != 0 || q.getDouble(1) != 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(!q.moveToNext()) {
|
if (!q.moveToNext()) {
|
||||||
has = false;
|
has = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -189,7 +198,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -294,7 +303,8 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
private void collectDBPoints(SQLiteDatabase db, Map<String, GPXFile> dataTracks) {
|
private void collectDBPoints(SQLiteDatabase db, Map<String, GPXFile> dataTracks) {
|
||||||
Cursor query = db.rawQuery("SELECT " + POINT_COL_LAT + "," + POINT_COL_LON + "," + POINT_COL_DATE + "," //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
Cursor query = db.rawQuery("SELECT " + POINT_COL_LAT + "," + POINT_COL_LON + "," + POINT_COL_DATE + "," //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
+ POINT_COL_DESCRIPTION + "," + POINT_COL_NAME + "," + POINT_COL_CATEGORY + "," + POINT_COL_COLOR + " FROM " + POINT_NAME+" ORDER BY " + POINT_COL_DATE +" ASC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
+ POINT_COL_DESCRIPTION + "," + POINT_COL_NAME + "," + POINT_COL_CATEGORY + "," + POINT_COL_COLOR + ","
|
||||||
|
+ POINT_COL_ICON + "," + POINT_COL_BACKGROUND + " FROM " + POINT_NAME + " ORDER BY " + POINT_COL_DATE + " ASC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
if (query.moveToFirst()) {
|
if (query.moveToFirst()) {
|
||||||
do {
|
do {
|
||||||
WptPt pt = new WptPt();
|
WptPt pt = new WptPt();
|
||||||
|
@ -309,18 +319,20 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
if (color != 0) {
|
if (color != 0) {
|
||||||
pt.setColor(color);
|
pt.setColor(color);
|
||||||
}
|
}
|
||||||
|
pt.setIconName(query.getString(7));
|
||||||
|
pt.setBackgroundType(query.getString(8));
|
||||||
|
|
||||||
// check if name is extension (needed for audio/video plugin & josm integration)
|
// check if name is extension (needed for audio/video plugin & josm integration)
|
||||||
if(pt.name != null && pt.name.length() > 4 && pt.name.charAt(pt.name.length() - 4) == '.') {
|
if (pt.name != null && pt.name.length() > 4 && pt.name.charAt(pt.name.length() - 4) == '.') {
|
||||||
pt.link = pt.name;
|
pt.link = pt.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
String date = DateFormat.format("yyyy-MM-dd", time).toString(); //$NON-NLS-1$
|
String date = DateFormat.format("yyyy-MM-dd", time).toString(); //$NON-NLS-1$
|
||||||
GPXFile gpx;
|
GPXFile gpx;
|
||||||
if (dataTracks.containsKey(date)) {
|
if (dataTracks.containsKey(date)) {
|
||||||
gpx = dataTracks.get(date);
|
gpx = dataTracks.get(date);
|
||||||
} else {
|
} else {
|
||||||
gpx = new GPXFile(Version.getFullVersion(ctx));
|
gpx = new GPXFile(Version.getFullVersion(ctx));
|
||||||
dataTracks.put(date, gpx);
|
dataTracks.put(date, gpx);
|
||||||
}
|
}
|
||||||
ctx.getSelectedGpxHelper().addPoint(pt, gpx);
|
ctx.getSelectedGpxHelper().addPoint(pt, gpx);
|
||||||
|
@ -329,10 +341,10 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
query.close();
|
query.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collectDBTracks(SQLiteDatabase db, Map<String, GPXFile> dataTracks) {
|
private void collectDBTracks(SQLiteDatabase db, Map<String, GPXFile> dataTracks) {
|
||||||
Cursor query = db.rawQuery("SELECT " + TRACK_COL_LAT + "," + TRACK_COL_LON + "," + TRACK_COL_ALTITUDE + "," //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
Cursor query = db.rawQuery("SELECT " + TRACK_COL_LAT + "," + TRACK_COL_LON + "," + TRACK_COL_ALTITUDE + "," //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
+ TRACK_COL_SPEED + "," + TRACK_COL_HDOP + "," + TRACK_COL_DATE + "," + TRACK_COL_HEADING + " FROM " + TRACK_NAME +" ORDER BY " + TRACK_COL_DATE +" ASC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
+ TRACK_COL_SPEED + "," + TRACK_COL_HDOP + "," + TRACK_COL_DATE + "," + TRACK_COL_HEADING + " FROM " + TRACK_NAME + " ORDER BY " + TRACK_COL_DATE + " ASC", null); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
long previousTime = 0;
|
long previousTime = 0;
|
||||||
long previousInterval = 0;
|
long previousInterval = 0;
|
||||||
TrkSegment segment = null;
|
TrkSegment segment = null;
|
||||||
|
@ -351,14 +363,14 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
pt.heading = heading == NO_HEADING ? Float.NaN : heading;
|
pt.heading = heading == NO_HEADING ? Float.NaN : heading;
|
||||||
long currentInterval = Math.abs(time - previousTime);
|
long currentInterval = Math.abs(time - previousTime);
|
||||||
boolean newInterval = pt.lat == 0 && pt.lon == 0;
|
boolean newInterval = pt.lat == 0 && pt.lon == 0;
|
||||||
|
|
||||||
if (track != null && !newInterval && (!ctx.getSettings().AUTO_SPLIT_RECORDING.get() || currentInterval < 6 * 60 * 1000 || currentInterval < 10 * previousInterval)) {
|
if (track != null && !newInterval && (!ctx.getSettings().AUTO_SPLIT_RECORDING.get() || currentInterval < 6 * 60 * 1000 || currentInterval < 10 * previousInterval)) {
|
||||||
// 6 minute - same segment
|
// 6 minute - same segment
|
||||||
segment.points.add(pt);
|
segment.points.add(pt);
|
||||||
} else if (track != null && (ctx.getSettings().AUTO_SPLIT_RECORDING.get() && currentInterval < 2 * 60 * 60 * 1000)) {
|
} else if (track != null && (ctx.getSettings().AUTO_SPLIT_RECORDING.get() && currentInterval < 2 * 60 * 60 * 1000)) {
|
||||||
// 2 hour - same track
|
// 2 hour - same track
|
||||||
segment = new TrkSegment();
|
segment = new TrkSegment();
|
||||||
if(!newInterval) {
|
if (!newInterval) {
|
||||||
segment.points.add(pt);
|
segment.points.add(pt);
|
||||||
}
|
}
|
||||||
track.segments.add(segment);
|
track.segments.add(segment);
|
||||||
|
@ -367,10 +379,10 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
track = new Track();
|
track = new Track();
|
||||||
segment = new TrkSegment();
|
segment = new TrkSegment();
|
||||||
track.segments.add(segment);
|
track.segments.add(segment);
|
||||||
if(!newInterval) {
|
if (!newInterval) {
|
||||||
segment.points.add(pt);
|
segment.points.add(pt);
|
||||||
}
|
}
|
||||||
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.US).format(new Date(time));; //$NON-NLS-1$
|
String date = new SimpleDateFormat("yyyy-MM-dd", Locale.US).format(new Date(time)); //$NON-NLS-1$
|
||||||
if (dataTracks.containsKey(date)) {
|
if (dataTracks.containsKey(date)) {
|
||||||
GPXFile gpx = dataTracks.get(date);
|
GPXFile gpx = dataTracks.get(date);
|
||||||
gpx.tracks.add(track);
|
gpx.tracks.add(track);
|
||||||
|
@ -411,14 +423,14 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
dataTracks.remove(date);
|
dataTracks.remove(date);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startNewSegment() {
|
public void startNewSegment() {
|
||||||
lastTimeUpdated = 0;
|
lastTimeUpdated = 0;
|
||||||
lastPoint = null;
|
lastPoint = null;
|
||||||
execWithClose(updateScript, new Object[] { 0, 0, 0, 0, 0, System.currentTimeMillis(), NO_HEADING});
|
execWithClose(updateScript, new Object[]{0, 0, 0, 0, 0, System.currentTimeMillis(), NO_HEADING});
|
||||||
addTrackPoint(null, true, System.currentTimeMillis());
|
addTrackPoint(null, true, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateLocation(net.osmand.Location location, Float heading) {
|
public void updateLocation(net.osmand.Location location, Float heading) {
|
||||||
// use because there is a bug on some devices with location.getTime()
|
// use because there is a bug on some devices with location.getTime()
|
||||||
long locationTime = System.currentTimeMillis();
|
long locationTime = System.currentTimeMillis();
|
||||||
|
@ -459,12 +471,12 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
ctx.getNotificationHelper().refreshNotification(NotificationType.GPX);
|
ctx.getNotificationHelper().refreshNotification(NotificationType.GPX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void insertData(double lat, double lon, double alt, double speed, double hdop, long time, float heading,
|
public void insertData(double lat, double lon, double alt, double speed, double hdop, long time, float heading,
|
||||||
OsmandSettings settings) {
|
OsmandSettings settings) {
|
||||||
// * 1000 in next line seems to be wrong with new IntervalChooseDialog
|
// * 1000 in next line seems to be wrong with new IntervalChooseDialog
|
||||||
// if (time - lastTimeUpdated > settings.SAVE_TRACK_INTERVAL.get() * 1000) {
|
// if (time - lastTimeUpdated > settings.SAVE_TRACK_INTERVAL.get() * 1000) {
|
||||||
execWithClose(updateScript, new Object[] { lat, lon, alt, speed, hdop, time, heading });
|
execWithClose(updateScript, new Object[]{lat, lon, alt, speed, hdop, time, heading});
|
||||||
boolean newSegment = false;
|
boolean newSegment = false;
|
||||||
if (lastPoint == null || (time - lastTimeUpdated) > 180 * 1000) {
|
if (lastPoint == null || (time - lastTimeUpdated) > 180 * 1000) {
|
||||||
lastPoint = new LatLon(lat, lon);
|
lastPoint = new LatLon(lat, lon);
|
||||||
|
@ -485,7 +497,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
addTrackPoint(pt, newSegment, time);
|
addTrackPoint(pt, newSegment, time);
|
||||||
trkPoints++;
|
trkPoints++;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTrackPoint(WptPt pt, boolean newSegment, long time) {
|
private void addTrackPoint(WptPt pt, boolean newSegment, long time) {
|
||||||
List<TrkSegment> points = currentTrack.getModifiablePointsToDisplay();
|
List<TrkSegment> points = currentTrack.getModifiablePointsToDisplay();
|
||||||
Track track = currentTrack.getModifiableGpxFile().tracks.get(0);
|
Track track = currentTrack.getModifiableGpxFile().tracks.get(0);
|
||||||
|
@ -511,12 +523,12 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public WptPt insertPointData(double lat, double lon, long time, String description, String name, String category,
|
public WptPt insertPointData(double lat, double lon, long time, String description, String name, String category,
|
||||||
int color) {
|
int color) {
|
||||||
return insertPointData(lat, lon, time, description, name, category, color, null, null);
|
return insertPointData(lat, lon, time, description, name, category, color, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public WptPt insertPointData(double lat, double lon, long time, String description, String name, String category,
|
public WptPt insertPointData(double lat, double lon, long time, String description, String name, String category,
|
||||||
int color, String iconName, String backgroundName) {
|
int color, String iconName, String backgroundName) {
|
||||||
final WptPt pt = new WptPt(lat, lon, time, Double.NaN, 0, Double.NaN);
|
final WptPt pt = new WptPt(lat, lon, time, Double.NaN, 0, Double.NaN);
|
||||||
pt.name = name;
|
pt.name = name;
|
||||||
pt.category = category;
|
pt.category = category;
|
||||||
|
@ -529,7 +541,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
ctx.getSelectedGpxHelper().addPoint(pt, currentTrack.getModifiableGpxFile());
|
ctx.getSelectedGpxHelper().addPoint(pt, currentTrack.getModifiableGpxFile());
|
||||||
currentTrack.getModifiableGpxFile().modifiedTime = time;
|
currentTrack.getModifiableGpxFile().modifiedTime = time;
|
||||||
points++;
|
points++;
|
||||||
execWithClose(insertPointsScript, new Object[] { lat, lon, time, description, name, category, color });
|
execWithClose(insertPointsScript, new Object[]{lat, lon, time, description, name, category, color, iconName, backgroundName});
|
||||||
return pt;
|
return pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -538,7 +550,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updatePointData(WptPt pt, double lat, double lon, long time, String description, String name,
|
public void updatePointData(WptPt pt, double lat, double lon, long time, String description, String name,
|
||||||
String category, int color, String iconName, String iconBackground) {
|
String category, int color, String iconName, String iconBackground) {
|
||||||
currentTrack.getModifiableGpxFile().modifiedTime = time;
|
currentTrack.getModifiableGpxFile().modifiedTime = time;
|
||||||
|
|
||||||
List<Object> params = new ArrayList<>();
|
List<Object> params = new ArrayList<>();
|
||||||
|
@ -549,6 +561,8 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
params.add(name);
|
params.add(name);
|
||||||
params.add(category);
|
params.add(category);
|
||||||
params.add(color);
|
params.add(color);
|
||||||
|
params.add(iconName);
|
||||||
|
params.add(iconBackground);
|
||||||
|
|
||||||
params.add(pt.getLatitude());
|
params.add(pt.getLatitude());
|
||||||
params.add(pt.getLongitude());
|
params.add(pt.getLongitude());
|
||||||
|
@ -563,7 +577,9 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
+ POINT_COL_DESCRIPTION + "=?, "
|
+ POINT_COL_DESCRIPTION + "=?, "
|
||||||
+ POINT_COL_NAME + "=?, "
|
+ POINT_COL_NAME + "=?, "
|
||||||
+ POINT_COL_CATEGORY + "=?, "
|
+ POINT_COL_CATEGORY + "=?, "
|
||||||
+ POINT_COL_COLOR + "=? "
|
+ POINT_COL_COLOR + "=?, "
|
||||||
|
+ POINT_COL_ICON + "=?, "
|
||||||
|
+ POINT_COL_BACKGROUND + "=? "
|
||||||
+ "WHERE "
|
+ "WHERE "
|
||||||
+ POINT_COL_LAT + "=? AND "
|
+ POINT_COL_LAT + "=? AND "
|
||||||
+ POINT_COL_LON + "=? AND "
|
+ POINT_COL_LON + "=? AND "
|
||||||
|
@ -662,10 +678,10 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadGpxFromDatabase(){
|
public void loadGpxFromDatabase() {
|
||||||
Map<String, GPXFile> files = collectRecordedData();
|
Map<String, GPXFile> files = collectRecordedData();
|
||||||
currentTrack.getModifiableGpxFile().tracks.clear();
|
currentTrack.getModifiableGpxFile().tracks.clear();
|
||||||
for (Map.Entry<String, GPXFile> entry : files.entrySet()){
|
for (Map.Entry<String, GPXFile> entry : files.entrySet()) {
|
||||||
ctx.getSelectedGpxHelper().addPoints(entry.getValue().getPoints(), currentTrack.getModifiableGpxFile());
|
ctx.getSelectedGpxHelper().addPoints(entry.getValue().getPoints(), currentTrack.getModifiableGpxFile());
|
||||||
currentTrack.getModifiableGpxFile().tracks.addAll(entry.getValue().tracks);
|
currentTrack.getModifiableGpxFile().tracks.addAll(entry.getValue().tracks);
|
||||||
}
|
}
|
||||||
|
@ -679,10 +695,10 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareCurrentTrackForRecording() {
|
private void prepareCurrentTrackForRecording() {
|
||||||
if(currentTrack.getModifiableGpxFile().tracks.size() == 0) {
|
if (currentTrack.getModifiableGpxFile().tracks.size() == 0) {
|
||||||
currentTrack.getModifiableGpxFile().tracks.add(new Track());
|
currentTrack.getModifiableGpxFile().tracks.add(new Track());
|
||||||
}
|
}
|
||||||
while(currentTrack.getPointsToDisplay().size() < currentTrack.getModifiableGpxFile().tracks.size()) {
|
while (currentTrack.getPointsToDisplay().size() < currentTrack.getModifiableGpxFile().tracks.size()) {
|
||||||
TrkSegment trkSegment = new TrkSegment();
|
TrkSegment trkSegment = new TrkSegment();
|
||||||
currentTrack.getModifiablePointsToDisplay().add(trkSegment);
|
currentTrack.getModifiablePointsToDisplay().add(trkSegment);
|
||||||
}
|
}
|
||||||
|
@ -705,7 +721,7 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
public int getPoints() {
|
public int getPoints() {
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getTrkPoints() {
|
public int getTrkPoints() {
|
||||||
return trkPoints;
|
return trkPoints;
|
||||||
}
|
}
|
||||||
|
@ -717,11 +733,11 @@ public class SavingTrackHelper extends SQLiteOpenHelper {
|
||||||
public GPXFile getCurrentGpx() {
|
public GPXFile getCurrentGpx() {
|
||||||
return currentTrack.getGpxFile();
|
return currentTrack.getGpxFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public SelectedGpxFile getCurrentTrack() {
|
public SelectedGpxFile getCurrentTrack() {
|
||||||
return currentTrack;
|
return currentTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SaveGpxResult {
|
public class SaveGpxResult {
|
||||||
|
|
||||||
public SaveGpxResult(List<String> warnings, List<String> filenames) {
|
public SaveGpxResult(List<String> warnings, List<String> filenames) {
|
||||||
|
|
|
@ -103,7 +103,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
|
|
||||||
public interface ContextMenuFragmentListener {
|
public interface ContextMenuFragmentListener {
|
||||||
void onContextMenuYPosChanged(@NonNull ContextMenuFragment fragment, int y, boolean needMapAdjust, boolean animated);
|
void onContextMenuYPosChanged(@NonNull ContextMenuFragment fragment, int y, boolean needMapAdjust, boolean animated);
|
||||||
void onContextMenuStateChanged(@NonNull ContextMenuFragment fragment, int menuState);
|
void onContextMenuStateChanged(@NonNull ContextMenuFragment fragment, int menuState, int previousMenuState);
|
||||||
void onContextMenuDismiss(@NonNull ContextMenuFragment fragment);
|
void onContextMenuDismiss(@NonNull ContextMenuFragment fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -815,7 +815,7 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
|
|
||||||
ContextMenuFragmentListener listener = this.listener;
|
ContextMenuFragmentListener listener = this.listener;
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onContextMenuStateChanged(this, newMenuState);
|
listener.onContextMenuStateChanged(this, newMenuState, currentMenuState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -946,6 +946,11 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
|
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
|
||||||
protected void runLayoutListener() {
|
protected void runLayoutListener() {
|
||||||
|
runLayoutListener(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
|
||||||
|
protected void runLayoutListener(final Runnable runnable) {
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
ViewTreeObserver vto = view.getViewTreeObserver();
|
ViewTreeObserver vto = view.getViewTreeObserver();
|
||||||
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
|
@ -971,7 +976,11 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment
|
||||||
|
|
||||||
ContextMenuFragmentListener listener = ContextMenuFragment.this.listener;
|
ContextMenuFragmentListener listener = ContextMenuFragment.this.listener;
|
||||||
if (listener != null) {
|
if (listener != null) {
|
||||||
listener.onContextMenuStateChanged(ContextMenuFragment.this, getCurrentMenuState());
|
int menuState = getCurrentMenuState();
|
||||||
|
listener.onContextMenuStateChanged(ContextMenuFragment.this, menuState, menuState);
|
||||||
|
}
|
||||||
|
if (runnable != null) {
|
||||||
|
runnable.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,7 +82,7 @@ public abstract class ContextMenuScrollFragment extends ContextMenuFragment impl
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContextMenuStateChanged(@NonNull ContextMenuFragment fragment, int menuState) {
|
public void onContextMenuStateChanged(@NonNull ContextMenuFragment fragment, int menuState, int previousMenuState) {
|
||||||
updateMapControlsVisibility(menuState);
|
updateMapControlsVisibility(menuState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -268,6 +268,18 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
dismissButtonStringRes = stringRes;
|
dismissButtonStringRes = stringRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int getDismissButtonHeight(){
|
||||||
|
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height_small);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getRightButtonHeight(){
|
||||||
|
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height_small);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected int getThirdButtonHeight(){
|
||||||
|
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height_small);
|
||||||
|
}
|
||||||
|
|
||||||
protected DialogButtonType getDismissButtonType() {
|
protected DialogButtonType getDismissButtonType() {
|
||||||
return DialogButtonType.SECONDARY;
|
return DialogButtonType.SECONDARY;
|
||||||
}
|
}
|
||||||
|
@ -360,6 +372,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
|
|
||||||
private void setupDismissButton() {
|
private void setupDismissButton() {
|
||||||
dismissButton = buttonsContainer.findViewById(R.id.dismiss_button);
|
dismissButton = buttonsContainer.findViewById(R.id.dismiss_button);
|
||||||
|
dismissButton.getLayoutParams().height = getDismissButtonHeight();
|
||||||
int buttonTextId = getDismissButtonTextId();
|
int buttonTextId = getDismissButtonTextId();
|
||||||
if (buttonTextId != DEFAULT_VALUE) {
|
if (buttonTextId != DEFAULT_VALUE) {
|
||||||
UiUtilities.setupDialogButton(nightMode, dismissButton, getDismissButtonType(), buttonTextId);
|
UiUtilities.setupDialogButton(nightMode, dismissButton, getDismissButtonType(), buttonTextId);
|
||||||
|
@ -376,6 +389,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
|
|
||||||
private void setupRightButton() {
|
private void setupRightButton() {
|
||||||
rightButton = buttonsContainer.findViewById(R.id.right_bottom_button);
|
rightButton = buttonsContainer.findViewById(R.id.right_bottom_button);
|
||||||
|
rightButton.getLayoutParams().height = getRightButtonHeight();
|
||||||
int buttonTextId = getRightBottomButtonTextId();
|
int buttonTextId = getRightBottomButtonTextId();
|
||||||
if (buttonTextId != DEFAULT_VALUE) {
|
if (buttonTextId != DEFAULT_VALUE) {
|
||||||
UiUtilities.setupDialogButton(nightMode, rightButton, getRightBottomButtonType(), buttonTextId);
|
UiUtilities.setupDialogButton(nightMode, rightButton, getRightBottomButtonType(), buttonTextId);
|
||||||
|
@ -398,6 +412,7 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
|
|
||||||
protected void setupThirdButton() {
|
protected void setupThirdButton() {
|
||||||
thirdButton = buttonsContainer.findViewById(R.id.third_button);
|
thirdButton = buttonsContainer.findViewById(R.id.third_button);
|
||||||
|
thirdButton.getLayoutParams().height = getThirdButtonHeight();
|
||||||
int buttonTextId = getThirdBottomButtonTextId();
|
int buttonTextId = getThirdBottomButtonTextId();
|
||||||
if (buttonTextId != DEFAULT_VALUE) {
|
if (buttonTextId != DEFAULT_VALUE) {
|
||||||
UiUtilities.setupDialogButton(nightMode, thirdButton, getThirdBottomButtonType(), buttonTextId);
|
UiUtilities.setupDialogButton(nightMode, thirdButton, getThirdBottomButtonType(), buttonTextId);
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package net.osmand.plus.base.bottomsheetmenu.simpleitems;
|
||||||
|
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
|
|
||||||
|
public class ProgressItem extends SimpleBottomSheetItem {
|
||||||
|
|
||||||
|
public ProgressItem() {
|
||||||
|
this.layoutId = R.layout.bottom_sheet_item_progress;
|
||||||
|
}
|
||||||
|
}
|
|
@ -62,6 +62,8 @@ public class RenameFileBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
file = new File(path);
|
file = new File(path);
|
||||||
}
|
}
|
||||||
selectedFileName = savedInstanceState.getString(SELECTED_FILE_NAME_KEY);
|
selectedFileName = savedInstanceState.getString(SELECTED_FILE_NAME_KEY);
|
||||||
|
} else {
|
||||||
|
selectedFileName = Algorithms.getFileNameWithoutExtension(file);
|
||||||
}
|
}
|
||||||
items.add(new TitleItem(getString(R.string.shared_string_rename)));
|
items.add(new TitleItem(getString(R.string.shared_string_rename)));
|
||||||
|
|
||||||
|
@ -74,7 +76,7 @@ public class RenameFileBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
nameTextBox.setDefaultHintTextColor(colorStateList);
|
nameTextBox.setDefaultHintTextColor(colorStateList);
|
||||||
|
|
||||||
editText = view.findViewById(R.id.name_edit_text);
|
editText = view.findViewById(R.id.name_edit_text);
|
||||||
editText.setText(selectedFileName != null ? selectedFileName : Algorithms.getFileNameWithoutExtension(file));
|
editText.setText(selectedFileName);
|
||||||
editText.addTextChangedListener(new TextWatcher() {
|
editText.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||||
|
@ -97,7 +99,9 @@ public class RenameFileBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateFileName(String name) {
|
private void updateFileName(String name) {
|
||||||
if (!Algorithms.isEmpty(name) && ILLEGAL_FILE_NAME_CHARACTERS.matcher(name).find()) {
|
if (Algorithms.isBlank(name)) {
|
||||||
|
nameTextBox.setError(getString(R.string.empty_filename));
|
||||||
|
} else if (ILLEGAL_FILE_NAME_CHARACTERS.matcher(name).find()) {
|
||||||
nameTextBox.setError(getString(R.string.file_name_containes_illegal_char));
|
nameTextBox.setError(getString(R.string.file_name_containes_illegal_char));
|
||||||
} else {
|
} else {
|
||||||
selectedFileName = name;
|
selectedFileName = name;
|
||||||
|
@ -127,12 +131,13 @@ public class RenameFileBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
File dest;
|
File dest;
|
||||||
int index = file.getName().lastIndexOf('.');
|
int index = file.getName().lastIndexOf('.');
|
||||||
String ext = index == -1 ? "" : file.getName().substring(index);
|
String ext = index == -1 ? "" : file.getName().substring(index);
|
||||||
|
String newName = Algorithms.getFileNameWithoutExtension(selectedFileName);
|
||||||
if (SQLiteTileSource.EXT.equals(ext)) {
|
if (SQLiteTileSource.EXT.equals(ext)) {
|
||||||
dest = renameSQLiteFile(app, file, selectedFileName + ext, null);
|
dest = renameSQLiteFile(app, file, newName + ext, null);
|
||||||
} else if (IndexConstants.GPX_FILE_EXT.equals(ext)) {
|
} else if (IndexConstants.GPX_FILE_EXT.equals(ext)) {
|
||||||
dest = renameGpxFile(app, file, selectedFileName + ext, false, null);
|
dest = renameGpxFile(app, file, newName + ext, false, null);
|
||||||
} else {
|
} else {
|
||||||
dest = renameFile(app, file, selectedFileName + ext, false, null);
|
dest = renameFile(app, file, newName + ext, false, null);
|
||||||
}
|
}
|
||||||
if (dest != null) {
|
if (dest != null) {
|
||||||
Fragment fragment = getTargetFragment();
|
Fragment fragment = getTargetFragment();
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
package net.osmand.plus.dialogs;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.DialogInterface.OnDismissListener;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithDescription;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem;
|
||||||
|
import net.osmand.plus.mapcontextmenu.UploadPhotosAsyncTask.UploadPhotosListener;
|
||||||
|
|
||||||
|
public class UploadPhotoProgressBottomSheet extends MenuBottomSheetDialogFragment implements UploadPhotosListener {
|
||||||
|
|
||||||
|
public static final String TAG = UploadPhotoProgressBottomSheet.class.getSimpleName();
|
||||||
|
|
||||||
|
private ProgressBar progressBar;
|
||||||
|
private TextView uploadedPhotosTitle;
|
||||||
|
private TextView uploadedPhotosCounter;
|
||||||
|
|
||||||
|
private OnDismissListener onDismissListener;
|
||||||
|
|
||||||
|
private int progress;
|
||||||
|
private int maxProgress;
|
||||||
|
private boolean uploadingFinished;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
|
Context context = requireContext();
|
||||||
|
LayoutInflater inflater = UiUtilities.getInflater(context, nightMode);
|
||||||
|
View view = inflater.inflate(R.layout.bottom_sheet_with_progress_bar, null);
|
||||||
|
|
||||||
|
uploadedPhotosTitle = view.findViewById(R.id.title);
|
||||||
|
uploadedPhotosCounter = view.findViewById(R.id.description);
|
||||||
|
progressBar = view.findViewById(R.id.progress_bar);
|
||||||
|
progressBar.setMax(maxProgress);
|
||||||
|
|
||||||
|
int descriptionId = uploadingFinished ? R.string.uploaded_count : R.string.uploading_count;
|
||||||
|
|
||||||
|
BaseBottomSheetItem descriptionItem = new BottomSheetItemWithDescription.Builder()
|
||||||
|
.setDescription(getString(descriptionId, progress, maxProgress))
|
||||||
|
.setTitle(getString(uploadingFinished ? R.string.upload_photo_completed : R.string.upload_photo))
|
||||||
|
.setCustomView(view)
|
||||||
|
.create();
|
||||||
|
items.add(descriptionItem);
|
||||||
|
|
||||||
|
updateProgress(progress);
|
||||||
|
|
||||||
|
int padding = getResources().getDimensionPixelSize(R.dimen.content_padding_small);
|
||||||
|
items.add(new DividerSpaceItem(context, padding));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxProgress(int maxProgress) {
|
||||||
|
this.maxProgress = maxProgress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnDismissListener(OnDismissListener onDismissListener) {
|
||||||
|
this.onDismissListener = onDismissListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateProgress(int progress) {
|
||||||
|
int descriptionId = uploadingFinished ? R.string.uploaded_count : R.string.uploading_count;
|
||||||
|
progressBar.setProgress(progress);
|
||||||
|
uploadedPhotosCounter.setText(getString(descriptionId, progress, maxProgress));
|
||||||
|
uploadedPhotosTitle.setText(uploadingFinished ? R.string.upload_photo_completed : R.string.upload_photo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uploadPhotosProgressUpdate(int progress) {
|
||||||
|
this.progress = progress;
|
||||||
|
updateProgress(progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void uploadPhotosFinished() {
|
||||||
|
uploadingFinished = true;
|
||||||
|
updateProgress(progress);
|
||||||
|
UiUtilities.setupDialogButton(nightMode, dismissButton, getDismissButtonType(), getDismissButtonTextId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDismiss(@NonNull DialogInterface dialog) {
|
||||||
|
super.onDismiss(dialog);
|
||||||
|
FragmentActivity activity = getActivity();
|
||||||
|
if (onDismissListener != null && activity != null && !activity.isChangingConfigurations()) {
|
||||||
|
onDismissListener.onDismiss(dialog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getDismissButtonTextId() {
|
||||||
|
return uploadingFinished ? R.string.shared_string_close : R.string.shared_string_cancel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static UploadPhotosListener showInstance(@NonNull FragmentManager fragmentManager, int maxProgress, OnDismissListener listener) {
|
||||||
|
UploadPhotoProgressBottomSheet fragment = new UploadPhotoProgressBottomSheet();
|
||||||
|
fragment.setRetainInstance(true);
|
||||||
|
fragment.setMaxProgress(maxProgress);
|
||||||
|
fragment.setOnDismissListener(listener);
|
||||||
|
fragmentManager.beginTransaction()
|
||||||
|
.add(fragment, UploadPhotoProgressBottomSheet.TAG)
|
||||||
|
.commitAllowingStateLoss();
|
||||||
|
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
}
|
|
@ -292,10 +292,6 @@ public class DownloadActivityType {
|
||||||
|
|
||||||
|
|
||||||
public IndexItem parseIndexItem(OsmandApplication ctx, XmlPullParser parser) {
|
public IndexItem parseIndexItem(OsmandApplication ctx, XmlPullParser parser) {
|
||||||
if (TRAVEL_FILE == this && !Version.isDeveloperVersion(ctx)) {
|
|
||||||
//todo remove "if" when .travel.obf will be used in production
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String name = parser.getAttributeValue(null, "name"); //$NON-NLS-1$
|
String name = parser.getAttributeValue(null, "name"); //$NON-NLS-1$
|
||||||
if (!isAccepted(name)) {
|
if (!isAccepted(name)) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -13,6 +13,7 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.download.DownloadOsmandIndexesHelper.AssetIndexItem;
|
import net.osmand.plus.download.DownloadOsmandIndexesHelper.AssetIndexItem;
|
||||||
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
import net.osmand.plus.inapp.InAppPurchaseHelper;
|
||||||
|
import net.osmand.plus.wikivoyage.data.TravelDbHelper;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -358,7 +359,9 @@ public class DownloadResources extends DownloadResourceGroup {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ii.getType() == DownloadActivityType.WIKIVOYAGE_FILE) {
|
if (ii.getType() == DownloadActivityType.WIKIVOYAGE_FILE) {
|
||||||
wikivoyageMaps.addItem(ii);
|
if (app.getTravelHelper() instanceof TravelDbHelper) {
|
||||||
|
wikivoyageMaps.addItem(ii);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (ii.getType() == DownloadActivityType.TRAVEL_FILE) {
|
if (ii.getType() == DownloadActivityType.TRAVEL_FILE) {
|
||||||
|
|
|
@ -27,6 +27,7 @@ import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
import net.osmand.plus.settings.fragments.BaseSettingsFragment;
|
||||||
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
|
import net.osmand.plus.settings.fragments.BaseSettingsFragment.SettingsScreenType;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
|
@ -37,6 +38,8 @@ import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static net.osmand.plus.activities.TrackActivity.CURRENT_RECORDING;
|
||||||
|
import static net.osmand.plus.activities.TrackActivity.TRACK_FILE_NAME;
|
||||||
import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener;
|
import static net.osmand.plus.osmedit.oauth.OsmOAuthHelper.OsmAuthorizationListener;
|
||||||
|
|
||||||
public class IntentHelper {
|
public class IntentHelper {
|
||||||
|
@ -250,6 +253,12 @@ public class IntentHelper {
|
||||||
}
|
}
|
||||||
mapActivity.setIntent(null);
|
mapActivity.setIntent(null);
|
||||||
}
|
}
|
||||||
|
if (intent.hasExtra(TrackMenuFragment.OPEN_TRACK_MENU)) {
|
||||||
|
String path = intent.getStringExtra(TRACK_FILE_NAME);
|
||||||
|
boolean currentRecording = intent.getBooleanExtra(CURRENT_RECORDING, false);
|
||||||
|
TrackMenuFragment.showInstance(mapActivity, path, currentRecording);
|
||||||
|
mapActivity.setIntent(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.ActivityResultListener;
|
import net.osmand.plus.activities.ActivityResultListener;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.dialogs.ImportGpxBottomSheetDialogFragment;
|
import net.osmand.plus.dialogs.ImportGpxBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
||||||
|
@ -37,6 +36,7 @@ import net.osmand.plus.measurementtool.MeasurementToolFragment;
|
||||||
import net.osmand.plus.settings.backend.ExportSettingsType;
|
import net.osmand.plus.settings.backend.ExportSettingsType;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
import net.osmand.plus.settings.backend.backup.SettingsHelper;
|
||||||
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
import net.osmand.plus.settings.backend.backup.SettingsItem;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
@ -596,10 +596,7 @@ public class ImportHelper {
|
||||||
|
|
||||||
private void showGpxInDetailsActivity(String gpxFilePath) {
|
private void showGpxInDetailsActivity(String gpxFilePath) {
|
||||||
if (!Algorithms.isEmpty(gpxFilePath)) {
|
if (!Algorithms.isEmpty(gpxFilePath)) {
|
||||||
Intent newIntent = new Intent(activity, app.getAppCustomization().getTrackActivity());
|
TrackMenuFragment.openTrack(activity, new File(gpxFilePath), null);
|
||||||
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxFilePath);
|
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
activity.startActivity(newIntent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ class SettingsImportTask extends BaseLoadAsyncTask<Void, Void, String> {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Map<ExportSettingsType, List<?>> allSettingsMap = getSettingsToOperate(pluginIndependentItems, false);
|
Map<ExportSettingsType, List<?>> allSettingsMap = getSettingsToOperate(pluginIndependentItems, false);
|
||||||
List<SettingsItem> settingsList = settingsHelper.getFilteredSettingsItems(allSettingsMap, settingsTypes, false);
|
List<SettingsItem> settingsList = settingsHelper.getFilteredSettingsItems(allSettingsMap, settingsTypes, pluginIndependentItems, false);
|
||||||
settingsHelper.checkDuplicates(file, settingsList, settingsList, getDuplicatesListener(file, replace));
|
settingsHelper.checkDuplicates(file, settingsList, settingsList, getDuplicatesListener(file, replace));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,18 +22,17 @@ import net.osmand.data.FavouritePoint;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.TransportStop;
|
import net.osmand.data.TransportStop;
|
||||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
|
||||||
import net.osmand.plus.ContextMenuAdapter;
|
import net.osmand.plus.ContextMenuAdapter;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.mapmarkers.MapMarker;
|
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
import net.osmand.plus.TargetPointsHelper.TargetPoint;
|
||||||
import net.osmand.plus.TargetPointsHelper.TargetPointChangedListener;
|
import net.osmand.plus.TargetPointsHelper.TargetPointChangedListener;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
|
import net.osmand.plus.mapcontextmenu.AdditionalActionsBottomSheetDialogFragment.ContextMenuItemClickListener;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuController.ContextMenuToolbarController;
|
import net.osmand.plus.mapcontextmenu.MenuController.ContextMenuToolbarController;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuController.MenuState;
|
import net.osmand.plus.mapcontextmenu.MenuController.MenuState;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuController.MenuType;
|
import net.osmand.plus.mapcontextmenu.MenuController.MenuType;
|
||||||
|
@ -47,12 +46,14 @@ import net.osmand.plus.mapcontextmenu.editors.RtePtEditor;
|
||||||
import net.osmand.plus.mapcontextmenu.editors.WptPtEditor;
|
import net.osmand.plus.mapcontextmenu.editors.WptPtEditor;
|
||||||
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
|
import net.osmand.plus.mapcontextmenu.other.MapMultiSelectionMenu;
|
||||||
import net.osmand.plus.mapcontextmenu.other.ShareMenu;
|
import net.osmand.plus.mapcontextmenu.other.ShareMenu;
|
||||||
import net.osmand.plus.mapcontextmenu.AdditionalActionsBottomSheetDialogFragment.ContextMenuItemClickListener;
|
import net.osmand.plus.mapmarkers.MapMarker;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkerChangedListener;
|
||||||
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
import net.osmand.plus.monitoring.OsmandMonitoringPlugin;
|
||||||
import net.osmand.plus.routing.RoutingHelper;
|
import net.osmand.plus.routing.RoutingHelper;
|
||||||
|
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.transport.TransportStopRoute;
|
import net.osmand.plus.transport.TransportStopRoute;
|
||||||
import net.osmand.plus.views.layers.ContextMenuLayer;
|
|
||||||
import net.osmand.plus.views.OsmandMapLayer;
|
import net.osmand.plus.views.OsmandMapLayer;
|
||||||
|
import net.osmand.plus.views.layers.ContextMenuLayer;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -570,18 +571,21 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
|
||||||
public void updateControlsVisibility(boolean menuVisible) {
|
public void updateControlsVisibility(boolean menuVisible) {
|
||||||
MapActivity mapActivity = getMapActivity();
|
MapActivity mapActivity = getMapActivity();
|
||||||
if (mapActivity != null) {
|
if (mapActivity != null) {
|
||||||
int topControlsVisibility = shouldShowTopControls(menuVisible) ? View.VISIBLE : View.GONE;
|
boolean topControlsVisible = shouldShowTopControls(menuVisible);
|
||||||
mapActivity.findViewById(R.id.map_center_info).setVisibility(topControlsVisibility);
|
boolean bottomControlsVisible = shouldShowBottomControls(menuVisible);
|
||||||
mapActivity.findViewById(R.id.map_left_widgets_panel).setVisibility(topControlsVisibility);
|
updateControlsVisibility(mapActivity, topControlsVisible, bottomControlsVisible);
|
||||||
mapActivity.findViewById(R.id.map_right_widgets_panel).setVisibility(topControlsVisibility);
|
|
||||||
|
|
||||||
int bottomControlsVisibility = shouldShowBottomControls(menuVisible) ? View.VISIBLE : View.GONE;
|
|
||||||
mapActivity.findViewById(R.id.bottom_controls_container).setVisibility(bottomControlsVisibility);
|
|
||||||
|
|
||||||
mapActivity.refreshMap();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void updateControlsVisibility(@NonNull MapActivity mapActivity, boolean topControlsVisible, boolean bottomControlsVisible) {
|
||||||
|
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_center_info), topControlsVisible);
|
||||||
|
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_left_widgets_panel), topControlsVisible);
|
||||||
|
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.map_right_widgets_panel), topControlsVisible);
|
||||||
|
AndroidUiHelper.updateVisibility(mapActivity.findViewById(R.id.bottom_controls_container), bottomControlsVisible);
|
||||||
|
|
||||||
|
mapActivity.refreshMap();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean shouldShowTopControls() {
|
public boolean shouldShowTopControls() {
|
||||||
return shouldShowTopControls(isVisible());
|
return shouldShowTopControls(isVisible());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,21 +1,19 @@
|
||||||
package net.osmand.plus.mapcontextmenu;
|
package net.osmand.plus.mapcontextmenu;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.PorterDuff;
|
import android.graphics.PorterDuff;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Handler;
|
import android.os.Build;
|
||||||
import android.os.Looper;
|
|
||||||
import android.text.SpannableStringBuilder;
|
import android.text.SpannableStringBuilder;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
@ -38,14 +36,12 @@ import androidx.core.content.ContextCompat;
|
||||||
import androidx.core.graphics.drawable.DrawableCompat;
|
import androidx.core.graphics.drawable.DrawableCompat;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.PlatformUtil;
|
|
||||||
import net.osmand.data.Amenity;
|
import net.osmand.data.Amenity;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.osm.PoiCategory;
|
import net.osmand.osm.PoiCategory;
|
||||||
import net.osmand.osm.PoiType;
|
import net.osmand.osm.PoiType;
|
||||||
import net.osmand.osm.io.NetworkUtils;
|
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
|
@ -53,6 +49,7 @@ import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.Version;
|
import net.osmand.plus.Version;
|
||||||
import net.osmand.plus.activities.ActivityResultListener;
|
import net.osmand.plus.activities.ActivityResultListener;
|
||||||
|
import net.osmand.plus.activities.ActivityResultListener.OnActivityResultListener;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.helpers.FontCache;
|
import net.osmand.plus.helpers.FontCache;
|
||||||
import net.osmand.plus.mapcontextmenu.builders.cards.AbstractCard;
|
import net.osmand.plus.mapcontextmenu.builders.cards.AbstractCard;
|
||||||
|
@ -78,13 +75,6 @@ import net.osmand.plus.widgets.tools.ClickableSpanTouchListener;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.openplacereviews.opendb.util.exception.FailedVerificationException;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -98,7 +88,6 @@ import static net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCa
|
||||||
public class MenuBuilder {
|
public class MenuBuilder {
|
||||||
|
|
||||||
private static final int PICK_IMAGE = 1231;
|
private static final int PICK_IMAGE = 1231;
|
||||||
private static final Log LOG = PlatformUtil.getLog(MenuBuilder.class);
|
|
||||||
public static final float SHADOW_HEIGHT_TOP_DP = 17f;
|
public static final float SHADOW_HEIGHT_TOP_DP = 17f;
|
||||||
public static final int TITLE_LIMIT = 60;
|
public static final int TITLE_LIMIT = 60;
|
||||||
protected static final String[] arrowChars = new String[] {"=>", " - "};
|
protected static final String[] arrowChars = new String[] {"=>", " - "};
|
||||||
|
@ -131,7 +120,6 @@ public class MenuBuilder {
|
||||||
private String preferredMapLang;
|
private String preferredMapLang;
|
||||||
private String preferredMapAppLang;
|
private String preferredMapAppLang;
|
||||||
private boolean transliterateNames;
|
private boolean transliterateNames;
|
||||||
private View view;
|
|
||||||
private View photoButton;
|
private View photoButton;
|
||||||
|
|
||||||
private final OpenDBAPI openDBAPI = new OpenDBAPI();
|
private final OpenDBAPI openDBAPI = new OpenDBAPI();
|
||||||
|
@ -268,7 +256,6 @@ public class MenuBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void build(View view) {
|
public void build(View view) {
|
||||||
this.view = view;
|
|
||||||
firstRow = true;
|
firstRow = true;
|
||||||
hidden = false;
|
hidden = false;
|
||||||
buildTopInternal(view);
|
buildTopInternal(view);
|
||||||
|
@ -423,7 +410,7 @@ public class MenuBuilder {
|
||||||
if (false) {
|
if (false) {
|
||||||
AddPhotosBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
AddPhotosBottomSheetDialogFragment.showInstance(mapActivity.getSupportFragmentManager());
|
||||||
} else {
|
} else {
|
||||||
registerResultListener(view);
|
registerResultListener();
|
||||||
final String baseUrl = OPRConstants.getBaseUrl(app);
|
final String baseUrl = OPRConstants.getBaseUrl(app);
|
||||||
final String name = app.getSettings().OPR_USERNAME.get();
|
final String name = app.getSettings().OPR_USERNAME.get();
|
||||||
final String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
final String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
||||||
|
@ -434,13 +421,16 @@ public class MenuBuilder {
|
||||||
new Thread(new Runnable() {
|
new Thread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (openDBAPI.checkPrivateKeyValid(baseUrl, name, privateKey)) {
|
if (openDBAPI.checkPrivateKeyValid(app, baseUrl, name, privateKey)) {
|
||||||
app.runInUIThread(new Runnable() {
|
app.runInUIThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Intent intent = new Intent();
|
Intent intent = new Intent();
|
||||||
intent.setType("image/*");
|
intent.setType("image/*");
|
||||||
intent.setAction(Intent.ACTION_GET_CONTENT);
|
intent.setAction(Intent.ACTION_GET_CONTENT);
|
||||||
|
if (Build.VERSION.SDK_INT > 18) {
|
||||||
|
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
|
||||||
|
}
|
||||||
mapActivity.startActivityForResult(Intent.createChooser(intent,
|
mapActivity.startActivityForResult(Intent.createChooser(intent,
|
||||||
mapActivity.getString(R.string.select_picture)), PICK_IMAGE);
|
mapActivity.getString(R.string.select_picture)), PICK_IMAGE);
|
||||||
}
|
}
|
||||||
|
@ -470,115 +460,33 @@ public class MenuBuilder {
|
||||||
false, null, false);
|
false, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerResultListener(final View view) {
|
private void registerResultListener() {
|
||||||
mapActivity.registerActivityResultListener(new ActivityResultListener(PICK_IMAGE, new ActivityResultListener.
|
mapActivity.registerActivityResultListener(new ActivityResultListener(PICK_IMAGE, new OnActivityResultListener() {
|
||||||
OnActivityResultListener() {
|
|
||||||
@Override
|
@Override
|
||||||
public void onResult(int resultCode, Intent resultData) {
|
public void onResult(int resultCode, Intent resultData) {
|
||||||
if (resultData != null) {
|
if (resultData != null) {
|
||||||
handleSelectedImage(view, resultData.getData());
|
List<Uri> imagesUri = new ArrayList<>();
|
||||||
|
Uri data = resultData.getData();
|
||||||
|
if (data != null) {
|
||||||
|
imagesUri.add(data);
|
||||||
|
}
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||||
|
ClipData clipData = resultData.getClipData();
|
||||||
|
if (clipData != null) {
|
||||||
|
for (int i = 0; i < clipData.getItemCount(); i++) {
|
||||||
|
Uri uri = resultData.getClipData().getItemAt(i).getUri();
|
||||||
|
if (uri != null) {
|
||||||
|
imagesUri.add(uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
execute(new UploadPhotosAsyncTask(mapActivity, imagesUri, getLatLon(), placeId, getAdditionalCardParams(), imageCardListener));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleSelectedImage(final View view, final Uri uri) {
|
|
||||||
Thread t = new Thread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
InputStream inputStream = null;
|
|
||||||
try {
|
|
||||||
inputStream = app.getContentResolver().openInputStream(uri);
|
|
||||||
if (inputStream != null) {
|
|
||||||
uploadImageToPlace(inputStream);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
LOG.error(e);
|
|
||||||
String str = app.getString(R.string.cannot_upload_image);
|
|
||||||
showToastMessage(str);
|
|
||||||
} finally {
|
|
||||||
Algorithms.closeStream(inputStream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
t.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void uploadImageToPlace(InputStream image) {
|
|
||||||
InputStream serverData = new ByteArrayInputStream(compressImage(image));
|
|
||||||
final String baseUrl = OPRConstants.getBaseUrl(app);
|
|
||||||
String url = baseUrl + "api/ipfs/image";
|
|
||||||
String response = NetworkUtils.sendPostDataRequest(url, serverData);
|
|
||||||
if (response != null) {
|
|
||||||
int res = 0;
|
|
||||||
try {
|
|
||||||
StringBuilder error = new StringBuilder();
|
|
||||||
String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
|
||||||
String username = app.getSettings().OPR_USERNAME.get();
|
|
||||||
res = openDBAPI.uploadImage(
|
|
||||||
placeId,
|
|
||||||
baseUrl,
|
|
||||||
privateKey,
|
|
||||||
username,
|
|
||||||
response, error);
|
|
||||||
if (res != 200) {
|
|
||||||
showToastMessage(error.toString());
|
|
||||||
} else {
|
|
||||||
//ok, continue
|
|
||||||
}
|
|
||||||
} catch (FailedVerificationException e) {
|
|
||||||
LOG.error(e);
|
|
||||||
checkTokenAndShowScreen();
|
|
||||||
}
|
|
||||||
if (res != 200) {
|
|
||||||
//image was uploaded but not added to blockchain
|
|
||||||
checkTokenAndShowScreen();
|
|
||||||
} else {
|
|
||||||
String str = app.getString(R.string.successfully_uploaded_pattern, 1, 1);
|
|
||||||
showToastMessage(str);
|
|
||||||
//refresh the image
|
|
||||||
execute(new GetImageCardsTask(mapActivity, getLatLon(), getAdditionalCardParams(), imageCardListener));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
checkTokenAndShowScreen();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showToastMessage(final String str) {
|
|
||||||
new Handler(Looper.getMainLooper()).post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Toast.makeText(mapActivity.getBaseContext(), str, Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//This method runs on non main thread
|
|
||||||
private void checkTokenAndShowScreen() {
|
|
||||||
final String baseUrl = OPRConstants.getBaseUrl(app);
|
|
||||||
final String name = app.getSettings().OPR_USERNAME.get();
|
|
||||||
final String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
|
||||||
if (openDBAPI.checkPrivateKeyValid(baseUrl, name, privateKey)) {
|
|
||||||
String str = app.getString(R.string.cannot_upload_image);
|
|
||||||
showToastMessage(str);
|
|
||||||
} else {
|
|
||||||
app.runInUIThread(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
OprStartFragment.showInstance(mapActivity.getSupportFragmentManager());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private byte[] compressImage(InputStream image) {
|
|
||||||
BufferedInputStream bufferedInputStream = new BufferedInputStream(image);
|
|
||||||
Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);
|
|
||||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
||||||
bmp.compress(Bitmap.CompressFormat.PNG, 70, os);
|
|
||||||
return os.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void startLoadingImages() {
|
private void startLoadingImages() {
|
||||||
if (onlinePhotoCardsRow == null) {
|
if (onlinePhotoCardsRow == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -0,0 +1,226 @@
|
||||||
|
package net.osmand.plus.mapcontextmenu;
|
||||||
|
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.DialogInterface.OnDismissListener;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Matrix;
|
||||||
|
import android.net.Uri;
|
||||||
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.PlatformUtil;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
|
import net.osmand.osm.io.NetworkUtils;
|
||||||
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
|
import net.osmand.plus.dialogs.UploadPhotoProgressBottomSheet;
|
||||||
|
import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask;
|
||||||
|
import net.osmand.plus.mapcontextmenu.builders.cards.ImageCard.GetImageCardsTask.GetImageCardsListener;
|
||||||
|
import net.osmand.plus.openplacereviews.OPRConstants;
|
||||||
|
import net.osmand.plus.openplacereviews.OprStartFragment;
|
||||||
|
import net.osmand.plus.osmedit.opr.OpenDBAPI;
|
||||||
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.openplacereviews.opendb.util.exception.FailedVerificationException;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class UploadPhotosAsyncTask extends AsyncTask<Void, Integer, Void> {
|
||||||
|
|
||||||
|
private static final Log LOG = PlatformUtil.getLog(UploadPhotosAsyncTask.class);
|
||||||
|
|
||||||
|
private static final int MAX_IMAGE_LENGTH = 2048;
|
||||||
|
|
||||||
|
private final OsmandApplication app;
|
||||||
|
private final WeakReference<MapActivity> activityRef;
|
||||||
|
private final OpenDBAPI openDBAPI = new OpenDBAPI();
|
||||||
|
private final LatLon latLon;
|
||||||
|
private final List<Uri> data;
|
||||||
|
private final String[] placeId;
|
||||||
|
private final Map<String, String> params;
|
||||||
|
private final GetImageCardsListener imageCardListener;
|
||||||
|
private UploadPhotosListener listener;
|
||||||
|
|
||||||
|
public UploadPhotosAsyncTask(MapActivity activity, List<Uri> data, LatLon latLon, String[] placeId,
|
||||||
|
Map<String, String> params, GetImageCardsListener imageCardListener) {
|
||||||
|
app = (OsmandApplication) activity.getApplicationContext();
|
||||||
|
activityRef = new WeakReference<>(activity);
|
||||||
|
this.data = data;
|
||||||
|
this.latLon = latLon;
|
||||||
|
this.params = params;
|
||||||
|
this.placeId = placeId;
|
||||||
|
this.imageCardListener = imageCardListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
FragmentActivity activity = activityRef.get();
|
||||||
|
if (AndroidUtils.isActivityNotDestroyed(activity)) {
|
||||||
|
FragmentManager manager = activity.getSupportFragmentManager();
|
||||||
|
listener = UploadPhotoProgressBottomSheet.showInstance(manager, data.size(), new OnDismissListener() {
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
cancel(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(Integer... values) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.uploadPhotosProgressUpdate(values[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Void doInBackground(Void... uris) {
|
||||||
|
List<Uri> uploadedPhotoUris = new ArrayList<>();
|
||||||
|
for (int i = 0; i < data.size(); i++) {
|
||||||
|
if (isCancelled()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Uri uri = data.get(i);
|
||||||
|
if (handleSelectedImage(uri)) {
|
||||||
|
uploadedPhotoUris.add(uri);
|
||||||
|
publishProgress(uploadedPhotoUris.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Void aVoid) {
|
||||||
|
if (listener != null) {
|
||||||
|
listener.uploadPhotosFinished();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean handleSelectedImage(final Uri uri) {
|
||||||
|
boolean success = false;
|
||||||
|
InputStream inputStream = null;
|
||||||
|
try {
|
||||||
|
inputStream = app.getContentResolver().openInputStream(uri);
|
||||||
|
if (inputStream != null) {
|
||||||
|
success = uploadImageToPlace(inputStream);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error(e);
|
||||||
|
app.showToastMessage(R.string.cannot_upload_image);
|
||||||
|
} finally {
|
||||||
|
Algorithms.closeStream(inputStream);
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean uploadImageToPlace(InputStream image) {
|
||||||
|
boolean success = false;
|
||||||
|
InputStream serverData = new ByteArrayInputStream(compressImageToJpeg(image));
|
||||||
|
String baseUrl = OPRConstants.getBaseUrl(app);
|
||||||
|
// all these should be constant
|
||||||
|
String url = baseUrl + "api/ipfs/image";
|
||||||
|
String response = NetworkUtils.sendPostDataRequest(url, "file", "compressed.jpeg", serverData);
|
||||||
|
if (response != null) {
|
||||||
|
int res = 0;
|
||||||
|
try {
|
||||||
|
StringBuilder error = new StringBuilder();
|
||||||
|
String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
||||||
|
String name = app.getSettings().OPR_BLOCKCHAIN_NAME.get();
|
||||||
|
res = openDBAPI.uploadImage(
|
||||||
|
placeId,
|
||||||
|
baseUrl,
|
||||||
|
privateKey,
|
||||||
|
name,
|
||||||
|
response, error);
|
||||||
|
if (res != 200) {
|
||||||
|
app.showToastMessage(error.toString());
|
||||||
|
}
|
||||||
|
} catch (FailedVerificationException e) {
|
||||||
|
LOG.error(e);
|
||||||
|
checkTokenAndShowScreen();
|
||||||
|
}
|
||||||
|
if (res != 200) {
|
||||||
|
//image was uploaded but not added to blockchain
|
||||||
|
checkTokenAndShowScreen();
|
||||||
|
} else {
|
||||||
|
success = true;
|
||||||
|
String str = app.getString(R.string.successfully_uploaded_pattern, 1, 1);
|
||||||
|
app.showToastMessage(str);
|
||||||
|
//refresh the image
|
||||||
|
|
||||||
|
MapActivity activity = activityRef.get();
|
||||||
|
if (activity != null) {
|
||||||
|
MenuBuilder.execute(new GetImageCardsTask(activity, latLon, params, imageCardListener));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
checkTokenAndShowScreen();
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
//This method runs on non main thread
|
||||||
|
private void checkTokenAndShowScreen() {
|
||||||
|
String baseUrl = OPRConstants.getBaseUrl(app);
|
||||||
|
String name = app.getSettings().OPR_USERNAME.get();
|
||||||
|
String privateKey = app.getSettings().OPR_ACCESS_TOKEN.get();
|
||||||
|
if (openDBAPI.checkPrivateKeyValid(app, baseUrl, name, privateKey)) {
|
||||||
|
app.showToastMessage(R.string.cannot_upload_image);
|
||||||
|
} else {
|
||||||
|
app.runInUIThread(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
MapActivity activity = activityRef.get();
|
||||||
|
if (activity != null) {
|
||||||
|
OprStartFragment.showInstance(activity.getSupportFragmentManager());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private byte[] compressImageToJpeg(InputStream image) {
|
||||||
|
BufferedInputStream bufferedInputStream = new BufferedInputStream(image);
|
||||||
|
Bitmap bmp = BitmapFactory.decodeStream(bufferedInputStream);
|
||||||
|
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
||||||
|
int h = bmp.getHeight();
|
||||||
|
int w = bmp.getWidth();
|
||||||
|
boolean scale = false;
|
||||||
|
while (w > MAX_IMAGE_LENGTH || h > MAX_IMAGE_LENGTH) {
|
||||||
|
w = w / 2;
|
||||||
|
h = h / 2;
|
||||||
|
scale = true;
|
||||||
|
}
|
||||||
|
if (scale) {
|
||||||
|
Matrix matrix = new Matrix();
|
||||||
|
matrix.postScale(w, h);
|
||||||
|
Bitmap resizedBitmap = Bitmap.createBitmap(
|
||||||
|
bmp, 0, 0, w, h, matrix, false);
|
||||||
|
bmp.recycle();
|
||||||
|
bmp = resizedBitmap;
|
||||||
|
}
|
||||||
|
bmp.compress(Bitmap.CompressFormat.JPEG, 90, os);
|
||||||
|
return os.toByteArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public interface UploadPhotosListener {
|
||||||
|
|
||||||
|
void uploadPhotosProgressUpdate(int progress);
|
||||||
|
|
||||||
|
void uploadPhotosFinished();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.mapcontextmenu.builders;
|
package net.osmand.plus.mapcontextmenu.builders;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
|
@ -16,13 +15,12 @@ import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.PointDescription;
|
import net.osmand.data.PointDescription;
|
||||||
import net.osmand.plus.GpxSelectionHelper;
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
|
||||||
import net.osmand.plus.mapcontextmenu.CollapsableView;
|
import net.osmand.plus.mapcontextmenu.CollapsableView;
|
||||||
|
import net.osmand.plus.mapcontextmenu.MenuBuilder;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.layers.POIMapLayer;
|
import net.osmand.plus.views.layers.POIMapLayer;
|
||||||
import net.osmand.plus.widgets.TextViewEx;
|
import net.osmand.plus.widgets.TextViewEx;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -181,12 +179,7 @@ public class WptPtMenuBuilder extends MenuBuilder {
|
||||||
button.setOnClickListener(new View.OnClickListener() {
|
button.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
OsmAndAppCustomization appCustomization = app.getAppCustomization();
|
TrackMenuFragment.openTrack(mapActivity, new File(gpxFile.path), null);
|
||||||
final Intent intent = new Intent(context, appCustomization.getTrackActivity());
|
|
||||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxFile.path);
|
|
||||||
intent.putExtra(TrackActivity.OPEN_POINTS_TAB, true);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
|
||||||
context.startActivity(intent);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
view.addView(button);
|
view.addView(button);
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.mapcontextmenu.controllers;
|
package net.osmand.plus.mapcontextmenu.controllers;
|
||||||
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
|
|
||||||
|
@ -17,9 +16,7 @@ import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.Version;
|
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.mapcontextmenu.MenuController;
|
import net.osmand.plus.mapcontextmenu.MenuController;
|
||||||
import net.osmand.plus.mapcontextmenu.builders.SelectedGpxMenuBuilder;
|
import net.osmand.plus.mapcontextmenu.builders.SelectedGpxMenuBuilder;
|
||||||
|
@ -45,21 +42,10 @@ public class SelectedGpxMenuController extends MenuController {
|
||||||
leftTitleButtonController = new TitleButtonController() {
|
leftTitleButtonController = new TitleButtonController() {
|
||||||
@Override
|
@Override
|
||||||
public void buttonPressed() {
|
public void buttonPressed() {
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
mapContextMenu.hide(false);
|
||||||
SelectedGpxFile selectedGpxFile = selectedGpxPoint.getSelectedGpxFile();
|
WptPt wptPt = selectedGpxPoint.selectedPoint;
|
||||||
if (Version.isDeveloperVersion(app)) {
|
LatLon latLon = new LatLon(wptPt.lat, wptPt.lon);
|
||||||
mapActivity.getContextMenu().hide(false);
|
TrackMenuFragment.showInstance(mapActivity, selectedGpxPoint.getSelectedGpxFile(), latLon);
|
||||||
TrackMenuFragment.showInstance(mapActivity, selectedGpxFile.getGpxFile().path, selectedGpxFile.isShowCurrentTrack());
|
|
||||||
} else {
|
|
||||||
Intent intent = new Intent(mapActivity, mapActivity.getMyApplication().getAppCustomization().getTrackActivity());
|
|
||||||
if (selectedGpxFile.isShowCurrentTrack()) {
|
|
||||||
intent.putExtra(TrackActivity.CURRENT_RECORDING, true);
|
|
||||||
} else {
|
|
||||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, selectedGpxFile.getGpxFile().path);
|
|
||||||
}
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
mapActivity.startActivity(intent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_open_track);
|
||||||
|
|
|
@ -5,7 +5,6 @@ import android.app.Dialog;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
@ -66,7 +65,6 @@ import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
import net.osmand.plus.OsmAndLocationProvider.OsmAndCompassListener;
|
||||||
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
import net.osmand.plus.OsmAndLocationProvider.OsmAndLocationListener;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.settings.backend.OsmandPreference;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.Version;
|
import net.osmand.plus.Version;
|
||||||
|
@ -78,6 +76,8 @@ import net.osmand.plus.mapmarkers.CoordinateInputFormats.DDM;
|
||||||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.DMS;
|
import net.osmand.plus.mapmarkers.CoordinateInputFormats.DMS;
|
||||||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
|
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
|
||||||
import net.osmand.plus.mapmarkers.adapters.CoordinateInputAdapter;
|
import net.osmand.plus.mapmarkers.adapters.CoordinateInputAdapter;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandPreference;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.widgets.EditTextEx;
|
import net.osmand.plus.widgets.EditTextEx;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
import net.osmand.util.LocationParser;
|
import net.osmand.util.LocationParser;
|
||||||
|
@ -1097,11 +1097,7 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
|
||||||
.setAction(R.string.shared_string_show, new View.OnClickListener() {
|
.setAction(R.string.shared_string_show, new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Intent intent = new Intent(app, app.getAppCustomization().getTrackActivity());
|
TrackMenuFragment.openTrack(app, new File(getGpx().path), null);
|
||||||
intent.putExtra(TrackActivity.OPEN_POINTS_TAB, true);
|
|
||||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, getGpx().path);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UiUtilities.setupSnackbar(snackbar, !lightTheme);
|
UiUtilities.setupSnackbar(snackbar, !lightTheme);
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.mapmarkers;
|
package net.osmand.plus.mapmarkers;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Intent;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -29,19 +28,20 @@ import net.osmand.AndroidUtils;
|
||||||
import net.osmand.Location;
|
import net.osmand.Location;
|
||||||
import net.osmand.data.LatLon;
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.plus.LockableViewPager;
|
import net.osmand.plus.LockableViewPager;
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
|
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper.OnGroupSyncedListener;
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.mapmarkers.CoordinateInputDialogFragment.OnPointsSavedListener;
|
import net.osmand.plus.mapmarkers.CoordinateInputDialogFragment.OnPointsSavedListener;
|
||||||
import net.osmand.plus.mapmarkers.DirectionIndicationDialogFragment.DirectionIndicationFragmentListener;
|
import net.osmand.plus.mapmarkers.DirectionIndicationDialogFragment.DirectionIndicationFragmentListener;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersHelper.MapMarkersSortByDef;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersHelper.OnGroupSyncedListener;
|
||||||
import net.osmand.plus.mapmarkers.OptionsBottomSheetDialogFragment.MarkerOptionsFragmentListener;
|
import net.osmand.plus.mapmarkers.OptionsBottomSheetDialogFragment.MarkerOptionsFragmentListener;
|
||||||
import net.osmand.plus.mapmarkers.OrderByBottomSheetDialogFragment.OrderByFragmentListener;
|
import net.osmand.plus.mapmarkers.OrderByBottomSheetDialogFragment.OrderByFragmentListener;
|
||||||
import net.osmand.plus.mapmarkers.SaveAsTrackBottomSheetDialogFragment.MarkerSaveAsTrackFragmentListener;
|
import net.osmand.plus.mapmarkers.SaveAsTrackBottomSheetDialogFragment.MarkerSaveAsTrackFragmentListener;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -167,7 +167,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
|
||||||
viewPager.setAdapter(adapter);
|
viewPager.setAdapter(adapter);
|
||||||
|
|
||||||
progressBar = (ProgressBar) mainView.findViewById(R.id.progress_bar);
|
progressBar = (ProgressBar) mainView.findViewById(R.id.progress_bar);
|
||||||
|
|
||||||
TextView toolbarTitle = mainView.findViewById(R.id.map_markers_toolbar_title);
|
TextView toolbarTitle = mainView.findViewById(R.id.map_markers_toolbar_title);
|
||||||
bottomNav = mainView.findViewById(R.id.map_markers_bottom_navigation);
|
bottomNav = mainView.findViewById(R.id.map_markers_bottom_navigation);
|
||||||
toolbarTitle.setTextColor(ContextCompat.getColor(getContext(), lightTheme ? R.color.active_buttons_and_links_text_light : R.color.text_color_primary_dark));
|
toolbarTitle.setTextColor(ContextCompat.getColor(getContext(), lightTheme ? R.color.active_buttons_and_links_text_light : R.color.text_color_primary_dark));
|
||||||
|
@ -486,11 +486,7 @@ public class MapMarkersDialogFragment extends DialogFragment implements OnGroupS
|
||||||
.setAction(R.string.shared_string_show, new View.OnClickListener() {
|
.setAction(R.string.shared_string_show, new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
Intent intent = new Intent(mapActivity, getMyApplication().getAppCustomization().getTrackActivity());
|
TrackMenuFragment.openTrack(mapActivity, new File(gpxPath), null);
|
||||||
intent.putExtra(TrackActivity.TRACK_FILE_NAME, gpxPath);
|
|
||||||
intent.putExtra(TrackActivity.OPEN_POINTS_TAB, true);
|
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UiUtilities.setupSnackbar(snackbar, !lightTheme);
|
UiUtilities.setupSnackbar(snackbar, !lightTheme);
|
||||||
|
|
|
@ -47,7 +47,6 @@ import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.Version;
|
import net.osmand.plus.Version;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.MapActivityActions;
|
import net.osmand.plus.activities.MapActivityActions;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.base.BaseOsmAndFragment;
|
import net.osmand.plus.base.BaseOsmAndFragment;
|
||||||
import net.osmand.plus.base.ContextMenuFragment.MenuState;
|
import net.osmand.plus.base.ContextMenuFragment.MenuState;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
|
@ -76,6 +75,7 @@ import net.osmand.plus.routepreparationmenu.RouteOptionsBottomSheet.DialogMode;
|
||||||
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
|
||||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.layers.MapControlsLayer.MapControlsThemeInfoProvider;
|
import net.osmand.plus.views.layers.MapControlsLayer.MapControlsThemeInfoProvider;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarController;
|
||||||
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
|
import net.osmand.plus.views.mapwidgets.MapInfoWidgetsFactory.TopToolbarControllerType;
|
||||||
|
@ -1914,11 +1914,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
|
||||||
GpxData gpxData = editingCtx.getGpxData();
|
GpxData gpxData = editingCtx.getGpxData();
|
||||||
GPXFile gpx = gpxData != null ? gpxData.getGpxFile() : null;
|
GPXFile gpx = gpxData != null ? gpxData.getGpxFile() : null;
|
||||||
if (gpx != null) {
|
if (gpx != null) {
|
||||||
Intent newIntent = new Intent(mapActivity, app.getAppCustomization().getTrackActivity());
|
TrackMenuFragment.openTrack(mapActivity, new File(gpx.path), null);
|
||||||
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, gpx.path);
|
|
||||||
newIntent.putExtra(TrackActivity.OPEN_TRACKS_LIST, true);
|
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
startActivity(newIntent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
editingCtx.resetRouteSettingsListener();
|
editingCtx.resetRouteSettingsListener();
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.measurementtool;
|
package net.osmand.plus.measurementtool;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -10,16 +9,15 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import net.osmand.plus.OsmandApplication;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.UiUtilities;
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton;
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemButton;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerItem;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -60,11 +58,7 @@ public class SavedTrackBottomSheetDialogFragment extends MenuBottomSheetDialogFr
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
FragmentActivity activity = getActivity();
|
FragmentActivity activity = getActivity();
|
||||||
if (activity != null && !Algorithms.isEmpty(fileName)) {
|
if (activity != null && !Algorithms.isEmpty(fileName)) {
|
||||||
OsmandApplication app = ((OsmandApplication) activity.getApplication());
|
TrackMenuFragment.openTrack(activity, new File(fileName), null);
|
||||||
Intent newIntent = new Intent(activity, app.getAppCustomization().getTrackActivity());
|
|
||||||
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, fileName);
|
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
activity.startActivity(newIntent);
|
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,14 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import net.osmand.IndexConstants;
|
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
|
import net.osmand.IndexConstants;
|
||||||
import net.osmand.plus.GpxSelectionHelper;
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
|
||||||
import net.osmand.plus.OsmAndFormatter;
|
import net.osmand.plus.OsmAndFormatter;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandPlugin;
|
import net.osmand.plus.OsmandPlugin;
|
||||||
import net.osmand.plus.settings.backend.OsmandSettings;
|
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.SavingTrackHelper;
|
import net.osmand.plus.activities.SavingTrackHelper;
|
||||||
|
@ -33,6 +31,9 @@ import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXInfo;
|
||||||
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
||||||
import net.osmand.plus.myplaces.FavoritesActivity;
|
import net.osmand.plus.myplaces.FavoritesActivity;
|
||||||
|
import net.osmand.plus.settings.backend.OsmAndAppCustomization;
|
||||||
|
import net.osmand.plus.settings.backend.OsmandSettings;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -153,7 +154,7 @@ public class DashTrackFragment extends DashBaseFragment {
|
||||||
view.setOnClickListener(new View.OnClickListener() {
|
view.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
AvailableGPXFragment.openTrack(getActivity(), null);
|
TrackMenuFragment.openTrack(getActivity(), null, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
view.findViewById(R.id.divider_dash).setVisibility(View.VISIBLE);
|
view.findViewById(R.id.divider_dash).setVisibility(View.VISIBLE);
|
||||||
|
@ -172,7 +173,7 @@ public class DashTrackFragment extends DashBaseFragment {
|
||||||
v.setOnClickListener(new View.OnClickListener() {
|
v.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
AvailableGPXFragment.openTrack(getActivity(), f);
|
TrackMenuFragment.openTrack(getActivity(), f, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ImageButton showOnMap = ((ImageButton) v.findViewById(R.id.show_on_map));
|
ImageButton showOnMap = ((ImageButton) v.findViewById(R.id.show_on_map));
|
||||||
|
|
|
@ -29,6 +29,7 @@ import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
import net.osmand.plus.myplaces.AvailableGPXFragment;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.plus.views.OsmandMapTileView;
|
import net.osmand.plus.views.OsmandMapTileView;
|
||||||
import net.osmand.plus.widgets.OsmandTextFieldBoxes;
|
import net.osmand.plus.widgets.OsmandTextFieldBoxes;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -167,7 +168,7 @@ public class SaveGPXBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
FragmentActivity activity = getActivity();
|
FragmentActivity activity = getActivity();
|
||||||
if (openTrack && activity != null) {
|
if (openTrack && activity != null) {
|
||||||
AvailableGPXFragment.openTrack(activity, file);
|
TrackMenuFragment.openTrack(activity, file, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.os.Bundle;
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.CompoundButton.OnCheckedChangeListener;
|
import android.widget.CompoundButton.OnCheckedChangeListener;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
@ -18,10 +19,12 @@ import android.widget.TextView;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.SwitchCompat;
|
import androidx.appcompat.widget.SwitchCompat;
|
||||||
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import com.google.android.material.slider.RangeSlider;
|
import com.google.android.material.slider.RangeSlider;
|
||||||
|
|
||||||
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.NavigationService;
|
import net.osmand.plus.NavigationService;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
|
@ -49,9 +52,9 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
private ImageView upDownBtn;
|
private ImageView upDownBtn;
|
||||||
private SwitchCompat confirmEveryRun;
|
private SwitchCompat confirmEveryRun;
|
||||||
private RangeSlider intervalSlider;
|
|
||||||
private TextView intervalValueView;
|
private TextView intervalValueView;
|
||||||
private LinearLayout container;
|
private LinearLayout container;
|
||||||
|
private View divider;
|
||||||
private boolean infoExpanded;
|
private boolean infoExpanded;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -87,13 +90,15 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
if (mapActivity != null) {
|
if (mapActivity != null) {
|
||||||
hide();
|
hide();
|
||||||
SelectedGpxFile selectedGpxFile = app.getSavingTrackHelper().getCurrentTrack();
|
SelectedGpxFile selectedGpxFile = app.getSavingTrackHelper().getCurrentTrack();
|
||||||
TrackAppearanceFragment.showInstance(mapActivity, selectedGpxFile);
|
TrackAppearanceFragment.showInstance(mapActivity, selectedGpxFile, TripRecordingBottomSheet.this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
divider = itemView.findViewById(R.id.second_divider);
|
||||||
|
LinearLayout expandHideIntervalContainer = itemView.findViewById(R.id.interval_view_container);
|
||||||
upDownBtn = itemView.findViewById(R.id.up_down_button);
|
upDownBtn = itemView.findViewById(R.id.up_down_button);
|
||||||
upDownBtn.setOnClickListener(new View.OnClickListener() {
|
expandHideIntervalContainer.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -108,8 +113,11 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
updateIntervalLegend();
|
updateIntervalLegend();
|
||||||
|
|
||||||
container = itemView.findViewById(R.id.always_ask_and_range_slider_container);
|
container = itemView.findViewById(R.id.always_ask_and_range_slider_container);
|
||||||
intervalSlider = itemView.findViewById(R.id.interval_slider);
|
RangeSlider intervalSlider = itemView.findViewById(R.id.interval_slider);
|
||||||
intervalSlider.setValueTo(secondsLength + minutesLength - 1);
|
intervalSlider.setValueTo(secondsLength + minutesLength - 1);
|
||||||
|
int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode);
|
||||||
|
int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
|
||||||
|
UiUtilities.setupSlider(intervalSlider, nightMode, currentModeColor, true);
|
||||||
container.setVisibility(View.GONE);
|
container.setVisibility(View.GONE);
|
||||||
intervalSlider.addOnChangeListener(new RangeSlider.OnChangeListener() {
|
intervalSlider.addOnChangeListener(new RangeSlider.OnChangeListener() {
|
||||||
|
|
||||||
|
@ -126,6 +134,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
updateIntervalLegend();
|
updateIntervalLegend();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for (int i = 0; i < secondsLength + minutesLength; i++) {
|
for (int i = 0; i < secondsLength + minutesLength; i++) {
|
||||||
if (i < secondsLength) {
|
if (i < secondsLength) {
|
||||||
if (settings.SAVE_GLOBAL_TRACK_INTERVAL.get() <= SECONDS[i] * 1000) {
|
if (settings.SAVE_GLOBAL_TRACK_INTERVAL.get() <= SECONDS[i] * 1000) {
|
||||||
|
@ -151,13 +160,15 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
SwitchCompat showTrackOnMapButton = showTrackOnMapView.findViewById(R.id.switch_button);
|
final SwitchCompat showTrackOnMapButton = showTrackOnMapView.findViewById(R.id.switch_button);
|
||||||
showTrackOnMapButton.setChecked(app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null);
|
showTrackOnMapButton.setChecked(app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null);
|
||||||
showTrackOnMapButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
View basicItem = itemView.findViewById(R.id.basic_item_body);
|
||||||
|
basicItem.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
|
public void onClick(View v) {
|
||||||
app.getSelectedGpxHelper().selectGpxFile(app.getSavingTrackHelper().getCurrentGpx(), isChecked, false);
|
boolean checked = !showTrackOnMapButton.isChecked();
|
||||||
|
showTrackOnMapButton.setChecked(checked);
|
||||||
|
app.getSelectedGpxHelper().selectGpxFile(app.getSavingTrackHelper().getCurrentGpx(), checked, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UiUtilities.setupCompoundButton(showTrackOnMapButton, nightMode, PROFILE_DEPENDENT);
|
UiUtilities.setupCompoundButton(showTrackOnMapButton, nightMode, PROFILE_DEPENDENT);
|
||||||
|
@ -217,6 +228,14 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
private void toggleInfoView() {
|
private void toggleInfoView() {
|
||||||
infoExpanded = !infoExpanded;
|
infoExpanded = !infoExpanded;
|
||||||
|
ViewGroup.MarginLayoutParams marginParams = (ViewGroup.MarginLayoutParams) divider.getLayoutParams();
|
||||||
|
final int dp8 = AndroidUtils.dpToPx(app, 8f);
|
||||||
|
final int dp16 = AndroidUtils.dpToPx(app, 16f);
|
||||||
|
if (infoExpanded) {
|
||||||
|
AndroidUtils.setMargins(marginParams, 0, dp16, 0, dp8);
|
||||||
|
} else {
|
||||||
|
AndroidUtils.setMargins(marginParams, 0, 0, 0, dp8);
|
||||||
|
}
|
||||||
AndroidUiHelper.updateVisibility(container, infoExpanded);
|
AndroidUiHelper.updateVisibility(container, infoExpanded);
|
||||||
updateUpDownBtn();
|
updateUpDownBtn();
|
||||||
}
|
}
|
||||||
|
@ -226,6 +245,16 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getRightButtonHeight(){
|
||||||
|
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getDismissButtonHeight(){
|
||||||
|
return getResources().getDimensionPixelSize(R.dimen.bottom_sheet_cancel_button_height);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getRightBottomButtonTextId() {
|
protected int getRightBottomButtonTextId() {
|
||||||
return R.string.start_recording;
|
return R.string.start_recording;
|
||||||
|
|
|
@ -13,8 +13,6 @@ import android.os.AsyncTask;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
|
||||||
import android.text.TextWatcher;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
|
@ -27,7 +25,6 @@ import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.EditText;
|
|
||||||
import android.widget.ExpandableListView;
|
import android.widget.ExpandableListView;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
|
@ -75,7 +72,6 @@ import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.MapActivity;
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
|
import net.osmand.plus.activities.OsmandBaseExpandableListAdapter;
|
||||||
import net.osmand.plus.activities.SavingTrackHelper;
|
import net.osmand.plus.activities.SavingTrackHelper;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
|
||||||
import net.osmand.plus.base.OsmandExpandableListFragment;
|
import net.osmand.plus.base.OsmandExpandableListFragment;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
||||||
|
@ -103,14 +99,12 @@ import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import static net.osmand.plus.GpxSelectionHelper.CURRENT_TRACK;
|
import static net.osmand.plus.GpxSelectionHelper.CURRENT_TRACK;
|
||||||
import static net.osmand.plus.myplaces.FavoritesActivity.GPX_TAB;
|
import static net.osmand.plus.myplaces.FavoritesActivity.GPX_TAB;
|
||||||
import static net.osmand.plus.myplaces.FavoritesActivity.OPEN_GPX_REQUEST;
|
|
||||||
import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID;
|
import static net.osmand.plus.myplaces.FavoritesActivity.TAB_ID;
|
||||||
|
import static net.osmand.plus.track.TrackMenuFragment.openTrack;
|
||||||
import static net.osmand.util.Algorithms.capitalizeFirstLetter;
|
import static net.osmand.util.Algorithms.capitalizeFirstLetter;
|
||||||
import static net.osmand.util.Algorithms.collectDirs;
|
|
||||||
import static net.osmand.util.Algorithms.formatDuration;
|
import static net.osmand.util.Algorithms.formatDuration;
|
||||||
import static net.osmand.util.Algorithms.objectEquals;
|
import static net.osmand.util.Algorithms.objectEquals;
|
||||||
import static net.osmand.util.Algorithms.removeAllFiles;
|
import static net.osmand.util.Algorithms.removeAllFiles;
|
||||||
|
@ -348,10 +342,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
currentGpxView.findViewById(R.id.current_track_info).setOnClickListener(new View.OnClickListener() {
|
currentGpxView.findViewById(R.id.current_track_info).setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Intent newIntent = new Intent(getActivity(), getMyApplication().getAppCustomization().getTrackActivity());
|
FragmentActivity activity = getActivity();
|
||||||
newIntent.putExtra(TrackActivity.CURRENT_RECORDING, true);
|
if (activity != null) {
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
openTrack(activity, null, storeState());
|
||||||
startActivity(newIntent);
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
listView.addHeaderView(currentGpxView);
|
listView.addHeaderView(currentGpxView);
|
||||||
|
@ -419,18 +413,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
updateCurrentTrack();
|
updateCurrentTrack();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void openTrack(Activity a, final File f) {
|
|
||||||
Intent newIntent = new Intent(a, ((OsmandApplication) a.getApplication()).getAppCustomization().getTrackActivity());
|
|
||||||
// causes wrong position caching: newIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
|
||||||
if (f == null) {
|
|
||||||
newIntent.putExtra(TrackActivity.CURRENT_RECORDING, true);
|
|
||||||
} else {
|
|
||||||
newIntent.putExtra(TrackActivity.TRACK_FILE_NAME, f.getAbsolutePath());
|
|
||||||
}
|
|
||||||
newIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
|
||||||
a.startActivityForResult(newIntent, OPEN_GPX_REQUEST);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reloadTracks() {
|
public void reloadTracks() {
|
||||||
asyncLoader = new LoadGpxTask();
|
asyncLoader = new LoadGpxTask();
|
||||||
asyncLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, getActivity());
|
asyncLoader.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, getActivity());
|
||||||
|
@ -840,7 +822,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
app.showToastMessage(R.string.file_can_not_be_moved);
|
app.showToastMessage(R.string.file_can_not_be_moved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void renamedTo(File file) {
|
public void renamedTo(File file) {
|
||||||
reloadTracks();
|
reloadTracks();
|
||||||
}
|
}
|
||||||
|
@ -1615,7 +1597,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment implement
|
||||||
GpxInfo item = allGpxAdapter.getChild(groupPosition, childPosition);
|
GpxInfo item = allGpxAdapter.getChild(groupPosition, childPosition);
|
||||||
|
|
||||||
if (!selectionMode) {
|
if (!selectionMode) {
|
||||||
openTrack(getActivity(), item.file);
|
openTrack(getActivity(), item.file, storeState());
|
||||||
} else {
|
} else {
|
||||||
if (!selectedItems.contains(item)) {
|
if (!selectedItems.contains(item)) {
|
||||||
selectedItems.add(item);
|
selectedItems.add(item);
|
||||||
|
|
|
@ -15,14 +15,14 @@ import java.io.File;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
class DeletePointsTask extends AsyncTask<Void, Void, Void> {
|
public class DeletePointsTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
private GPXFile gpx;
|
private GPXFile gpx;
|
||||||
private Set<GpxDisplayItem> selectedItems;
|
private Set<GpxDisplayItem> selectedItems;
|
||||||
private WeakReference<OnPointsDeleteListener> listenerRef;
|
private WeakReference<OnPointsDeleteListener> listenerRef;
|
||||||
|
|
||||||
DeletePointsTask(OsmandApplication app, GPXFile gpxFile, Set<GpxDisplayItem> selectedItems, OnPointsDeleteListener listener) {
|
public DeletePointsTask(OsmandApplication app, GPXFile gpxFile, Set<GpxDisplayItem> selectedItems, OnPointsDeleteListener listener) {
|
||||||
this.app = app;
|
this.app = app;
|
||||||
this.gpx = gpxFile;
|
this.gpx = gpxFile;
|
||||||
this.selectedItems = selectedItems;
|
this.selectedItems = selectedItems;
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
package net.osmand.plus.myplaces;
|
package net.osmand.plus.myplaces;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.graphics.Typeface;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup.LayoutParams;
|
import android.view.ViewGroup.LayoutParams;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
@ -17,56 +18,147 @@ import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.widget.ListPopupWindow;
|
import androidx.appcompat.widget.ListPopupWindow;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
import net.osmand.GPXUtilities;
|
import net.osmand.GPXUtilities;
|
||||||
import net.osmand.GPXUtilities.GPXFile;
|
import net.osmand.GPXUtilities.GPXFile;
|
||||||
import net.osmand.GPXUtilities.WptPt;
|
import net.osmand.GPXUtilities.WptPt;
|
||||||
|
import net.osmand.data.FavouritePoint;
|
||||||
|
import net.osmand.plus.FavouritesDbHelper;
|
||||||
|
import net.osmand.plus.GpxSelectionHelper;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayGroup;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItemType;
|
||||||
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
import net.osmand.plus.GpxSelectionHelper.SelectedGpxFile;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.activities.EditFavoriteGroupDialogFragment.FavoriteColorAdapter;
|
import net.osmand.plus.activities.EditFavoriteGroupDialogFragment.FavoriteColorAdapter;
|
||||||
|
import net.osmand.plus.activities.MapActivity;
|
||||||
import net.osmand.plus.activities.SavingTrackHelper;
|
import net.osmand.plus.activities.SavingTrackHelper;
|
||||||
import net.osmand.plus.activities.TrackActivity;
|
import net.osmand.plus.activities.TrackActivity;
|
||||||
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
import net.osmand.plus.base.MenuBottomSheetDialogFragment;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||||
|
import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
import net.osmand.plus.base.bottomsheetmenu.SimpleBottomSheetItem;
|
||||||
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
|
import net.osmand.plus.helpers.FontCache;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersGroup;
|
||||||
|
import net.osmand.plus.mapmarkers.MapMarkersHelper;
|
||||||
|
import net.osmand.plus.measurementtool.OptionsDividerItem;
|
||||||
|
import net.osmand.plus.myplaces.DeletePointsTask.OnPointsDeleteListener;
|
||||||
|
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||||
|
import net.osmand.plus.track.TrackMenuFragment;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static net.osmand.plus.settings.bottomsheets.BooleanPreferenceBottomSheet.getCustomButtonView;
|
||||||
|
import static net.osmand.plus.settings.bottomsheets.BooleanPreferenceBottomSheet.updateCustomButtonView;
|
||||||
|
|
||||||
|
public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment implements OnPointsDeleteListener {
|
||||||
|
|
||||||
public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment {
|
|
||||||
public static final String TAG = EditTrackGroupDialogFragment.class.getSimpleName();
|
public static final String TAG = EditTrackGroupDialogFragment.class.getSimpleName();
|
||||||
|
|
||||||
|
private OsmandApplication app;
|
||||||
|
private GpxSelectionHelper selectedGpxHelper;
|
||||||
|
private MapMarkersHelper mapMarkersHelper;
|
||||||
|
|
||||||
private GpxDisplayGroup group;
|
private GpxDisplayGroup group;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMenuItems(Bundle savedInstanceState) {
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
final OsmandApplication app = getMyApplication();
|
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
app = requiredMyApplication();
|
||||||
|
selectedGpxHelper = app.getSelectedGpxHelper();
|
||||||
|
mapMarkersHelper = app.getMapMarkersHelper();
|
||||||
items.add(new TitleItem(getCategoryName(app, group.getName())));
|
items.add(new TitleItem(getCategoryName(app, group.getName())));
|
||||||
|
|
||||||
BaseBottomSheetItem editNameItem = new SimpleBottomSheetItem.Builder()
|
GPXFile gpxFile = group.getGpx();
|
||||||
.setIcon(getContentIcon(R.drawable.ic_action_edit_dark))
|
|
||||||
.setTitle(getString(R.string.edit_name))
|
boolean currentTrack = group.getGpx().showCurrentTrack;
|
||||||
.setLayoutId(R.layout.bottom_sheet_item_simple)
|
|
||||||
|
SelectedGpxFile selectedGpxFile;
|
||||||
|
if (currentTrack) {
|
||||||
|
selectedGpxFile = selectedGpxHelper.getSelectedCurrentRecordingTrack();
|
||||||
|
} else {
|
||||||
|
selectedGpxFile = selectedGpxHelper.getSelectedFileByPath(gpxFile.path);
|
||||||
|
}
|
||||||
|
boolean trackPoints = group.getType() == GpxDisplayItemType.TRACK_POINTS;
|
||||||
|
if (trackPoints && selectedGpxFile != null) {
|
||||||
|
items.add(createShowOnMapItem(selectedGpxFile));
|
||||||
|
}
|
||||||
|
items.add(createEditNameItem());
|
||||||
|
if (trackPoints) {
|
||||||
|
items.add(createChangeColorItem());
|
||||||
|
}
|
||||||
|
items.add(new OptionsDividerItem(app));
|
||||||
|
|
||||||
|
if (!currentTrack) {
|
||||||
|
items.add(createCopyToMarkersItem(gpxFile));
|
||||||
|
}
|
||||||
|
items.add(createCopyToFavoritesItem());
|
||||||
|
items.add(new OptionsDividerItem(app));
|
||||||
|
|
||||||
|
items.add(createDeleteGroupItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createShowOnMapItem(final SelectedGpxFile selectedGpxFile) {
|
||||||
|
final String name = Algorithms.isEmpty(group.getName()) ? null : group.getName();
|
||||||
|
boolean checked = !selectedGpxFile.getHiddenGroups().contains(name);
|
||||||
|
final ApplicationMode mode = app.getSettings().getApplicationMode();
|
||||||
|
final BottomSheetItemWithCompoundButton[] showOnMapItem = new BottomSheetItemWithCompoundButton[1];
|
||||||
|
showOnMapItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
|
||||||
|
.setCompoundButtonColorId(mode.getIconColorInfo().getColor(nightMode))
|
||||||
|
.setChecked(checked)
|
||||||
|
.setTitle(getString(R.string.shared_string_show_on_map))
|
||||||
|
.setCustomView(getCustomButtonView(app, mode, checked, nightMode))
|
||||||
.setOnClickListener(new View.OnClickListener() {
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Activity activity = getActivity();
|
boolean checked = !showOnMapItem[0].isChecked();
|
||||||
|
if (checked) {
|
||||||
|
selectedGpxFile.removeHiddenGroups(name);
|
||||||
|
} else {
|
||||||
|
selectedGpxFile.addHiddenGroups(name);
|
||||||
|
}
|
||||||
|
app.getSelectedGpxHelper().updateSelectedGpxFile(selectedGpxFile);
|
||||||
|
|
||||||
|
showOnMapItem[0].setChecked(checked);
|
||||||
|
updateCustomButtonView(app, mode, v, checked, nightMode);
|
||||||
|
|
||||||
|
FragmentActivity activity = getActivity();
|
||||||
|
if (activity instanceof MapActivity) {
|
||||||
|
((MapActivity) activity).refreshMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
return showOnMapItem[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createEditNameItem() {
|
||||||
|
return new SimpleBottomSheetItem.Builder()
|
||||||
|
.setIcon(getContentIcon(R.drawable.ic_action_name_field))
|
||||||
|
.setTitle(getString(R.string.shared_string_rename))
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple)
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple_pad_32dp)
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
final FragmentActivity activity = getActivity();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
AlertDialog.Builder b = new AlertDialog.Builder(activity);
|
AlertDialog.Builder b = new AlertDialog.Builder(activity);
|
||||||
b.setTitle(R.string.favorite_group_name);
|
b.setTitle(R.string.favorite_group_name);
|
||||||
|
@ -86,11 +178,8 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
String name = nameEditText.getText().toString();
|
String name = nameEditText.getText().toString();
|
||||||
boolean nameChanged = !Algorithms.objectEquals(group.getName(), name);
|
boolean nameChanged = !Algorithms.objectEquals(group.getName(), name);
|
||||||
if (nameChanged) {
|
if (nameChanged) {
|
||||||
TrackActivity trackActivity = getTrackActivity();
|
new UpdateGpxCategoryTask(activity, group, name)
|
||||||
if (trackActivity != null) {
|
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
new UpdateGpxCategoryTask(trackActivity, group, name)
|
|
||||||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dismiss();
|
dismiss();
|
||||||
}
|
}
|
||||||
|
@ -100,20 +189,144 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.create();
|
.create();
|
||||||
items.add(editNameItem);
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createCopyToMarkersItem(final GPXFile gpxFile) {
|
||||||
|
final MapMarkersGroup markersGroup = getOrCreateMarkersGroup(gpxFile);
|
||||||
|
final Set<String> categories = markersGroup.getWptCategories();
|
||||||
|
final boolean synced = categories != null && categories.contains(group.getName());
|
||||||
|
|
||||||
|
return new SimpleBottomSheetItem.Builder()
|
||||||
|
.setIcon(getContentIcon(synced ? R.drawable.ic_action_delete_dark : R.drawable.ic_action_copy))
|
||||||
|
.setTitle(getString(synced ? R.string.remove_from_map_markers : R.string.copy_to_map_markers))
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple_pad_32dp)
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
updateGroupWptCategory(gpxFile, markersGroup, categories, synced);
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateGroupWptCategory(GPXFile gpxFile, MapMarkersGroup markersGroup, Set<String> categories, boolean synced) {
|
||||||
|
SelectedGpxFile selectedGpxFile = selectedGpxHelper.getSelectedFileByPath(gpxFile.path);
|
||||||
|
if (selectedGpxFile == null) {
|
||||||
|
selectedGpxHelper.selectGpxFile(gpxFile, true, false, false, false, false);
|
||||||
|
}
|
||||||
|
Set<String> selectedCategories = new HashSet<>();
|
||||||
|
if (categories != null) {
|
||||||
|
selectedCategories.addAll(categories);
|
||||||
|
}
|
||||||
|
if (synced) {
|
||||||
|
selectedCategories.remove(group.getName());
|
||||||
|
} else {
|
||||||
|
selectedCategories.add(group.getName());
|
||||||
|
}
|
||||||
|
mapMarkersHelper.updateGroupWptCategories(markersGroup, selectedCategories);
|
||||||
|
mapMarkersHelper.runSynchronization(markersGroup);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MapMarkersGroup getOrCreateMarkersGroup(GPXFile gpxFile) {
|
||||||
|
MapMarkersGroup markersGroup = mapMarkersHelper.getMarkersGroup(gpxFile);
|
||||||
|
if (markersGroup == null) {
|
||||||
|
markersGroup = mapMarkersHelper.addOrEnableGroup(gpxFile);
|
||||||
|
}
|
||||||
|
return markersGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createCopyToFavoritesItem() {
|
||||||
|
return new SimpleBottomSheetItem.Builder()
|
||||||
|
.setIcon(getContentIcon(R.drawable.ic_action_copy))
|
||||||
|
.setTitle(getString(R.string.copy_to_map_favorites))
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple)
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple_pad_32dp)
|
||||||
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
saveGroupToFavorites();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveGroupToFavorites() {
|
||||||
|
FragmentActivity activity = getActivity();
|
||||||
|
if (activity != null) {
|
||||||
|
AlertDialog.Builder b = new AlertDialog.Builder(activity);
|
||||||
|
final EditText editText = new EditText(activity);
|
||||||
|
String name = group.getModifiableList().iterator().next().group.getName();
|
||||||
|
if (name.indexOf('\n') > 0) {
|
||||||
|
name = name.substring(0, name.indexOf('\n'));
|
||||||
|
}
|
||||||
|
editText.setText(name);
|
||||||
|
int leftMargin = AndroidUtils.dpToPx(activity, 16f);
|
||||||
|
int topMargin = AndroidUtils.dpToPx(activity, 8f);
|
||||||
|
editText.setPadding(leftMargin, topMargin, leftMargin, topMargin);
|
||||||
|
b.setTitle(R.string.save_as_favorites_points);
|
||||||
|
b.setView(editText);
|
||||||
|
b.setPositiveButton(R.string.shared_string_save, new DialogInterface.OnClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
String category = editText.getText().toString();
|
||||||
|
FavouritesDbHelper favouritesDbHelper = app.getFavorites();
|
||||||
|
for (GpxDisplayItem item : group.getModifiableList()) {
|
||||||
|
if (item.locationStart != null) {
|
||||||
|
FavouritePoint fp = FavouritePoint.fromWpt(item.locationStart, app, category);
|
||||||
|
if (!Algorithms.isEmpty(item.description)) {
|
||||||
|
fp.setDescription(item.description);
|
||||||
|
}
|
||||||
|
favouritesDbHelper.addFavourite(fp, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
favouritesDbHelper.saveCurrentPointsIntoFile();
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
b.setNegativeButton(R.string.shared_string_cancel, null);
|
||||||
|
b.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createDeleteGroupItem() {
|
||||||
|
String delete = app.getString(R.string.shared_string_delete);
|
||||||
|
Typeface typeface = FontCache.getRobotoMedium(app);
|
||||||
|
return new SimpleBottomSheetItem.Builder()
|
||||||
|
.setTitleColorId(R.color.color_osm_edit_delete)
|
||||||
|
.setIcon(getIcon(R.drawable.ic_action_delete_dark, R.color.color_osm_edit_delete))
|
||||||
|
.setTitle(UiUtilities.createCustomFontSpannable(typeface, delete, delete))
|
||||||
|
.setLayoutId(R.layout.bottom_sheet_item_simple_pad_32dp)
|
||||||
|
.setOnClickListener(new OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(View v) {
|
||||||
|
deleteGroupItems();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteGroupItems() {
|
||||||
|
Set<GpxDisplayItem> items = new HashSet<>(group.getModifiableList());
|
||||||
|
new DeletePointsTask(app, group.getGpx(), items, this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BaseBottomSheetItem createChangeColorItem() {
|
||||||
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
|
||||||
final View changeColorView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
final View changeColorView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||||
R.layout.change_fav_color, null);
|
R.layout.change_fav_color, null);
|
||||||
((ImageView) changeColorView.findViewById(R.id.change_color_icon))
|
ImageView icon = ((ImageView) changeColorView.findViewById(R.id.change_color_icon));
|
||||||
.setImageDrawable(getContentIcon(R.drawable.ic_action_appearance));
|
icon.setImageDrawable(getContentIcon(R.drawable.ic_action_appearance));
|
||||||
|
int margin = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_icon_margin_large);
|
||||||
|
UiUtilities.setMargins(icon, 0, 0, margin, 0);
|
||||||
updateColorView((ImageView) changeColorView.findViewById(R.id.colorImage));
|
updateColorView((ImageView) changeColorView.findViewById(R.id.colorImage));
|
||||||
BaseBottomSheetItem changeColorItem = new BaseBottomSheetItem.Builder()
|
return new BaseBottomSheetItem.Builder()
|
||||||
.setCustomView(changeColorView)
|
.setCustomView(changeColorView)
|
||||||
.setOnClickListener(new View.OnClickListener() {
|
.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
Activity activity = getActivity();
|
final FragmentActivity activity = getActivity();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
final ListPopupWindow popup = new ListPopupWindow(activity);
|
final ListPopupWindow popup = new ListPopupWindow(activity);
|
||||||
popup.setAnchorView(v);
|
popup.setAnchorView(v);
|
||||||
|
@ -135,11 +348,8 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
Integer color = colorAdapter.getItem(position);
|
Integer color = colorAdapter.getItem(position);
|
||||||
if (color != null) {
|
if (color != null) {
|
||||||
if (color != group.getColor()) {
|
if (color != group.getColor()) {
|
||||||
TrackActivity trackActivity = getTrackActivity();
|
new UpdateGpxCategoryTask(activity, group, color)
|
||||||
if (trackActivity != null) {
|
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||||
new UpdateGpxCategoryTask(trackActivity, group, color)
|
|
||||||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
popup.dismiss();
|
popup.dismiss();
|
||||||
|
@ -151,8 +361,6 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.create();
|
.create();
|
||||||
items.add(changeColorItem);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -163,15 +371,6 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private TrackActivity getTrackActivity() {
|
|
||||||
Activity activity = getActivity();
|
|
||||||
if (activity != null && activity instanceof TrackActivity) {
|
|
||||||
return (TrackActivity) activity;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getCategoryName(@NonNull Context ctx, String category) {
|
private static String getCategoryName(@NonNull Context ctx, String category) {
|
||||||
return Algorithms.isEmpty(category) ? ctx.getString(R.string.shared_string_waypoints) : category;
|
return Algorithms.isEmpty(category) ? ctx.getString(R.string.shared_string_waypoints) : category;
|
||||||
}
|
}
|
||||||
|
@ -181,24 +380,38 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
if (color == 0) {
|
if (color == 0) {
|
||||||
colorImageView.setImageDrawable(getContentIcon(R.drawable.ic_action_circle));
|
colorImageView.setImageDrawable(getContentIcon(R.drawable.ic_action_circle));
|
||||||
} else {
|
} else {
|
||||||
colorImageView.setImageDrawable(getMyApplication().getUIUtilities().getPaintedIcon(R.drawable.ic_action_circle, color));
|
colorImageView.setImageDrawable(app.getUIUtilities().getPaintedIcon(R.drawable.ic_action_circle, color));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showInstance(FragmentManager fragmentManager, GpxDisplayGroup group) {
|
public static void showInstance(FragmentManager fragmentManager, GpxDisplayGroup group, Fragment target) {
|
||||||
EditTrackGroupDialogFragment f = (EditTrackGroupDialogFragment) fragmentManager
|
if (!fragmentManager.isStateSaved() && fragmentManager.findFragmentByTag(TAG) == null) {
|
||||||
.findFragmentByTag(EditTrackGroupDialogFragment.TAG);
|
EditTrackGroupDialogFragment fragment = new EditTrackGroupDialogFragment();
|
||||||
if (f == null ) {
|
fragment.group = group;
|
||||||
f = new EditTrackGroupDialogFragment();
|
fragment.setRetainInstance(true);
|
||||||
f.group = group;
|
fragment.setTargetFragment(target, 0);
|
||||||
f.show(fragmentManager, EditTrackGroupDialogFragment.TAG);
|
fragment.show(fragmentManager, TAG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPointsDeletionStarted() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPointsDeleted() {
|
||||||
|
Fragment fragment = getTargetFragment();
|
||||||
|
if (fragment instanceof TrackMenuFragment) {
|
||||||
|
((TrackMenuFragment) fragment).updateContent();
|
||||||
|
}
|
||||||
|
dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
private static class UpdateGpxCategoryTask extends AsyncTask<Void, Void, Void> {
|
private static class UpdateGpxCategoryTask extends AsyncTask<Void, Void, Void> {
|
||||||
|
|
||||||
private OsmandApplication app;
|
private OsmandApplication app;
|
||||||
private WeakReference<TrackActivity> activityRef;
|
private WeakReference<FragmentActivity> activityRef;
|
||||||
|
|
||||||
private GpxDisplayGroup group;
|
private GpxDisplayGroup group;
|
||||||
|
|
||||||
|
@ -208,20 +421,20 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
private ProgressDialog progressDialog;
|
private ProgressDialog progressDialog;
|
||||||
private boolean wasUpdated = false;
|
private boolean wasUpdated = false;
|
||||||
|
|
||||||
private UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group) {
|
private UpdateGpxCategoryTask(@NonNull FragmentActivity activity, @NonNull GpxDisplayGroup group) {
|
||||||
this.app = (OsmandApplication) activity.getApplication();
|
this.app = (OsmandApplication) activity.getApplication();
|
||||||
activityRef = new WeakReference<>(activity);
|
activityRef = new WeakReference<>(activity);
|
||||||
|
|
||||||
this.group = group;
|
this.group = group;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group,
|
UpdateGpxCategoryTask(@NonNull FragmentActivity activity, @NonNull GpxDisplayGroup group,
|
||||||
@NonNull String newCategory) {
|
@NonNull String newCategory) {
|
||||||
this(activity, group);
|
this(activity, group);
|
||||||
this.newCategory = newCategory;
|
this.newCategory = newCategory;
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateGpxCategoryTask(@NonNull TrackActivity activity, @NonNull GpxDisplayGroup group,
|
UpdateGpxCategoryTask(@NonNull FragmentActivity activity, @NonNull GpxDisplayGroup group,
|
||||||
@NonNull Integer newColor) {
|
@NonNull Integer newColor) {
|
||||||
this(activity, group);
|
this(activity, group);
|
||||||
this.newColor = newColor;
|
this.newColor = newColor;
|
||||||
|
@ -229,7 +442,7 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPreExecute() {
|
protected void onPreExecute() {
|
||||||
TrackActivity activity = activityRef.get();
|
FragmentActivity activity = activityRef.get();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
progressDialog = new ProgressDialog(activity);
|
progressDialog = new ProgressDialog(activity);
|
||||||
progressDialog.setTitle(EditTrackGroupDialogFragment.getCategoryName(app, group.getName()));
|
progressDialog.setTitle(EditTrackGroupDialogFragment.getCategoryName(app, group.getName()));
|
||||||
|
@ -293,9 +506,15 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
|
||||||
progressDialog.dismiss();
|
progressDialog.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackActivity activity = activityRef.get();
|
FragmentActivity activity = activityRef.get();
|
||||||
if (activity != null) {
|
if (activity instanceof TrackActivity) {
|
||||||
activity.loadGpx();
|
((TrackActivity) activity).loadGpx();
|
||||||
|
} else if (activity instanceof MapActivity) {
|
||||||
|
MapActivity mapActivity = (MapActivity) activity;
|
||||||
|
TrackMenuFragment fragment = mapActivity.getTrackMenuFragment();
|
||||||
|
if (fragment != null) {
|
||||||
|
fragment.updateContent();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ import net.osmand.plus.UiUtilities;
|
||||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper;
|
import net.osmand.plus.helpers.GpxUiHelper;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType;
|
||||||
|
import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.LineGraphType;
|
import net.osmand.plus.helpers.GpxUiHelper.LineGraphType;
|
||||||
import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
|
import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet;
|
||||||
import net.osmand.plus.track.TrackDisplayHelper;
|
import net.osmand.plus.track.TrackDisplayHelper;
|
||||||
|
@ -308,17 +309,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_SPEED);
|
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_SPEED);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (gpxFile.showCurrentTrack) {
|
TextView overflowMenu = view.findViewById(R.id.overflow_menu);
|
||||||
view.findViewById(R.id.split_interval).setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
view.findViewById(R.id.split_interval).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
openSplitIntervalScreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
ImageView overflowMenu = view.findViewById(R.id.overflow_menu);
|
|
||||||
if (!gpxItem.group.getTrack().generalTrack) {
|
if (!gpxItem.group.getTrack().generalTrack) {
|
||||||
setupOptionsPopupMenu(overflowMenu, false);
|
setupOptionsPopupMenu(overflowMenu, false);
|
||||||
} else {
|
} else {
|
||||||
|
@ -326,13 +317,12 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupOptionsPopupMenu(ImageView overflowMenu, final boolean confirmDeletion) {
|
private void setupOptionsPopupMenu(TextView overflowMenu, final boolean confirmDeletion) {
|
||||||
overflowMenu.setImageDrawable(iconsCache.getThemedIcon(R.drawable.ic_overflow_menu_white));
|
|
||||||
overflowMenu.setVisibility(View.VISIBLE);
|
overflowMenu.setVisibility(View.VISIBLE);
|
||||||
overflowMenu.setOnClickListener(new View.OnClickListener() {
|
overflowMenu.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
actionsListener.showOptionsPopupMenu(view, getTrkSegment(), confirmDeletion);
|
actionsListener.showOptionsPopupMenu(view, getTrkSegment(), confirmDeletion, gpxItem);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -392,17 +382,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_ALTITUDE);
|
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_ALTITUDE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (gpxFile.showCurrentTrack) {
|
TextView overflowMenu = view.findViewById(R.id.overflow_menu);
|
||||||
view.findViewById(R.id.split_interval).setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
view.findViewById(R.id.split_interval).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
openSplitIntervalScreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
ImageView overflowMenu = view.findViewById(R.id.overflow_menu);
|
|
||||||
if (!gpxItem.group.getTrack().generalTrack) {
|
if (!gpxItem.group.getTrack().generalTrack) {
|
||||||
setupOptionsPopupMenu(overflowMenu, false);
|
setupOptionsPopupMenu(overflowMenu, false);
|
||||||
} else {
|
} else {
|
||||||
|
@ -469,17 +449,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_GENERAL);
|
openAnalyzeOnMap(GPXTabItemType.GPX_TAB_ITEM_GENERAL);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (gpxFile.showCurrentTrack) {
|
TextView overflowMenu = view.findViewById(R.id.overflow_menu);
|
||||||
view.findViewById(R.id.split_interval).setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
view.findViewById(R.id.split_interval).setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
openSplitIntervalScreen();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
ImageView overflowMenu = view.findViewById(R.id.overflow_menu);
|
|
||||||
if (!gpxItem.group.getTrack().generalTrack) {
|
if (!gpxItem.group.getTrack().generalTrack) {
|
||||||
setupOptionsPopupMenu(overflowMenu, true);
|
setupOptionsPopupMenu(overflowMenu, true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -724,8 +694,50 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid
|
||||||
}
|
}
|
||||||
|
|
||||||
void openAnalyzeOnMap(GPXTabItemType tabType) {
|
void openAnalyzeOnMap(GPXTabItemType tabType) {
|
||||||
List<ILineDataSet> ds = getDataSets(null, tabType, null, null);
|
List<ILineDataSet> dataSets = getDataSets(null, tabType, null, null);
|
||||||
actionsListener.openAnalyzeOnMap(gpxItem, ds, tabType);
|
prepareGpxItemChartTypes(gpxItem, dataSets);
|
||||||
|
actionsListener.openAnalyzeOnMap(gpxItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void prepareGpxItemChartTypes(GpxDisplayItem gpxItem, List<ILineDataSet> dataSets) {
|
||||||
|
WptPt wpt = null;
|
||||||
|
gpxItem.chartTypes = null;
|
||||||
|
if (dataSets != null && dataSets.size() > 0) {
|
||||||
|
gpxItem.chartTypes = new GPXDataSetType[dataSets.size()];
|
||||||
|
for (int i = 0; i < dataSets.size(); i++) {
|
||||||
|
OrderedLineDataSet orderedDataSet = (OrderedLineDataSet) dataSets.get(i);
|
||||||
|
gpxItem.chartTypes[i] = orderedDataSet.getDataSetType();
|
||||||
|
}
|
||||||
|
if (gpxItem.chartHighlightPos != -1) {
|
||||||
|
TrkSegment segment = null;
|
||||||
|
for (Track t : gpxItem.group.getGpx().tracks) {
|
||||||
|
for (TrkSegment s : t.segments) {
|
||||||
|
if (s.points.size() > 0 && s.points.get(0).equals(gpxItem.analysis.locationStart)) {
|
||||||
|
segment = s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (segment != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (segment != null) {
|
||||||
|
OrderedLineDataSet dataSet = (OrderedLineDataSet) dataSets.get(0);
|
||||||
|
float distance = gpxItem.chartHighlightPos * dataSet.getDivX();
|
||||||
|
for (WptPt p : segment.points) {
|
||||||
|
if (p.distance >= distance) {
|
||||||
|
wpt = p;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (wpt != null) {
|
||||||
|
gpxItem.locationOnMap = wpt;
|
||||||
|
} else {
|
||||||
|
gpxItem.locationOnMap = gpxItem.locationStart;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openSplitIntervalScreen() {
|
private void openSplitIntervalScreen() {
|
||||||
|
|
|
@ -2,13 +2,9 @@ package net.osmand.plus.myplaces;
|
||||||
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
|
|
||||||
|
|
||||||
import net.osmand.GPXUtilities.TrkSegment;
|
import net.osmand.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface SegmentActionsListener {
|
public interface SegmentActionsListener {
|
||||||
|
|
||||||
void updateContent();
|
void updateContent();
|
||||||
|
@ -21,7 +17,7 @@ public interface SegmentActionsListener {
|
||||||
|
|
||||||
void openSplitInterval(GpxDisplayItem gpxItem, TrkSegment trkSegment);
|
void openSplitInterval(GpxDisplayItem gpxItem, TrkSegment trkSegment);
|
||||||
|
|
||||||
void showOptionsPopupMenu(View view, TrkSegment trkSegment, boolean confirmDeletion);
|
void showOptionsPopupMenu(View view, TrkSegment trkSegment, boolean confirmDeletion, GpxDisplayItem gpxItem);
|
||||||
|
|
||||||
void openAnalyzeOnMap(GpxDisplayItem gpxItem, List<ILineDataSet> dataSets, GPXTabItemType tabType);
|
void openAnalyzeOnMap(GpxDisplayItem gpxItem);
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue