sync from main

This commit is contained in:
Jimmy Shih
2012-04-07 09:32:13 -07:00
27 changed files with 730 additions and 763 deletions
-14
View File
@@ -1,22 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="lib" path="libs/googleloginclient-helper.jar"/>
<classpathentry exported="true" kind="lib" path="libs/google-common.jar"/>
<classpathentry kind="lib" path="libs/libGoogleAnalytics.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/commons-codec-1.3.jar"/>
<classpathentry exported="true" kind="lib" path="libs/google-api-client/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/google-api-client-1.5.0-beta.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/google-http-client-1.5.0-beta.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/google-oauth-client-1.5.0-beta.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/gson-1.6.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/guava-r09.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/jackson-core-asl-1.6.7.jar"/>
<classpathentry kind="lib" path="libs/google-api-client/jsr305-1.3.9.jar"/>
<classpathentry kind="lib" path="libs/android-support-v4.jar"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry exported="true" kind="lib" path="/MyTracksLib/libs/protobuf-java-2.3.0-lite.jar"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
+20 -9
View File
@@ -3,10 +3,21 @@ own licenses, which allow their usage for the My Tracks application. Any other
applications that wish to use these files should consult the appropriate
licenses or the JAR's authors.
google-api-client/
- see http://code.google.com/p/google-api-java-client/.
- contains Google API client library, google-api-client-1.5.0-beta.jar, and its
dependencies.
Android Support Package:
android-support-v4.jar
- see http://developer.android.com/sdk/compatibility-library.html
Google APIs Client Library for Java:
commons-codec-1.3.jar
commons-logging-1.1.1.jar
google-api-client-1.5.0-beta.jar
google-http-client-1.5.0-beta.jar
google-oauth-client-1.5.0-beta.jar
gson-1.6.jar
guava-r09.jar
jackson-core-asl-1.6.7.jar
jsr305-1.3.9.jar
- see http://code.google.com/p/google-api-java-client/
- google-api-client-1.5.0-beta.jar depends on protobuf-java-2.2.0.jar, however,
MyTracksLib already includes protobuf-java.2.3.0-lite.jar. Thus using the
newer version, protobuf-java.2.3.0-lite.jar.
@@ -14,9 +25,9 @@ google-api-client/
some of its classes are already included in the android framework, thus not
including xpp3-1.1.4c.jar.
google-common.jar
googleloginclient-helper.jar
Google Analytics:
libGoogleAnalytics.jar
- see http://code.google.com/mobile/analytics/docs/.
- see http://code.google.com/apis/analytics/docs/mobile/android.html
Others:
google-common.jar
Binary file not shown.
+67 -28
View File
@@ -1,44 +1,43 @@
-target 6
-optimizationpasses 5
#
# Section 1
# Default eclipse project proguard settings.
#
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
# Add the libraries, but ignore warnings about them
-libraryjars libs
-libraryjars ../MyTracksLib/libs
-dontwarn com.google.android.googleapps.**
-dontwarn com.android.common.**
-dontwarn com.google.android.gsf.**
-dontwarn org.codehaus.**
-dontwarn com.google.appengine.**
-dontwarn org.apache.avalon.framework.logger.**
-dontwarn org.apache.log.**
-dontwarn org.apache.log4j.**
-dontwarn javax.servlet.**
-dontpreverify
# Make our stack traces useful
# Line numbers will be correct, file names will be replaced by "MT" since the
# class name is enough to get the file name.
-renamesourcefileattribute MT
-keepattributes SourceFile,LineNumberTable
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
# change from 5 to 2. With 5 passes, the CursorLoader in the android.support.v4 will not compile.
# See http://stackoverflow.com/questions/6605971/android-sdk-tools-revision-12-has-problem-with-proguard-error-conversion-to
-optimizationpasses 2
-allowaccessmodification
# Keep everything android references from XMLs
-keepattributes *Annotation*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.app.backup.BackupAgent
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgent
-keep public class * extends android.preference.Preference
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.app.Fragment
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembers class * {
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native <methods>;
}
-keep public class * extends android.view.View {
public <init>(android.content.Context);
public <init>(android.content.Context, android.util.AttributeSet);
public <init>(android.content.Context, android.util.AttributeSet, int);
public void set*(...);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
@@ -47,6 +46,11 @@
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
@@ -56,20 +60,55 @@
public static final android.os.Parcelable$Creator *;
}
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepclassmembers class **.R$* {
public static <fields>;
}
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
#
# Section 2
# Google APIs Client Library for Java proguard settings.
#
# Needed by google-api-client to keep generic types and @Key annotations accessed via reflection
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault
# Needed by Guava
-dontwarn sun.misc.Unsafe
# See https://groups.google.com/forum/#!topic/guava-discuss/YCZzeCiIVoI
-dontwarn com.google.common.collect.MinMaxPriorityQueue
#
# Section 3
# My Tracks specific proguard settings.
#
# Add the libraries, but ignore warnings about them
-libraryjars libs
-libraryjars ../MyTracksLib/libs
-dontwarn com.android.common.**
-dontwarn com.google.android.googleapps.**
-dontwarn com.google.android.gsf.**
-dontwarn javax.servlet.**
-dontwarn org.apache.avalon.framework.logger.**
-dontwarn org.apache.log.**
-dontwarn org.apache.log4j.**
# Make our stack traces useful
# Line numbers will be correct, file names will be replaced by "MT" since the
# class name is enough to get the file name.
-renamesourcefileattribute MT
-keepattributes SourceFile,LineNumberTable
# Keep services needed by ANT+ protocol
-keep public class com.dsi.ant.IAnt_6
-keep public class com.dsi.ant.IAnt
-keep public class com.dsi.ant.IServiceSettings
+3 -15
View File
@@ -46,27 +46,15 @@ limitations under the License.
android:orientation="horizontal" >
<TextView
android:id="@+id/track_list_item_time"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:singleLine="true"
android:textColor="@color/green"
style="@android:style/TextAppearance.DeviceDefault.Small" />
style="@style/TrackListItemStatsTextView" />
<TextView
android:id="@+id/track_list_item_distance"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
android:singleLine="true"
android:textColor="@color/green"
style="@android:style/TextAppearance.DeviceDefault.Small" />
style="@style/TrackListItemStatsTextView" />
<TextView
android:id="@+id/track_list_item_start"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_width="wrap_content"
android:singleLine="true"
android:textColor="@color/green"
style="@android:style/TextAppearance.DeviceDefault.Small" />
style="@style/TrackListItemStatsTextView" />
</LinearLayout>
<TextView
android:id="@+id/track_list_item_description"
File diff suppressed because it is too large Load Diff
+9 -1
View File
@@ -125,7 +125,15 @@ limitations under the License.
<item name="android:textColor">@color/stat_label_text</item>
</style>
<!-- Welcome page TextView -->
<!-- The TextView showing the stats in the track list item -->
<style name="TrackListItemStatsTextView" parents="@android:style/TextAppearance.DeviceDefault.Small">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@color/green</item>
</style>
<!-- Welcome page TextView -->
<style name="WelcomeTextView">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">fill_parent</item>
@@ -262,6 +262,6 @@ public class StatsUtilities {
R.string.stat_average_moving_pace);
setSpeedLabel(R.id.max_speed_label,
R.string.stat_max_speed,
R.string.stat_min_pace);
R.string.stat_fastest_pace);
}
}
@@ -87,14 +87,14 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
private NavControls navControls;
private long trackId;
private MenuItem stopRecording;
private MenuItem insertMarker;
private MenuItem play;
private MenuItem share;
private MenuItem sendGoogle;
private MenuItem save;
private MenuItem edit;
private MenuItem delete;
private MenuItem stopRecordingMenuItem;
private MenuItem insertMarkerMenuItem;
private MenuItem playMenuItem;
private MenuItem shareMenuItem;
private MenuItem sendGoogleMenuItem;
private MenuItem saveMenuItem;
private MenuItem editMenuItem;
private MenuItem deleteMenuItem;
private final Runnable changeTab = new Runnable() {
public void run() {
@@ -110,10 +110,8 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key == null) {
return;
}
if (key.equals(getString(R.string.recording_track_key))) {
// Note that key can be null
if (getString(R.string.recording_track_key).equals(key)) {
updateMenu();
}
}
@@ -210,7 +208,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
R.string.track_detail_delete_confirm_message, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MyTracksProviderUtils.Factory.get(TrackDetailActivity.this).deleteTrack(trackId);
deleteCurrentTrack();
startTrackListActivity();
}
});
@@ -241,14 +239,14 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
menu.findItem(R.id.track_detail_share_tcx)
.setTitle(getString(R.string.menu_share_file, fileTypes[3]));
stopRecording = menu.findItem(R.id.track_detail_stop_recording);
insertMarker = menu.findItem(R.id.track_detail_insert_marker);
play = menu.findItem(R.id.track_detail_play);
share = menu.findItem(R.id.track_detail_share);
sendGoogle = menu.findItem(R.id.track_detail_send_google);
save = menu.findItem(R.id.track_detail_save);
edit = menu.findItem(R.id.track_detail_edit);
delete = menu.findItem(R.id.track_detail_delete);
stopRecordingMenuItem = menu.findItem(R.id.track_detail_stop_recording);
insertMarkerMenuItem = menu.findItem(R.id.track_detail_insert_marker);
playMenuItem = menu.findItem(R.id.track_detail_play);
shareMenuItem = menu.findItem(R.id.track_detail_share);
sendGoogleMenuItem = menu.findItem(R.id.track_detail_send_google);
saveMenuItem = menu.findItem(R.id.track_detail_save);
editMenuItem = menu.findItem(R.id.track_detail_edit);
deleteMenuItem = menu.findItem(R.id.track_detail_delete);
updateMenu();
return true;
@@ -282,7 +280,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
stopRecording();
return true;
case R.id.track_detail_insert_marker:
// TODO:
// TODO: Add insert marker when updating WaypointList to ICS
return true;
case R.id.track_detail_play:
if (isEarthInstalled()) {
@@ -469,37 +467,45 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
/**
* s Updates the menu items.
* Updates the menu items.
*
* @param isRecording true if recording
*/
private void updateMenuItems(boolean isRecording) {
if (stopRecording != null) {
stopRecording.setVisible(isRecording);
if (stopRecordingMenuItem != null) {
stopRecordingMenuItem.setVisible(isRecording);
}
if (insertMarker != null) {
insertMarker.setVisible(isRecording);
if (insertMarkerMenuItem != null) {
insertMarkerMenuItem.setVisible(isRecording);
}
if (play != null) {
play.setVisible(!isRecording);
if (playMenuItem != null) {
playMenuItem.setVisible(!isRecording);
}
if (share != null) {
share.setVisible(!isRecording);
if (shareMenuItem != null) {
shareMenuItem.setVisible(!isRecording);
}
if (sendGoogle != null) {
sendGoogle.setVisible(!isRecording);
if (sendGoogleMenuItem != null) {
sendGoogleMenuItem.setVisible(!isRecording);
}
if (save != null) {
save.setVisible(!isRecording);
if (saveMenuItem != null) {
saveMenuItem.setVisible(!isRecording);
}
if (edit != null) {
edit.setVisible(!isRecording);
if (editMenuItem != null) {
editMenuItem.setVisible(!isRecording);
}
if (delete != null) {
delete.setVisible(!isRecording);
if (deleteMenuItem != null) {
deleteMenuItem.setVisible(!isRecording);
}
}
/**
* Deletes the current track.
*/
private void deleteCurrentTrack() {
long trackId = trackDataHub.getSelectedTrackId();
MyTracksProviderUtils.Factory.get(TrackDetailActivity.this).deleteTrack(trackId);
}
/**
* Starts the {@link TrackListActivity}.
*/
@@ -86,24 +86,25 @@ public class TrackListActivity extends FragmentActivity {
private final Runnable bindChangedCallback = new Runnable() {
@Override
public void run() {
if (startNewRecording) {
ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound();
if (service != null) {
try {
recordingTrackId = service.startNewTrack();
startNewRecording = false;
Toast.makeText(
TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT)
.show();
Log.d(TAG, "Started a new recording");
} catch (Exception e) {
Toast.makeText(
TrackListActivity.this, R.string.track_list_record_error, Toast.LENGTH_LONG).show();
Log.d(TAG, "Unable to start a new recording.", e);
}
} else {
Log.d(TAG, "service not available to start a new recording");
}
if (!startNewRecording) {
return;
}
ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound();
if (service == null) {
Log.d(TAG, "service not available to start a new recording");
return;
}
try {
recordingTrackId = service.startNewTrack();
startNewRecording = false;
Toast.makeText(
TrackListActivity.this, R.string.track_list_record_success, Toast.LENGTH_SHORT).show();
Log.d(TAG, "Started a new recording");
} catch (Exception e) {
Toast.makeText(TrackListActivity.this, R.string.track_list_record_error, Toast.LENGTH_LONG)
.show();
Log.e(TAG, "Unable to start a new recording.", e);
}
}
};
@@ -116,13 +117,11 @@ public class TrackListActivity extends FragmentActivity {
new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (key == null) {
return;
}
if (key.equals(getString(R.string.metric_units_key))) {
// Note that key can be null
if (getString(R.string.metric_units_key).equals(key)) {
metricUnits = preferences.getBoolean(getString(R.string.metric_units_key), true);
}
if (key.equals(getString(R.string.recording_track_key))) {
if (getString(R.string.recording_track_key).equals(key)) {
recordingTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
if (isRecording()) {
trackRecordingServiceConnection.startAndBind();
@@ -116,8 +116,8 @@ public class DescriptionGeneratorImpl implements DescriptionGenerator {
// Average moving pace
writePace(averageMovingSpeed, builder, R.string.description_average_moving_pace, lineBreak);
// Min pace
writePace(maxSpeed, builder, R.string.description_min_pace, lineBreak);
// Fastest pace
writePace(maxSpeed, builder, R.string.description_fastest_pace, lineBreak);
// Max elevation
writeElevation(stats.getMaxElevation(), builder, R.string.description_max_elevation, lineBreak);
@@ -19,6 +19,7 @@ package com.google.android.apps.mytracks.io.sendtogoogle;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.stats.TripStatistics;
import com.google.android.apps.mytracks.util.LocationUtils;
import com.google.common.annotations.VisibleForTesting;
import android.location.Location;
import android.util.Log;
@@ -109,11 +110,12 @@ public class SendToGoogleUtils {
* @param segment the track segment
* @param splitTracks an array of track segments
*/
private static void prepareTrackSegment(Track segment, ArrayList<Track> splitTracks) {
@VisibleForTesting
static boolean prepareTrackSegment(Track segment, ArrayList<Track> splitTracks) {
// Make sure the segment has at least 2 points
if (segment.getLocations().size() < 2) {
Log.d(TAG, "segment has less than 2 points");
return;
return false;
}
// For a new segment, sets it stop time
@@ -128,5 +130,6 @@ public class SendToGoogleUtils {
LocationUtils.decimate(segment, 2.0);
splitTracks.add(segment);
return true;
}
}