merge heads

This commit is contained in:
Jimmy Shih
2012-09-05 13:06:31 -07:00
19 changed files with 176 additions and 168 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

+5
View File
@@ -61,6 +61,11 @@ limitations under the License.
android:id="@+id/list_item_start_time" android:id="@+id/list_item_start_time"
style="@style/ListItemStats" /> style="@style/ListItemStats" />
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/list_item_recording"
android:singleLine="true"
android:textColor="@color/red"
style="@style/TextSmall" />
<TextView <TextView
android:id="@+id/list_item_description" android:id="@+id/list_item_description"
android:singleLine="false" android:singleLine="false"
+54 -34
View File
@@ -15,40 +15,60 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<merge xmlns:android="http://schemas.android.com/apk/res/android" > <merge xmlns:android="http://schemas.android.com/apk/res/android" >
<ImageButton <LinearLayout
android:background="@android:color/transparent" android:background="@color/black"
android:contentDescription="@string/icon_record_track" android:layout_height="wrap_content"
android:id="@+id/track_controller_record" android:layout_width="fill_parent"
android:layout_height="100dp" android:orientation="horizontal"
android:layout_width="wrap_content" android:paddingBottom="8dp"
android:scaleType="centerInside" /> android:paddingTop="8dp" >
<RelativeLayout <View
android:layout_height="100dp" android:layout_height="fill_parent"
android:layout_marginLeft="-32dp" android:layout_weight="1"
android:layout_width="wrap_content" > android:layout_width="0dp" />
<TextView <ImageButton
android:id="@+id/track_controller_total_time" android:background="@android:color/transparent"
android:layout_centerInParent="true" android:contentDescription="@string/icon_record_track"
android:id="@+id/track_controller_record"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="10"
android:paddingLeft="24dp" android:layout_width="0dp" />
android:paddingRight="8dp" <RelativeLayout
android:textColor="@android:color/white" android:layout_height="fill_parent"
style="@style/TextSmall" /> android:layout_weight="6"
<TextView android:layout_width="0dp" >
android:id="@+id/track_controller_status" <TextView
android:layout_above="@id/track_controller_total_time" android:id="@+id/track_controller_total_time"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="@android:color/white"
style="@style/TextSmall" />
<TextView
android:id="@+id/track_controller_status"
android:layout_above="@id/track_controller_total_time"
android:layout_alignParentLeft="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:singleLine="true"
style="@style/TextTiny" />
</RelativeLayout>
<ImageButton
android:background="@android:color/transparent"
android:contentDescription="@string/icon_stop_recording"
android:id="@+id/track_controller_stop"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:layout_weight="10"
android:paddingBottom="12dp" android:layout_width="0dp"
style="@style/TextSmall" /> android:src="@drawable/btn_stop_1" />
</RelativeLayout> <View
<ImageButton android:layout_height="fill_parent"
android:background="@android:color/transparent" android:layout_weight="1"
android:contentDescription="@string/icon_stop_recording" android:layout_width="0dp" />
android:id="@+id/track_controller_stop" </LinearLayout>
android:layout_height="100dp" <View
android:layout_width="wrap_content" android:background="@color/gray"
android:scaleType="centerInside" android:layout_height="1dp"
android:src="@drawable/btn_stop_1" /> android:layout_width="fill_parent" />
</merge> </merge>
+8 -2
View File
@@ -14,6 +14,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<resources> <resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="ThemeSelector" parent="android:Theme.Holo" /> <style name="ThemeSelector" parent="android:Theme.Holo">>
<item name="android:actionBarStyle">@style/MyTracksActionBar</item>
</style>
<style name="MyTracksActionBar" parent="@android:style/Widget.Holo.ActionBar">
<!-- Same image as the source except using a grey line instead of a blue line -->
<item name="android:background">@drawable/ab_transparent_dark_holo</item>
</style>
</resources> </resources>
+2 -2
View File
@@ -17,8 +17,8 @@ limitations under the License.
<resources> <resources>
<color name="black">#FF000000</color> <color name="black">#FF000000</color>
<color name="blue">#FF0000FF</color> <color name="blue">#FF0000FF</color>
<color name="gray">#FFAAAAAA</color> <color name="gray">#FF444444</color>
<color name="red">#FFFF0000</color> <color name="red">#FFBE161B</color>
<!-- holo_orange_dark --> <!-- holo_orange_dark -->
<color name="warning_background">#FFFF8800</color> <color name="warning_background">#FFFF8800</color>
+8 -3
View File
@@ -178,14 +178,19 @@ limitations under the License.
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
<item name="android:textSize">14sp</item> <item name="android:textSize">14sp</item>
</style> </style>
<!-- The style for tiny size text -->
<style name="TextTiny">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textSize">10sp</item>
</style>
<!-- Theme selector --> <!-- Theme selector -->
<style name="ThemeSelector" parent="android:Theme" /> <style name="ThemeSelector" parent="android:Theme" />
<!-- The style for the track controller container --> <!-- The style for the track controller container -->
<style name="TrackControllerContainer"> <style name="TrackControllerContainer">
<item name="android:layout_gravity">center</item>
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">fill_parent</item>
<item name="android:orientation">horizontal</item> <item name="android:orientation">vertical</item>
</style> </style>
<!-- The style for the track widget button --> <!-- The style for the track widget button -->
<style name="TrackWidgetButton"> <style name="TrackWidgetButton">
@@ -24,6 +24,7 @@ import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.IntentUtils;
import com.google.android.apps.mytracks.util.ListItemUtils; import com.google.android.apps.mytracks.util.ListItemUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils; 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.android.maps.mytracks.R;
import android.content.Context; import android.content.Context;
@@ -130,21 +131,23 @@ public class MarkerListActivity extends AbstractMyTracksActivity {
resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) { resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) {
@Override @Override
public void bindView(View view, Context context, Cursor cursor) { public void bindView(View view, Context context, Cursor cursor) {
int nameIndex = cursor.getColumnIndex(WaypointsColumns.NAME);
int descriptionIndex = cursor.getColumnIndex(WaypointsColumns.DESCRIPTION);
int categoryIndex = cursor.getColumnIndex(WaypointsColumns.CATEGORY);
int typeIndex = cursor.getColumnIndex(WaypointsColumns.TYPE); int typeIndex = cursor.getColumnIndex(WaypointsColumns.TYPE);
int nameIndex = cursor.getColumnIndex(WaypointsColumns.NAME);
int categoryIndex = cursor.getColumnIndex(WaypointsColumns.CATEGORY);
int timeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TIME); int timeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TIME);
int descriptionIndex = cursor.getColumnIndex(WaypointsColumns.DESCRIPTION);
boolean statistics = cursor.getInt(typeIndex) == Waypoint.TYPE_STATISTICS; boolean statistics = cursor.getInt(typeIndex) == Waypoint.TYPE_STATISTICS;
String name = cursor.getString(nameIndex);
int iconId = statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin; int iconId = statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin;
String contentDescription = getString(R.string.icon_marker);
String category = statistics ? null : cursor.getString(categoryIndex); String category = statistics ? null : cursor.getString(categoryIndex);
long time = cursor.getLong(timeIndex);
String description = statistics ? null : cursor.getString(descriptionIndex); String description = statistics ? null : cursor.getString(descriptionIndex);
ListItemUtils.setListItem(MarkerListActivity.this, long time = cursor.getLong(timeIndex);
view, name, iconId, contentDescription, category, null, null, time, description); String startTime = time == 0L ? null
: StringUtils.formatRelativeDateTime(MarkerListActivity.this, time);
ListItemUtils.setListItem(MarkerListActivity.this, view, false, true, iconId,
R.string.icon_marker, cursor.getString(nameIndex), category, null, null, startTime,
description);
} }
}; };
listView.setAdapter(resourceCursorAdapter); listView.setAdapter(resourceCursorAdapter);
@@ -76,9 +76,11 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
private static final String TAG = SearchListActivity.class.getSimpleName(); private static final String TAG = SearchListActivity.class.getSimpleName();
private static final String IS_RECORDING_FIELD = "isRecording";
private static final String IS_PAUSED_FIELD = "isPaused";
private static final String ICON_ID_FIELD = "icon";
private static final String ICON_CONTENT_DESCRIPTION_ID_FIELD = "iconContentDescription";
private static final String NAME_FIELD = "name"; private static final String NAME_FIELD = "name";
private static final String ICON_FIELD = "icon";
private static final String ICON_CONTENT_DESCRIPTION_FIELD = "iconContentDescription";
private static final String CATEGORY_FIELD = "category"; private static final String CATEGORY_FIELD = "category";
private static final String TOTAL_TIME_FIELD = "totalTime"; private static final String TOTAL_TIME_FIELD = "totalTime";
private static final String TOTAL_DISTANCE_FIELD = "totalDistance"; private static final String TOTAL_DISTANCE_FIELD = "totalDistance";
@@ -177,23 +179,19 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
view = convertView; view = convertView;
} }
Map<String, Object> resultMap = getItem(position); Map<String, Object> resultMap = getItem(position);
boolean isRecording = (Boolean) resultMap.get(IS_RECORDING_FIELD);
boolean isPaused = (Boolean) resultMap.get(IS_PAUSED_FIELD);
int iconId = (Integer) resultMap.get(ICON_ID_FIELD);
int iconContentDescriptionId = (Integer) resultMap.get(ICON_CONTENT_DESCRIPTION_ID_FIELD);
String name = (String) resultMap.get(NAME_FIELD); String name = (String) resultMap.get(NAME_FIELD);
int iconId = (Integer) resultMap.get(ICON_FIELD);
String iconContentDescription = (String) resultMap.get(ICON_CONTENT_DESCRIPTION_FIELD);
String category = (String) resultMap.get(CATEGORY_FIELD); String category = (String) resultMap.get(CATEGORY_FIELD);
String totalTime = (String) resultMap.get(TOTAL_TIME_FIELD); String totalTime = (String) resultMap.get(TOTAL_TIME_FIELD);
String totalDistance = (String) resultMap.get(TOTAL_DISTANCE_FIELD); String totalDistance = (String) resultMap.get(TOTAL_DISTANCE_FIELD);
long startTime = (Long) resultMap.get(START_TIME_FIELD); String startTime = (String) resultMap.get(START_TIME_FIELD);
String description = (String) resultMap.get(DESCRIPTION_FIELD); String description = (String) resultMap.get(DESCRIPTION_FIELD);
ListItemUtils.setListItem(SearchListActivity.this,
view, ListItemUtils.setListItem(SearchListActivity.this, view, isRecording, isPaused, iconId,
name, iconContentDescriptionId, name, category, totalTime, totalDistance, startTime,
iconId,
iconContentDescription,
category,
totalTime,
totalDistance,
startTime,
description); description);
return view; return view;
} }
@@ -410,16 +408,20 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
} }
boolean statistics = waypoint.getType() == Waypoint.TYPE_STATISTICS; boolean statistics = waypoint.getType() == Waypoint.TYPE_STATISTICS;
long time = waypoint.getLocation().getTime();
resultMap.put(IS_RECORDING_FIELD, false);
resultMap.put(IS_PAUSED_FIELD, true);
resultMap.put(ICON_ID_FIELD, statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin);
resultMap.put(ICON_CONTENT_DESCRIPTION_ID_FIELD, R.string.icon_marker);
resultMap.put(NAME_FIELD, waypoint.getName()); resultMap.put(NAME_FIELD, waypoint.getName());
resultMap.put(ICON_FIELD, statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin);
resultMap.put(ICON_CONTENT_DESCRIPTION_FIELD, getString(R.string.icon_marker));
resultMap.put(CATEGORY_FIELD, statistics ? null : waypoint.getCategory()); resultMap.put(CATEGORY_FIELD, statistics ? null : waypoint.getCategory());
resultMap.put(START_TIME_FIELD, waypoint.getLocation().getTime());
// Display the marker's track name in the total time field // Display the marker's track name in the total time field
resultMap.put(TOTAL_TIME_FIELD, trackName == null ? null resultMap.put(TOTAL_TIME_FIELD, trackName == null ? null
: getString(R.string.search_list_marker_track_location, trackName)); : getString(R.string.search_list_marker_track_location, trackName));
resultMap.put(TOTAL_DISTANCE_FIELD, null); resultMap.put(TOTAL_DISTANCE_FIELD, null);
resultMap.put(
START_TIME_FIELD, time == 0L ? null : StringUtils.formatRelativeDateTime(this, time));
resultMap.put(DESCRIPTION_FIELD, statistics ? null : waypoint.getDescription()); resultMap.put(DESCRIPTION_FIELD, statistics ? null : waypoint.getDescription());
resultMap.put(TRACK_ID_FIELD, waypoint.getTrackId()); resultMap.put(TRACK_ID_FIELD, waypoint.getTrackId());
resultMap.put(MARKER_ID_FIELD, waypoint.getId()); resultMap.put(MARKER_ID_FIELD, waypoint.getId());
@@ -433,26 +435,22 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
*/ */
private void prepareTrackForDisplay(Track track, Map<String, Object> resultMap) { private void prepareTrackForDisplay(Track track, Map<String, Object> resultMap) {
boolean isRecording = track.getId() == recordingTrackId; boolean isRecording = track.getId() == recordingTrackId;
String name = track.getName();
TripStatistics tripStatitics = track.getTripStatistics(); TripStatistics tripStatitics = track.getTripStatistics();
resultMap.put(NAME_FIELD, track.getName()); long startTime = tripStatitics.getStartTime();
int iconId; String startTimeDisplay = StringUtils.formatDateTime(this, startTime).equals(name) ? null
int iconContentDescriptionId; : StringUtils.formatRelativeDateTime(this, startTime);
if (isRecording) {
iconId = recordingTrackPaused ? R.drawable.status_paused : R.drawable.status_recording; resultMap.put(IS_RECORDING_FIELD, isRecording);
iconContentDescriptionId = recordingTrackPaused ? R.string.icon_pause_recording resultMap.put(IS_PAUSED_FIELD, recordingTrackPaused);
: R.string.icon_record_track; resultMap.put(ICON_ID_FIELD, TrackIconUtils.getIconDrawable(track.getIcon()));
} else { resultMap.put(ICON_CONTENT_DESCRIPTION_ID_FIELD, R.string.icon_track);
iconId = TrackIconUtils.getIconDrawable(track.getIcon()); resultMap.put(NAME_FIELD, name);
iconContentDescriptionId = R.string.icon_track;
}
resultMap.put(ICON_FIELD, iconId);
resultMap.put(ICON_CONTENT_DESCRIPTION_FIELD, getString(iconContentDescriptionId));
resultMap.put(CATEGORY_FIELD, track.getCategory()); resultMap.put(CATEGORY_FIELD, track.getCategory());
resultMap.put(TOTAL_TIME_FIELD, isRecording ? null : StringUtils.formatElapsedTime( resultMap.put(TOTAL_TIME_FIELD, StringUtils.formatElapsedTime(tripStatitics.getTotalTime()));
tripStatitics.getTotalTime())); resultMap.put(TOTAL_DISTANCE_FIELD,
resultMap.put(TOTAL_DISTANCE_FIELD, isRecording ? null : StringUtils.formatDistance( StringUtils.formatDistance(this, tripStatitics.getTotalDistance(), metricUnits));
this, tripStatitics.getTotalDistance(), metricUnits)); resultMap.put(START_TIME_FIELD, startTimeDisplay);
resultMap.put(START_TIME_FIELD, tripStatitics.getStartTime());
resultMap.put(DESCRIPTION_FIELD, track.getDescription()); resultMap.put(DESCRIPTION_FIELD, track.getDescription());
resultMap.put(TRACK_ID_FIELD, track.getId()); resultMap.put(TRACK_ID_FIELD, track.getId());
resultMap.put(MARKER_ID_FIELD, null); resultMap.put(MARKER_ID_FIELD, null);
@@ -262,37 +262,27 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
@Override @Override
public void bindView(View view, Context context, Cursor cursor) { public void bindView(View view, Context context, Cursor cursor) {
int idIndex = cursor.getColumnIndex(TracksColumns._ID); int idIndex = cursor.getColumnIndex(TracksColumns._ID);
int nameIndex = cursor.getColumnIndex(TracksColumns.NAME);
int descriptionIndex = cursor.getColumnIndex(TracksColumns.DESCRIPTION);
int categoryIndex = cursor.getColumnIndex(TracksColumns.CATEGORY);
int startTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME);
int totalDistanceIndex = cursor.getColumnIndexOrThrow(TracksColumns.TOTALDISTANCE);
int totalTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.TOTALTIME);
int iconIndex = cursor.getColumnIndex(TracksColumns.ICON); int iconIndex = cursor.getColumnIndex(TracksColumns.ICON);
int nameIndex = cursor.getColumnIndex(TracksColumns.NAME);
int categoryIndex = cursor.getColumnIndex(TracksColumns.CATEGORY);
int totalTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.TOTALTIME);
int totalDistanceIndex = cursor.getColumnIndexOrThrow(TracksColumns.TOTALDISTANCE);
int startTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME);
int descriptionIndex = cursor.getColumnIndex(TracksColumns.DESCRIPTION);
boolean isRecording = cursor.getLong(idIndex) == recordingTrackId; boolean isRecording = cursor.getLong(idIndex) == recordingTrackId;
int iconId = TrackIconUtils.getIconDrawable(cursor.getString(iconIndex));
String name = cursor.getString(nameIndex); String name = cursor.getString(nameIndex);
int iconId; String totalTime = StringUtils.formatElapsedTime(cursor.getLong(totalTimeIndex));
int iconContentDescriptionId; String totalDistance = StringUtils.formatDistance(
if (isRecording) { TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
iconId = recordingTrackPaused ? R.drawable.status_paused : R.drawable.status_recording;
iconContentDescriptionId = recordingTrackPaused ? R.string.icon_pause_recording
: R.string.icon_record_track;
} else {
iconId = TrackIconUtils.getIconDrawable(cursor.getString(iconIndex));
iconContentDescriptionId = R.string.icon_track;
}
String iconContentDescription = getString(iconContentDescriptionId);
String category = cursor.getString(categoryIndex);
String totalTime = isRecording ? null
: StringUtils.formatElapsedTime(cursor.getLong(totalTimeIndex));
String totalDistance = isRecording ? null
: StringUtils.formatDistance(
TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
long startTime = cursor.getLong(startTimeIndex); long startTime = cursor.getLong(startTimeIndex);
String description = cursor.getString(descriptionIndex); String startTimeDisplay = StringUtils.formatDateTime(context, startTime).equals(name) ? null
ListItemUtils.setListItem(TrackListActivity.this, view, name, iconId, : StringUtils.formatRelativeDateTime(context, startTime);
iconContentDescription, category, totalTime, totalDistance, startTime, description);
ListItemUtils.setListItem(TrackListActivity.this, view, isRecording, recordingTrackPaused,
iconId, R.string.icon_track, name, cursor.getString(categoryIndex), totalTime,
totalDistance, startTimeDisplay, cursor.getString(descriptionIndex));
} }
}; };
listView.setAdapter(resourceCursorAdapter); listView.setAdapter(resourceCursorAdapter);
@@ -28,9 +28,9 @@ import com.google.android.maps.mytracks.R;
import android.location.Location; import android.location.Location;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -47,10 +47,10 @@ public class StatsFragment extends Fragment implements TrackDataListener {
public static final String STATS_FRAGMENT_TAG = "statsFragment"; public static final String STATS_FRAGMENT_TAG = "statsFragment";
private static final String TAG = StatsFragment.class.getSimpleName(); private static final int ONE_SECOND = 1000;
private TrackDataHub trackDataHub; private TrackDataHub trackDataHub;
private UiUpdateThread uiUpdateThread; private Handler handler;
private Location lastLocation = null; private Location lastLocation = null;
private TripStatistics lastTripStatistics = null; private TripStatistics lastTripStatistics = null;
@@ -58,34 +58,16 @@ public class StatsFragment extends Fragment implements TrackDataListener {
// A runnable to update the total time field. // A runnable to update the total time field.
private final Runnable updateTotalTime = new Runnable() { private final Runnable updateTotalTime = new Runnable() {
public void run() { public void run() {
if (isResumed() && isSelectedTrackRecording() && !isSelectedTrackPaused() if (isResumed() && isSelectedTrackRecording()) {
&& lastTripStatistics != null) { if (!isSelectedTrackPaused() && lastTripStatistics != null) {
StatsUtils.setTotalTimeValue(getActivity(), System.currentTimeMillis() StatsUtils.setTotalTimeValue(getActivity(), System.currentTimeMillis()
- lastTripStatistics.getStopTime() + lastTripStatistics.getTotalTime()); - lastTripStatistics.getStopTime() + lastTripStatistics.getTotalTime());
}
handler.postDelayed(this, ONE_SECOND);
} }
} }
}; };
/**
* A thread that updates the total time field every second.
*/
private class UiUpdateThread extends Thread {
@Override
public void run() {
Log.d(TAG, "UI update thread started");
while (isResumed() && isSelectedTrackRecording()) {
getActivity().runOnUiThread(updateTotalTime);
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
Log.d(TAG, "UI update thread caught exception", e);
break;
}
}
Log.d(TAG, "UI update thread finished");
}
}
@Override @Override
public View onCreateView( public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -95,6 +77,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override @Override
public void onActivityCreated(Bundle savedInstanceState) { public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState); super.onActivityCreated(savedInstanceState);
handler = new Handler();
updateUi(getActivity()); updateUi(getActivity());
} }
@@ -108,10 +91,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
pauseTrackDataHub(); pauseTrackDataHub();
if (uiUpdateThread != null) { handler.removeCallbacks(updateTotalTime);
uiUpdateThread.interrupt();
uiUpdateThread = null;
}
} }
@Override @Override
@@ -159,13 +139,9 @@ public class StatsFragment extends Fragment implements TrackDataListener {
@Override @Override
public void onSelectedTrackChanged(Track track) { public void onSelectedTrackChanged(Track track) {
if (isResumed()) { if (isResumed()) {
if (uiUpdateThread != null) { handler.removeCallbacks(updateTotalTime);
uiUpdateThread.interrupt();
uiUpdateThread = null;
}
if (isSelectedTrackRecording()) { if (isSelectedTrackRecording()) {
uiUpdateThread = new UiUpdateThread(); handler.post(updateTotalTime);
uiUpdateThread.start();
} }
} }
} }
@@ -37,28 +37,31 @@ public class ListItemUtils {
* *
* @param context the context * @param context the context
* @param view the list item view * @param view the list item view
* @param isRecording true if recording
* @param isPaused true if paused
* @param name the name value * @param name the name value
* @param iconId the icon id * @param iconId the icon id
* @param iconContentDescription the icon content description * @param iconContentDescriptionId the icon content description id
* @param category the category value * @param category the category value
* @param totalTime the total time value * @param totalTime the total time value
* @param totalDistance the total distance value * @param totalDistance the total distance value
* @param startTime the start time value * @param startTime the start time value
* @param description the description value * @param description the description value
*/ */
public static void setListItem(Context context, View view, public static void setListItem(Context context, View view, boolean isRecording, boolean isPaused,
String name, int iconId, int iconContentDescriptionId, String name, String category, String totalTime,
int iconId, String totalDistance, String startTime, String description) {
String iconContentDescription,
String category, if (isRecording) {
String totalTime, iconId = isPaused ? R.drawable.status_paused : R.drawable.status_recording;
String totalDistance, iconContentDescriptionId = isPaused ? R.string.icon_pause_recording
long startTime, : R.string.icon_record_track;
String description) { }
ImageView iconImageView = (ImageView) view.findViewById(R.id.list_item_icon); ImageView iconImageView = (ImageView) view.findViewById(R.id.list_item_icon);
iconImageView.setImageResource(iconId); iconImageView.setImageResource(iconId);
iconImageView.setContentDescription(iconContentDescription); iconImageView.setContentDescription(context.getString(iconContentDescriptionId));
TextView nameTextView = (TextView) view.findViewById(R.id.list_item_name); TextView nameTextView = (TextView) view.findViewById(R.id.list_item_name);
nameTextView.setText(name); nameTextView.setText(name);
@@ -66,19 +69,21 @@ public class ListItemUtils {
setTextView(categoryTextView, category); setTextView(categoryTextView, category);
TextView totalTimeTextView = (TextView) view.findViewById(R.id.list_item_total_time); TextView totalTimeTextView = (TextView) view.findViewById(R.id.list_item_total_time);
setTextView(totalTimeTextView, totalTime); setTextView(totalTimeTextView, isRecording ? null : totalTime);
TextView totalDistanceTextView = (TextView) view.findViewById(R.id.list_item_total_distance); TextView totalDistanceTextView = (TextView) view.findViewById(R.id.list_item_total_distance);
setTextView(totalDistanceTextView, totalDistance); setTextView(totalDistanceTextView, isRecording ? null : totalDistance);
String startTimeDisplay = startTime == 0L
|| StringUtils.formatDateTime(context, startTime).equals(name) ? null
: StringUtils.formatRelativeDateTime(context, startTime);
TextView startTimeTextView = (TextView) view.findViewById(R.id.list_item_start_time); TextView startTimeTextView = (TextView) view.findViewById(R.id.list_item_start_time);
setTextView(startTimeTextView, startTimeDisplay); setTextView(startTimeTextView, isRecording ? null : startTime);
TextView recordingTextView = (TextView) view.findViewById(R.id.list_item_recording);
setTextView(recordingTextView, isRecording ? context.getString(
isPaused ? R.string.generic_paused : R.string.generic_recording)
: null);
TextView descriptionTextView = (TextView) view.findViewById(R.id.list_item_description); TextView descriptionTextView = (TextView) view.findViewById(R.id.list_item_description);
setTextView(descriptionTextView, description); setTextView(descriptionTextView, isRecording ? null : description);
} }
/** /**