Improve start time layout in list view.

Display share via drive before share via map url.
This commit is contained in:
Jimmy Shih
2013-02-14 12:56:52 -08:00
parent 66fd25365b
commit 10b714210b
5 changed files with 97 additions and 50 deletions
+25 -6
View File
@@ -51,17 +51,36 @@ limitations under the License.
style="@style/TextLarge" />
</LinearLayout>
<TextView
android:id="@+id/list_item_start_time"
android:id="@+id/list_item_date"
android:layout_gravity="bottom"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="@android:color/secondary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_width="0dp"
android:orientation="vertical" >
<TextView
android:id="@+id/list_item_time_distance"
android:singleLine="true"
android:textColor="@android:color/primary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<TextView
android:id="@+id/list_item_time"
android:layout_gravity="bottom"
android:paddingLeft="8dp"
android:singleLine="true"
android:textColor="@android:color/secondary_text_dark"
style="@style/TextSmall" />
</LinearLayout>
<TextView
android:id="@+id/list_item_time_distance"
android:singleLine="true"
android:textColor="@android:color/primary_text_dark"
style="@style/TextSmall" />
<TextView
android:id="@+id/list_item_recording"
android:singleLine="true"
+8 -8
View File
@@ -27,20 +27,20 @@ limitations under the License.
android:orderInCategory="2"
android:showAsAction="ifRoom"
android:title="@string/menu_play"/>
<item
android:icon="@drawable/menu_share"
android:id="@+id/track_detail_share"
android:orderInCategory="3"
android:showAsAction="ifRoom"
android:title="@string/menu_share">
</item>
<item
android:icon="@drawable/menu_share_drive"
android:id="@+id/track_detail_share_drive"
android:orderInCategory="4"
android:orderInCategory="3"
android:showAsAction="ifRoom"
android:title="@string/menu_share_drive">
</item>
<item
android:icon="@drawable/menu_share"
android:id="@+id/track_detail_share"
android:orderInCategory="4"
android:showAsAction="ifRoom"
android:title="@string/menu_share">
</item>
<item
android:icon="@drawable/menu_markers"
android:id="@+id/track_detail_markers"
@@ -71,7 +71,8 @@ import java.util.Locale;
* @author Leif Hendrik Wilden
* @author Rodrigo Damazio
*/
public class TrackDetailActivity extends AbstractMyTracksActivity implements ConfirmCaller, DeleteOneTrackCaller {
public class TrackDetailActivity extends AbstractMyTracksActivity
implements ConfirmCaller, DeleteOneTrackCaller {
public static final String EXTRA_TRACK_ID = "track_id";
public static final String EXTRA_MARKER_ID = "marker_id";
@@ -98,8 +99,8 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Con
private MenuItem insertMarkerMenuItem;
private MenuItem playMenuItem;
private MenuItem shareMenuItem;
private MenuItem shareDriveMenuItem;
private MenuItem shareMenuItem;
private MenuItem sendGoogleMenuItem;
private MenuItem saveMenuItem;
private MenuItem voiceFrequencyMenuItem;
@@ -344,18 +345,18 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Con
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
}
return true;
case R.id.track_detail_share:
ConfirmDialogFragment.newInstance(R.string.confirm_share_map_key,
PreferencesUtils.CONFIRM_SHARE_MAP_DEFAULT, StringUtils.getHtml(
this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url),
trackId).show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true;
case R.id.track_detail_share_drive:
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
getString(R.string.share_track_drive_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true;
case R.id.track_detail_share:
ConfirmDialogFragment.newInstance(R.string.confirm_share_map_key,
PreferencesUtils.CONFIRM_SHARE_MAP_DEFAULT, StringUtils.getHtml(
this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url),
trackId).show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true;
case R.id.track_detail_markers:
intent = IntentUtils.newIntent(this, MarkerListActivity.class)
.putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId);
@@ -483,7 +484,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Con
if (markerId != -1L) {
Waypoint waypoint = myTracksProviderUtils.getWaypoint(markerId);
if (waypoint == null) {
finish();
finish();
return;
}
trackId = waypoint.getTrackId();
@@ -19,10 +19,13 @@ package com.google.android.apps.mytracks.util;
import com.google.android.maps.mytracks.R;
import android.content.Context;
import android.text.format.DateUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Calendar;
/**
* Utilities to display a list item.
*
@@ -68,9 +71,12 @@ public class ListItemUtils {
TextView timeDistanceTextView = (TextView) view.findViewById(R.id.list_item_time_distance);
setTextView(timeDistanceTextView, getTimeDistance(isRecording, totalTime, totalDistance), 0);
TextView startTimeTextView = (TextView) view.findViewById(R.id.list_item_start_time);
setTextView(
startTimeTextView, isRecording ? null : StringUtils.formatTime(context, startTime), 0);
String[] startTimeDisplay = getStartTime(isRecording, context, startTime);
TextView dateTextView = (TextView) view.findViewById(R.id.list_item_date);
setTextView(dateTextView, startTimeDisplay[0], 0);
TextView timeTextView = (TextView) view.findViewById(R.id.list_item_time);
setTextView(timeTextView, startTimeDisplay[1], 0);
TextView recordingTextView = (TextView) view.findViewById(R.id.list_item_recording);
String value = isRecording ? context.getString(
@@ -92,7 +98,8 @@ public class ListItemUtils {
* @param totalTime the total time
* @param totalDistance the total distance
*/
private static String getTimeDistance(boolean isRecording, String totalTime, String totalDistance) {
private static String getTimeDistance(
boolean isRecording, String totalTime, String totalDistance) {
if (isRecording) {
return null;
}
@@ -104,7 +111,7 @@ public class ListItemUtils {
}
return totalTime + " (" + totalDistance + ")";
}
/**
* Gets the description text.
*
@@ -124,7 +131,46 @@ public class ListItemUtils {
}
return "[" + category + "] " + description;
}
/**
* Gets the start time text.
*
* @param isRecording true if recording
* @param context the context
* @param startTime the start time
* @return array of two strings.
*/
private static String[] getStartTime(boolean isRecording, Context context, long startTime) {
if (isRecording || startTime == 0L) {
return new String[] { null, null };
}
if (DateUtils.isToday(startTime)) {
return new String[] { DateUtils.getRelativeTimeSpanString(
startTime, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS,
DateUtils.FORMAT_ABBREV_RELATIVE).toString(), null };
}
int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL;
if (!isThisYear(startTime)) {
flags |= DateUtils.FORMAT_NUMERIC_DATE;
}
return new String[] { DateUtils.formatDateTime(context, startTime, flags),
DateUtils.formatDateTime(
context, startTime, DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_TIME) };
}
/**
* True if the time is this year.
*
* @param time the time
*/
private static boolean isThisYear(long time) {
Calendar now = Calendar.getInstance();
Calendar calendar = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
calendar.setTimeInMillis(time);
return now.get(Calendar.YEAR) == calendar.get(Calendar.YEAR);
}
/**
* Sets a text view.
*
@@ -59,30 +59,11 @@ public class StringUtils {
* @param time the time in milliseconds
*/
public static String formatDateTime(Context context, long time) {
return android.text.format.DateFormat.getDateFormat(context).format(time) + " "
return DateUtils.formatDateTime(
context, time, DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE) + " "
+ DateUtils.formatDateTime(context, time, DateUtils.FORMAT_SHOW_TIME).toString();
}
/**
* Formats the time based on user's phone date/time preferences.
*
* @param context the context
* @param time the time in milliseconds
*/
public static String formatTime(Context context, long time) {
if (time == 0L) {
return null;
}
if (DateUtils.isToday(time)) {
return DateUtils.getRelativeTimeSpanString(time, System.currentTimeMillis(),
DateUtils.MINUTE_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE).toString();
} else {
return DateUtils.formatDateTime(context, time, DateUtils.FORMAT_SHOW_DATE
| DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_ABBREV_MONTH
| DateUtils.FORMAT_ABBREV_TIME);
}
}
/**
* Formats the time using the ISO 8601 date time format with fractional
* seconds in UTC time zone.