diff --git a/.hgignore b/.hgignore
index 1bbe85f92..3bf9706a8 100644
--- a/.hgignore
+++ b/.hgignore
@@ -5,4 +5,3 @@ syntax:glob
*/proguard/**
.metadata
MyTracksTest/annotations.log
-MyTracks/src/com/google/android/apps/mytracks/io/mymaps
diff --git a/MyTracks/.classpath b/MyTracks/.classpath
index 72de4ae42..636d59be6 100644
--- a/MyTracks/.classpath
+++ b/MyTracks/.classpath
@@ -8,7 +8,6 @@
-
diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml
index e618828c3..1545eb1c9 100755
--- a/MyTracks/AndroidManifest.xml
+++ b/MyTracks/AndroidManifest.xml
@@ -17,8 +17,8 @@ limitations under the License.
+ android:versionCode="26"
+ android:versionName="1.1.3">
@@ -61,16 +61,16 @@ limitations under the License.
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|fontScale"
android:exported="false" />
-
-
-
-
-
+
diff --git a/MyTracks/libs/libmymaps.jar b/MyTracks/libs/libmymaps.jar
deleted file mode 100644
index 72659cdc6..000000000
Binary files a/MyTracks/libs/libmymaps.jar and /dev/null differ
diff --git a/MyTracks/res/drawable-hdpi/failure.png b/MyTracks/res/drawable-hdpi/failure.png
new file mode 100644
index 000000000..127f55275
Binary files /dev/null and b/MyTracks/res/drawable-hdpi/failure.png differ
diff --git a/MyTracks/res/drawable-hdpi/success.png b/MyTracks/res/drawable-hdpi/success.png
new file mode 100644
index 000000000..977d08fbe
Binary files /dev/null and b/MyTracks/res/drawable-hdpi/success.png differ
diff --git a/MyTracks/res/drawable-ldpi/failure.png b/MyTracks/res/drawable-ldpi/failure.png
new file mode 100644
index 000000000..3722b0794
Binary files /dev/null and b/MyTracks/res/drawable-ldpi/failure.png differ
diff --git a/MyTracks/res/drawable-ldpi/success.png b/MyTracks/res/drawable-ldpi/success.png
new file mode 100644
index 000000000..1d44ba697
Binary files /dev/null and b/MyTracks/res/drawable-ldpi/success.png differ
diff --git a/MyTracks/res/drawable-mdpi/failure.png b/MyTracks/res/drawable-mdpi/failure.png
new file mode 100644
index 000000000..5ff6b1ebb
Binary files /dev/null and b/MyTracks/res/drawable-mdpi/failure.png differ
diff --git a/MyTracks/res/drawable-mdpi/success.png b/MyTracks/res/drawable-mdpi/success.png
new file mode 100644
index 000000000..31f2ee563
Binary files /dev/null and b/MyTracks/res/drawable-mdpi/success.png differ
diff --git a/MyTracks/res/layout/send_to_google_result.xml b/MyTracks/res/layout/send_to_google_result.xml
new file mode 100644
index 000000000..f2d93780f
--- /dev/null
+++ b/MyTracks/res/layout/send_to_google_result.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MyTracks/res/layout/send_to_google_result_list_item.xml b/MyTracks/res/layout/send_to_google_result_list_item.xml
new file mode 100644
index 000000000..045a60584
--- /dev/null
+++ b/MyTracks/res/layout/send_to_google_result_list_item.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/MyTracks/res/values-ca/strings.xml b/MyTracks/res/values-ca/strings.xml
index e2ca5f58d..6ac1e8525 100644
--- a/MyTracks/res/values-ca/strings.xml
+++ b/MyTracks/res/values-ca/strings.xml
@@ -225,7 +225,6 @@ limitations under the License.
Escriu una còpia completa de totes les rutes i els paràmetres a la targeta SDRestaura araRestaura totes les rutes i els paràmetres des de la targeta SD.
- No es poden gestionar les còpies de seguretat mentre s\'enregistra una ruta.La restauració d\'una còpia de seguretat des de la targeta SD sobreescriurà totes les rutes i paràmetres. Esteu segur?
diff --git a/MyTracks/res/values-de/strings.xml b/MyTracks/res/values-de/strings.xml
index 5c0809ca1..cfd7e873c 100644
--- a/MyTracks/res/values-de/strings.xml
+++ b/MyTracks/res/values-de/strings.xml
@@ -1,254 +1,259 @@
-
+
-
-
- Track aufzeichnen
- Aufzeichnung anhalten
- Satellitenansicht
- Kartenansicht
- Mein Aufenthaltsort
+-->
+
+
+ Track aufzeichnen
+ Aufzeichnung anhalten
+ Satellitenansicht
+ Kartenansicht
+ Mein Aufenthaltsort
+
Wegpunkte
- Alle Tracks löschen
- Einstellungen
- Höhe
- Bitte wähle einen Track zur Ansicht aus
- Aktueller Track
- Letztes Segment
- Sensorstatus
- Aggregierte Statistiken
-
-
- Es wurde kein Dienst zur Positionsermittlung auf diesem Gerät gefunden.
- Es wurde kein GPS-Empfänger auf diesem Gerät gefunden.
- Beim Senden des Tracks an Google Fusion Tables ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.
- Beim Senden des Tracks an Google Docs ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.
- Start der Aufzeichnung fehlgeschlagen. Bitte versuche es noch einmal.
- Anhalten unmöglich. Bitte versuche es noch einmal.
- Konnte Datei nicht lesen.
- Datei ist nicht im GPX-Format.
- Ein Fehler ist aufgetreten. Bitte versuche es noch einmal.
- Track existiert nicht.
- Die Datei ist zu groß (maximal 500 KB). Operation abgebrochen.
- Der Wegpunkt kann nicht einfügt werden. Keine Positionsbestimmung möglich.
-
-
- Warte auf ein besseres GPS-Signal. Bitte stelle sicher, dass der Himmel sichtbar ist.
- Ein neuer Track wird aufgezeichnet.
- Die Aufzeichnung wurde angehalten.
- Eine neue Tabelle wurde auf google.com/fusiontables erstellt.
- Dein Track wurde auf maps.google.com gespeichert.
- Dein Track wurde in einer neuen Tabelle bei docs.google.com gespeichert.
- Dein Track wurde an docs.google.com gesendet.
- Hier berühren, um zu den Sicherheits- und Positionseinstellungen zu gelangen. Aktiviere \'GPS-Satelliten\'. Drücke dann den Zurück-Knopf, um hierher zurückzukehren.
- Anmerkung: Eine ungefähre Position wird angezeigt, bestimmt mittels Mobilfunkstationen und WiFi-Netzwerken.
- Die Position kann derzeit nicht bestimmt werden. Aktiviere mehr Positionsquellen (siehe Sicherheits- und Positionseinstellungen) und stelle sicher, dass der Himmel sichtbar ist.
- Ein Wegpunkt wurde eingefügt.
- Ein Statistikwegpunkt wurde eingefügt.
-
-
- Bitte warten…
- Dein Track wird an Google gesendet...
- Lese Track...
- Bereite Track vor...
- Anmeldung bei Google Fusion Tables...
- Anmeldung bei Google Docs...
- Track wird an Google Docs gesendet...
- Track wird an Google Fusion Tables gesendet...
- Neue \'Fusion Tabelle\' wird erstellt...
- Importiere GPS-Track. Das kann ein wenig dauern.
- Schreibe Datei auf SD-Karte. Das kann ein wenig dauern.
- Aktualisiere Trackstatistik...
-
-
- Bist Du Dir wirklich sicher?
- Alle Tracks und Wegpunkte werden endgültig von diesem Gerät gelöscht.
- Dieser Track und seine Wegpunkte werden endgültig von diesem Gerät gelöscht.
- Dieser Wegpunkt wird endgültig von diesem Gerät gelöscht.
-
-
- Erstellt von My Tracks für Android.
+ Alle Tracks löschen
+ Einstellungen
+ Höhe
+ Bitte wähle einen Track zur Ansicht aus
+ Aktueller Track
+ Letztes Segment
+ Sensorstatus
+ Aggregierte Statistiken
+
+
+ Es wurde kein Dienst zur Positionsermittlung auf diesem Gerät gefunden.
+ Es wurde kein GPS-Empfänger auf diesem Gerät gefunden.
+ Beim Senden des Tracks an Google Fusion Tables ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.
+ Beim Senden des Tracks an Google Text & Tabellen ist ein Fehler aufgetreten. Bitte versuche es später noch einmal.
+ Start der Aufzeichnung fehlgeschlagen. Bitte versuche es noch einmal.
+ Anhalten unmöglich. Bitte versuche es noch einmal.
+ Konnte Datei nicht lesen.
+ Datei ist nicht im GPX-Format.
+ Ein Fehler ist aufgetreten. Bitte versuche es noch einmal.
+ Track existiert nicht.
+ Die Datei ist zu groß (maximal 500 KB). Operation abgebrochen.
+ Der Wegpunkt kann nicht einfügt werden. Keine Positionsbestimmung möglich.
+
+
+ Warte auf ein besseres GPS-Signal. Bitte stelle sicher, dass der Himmel sichtbar ist.
+ Ein neuer Track wird aufgezeichnet.
+ Die Aufzeichnung wurde angehalten.
+ Eine neue Tabelle wurde auf google.com/fusiontables erstellt.
+ Dein Track wurde auf maps.google.com gespeichert.
+ Dein Track wurde in einer neuen Tabelle bei docs.google.com gespeichert.
+ Dein Track wurde an docs.google.com gesendet.
+ Hier berühren, um zu den Sicherheits- und Positionseinstellungen zu gelangen. Aktiviere \'GPS-Satelliten\'. Drücke dann den Zurück-Knopf, um hierher zurückzukehren.
+ Anmerkung: Eine ungefähre Position wird angezeigt, bestimmt mittels Mobilfunkstationen und WiFi-Netzwerken.
+ Die Position kann derzeit nicht bestimmt werden. Aktiviere mehr Positionsquellen (siehe Sicherheits- und Positionseinstellungen) und stelle sicher, dass der Himmel sichtbar ist.
+ Ein Wegpunkt wurde eingefügt.
+ Ein Statistikwegpunkt wurde eingefügt.
+
+
+ Bitte warten…
+ Dein Track wird an Google gesendet...
+ Lese Track...
+ Bereite Track vor...
+ Anmeldung bei Google Fusion Tables...
+ Anmeldung bei Google Text & Tabellen...
+ Track wird an Google Text & Tabellen gesendet...
+ Track wird an Google Fusion Tables gesendet...
+ Neue \'Fusion Tabelle\' wird erstellt...
+ Importiere GPS-Track. Das kann ein wenig dauern.
+ Schreibe Datei auf SD-Karte. Das kann ein wenig dauern.
+ Aktualisiere Trackstatistik...
+
+
+ Bist Du Dir wirklich sicher?
+ Alle Tracks und Wegpunkte werden endgültig von diesem Gerät gelöscht.
+ Dieser Track und seine Wegpunkte werden endgültig von diesem Gerät gelöscht.
+ Dieser Wegpunkt wird endgültig von diesem Gerät gelöscht.
+
+
+ Erstellt von My Tracks für Android.Erstellt von <a href=\'http://mytracks.appspot.com\'>My Tracks</a> für Android.
-
-
- Punkte
- Aufgezeichnet am
- Aktivität
- Art des Wegpunktes
- (Teil %d)
-
-
+
+
+ Punkte
+ Aufgezeichnet am
+ Aktivität
+ Art des Wegpunktes
+ (Teil %d)
+
+
Dein Track wird aufgezeichnet…
-
-
- Nein
- Ja
- Fehler
- Erfolgreich
- Wegpunkt
+
+
+
+ Nein
+ Ja
+
+ Fehler
+ Erfolgreich
+ WegpunktLizenzAbbrechenSchließenBearbeitenSichern
-
- (Ende)
-
-
- Anzeigen
+
+
+ (Ende)
+
+
+ AnzeigenAn eine Google Fusion Tables-Karte senden
- An eine neue Google Fusion Tables-Karte senden
- An Google Docs senden
- An Google senden…
- Vom Gerät löschen…
- Bearbeiten
- Auf SD-Karte speichern…
- GPX-Datei exportieren
- KML-Datei exportieren
- CSV-Datei exportieren
- TCX-Datei exportieren
- An Google Fusion Tables senden
- Alle Tracks löschen
+ An eine neue Google Fusion Tables-Karte senden
+ An Google Text & Tabellen senden
+ An Google senden…
+ Vom Gerät löschen…
+ Bearbeiten
+ Auf SD-Karte speichern…
+ GPX-Datei exportieren
+ KML-Datei exportieren
+ CSV-Datei exportieren
+ TCX-Datei exportieren
+ An Google Fusion Tables senden
+ Alle Tracks löschen
- Alle Tracks exportieren
- Exportieren beendet
- Einen Track auswählen. Lange berühren für mehr Optionen.
- Alle Tracks
- Dieser Track
+ Alle Tracks exportieren
+ Exportieren beendet
+ Einen Track auswählen. Lange berühren für mehr Optionen.
+ Alle Tracks
+ Dieser TrackMit Freunden teilen…
- Eine GPX-Datei
- Eine KML-Datei
- Eine CSV-Datei
- Eine TCX-Datei
- Karte zurücksetzen.
-
-
- Alle Wegpunkte löschen
- Dieser Wegpunkt
- Löschen
- Details bearbeiten
- Auf der Karte zeigen
- Wegpunkt einfügen
- Statistik einfügen
- Wegpunkt auswählen. Lange berühren für mehr Optionen.
-
-
- Trackdetails
- Name
- Beschreibung
- Aktivität (z. B. Wandern, Fahrradfahren, Laufen, Klettern…)
-
-
- Wegpunktdetails
- Wegpunktname
- Wegpunktbeschreibung
- Art des Wegpunktes (z. B. Gebäude, Schlagloch, Sehenswürdigkeit…)
-
-
- Einstellungen für My Tracks
- Anzeige
- Aufzeichnung
- Mit Freunden teilen
-
- In dieser Android-Version nicht verfügbar
-
- Dauer zwischen Ansagen
- Kürzeste Zeit zwischen zwei Ansagen
-
- Kleinste Entfernung zwischen Punkten
- Kleinste Entfernung zwischen zwei Positionsaufzeichnungen
-
- Neues Segment, wenn Punkte weiter entfernt als
- Der Track wird in zwei geteilt, wenn zwei folgende Punkte weiter entfernt sind als hier angegeben.
-
- Aufzeichnungsfrequenz
- Kürzeste Zeit zwischen zwei Positionsaufzeichnungen
-
- Aufzeichnung pausieren, wenn Genauigkeit kleiner als
- Die Aufzeichnung wird kurzfristig angehalten, wenn Deine Position nicht genauer als hier angegeben ermittelt werden kann.
-
- Entfernungen in metrischen Einheiten anzeigen
- Alle Entfernungen werden in metrischen Einheiten angezeigt.
- Alle Entfernungen werden in imperialen Längeneinheiten angezeigt.
-
- Karten auf maps.google.com veröffentlichen
- Hochgeladene Karten auf maps.google.com sind für alle sichtbar.
- Hochgeladene Karten auf maps.google.com werden nicht öffentlich sichtbar aufgelistet.
-
- Geschwindigkeitsanzeige
- Geschwindigkeit wird angezeigt.
- Pace wird angezeigt.
-
- Nur URL als Einladung zum Teilen senden
- Beim Teilen mit Freunden wird nur die Karten-URL gesendet.
- Beim Teilen mit Freunden wird der GPS-Track selbst gesendet.
-
- Zerteilungsfrequenz
- Längste Dauer oder Entfernung, nach der automatisch ein Marker eingefügt wird.
-
- Zeitbegrenzung der Auto-Wiederaufnahme
- Maximale Zeit in Minuten, nach der eine abgebrochene Aufzeichnung nach einem Telefonneustart wiederaufgenommen wird.
-
- Zeitstempel als Trackname
- Der Trackname wird aus Datum und Zeit zum Aufzeichnungsbeginn zusammengesetzt.
- Tracknamen erhalten eine fortlaufende Nummer.
-
- Pace
-
- Wird nur unter Android 2.0 oder höher unterstützt
- Sensortyp
+ Ein Link zur Google Fusion Tables-Karte
+ Eine GPX-Datei
+ Eine KML-Datei
+ Eine CSV-Datei
+ Eine TCX-Datei
+ Karte zurücksetzen.
+
+
+ Alle Wegpunkte löschen
+ Dieser Wegpunkt
+ Löschen
+ Details bearbeiten
+ Auf der Karte zeigen
+ Wegpunkt einfügen
+ Statistik einfügen
+ Wegpunkt auswählen. Lange berühren für mehr Optionen.
+
+
+ Trackdetails
+ Name
+ Beschreibung
+ Aktivität (z. B. Wandern, Fahrradfahren, Laufen, Klettern…)
+
+
+ Wegpunktdetails
+ Wegpunktname
+ Wegpunktbeschreibung
+ Art des Wegpunktes (z. B. Gebäude, Schlagloch, Sehenswürdigkeit…)
+
+
+ Einstellungen für My Tracks
+ Anzeige
+ Aufzeichnung
+ Mit Freunden teilen
+
+ In dieser Android-Version nicht verfügbar
+
+ Dauer zwischen Ansagen
+ Kürzeste Zeit zwischen zwei Ansagen
+
+ Kleinste Entfernung zwischen Punkten
+ Kleinste Entfernung zwischen zwei Positionsaufzeichnungen
+
+ Neues Segment, wenn Punkte weiter entfernt als
+ Der Track wird in zwei geteilt, wenn zwei folgende Punkte weiter entfernt sind als hier angegeben.
+
+ Aufzeichnungsfrequenz
+ Kürzeste Zeit zwischen zwei Positionsaufzeichnungen
+
+ Aufzeichnung pausieren, wenn Genauigkeit kleiner als
+ Die Aufzeichnung wird kurzfristig angehalten, wenn Deine Position nicht genauer als hier angegeben ermittelt werden kann.
+
+ Entfernungen in metrischen Einheiten anzeigen
+ Alle Entfernungen werden in metrischen Einheiten angezeigt.
+ Alle Entfernungen werden in imperialen Längeneinheiten angezeigt.
+
+ Karten auf maps.google.com veröffentlichen
+ Hochgeladene Karten auf maps.google.com sind für alle sichtbar.
+ Hochgeladene Karten auf maps.google.com werden nicht öffentlich sichtbar aufgelistet.
+
+ Geschwindigkeitsanzeige
+ Geschwindigkeit wird angezeigt.
+ Pace wird angezeigt.
+
+ Nur URL als Einladung zum Teilen senden
+ Beim Teilen mit Freunden wird nur die Karten-URL gesendet.
+ Beim Teilen mit Freunden wird der GPS-Track selbst gesendet.
+
+ Zerteilungsfrequenz
+ Längste Dauer oder Entfernung, nach der automatisch ein Marker eingefügt wird.
+
+ Zeitbegrenzung der Auto-Wiederaufnahme
+ Maximale Zeit in Minuten, nach der eine abgebrochene Aufzeichnung nach einem Telefonneustart wiederaufgenommen wird.
+
+ Zeitstempel als Trackname
+ Der Trackname wird aus Datum und Zeit zum Aufzeichnungsbeginn zusammengesetzt.
+ Tracknamen erhalten eine fortlaufende Nummer.
+
+ Pace
+
+ Wird nur unter Android 2.0 oder höher unterstützt
+ SensortypDer Typ des zu verbindenden SensorsVerbindung mit ANT Herzqrequenzmesser aufhebenVerbindung mit ANT Kraftmesser aufhebenVerbindung mit ANT srm bridge aufhebenANT-Sensor nicht verbundenANT-Sensor verbunden mit: %d
- Bluetooth-Sensor
- Der zu verbindende Bluetoothsensor
- Art der Datenanzeige
-
-
- Datensicherung (BETA)
- SD-Karten-Sicherung
- Jetzt sichern
- Eine Kopie aller Deiner Tracks und Einstellungen auf die SD-Karte schreiben
- Jetzt wiederherstellen
- Alle Tracks und Einstellungen von der SD-Karte holen.
- Während ein Track aufgezeichnet wird, kann nicht mit der Datensicherung gearbeitet werden.
-
- Eine Wiederherstellung von der SD-Karte ÜBERSCHREIBT alle vorhandenen Tracks und Einstellungen. Willst Du das wirklich?
- Wähle die wiederherzustellende Datensicherung aus
- Keine Datensicherungen gefunden.
- Schreibe alle Tracks und Einstellungen auf die SD-Karte. Dies kann eine Weile dauern...
- Lese alle Tracks und Einstellungen von der SD-Karte. Dies kann eine Weile dauern...
-
-
- GPS-Satelliten
+ Bluetooth-Sensor
+ Der zu verbindende Bluetoothsensor
+ Art der Datenanzeige
-
+
+ Datensicherung (BETA)
+ SD-Karten-Sicherung
+ Jetzt sichern
+ Eine Kopie aller Deiner Tracks und Einstellungen auf die SD-Karte schreiben
+ Jetzt wiederherstellen
+ Alle Tracks und Einstellungen von der SD-Karte holen.
+ Während ein Track aufgezeichnet wird, kann nicht mit der Datensicherung gearbeitet werden.
+
+ Eine Wiederherstellung von der SD-Karte ÜBERSCHREIBT alle vorhandenen Tracks und Einstellungen. Willst Du das wirklich?
+ Wähle die wiederherzustellende Datensicherung aus
+ Keine Datensicherungen gefunden.
+ Schreibe alle Tracks und Einstellungen auf die SD-Karte. Dies kann eine Weile dauern...
+ Lese alle Tracks und Einstellungen von der SD-Karte. Dies kann eine Weile dauern...
+
+
+ GPS-Satelliten
+
+
Karte mit Freunden teilen
- Ich möchte gerne eine Karte mit Dir teilen.
+ Ich möchte gerne eine Karte mit Dir teilen.Vielleicht interessierst Du Dich für diese Karte:
-
- %s
- Ich möchte einen GPS-Track mit Dir teilen
+
+ %s
+ Ich möchte einen GPS-Track mit Dir teilenVielleicht interessierst Du Dich für diese Track:
-
- %s.
+
+ Der Track kann mit Google Earth oder anderer Karten-Software visualisiert werden.
Track mit Freunden teilen
@@ -256,126 +261,145 @@ limitations under the License.
Nicht in Suchergebnissen enthalten.Du hast noch keine Karten.
-
-
- Durchschnitt in Bew.
- Pace in Bew.
-
-
- Durchschnittsgeschw.
- Durchschnitts-Pace
-
- Höhenprofil
- Höhengewinn
- Höhe
- Breitengrad
- Längengrad
-
-
- Niedrigste Höhenlage
- Minimale Steigung
- Minimaler Pace
-
-
- Höchste Höhenlage
- Maximale Steigung
- Max. Geschwindigkeit
-
- Lade Track…
-
-
- Diagramm-Einstellungen
-
- X-Achse
- Nach Entfernung
- Nach Zeit
-
-
- Y-Achse
-
-
-
- Stunde
- Stunden
- Std
- Minute
- Minuten
- Sekunde
- Sekunden
-
-
+
+
+ Durchschnitt in Bew.
+ Pace in Bew.
+
+
+ Durchschnittsgeschw.
+ Durchschnitts-Pace
+
+ Höhenprofil
+ Höhengewinn
+ Höhe
+ Breitengrad
+ Längengrad
+
+
+ Niedrigste Höhenlage
+ Minimale Steigung
+ Minimaler Pace
+
+
+ Höchste Höhenlage
+ Maximale Steigung
+ Max. Geschwindigkeit
+
+ Lade Track…
+
+
+ Diagramm-Einstellungen
+
+ X-Achse
+ Nach Entfernung
+ Nach Zeit
+
+
+ Y-Achse
+
+
+
+ Stunde
+ Stunden
+ Std
+ Min
+ Minute
+ Minuten
+ Sekunde
+ Sekunden
+
+
+
+
+
KilometerFuß
- Meilen
-
-
- Kilometer pro Stunde
- pro Kilometer
- Meilen pro Stunde
- pro Meile
+
+ Meilen
-
- Zeit in Bewegung
- Gesamtzeit
- Zeit
- SD-Karte nicht verfügbar
- Geschwindigkeit
- Du musst erst eine Aufzeichnung beginnen.
- Statistik
- Gesamtentfernung
- Entfernung
- Kraft
- Kadenz
- Herzfrequenz
- Höchste Herzfrequenz
- Bitte warten…
-
-
- Lizenzvereinbarung für Endverbraucher
- Akzeptieren
- Ablehnen
-
-
- Über
- Hilfe
+
+
+ Kilometer pro Stunde
+
+ pro Kilometer
+
+ Meilen pro Stunde
+
+ pro Meile
+
+
+
+
+
+
+
+
+ Zeit in Bewegung
+ Gesamtzeit
+ Zeit
+ SD-Karte nicht verfügbar
+ Geschwindigkeit
+ Du musst erst eine Aufzeichnung beginnen.
+ Statistik
+ Gesamtentfernung
+ Entfernung
+ Kraft
+ Kadenz
+ Herzfrequenz
+ Höchste Herzfrequenz
+
+ Bitte warten…
+
+
+ Lizenzvereinbarung für Endverbraucher
+ Akzeptieren
+ Ablehnen
+
+
+ Über
+ Hilfe
+
+
Unterstützung:Datenschutz:
-
+
Senden an…
+
Google Text & Tabellen
- Jetzt senden
- Trackstatistik senden
- Statistik und Punkte senden
-
-
- Kein Konto vorhanden
- Kein Konto gefunden, um Tracks zu versenden.
- Wähle ein Konto
-
-
- Keine externes Speichermedium verfügbar. Stelle sicher, dass eine SD-Karte vorhanden ist und nicht bereits von einem Computer darauf zugegriffen wird.
- Die Datei kann nicht geschrieben werden.
- Die Datei konnte nicht gelesen werden.
- Das Verzeichnis auf der SD-Karte kann nicht erstellt werden.
- Der Track wurde auf die SD-Karte geschrieben.
- Lesen von der SD-Karte beendet.
-
-
- Suche nach neuer Version
- Jetzt aktualisieren
- Fortfahren, ohne zu aktualisieren
- Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig und wird nicht mehr unterstützt. Bitte aktualisiere %1$s.
- Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig. Du kannst sie jetzt aktualisieren, oder auf sie auf eigene Gefahr weiterverwenden. Einige Funktionen wie Datenaustausch mit Google-Diensten werden möglicherweise nicht mehr funktionieren, solange Du die Software nicht aktualisierst.
- Eine neue Version von %1$s ist jetzt verfügbar. Du kannst Deine installierte Version ohne Probleme weiterverwenden, aber um die neuesten Funktionen in Anspruch nehmen zu können, musst Du die Software aktualisieren.
-
-
- Willkommen
+ Jetzt senden
+ Trackstatistik senden
+ Statistik und Punkte senden
+
+
+ Kein Konto vorhanden
+ Kein Konto gefunden, um Tracks zu versenden.
+ Wähle ein Konto
+
+
+ Keine externes Speichermedium verfügbar. Stelle sicher, dass eine SD-Karte vorhanden ist und nicht bereits von einem Computer darauf zugegriffen wird.
+ Die Datei kann nicht geschrieben werden.
+ Die Datei konnte nicht gelesen werden.
+ Das Verzeichnis auf der SD-Karte kann nicht erstellt werden.
+ Der Track wurde auf die SD-Karte geschrieben.
+ Lesen von der SD-Karte beendet.
+
+
+ Suche nach neuer Version
+ Jetzt aktualisieren
+ Fortfahren, ohne zu aktualisieren
+ Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig und wird nicht mehr unterstützt. Bitte aktualisiere %1$s.
+ Deine Version von %1$s funktioniert möglicherweise nicht mehr richtig. Du kannst sie jetzt aktualisieren, oder auf sie auf eigene Gefahr weiterverwenden. Einige Funktionen wie Datenaustausch mit Google-Diensten werden möglicherweise nicht mehr funktionieren, solange Du die Software nicht aktualisierst.
+ Eine neue Version von %1$s ist jetzt verfügbar. Du kannst Deine installierte Version ohne Probleme weiterverwenden, aber um die neuesten Funktionen in Anspruch nehmen zu können, musst Du die Software aktualisieren.
+
+
+ WillkommenOK
- Über My Tracks
-
-
- My Tracks keine Entfernung
+ Über My Tracks
+
+
+ My Tracks keine Entfernung
- My Tracks %1$s %2$.2f %3$s in %4$s mit %5$s %6$s
-
-
- Einheitenbenachrichtigung
- Voreingestellt sind metrische Einheiten. Willst Du diese Einstellung ändern?
-
+ -->
+ My Tracks %1$s %2$.2f %3$s in %4$s mit %5$s %6$s
+
+
+ Einheitenbenachrichtigung
+ Voreingestellt sind metrische Einheiten. Willst Du diese Einstellung ändern?
+
- Bluetooth-Einstellungen
- Geräteverbindung
- Öffnet Androids Bluetooth-Einstellungen, um Geräte zu verbinden.
- Sensor-Einstellungen
-
-
- Verbunden mit %s
- Verbinde mit Bluetooth-Sensor ...
- Bluetooth-Sensor nicht verbunden.
-
-
- Uhrzeit
- Kraftmesser aktiviert
- Herzfrequenzmessung aktiviert
- Keine Sensoren verfügbar
- Aktiviert
- Verbinde...
- Verbunden
- Getrennt
- Kein Sensor-Dienst
- Suche...
- Sende...
-
-
- Track-Aufzeichnungs-Benachrichtigungen empfangen
- Aufgezeichnete Trackdaten lesen
- Aufgezeichnete Trackdaten schreiben, Starten/Anhalten des Aufzeichnens von Tracks
- Werde benachrichtigt, wenn die Aufzeichnung eines Tracks beginnt oder anhält.
- Ermöglicht das Lesen von Trackdaten wie Messpunkten oder Wegpunkten.
- Ermöglicht das Schreiben von Trackdaten wie beim Starten der Aufzeichnung oder beim Hinzufügen von Wegpunkten.
-
+ Bluetooth
+ Bluetooth-Einstellungen
+ Geräteverbindung
+ Öffnet Androids Bluetooth-Einstellungen, um Geräte zu verbinden.
+
+ Sensor-Einstellungen
+
+
+ Verbunden mit %s
+ Verbinde mit Bluetooth-Sensor ...
+ Bluetooth-Sensor nicht verbunden.
+
+
+ Uhrzeit
+ Kraftmesser aktiviert
+ Herzfrequenzmessung aktiviert
+ Keine Sensoren verfügbar
+ Aktiviert
+ Verbinde...
+ Verbunden
+ Getrennt
+ Kein Sensor-Dienst
+ Suche...
+ Sende...
+
+
+ Track-Aufzeichnungs-Benachrichtigungen empfangen
+ Aufgezeichnete Trackdaten lesen
+ Aufgezeichnete Trackdaten schreiben, Starten/Anhalten des Aufzeichnens von Tracks
+ Werde benachrichtigt, wenn die Aufzeichnung eines Tracks beginnt oder anhält.
+ Ermöglicht das Lesen von Trackdaten wie Messpunkten oder Wegpunkten.
+ Ermöglicht das Schreiben von Trackdaten wie beim Starten der Aufzeichnung oder beim Hinzufügen von Wegpunkten.
+
diff --git a/MyTracks/res/values-es/strings.xml b/MyTracks/res/values-es/strings.xml
index e4cc06155..f9e786542 100644
--- a/MyTracks/res/values-es/strings.xml
+++ b/MyTracks/res/values-es/strings.xml
@@ -212,7 +212,6 @@ limitations under the License.
Hacer una copia total de sus recorridos y configuraciones a la tarjeta SDRestaurarRestaurar todos los recorridos y configuraciones desde la tarjeta SD
- No se pueden manejar backups mientras se está registrando un recorrido.Restaurar un backup desde la tarjeta SD SOBREESCRIBIRÁ todos sus recorridos y configuraciones actuales. ¿Está usted seguro?Seleccionar el backup para restaurar
diff --git a/MyTracks/res/values-fr/strings.xml b/MyTracks/res/values-fr/strings.xml
index 86c470297..f2e634c30 100644
--- a/MyTracks/res/values-fr/strings.xml
+++ b/MyTracks/res/values-fr/strings.xml
@@ -213,8 +213,6 @@ limitations under the License.
Copier tous vos parcours et paramètres sur la carte SDRestaurerRestaurer tous les parcours et paramètres depuis la carte SD
- Sauvegarde impossible lors de l\'enregistrement d\'un parcours.
-
Restaurer une sauvegarde depuis la carte SD écrasera tous vos parcours et paramètres actuels.Choisissez la sauvegarde à restaurer
diff --git a/MyTracks/res/values-ja/arrays.xml b/MyTracks/res/values-ja/arrays.xml
index a3b6e1fde..582056996 100644
--- a/MyTracks/res/values-ja/arrays.xml
+++ b/MyTracks/res/values-ja/arrays.xml
@@ -287,4 +287,11 @@ limitations under the License.
噴水ウェイポイント
+
+
+ なし
+ ANT+ センサー
+ SRM ANT+ ブリッジ
+ Zephyr Bluetooth
+
diff --git a/MyTracks/res/values-ja/strings.xml b/MyTracks/res/values-ja/strings.xml
index 52719208a..2a8023462 100644
--- a/MyTracks/res/values-ja/strings.xml
+++ b/MyTracks/res/values-ja/strings.xml
@@ -35,6 +35,7 @@ limitations under the License.
この端末でロケーションマネージャを発見できませんでした.この端末でGPSロケーションプロバイダを発見できました.
+ Googleマイマップへのトラック送信でエラーが発生しました.しばらく待って試して下さい.Google Fusion Tablesへのトラック送信でエラーが発生しました.しばらく待って試して下さい.Google Docsへのトラック送信でエラーが発生しました.しばらく待って試して下さい.記録作成開始できません.もう一度試して下さい.
@@ -50,11 +51,13 @@ limitations under the License.
GPS位置精度がよくなるまで待機しています.空が見えるところにいて下さい.新しいトラックを記録中です.トラック記録を停止しました.
+ 新しいマイマップをmap.google.comに作成しました.新しいGoogle Fusion Tableをgoogle.com/fusiontablesに作成しました.トラックをmaps.google.comに送信しました.トラックをdocs.google.comの新しいスプレッドシートに送信しました.トラックをdocs.google.comに送信しました.
- ここをタップして「位置情報とセキュリティの設定」を開いて「GPS機能を使用」にチェックして下さい.バックボタンで戻ってください.
+ 新しいトラックが表示されるまでに数分かかることがあります.
+ ここをタップして「位置情報とセキュリティの設定」を開いて「GPS機能を使用」にチェックを入れて下さい.バックボタンで戻ってください.ご注意: 携帯電話中継局とWi-Fiネットワークから大まかな位置を特定します.現在位置決定ができません.位置取得源を増やし(位置情報とセキュリティの設定 をご覧ください)、空が見えるようにして下さい.もう一度試して下さい.ウェイポイントマーカーを挿入しました.
@@ -62,14 +65,17 @@ limitations under the License.
お待ちください...
- トラックをGoogleに送信しました.
+ トラックをGoogleに送信しています.トラックを読んでいます...トラックを準備しています...Google Fusion Tablesへの認証を行っています...
+ Googleマップへの認証を行っています...Google Docsへの認証を行っています...トラックをGoogle Docsに送信しています...
+ トラックをGoogleマップに送信しています...
+ 新しいマイマップを作成しています...トラックをFusion Tablesに送信しています...
- 新しいFusion Tablesを生成しています...
+ 新しいFusionテーブルを生成しています...GPSトラックをインポートしています.若干時間がかかります.SDカードにデータを書き込んでいます.若干時間がかかります.トラック統計情報を更新しています...
@@ -84,6 +90,10 @@ limitations under the License.
Android用My Tracksで作成Android用<a href=\'http://mytracks.appspot.com\'>My Tracks</a>で作成しました.
+
+ Android用<a href=\'http://mytracks.appspot.com\'>My Tracks</a>で作成しました.
+ 新規マップ
+
ポイント記録日
@@ -113,10 +123,12 @@ limitations under the License.
表示
- Google Fusion Tablesへ送信
- 新規Google Fusion Tableへ送信
- Google Docsへ送信
- Googleへ送信...
+ Googleマイマップに送信
+ 新規Googleマイマップに送信
+ Google Fusion Tablesに送信
+ 新規Google Fusion Tableに送信
+ Google Docsに送信
+ Googleに送信...端末から削除...詳細編集SDへの書き込み...
@@ -124,20 +136,33 @@ limitations under the License.
KMLファイルの保存CVSファイルの保存TCXファイルの保存
- Google Fusion Tablesへの送信
- 全トラックの削除
+ Google Fusion Tablesに送信
+ Googleマイマップに送信
+ 全て削除
- 全トラックの出力
+ 全て出力出力終了トラックを選択します.オプションを表示するには長押しして下さい.
- 全てのトラック:
+ 全トラック:このトラック共有...
+ マップへのリンクGPXファイルKMLファイルCSVファイルTCXファイル
- マップの消去
+ マップのクリア
+
+ 全てインポート
+ インポート終了
+
+ %3$s からGPXファイル %2$d件のうち %1$d件をインポートしました
+ %s ではGPXファイルがありません.SDカードを読み込めないかディレクトリにGPXファイルが無いかも知れません.
+ ファイル %s のインポートエラー全てのマーカーの削除
@@ -190,7 +215,7 @@ limitations under the License.
マップの公開アップロードされたマップはmaps.google.comで誰でも閲覧できます
- アップロードされたマップはmaps.google.comのリストに公開されません.
+ アップロードされたマップはmaps.google.comのリストに公開されません速度表示速度が表示されます
@@ -231,7 +256,6 @@ limitations under the License.
SDカードに全てのトラックと設定をバックアップします今すぐ復元SDカードから全てのトラックと設定を復元します
- トラック記録中はバックアップ操作はできません.SDカードからの復元を実行すると、現在のトラックと設定は *全て上書き* されてしまいます.よろしいですか?復元するバックアップの選択
@@ -242,6 +266,23 @@ limitations under the License.
GPS衛星
+
+ アカウントからのマップ選択:
+ 新規マップ作成...
+ Googleマイマップに送信
+ マップをロード中...
+ 今回はマップをロードできませんでした!
+ このマップを選択
+ マップ詳細編集
+ トラック共有
+ アカウントからマップを削除
+ マップタイトル:
+ マップ説明:
+ このマップまたはコンテンツを検索結果に表示
+ このマップまたはコンテンツを検索結果に表示しない(直接URLで見られる可能性があります)
+ このマップまたはコンテンツは検索結果に表示されます
+ このマップもコンテンツも検索結果に表示されませんが、直接リンクで見られる可能性があります
+
マップ共有マップを共有したいと思います
@@ -332,7 +373,6 @@ limitations under the License.
ケイデンス心拍数最大心拍数
- -待機中...
@@ -350,8 +390,10 @@ limitations under the License.
送信...
- Googleマイマップ
+ Googleマイマップ今すぐ送信
+ 新規マップ作成
+ 既存マップ選択トラック統計情報送信統計情報とポイント送信
@@ -364,7 +406,7 @@ limitations under the License.
外部ストレージを発見できませんでした.SDカードが刺さっているか、端末がコンピュータにマウントされていないか確認してください.ファイルへの書き込みができません.ファイルからの読み込みができません.
- SDカードにディレクトリを作成できません.
+ SDカード上でディレクトリを作成できません.SDカードへの書き込み終了.SDカードからの読み込み終了.
@@ -397,11 +439,11 @@ limitations under the License.
デフォルトの単位はメートルです.設定を変更しますか?
-
Bluetoothオプションペアリングペアリングを行うには「Bluetooth設定」を開いて下さいbluetoothSensorsEnabled
+ ANTオプションセンサーオプション
@@ -425,7 +467,7 @@ limitations under the License.
トラック記録通知受信トラック読み込み
- トラック書き込み トラック記録の開始・終了
+ トラック書き込みとトラック記録の開始・終了トラック記録の開始・終了時に通知されます.ポイントやウェイポイントといったトラックの読み込みを可能にします.記録開始やウェイポイント追加といったトラック記録を可能にします.
diff --git a/MyTracks/res/values-pl/strings.xml b/MyTracks/res/values-pl/strings.xml
index 63b9cde9c..d019ce3b4 100644
--- a/MyTracks/res/values-pl/strings.xml
+++ b/MyTracks/res/values-pl/strings.xml
@@ -217,7 +217,6 @@ limitations under the License.
Tworzy kopię zapasową wszystkich tras i ustawień i zapisuje je na karcie SDOdtwórz z kopiiOdtwarza wszystkie trasy i ustawienia z kopii zapasowej z karty SD
- Nie można tworzyć/odtwarzać kopii zapasowej podczas rejestrowania trasy.Odtworzenie z kopii zapasowej z karty SD zastąpi wszystkie bieżące trasy i ustawienia. Jesteś tego pewien?
diff --git a/MyTracks/res/values-pt-rBR/strings.xml b/MyTracks/res/values-pt-rBR/strings.xml
index f9ee674ca..2f60a4a9c 100644
--- a/MyTracks/res/values-pt-rBR/strings.xml
+++ b/MyTracks/res/values-pt-rBR/strings.xml
@@ -157,6 +157,8 @@ limitations under the License.
ExibiçãoGravaçãoCompartilhamento
+ Não disponível na sua versão do Android
+ Não disponível durante a gravação de uma trilhaTempo entre anúnciosTempo mínimo entre dois anúncios de vozDist. mín. entre pontos
diff --git a/MyTracks/res/values-zh-rCN/strings.xml b/MyTracks/res/values-zh-rCN/strings.xml
index 0da162428..befedd9c7 100644
--- a/MyTracks/res/values-zh-rCN/strings.xml
+++ b/MyTracks/res/values-zh-rCN/strings.xml
@@ -219,7 +219,6 @@ limitations under the License.
将你所有轨迹和设置的完整备份写入到 SD 存储卡立即恢复从 SD 存储卡恢复所有轨迹和设置
- 在记录轨迹时无法处理备份数据.从 SD 存储卡恢复备份数据将覆盖掉你当前的所有轨迹和设置. 确定要继续吗?
diff --git a/MyTracks/res/values/do_not_translate.xml b/MyTracks/res/values/do_not_translate.xml
index 861738bf7..116175d63 100644
--- a/MyTracks/res/values/do_not_translate.xml
+++ b/MyTracks/res/values/do_not_translate.xml
@@ -34,4 +34,9 @@ limitations under the License.
ANTSRM_ANT_BRIDGEZEPHYR
+
+
+ google.com/fusiontables
+ maps.google.com
+ docs.google.com
diff --git a/MyTracks/res/values/keys.xml b/MyTracks/res/values/keys.xml
index 54c476596..01f56da24 100644
--- a/MyTracks/res/values/keys.xml
+++ b/MyTracks/res/values/keys.xml
@@ -50,8 +50,7 @@ limitations under the License.
backupToSdrestoreFromSd
-
-
+ resetToDefaultssensorOptionsantOptions
diff --git a/MyTracks/res/values/strings.xml b/MyTracks/res/values/strings.xml
index 40eca8a08..8d7c37b0f 100644
--- a/MyTracks/res/values/strings.xml
+++ b/MyTracks/res/values/strings.xml
@@ -35,9 +35,10 @@ limitations under the License.
No location manager was found on this device!No GPS location provider was found on this device.
- There was an error while sending your track to Google My Map. Please try again later.
- There was an error while sending your track to Google Fusion Tables. Please try again later.
- There was an error while sending your track to Google Docs. Please try again later.
+ There was an error while sending your track to Google My Map.
+ There was an error while sending your track to Google Fusion Tables.
+ There was an error while sending your track to Google Docs.
+ Please try again later.Unable to start recording. Try again.Unable to stop recording. Try again.Unable to read from file.
@@ -56,12 +57,13 @@ limitations under the License.
Your track has been sent to maps.google.com.Your track has been sent to a new spreadsheet at docs.google.com.Your track has been sent to docs.google.com.
- It may sometimes take a few minutes before new tracks appear.
+ It may take a few minutes before new tracks appear.Please tap here to go to Security and Location Settings and check \'enable GPS satellites\'. Press back button to return.Note: An approximate location as determined from cell towers and WIFI networks is shown.A location can currently not be determined. Enable more location sources (see Security and Location Settings) and make sure the sky is visible. Try again later.A way point marker was inserted.A statistics marker was inserted.
+ Upload status:Please wait...
@@ -194,6 +196,7 @@ limitations under the License.
SharingNot available in your version of Android
+ Not available while recording a trackAnnouncement frequencyMinimum time between two voice announcements
@@ -236,6 +239,11 @@ limitations under the License.
The default track name will be the date and time at the start of the trackTrack names will have numbers which increment for each new track.
+ Reset to defaults
+ Revert all your settings to the default values
+ All your settings will be erased and reverted to the default values. Saved tracks will be preserved. Are you sure?
+ All settings have been reverted to their defaults.
+
PaceOnly supported in Android 2.0 or above
@@ -257,7 +265,6 @@ limitations under the License.
Write a full copy of all your tracks and settings to the SD cardRestore nowRestore all tracks and settings from the SD card
- Cannot manipulate backups while recording a track.Restoring a backup from the SD card will OVERWRITE all your current tracks and settings. Are you sure?Select the backup to restore
@@ -276,7 +283,7 @@ limitations under the License.
Your maps could not be loaded at this time!Select this MapEdit Map Details
- Share Track with Friends
+ Share TrackDelete Map from your AccountMap Title:Map Description:
@@ -295,7 +302,6 @@ limitations under the License.
I think you might be interested in this track.
To view this track use Google Earth or other mapping software.
- Share track with friendsPublic
diff --git a/MyTracks/res/xml/preferences.xml b/MyTracks/res/xml/preferences.xml
index f377cf863..e4d0b093f 100644
--- a/MyTracks/res/xml/preferences.xml
+++ b/MyTracks/res/xml/preferences.xml
@@ -173,4 +173,11 @@ limitations under the License.
android:persistent="false" />
+
+
+
diff --git a/MyTracks/src/com/google/android/apps/mytracks/DialogManager.java b/MyTracks/src/com/google/android/apps/mytracks/DialogManager.java
index 740534e84..57c107a97 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/DialogManager.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/DialogManager.java
@@ -1,12 +1,12 @@
/*
* Copyright 2010 Google Inc.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -15,20 +15,22 @@
*/
package com.google.android.apps.mytracks;
+import static com.google.android.apps.mytracks.Constants.TAG;
+
+import com.google.android.apps.mytracks.io.sendtogoogle.SendDialog;
import com.google.android.maps.mytracks.R;
+import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
-import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
-import android.view.View;
import android.view.WindowManager.BadTokenException;
/**
* A class to handle all dialog related events for My Tracks.
- *
+ *
* @author Sandor Dornbush
*/
public class DialogManager {
@@ -37,14 +39,12 @@ public class DialogManager {
public static final int DIALOG_IMPORT_PROGRESS = 2;
public static final int DIALOG_PROGRESS = 3;
public static final int DIALOG_SEND_TO_GOOGLE = 4;
- public static final int DIALOG_SEND_TO_GOOGLE_RESULT = 5;
- public static final int DIALOG_WRITE_PROGRESS = 6;
+ public static final int DIALOG_WRITE_PROGRESS = 5;
private ProgressDialog progressDialog;
private ProgressDialog importProgressDialog;
private ProgressDialog writeProgressDialog;
- private SendToGoogleDialog sendToGoogleDialog;
- private AlertDialog sendToGoogleResultDialog;
+ private SendDialog sendToGoogleDialog;
private ChartSettingsDialog chartSettingsDialog;
private MyTracks activity;
@@ -52,7 +52,7 @@ public class DialogManager {
public DialogManager(MyTracks activity) {
this.activity = activity;
}
-
+
protected Dialog onCreateDialog(int id, Bundle args) {
switch (id) {
case DIALOG_CHART_SETTINGS:
@@ -77,26 +77,8 @@ public class DialogManager {
progressDialog.setProgress(10);
return progressDialog;
case DIALOG_SEND_TO_GOOGLE:
- sendToGoogleDialog = new SendToGoogleDialog(activity);
+ sendToGoogleDialog = new SendDialog(activity);
return sendToGoogleDialog;
- case DIALOG_SEND_TO_GOOGLE_RESULT:
- AlertDialog.Builder builder = new AlertDialog.Builder(activity);
- builder.setIcon(android.R.drawable.ic_dialog_info);
- builder.setTitle("Title");
- builder.setMessage("Message");
- builder.setPositiveButton(activity.getString(R.string.ok), null);
- builder.setNeutralButton(activity.getString(R.string.share_track),
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- SendToGoogleDialog sendToGoogleDialog = getSendToGoogleDialog();
- final boolean sentToMyMaps = sendToGoogleDialog.getSendToMyMaps();
- final boolean sentToFusionTables = sendToGoogleDialog.getSendToFusionTables();
- activity.shareLinkToMap(sentToMyMaps, sentToFusionTables);
- dialog.dismiss();
- }
- });
- sendToGoogleResultDialog = builder.create();
- return sendToGoogleResultDialog;
case DIALOG_WRITE_PROGRESS:
writeProgressDialog = new ProgressDialog(activity);
writeProgressDialog.setIcon(android.R.drawable.ic_dialog_info);
@@ -115,26 +97,8 @@ public class DialogManager {
case DIALOG_SEND_TO_GOOGLE:
activity.resetSendToGoogleStatus();
break;
- case DIALOG_SEND_TO_GOOGLE_RESULT:
- boolean success = activity.getSendToGoogleSuccess();
- sendToGoogleResultDialog.setTitle(
- success ? R.string.success : R.string.error);
- sendToGoogleResultDialog.setIcon(success
- ? android.R.drawable.ic_dialog_info
- : android.R.drawable.ic_dialog_alert);
- sendToGoogleResultDialog.setMessage(activity.getSendToGoogleResultMessage());
-
- boolean canShare =
- activity.getSendToFusionTablesTableId() != null &&
- activity.getSendToMyMapsMapId() != null;
- View share =
- sendToGoogleResultDialog.findViewById(android.R.id.button3);
- if (share != null) {
- share.setVisibility(canShare ? View.VISIBLE : View.GONE);
- }
- break;
case DIALOG_CHART_SETTINGS:
- Log.d(Constants.TAG, "MyTracks.onPrepare chart dialog");
+ Log.d(TAG, "MyTracks.onPrepare chart dialog");
chartSettingsDialog.setup(activity.getChartActivity());
break;
}
@@ -151,7 +115,7 @@ public class DialogManager {
}
});
}
-
+
public void setProgressValue(final int percent) {
activity.runOnUiThread(new Runnable() {
public void run() {
@@ -167,7 +131,7 @@ public class DialogManager {
/**
* @return the sendToGoogleDialog
*/
- public SendToGoogleDialog getSendToGoogleDialog() {
+ public SendDialog getSendToGoogleDialog() {
return sendToGoogleDialog;
}
@@ -196,9 +160,9 @@ public class DialogManager {
}
/**
- * Just like showDialog, but will catch a BadTokenException that sometimes
- * (very rarely) gets thrown. This might happen if the user hits the "back"
- * button immediately after sending tracks to google.
+ * Just like showDialog, but will catch a {@link BadTokenException} that
+ * sometimes (very rarely) gets thrown. This might happen if the user hits
+ * the "back" button immediately after sending tracks to google.
*
* @param id the dialog id
*/
@@ -208,11 +172,27 @@ public class DialogManager {
try {
activity.showDialog(id);
} catch (BadTokenException e) {
- Log.w(Constants.TAG,
- "Could not display dialog with id " + id, e);
+ Log.w(TAG, "Could not display dialog with id " + id, e);
} catch (IllegalStateException e) {
- Log.w(Constants.TAG,
- "Could not display dialog with id " + id, e);
+ Log.w(TAG, "Could not display dialog with id " + id, e);
+ }
+ }
+ });
+ }
+
+ /**
+ * The equivalent of {@link #showDialogSafely(int)}, but for a specific
+ * dialog instance.
+ */
+ public static void showDialogSafely(Activity activity, final Dialog dialog) {
+ activity.runOnUiThread(new Runnable() {
+ public void run() {
+ try {
+ dialog.show();
+ } catch (BadTokenException e) {
+ Log.w(TAG, "Could not display dialog", e);
+ } catch (IllegalStateException e) {
+ Log.w(TAG, "Could not display dialog", e);
}
}
});
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java b/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java
index 949c90026..7b74ac606 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java
@@ -18,9 +18,8 @@ package com.google.android.apps.mytracks;
import com.google.android.accounts.Account;
import com.google.android.apps.mytracks.io.AuthManager;
import com.google.android.apps.mytracks.io.AuthManagerFactory;
-import com.google.android.apps.mytracks.io.MyMapsFactory;
import com.google.android.apps.mytracks.io.mymaps.MapsFacade;
-import com.google.android.apps.mytracks.io.mymaps.MapsService;
+import com.google.android.apps.mytracks.io.mymaps.MyMapsConstants;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
@@ -84,7 +83,7 @@ public class MyMapsList extends Activity implements MapsFacade.MapsListCallback
super.onCreate(icicle);
auth = AuthManagerFactory.getAuthManager(this, GET_LOGIN, null, true,
- MapsService.getServiceName());
+ MyMapsConstants.SERVICE_NAME);
setContentView(R.layout.list);
@@ -125,7 +124,7 @@ public class MyMapsList extends Activity implements MapsFacade.MapsListCallback
auth.doLogin(new Runnable() {
public void run() {
// Runs in UI thread.
- mapsClient = MyMapsFactory.newMapsClient(MyMapsList.this, auth);
+ mapsClient = new MapsFacade(MyMapsList.this, auth);
startLookup();
}
@@ -200,7 +199,7 @@ public class MyMapsList extends Activity implements MapsFacade.MapsListCallback
shareIntent.putExtra(Intent.EXTRA_TEXT, String.format(
getText(R.string.share_map_body_format).toString(),
listItem[1],
- MapsService.buildMapUrl(listItem[0])));
+ MapsFacade.buildMapUrl(listItem[0])));
startActivity(Intent.createChooser(shareIntent,
getText(R.string.share_map).toString()));
return true;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracks.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracks.java
index 75c069677..486fa5022 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyTracks.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracks.java
@@ -15,6 +15,7 @@
*/
package com.google.android.apps.mytracks;
+import static com.google.android.apps.mytracks.Constants.TAG;
import static com.google.android.apps.mytracks.DialogManager.DIALOG_IMPORT_PROGRESS;
import static com.google.android.apps.mytracks.DialogManager.DIALOG_PROGRESS;
import static com.google.android.apps.mytracks.DialogManager.DIALOG_SEND_TO_GOOGLE;
@@ -35,7 +36,12 @@ import com.google.android.apps.mytracks.io.TempFileCleaner;
import com.google.android.apps.mytracks.io.TrackWriter;
import com.google.android.apps.mytracks.io.TrackWriterFactory;
import com.google.android.apps.mytracks.io.TrackWriterFactory.TrackFileFormat;
-import com.google.android.apps.mytracks.io.mymaps.MapsService;
+import com.google.android.apps.mytracks.io.mymaps.MapsFacade;
+import com.google.android.apps.mytracks.io.mymaps.MyMapsConstants;
+import com.google.android.apps.mytracks.io.sendtogoogle.ResultDialogFactory;
+import com.google.android.apps.mytracks.io.sendtogoogle.SendDialog;
+import com.google.android.apps.mytracks.io.sendtogoogle.SendResult;
+import com.google.android.apps.mytracks.io.sendtogoogle.SendType;
import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.StatusAnnouncerFactory;
import com.google.android.apps.mytracks.services.TrackRecordingService;
@@ -81,7 +87,9 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
@@ -188,7 +196,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
@Override
public void onServiceDisconnected(ComponentName className) {
- Log.d(Constants.TAG, "MyTracks: Service now disconnected.");
+ Log.d(TAG, "MyTracks: Service now disconnected.");
trackRecordingService = null;
}
};
@@ -233,7 +241,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
// TODO: We catch Exception, because after eliminating the service process
// all exceptions it may throw are no longer wrapped in a RemoteException.
} catch (Exception e) {
- Log.e(Constants.TAG, "MyTracks: Remote exception.", e);
+ Log.e(TAG, "MyTracks: Remote exception.", e);
// Fall back to alternative check method.
return isRecordingBasedOnSharedPreferences();
@@ -253,7 +261,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
@Override
protected void onCreate(Bundle savedInstanceState) {
- Log.d(Constants.TAG, "MyTracks.onCreate");
+ Log.d(TAG, "MyTracks.onCreate");
super.onCreate(savedInstanceState);
instance = this;
ApiFeatures apiFeatures = ApiFeatures.getInstance();
@@ -310,7 +318,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
recordingTrackId = sharedPreferences.getLong(
getString(R.string.recording_track_key), -1);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
- Log.d(Constants.TAG, "recordingTrackId: " + recordingTrackId
+ Log.d(TAG, "recordingTrackId: " + recordingTrackId
+ ", selectedTrackId: " + selectedTrackId);
if (recordingTrackId > 0) {
Intent startIntent = new Intent(this, TrackRecordingService.class);
@@ -329,26 +337,22 @@ public class MyTracks extends TabActivity implements OnTouchListener,
// Do nothing.
} else if (action.equals(Intent.ACTION_VIEW)) {
if (intent.getScheme() != null && intent.getScheme().equals("file")) {
- Log.w(Constants.TAG,
- "Received a VIEW intent with file scheme. Importing.");
+ Log.w(TAG, "Received a VIEW intent with file scheme. Importing.");
importGpxFile(intent.getData().getPath());
} else {
- Log.w(Constants.TAG,
- "Received a VIEW intent with unsupported scheme "
- + intent.getScheme());
+ Log.w(TAG, "Received a VIEW intent with unsupported scheme " + intent.getScheme());
}
} else {
- Log.w(Constants.TAG,
- "Received an intent with unsupported action " + action);
+ Log.w(TAG, "Received an intent with unsupported action " + action);
}
} else {
- Log.d(Constants.TAG, "Received an intent with no action.");
+ Log.d(TAG, "Received an intent with no action.");
}
}
@Override
protected void onDestroy() {
- Log.d(Constants.TAG, "MyTracks.onDestroy");
+ Log.d(TAG, "MyTracks.onDestroy");
tryUnbindTrackRecordingService();
super.onDestroy();
}
@@ -357,7 +361,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
protected void onPause() {
// Called when activity is going into the background, but has not (yet) been
// killed. Shouldn't block longer than approx. 2 seconds.
- Log.d(Constants.TAG, "MyTracks.onPause");
+ Log.d(TAG, "MyTracks.onPause");
tryUnbindTrackRecordingService();
super.onPause();
}
@@ -366,14 +370,14 @@ public class MyTracks extends TabActivity implements OnTouchListener,
protected void onResume() {
// Called when the current activity is being displayed or re-displayed
// to the user.
- Log.d(Constants.TAG, "MyTracks.onResume");
+ Log.d(TAG, "MyTracks.onResume");
tryBindTrackRecordingService();
super.onResume();
}
@Override
protected void onStop() {
- Log.d(Constants.TAG, "MyTracks.onStop");
+ Log.d(TAG, "MyTracks.onStop");
// Clean up any temporary track files.
TempFileCleaner.clean();
super.onStop();
@@ -437,9 +441,9 @@ public class MyTracks extends TabActivity implements OnTouchListener,
try {
insertWaypoint(WaypointCreationRequest.DEFAULT_STATISTICS);
} catch (RemoteException e) {
- Log.e(Constants.TAG, "Cannot insert statistics marker.", e);
+ Log.e(TAG, "Cannot insert statistics marker.", e);
} catch (IllegalStateException e) {
- Log.e(Constants.TAG, "Cannot insert statistics marker.", e);
+ Log.e(TAG, "Cannot insert statistics marker.", e);
}
return true;
}
@@ -600,7 +604,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
Track selectedTrack = providerUtils.getTrack(selectedTrackId);
if (selectedTrack != null) {
if (!TextUtils.isEmpty(selectedTrack.getMapId())) {
- shareLinkToMap(MapsService.buildMapUrl(selectedTrack.getMapId()));
+ shareLinkToMap(MapsFacade.buildMapUrl(selectedTrack.getMapId()));
} else if (!TextUtils.isEmpty(selectedTrack.getTableId())) {
shareLinkToMap(getFusionTablesUrl(selectedTrackId));
} else {
@@ -640,8 +644,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
}
default: {
- Log.w(Constants.TAG,
- "Warning unhandled request code: " + requestCode);
+ Log.w(TAG, "Warning unhandled request code: " + requestCode);
}
}
}
@@ -695,19 +698,19 @@ public class MyTracks extends TabActivity implements OnTouchListener,
InputStream is = new FileInputStream(fileName);
trackIdsImported = GpxImporter.importGPXFile(is, providerUtils);
} catch (SAXException e) {
- Log.e(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.e(TAG, "Caught an unexpected exception.", e);
message = R.string.error_generic;
} catch (ParserConfigurationException e) {
- Log.e(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.e(TAG, "Caught an unexpected exception.", e);
message = R.string.error_generic;
} catch (IOException e) {
- Log.e(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.e(TAG, "Caught an unexpected exception.", e);
message = R.string.error_unable_to_read_file;
} catch (NullPointerException e) {
- Log.e(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.e(TAG, "Caught an unexpected exception.", e);
message = R.string.error_invalid_gpx_format;
} catch (OutOfMemoryError e) {
- Log.e(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.e(TAG, "Caught an unexpected exception.", e);
message = R.string.error_out_of_memory;
}
if (trackIdsImported != null && trackIdsImported.length > 0) {
@@ -870,8 +873,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
final String service) {
auth = authMap.get(service);
if (auth == null) {
- Log.i(Constants.TAG,
- "Creating a new authentication for service: " + service);
+ Log.i(TAG, "Creating a new authentication for service: " + service);
auth = AuthManagerFactory.getAuthManager(this,
Constants.GET_LOGIN,
null,
@@ -879,7 +881,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
service);
authMap.put(service, auth);
}
- Log.d(Constants.TAG, "Logging in to " + service + "...");
+ Log.d(TAG, "Logging in to " + service + "...");
if (AuthManagerFactory.useModernAuthManager()) {
runOnUiThread(new Runnable() {
@Override
@@ -906,7 +908,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
final String service, final Account account) {
auth.doLogin(new Runnable() {
public void run() {
- Log.d(Constants.TAG, "Loggin success for " + service + "!");
+ Log.d(TAG, "Loggin success for " + service + "!");
onActivityResult(requestCode, RESULT_OK, results);
}
}, account);
@@ -926,7 +928,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
Toast.makeText(this,
getString(R.string.error_unable_to_start_recording),
Toast.LENGTH_SHORT).show();
- Log.w(Constants.TAG, "Unable to start recording.", e);
+ Log.w(TAG, "Unable to start recording.", e);
}
}
@@ -958,7 +960,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
// TODO: We catch Exception, because after eliminating the service process
// all exceptions it may throw are no longer wrapped in a RemoteException.
} catch (Exception e) {
- Log.e(Constants.TAG, "Unable to stop recording.", e);
+ Log.e(TAG, "Unable to stop recording.", e);
}
Intent intent = new Intent(MyTracks.this, TrackDetails.class);
intent.putExtra("trackid", currentTrackId);
@@ -969,8 +971,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
try {
stopService(new Intent(MyTracks.this, TrackRecordingService.class));
} catch (SecurityException e) {
- Log.e(Constants.TAG,
- "Encountered a security exception when trying to stop service.", e);
+ Log.e(TAG, "Encountered a security exception when trying to stop service.", e);
}
trackRecordingService = null;
}
@@ -983,7 +984,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
* TODO: Change this whole flow to an actual state machine.
*/
public void sendToGoogle() {
- SendToGoogleDialog sendToGoogleDialog =
+ SendDialog sendToGoogleDialog =
dialogManager.getSendToGoogleDialog();
if (sendToGoogleDialog == null) {
return;
@@ -999,12 +1000,12 @@ public class MyTracks extends TabActivity implements OnTouchListener,
} else if (sendToGoogleDialog.getSendToDocs()) {
authenticateToGoogleDocs();
} else {
- Log.w(Constants.TAG, "Nowhere to upload to");
+ Log.w(TAG, "Nowhere to upload to");
onSendToGoogleDone();
}
}
- private void sendToGoogleMapsOrPickMap(SendToGoogleDialog sendToGoogleDialog) {
+ private void sendToGoogleMapsOrPickMap(SendDialog sendToGoogleDialog) {
if (!sendToGoogleDialog.getCreateNewMap()) {
// Ask the user to choose a map to upload into
Intent listIntent = new Intent(this, MyMapsList.class);
@@ -1022,7 +1023,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
setProgressMessage(
R.string.progress_message_authenticating_mymaps);
authenticate(results, Constants.AUTHENTICATE_TO_MY_MAPS,
- MapsService.getServiceName());
+ MyMapsConstants.SERVICE_NAME);
// AUTHENTICATE_TO_MY_MAPS callback calls sendToGoogleMaps
}
@@ -1042,7 +1043,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
} catch (RuntimeException e) {
// If that fails whatever reasons we'll just log an error, but
// continue.
- Log.w(Constants.TAG, "Updating map id failed.", e);
+ Log.w(TAG, "Updating map id failed.", e);
}
}
@@ -1059,7 +1060,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
}
private void onSendToGoogleMapsDone() {
- SendToGoogleDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
+ SendDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
if (sendToGoogleDialog.getSendToFusionTables()) {
authenticateToFusionTables(null);
} else if (sendToGoogleDialog.getSendToDocs()) {
@@ -1096,7 +1097,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
} catch (RuntimeException e) {
// If that fails whatever reasons we'll just log an error, but
// continue.
- Log.w(Constants.TAG, "Updating table id failed.", e);
+ Log.w(TAG, "Updating table id failed.", e);
}
}
@@ -1114,7 +1115,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
}
private void onSendToFusionTablesDone() {
- SendToGoogleDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
+ SendDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
if (sendToGoogleDialog.getSendToDocs()) {
authenticateToGoogleDocs();
} else {
@@ -1143,7 +1144,7 @@ public class MyTracks extends TabActivity implements OnTouchListener,
}
private void sendToGoogleDocs(final long trackId) {
- Log.d(Constants.TAG, "Sending to Docs....");
+ Log.d(TAG, "Sending to Docs....");
setProgressValue(50);
setProgressMessage(R.string.progress_message_sending_docs);
final SendToDocs sender = new SendToDocs(this,
@@ -1169,34 +1170,57 @@ public class MyTracks extends TabActivity implements OnTouchListener,
}
private void onSendToGoogleDone() {
- SendToGoogleDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
+ SendDialog sendToGoogleDialog = dialogManager.getSendToGoogleDialog();
final boolean sentToMyMaps = sendToGoogleDialog.getSendToMyMaps();
final boolean sentToFusionTables = sendToGoogleDialog.getSendToFusionTables();
-
dialogManager.dismissDialogSafely(DIALOG_PROGRESS);
- runOnUiThread(new Runnable() {
- public void run() {
- if (shareRequested) {
- Toast.makeText(MyTracks.this, getSendToGoogleResultMessage(), Toast.LENGTH_LONG)
- .show();
- if (shareLinkToMap(sentToMyMaps, sentToFusionTables)) {
- return;
- }
+ // We've finished sending the track to the user-selected services. Now
+ // we tell them the results of the upload, and optionally share the track.
+ // There are a few different paths through this code:
+ //
+ // 1. The user pre-requested a share (shareRequested == true). We're going
+ // to display the result dialog *without* the share button (the share
+ // listener will be null). The OK button listener will initiate the
+ // share.
+ //
+ // 2. The user did not pre-request a share, and the set of services to
+ // which we succeeded in uploading the track are compatible with
+ // sharing. We'll display a share button (the share listener will be
+ // non-null), and will share the link if the user clicks it.
+ //
+ // 3. The user did not pre-request a share, and the set of services to
+ // which we succeeded in uploading the track are incompatible with
+ // sharing. We won't display a share button.
+
+ final boolean canShare = getSendToFusionTablesTableId() != null
+ || getSendToMyMapsMapId() != null;
+
+ DialogInterface.OnClickListener doShareListener = null;
+ if (canShare) {
+ doShareListener = new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ shareLinkToMap(sentToMyMaps, sentToFusionTables);
}
+ };
+ }
- // If anything failed or sharing was not requested, show the dialog
- dialogManager.showDialogSafely(
- DialogManager.DIALOG_SEND_TO_GOOGLE_RESULT);
- }
- });
+ DialogInterface.OnClickListener onOkListener = (canShare && shareRequested)
+ ? doShareListener : null;
+ DialogInterface.OnClickListener onShareListener = (canShare && !shareRequested)
+ ? doShareListener : null;
+
+ AlertDialog sendToGoogleResultDialog = ResultDialogFactory.makeDialog(this,
+ makeSendToGoogleResults(sendToGoogleDialog), onOkListener, onShareListener);
+ DialogManager.showDialogSafely(this, sendToGoogleResultDialog);
}
boolean shareLinkToMap(boolean sentToMyMaps, boolean sentToFusionTables) {
String url = null;
if (sentToMyMaps && sendToMyMapsSuccess) {
// Prefer a link to My Maps
- url = MapsService.buildMapUrl(sendToMyMapsMapId);
+ url = MapsFacade.buildMapUrl(sendToMyMapsMapId);
} else if (sentToFusionTables && sendToFusionTablesSuccess) {
// Otherwise try using the link to fusion tables
url = getFusionTablesUrl(sendToTrackId);
@@ -1215,9 +1239,29 @@ public class MyTracks extends TabActivity implements OnTouchListener,
return SendToFusionTables.getMapVisualizationUrl(track);
}
+ /**
+ * Creates a list of {@link SendResult} instances based on the set of
+ * services selected in {@link SendDialog} and the results as known to
+ * this class.
+ */
+ private List makeSendToGoogleResults(SendDialog dialog) {
+ List results = new ArrayList();
+ if (dialog.getSendToMyMaps()) {
+ results.add(new SendResult(SendType.MYMAPS, sendToMyMapsSuccess));
+ }
+ if (dialog.getSendToFusionTables()) {
+ results.add(new SendResult(SendType.FUSION_TABLES, sendToFusionTablesSuccess));
+ }
+ if (dialog.getSendToDocs()) {
+ results.add(new SendResult(SendType.DOCS, sendToDocsSuccess));
+ }
+
+ return results;
+ }
+
String getSendToGoogleResultMessage() {
StringBuilder message = new StringBuilder();
- SendToGoogleDialog sendToGoogleDialog =
+ SendDialog sendToGoogleDialog =
dialogManager.getSendToGoogleDialog();
if (sendToGoogleDialog.getSendToMyMaps()) {
message.append(sendToMyMapsMessage);
@@ -1259,11 +1303,11 @@ public class MyTracks extends TabActivity implements OnTouchListener,
* Binds to track recording service if it is running.
*/
private void tryBindTrackRecordingService() {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracks: Trying to bind to track recording service...");
bindService(new Intent(this, TrackRecordingService.class),
serviceConnection, 0);
- Log.d(Constants.TAG, "MyTracks: ...bind finished!");
+ Log.d(TAG, "MyTracks: ...bind finished!");
isBound = true;
}
@@ -1273,14 +1317,12 @@ public class MyTracks extends TabActivity implements OnTouchListener,
*/
private void tryUnbindTrackRecordingService() {
if (isBound) {
- Log.d(Constants.TAG,
- "MyTracks: Trying to unbind from track recording service...");
+ Log.d(TAG, "MyTracks: Trying to unbind from track recording service...");
try {
unbindService(serviceConnection);
- Log.d(Constants.TAG, "MyTracks: ...unbind finished!");
+ Log.d(TAG, "MyTracks: ...unbind finished!");
} catch (IllegalArgumentException e) {
- Log.d(Constants.TAG,
- "MyTracks: Tried unbinding, but service was not registered.", e);
+ Log.d(TAG, "MyTracks: Tried unbinding, but service was not registered.", e);
}
isBound = false;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java
index 208670b94..4c71935fa 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksMap.java
@@ -15,6 +15,8 @@
*/
package com.google.android.apps.mytracks;
+import static com.google.android.apps.mytracks.Constants.TAG;
+
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TrackPointsColumns;
@@ -208,7 +210,7 @@ public class MyTracksMap extends MapActivity
} while (cursor.moveToNext());
}
} catch (RuntimeException e) {
- Log.w(Constants.TAG, "Caught an unexpected exception.", e);
+ Log.w(TAG, "Caught an unexpected exception.", e);
} finally {
if (cursor != null) {
cursor.close();
@@ -285,7 +287,7 @@ public class MyTracksMap extends MapActivity
@Override
public void onCreate(Bundle bundle) {
- Log.d(Constants.TAG, "MyTracksMap.onCreate");
+ Log.d(TAG, "MyTracksMap.onCreate");
super.onCreate(bundle);
// The volume we want to control is the Text-To-Speech volume
@@ -335,7 +337,7 @@ public class MyTracksMap extends MapActivity
observer = new ContentObserver(contentHandler) {
@Override
public void onChange(boolean selfChange) {
- Log.d(Constants.TAG, "MyTracksMap: ContentObserver.onChange");
+ Log.d(TAG, "MyTracksMap: ContentObserver.onChange");
if (!isRecordingSelected()) {
// No track, or one other than the recording track is selected,
// don't bother.
@@ -350,7 +352,7 @@ public class MyTracksMap extends MapActivity
waypointObserver = new ContentObserver(contentHandler) {
@Override
public void onChange(boolean selfChange) {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: ContentObserver.onChange waypoints");
if (!isATrackSelected()) {
return;
@@ -371,7 +373,7 @@ public class MyTracksMap extends MapActivity
@Override
protected void onDestroy() {
- Log.d(Constants.TAG, "MyTracksMap.onDestroy");
+ Log.d(TAG, "MyTracksMap.onDestroy");
if (updateTrackThread != null) {
ApiFeatures.getInstance().getApiPlatformAdapter().stopHandlerThread(
@@ -407,7 +409,7 @@ public class MyTracksMap extends MapActivity
protected void onStart() {
// Called after onCreate or onStop.
// Will be followed by onRestart.
- Log.d(Constants.TAG, "MyTracksMap.onStart");
+ Log.d(TAG, "MyTracksMap.onStart");
super.onStart();
}
@@ -416,7 +418,7 @@ public class MyTracksMap extends MapActivity
// Called when activity is no longer visible to user.
// Next either onStart, onDestroy or nothing will be called.
// This method may never be called in low memory situations.
- Log.d(Constants.TAG, "MyTracksMap.onStop");
+ Log.d(TAG, "MyTracksMap.onStop");
super.onStop();
}
@@ -424,7 +426,7 @@ public class MyTracksMap extends MapActivity
protected void onRestart() {
// Called when the current activity is being re-displayed.
// Will be followed by onResume.
- Log.d(Constants.TAG, "MyTracksMap.onRestart");
+ Log.d(TAG, "MyTracksMap.onRestart");
super.onRestart();
}
@@ -432,7 +434,7 @@ public class MyTracksMap extends MapActivity
protected void onPause() {
// Called when activity is going into the background, but has not (yet) been
// killed. Shouldn't block longer than approx. 2 seconds.
- Log.d(Constants.TAG, "MyTracksMap.onPause");
+ Log.d(TAG, "MyTracksMap.onPause");
unregisterLocationAndSensorListeners();
unregisterContentObservers();
super.onPause();
@@ -442,7 +444,7 @@ public class MyTracksMap extends MapActivity
protected void onResume() {
// Called when the current activity is being displayed or re-displayed
// to the user.
- Log.d(Constants.TAG, "MyTracksMap.onResume");
+ Log.d(TAG, "MyTracksMap.onResume");
super.onResume();
// Reload all preferences as they might have changed since last run.
@@ -477,7 +479,7 @@ public class MyTracksMap extends MapActivity
@Override
protected void onSaveInstanceState(Bundle outState) {
- Log.d(Constants.TAG, "MyTracksMap.onSaveInstanceState");
+ Log.d(TAG, "MyTracksMap.onSaveInstanceState");
outState.putBoolean(KEY_HAVE_GOOD_FIX, haveGoodFix);
outState.putBoolean(KEY_KEEP_MY_LOCATION_VISIBLE, keepMyLocationVisible);
if (currentLocation != null) {
@@ -488,7 +490,7 @@ public class MyTracksMap extends MapActivity
@Override
protected void onRestoreInstanceState(Bundle bundle) {
- Log.d(Constants.TAG, "MyTracksMap.onRestoreInstanceState");
+ Log.d(TAG, "MyTracksMap.onRestoreInstanceState");
if (bundle != null) {
super.onRestoreInstanceState(bundle);
haveGoodFix = bundle.getBoolean(KEY_HAVE_GOOD_FIX, false);
@@ -528,7 +530,7 @@ public class MyTracksMap extends MapActivity
alert(getString(R.string.error_no_gps_location_provider));
return;
} else {
- Log.d(Constants.TAG, "MyTracksMap: Using location provider "
+ Log.d(TAG, "MyTracksMap: Using location provider "
+ gpsProvider.getName());
}
locationManager.requestLocationUpdates(gpsProvider.getName(),
@@ -539,7 +541,7 @@ public class MyTracksMap extends MapActivity
} catch (RuntimeException e) {
// If anything at all goes wrong with getting a cell location do not
// abort. Cell location is not essential to this app.
- Log.w(Constants.TAG,
+ Log.w(TAG,
"Could not register network location listener.");
}
}
@@ -550,7 +552,7 @@ public class MyTracksMap extends MapActivity
if (compass == null) {
return;
}
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: Now registering sensor listeners.");
sensorManager.registerListener(
sensorListener, compass, SensorManager.SENSOR_DELAY_UI);
@@ -561,12 +563,12 @@ public class MyTracksMap extends MapActivity
*/
void unregisterLocationAndSensorListeners() {
if (locationManager != null) {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: Now unregistering location listeners.");
locationManager.removeUpdates(locationListener);
}
if (sensorManager != null) {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: Now unregistering sensor listeners.");
sensorManager.unregisterListener(sensorListener);
}
@@ -704,7 +706,7 @@ public class MyTracksMap extends MapActivity
* @param trackId a given track id
*/
public void setSelectedTrack(final long trackId) {
- Log.d(Constants.TAG, "MyTracksMap.setSelectedTrack: "
+ Log.d(TAG, "MyTracksMap.setSelectedTrack: "
+ "selectedTrackId = " + selectedTrackId + ", trackId = " + trackId);
if (selectedTrackId == trackId) {
@@ -763,7 +765,7 @@ public class MyTracksMap extends MapActivity
timestamp);
variation = field.getDeclination();
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: Variation reset to " + variation + " degrees.");
}
@@ -906,7 +908,7 @@ public class MyTracksMap extends MapActivity
@Override
public void onSharedPreferenceChanged(
final SharedPreferences sharedPreferences, final String key) {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap.onSharedPreferenceChanged: " + key);
if (key != null) {
uiHandler.post(new Runnable() {
@@ -954,7 +956,7 @@ public class MyTracksMap extends MapActivity
}
showCurrentLocation();
} else {
- Log.d(Constants.TAG,
+ Log.d(TAG,
"MyTracksMap: Network location update received.");
}
}
@@ -1060,7 +1062,7 @@ public class MyTracksMap extends MapActivity
// TODO: This shouldn't happen after adding currentSelectedTrackId,
// but just to be safe until we have 100% confidence.
if (samplingFrequency <= 0) {
- Log.w(Constants.TAG,
+ Log.w(TAG,
"readAllNewTrackPoints: samplingFreq <= 0, numTotalPoints = "
+ numTotalPoints + ", trackId = " + currentSelectedTrackId);
samplingFrequency = 1;
diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java b/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
index 85e6a04b5..e16cd64dd 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/MyTracksSettings.java
@@ -15,10 +15,7 @@
*/
package com.google.android.apps.mytracks;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import static com.google.android.apps.mytracks.Constants.TAG;
import com.google.android.apps.mytracks.io.backup.BackupActivityHelper;
import com.google.android.apps.mytracks.io.backup.BackupPreferencesListener;
@@ -28,18 +25,28 @@ import com.google.android.apps.mytracks.util.ApiFeatures;
import com.google.android.apps.mytracks.util.BluetoothDeviceUtils;
import com.google.android.maps.mytracks.R;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.provider.Settings;
+import android.util.Log;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
/**
* An activity that let's the user see and edit the settings.
@@ -119,6 +126,16 @@ public class MyTracksSettings extends PreferenceActivity {
announcementFrequency.setSummary(
R.string.settings_not_available_summary);
}
+
+ // Hook up action for resetting all settings
+ Preference resetPreference = findPreference(getString(R.string.reset_key));
+ resetPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference arg0) {
+ onResetPreferencesClick();
+ return true;
+ }
+ });
}
private void customizeSensorOptionsPreferences() {
@@ -177,19 +194,24 @@ public class MyTracksSettings extends PreferenceActivity {
findPreference(getString(R.string.backup_to_sd_key));
Preference restoreNowPreference =
findPreference(getString(R.string.restore_from_sd_key));
+ Preference resetPreference = findPreference(getString(R.string.reset_key));
- // If recording, disable backup/restore
+ // If recording, disable backup/restore/reset
// (we don't want to get to inconsistent states)
boolean recording =
preferences.getLong(getString(R.string.recording_track_key), -1) != -1;
backupNowPreference.setEnabled(!recording);
restoreNowPreference.setEnabled(!recording);
+ resetPreference.setEnabled(!recording);
backupNowPreference.setSummary(
- recording ? R.string.settings_no_backup_while_recording
+ recording ? R.string.settings_not_while_recording
: R.string.settings_backup_to_sd_summary);
restoreNowPreference.setSummary(
- recording ? R.string.settings_no_backup_while_recording
+ recording ? R.string.settings_not_while_recording
: R.string.settings_restore_from_sd_summary);
+ resetPreference.setSummary(
+ recording ? R.string.settings_not_while_recording
+ : R.string.settings_reset_summary);
// Add actions to the backup preferences
backupNowPreference.setOnPreferenceClickListener(
@@ -315,4 +337,53 @@ public class MyTracksSettings extends PreferenceActivity {
devicesPreference.setEntryValues(entryValuesArray);
devicesPreference.setEntries(entriesArray);
}
+
+ /** Callback for when user asks to reset all settings. */
+ private void onResetPreferencesClick() {
+ AlertDialog dialog = new AlertDialog.Builder(this)
+ .setCancelable(true)
+ .setTitle(R.string.settings_reset)
+ .setMessage(R.string.settings_reset_dialog_message)
+ .setPositiveButton(android.R.string.ok,
+ new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int button) {
+ onResetPreferencesConfirmed();
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null)
+ .create();
+ dialog.show();
+ }
+
+ /** Callback for when user confirms resetting all settings. */
+ private void onResetPreferencesConfirmed() {
+ // Change preferences in a separate thread.
+ new Thread() {
+ @Override
+ public void run() {
+ Log.i(TAG, "Resetting all settings");
+
+ // Actually wipe preferences (and save synchronously).
+ preferences.edit().clear().commit();
+
+ // Give UI feedback in the UI thread.
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ // Give feedback to the user.
+ Toast.makeText(
+ MyTracksSettings.this,
+ R.string.settings_reset_done,
+ Toast.LENGTH_SHORT).show();
+
+ // Restart the settings activity so all changes are loaded.
+ Intent intent = getIntent();
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ }
+ });
+ }
+ }.start();
+ }
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
index ece4f0065..7c437a172 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/content/MyTracksProvider.java
@@ -193,12 +193,14 @@ public class MyTracksProvider extends ContentProvider {
@Override
public int delete(Uri url, String where, String[] selectionArgs) {
String table;
+ boolean shouldVacuum = false;
switch (urlMatcher.match(url)) {
case TRACKPOINTS:
table = TRACKPOINTS_TABLE;
break;
case TRACKS:
table = TRACKS_TABLE;
+ shouldVacuum = true;
break;
case WAYPOINTS:
table = WAYPOINTS_TABLE;
@@ -210,6 +212,13 @@ public class MyTracksProvider extends ContentProvider {
Log.w(MyTracksProvider.TAG, "provider delete in " + table + "!");
int count = db.delete(table, where, selectionArgs);
getContext().getContentResolver().notifyChange(url, null, true);
+
+ if (shouldVacuum) {
+ // If a potentially large amount of data was deleted, we want to reclaim its space.
+ Log.i(TAG, "Vacuuming the database");
+ db.execSQL("VACUUM");
+ }
+
return count;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java
index 65636ce54..86c27bf9e 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java
@@ -1,12 +1,12 @@
/*
* Copyright 2008 Google Inc.
- *
+ *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -25,9 +25,10 @@ import android.location.Location;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.nio.charset.Charset;
+import java.text.NumberFormat;
import java.text.SimpleDateFormat;
-import java.text.DecimalFormat;
import java.util.Date;
+import java.util.Locale;
import java.util.TimeZone;
/**
@@ -36,22 +37,33 @@ import java.util.TimeZone;
* @author Sandor Dornbush
*/
public class GpxTrackWriter implements TrackFormatWriter {
+ private static final String TIMESTAMP_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
- private static final int LATLONG_FORMAT = Location.FORMAT_DEGREES;
- private static final DecimalFormat ELEVATION_FORMATTER =
- new DecimalFormat("#.#");
- private static final SimpleDateFormat TIMESTAMP_FORMATTER =
- new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
- static {
- TIMESTAMP_FORMATTER.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
-
+ private final NumberFormat elevationFormatter;
+ private final NumberFormat coordinateFormatter;
+ private final SimpleDateFormat timestampFormatter;
private PrintWriter pw = null;
private Track track;
+ public GpxTrackWriter() {
+ // GPX readers expect to see fractional numbers with US-style punctuation.
+ // That is, they want periods for decimal points, rather than commas.
+ elevationFormatter = NumberFormat.getInstance(Locale.US);
+ elevationFormatter.setMaximumFractionDigits(1);
+ elevationFormatter.setGroupingUsed(false);
+
+ coordinateFormatter = NumberFormat.getInstance(Locale.US);
+ coordinateFormatter.setMaximumFractionDigits(5);
+ coordinateFormatter.setMaximumIntegerDigits(3);
+ coordinateFormatter.setGroupingUsed(false);
+
+ timestampFormatter = new SimpleDateFormat(TIMESTAMP_FORMAT);
+ timestampFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
+ }
+
private String formatLocation(Location l) {
- return "lat=\"" + Location.convert(l.getLatitude(), LATLONG_FORMAT)
- + "\" lon=\"" + Location.convert(l.getLongitude(), LATLONG_FORMAT) + "\"";
+ return "lat=\"" + coordinateFormatter.format(l.getLatitude())
+ + "\" lon=\"" + coordinateFormatter.format(l.getLongitude()) + "\"";
}
@Override
@@ -129,8 +141,8 @@ public class GpxTrackWriter implements TrackFormatWriter {
if (pw != null) {
pw.println("");
Date d = new Date(l.getTime());
- pw.println("" + ELEVATION_FORMATTER.format(l.getAltitude()) + "");
- pw.println("");
+ pw.println("" + elevationFormatter.format(l.getAltitude()) + "");
+ pw.println("");
pw.println("");
}
}
@@ -149,8 +161,8 @@ public class GpxTrackWriter implements TrackFormatWriter {
Location l = waypoint.getLocation();
if (l != null) {
pw.println("");
- pw.println("" + ELEVATION_FORMATTER.format(l.getAltitude()) + "");
- pw.println("");
+ pw.println("" + elevationFormatter.format(l.getAltitude()) + "");
+ pw.println("");
pw.println("" + StringUtils.stringAsCData(waypoint.getName())
+ "");
pw.println(""
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/MyMapsFactory.java b/MyTracks/src/com/google/android/apps/mytracks/io/MyMapsFactory.java
deleted file mode 100644
index 8d17e1667..000000000
--- a/MyTracks/src/com/google/android/apps/mytracks/io/MyMapsFactory.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.google.android.apps.mytracks.io;
-
-import com.google.android.apps.mytracks.io.gdata.GDataClientFactory;
-import com.google.android.apps.mytracks.io.mymaps.MapsFacade;
-import com.google.android.apps.mytracks.io.mymaps.MapsService;
-import com.google.android.apps.mytracks.io.mymaps.MapsStringsProvider;
-import com.google.android.apps.mytracks.io.mymaps.MapsFacade.AuthenticationRefresher;
-import com.google.android.maps.mytracks.R;
-
-import android.app.Activity;
-import android.content.Context;
-
-/**
- * Factory to easily instantiate a {@link MapsFacade}.
- *
- * @author Rodrigo Damazio
- */
-public class MyMapsFactory {
-
- /**
- * Simple provider for reading strings from resources.
- */
- private static class MyMapsStringProvider implements MapsStringsProvider {
- private final Context context;
-
- public MyMapsStringProvider(Context context) {
- this.context = context;
- }
-
- @Override
- public String getNewMapDescription() {
- return context.getString(R.string.new_map_description);
- }
-
- @Override
- public String getStart() {
- return context.getString(R.string.start);
- }
-
- @Override
- public String getEnd() {
- return context.getString(R.string.end);
- }
- }
-
- /**
- * Creates a new Maps fa�ade interface instance.
- *
- * @param context current context
- * @param auth a valid authentication manager
- * @return the fa�ade
- */
- public static MapsFacade newMapsClient(Activity context, final AuthManager auth) {
- MapsFacade client = MapsService.newClient(context,
- GDataClientFactory.getGDataClient(context),
- new MyMapsStringProvider(context),
- auth.getAuthToken());
- client.setAuthenticationRefresher(new AuthenticationRefresher() {
- @Override
- public void invalidateAndRefresh(Runnable done) {
- auth.invalidateAndRefresh(done);
- }
- });
- return client;
- }
-
- private MyMapsFactory() {}
-}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/SendToMyMaps.java b/MyTracks/src/com/google/android/apps/mytracks/io/SendToMyMaps.java
index 36e017bc2..4145f3a6f 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/SendToMyMaps.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/SendToMyMaps.java
@@ -23,7 +23,6 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.io.mymaps.MapsFacade;
-import com.google.android.apps.mytracks.io.mymaps.MapsFacade.WaypointData;
import com.google.android.apps.mytracks.stats.DoubleBuffer;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.MyTracksUtils;
@@ -112,7 +111,7 @@ public class SendToMyMaps implements Runnable {
track.setDescription("