Merge heads
@@ -16,7 +16,7 @@ limitations under the License.
|
|||||||
-->
|
-->
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="42"
|
android:versionCode="43"
|
||||||
android:versionName="2.0"
|
android:versionName="2.0"
|
||||||
package="com.google.android.maps.mytracks" >
|
package="com.google.android.maps.mytracks" >
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 68 KiB |
@@ -190,11 +190,13 @@ limitations under the License.
|
|||||||
<item>@string/settings_map_track_color_mode_dynamic_value</item>
|
<item>@string/settings_map_track_color_mode_dynamic_value</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="track_name_options">
|
<string-array name="track_name_options">
|
||||||
|
<item>@string/settings_recording_track_name_location_option</item>
|
||||||
<item>@string/settings_recording_track_name_date_local_option</item>
|
<item>@string/settings_recording_track_name_date_local_option</item>
|
||||||
<item>@string/settings_recording_track_name_date_iso_8601_option</item>
|
<item>@string/settings_recording_track_name_date_iso_8601_option</item>
|
||||||
<item>@string/settings_recording_track_name_number_option</item>
|
<item>@string/settings_recording_track_name_number_option</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="track_name_values">
|
<string-array name="track_name_values">
|
||||||
|
<item>@string/settings_recording_track_name_location_value</item>
|
||||||
<item>@string/settings_recording_track_name_date_local_value</item>
|
<item>@string/settings_recording_track_name_date_local_value</item>
|
||||||
<item>@string/settings_recording_track_name_date_iso_8601_value</item>
|
<item>@string/settings_recording_track_name_date_iso_8601_value</item>
|
||||||
<item>@string/settings_recording_track_name_number_value</item>
|
<item>@string/settings_recording_track_name_number_value</item>
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ limitations under the License.
|
|||||||
<string name="settings_map_track_color_mode_single_value">SINGLE</string>
|
<string name="settings_map_track_color_mode_single_value">SINGLE</string>
|
||||||
<string name="settings_recording_track_name_date_iso_8601_value">DATE_ISO_8601</string>
|
<string name="settings_recording_track_name_date_iso_8601_value">DATE_ISO_8601</string>
|
||||||
<string name="settings_recording_track_name_date_local_value">DATE_LOCAL</string>
|
<string name="settings_recording_track_name_date_local_value">DATE_LOCAL</string>
|
||||||
|
<string name="settings_recording_track_name_location_value">LOCATION</string>
|
||||||
<string name="settings_recording_track_name_number_value">NUMBER</string>
|
<string name="settings_recording_track_name_number_value">NUMBER</string>
|
||||||
<string name="track_action_end">com.google.android.apps.mytracks.END_CURRENT_TRACK</string>
|
<string name="track_action_end">com.google.android.apps.mytracks.END_CURRENT_TRACK</string>
|
||||||
<string name="track_action_save">android.intent.action.SAVE</string>
|
<string name="track_action_save">android.intent.action.SAVE</string>
|
||||||
|
|||||||
@@ -363,52 +363,7 @@ limitations under the License.
|
|||||||
completion suggestion for wind surfing.">
|
completion suggestion for wind surfing.">
|
||||||
wind surfing
|
wind surfing
|
||||||
</string>
|
</string>
|
||||||
|
|
||||||
<!-- Android Market -->
|
|
||||||
<string name="android_market_description_text"
|
|
||||||
translation_description="For the Android Market (not used in the app), the description text.
|
|
||||||
|
|
||||||
Character limit: 4000.">
|
|
||||||
Use My Tracks while you walk, run, bike, or do anything else outdoors. It uses the GPS sensor
|
|
||||||
in your phone to record your path and gather useful statistics such as time, speed, distance,
|
|
||||||
and elevation. You can review all of this data live or save it for use later. While recording,
|
|
||||||
you can insert markers, have split markers inserted automatically, and hear periodic voice
|
|
||||||
announcements of your progress.\n
|
|
||||||
\n
|
|
||||||
My Tracks can record data from external sensors:\n
|
|
||||||
- Zephyr HxM Bluetooth heart rate monitor\n
|
|
||||||
- Polar WearLink Bluetooth heart rate monitor\n
|
|
||||||
- ANT+ heart rate monitors (*)\n
|
|
||||||
- Ant+ speed distance monitors (*)\n
|
|
||||||
\n
|
|
||||||
* Requires an ANT+ compatible phone\n
|
|
||||||
\n
|
|
||||||
My Tracks can share your track data:\n
|
|
||||||
- Via Google+, Facebook, or Twitter\n
|
|
||||||
- Using Google Maps, Google Fusion Tables, or Google Docs\n
|
|
||||||
- As a GPX, KML, CSV, or TCX file\n
|
|
||||||
\n
|
|
||||||
Other features:\n
|
|
||||||
- Record in metric (km, m) or imperial (mi, ft) units\n
|
|
||||||
- Display your movement in terms of speed or pace\n
|
|
||||||
\n
|
|
||||||
My Tracks is an open source project. If you like to contribute, please visit:\n
|
|
||||||
\n
|
|
||||||
http://mytracks.googlecode.com\n
|
|
||||||
</string>
|
|
||||||
<string name="android_market_promo_text"
|
|
||||||
translation_description="For the Android Market (not used in the app), the promotion text.
|
|
||||||
|
|
||||||
Character limit: 80.">
|
|
||||||
Record and share your GPS tracks with My Tracks.
|
|
||||||
</string>
|
|
||||||
<string name="android_market_recent_changes_text"
|
|
||||||
translation_description="For the Android Market (not used in the app), the recent changes text.
|
|
||||||
|
|
||||||
Character limit: 500.">
|
|
||||||
Please see the English version for more information.
|
|
||||||
</string>
|
|
||||||
|
|
||||||
<!-- Description -->
|
<!-- Description -->
|
||||||
<string name="description_activity_type"
|
<string name="description_activity_type"
|
||||||
translation_description="Activity type description.
|
translation_description="Activity type description.
|
||||||
@@ -1670,6 +1625,13 @@ limitations under the License.
|
|||||||
Character limit: ~21 (1 line)">
|
Character limit: ~21 (1 line)">
|
||||||
Date (local)
|
Date (local)
|
||||||
</string>
|
</string>
|
||||||
|
<string name="settings_recording_track_name_location_option"
|
||||||
|
translation_description="In the 'Recording' settings, the option in the 'Track name' dropdown
|
||||||
|
list to use the track location as the track name.
|
||||||
|
|
||||||
|
Character limit: ~21 (1 line)">
|
||||||
|
Location
|
||||||
|
</string>
|
||||||
<string name="settings_recording_track_name_number_option"
|
<string name="settings_recording_track_name_number_option"
|
||||||
translation_description="In the 'Recording' settings, the option in the 'Track name' dropdown
|
translation_description="In the 'Recording' settings, the option in the 'Track name' dropdown
|
||||||
list to use a number as the track name.
|
list to use a number as the track name.
|
||||||
@@ -1735,14 +1697,15 @@ limitations under the License.
|
|||||||
an ANT+ heart rate monitor. Note that ANT+ is a radio standard.
|
an ANT+ heart rate monitor. Note that ANT+ is a radio standard.
|
||||||
|
|
||||||
Character limit: ~26 (1 line)">
|
Character limit: ~26 (1 line)">
|
||||||
Reset heart rate monitor
|
Reset heart rate
|
||||||
</string>
|
</string>
|
||||||
<string name="settings_sensor_ant_reset_speed_distance_monitor"
|
<string name="settings_sensor_ant_reset_speed_distance_monitor"
|
||||||
translation_description="In the 'Sensor' settings, under the 'ANT+ options', the option to reset
|
translation_description="In the 'Sensor' settings, under the 'ANT+ options', the option to reset
|
||||||
an ANT+ speed distance monitor. Note that ANT+ is a radio standard.
|
an ANT+ stride based speed distance monitor, also known as foot pod. Note that ANT+ is a radio
|
||||||
|
standard.
|
||||||
|
|
||||||
Character limit: ~26 (1 line)">
|
Character limit: ~26 (1 line)">
|
||||||
Reset speed distance monitor
|
Reset foot pod
|
||||||
</string>
|
</string>
|
||||||
<string name="settings_sensor_bluetooth_options"
|
<string name="settings_sensor_bluetooth_options"
|
||||||
translation_description="In the 'Sensor' settings, the section header to configure the Bluetooth
|
translation_description="In the 'Sensor' settings, the section header to configure the Bluetooth
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ limitations under the License.
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:title="@string/settings_recording" >
|
android:title="@string/settings_recording" >
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="@string/settings_recording_track_name_date_local_value"
|
android:defaultValue="@string/settings_recording_track_name_location_value"
|
||||||
android:entries="@array/track_name_options"
|
android:entries="@array/track_name_options"
|
||||||
android:entryValues="@array/track_name_values"
|
android:entryValues="@array/track_name_values"
|
||||||
android:key="@string/track_name_key"
|
android:key="@string/track_name_key"
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package com.google.android.apps.mytracks;
|
|||||||
|
|
||||||
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
||||||
import com.google.android.apps.mytracks.content.Track;
|
import com.google.android.apps.mytracks.content.Track;
|
||||||
|
import com.google.android.apps.mytracks.util.TrackNameUtils;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -95,6 +96,11 @@ public class TrackEditActivity extends AbstractMyTracksActivity {
|
|||||||
|
|
||||||
Button cancel = (Button) findViewById(R.id.track_edit_cancel);
|
Button cancel = (Button) findViewById(R.id.track_edit_cancel);
|
||||||
if (getIntent().getBooleanExtra(EXTRA_NEW_TRACK, false)) {
|
if (getIntent().getBooleanExtra(EXTRA_NEW_TRACK, false)) {
|
||||||
|
String trackName = TrackNameUtils.getTrackName(
|
||||||
|
this, -1L, -1L, myTracksProviderUtils.getLastLocation());
|
||||||
|
if (trackName != null) {
|
||||||
|
name.setText(trackName);
|
||||||
|
}
|
||||||
setTitle(R.string.track_edit_new_track_title);
|
setTitle(R.string.track_edit_new_track_title);
|
||||||
cancel.setVisibility(View.GONE);
|
cancel.setVisibility(View.GONE);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
package com.google.android.apps.mytracks.services;
|
|
||||||
|
|
||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
|
||||||
import com.google.android.apps.mytracks.util.StringUtils;
|
|
||||||
import com.google.android.maps.mytracks.R;
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a default track name based on the track name setting.
|
|
||||||
*
|
|
||||||
* @author Matthew Simmons
|
|
||||||
*/
|
|
||||||
public class DefaultTrackNameFactory {
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
static final String ISO_8601_FORMAT = "yyyy-MM-dd HH:mm";
|
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
public DefaultTrackNameFactory(Context context) {
|
|
||||||
this.context = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the default track name.
|
|
||||||
*
|
|
||||||
* @param trackId the track id
|
|
||||||
* @param startTime the track start time
|
|
||||||
*/
|
|
||||||
public String getDefaultTrackName(long trackId, long startTime) {
|
|
||||||
String trackNameSetting = getTrackNameSetting();
|
|
||||||
|
|
||||||
if (trackNameSetting.equals(
|
|
||||||
context.getString(R.string.settings_recording_track_name_date_local_value))) {
|
|
||||||
return StringUtils.formatDateTime(context, startTime);
|
|
||||||
} else if (trackNameSetting.equals(
|
|
||||||
context.getString(R.string.settings_recording_track_name_date_iso_8601_value))) {
|
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_8601_FORMAT);
|
|
||||||
return dateFormat.format(startTime);
|
|
||||||
} else {
|
|
||||||
// trackNameSetting equals
|
|
||||||
// R.string.settings_recording_track_name_number_value
|
|
||||||
return context.getString(R.string.track_name_format, trackId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the track name setting.
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
String getTrackNameSetting() {
|
|
||||||
return PreferencesUtils.getString(context, R.string.track_name_key,
|
|
||||||
context.getString(R.string.settings_recording_track_name_date_local_value));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -42,6 +42,7 @@ import com.google.android.apps.mytracks.stats.TripStatisticsBuilder;
|
|||||||
import com.google.android.apps.mytracks.util.IntentUtils;
|
import com.google.android.apps.mytracks.util.IntentUtils;
|
||||||
import com.google.android.apps.mytracks.util.LocationUtils;
|
import com.google.android.apps.mytracks.util.LocationUtils;
|
||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.TrackNameUtils;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
|
||||||
@@ -584,8 +585,7 @@ public class TrackRecordingService extends Service {
|
|||||||
Uri trackUri = providerUtils.insertTrack(track);
|
Uri trackUri = providerUtils.insertTrack(track);
|
||||||
recordingTrackId = Long.parseLong(trackUri.getLastPathSegment());
|
recordingTrackId = Long.parseLong(trackUri.getLastPathSegment());
|
||||||
track.setId(recordingTrackId);
|
track.setId(recordingTrackId);
|
||||||
track.setName(new DefaultTrackNameFactory(this).getDefaultTrackName(
|
track.setName(TrackNameUtils.getTrackName(this, recordingTrackId, startTime, null));
|
||||||
recordingTrackId, startTime));
|
|
||||||
track.setCategory(PreferencesUtils.getString(
|
track.setCategory(PreferencesUtils.getString(
|
||||||
this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT));
|
this, R.string.default_activity_key, PreferencesUtils.DEFAULT_ACTIVITY_DEFAULT));
|
||||||
isRecording = true;
|
isRecording = true;
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.google.android.apps.mytracks.util;
|
||||||
|
|
||||||
|
import com.google.android.maps.mytracks.R;
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.location.Address;
|
||||||
|
import android.location.Geocoder;
|
||||||
|
import android.location.Location;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utilities for track name.
|
||||||
|
*
|
||||||
|
* @author Matthew Simmons
|
||||||
|
*/
|
||||||
|
public class TrackNameUtils {
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String ISO_8601_FORMAT = "yyyy-MM-dd HH:mm";
|
||||||
|
|
||||||
|
private TrackNameUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the track name.
|
||||||
|
*
|
||||||
|
* @param context the context
|
||||||
|
* @param trackId the track id
|
||||||
|
* @param startTime the track start time
|
||||||
|
* @param location the track location
|
||||||
|
*/
|
||||||
|
public static String getTrackName(
|
||||||
|
Context context, long trackId, long startTime, Location location) {
|
||||||
|
String trackName = PreferencesUtils.getString(context, R.string.track_name_key,
|
||||||
|
context.getString(R.string.settings_recording_track_name_location_value));
|
||||||
|
|
||||||
|
if (trackName.equals(
|
||||||
|
context.getString(R.string.settings_recording_track_name_date_local_value))) {
|
||||||
|
if (startTime == -1L) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return StringUtils.formatDateTime(context, startTime);
|
||||||
|
} else if (trackName.equals(
|
||||||
|
context.getString(R.string.settings_recording_track_name_date_iso_8601_value))) {
|
||||||
|
if (startTime == -1L) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
SimpleDateFormat dateFormat = new SimpleDateFormat(ISO_8601_FORMAT);
|
||||||
|
return dateFormat.format(startTime);
|
||||||
|
} else if (trackName.equals(
|
||||||
|
context.getString(R.string.settings_recording_track_name_number_value))) {
|
||||||
|
if (trackId == -1L) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return context.getString(R.string.track_name_format, trackId);
|
||||||
|
} else {
|
||||||
|
// trackName equals settings_recording_track_name_location_value or any
|
||||||
|
// value
|
||||||
|
if (location != null) {
|
||||||
|
return getReverseGeoCoding(context, location);
|
||||||
|
} else {
|
||||||
|
// assume startTime != -1L when location == null
|
||||||
|
return StringUtils.formatDateTime(context, startTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the reverse geo coding string for a location.
|
||||||
|
*
|
||||||
|
* @param context the context
|
||||||
|
* @param location the location
|
||||||
|
*/
|
||||||
|
private static String getReverseGeoCoding(Context context, Location location) {
|
||||||
|
if (location == null || !Geocoder.isPresent()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Geocoder geocoder = new Geocoder(context);
|
||||||
|
try {
|
||||||
|
List<Address> addresses = geocoder.getFromLocation(
|
||||||
|
location.getLatitude(), location.getLongitude(), 1);
|
||||||
|
if (addresses.size() > 0) {
|
||||||
|
Address address = addresses.get(0);
|
||||||
|
int lines = address.getMaxAddressLineIndex();
|
||||||
|
if (lines > 0) {
|
||||||
|
return address.getAddressLine(0);
|
||||||
|
}
|
||||||
|
String featureName = address.getFeatureName();
|
||||||
|
if (featureName != null) {
|
||||||
|
return featureName;
|
||||||
|
}
|
||||||
|
String thoroughfare = address.getThoroughfare();
|
||||||
|
if (thoroughfare != null) {
|
||||||
|
return thoroughfare;
|
||||||
|
}
|
||||||
|
String locality = address.getLocality();
|
||||||
|
if (locality != null) {
|
||||||
|
return locality;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Can safely ignore
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 42 KiB |
@@ -76,6 +76,13 @@ public interface MyTracksProviderUtils {
|
|||||||
*/
|
*/
|
||||||
boolean updateWaypoint(Waypoint waypoint);
|
boolean updateWaypoint(Waypoint waypoint);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the first recorded location from the location provider.
|
||||||
|
*
|
||||||
|
* @return the first location, or null if no locations available
|
||||||
|
*/
|
||||||
|
Location getFirstLocation();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the last recorded location from the location provider.
|
* Finds the last recorded location from the location provider.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -653,6 +653,11 @@ public class MyTracksProviderUtilsImpl implements MyTracksProviderUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Location getFirstLocation() {
|
||||||
|
return findLocationBy("_id=(select min(_id) from trackpoints)");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Location getLastLocation() {
|
public Location getLastLocation() {
|
||||||
return findLocationBy("_id=(select max(_id) from trackpoints)");
|
return findLocationBy("_id=(select max(_id) from trackpoints)");
|
||||||
|
|||||||
@@ -1,70 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
package com.google.android.apps.mytracks.services;
|
|
||||||
|
|
||||||
import com.google.android.apps.mytracks.util.StringUtils;
|
|
||||||
import com.google.android.maps.mytracks.R;
|
|
||||||
|
|
||||||
import android.test.AndroidTestCase;
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link DefaultTrackNameFactory}
|
|
||||||
*
|
|
||||||
* @author Matthew Simmons
|
|
||||||
*/
|
|
||||||
public class DefaultTrackNameFactoryTest extends AndroidTestCase {
|
|
||||||
|
|
||||||
private static final long TRACK_ID = 1L;
|
|
||||||
private static final long START_TIME = 1288213406000L;
|
|
||||||
|
|
||||||
public void testDefaultTrackName_date_local() {
|
|
||||||
DefaultTrackNameFactory defaultTrackNameFactory = new DefaultTrackNameFactory(getContext()) {
|
|
||||||
@Override
|
|
||||||
String getTrackNameSetting() {
|
|
||||||
return getContext().getString(R.string.settings_recording_track_name_date_local_value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
assertEquals(StringUtils.formatDateTime(getContext(), START_TIME),
|
|
||||||
defaultTrackNameFactory.getDefaultTrackName(TRACK_ID, START_TIME));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDefaultTrackName_date_iso_8601() {
|
|
||||||
DefaultTrackNameFactory defaultTrackNameFactory = new DefaultTrackNameFactory(getContext()) {
|
|
||||||
@Override
|
|
||||||
String getTrackNameSetting() {
|
|
||||||
return getContext().getString(R.string.settings_recording_track_name_date_iso_8601_value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
|
|
||||||
DefaultTrackNameFactory.ISO_8601_FORMAT);
|
|
||||||
assertEquals(simpleDateFormat.format(new Date(START_TIME)),
|
|
||||||
defaultTrackNameFactory.getDefaultTrackName(TRACK_ID, START_TIME));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testDefaultTrackName_number() {
|
|
||||||
DefaultTrackNameFactory defaultTrackNameFactory = new DefaultTrackNameFactory(getContext()) {
|
|
||||||
@Override
|
|
||||||
String getTrackNameSetting() {
|
|
||||||
return getContext().getString(R.string.settings_recording_track_name_number_value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
assertEquals(
|
|
||||||
"Track " + TRACK_ID, defaultTrackNameFactory.getDefaultTrackName(TRACK_ID, START_TIME));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
* License for the specific language governing permissions and limitations under
|
||||||
|
* the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.google.android.apps.mytracks.util;
|
||||||
|
|
||||||
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
|
import android.test.AndroidTestCase;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests {@link TrackNameUtils}.
|
||||||
|
*
|
||||||
|
* @author Matthew Simmons
|
||||||
|
*/
|
||||||
|
public class TrackNameUtilsTest extends AndroidTestCase {
|
||||||
|
|
||||||
|
private static final long TRACK_ID = 1L;
|
||||||
|
private static final long START_TIME = 1288213406000L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests when the track_name_key is
|
||||||
|
* settings_recording_track_name_date_local_value.
|
||||||
|
*/
|
||||||
|
public void testTrackName_date_local() {
|
||||||
|
PreferencesUtils.setString(getContext(), R.string.track_name_key,
|
||||||
|
getContext().getString(R.string.settings_recording_track_name_date_local_value));
|
||||||
|
assertEquals(StringUtils.formatDateTime(getContext(), START_TIME),
|
||||||
|
TrackNameUtils.getTrackName(getContext(), TRACK_ID, START_TIME, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests when the track_name_key is
|
||||||
|
* settings_recording_track_name_date_iso_8601_value.
|
||||||
|
*/
|
||||||
|
public void testTrackName_date_iso_8601() {
|
||||||
|
PreferencesUtils.setString(getContext(), R.string.track_name_key,
|
||||||
|
getContext().getString(R.string.settings_recording_track_name_date_iso_8601_value));
|
||||||
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(TrackNameUtils.ISO_8601_FORMAT);
|
||||||
|
assertEquals(simpleDateFormat.format(new Date(START_TIME)),
|
||||||
|
TrackNameUtils.getTrackName(getContext(), TRACK_ID, START_TIME, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests when the track_name_key is
|
||||||
|
* settings_recording_track_name_number_value.
|
||||||
|
*/
|
||||||
|
public void testTrackName_number() {
|
||||||
|
PreferencesUtils.setString(getContext(), R.string.track_name_key,
|
||||||
|
getContext().getString(R.string.settings_recording_track_name_number_value));
|
||||||
|
assertEquals(
|
||||||
|
"Track " + TRACK_ID, TrackNameUtils.getTrackName(getContext(), TRACK_ID, START_TIME, null));
|
||||||
|
}
|
||||||
|
}
|
||||||