merge heads
|
After Width: | Height: | Size: 242 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 229 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 262 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
@@ -61,6 +61,11 @@ limitations under the License.
|
||||
android:id="@+id/list_item_start_time"
|
||||
style="@style/ListItemStats" />
|
||||
</LinearLayout>
|
||||
<TextView
|
||||
android:id="@+id/list_item_recording"
|
||||
android:singleLine="true"
|
||||
android:textColor="@color/red"
|
||||
style="@style/TextSmall" />
|
||||
<TextView
|
||||
android:id="@+id/list_item_description"
|
||||
android:singleLine="false"
|
||||
|
||||
@@ -15,40 +15,60 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<ImageButton
|
||||
android:background="@android:color/transparent"
|
||||
android:contentDescription="@string/icon_record_track"
|
||||
android:id="@+id/track_controller_record"
|
||||
android:layout_height="100dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:scaleType="centerInside" />
|
||||
<RelativeLayout
|
||||
android:layout_height="100dp"
|
||||
android:layout_marginLeft="-32dp"
|
||||
android:layout_width="wrap_content" >
|
||||
<TextView
|
||||
android:id="@+id/track_controller_total_time"
|
||||
android:layout_centerInParent="true"
|
||||
<LinearLayout
|
||||
android:background="@color/black"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="fill_parent"
|
||||
android:orientation="horizontal"
|
||||
android:paddingBottom="8dp"
|
||||
android:paddingTop="8dp" >
|
||||
<View
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp" />
|
||||
<ImageButton
|
||||
android:background="@android:color/transparent"
|
||||
android:contentDescription="@string/icon_record_track"
|
||||
android:id="@+id/track_controller_record"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:paddingLeft="24dp"
|
||||
android:paddingRight="8dp"
|
||||
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_weight="10"
|
||||
android:layout_width="0dp" />
|
||||
<RelativeLayout
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_weight="6"
|
||||
android:layout_width="0dp" >
|
||||
<TextView
|
||||
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_width="wrap_content"
|
||||
android:paddingBottom="12dp"
|
||||
style="@style/TextSmall" />
|
||||
</RelativeLayout>
|
||||
<ImageButton
|
||||
android:background="@android:color/transparent"
|
||||
android:contentDescription="@string/icon_stop_recording"
|
||||
android:id="@+id/track_controller_stop"
|
||||
android:layout_height="100dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:scaleType="centerInside"
|
||||
android:src="@drawable/btn_stop_1" />
|
||||
android:layout_weight="10"
|
||||
android:layout_width="0dp"
|
||||
android:src="@drawable/btn_stop_1" />
|
||||
<View
|
||||
android:layout_height="fill_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp" />
|
||||
</LinearLayout>
|
||||
<View
|
||||
android:background="@color/gray"
|
||||
android:layout_height="1dp"
|
||||
android:layout_width="fill_parent" />
|
||||
</merge>
|
||||
@@ -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
|
||||
limitations under the License.
|
||||
-->
|
||||
<resources>
|
||||
<style name="ThemeSelector" parent="android:Theme.Holo" />
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<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>
|
||||
|
||||
@@ -17,8 +17,8 @@ limitations under the License.
|
||||
<resources>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="blue">#FF0000FF</color>
|
||||
<color name="gray">#FFAAAAAA</color>
|
||||
<color name="red">#FFFF0000</color>
|
||||
<color name="gray">#FF444444</color>
|
||||
<color name="red">#FFBE161B</color>
|
||||
|
||||
<!-- holo_orange_dark -->
|
||||
<color name="warning_background">#FFFF8800</color>
|
||||
|
||||
@@ -178,14 +178,19 @@ limitations under the License.
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
</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 -->
|
||||
<style name="ThemeSelector" parent="android:Theme" />
|
||||
<!-- The style for the track controller container -->
|
||||
<style name="TrackControllerContainer">
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:orientation">horizontal</item>
|
||||
<item name="android:layout_width">fill_parent</item>
|
||||
<item name="android:orientation">vertical</item>
|
||||
</style>
|
||||
<!-- The style for the track widget button -->
|
||||
<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.ListItemUtils;
|
||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||
import com.google.android.apps.mytracks.util.StringUtils;
|
||||
import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.content.Context;
|
||||
@@ -130,21 +131,23 @@ public class MarkerListActivity extends AbstractMyTracksActivity {
|
||||
resourceCursorAdapter = new ResourceCursorAdapter(this, R.layout.list_item, null, 0) {
|
||||
@Override
|
||||
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 nameIndex = cursor.getColumnIndex(WaypointsColumns.NAME);
|
||||
int categoryIndex = cursor.getColumnIndex(WaypointsColumns.CATEGORY);
|
||||
int timeIndex = cursor.getColumnIndexOrThrow(WaypointsColumns.TIME);
|
||||
int descriptionIndex = cursor.getColumnIndex(WaypointsColumns.DESCRIPTION);
|
||||
|
||||
boolean statistics = cursor.getInt(typeIndex) == Waypoint.TYPE_STATISTICS;
|
||||
String name = cursor.getString(nameIndex);
|
||||
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);
|
||||
long time = cursor.getLong(timeIndex);
|
||||
String description = statistics ? null : cursor.getString(descriptionIndex);
|
||||
ListItemUtils.setListItem(MarkerListActivity.this,
|
||||
view, name, iconId, contentDescription, category, null, null, time, description);
|
||||
long time = cursor.getLong(timeIndex);
|
||||
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);
|
||||
|
||||
@@ -76,9 +76,11 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
|
||||
|
||||
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 ICON_FIELD = "icon";
|
||||
private static final String ICON_CONTENT_DESCRIPTION_FIELD = "iconContentDescription";
|
||||
private static final String CATEGORY_FIELD = "category";
|
||||
private static final String TOTAL_TIME_FIELD = "totalTime";
|
||||
private static final String TOTAL_DISTANCE_FIELD = "totalDistance";
|
||||
@@ -177,23 +179,19 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
|
||||
view = convertView;
|
||||
}
|
||||
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);
|
||||
int iconId = (Integer) resultMap.get(ICON_FIELD);
|
||||
String iconContentDescription = (String) resultMap.get(ICON_CONTENT_DESCRIPTION_FIELD);
|
||||
String category = (String) resultMap.get(CATEGORY_FIELD);
|
||||
String totalTime = (String) resultMap.get(TOTAL_TIME_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);
|
||||
ListItemUtils.setListItem(SearchListActivity.this,
|
||||
view,
|
||||
name,
|
||||
iconId,
|
||||
iconContentDescription,
|
||||
category,
|
||||
totalTime,
|
||||
totalDistance,
|
||||
startTime,
|
||||
|
||||
ListItemUtils.setListItem(SearchListActivity.this, view, isRecording, isPaused, iconId,
|
||||
iconContentDescriptionId, name, category, totalTime, totalDistance, startTime,
|
||||
description);
|
||||
return view;
|
||||
}
|
||||
@@ -410,16 +408,20 @@ public class SearchListActivity extends AbstractMyTracksActivity implements Dele
|
||||
}
|
||||
|
||||
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(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(START_TIME_FIELD, waypoint.getLocation().getTime());
|
||||
|
||||
// Display the marker's track name in the total time field
|
||||
resultMap.put(TOTAL_TIME_FIELD, trackName == null ? null
|
||||
: getString(R.string.search_list_marker_track_location, trackName));
|
||||
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(TRACK_ID_FIELD, waypoint.getTrackId());
|
||||
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) {
|
||||
boolean isRecording = track.getId() == recordingTrackId;
|
||||
String name = track.getName();
|
||||
TripStatistics tripStatitics = track.getTripStatistics();
|
||||
resultMap.put(NAME_FIELD, track.getName());
|
||||
int iconId;
|
||||
int iconContentDescriptionId;
|
||||
if (isRecording) {
|
||||
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(track.getIcon());
|
||||
iconContentDescriptionId = R.string.icon_track;
|
||||
}
|
||||
resultMap.put(ICON_FIELD, iconId);
|
||||
resultMap.put(ICON_CONTENT_DESCRIPTION_FIELD, getString(iconContentDescriptionId));
|
||||
long startTime = tripStatitics.getStartTime();
|
||||
String startTimeDisplay = StringUtils.formatDateTime(this, startTime).equals(name) ? null
|
||||
: StringUtils.formatRelativeDateTime(this, startTime);
|
||||
|
||||
resultMap.put(IS_RECORDING_FIELD, isRecording);
|
||||
resultMap.put(IS_PAUSED_FIELD, recordingTrackPaused);
|
||||
resultMap.put(ICON_ID_FIELD, TrackIconUtils.getIconDrawable(track.getIcon()));
|
||||
resultMap.put(ICON_CONTENT_DESCRIPTION_ID_FIELD, R.string.icon_track);
|
||||
resultMap.put(NAME_FIELD, name);
|
||||
resultMap.put(CATEGORY_FIELD, track.getCategory());
|
||||
resultMap.put(TOTAL_TIME_FIELD, isRecording ? null : StringUtils.formatElapsedTime(
|
||||
tripStatitics.getTotalTime()));
|
||||
resultMap.put(TOTAL_DISTANCE_FIELD, isRecording ? null : StringUtils.formatDistance(
|
||||
this, tripStatitics.getTotalDistance(), metricUnits));
|
||||
resultMap.put(START_TIME_FIELD, tripStatitics.getStartTime());
|
||||
resultMap.put(TOTAL_TIME_FIELD, StringUtils.formatElapsedTime(tripStatitics.getTotalTime()));
|
||||
resultMap.put(TOTAL_DISTANCE_FIELD,
|
||||
StringUtils.formatDistance(this, tripStatitics.getTotalDistance(), metricUnits));
|
||||
resultMap.put(START_TIME_FIELD, startTimeDisplay);
|
||||
resultMap.put(DESCRIPTION_FIELD, track.getDescription());
|
||||
resultMap.put(TRACK_ID_FIELD, track.getId());
|
||||
resultMap.put(MARKER_ID_FIELD, null);
|
||||
|
||||
@@ -262,37 +262,27 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
|
||||
@Override
|
||||
public void bindView(View view, Context context, Cursor cursor) {
|
||||
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 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;
|
||||
int iconId = TrackIconUtils.getIconDrawable(cursor.getString(iconIndex));
|
||||
String name = cursor.getString(nameIndex);
|
||||
int iconId;
|
||||
int iconContentDescriptionId;
|
||||
if (isRecording) {
|
||||
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);
|
||||
String totalTime = StringUtils.formatElapsedTime(cursor.getLong(totalTimeIndex));
|
||||
String totalDistance = StringUtils.formatDistance(
|
||||
TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
|
||||
long startTime = cursor.getLong(startTimeIndex);
|
||||
String description = cursor.getString(descriptionIndex);
|
||||
ListItemUtils.setListItem(TrackListActivity.this, view, name, iconId,
|
||||
iconContentDescription, category, totalTime, totalDistance, startTime, description);
|
||||
String startTimeDisplay = StringUtils.formatDateTime(context, startTime).equals(name) ? null
|
||||
: StringUtils.formatRelativeDateTime(context, startTime);
|
||||
|
||||
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);
|
||||
|
||||
@@ -28,9 +28,9 @@ import com.google.android.maps.mytracks.R;
|
||||
|
||||
import android.location.Location;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -47,10 +47,10 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
|
||||
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 UiUpdateThread uiUpdateThread;
|
||||
private Handler handler;
|
||||
|
||||
private Location lastLocation = null;
|
||||
private TripStatistics lastTripStatistics = null;
|
||||
@@ -58,34 +58,16 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
// A runnable to update the total time field.
|
||||
private final Runnable updateTotalTime = new Runnable() {
|
||||
public void run() {
|
||||
if (isResumed() && isSelectedTrackRecording() && !isSelectedTrackPaused()
|
||||
&& lastTripStatistics != null) {
|
||||
StatsUtils.setTotalTimeValue(getActivity(), System.currentTimeMillis()
|
||||
- lastTripStatistics.getStopTime() + lastTripStatistics.getTotalTime());
|
||||
if (isResumed() && isSelectedTrackRecording()) {
|
||||
if (!isSelectedTrackPaused() && lastTripStatistics != null) {
|
||||
StatsUtils.setTotalTimeValue(getActivity(), System.currentTimeMillis()
|
||||
- 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
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
@@ -95,6 +77,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
handler = new Handler();
|
||||
updateUi(getActivity());
|
||||
}
|
||||
|
||||
@@ -108,10 +91,7 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
pauseTrackDataHub();
|
||||
if (uiUpdateThread != null) {
|
||||
uiUpdateThread.interrupt();
|
||||
uiUpdateThread = null;
|
||||
}
|
||||
handler.removeCallbacks(updateTotalTime);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -159,13 +139,9 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
||||
@Override
|
||||
public void onSelectedTrackChanged(Track track) {
|
||||
if (isResumed()) {
|
||||
if (uiUpdateThread != null) {
|
||||
uiUpdateThread.interrupt();
|
||||
uiUpdateThread = null;
|
||||
}
|
||||
handler.removeCallbacks(updateTotalTime);
|
||||
if (isSelectedTrackRecording()) {
|
||||
uiUpdateThread = new UiUpdateThread();
|
||||
uiUpdateThread.start();
|
||||
handler.post(updateTotalTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,28 +37,31 @@ public class ListItemUtils {
|
||||
*
|
||||
* @param context the context
|
||||
* @param view the list item view
|
||||
* @param isRecording true if recording
|
||||
* @param isPaused true if paused
|
||||
* @param name the name value
|
||||
* @param iconId the icon id
|
||||
* @param iconContentDescription the icon content description
|
||||
* @param iconContentDescriptionId the icon content description id
|
||||
* @param category the category value
|
||||
* @param totalTime the total time value
|
||||
* @param totalDistance the total distance value
|
||||
* @param startTime the start time value
|
||||
* @param description the description value
|
||||
*/
|
||||
public static void setListItem(Context context, View view,
|
||||
String name,
|
||||
int iconId,
|
||||
String iconContentDescription,
|
||||
String category,
|
||||
String totalTime,
|
||||
String totalDistance,
|
||||
long startTime,
|
||||
String description) {
|
||||
public static void setListItem(Context context, View view, boolean isRecording, boolean isPaused,
|
||||
int iconId, int iconContentDescriptionId, String name, String category, String totalTime,
|
||||
String totalDistance, String startTime, String description) {
|
||||
|
||||
if (isRecording) {
|
||||
iconId = isPaused ? R.drawable.status_paused : R.drawable.status_recording;
|
||||
iconContentDescriptionId = isPaused ? R.string.icon_pause_recording
|
||||
: R.string.icon_record_track;
|
||||
}
|
||||
|
||||
ImageView iconImageView = (ImageView) view.findViewById(R.id.list_item_icon);
|
||||
iconImageView.setImageResource(iconId);
|
||||
iconImageView.setContentDescription(iconContentDescription);
|
||||
|
||||
iconImageView.setContentDescription(context.getString(iconContentDescriptionId));
|
||||
|
||||
TextView nameTextView = (TextView) view.findViewById(R.id.list_item_name);
|
||||
nameTextView.setText(name);
|
||||
|
||||
@@ -66,19 +69,21 @@ public class ListItemUtils {
|
||||
setTextView(categoryTextView, category);
|
||||
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
setTextView(descriptionTextView, description);
|
||||
setTextView(descriptionTextView, isRecording ? null : description);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||