forked from upstream-mirrors/OpenTracks
Improve start time layout in list view.
Display share via drive before share via map url.
This commit is contained in:
@@ -51,17 +51,36 @@ limitations under the License.
|
|||||||
style="@style/TextLarge" />
|
style="@style/TextLarge" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/list_item_start_time"
|
android:id="@+id/list_item_date"
|
||||||
android:layout_gravity="bottom"
|
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:singleLine="true"
|
||||||
android:textColor="@android:color/secondary_text_dark"
|
android:textColor="@android:color/secondary_text_dark"
|
||||||
style="@style/TextSmall" />
|
style="@style/TextSmall" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<TextView
|
|
||||||
android:id="@+id/list_item_time_distance"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textColor="@android:color/primary_text_dark"
|
|
||||||
style="@style/TextSmall" />
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/list_item_recording"
|
android:id="@+id/list_item_recording"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
|
|||||||
@@ -27,20 +27,20 @@ limitations under the License.
|
|||||||
android:orderInCategory="2"
|
android:orderInCategory="2"
|
||||||
android:showAsAction="ifRoom"
|
android:showAsAction="ifRoom"
|
||||||
android:title="@string/menu_play"/>
|
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
|
<item
|
||||||
android:icon="@drawable/menu_share_drive"
|
android:icon="@drawable/menu_share_drive"
|
||||||
android:id="@+id/track_detail_share_drive"
|
android:id="@+id/track_detail_share_drive"
|
||||||
android:orderInCategory="4"
|
android:orderInCategory="3"
|
||||||
android:showAsAction="ifRoom"
|
android:showAsAction="ifRoom"
|
||||||
android:title="@string/menu_share_drive">
|
android:title="@string/menu_share_drive">
|
||||||
</item>
|
</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
|
<item
|
||||||
android:icon="@drawable/menu_markers"
|
android:icon="@drawable/menu_markers"
|
||||||
android:id="@+id/track_detail_markers"
|
android:id="@+id/track_detail_markers"
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ import java.util.Locale;
|
|||||||
* @author Leif Hendrik Wilden
|
* @author Leif Hendrik Wilden
|
||||||
* @author Rodrigo Damazio
|
* @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_TRACK_ID = "track_id";
|
||||||
public static final String EXTRA_MARKER_ID = "marker_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 insertMarkerMenuItem;
|
||||||
private MenuItem playMenuItem;
|
private MenuItem playMenuItem;
|
||||||
private MenuItem shareMenuItem;
|
|
||||||
private MenuItem shareDriveMenuItem;
|
private MenuItem shareDriveMenuItem;
|
||||||
|
private MenuItem shareMenuItem;
|
||||||
private MenuItem sendGoogleMenuItem;
|
private MenuItem sendGoogleMenuItem;
|
||||||
private MenuItem saveMenuItem;
|
private MenuItem saveMenuItem;
|
||||||
private MenuItem voiceFrequencyMenuItem;
|
private MenuItem voiceFrequencyMenuItem;
|
||||||
@@ -344,18 +345,18 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Con
|
|||||||
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
|
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
|
||||||
}
|
}
|
||||||
return true;
|
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:
|
case R.id.track_detail_share_drive:
|
||||||
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
|
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
|
||||||
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
|
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
|
||||||
getString(R.string.share_track_drive_confirm_message), trackId)
|
getString(R.string.share_track_drive_confirm_message), trackId)
|
||||||
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
|
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
|
||||||
return true;
|
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:
|
case R.id.track_detail_markers:
|
||||||
intent = IntentUtils.newIntent(this, MarkerListActivity.class)
|
intent = IntentUtils.newIntent(this, MarkerListActivity.class)
|
||||||
.putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId);
|
.putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId);
|
||||||
@@ -483,7 +484,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Con
|
|||||||
if (markerId != -1L) {
|
if (markerId != -1L) {
|
||||||
Waypoint waypoint = myTracksProviderUtils.getWaypoint(markerId);
|
Waypoint waypoint = myTracksProviderUtils.getWaypoint(markerId);
|
||||||
if (waypoint == null) {
|
if (waypoint == null) {
|
||||||
finish();
|
finish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
trackId = waypoint.getTrackId();
|
trackId = waypoint.getTrackId();
|
||||||
|
|||||||
@@ -19,10 +19,13 @@ package com.google.android.apps.mytracks.util;
|
|||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.text.format.DateUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities to display a list item.
|
* Utilities to display a list item.
|
||||||
*
|
*
|
||||||
@@ -68,9 +71,12 @@ public class ListItemUtils {
|
|||||||
TextView timeDistanceTextView = (TextView) view.findViewById(R.id.list_item_time_distance);
|
TextView timeDistanceTextView = (TextView) view.findViewById(R.id.list_item_time_distance);
|
||||||
setTextView(timeDistanceTextView, getTimeDistance(isRecording, totalTime, totalDistance), 0);
|
setTextView(timeDistanceTextView, getTimeDistance(isRecording, totalTime, totalDistance), 0);
|
||||||
|
|
||||||
TextView startTimeTextView = (TextView) view.findViewById(R.id.list_item_start_time);
|
String[] startTimeDisplay = getStartTime(isRecording, context, startTime);
|
||||||
setTextView(
|
TextView dateTextView = (TextView) view.findViewById(R.id.list_item_date);
|
||||||
startTimeTextView, isRecording ? null : StringUtils.formatTime(context, startTime), 0);
|
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);
|
TextView recordingTextView = (TextView) view.findViewById(R.id.list_item_recording);
|
||||||
String value = isRecording ? context.getString(
|
String value = isRecording ? context.getString(
|
||||||
@@ -92,7 +98,8 @@ public class ListItemUtils {
|
|||||||
* @param totalTime the total time
|
* @param totalTime the total time
|
||||||
* @param totalDistance the total distance
|
* @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) {
|
if (isRecording) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -104,7 +111,7 @@ public class ListItemUtils {
|
|||||||
}
|
}
|
||||||
return totalTime + " (" + totalDistance + ")";
|
return totalTime + " (" + totalDistance + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the description text.
|
* Gets the description text.
|
||||||
*
|
*
|
||||||
@@ -124,7 +131,46 @@ public class ListItemUtils {
|
|||||||
}
|
}
|
||||||
return "[" + category + "] " + description;
|
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.
|
* Sets a text view.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -59,30 +59,11 @@ public class StringUtils {
|
|||||||
* @param time the time in milliseconds
|
* @param time the time in milliseconds
|
||||||
*/
|
*/
|
||||||
public static String formatDateTime(Context context, long time) {
|
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();
|
+ 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
|
* Formats the time using the ISO 8601 date time format with fractional
|
||||||
* seconds in UTC time zone.
|
* seconds in UTC time zone.
|
||||||
|
|||||||
Reference in New Issue
Block a user