From ee09ccf41b0b7b926d86c4e3c945f79a6acc5099 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Fri, 27 Feb 2015 20:30:24 +0100 Subject: [PATCH 01/16] Upgrade eclipse to 1.7 --- OsmAnd/.settings/org.eclipse.jdt.core.prefs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/OsmAnd/.settings/org.eclipse.jdt.core.prefs b/OsmAnd/.settings/org.eclipse.jdt.core.prefs index 8000cd6ca6..d17b6724d1 100755 --- a/OsmAnd/.settings/org.eclipse.jdt.core.prefs +++ b/OsmAnd/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,12 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.7 From eb974df666eb65f82fe618b496c2ef0013d1b81b Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sat, 28 Feb 2015 11:57:59 +0200 Subject: [PATCH 02/16] Update audio/video notes --- .../plus/audionotes/AudioVideoNotesPlugin.java | 18 +++++++++++------- .../osmand/plus/audionotes/NotesFragment.java | 12 +----------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java index 2d4310aaee..1d8094f289 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java @@ -178,12 +178,16 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { } public boolean setName(String name) { - int index = file.getAbsolutePath().lastIndexOf("/") + 1; - if (index < 0) { - return false; + File directory = file.getParentFile(); + String fileName = getFileName(); + final String hashAndExtension; + int hashInd = fileName.lastIndexOf('_'); + if (hashInd == -1) { + hashAndExtension = "_" + fileName; + } else { + hashAndExtension = fileName.substring(hashInd, fileName.length()); } - File directory = new File(file.getAbsolutePath().substring(0, index)); - File to = new File(directory, name.trim()); + File to = new File(directory, name+hashAndExtension); if (file.renameTo(to)) { file = to; return true; @@ -198,9 +202,9 @@ public class AudioVideoNotesPlugin extends OsmandPlugin { public String getName(Context ctx) { String fileName = file.getName(); - int hashInd = fileName.lastIndexOf("_"); + int hashInd = fileName.lastIndexOf('_'); if (hashInd != -1) { - return fileName.substring(0, hashInd - 1); + return fileName.substring(0, hashInd); } else if (this.isAudio()) { return ctx.getResources().getString(R.string.audio); } else if (this.isVideo()) { diff --git a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java index 8428aa4118..3ce25950f2 100644 --- a/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java +++ b/OsmAnd/src/net/osmand/plus/audionotes/NotesFragment.java @@ -213,16 +213,6 @@ public class NotesFragment extends ListFragment { getListView(), false); final EditText editText = (EditText) v.findViewById(R.id.name); builder.setView(v); - - String fileName = recording.getFileName(); - final String hash; - int hashInd = fileName.lastIndexOf("_"); - if (hashInd == -1) { - hash = "_" + fileName; - } else { - hash = fileName.substring(hashInd, fileName.length()); - } - editText.setText(recording.getName(getActivity())); InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); @@ -230,7 +220,7 @@ public class NotesFragment extends ListFragment { builder.setPositiveButton(R.string.default_buttons_apply, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - if(!recording.setName(editText.getText().toString() + hash)) { + if(!recording.setName(editText.getText().toString())) { Toast.makeText(getActivity(),R.string.rename_failed,Toast.LENGTH_SHORT).show(); } recording.setDescription(); From c3f18229bc970804f8c3c87978e5ef055f9ca9ea Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sat, 28 Feb 2015 11:58:20 +0200 Subject: [PATCH 03/16] Upgrade eclipse to 1.7 --- OsmAnd-java/src/net/osmand/binary/BinaryInspector.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java index 68bedfddfd..583a182730 100644 --- a/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java +++ b/OsmAnd-java/src/net/osmand/binary/BinaryInspector.java @@ -67,7 +67,7 @@ public class BinaryInspector { // "-vstreets", "-vbuildings", "-vintersections", // "-zoom=16", // "-bbox=1.74,51.17,1.75,51.16", -// "/home/victor/projects/osmand/osm-gen/Map.obf" +// "/Users/victorshcherb/osmand/osm-gen/World_seamarks_2.obf" }); } else { in.inspector(args); From 3c1c59fbe49a32ed51580b46531e2c3cdab9f0a8 Mon Sep 17 00:00:00 2001 From: Roberto GEB Date: Sat, 28 Feb 2015 00:46:22 +0100 Subject: [PATCH 04/16] Translated using Weblate (Spanish) Currently translated at 100.0% (1658 of 1658 strings) --- OsmAnd/res/values-es/strings.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 3e2eecfc6a..6fc74568b9 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -1117,8 +1117,7 @@ "Error durante la grabación" La cámara no está disponible Reproduciendo audio de la grabación especificada.\n%1$s - "Cambios en versión 1.1.0 :\n\t* Extra de cálculo de distancia\n\t* Extra de notas de audio\n\t* Extra de curvas de nivel\n\t* Corrección de errores\n\t* Opción de estilo de mapas \'Vista de tour\' con más detalles de mapa, nuevos estilos de carreteras, más contraste y opción para travesías alpinas (escala SAC)\n\t* Correción de desplazamiento del geoide EGM96 para lecturas GPS de altitud" - + "Cambios en versión 1.1.0 :\n\t* Extra de cálculo de distancia\n\t* Extra de notas de audio\n\t* Extra de curvas de nivel\n\t* Corrección de errores\n\t* Opción de estilo de mapas \'Vista de turismo\' con más detalles de mapa, nuevos estilos de carreteras, más contraste y opción para travesías alpinas (escala SAC)\n\t* Correción de desplazamiento del geoide EGM96 para lecturas GPS de altitud " Grabado %1$s %3$s %2$s Considere la compra del extra de curvas de nivel en la Tienda para apoyar desarrollos adicionales. Extra curvas de nivel @@ -1944,7 +1943,7 @@ Esta vista se puede revertir desactivándola de nuevo aquí, o cambiando el \'Estilo de mapa\' bajo \'Configurar mapa\' al valor deseado. Activando esta vista cambia el estilo de mapa a \'Vista de Touring\', que es una vista de alto detalle especial para los viajeros y conductores profesionales. - Esta vista proporciona, en cualquier nivel de zoom del mapa, la máxima cantidad de detalles de viaje disponible en los datos del mapa (especialmente carreteras, pistas, senderos y marcas de orientación). También representa claramente todos los tipos de carreteras sin ambigüedades por códigos de color, que es útil cuando por ejemplo conduciendo vehículos grandes. + Esta vista proporciona, en cualquier nivel de zoom del mapa, la máxima cantidad de detalles de viaje disponible en los datos del mapa (especialmente carreteras, pistas, senderos y marcas de orientación). También representa claramente todos los tipos de carreteras sin ambigüedades por códigos de color, que es útil, por ejemplo, cuando se conducen vehículos grandes. días atrás No es necesario descargar un mapa especial, la vista se crea a partir de nuestros mapas estándar. Esta vista puede ser revertida desactivandola de nuevo aquí, o cambiando el \'Estilo de mapa\' desde \'Configurar mapa\'. @@ -1952,7 +1951,7 @@ Ver Vista de mapa Touring - Apagar todo + Apagar_todo Mostrado en el mapa Falló el renombrado. Actualmente registrando traza From 01d3c9c01ec4b37327aa61808809ba0ea8fd2e4e Mon Sep 17 00:00:00 2001 From: Viktar Palstsiuk Date: Fri, 27 Feb 2015 19:47:42 +0100 Subject: [PATCH 05/16] Translated using Weblate (Belarusian) Currently translated at 100.0% (641 of 641 strings) --- OsmAnd/res/values-be/phrases.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-be/phrases.xml b/OsmAnd/res/values-be/phrases.xml index 6e8d2b579d..99bbf05270 100644 --- a/OsmAnd/res/values-be/phrases.xml +++ b/OsmAnd/res/values-be/phrases.xml @@ -139,14 +139,14 @@ Прыпынак грамадзкага транспарту Прыпынак аўтобусу Прыпынак тралейбусу - Прыпынак аўтобусу (састар.) + Аўтобусны прыпынак Прыпынак трамваю Чайная крама - Прыпынак трамваю (састар.) + Трамвайны прыпынак Станцыя грамадзкага транспарту - Аўтобусная станцыя (састар.) - Чыгуначная станцыя (састар.) - Чыгуначная плятформа (састар.) + Аўтобусная станцыя + Чыгуначная станцыя + Чыгуначная плятформа Чыгуначная плятформа (састар.) Уваход у мэтро Станцыя мэтро @@ -673,7 +673,7 @@ Аўтазапчасткі Месца прыпынку грамадзкага транспарту - Чыгуначны прыпынак (састарэла) + Чыгуначны прыпынак Доступ у Інтэрнэт: WLAN Доступ у Інтэрнэт: тэрмінал Доступ у Інтэрнэт: дротавы From a68fe5526bb26d1e5527b4ef1360361011565cfa Mon Sep 17 00:00:00 2001 From: jan madsen Date: Fri, 27 Feb 2015 18:00:06 +0100 Subject: [PATCH 06/16] Translated using Weblate (Danish) Currently translated at 100.0% (641 of 641 strings) --- OsmAnd/res/values-da/phrases.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-da/phrases.xml b/OsmAnd/res/values-da/phrases.xml index 320d380c53..dc35b3311f 100644 --- a/OsmAnd/res/values-da/phrases.xml +++ b/OsmAnd/res/values-da/phrases.xml @@ -136,13 +136,13 @@ Offentlig transport stoppested Busstoppested Trolleybus stoppested - Busstoppested (forældet) + Busstoppested Sporvognsstoppested - Sporvognsstoppestedet (forældet) + Sporvognsstoppestedet Offentligtransport station - Busstation (forældet) - Banegård (forældet) - Perron (forældet) + Busstation + Banegård + Perron Trinbrædt (forældet) Metroindgang Metrostation @@ -690,7 +690,7 @@ Gårdbutik Bildele Offentlig transport stoppested - Jernbane stop (forældet) + Jernbane stop Logi Internetadgang: wlan Internetadgang: terminal From 1cec4435cfb13b4b0d8547ce1c3a88efc311bc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=20=EC=A1=B0?= Date: Sat, 28 Feb 2015 02:12:04 +0100 Subject: [PATCH 07/16] Translated using Weblate (Korean) Currently translated at 100.0% (641 of 641 strings) --- OsmAnd/res/values-ko/phrases.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/OsmAnd/res/values-ko/phrases.xml b/OsmAnd/res/values-ko/phrases.xml index 9446e532b7..c3b309692e 100644 --- a/OsmAnd/res/values-ko/phrases.xml +++ b/OsmAnd/res/values-ko/phrases.xml @@ -134,13 +134,13 @@ 대중 교통 정류장 버스 정류장 무궤도 전차 정류장 - 버스 정류장 (사용 되지 않음) + 버스 정류장 트램 정류장 - 트램 정류장 (사용 되지 않음) + 트램 정류장 대중 교통 스테이션 - 버스 정류장 (사용 되지 않음) - 기차역 (사용 되지 않음) - 철도 플랫폼 (사용 되지 않음) + 버스 정류장 + 기차역 + 철도 플랫폼 철도 정류장 (사용 되지 않음) 지하철 입구 지하철 역 @@ -673,7 +673,7 @@ 자동차 가게 자동차 부품 대중 교통 정류장 위치 - 철도 정거장 (사용 되지 않음) + 철도 정거장 철도 버퍼 정거장 숙박 인터넷 접속: 무선랜 From 701d0e2dbed2656cf65e075eb9fcc3763784f777 Mon Sep 17 00:00:00 2001 From: Lu Ca Date: Sat, 28 Feb 2015 01:08:30 +0100 Subject: [PATCH 08/16] Translated using Weblate (Sardinian) Currently translated at 91.2% (585 of 641 strings) --- OsmAnd/res/values-sc/phrases.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml index 272067ee61..e4e039de8e 100644 --- a/OsmAnd/res/values-sc/phrases.xml +++ b/OsmAnd/res/values-sc/phrases.xml @@ -113,13 +113,13 @@ Firmada trasportu pùblicu Firmada àutobus Firmada filobus - Firmada àutobus (disusadu) + Firmada àutobus Firmada tram - Firmada tram (disusada) + Firmada tram Istatzione trasportu pùblicu - Istatzione bus (disusadu) + Istatzione bus Istatzione de sos trenos - Piattaredda ferroviària (disusasu) + Piattaredda ferroviària Firmada de sos trenos (disusada) Intrada de sa metropolitana Istatzione de sa metropolitana @@ -624,6 +624,6 @@ Cuntzessionàriu de màchinas Cantos de màchinas Firmada de su trasportu pùblicu - Firmada de sa ferrovia (obsoleta) + Firmada de sa ferrovia Denegante pro sos trenos From 59b1369417aa6db35d16658bd99a970d571928e2 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sat, 28 Feb 2015 12:01:06 +0200 Subject: [PATCH 09/16] Remove external plugin --- OsmAnd/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 320ad49e58..98e4ba2a5c 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -822,7 +822,7 @@ parts Contour lines External plugin (separate download) facilitating to download offline contour lines and hillshades (\'Settings\' → \'Manage map files\' → \'Download\' → Select desired map type). These be can be displayed in combination with the OsmAnd offline maps. - Contour Lines (external plugin) + Contour Lines Other maps Roads only Contour lines @@ -1216,7 +1216,7 @@ Afghanistan, Albania, Algeria, Andorra, Angola, Anguilla, Antigua and Barbuda, A AM Parking point External plugin (separate download) allowing to memorize the location of your parked car. - Parking Position (external plugin) + Parking Position Mark as a parking position Delete a parking marker Public From d2b77b37268fc0038a9a1ec3bc8ba37aad8508b6 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Sat, 28 Feb 2015 12:15:13 +0200 Subject: [PATCH 10/16] Fix date --- .../net/osmand/plus/helpers/GpxUiHelper.java | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java index becab0ced1..928d2bc08d 100644 --- a/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java +++ b/OsmAnd/src/net/osmand/plus/helpers/GpxUiHelper.java @@ -4,7 +4,9 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import net.osmand.CallbackWithObject; import net.osmand.IndexConstants; @@ -356,10 +358,33 @@ public class GpxUiHelper { } return dlg; } + + public static List getSortedGPXFilenamesByDate(File dir) { + final Map mp = new HashMap(); + readGpxDirectory(dir, mp, ""); + ArrayList list = new ArrayList(mp.keySet()); + Collections.sort(list, new Comparator() { + @Override + public int compare(String object1, String object2) { + Long l1 = mp.get(object1); + Long l2 = mp.get(object2); + if(l2 == null) { + l2 = 0l; + } + if(l1== null) { + l1 = 0l; + } + return l1 < l2 ? 1 : (l1 == l2 ? 0 : -1); + } + }); + return list; + } + - private static List getSortedGPXFilenames(File dir,String sub) { - final List list = new ArrayList(); - readGpxDirectory(dir, list, ""); + public static List getSortedGPXFilenames(File dir) { + final Map mp = new HashMap(); + readGpxDirectory(dir, mp, ""); + ArrayList list = new ArrayList(mp.keySet()); Collections.sort(list, new Comparator() { @Override public int compare(String object1, String object2) { @@ -375,23 +400,20 @@ public class GpxUiHelper { return list; } - private static void readGpxDirectory(File dir, final List list, String parent) { + private static void readGpxDirectory(File dir, final Map map, String parent) { if (dir != null && dir.canRead()) { File[] files = dir.listFiles(); if (files != null) { for (File f : files) { if (f.getName().toLowerCase().endsWith(".gpx")) { //$NON-NLS-1$ - list.add(parent + f.getName()); + map.put(parent + f.getName(), f.lastModified()); } else if (f.isDirectory()) { - readGpxDirectory(f, list, parent + f.getName() + "/"); + readGpxDirectory(f, map, parent + f.getName() + "/"); } } } } } - public static List getSortedGPXFilenames(File dir) { - return getSortedGPXFilenames(dir, null); - } private static void loadGPXFileInDifferentThread(final Activity activity, final CallbackWithObject callbackWithObject, final File dir, final GPXFile currentFile, final String... filename) { From 479fdb233140e60f0ed25f5021d63c5315a4a183 Mon Sep 17 00:00:00 2001 From: Bars107 Date: Sat, 28 Feb 2015 15:27:31 +0200 Subject: [PATCH 11/16] All tracks updated on dashboard and my places --- OsmAnd/res/layout/available_gpx.xml | 1 + OsmAnd/res/layout/dash_gpx_track_item.xml | 66 +++- OsmAnd/res/layout/local_index_list_item.xml | 2 +- OsmAnd/res/layout/tab_content.xml | 2 +- OsmAnd/res/values/sizes.xml | 2 + OsmAnd/src/net/osmand/plus/GPXUtilities.java | 13 - .../net/osmand/plus/GpxSelectionHelper.java | 6 + .../plus/activities/AvailableGPXFragment.java | 359 ++++++------------ .../activities/OsmandActionBarActivity.java | 2 +- .../plus/activities/SettingsActivity.java | 2 +- .../search/SearchAddressFragment.java | 2 +- .../search/SearchAddressOnlineFragment.java | 2 +- .../plus/download/LocalIndexesFragment.java | 2 +- .../plus/monitoring/DashTrackFragment.java | 74 ++-- 14 files changed, 237 insertions(+), 298 deletions(-) diff --git a/OsmAnd/res/layout/available_gpx.xml b/OsmAnd/res/layout/available_gpx.xml index d4da1a36b1..34e37a60d5 100644 --- a/OsmAnd/res/layout/available_gpx.xml +++ b/OsmAnd/res/layout/available_gpx.xml @@ -34,6 +34,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/card_bg" + android:visibility="gone" android:orientation="vertical"> + + + + + + @@ -70,37 +96,73 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" + android:layout_marginRight="@dimen/gpx_small_icon_margin" android:src="@drawable/ic_small_time"/> + + + + + + + + + + + diff --git a/OsmAnd/res/layout/local_index_list_item.xml b/OsmAnd/res/layout/local_index_list_item.xml index 3627ec48ce..e0a25ce503 100644 --- a/OsmAnd/res/layout/local_index_list_item.xml +++ b/OsmAnd/res/layout/local_index_list_item.xml @@ -19,7 +19,7 @@ + android:layout_height="wrap_content"/> \ No newline at end of file diff --git a/OsmAnd/res/values/sizes.xml b/OsmAnd/res/values/sizes.xml index 1e93535ccf..a613afb73a 100644 --- a/OsmAnd/res/values/sizes.xml +++ b/OsmAnd/res/values/sizes.xml @@ -40,6 +40,8 @@ 16dp 34dp 24dp + 3dp + 14dp 14sp diff --git a/OsmAnd/src/net/osmand/plus/GPXUtilities.java b/OsmAnd/src/net/osmand/plus/GPXUtilities.java index 14f79a5db6..c1a707fbf0 100644 --- a/OsmAnd/src/net/osmand/plus/GPXUtilities.java +++ b/OsmAnd/src/net/osmand/plus/GPXUtilities.java @@ -207,19 +207,6 @@ public class GPXUtilities { return maxElevation != -100; } - public int getTimeHours(long time) { - return (int) ((time / 1000) / 3600); - } - - - public int getTimeSeconds(long time) { - return (int) ((time / 1000) % 60); - } - - public int getTimeMinutes(long time) { - return (int) (((time / 1000) / 60) % 60); - } - public boolean isSpeedSpecified() { return avgSpeed > 0; } diff --git a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java index a47330032a..2047403036 100644 --- a/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java +++ b/OsmAnd/src/net/osmand/plus/GpxSelectionHelper.java @@ -401,6 +401,7 @@ public class GpxSelectionHelper { private boolean showCurrentTrack; private GPXFile gpxFile; private int color; + private GPXTrackAnalysis trackAnalysis; private List> processedPointsToDisplay = new ArrayList>(); private List displayGroups = null; private boolean routePoints; @@ -410,9 +411,14 @@ public class GpxSelectionHelper { if(gpxFile.tracks.size() > 0) { this.color = gpxFile.tracks.get(0).getColor(0); } + trackAnalysis = gpxFile.getAnalysis(new File(gpxFile.path).lastModified()); processPoints(); } + public GPXTrackAnalysis getTrackAnalysis() { + return trackAnalysis; + } + public void processPoints() { this.processedPointsToDisplay = gpxFile.proccessPoints(); if(this.processedPointsToDisplay.isEmpty()) { diff --git a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java index 5b48c9b1c4..99106a41d1 100644 --- a/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/AvailableGPXFragment.java @@ -2,9 +2,11 @@ package net.osmand.plus.activities; import java.io.File; import java.text.Collator; +import java.text.DateFormat; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -20,6 +22,7 @@ import net.osmand.plus.GPXUtilities; import net.osmand.plus.GPXUtilities.GPXFile; import net.osmand.plus.GPXUtilities.WptPt; import net.osmand.plus.GpxSelectionHelper; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; @@ -84,14 +87,15 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { private ActionMode actionMode; private LoadGpxTask asyncLoader; private GpxIndexesAdapter allGpxAdapter; - private ShowedOnMapAdapter showOnMapGpxAdapter; - MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US); + private static MessageFormat formatMb = new MessageFormat("{0, number,##.#} MB", Locale.US); private LoadLocalIndexDescriptionTask descriptionLoader; private ContextMenuAdapter optionsMenuAdapter; private AsyncTask operationTask; private GpxSelectionHelper selectedGpxHelper; private SavingTrackHelper savingTrackHelper; private OsmandApplication app; + private Drawable gpxNormal; + private Drawable gpxOnMap; @Override @@ -122,17 +126,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { updateCurrentTrack(getView()); } - private void createShowedOnMapsView(View v) { - ListView onMap = (ListView) v.findViewById(R.id.gpx_on_map); - showOnMapGpxAdapter = new ShowedOnMapAdapter(getActivity(), R.layout.dash_gpx_track_item); - onMap.setAdapter(showOnMapGpxAdapter); - v.findViewById(R.id.turn_off_all).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - showOnMapGpxAdapter.notifyDataSetChanged(); - } - }); - } @Override public void onPause() { @@ -142,20 +135,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { } } - private void setShowedOnMapVisibility(boolean visibility) { - View v = getView(); - if (v == null) { - return; - } - //temporary hiding this view - v.findViewById(R.id.show_on_map).setVisibility(View.GONE); -/* if (visibility) { - v.findViewById(R.id.on_map_layout).setVisibility(View.VISIBLE); - } else { - v.findViewById(R.id.on_map_layout).setVisibility(View.GONE); - }*/ - } - private void updateCurrentTrack(View v) { if (v == null) { return; @@ -195,8 +174,13 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { MapActivity.launchMapActivityMoveToTop(getActivity()); } }); + gpxNormal = getResources().getDrawable(R.drawable.ic_gpx_track).mutate(); + gpxOnMap = getResources().getDrawable(R.drawable.ic_gpx_track).mutate(); + gpxOnMap.setColorFilter(getResources().getColor(R.color.color_distance), PorterDuff.Mode.MULTIPLY); + if (getMyApplication().getSettings().isLightContent()) { + gpxNormal.setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); + } - createShowedOnMapsView(v); return v; } @@ -205,7 +189,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { icon.mutate(); boolean light = app.getSettings().isLightContent(); if (light) { - icon.setColorFilter(0xff727272, PorterDuff.Mode.MULTIPLY); + icon.setColorFilter(app.getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); } ImageButton stop = ((ImageButton) v.findViewById(R.id.stop)); stop.setImageDrawable(icon); @@ -227,7 +211,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { icon = app.getResources().getDrawable(R.drawable.ic_action_gsave_dark); icon.mutate(); if (light) { - icon.setColorFilter(0xff727272, PorterDuff.Mode.MULTIPLY); + icon.setColorFilter(app.getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); } ImageButton save = ((ImageButton) v.findViewById(R.id.show_on_map)); save.setOnClickListener(new View.OnClickListener() { @@ -442,7 +426,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { @Override public void onDestroyActionMode(ActionMode mode) { enableSelectionMode(false); - getView().findViewById(R.id.memory_size).setVisibility(View.GONE); runSelection(false); allGpxAdapter.notifyDataSetChanged(); } @@ -504,16 +487,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { @Override public void onDestroyActionMode(ActionMode mode) { enableSelectionMode(false); - getView().findViewById(R.id.memory_size).setVisibility(View.GONE); allGpxAdapter.notifyDataSetChanged(); } }); - - if (R.string.local_index_mi_upload_gpx == actionResId) { - ((TextView) getView().findViewById(R.id.memory_size)).setText(R.string.local_index_upload_gpx_description); - ((TextView) getView().findViewById(R.id.memory_size)).setVisibility(View.VISIBLE); - } allGpxAdapter.notifyDataSetChanged(); } @@ -552,68 +529,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { } } - private void basicFileOperation(final GpxInfo info, ContextMenuAdapter adapter) { - OnContextMenuClick listener = new OnContextMenuClick() { - @Override - public boolean onContextMenuClick(ArrayAdapter adapter, int resId, int pos, boolean isChecked) { - if (resId == R.string.local_index_mi_rename) { - renameFile(info); - } else if (resId == R.string.local_index_unselect_gpx_file || - resId == R.string.local_index_select_gpx_file) { - if (info.gpx == null) { - loadGpxAsync(info, resId == R.string.local_index_select_gpx_file); - } else { - getMyApplication().getSelectedGpxHelper().selectGpxFile(info.gpx, resId == R.string.local_index_select_gpx_file, true); - showOnMapGpxAdapter.addGpxInfo(info); - - allGpxAdapter.notifyDataSetChanged(); - selectedGpxHelper.runUiListeners(); - } - } else if (resId == R.string.local_index_mi_delete) { - Builder confirm = new AlertDialog.Builder(getActivity()); - confirm.setPositiveButton(R.string.default_buttons_yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - new DeleteGpxTask().execute(info); - } - }); - confirm.setNegativeButton(R.string.default_buttons_no, null); - confirm.setMessage(getString(R.string.delete_confirmation_msg, info.file.getName())); - confirm.show(); - } else if (resId == R.string.local_index_mi_export) { - final Uri fileUri = Uri.fromFile(info.file); - final Intent sendIntent = new Intent(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_STREAM, fileUri); - sendIntent.setType("application/gpx+xml"); - startActivity(sendIntent); - } else if (resId == R.string.show_gpx_route) { - showGpxOnMap(info); - } - return true; - } - }; - if (info.gpx != null && info.file == null) { - GpxSelectionHelper.SelectedGpxFile selectedGpxFile = selectedGpxHelper.getSelectedCurrentRecordingTrack(); - if (selectedGpxFile != null && selectedGpxFile.getGpxFile() == info.gpx) { - adapter.item(R.string.local_index_unselect_gpx_file).listen(listener).reg(); - } else { - adapter.item(R.string.local_index_select_gpx_file).listen(listener).reg(); - } - } else if (info.file != null) { - if (getMyApplication().getSelectedGpxHelper().getSelectedFileByPath(info.file.getAbsolutePath()) == null) { - adapter.item(R.string.local_index_select_gpx_file).listen(listener).reg(); - } else { - adapter.item(R.string.local_index_unselect_gpx_file).listen(listener).reg(); - } - } - adapter.item(R.string.show_gpx_route).listen(listener).reg(); - if (info.file != null) { - adapter.item(R.string.local_index_mi_rename).listen(listener).reg(); - adapter.item(R.string.local_index_mi_delete).listen(listener).reg(); - adapter.item(R.string.local_index_mi_export).listen(listener).reg(); - } - OsmandPlugin.onContextMenuActivity(getActivity(), this, info, adapter); - } private void showGpxOnMap(GpxInfo info) { info.updateGpxInfo(getMyApplication()); @@ -626,10 +541,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { e = false; getMyApplication().getSelectedGpxHelper().setGpxFileToDisplay(info.gpx); MapActivity.launchMapActivityMoveToTop(getActivity()); - if (showOnMapGpxAdapter.getCount() == 0) { - setShowedOnMapVisibility(true); - } - showOnMapGpxAdapter.addGpxInfo(info); } } if (e) { @@ -660,36 +571,24 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { protected void onPreExecute() { ((ActionBarActivity) getActivity()).setSupportProgressBarIndeterminateVisibility(true); allGpxAdapter.clear(); - if (showOnMapGpxAdapter != null) { - showOnMapGpxAdapter.clear(); - } } @Override protected void onProgressUpdate(GpxInfo... values) { for (GpxInfo v : values) { allGpxAdapter.addLocalIndexInfo(v); - if (selectedGpxHelper.getSelectedFileByName(v.getFileName()) != null) { - showOnMapGpxAdapter.addGpxInfo(v); - } } - showOnMapGpxAdapter.notifyDataSetChanged(); allGpxAdapter.notifyDataSetChanged(); } public void setResult(List result) { this.result = result; allGpxAdapter.clear(); - showOnMapGpxAdapter.clear(); if (result != null) { for (GpxInfo v : result) { allGpxAdapter.addLocalIndexInfo(v); - if (selectedGpxHelper.getSelectedFileByName(v.getFileName()) != null) { - showOnMapGpxAdapter.addGpxInfo(v); - } } allGpxAdapter.notifyDataSetChanged(); - showOnMapGpxAdapter.notifyDataSetChanged(); onPostExecute(result); } } @@ -703,12 +602,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { if (allGpxAdapter.getGroupCount() > 0) { getExpandableListView().expandGroup(0); } - - if (showOnMapGpxAdapter.getCount() > 0) { - setShowedOnMapVisibility(true); - } else { - setShowedOnMapVisibility(false); - } } private File[] listFilesSorted(File dir) { @@ -763,7 +656,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { Map> data = new LinkedHashMap<>(); List category = new ArrayList<>(); int warningColor; - int okColor; int defaultColor; int corruptedColor; private SearchFilter filter; @@ -771,7 +663,6 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { public GpxIndexesAdapter(Context ctx) { warningColor = ctx.getResources().getColor(R.color.color_warning); - okColor = ctx.getResources().getColor(R.color.color_ok); TypedArray ta = ctx.getTheme().obtainStyledAttributes(new int[]{android.R.attr.textColorPrimary}); defaultColor = ta.getColor(0, ctx.getResources().getColor(R.color.color_unknown)); ta.recycle(); @@ -849,42 +740,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { final GpxInfo child = getChild(groupPosition, childPosition); if (v == null) { LayoutInflater inflater = getActivity().getLayoutInflater(); - v = inflater.inflate(net.osmand.plus.R.layout.local_index_list_item, parent, false); - } - TextView viewName = ((TextView) v.findViewById(R.id.local_index_name)); - viewName.setText(child.getName()); - - if (child.isCorrupted()) { - viewName.setTextColor(corruptedColor); - viewName.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); - } else if (selectedGpxHelper.getSelectedFileByName(child.getFileName()) != null) { - viewName.setTextColor(okColor); - viewName.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); - } else { - viewName.setTextColor(defaultColor); - viewName.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); - } - TextView sizeText = (TextView) v.findViewById(R.id.local_index_size); - if (child.getSize() >= 0) { - String size; - if (child.getSize() > 100) { - size = formatMb.format(new Object[]{(float) child.getSize() / (1 << 10)}); - } else { - size = child.getSize() + " kB"; - } - sizeText.setText(size); - } else { - sizeText.setText(""); - } - TextView descr = ((TextView) v.findViewById(R.id.local_index_descr)); - if (child.isExpanded()) { - descr.setVisibility(View.VISIBLE); - descr.setText(child.getHtmlDescription()); - sizeText.setVisibility(View.GONE); - } else { - descr.setVisibility(View.GONE); - sizeText.setVisibility(View.VISIBLE); + v = inflater.inflate(R.layout.dash_gpx_track_item, parent, false); } + udpateGpxInfoView(v, child, app, gpxNormal, gpxOnMap, false); + ImageView icon = (ImageView) v.findViewById(R.id.icon); ImageButton options = (ImageButton) v.findViewById(R.id.options); options.setOnClickListener(new View.OnClickListener() { @Override @@ -892,9 +751,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { openPopUpMenu(v, child); } }); + + final CheckBox checkbox = (CheckBox) v.findViewById(R.id.check_local_index); checkbox.setVisibility(selectionMode ? View.VISIBLE : View.GONE); - ImageView icon = (ImageView) v.findViewById(R.id.icon); if (selectionMode) { checkbox.setChecked(selectedItems.contains(child)); checkbox.setOnClickListener(new View.OnClickListener() { @@ -926,6 +786,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { return v; } + @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = convertView; @@ -1020,8 +881,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { DirectionsDialogs.setupPopUpMenuIcon(optionsMenu); Drawable showIcon = getResources().getDrawable(R.drawable.ic_show_on_map); if (light) { - showIcon.mutate(); - showIcon.setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); + showIcon.mutate().setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); } MenuItem item = optionsMenu.getMenu().add(R.string.show_gpx_route) .setIcon(showIcon); @@ -1042,6 +902,19 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { return true; } }); + item = optionsMenu.getMenu().add(R.string.share_fav) + .setIcon(light ? R.drawable.ic_action_gshare_light : R.drawable.ic_action_gshare_dark); + item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + final Uri fileUri = Uri.fromFile(gpxInfo.file); + final Intent sendIntent = new Intent(Intent.ACTION_SEND); + sendIntent.putExtra(Intent.EXTRA_STREAM, fileUri); + sendIntent.setType("application/gpx+xml"); + startActivity(sendIntent); + return true; + } + }); final OsmEditingPlugin osmEditingPlugin = OsmandPlugin.getEnabledPlugin(OsmEditingPlugin.class); if (osmEditingPlugin != null && osmEditingPlugin.isActive()) { @@ -1271,15 +1144,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { if (results.values != null) { synchronized (allGpxAdapter) { allGpxAdapter.clear(); - showOnMapGpxAdapter.clear(); for (GpxInfo i : ((List) results.values)) { allGpxAdapter.addLocalIndexInfo(i); - if (selectedGpxHelper.getSelectedFileByName(i.getFileName()) != null) { - showOnMapGpxAdapter.addGpxInfo(i); - } } } - showOnMapGpxAdapter.notifyDataSetChanged(); allGpxAdapter.notifyDataSetChanged(); if (constraint != null && constraint.length() > 3) { collapseTrees(10); @@ -1334,6 +1202,7 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { private boolean corrupted; private boolean expanded; private Spanned htmlDescription; + private GPXUtilities.GPXTrackAnalysis analysis; public GpxInfo() { } @@ -1387,6 +1256,10 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { return description; } + public long getFileDate() { + return file.lastModified(); + } + public Spanned getHtmlDescription() { if (htmlDescription != null) { return htmlDescription; @@ -1395,6 +1268,13 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { return htmlDescription; } + public GPXUtilities.GPXTrackAnalysis getAnalysis() { + return analysis; + } + + public void setAnalysis(GPXUtilities.GPXTrackAnalysis analysis) { + this.analysis = analysis; + } public void setGpx(GPXFile gpx) { this.gpx = gpx; @@ -1407,9 +1287,11 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { if (gpx.warning != null) { corrupted = true; description = gpx.warning; + analysis = null; } else { // 'Long-press for options' message - description = GpxUiHelper.getDescription(app, gpx, file, true); + analysis = gpx.getAnalysis(file.lastModified()); + description = GpxUiHelper.getDescription(app, analysis, true); } htmlDescription = null; getHtmlDescription(); @@ -1436,79 +1318,86 @@ public class AvailableGPXFragment extends OsmandExpandableListFragment { getView().findViewById(R.id.gpx_on_map).setLayoutParams(params); } - class ShowedOnMapAdapter extends ArrayAdapter { - public void addGpxInfo(GpxInfo info) { - boolean contains = false; - for (int i = 0; i < getCount(); i++) { - if (getItem(i).equals(info)) { - contains = true; - break; - } - } - if (contains) { - return; - } - - add(info); - notifyDataSetChanged(); - - //if there's too many items, we need to set size of listview - if (getCount() == 4) { - adjustShowOnMapListViewSize(); - } - - } - - public ShowedOnMapAdapter(Context context, int resource) { - super(context, resource); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; - if (v == null) { - LayoutInflater inflater = getActivity().getLayoutInflater(); - v = inflater.inflate(R.layout.dash_gpx_track_item, parent, false); - } - - final GpxInfo gpxInfo = getItem(position); - - TextView viewName = ((TextView) v.findViewById(R.id.name)); - viewName.setText(gpxInfo.getName()); - - v.findViewById(R.id.show_on_map).setVisibility(View.GONE); - v.findViewById(R.id.stop).setVisibility(View.GONE); + public static void udpateGpxInfoView(View v, GpxInfo child, OsmandApplication app, + Drawable gpxNormal, Drawable gpxOnMap, + boolean isDashItem) { + TextView viewName = ((TextView) v.findViewById(R.id.name)); + if(!isDashItem) { v.findViewById(R.id.divider).setVisibility(View.GONE); - if (gpxInfo.gpx != null) { - String description = GpxUiHelper.getDescription(getMyApplication(), gpxInfo.gpx, gpxInfo.file, true); - int startindex = description.indexOf(">"); - int endindex = description.indexOf(""); - String distnace = description.substring(startindex + 1, endindex); - ((TextView) v.findViewById(R.id.distance)). - setText(distnace); + } else { + v.findViewById(R.id.divider).setVisibility(View.VISIBLE); + } - } - final CompoundButton check = (CompoundButton) v.findViewById(R.id.check_item); - check.setVisibility(View.VISIBLE); - if (selectedGpxHelper.getSelectedFileByName(gpxInfo.getFileName()) != null) { - check.setChecked(true); - } else { - check.setChecked(false); - } - check.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (gpxInfo.gpx == null) { - loadGpxAsync(gpxInfo, check.isChecked()); - } else { - selectedGpxHelper.selectGpxFile(gpxInfo.gpx, check.isChecked(), true); - } - allGpxAdapter.notifyDataSetChanged(); + viewName.setText(child.getName()); + GpxSelectionHelper selectedGpxHelper = app.getSelectedGpxHelper(); + + //ImageView icon = (ImageView) v.findViewById(!isDashItem? R.id.icon : R.id.show_on_map); + ImageView icon = (ImageView) v.findViewById(R.id.icon); + icon.setVisibility(View.VISIBLE); + icon.setImageDrawable(gpxNormal); + if (child.isCorrupted()) { + viewName.setTypeface(Typeface.DEFAULT, Typeface.ITALIC); + } else { + viewName.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); + } + if (selectedGpxHelper.getSelectedFileByName(child.getFileName()) != null) { + icon.setImageDrawable(gpxOnMap); + } + boolean sectionRead = child.getAnalysis() == null; + if(sectionRead) { + v.findViewById(R.id.read_section).setVisibility(View.GONE); + v.findViewById(R.id.unknown_section).setVisibility(View.VISIBLE); + String date = ""; + String size = ""; + if (child.getSize() >= 0) { + if (child.getSize() > 100) { + size = formatMb.format(new Object[]{(float) child.getSize() / (1 << 10)}); + } else { + size = child.getSize() + " kB"; } - }); - return v; + } + DateFormat df = app.getResourceManager().getDateFormat(); + long fd = child.getFileDate(); + if(fd > 0) { + date = (df.format(new Date(fd))); + } + TextView sizeText = (TextView) v.findViewById(R.id.date_and_size_details); + sizeText.setText(date + " \u2022 " + size); + + } else { + v.findViewById(R.id.read_section).setVisibility(View.VISIBLE); + v.findViewById(R.id.unknown_section).setVisibility(View.GONE); + TextView time = (TextView) v.findViewById(R.id.time); + TextView distance = (TextView) v.findViewById(R.id.distance); + TextView pointsCount= (TextView) v.findViewById(R.id.points_count); + GPXUtilities.GPXTrackAnalysis analysis = child.getAnalysis(); + pointsCount.setText(analysis.wptPoints +""); + if(analysis.totalDistanceMoving != 0) { + distance.setText(OsmAndFormatter.getFormattedDistance(analysis.totalDistanceMoving, app)); + } else { + distance.setText(OsmAndFormatter.getFormattedDistance(analysis.totalDistance, app)); + } + + if(analysis.isTimeSpecified()) { + if(analysis.isTimeMoving()) { + time.setText(Algorithms.formatDuration((int) (analysis.timeMoving / 1000))+""); + } else { + time.setText(Algorithms.formatDuration((int) (analysis.timeSpan/ 1000))+""); + } + } else { + time.setText(""); + } + } + + TextView descr = ((TextView) v.findViewById(R.id.description)); + if (child.isExpanded()) { + descr.setVisibility(View.VISIBLE); + descr.setText(child.getHtmlDescription()); + } else { + descr.setVisibility(View.GONE); } } + } diff --git a/OsmAnd/src/net/osmand/plus/activities/OsmandActionBarActivity.java b/OsmAnd/src/net/osmand/plus/activities/OsmandActionBarActivity.java index 3965e04f49..9b88163ef2 100644 --- a/OsmAnd/src/net/osmand/plus/activities/OsmandActionBarActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/OsmandActionBarActivity.java @@ -18,7 +18,7 @@ public class OsmandActionBarActivity extends ActionBarActivity { //should be called after set content view protected void setupHomeButton(){ Drawable back = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); - back.setColorFilter(0xffffffff, PorterDuff.Mode.MULTIPLY); + back.setColorFilter(getResources().getColor(R.color.color_white), PorterDuff.Mode.MULTIPLY); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeAsUpIndicator(back); diff --git a/OsmAnd/src/net/osmand/plus/activities/SettingsActivity.java b/OsmAnd/src/net/osmand/plus/activities/SettingsActivity.java index b36de7dc02..e4f8874bd5 100644 --- a/OsmAnd/src/net/osmand/plus/activities/SettingsActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/SettingsActivity.java @@ -151,7 +151,7 @@ public class SettingsActivity extends SettingsBaseActivity { Toolbar tb = new Toolbar(this); tb.setClickable(true); Drawable back = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); - back.setColorFilter(0xffffffff, PorterDuff.Mode.MULTIPLY); + back.setColorFilter(app.getResources().getColor(R.color.color_white), PorterDuff.Mode.MULTIPLY); tb.setNavigationIcon(back); tb.setTitle(R.string.about_settings); tb.setBackgroundColor(getResources().getColor( getResIdFromAttribute(this, R.attr.pstsTabBackground))); diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressFragment.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressFragment.java index 6a81e8f33c..3c66d2540d 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressFragment.java @@ -159,7 +159,7 @@ public class SearchAddressFragment extends Fragment { }); menuItem = menu.add(0, ONLINE_SEARCH, 0, R.string.search_online_address); MenuItemCompat.setShowAsAction(menuItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); - menuItem = menuItem.setIcon(R.drawable.ic_action_gnext_dark); + menuItem = menuItem.setIcon(R.drawable.ic_world_globe_dark); menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { diff --git a/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressOnlineFragment.java b/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressOnlineFragment.java index da9f7f1714..c54c708654 100644 --- a/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressOnlineFragment.java +++ b/OsmAnd/src/net/osmand/plus/activities/search/SearchAddressOnlineFragment.java @@ -81,7 +81,7 @@ public class SearchAddressOnlineFragment extends Fragment implements SearchActiv if (getActivity() instanceof SearchActivity) { menuItem = menu.add(0, 0, 0, R.string.search_offline_address); MenuItemCompat.setShowAsAction(menuItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS | MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT); - menuItem = menuItem.setIcon(R.drawable.ic_action_gnext_dark); + menuItem = menuItem.setIcon(R.drawable.ic_sdcard); menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { diff --git a/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java index 9b8db44826..2db9fef142 100644 --- a/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java +++ b/OsmAnd/src/net/osmand/plus/download/LocalIndexesFragment.java @@ -131,7 +131,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment { backup = getActivity().getResources().getDrawable(R.drawable.ic_type_archive); backup.mutate(); if (light) { - backup.setColorFilter(0xff727272, PorterDuff.Mode.MULTIPLY); + backup.setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); } sdcard = getActivity().getResources().getDrawable(R.drawable.ic_sdcard); sdcard.mutate(); diff --git a/OsmAnd/src/net/osmand/plus/monitoring/DashTrackFragment.java b/OsmAnd/src/net/osmand/plus/monitoring/DashTrackFragment.java index d0dbb1f154..d502895c20 100644 --- a/OsmAnd/src/net/osmand/plus/monitoring/DashTrackFragment.java +++ b/OsmAnd/src/net/osmand/plus/monitoring/DashTrackFragment.java @@ -1,6 +1,7 @@ package net.osmand.plus.monitoring; import java.io.File; +import java.util.Date; import java.util.List; import net.osmand.IndexConstants; @@ -8,6 +9,7 @@ import net.osmand.access.AccessibleToast; import net.osmand.plus.GPXUtilities; import net.osmand.plus.GpxSelectionHelper; import net.osmand.plus.OsmAndAppCustomization; +import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandSettings; import net.osmand.plus.R; @@ -40,6 +42,10 @@ import android.widget.Toast; */ public class DashTrackFragment extends DashBaseFragment { + private Drawable gpxOnMap; + private Drawable gpxNormal; + private java.text.DateFormat format; + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = getActivity().getLayoutInflater().inflate(R.layout.dash_common_fragment, container, false); @@ -47,7 +53,16 @@ public class DashTrackFragment extends DashBaseFragment { TextView header = (TextView) view.findViewById(R.id.fav_text); header.setTypeface(typeface); header.setText(R.string.tracks); + gpxNormal = getResources().getDrawable(R.drawable.ic_gpx_track).mutate(); + gpxOnMap = getResources().getDrawable(R.drawable.ic_gpx_track).mutate(); + gpxOnMap.setColorFilter(getResources().getColor(R.color.color_distance), PorterDuff.Mode.MULTIPLY); + if (getMyApplication().getSettings().isLightContent()) { + gpxNormal.setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); + } + + ((Button) view.findViewById(R.id.show_all)).setTypeface(typeface); + format = getMyApplication().getResourceManager().getDateFormat(); (view.findViewById(R.id.show_all)).setOnClickListener(new View.OnClickListener() { @Override @@ -90,7 +105,7 @@ public class DashTrackFragment extends DashBaseFragment { } } - OsmandApplication app = getMyApplication(); + final OsmandApplication app = getMyApplication(); SavingTrackHelper savingTrackHelper = app.getSavingTrackHelper(); if (app.getSettings().SAVE_GLOBAL_TRACK_TO_GPX.get()) { list.remove(2); @@ -99,61 +114,38 @@ public class DashTrackFragment extends DashBaseFragment { AvailableGPXFragment.createCurrentTrackView(view, app); + GpxSelectionHelper.SelectedGpxFile currentTrack = savingTrackHelper.getCurrentTrack(); ((TextView)view.findViewById(R.id.name)).setText(R.string.currently_recording_track); - String description = GpxUiHelper.getDescription(getMyApplication(), currentTrack.getGpxFile(), null, true); - int startindex = description.indexOf(">"); - int endindex = description.indexOf(""); - String distance = description.substring(startindex + 1, endindex); String points = String.valueOf(currentTrack.getGpxFile().points.size()); ((TextView) view.findViewById(R.id.points_count)).setText(points); - ((TextView)view.findViewById(R.id.distance)).setText(distance); + ((TextView)view.findViewById(R.id.distance)).setText( + OsmAndFormatter.getFormattedDistance(savingTrackHelper.getDistance(), app)); tracks.addView(view); } for (String filename : list) { final File f = new File(dir, filename); - final GPXUtilities.GPXFile res = GPXUtilities.loadGPXFile(getMyApplication(), f); + boolean haveInfo = false; + GpxSelectionHelper.SelectedGpxFile selectedGpxFile = + app.getSelectedGpxHelper().getSelectedFileByPath(f.getAbsolutePath()); + GPXUtilities.GPXTrackAnalysis trackAnalysis = null; + if(selectedGpxFile != null) { + trackAnalysis = selectedGpxFile.getTrackAnalysis(); + } + AvailableGPXFragment.GpxInfo info = new AvailableGPXFragment.GpxInfo(); + info.subfolder = ""; + info.setAnalysis(trackAnalysis); + info.file = f; + LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.dash_gpx_track_item, null, false); - ((TextView) view.findViewById(R.id.name)).setText(filename); - ((TextView) view.findViewById(R.id.points_count)). - setText(res.points.size() + " " + getActivity().getString(R.string.points)); - String description = GpxUiHelper.getDescription(getMyApplication(), res, f, true); - int startindex = description.indexOf(">"); - int endindex = description.indexOf(""); - String distnace = description.substring(startindex + 1, endindex); - ((TextView) view.findViewById(R.id.distance)). - setText(distnace); - view.findViewById(R.id.time_icon).setVisibility(View.GONE); - - boolean light = getMyApplication().getSettings().isLightContent(); - Drawable icon = getResources().getDrawable(R.drawable.ic_show_on_map); - GpxSelectionHelper gpxSelectionHelper = getMyApplication().getSelectedGpxHelper(); - boolean isShowingOnMap = gpxSelectionHelper.getSelectedFileByName(filename) != null; - //setting proper icon color - if (isShowingOnMap) { - icon.mutate(); - if (light) { - icon.setColorFilter(getResources().getColor(R.color.dashboard_gpx_on_map), PorterDuff.Mode.MULTIPLY); - } else { - icon.setColorFilter(getResources().getColor(R.color.color_distance), PorterDuff.Mode.MULTIPLY); - } - } else if (light) { - icon.mutate(); - icon.setColorFilter(getResources().getColor(R.color.icon_color_light), PorterDuff.Mode.MULTIPLY); - - } - final ImageButton showOnMap = (ImageButton) view.findViewById(R.id.show_on_map); - showOnMap.setImageDrawable(icon); - showOnMap.setVisibility(View.VISIBLE); - //view.findViewById(R.id.distance_icon).setVisibility(View.GONE); - view.findViewById(R.id.stop).setVisibility(View.GONE); + AvailableGPXFragment.udpateGpxInfoView(view, info, app, gpxNormal, gpxOnMap, true); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - showOnMap(res); + showOnMap(GPXUtilities.loadGPXFile(app, f)); } }); tracks.addView(view); From 549ea67570e27a192d80df03e7d50932923a5fc5 Mon Sep 17 00:00:00 2001 From: jan madsen Date: Sat, 28 Feb 2015 12:15:11 +0100 Subject: [PATCH 12/16] Translated using Weblate (Danish) Currently translated at 100.0% (1658 of 1658 strings) --- OsmAnd/res/values-da/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 49381acbed..5ad875f134 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -52,7 +52,7 @@ dele Højdekurver Ekstern udvidelse (hentes separat) som muliggør at hente offline højdekurver og relief (\'Indstillinger\' → \'Administrer kortfiler\' → \'Hent\' → Vælg den ønskede korttype). Disse kan vises i kombination med OsmAnd offline kort. - Højdekurver (ekstern udvidelse) + Højdekurver Andre kort Kun veje Højdekurver @@ -303,7 +303,7 @@ AM Parkeringssted Ekstern udvidelse (hentes separat) gør det muligt at huske placeringen af den parkerede bil. - Parkeringsposition (ekstern udvidelse) + Parkeringsposition Marker som parkeringsplads Slet en parkeringsmarkør Offentligt From fe5b6cd72a959677689ca7baf59fb9c41e3288f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=20=EC=A1=B0?= Date: Sat, 28 Feb 2015 13:36:52 +0100 Subject: [PATCH 13/16] Translated using Weblate (Korean) Currently translated at 100.0% (1658 of 1658 strings) --- OsmAnd/res/values-ko/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-ko/strings.xml b/OsmAnd/res/values-ko/strings.xml index d7d3e64d82..86b7818d90 100644 --- a/OsmAnd/res/values-ko/strings.xml +++ b/OsmAnd/res/values-ko/strings.xml @@ -1200,7 +1200,7 @@ 부분 등고선 오프라인 등고선 과 음영을 다운로드하기 위해 외부플러그인을 이용합니다 (설정→지도 관리→다운로드→ 원하는 지도 유형 선택). OsmAnd 오프라인 지도에서 조합하여 표시할 수 있습니다. - 등고선 (외부 플러그인) + 등고선 다른 지도 도로 전용 등고선 @@ -1467,7 +1467,7 @@ 오전 주차 포인트 주차된 차의 위치를 저장하기 위한 외부 플러그인. - 주차 위치 (외부 플러그인) + 주차 위치 주차 위치로 마크(표시) 주차 마커를 삭제 공용 From 5407eec595e3c154a073a8cd2fd612174d784485 Mon Sep 17 00:00:00 2001 From: Leif Larsson Date: Sat, 28 Feb 2015 14:01:49 +0100 Subject: [PATCH 14/16] Translated using Weblate (Swedish) Currently translated at 99.5% (1650 of 1658 strings) --- OsmAnd/res/values-sv/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml index d178083e32..ca9fd55945 100644 --- a/OsmAnd/res/values-sv/strings.xml +++ b/OsmAnd/res/values-sv/strings.xml @@ -206,7 +206,7 @@ fm Parkeringspunkt Extern modul (särskild nedladdning) som gör det möjligt att spara platsen där du parkerade bilen. -Parkeringsplats (extern modul) +Parkeringsplats Markera som parkeringsplats Ta bort P-markering Snarast @@ -959,7 +959,7 @@ delar Höjdkurvor Andra kartor - Höjdkurvor (extern modul) + Höjdkurvor Höjdkurvsdata "Förändringar i 1.1.0: \n\t* Insticksmodul för beräkning av avstånd\n\t* Insticksmodul för ljud-/videoanteckningar\n\t* Insticksmodul för höjdkurvor\n\t* Buggfixar From 9c60b17e77d9e49c5ea47367045e33a3569c87ff Mon Sep 17 00:00:00 2001 From: Dmitriy Prodchenko Date: Sat, 28 Feb 2015 15:52:19 +0200 Subject: [PATCH 15/16] Done icon. --- OsmAnd/res/drawable-hdpi/ic_action_done.png | Bin 0 -> 1361 bytes OsmAnd/res/drawable-mdpi/ic_action_done.png | Bin 0 -> 1244 bytes OsmAnd/res/drawable-xhdpi/ic_action_done.png | Bin 0 -> 1473 bytes OsmAnd/res/drawable-xxhdpi/ic_action_done.png | Bin 0 -> 1796 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 OsmAnd/res/drawable-hdpi/ic_action_done.png create mode 100644 OsmAnd/res/drawable-mdpi/ic_action_done.png create mode 100644 OsmAnd/res/drawable-xhdpi/ic_action_done.png create mode 100644 OsmAnd/res/drawable-xxhdpi/ic_action_done.png diff --git a/OsmAnd/res/drawable-hdpi/ic_action_done.png b/OsmAnd/res/drawable-hdpi/ic_action_done.png new file mode 100644 index 0000000000000000000000000000000000000000..c49faa115492076ef0c5a024a7b96db3802d6913 GIT binary patch literal 1361 zcmaJ>Z%i9y7{3B;%iNak14~7i?+!AZa=qU5uJkSxT6!?56iL?vG>hZ@yrl>9uDd(d zLWnB^CNl&XnpmfC&KcvsEY7cf-~)}gXreAlrb`qDN``-8NHiha9KHpL`#^Td-TOZ8 z`~05g_x!svZLNoQ?=0JiVc70avk*aRRsP+v4SjE7*(_Qfu^Kz9BYMnAi3Y?1iY`GA zN{C%B0!5|&_!U@-VZ|eAw8QEMxA3x_aEf^yXF8EYXbh{ZPbWpW2UNz>AHGhiBisgpx&Z;}^boR(Vn7Y&q*zZ4S5pmWB$F;LNxKLa$FpwUMT3n8N8Su2 z#z%yv4PQv|;c?4K@+6r`rJO0ZQ#ZOuisLxaMUym5APvIo*DNtjXl7->f&fj~P?MIb zYank?l=ME!ha;xzAtaLF@TOtS+(;Bk8JQN7B;|CGi9|lGHEq+1!2fA%sclC4laP!+ zQ|~imRF7C?0gQ6@U`KgH#D;&?P*G9DUO|`p5>T^3f)7VGPDNFChE)_v@^}c^<6#KS z#c%}2DKz1M6l7(IfiX!b*x3p%xLKBJ3PqeF=qNmJ5`7*6XEkHv( z0hK00Pk^;N^Xe8H+)7NAWl<&|$9f5dVZ4NwRb;}=#W+QQvRkH5{Ofq-zWlBCDLO%M zBnxzSQI=VemPJB>H6lS#kRc@6LlY7O6^c=0N)|<&L=?$<>)h8$g(K9T`R(RlAYpT~ zpoZqjK!ek_I{gEN+2oKAh^B8ycUM>IXF7{ob`9?u=i}D`7x$F)*()%&oy6w7pM3Vt z)VYal=~(-{mon4-w_d(!0E#ogd?`?97ee*7N z@Xd~YN9K>cD$I`AmK&>PJBgkzkK3#7&0&}Ko;@8ZT4t+e@7m_Qk)Y%CTx-?vT=8Yj zHmnS-9GrT4&R-sAeQjaNRWg6QdEa1(^k{i^X=Y{r)Q$80azQK0J^o>Fj-0H%U6h-M zcSkcT2d2(F=KmuYdLO*!FCIIOKetjk_T!n!i*F1kM;q$)UO4RDKJ+PWpId#U;^$|M zF{XXTSGMH@Gdl?I?N`4Jfa-^G*Dp-;Kb-sGnse#OcU60GcQW5+_Wc7EZgtLlFx*tZ eTrDrLcVd;`4*$`|3s2{Na-qgn;Zj5Ass8{BEZ0c@ literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-mdpi/ic_action_done.png b/OsmAnd/res/drawable-mdpi/ic_action_done.png new file mode 100644 index 0000000000000000000000000000000000000000..d8b9baaf89976f53e97401c1c2fb7120f8d98da3 GIT binary patch literal 1244 zcmaJ>PiP!f7@y6WC9MqvloF$sVOp`R&d#5mnavD4CYzbWY;@OUyV4*?ee>SiWRl&P z>CD941WBn#j0Zv5QV@hTp@N6%sh}b>6_--+;-Mb&(ilOC1#53P6xTPq+1Nwqz|4E! zd*AQ-e&4_Os91QlfB(>ailX{+lV*vmgVEcUAm7cpzD<^A!tv?wgj)&gz{gY;xfZ5# zH86uq7@)<|KjI8U#Xqpi)8Tafbq%_;B#3m9jhaW$6qOlicmU4hkhbuQ?dZ(??=~3P zMmlp+&hvTCz_a$`l8;X;70PgF9;%2Ld4n z{;^oi@G%HozwElzZWk11-OvqYU5_@5cGc;lCv6A0_25`krcTr*_U(5un(*Bk-OjUS z@4+F3DiA^dS**&#tRzXp?68a=n^G$(LKvo?K;rM<(Iffm^eH(Zad=%i8h}s+A_T03 z(|{EOEU}iTh^!@GBuEGf5CDcF6uGE%9%-fS5$VrpyE_;}*c~nGka_aS;Ji?uIzoo- z@0^(}H-57owpt@`HuhBfba{ScU3ex8%&B)ic@tktdp0zq!5s2}ATYbj{Vq33`em3DOgXg{!Kiuf0VhPH6`oe+Znab(tf0G+8m|u;(^ZtLD CqMb4T literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_done.png b/OsmAnd/res/drawable-xhdpi/ic_action_done.png new file mode 100644 index 0000000000000000000000000000000000000000..c507fbaf067cfc890814b8a90480fe476f307d10 GIT binary patch literal 1473 zcmaJ>eQeZZ81ERc$=vt~PCllkh(NH{Yp=b#Hh1i+H#y|SaXZ-53G~|cwz6GY+K#&| zgiIjAspt_WI-D{LBp~5KNMJ_TAVC}&M~E5+A+qpcOhy8144tyzd)p5AgV3aX-{*aw z-}C&QuQvLNU(K8_V*-L8ncl^G0It@=n?4?XOUDduh0Ao)Q)ZT^VKXY|0Lhos5J0^V zp#lVeAl0rr4_pY6xuW zxd2}@>I+J4tkN_!jv%7Zs3mH%sCorKvMftjDT1PKsDT@`iYdf!#h8<{zym|nWzCdT z1x;8KLTZia#vs#?5F(n-_sFnfj3x@EjED&uL0YUtB$9}0SlciI;C~uV)HZ^(8Xy9| zP-}D%)+0P835L0Qx}$_5WWz1fWmpuUnpee|2vAHf@5bPbMUo|sW+W*TvfFXWZl`h9 zO0zi2N)&DfBw)l44Zc8w6Jiv>gfDZS&`JJu^>^Vk*Il~ z%j)=J4E*q@2*qrrf} zqtOBioF^R)PD6V?jUXvMd-?oe?DDPVw-%0F{`~jR?)mNGyn9|+()i1SNK@Yz8MWtk z1oYkI^Y@mw#mn3Li|UVS*HiDTI5~I96yf0ATqav|^=}OSQSDwfWLbHE?f-Y#F{A5+ zorik&2M!$#HfE>wAhYUIH6-hF3iefgJZ)OBPxjnA*3%s)(mraIp!R0-FVsk~o#*4Shy`3j6brR#631x8Qojnf^-)uGN zB1>P3t0^CDd9dWu+Eet3%^C5Gb-TlN@;VPUoFbLX6+Kt(wREMmEuPvo@5XPEYlo6q zadwQY_xhM^_P*Yu?WNoCyR9i#Cil&xRzJIHCzWDLc54(*;@@P2dM+B4H;cjWwf`C2sZxeagJXg{64FXfXh4~m=K6XW@*eEQwN zhWOQObu|+??VWVtpu2Vdj6CbDNuk`V+UcKtv)q5A^To4si7E%DoZQCeoLfM|*B$xT wk+q9L=Vfu%Tw5>x-O-fHurqJdz{1l=$JZ_2?Ol6+U*f0g^%V1m3f64;520}vrvLx| literal 0 HcmV?d00001 diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_done.png b/OsmAnd/res/drawable-xxhdpi/ic_action_done.png new file mode 100644 index 0000000000000000000000000000000000000000..575e04d8079bf0a52a18a77005b7ce1f5a9db4af GIT binary patch literal 1796 zcmaJ?c~BEq7!Trw0$yzuyw(*3teefTId&mRNVqCNh)^ghy4l^31(FTfMFKkY00-1T zZ7oxwp<;*?wNNXyFh%P%70-xuuqxGBwcb}1wL@j>28i_!$DMEYz3;v6_cB~X)$fdUfDcs8Y{aIz@> zI29=n_?FVC8C-@g5hED05ckLk?Pe>lEf7S`wp(!`m*M~el}%ez;G@<9AV8BUFkPk- z>8u*cM8_A~sCmUnsYG!ufs)|tSwN&6;|-W84hQV!JPV82Rba1OjNf~XVG!sQ;c``A zAE*pnGN55>6d)7IAwncZ00k-(%j61FF%yvRJSo(D+a@bg@wXGsgSW{!(tRgVUYxuNFZJUVv8&sZig)FRIdds#S%8!%F&Dk z@L0qROaZ3?d8B`*mgS)WtM53g;MGD#PS?yCB)ba13i=tbj(-TXi5TowkrnAsg-~ zQ(x3t%0@4t$XFX=272?1(Qm;ZC5;3@-~>dWG9`o{h!RrDNCJ|gMwBEeLQ07F`1|z9 zH}colr~C;Yht&%Q!wEu$O9&h?PzoFpizx&$NaPa8Af`w$LK0#E$3d8f2zy%RjaKp= z@%`!9z8(yoc|BT`g`X!IKR8Xzpo5>s4-&NMRQsj-o%iOvmol#H@3Z>~KYPf%8o#zY ztTIbG)(Or4o!}QE{lul^<-ky|ynN$Ozt*pA?lG;->}p&NIGxUulT-G8RQPh@^Pt_Q z(GA(pPu)M|X0QHhcy|9{&4%lZ5z>!a8t)x@Jh?I&h#C;`nlvj0#(SyWKQ16RYUv=8 z(J_S^NVR|J(>*qH-E&=QkN?DxK--R(Bc=^!zUw@M_;!qPTTXvnnOR$W_~N#zx~xq} zu2Jb@?ao5!Gc!$2pd&^FI$nwpgoWY%7Ku1M2 zsz~|L>gJl+!qGI^eJt|mUt#%)D}&oVH2QY?f(=nyHt&UFD#qN9)laIBj+d<1>3@E~npx7^ zteJz7MgnOQg9*85XxbS=L)z`(P3KqZ{~S0--{DL#9+A|?HXY6Bs{G{ovhe)1J~q?! zMUwHGpQ$rTeipw_rRO*dD+XWEPlH0!Xj+jF8TA_Q`|vZ z#QL`Rd6OGA11`0%V|~lD(t?ADH6{962e!BeY_AF26G0DnvT=P~=&V1^oTaO-v`l^! z@U*-(8oP4?4i0-+Jig`v`>X#A++llit8IU0!#PXar`r62vgWq>v5%Xj_fx)~B!3k+ vE@(& literal 0 HcmV?d00001 From e8867d1221131d9969dd9f85d436d87ac11d2347 Mon Sep 17 00:00:00 2001 From: ezjerry liao Date: Sat, 28 Feb 2015 14:34:10 +0100 Subject: [PATCH 16/16] Translated using Weblate (Chinese (Taiwan)) Currently translated at 100.0% (1658 of 1658 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index ab26210ad5..59a310b76e 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -150,7 +150,7 @@ AM 停車地點 該外掛元件(單獨下載)可記住您的愛車停車地點。 - 停車地點(外掛元件) + 停車地點 標記為停車地點 刪除停車標記 公用的 @@ -1124,7 +1124,7 @@ 音訊/視訊注解 部件 等高線 - 等高線(外掛元件) + 等高線 其它地圖 僅道路 等高線