mirror of
https://codeberg.org/OpenTracksApp/OpenTracks.git
synced 2026-10-02 09:33:06 +02:00
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" />
|
||||
</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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user