Add menu option for merge and play

This commit is contained in:
Jimmy Shih
2013-11-24 12:56:42 -08:00
parent 1e4451ce41
commit 47c189409e
12 changed files with 248 additions and 76 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

+1 -1
View File
@@ -17,7 +17,7 @@ limitations under the License.
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item <item
android:icon="@drawable/ic_menu_map_layer" android:icon="@drawable/ic_menu_map_layer"
android:orderInCategory="6" android:orderInCategory="7"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
android:title="@string/menu_map_layer"> android:title="@string/menu_map_layer">
<menu> <menu>
+15 -10
View File
@@ -44,50 +44,55 @@ limitations under the License.
android:id="@+id/track_detail_markers" android:id="@+id/track_detail_markers"
android:orderInCategory="5" android:orderInCategory="5"
android:title="@string/menu_markers"/> android:title="@string/menu_markers"/>
<!-- android:orderInCategory="6" is in map.xml --> <item
android:icon="@drawable/ic_menu_merge"
android:id="@+id/track_detail_merge"
android:orderInCategory="6"
android:title="@string/menu_merge"/>
<!-- android:orderInCategory="7" is in map.xml -->
<item <item
android:icon="@drawable/ic_menu_export" android:icon="@drawable/ic_menu_export"
android:id="@+id/track_detail_export" android:id="@+id/track_detail_export"
android:orderInCategory="7" android:orderInCategory="8"
android:title="@string/menu_export"/> android:title="@string/menu_export"/>
<item <item
android:icon="@drawable/ic_menu_edit" android:icon="@drawable/ic_menu_edit"
android:id="@+id/track_detail_edit" android:id="@+id/track_detail_edit"
android:orderInCategory="8" android:orderInCategory="9"
android:title="@string/menu_edit"/> android:title="@string/menu_edit"/>
<item <item
android:icon="@drawable/ic_menu_delete" android:icon="@drawable/ic_menu_delete"
android:id="@+id/track_detail_delete" android:id="@+id/track_detail_delete"
android:orderInCategory="9" android:orderInCategory="10"
android:title="@string/menu_delete"/> android:title="@string/menu_delete"/>
<item <item
android:icon="@drawable/ic_menu_voice_frequency" android:icon="@drawable/ic_menu_voice_frequency"
android:id="@+id/track_detail_voice_frequency" android:id="@+id/track_detail_voice_frequency"
android:orderInCategory="10" android:orderInCategory="11"
android:title="@string/menu_voice_frequency"/> android:title="@string/menu_voice_frequency"/>
<item <item
android:icon="@drawable/ic_menu_split_frequency" android:icon="@drawable/ic_menu_split_frequency"
android:id="@+id/track_detail_split_frequency" android:id="@+id/track_detail_split_frequency"
android:orderInCategory="11" android:orderInCategory="12"
android:title="@string/menu_split_frequency"/> android:title="@string/menu_split_frequency"/>
<item <item
android:icon="@drawable/ic_menu_sensor_state" android:icon="@drawable/ic_menu_sensor_state"
android:id="@+id/track_detail_sensor_state" android:id="@+id/track_detail_sensor_state"
android:orderInCategory="12" android:orderInCategory="13"
android:title="@string/menu_sensor_state"/> android:title="@string/menu_sensor_state"/>
<item <item
android:icon="@drawable/ic_menu_settings" android:icon="@drawable/ic_menu_settings"
android:id="@+id/track_detail_settings" android:id="@+id/track_detail_settings"
android:orderInCategory="13" android:orderInCategory="14"
android:title="@string/menu_settings"/> android:title="@string/menu_settings"/>
<item <item
android:icon="@drawable/ic_menu_feedback" android:icon="@drawable/ic_menu_feedback"
android:id="@+id/track_detail_feedback" android:id="@+id/track_detail_feedback"
android:orderInCategory="14" android:orderInCategory="15"
android:title="@string/menu_feedback"/> android:title="@string/menu_feedback"/>
<item <item
android:icon="@drawable/ic_menu_help" android:icon="@drawable/ic_menu_help"
android:id="@+id/track_detail_help" android:id="@+id/track_detail_help"
android:orderInCategory="15" android:orderInCategory="16"
android:title="@string/menu_help"/> android:title="@string/menu_help"/>
</menu> </menu>
+4
View File
@@ -26,6 +26,10 @@ limitations under the License.
android:id="@+id/track_list_start_gps" android:id="@+id/track_list_start_gps"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
android:title="@string/menu_start_gps"/> android:title="@string/menu_start_gps"/>
<item
android:icon="@drawable/ic_menu_merge"
android:id="@+id/track_list_merge"
android:title="@string/menu_merge"/>
<item <item
android:icon="@drawable/ic_menu_refresh" android:icon="@drawable/ic_menu_refresh"
android:id="@+id/track_list_refresh" android:id="@+id/track_list_refresh"
+6
View File
@@ -1158,6 +1158,12 @@ limitations under the License.
Character limit: ~20 (1 line)"> Character limit: ~20 (1 line)">
Markers Markers
</string> </string>
<string name="menu_merge"
translation_description="In the menu, to merge and play tracks.
Character limit: ~20 (1 line)">
Merge &amp; play
</string>
<string name="menu_play" <string name="menu_play"
translation_description="In the menu, to play a track. translation_description="In the menu, to play a track.
@@ -25,6 +25,7 @@ import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment.Co
import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment.ConfirmSyncCaller; import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment.ConfirmSyncCaller;
import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment; import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment;
import com.google.android.apps.mytracks.fragments.MergeDialogFragment.MergeCaller;
import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment; import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment.ShareTrackCaller; import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment.ShareTrackCaller;
import com.google.android.apps.mytracks.io.drive.SendDriveActivity; import com.google.android.apps.mytracks.io.drive.SendDriveActivity;
@@ -70,7 +71,7 @@ import java.io.IOException;
*/ */
public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements
ChooseAccountCaller, ConfirmSyncCaller, CheckPermissionCaller, ShareTrackCaller, ChooseAccountCaller, ConfirmSyncCaller, CheckPermissionCaller, ShareTrackCaller,
ConfirmDeleteCaller { ConfirmDeleteCaller, MergeCaller {
private static final String TAG = AbstractMyTracksActivity.class.getSimpleName(); private static final String TAG = AbstractMyTracksActivity.class.getSimpleName();
private static final String SEND_REQUEST_KEY = "send_request_key"; private static final String SEND_REQUEST_KEY = "send_request_key";
@@ -97,8 +98,43 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
outState.putParcelable(SEND_REQUEST_KEY, sendRequest); outState.putParcelable(SEND_REQUEST_KEY, sendRequest);
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case DRIVE_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.DRIVE_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onDrivePermissionSuccess();
} else {
onPermissionFailure();
}
break;
case FUSION_TABLES_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.FUSION_TABLES_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onFusionTablesSuccess();
} else {
onPermissionFailure();
}
break;
case SPREADSHEETS_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.SPREADSHEETS_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onSpreadsheetsPermissionSuccess();
} else {
onPermissionFailure();
}
break;
case DELETE_REQUEST_CODE:
onDeleted();
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
/** /**
* Share a track. * Shares a track.
* *
* @param trackId the track id * @param trackId the track id
*/ */
@@ -131,7 +167,8 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
} }
sendRequest.setAccount(new Account(googleAccount, Constants.ACCOUNT_TYPE)); sendRequest.setAccount(new Account(googleAccount, Constants.ACCOUNT_TYPE));
if (sendRequest.isSendDrive() && sendRequest.isDriveSync() && sendRequest.isDriveSyncConfirm()) { if (sendRequest.isSendDrive() && sendRequest.isDriveSync()
&& sendRequest.isDriveSyncConfirm()) {
new ConfirmSyncDialogFragment().show( new ConfirmSyncDialogFragment().show(
getSupportFragmentManager(), ConfirmSyncDialogFragment.CONFIRM_SYNC_DIALOG_TAG); getSupportFragmentManager(), ConfirmSyncDialogFragment.CONFIRM_SYNC_DIALOG_TAG);
} else { } else {
@@ -191,41 +228,6 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
} }
} }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case DRIVE_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.DRIVE_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onDrivePermissionSuccess();
} else {
onPermissionFailure();
}
break;
case FUSION_TABLES_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.FUSION_TABLES_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onFusionTablesSuccess();
} else {
onPermissionFailure();
}
break;
case SPREADSHEETS_REQUEST_CODE:
SendToGoogleUtils.cancelNotification(this, SendToGoogleUtils.SPREADSHEETS_NOTIFICATION_ID);
if (resultCode == Activity.RESULT_OK) {
onSpreadsheetsPermissionSuccess();
} else {
onPermissionFailure();
}
break;
case DELETE_REQUEST_CODE:
onDeleted();
break;
default:
super.onActivityResult(requestCode, resultCode, data);
}
}
private void onDrivePermissionSuccess() { private void onDrivePermissionSuccess() {
// Check Maps permission // Check Maps permission
if (sendRequest.isSendMaps()) { if (sendRequest.isSendMaps()) {
@@ -359,34 +361,11 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
startActivity(intent); startActivity(intent);
} }
/**
* Play track in Google Earth.
*
* @param trackIds the track ids
*/
protected void playTrack(long[] trackIds) {
AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_PLAY);
if (GoogleEarthUtils.isEarthInstalled(this)) {
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_IDS, trackIds)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
startActivity(intent);
} else {
new InstallEarthDialogFragment().show(
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
}
}
protected void deleteTrack(long[] trackIds) { protected void deleteTrack(long[] trackIds) {
ConfirmDeleteDialogFragment.newInstance(trackIds) ConfirmDeleteDialogFragment.newInstance(trackIds)
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
} }
abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection();
abstract protected void onDeleted();
@Override @Override
public void onConfirmDeleteDone(long[] trackIds) { public void onConfirmDeleteDone(long[] trackIds) {
boolean stopRecording = false; boolean stopRecording = false;
@@ -409,4 +388,32 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
intent.putExtra(DeleteActivity.EXTRA_TRACK_IDS, trackIds); intent.putExtra(DeleteActivity.EXTRA_TRACK_IDS, trackIds);
startActivityForResult(intent, DELETE_REQUEST_CODE); startActivityForResult(intent, DELETE_REQUEST_CODE);
} }
abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection();
abstract protected void onDeleted();
/**
* Play track in Google Earth.
*
* @param trackIds the track ids
*/
protected void playTrack(long[] trackIds) {
AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_PLAY);
if (GoogleEarthUtils.isEarthInstalled(this)) {
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_IDS, trackIds)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
startActivity(intent);
} else {
new InstallEarthDialogFragment().show(
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
}
}
@Override
public void onMergeDone(long[] trackIds) {
playTrack(trackIds);
}
} }
@@ -30,6 +30,7 @@ import com.google.android.apps.mytracks.fragments.ExportDialogFragment;
import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportCaller; import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportCaller;
import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportType; import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportType;
import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment; import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment;
import com.google.android.apps.mytracks.fragments.MergeDialogFragment;
import com.google.android.apps.mytracks.fragments.MyTracksMapFragment; import com.google.android.apps.mytracks.fragments.MyTracksMapFragment;
import com.google.android.apps.mytracks.fragments.StatsFragment; import com.google.android.apps.mytracks.fragments.StatsFragment;
import com.google.android.apps.mytracks.io.file.TrackFileFormat; import com.google.android.apps.mytracks.io.file.TrackFileFormat;
@@ -426,6 +427,10 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
.putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId); .putExtra(MarkerListActivity.EXTRA_TRACK_ID, trackId);
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.track_detail_merge:
MergeDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), MergeDialogFragment.MERGE_DIALOG_TAG);
return true;
case R.id.track_detail_voice_frequency: case R.id.track_detail_voice_frequency:
FrequencyDialogFragment.newInstance(R.string.voice_frequency_key, FrequencyDialogFragment.newInstance(R.string.voice_frequency_key,
PreferencesUtils.VOICE_FREQUENCY_DEFAULT, R.string.menu_voice_frequency) PreferencesUtils.VOICE_FREQUENCY_DEFAULT, R.string.menu_voice_frequency)
@@ -26,6 +26,7 @@ import com.google.android.apps.mytracks.fragments.EulaDialogFragment;
import com.google.android.apps.mytracks.fragments.EulaDialogFragment.EulaCaller; import com.google.android.apps.mytracks.fragments.EulaDialogFragment.EulaCaller;
import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment; import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment;
import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment.FileTypeCaller; import com.google.android.apps.mytracks.fragments.FileTypeDialogFragment.FileTypeCaller;
import com.google.android.apps.mytracks.fragments.MergeDialogFragment;
import com.google.android.apps.mytracks.io.file.TrackFileFormat; import com.google.android.apps.mytracks.io.file.TrackFileFormat;
import com.google.android.apps.mytracks.io.file.exporter.SaveActivity; import com.google.android.apps.mytracks.io.file.exporter.SaveActivity;
import com.google.android.apps.mytracks.io.file.importer.ImportActivity; import com.google.android.apps.mytracks.io.file.importer.ImportActivity;
@@ -46,6 +47,7 @@ import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.apps.mytracks.util.StringUtils; import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.apps.mytracks.util.TrackIconUtils; import com.google.android.apps.mytracks.util.TrackIconUtils;
import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils; import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils;
import com.google.android.apps.mytracks.util.TrackUtils;
import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.maps.mytracks.BuildConfig; import com.google.android.maps.mytracks.BuildConfig;
@@ -275,8 +277,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
@Override @Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new CursorLoader(TrackListActivity.this, TracksColumns.CONTENT_URI, PROJECTION, null, return new CursorLoader(TrackListActivity.this, TracksColumns.CONTENT_URI, PROJECTION, null,
null, null, TrackUtils.TRACK_SORT_ORDER);
"IFNULL(" + TracksColumns.SHAREDWITHME + ",0) ASC, " + TracksColumns.STARTTIME + " DESC");
} }
@Override @Override
@@ -531,6 +532,10 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
} }
myTracksLocationManager.close(); myTracksLocationManager.close();
return true; return true;
case R.id.track_list_merge:
MergeDialogFragment.newInstance(-1L)
.show(getSupportFragmentManager(), MergeDialogFragment.MERGE_DIALOG_TAG);
return true;
case R.id.track_list_refresh: case R.id.track_list_refresh:
if (driveSync) { if (driveSync) {
SyncUtils.syncNow(this); SyncUtils.syncNow(this);
@@ -0,0 +1,136 @@
/*
* Copyright 2013 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, 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.
*/
package com.google.android.apps.mytracks.fragments;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.util.TrackUtils;
import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.SparseBooleanArray;
import java.util.ArrayList;
/**
* A DialogFragment to merge and play tracks.
*
* @author Jimmy Shih
*/
public class MergeDialogFragment extends DialogFragment {
public static final String MERGE_DIALOG_TAG = "mergeDialog";
/**
* Interface for caller of this dialog fragment.
*
* @author Jimmy Shih
*/
public interface MergeCaller {
/**
* Called when merge is done.
*/
public void onMergeDone(long[] trackIds);
}
private static final String KEY_TRACK_ID = "trackId";
public static MergeDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle();
bundle.putLong(KEY_TRACK_ID, trackId);
MergeDialogFragment fragment = new MergeDialogFragment();
fragment.setArguments(bundle);
return fragment;
}
private MergeCaller caller;
private String[] items;
private boolean[] checkedItems;
private long[] trackIds;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
caller = (MergeCaller) activity;
} catch (ClassCastException e) {
throw new ClassCastException(
activity.toString() + " must implement " + MergeCaller.class.getSimpleName());
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
loadData();
return new AlertDialog.Builder(getActivity()).setMultiChoiceItems(items, checkedItems, null)
.setNegativeButton(R.string.generic_cancel, null)
.setPositiveButton(R.string.menu_play, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SparseBooleanArray array = ((AlertDialog) dialog).getListView()
.getCheckedItemPositions();
caller.onMergeDone(getChecked(array));
}
}).setTitle(R.string.menu_merge).create();
}
private long[] getChecked(SparseBooleanArray array) {
ArrayList<Long> checked = new ArrayList<Long>();
for (int i = 0; i < array.size(); i++) {
if (array.valueAt(i)) {
checked.add(trackIds[i]);
}
}
long[] result = new long[checked.size()];
for (int i = 0; i < checked.size(); i++) {
result[i] = checked.get(i).longValue();
}
return result;
}
private void loadData() {
long trackId = getArguments().getLong(KEY_TRACK_ID);
MyTracksProviderUtils myTracksProviderUtils = MyTracksProviderUtils.Factory.get(getActivity());
Cursor cursor = myTracksProviderUtils.getTrackCursor(null, null, TrackUtils.TRACK_SORT_ORDER);
if (cursor == null) {
items = new String[] {};
checkedItems = new boolean[] {};
trackIds = new long[] {};
} else {
int count = cursor.getCount();
items = new String[count];
checkedItems = new boolean[count];
trackIds = new long[count];
for (int i = 0; i < count; i++) {
cursor.moveToPosition(i);
Track track = myTracksProviderUtils.createTrack(cursor);
items[i] = track.getName();
checkedItems[i] = trackId != -1L && track.getId() == trackId;
trackIds[i] = track.getId();
}
}
}
}
@@ -18,6 +18,7 @@ package com.google.android.apps.mytracks.util;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils; import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
@@ -32,6 +33,9 @@ public class TrackUtils {
private TrackUtils() {} private TrackUtils() {}
public static String TRACK_SORT_ORDER = "IFNULL(" + TracksColumns.SHAREDWITHME + ",0) ASC, "
+ TracksColumns.STARTTIME + " DESC";
public static void updateTrack(Context context, Track track, String name, String category, public static void updateTrack(Context context, Track track, String name, String category,
String description, MyTracksProviderUtils myTracksProviderUtils, String description, MyTracksProviderUtils myTracksProviderUtils,
TrackRecordingServiceConnection trackRecordingServiceConnection, boolean newWeight) { TrackRecordingServiceConnection trackRecordingServiceConnection, boolean newWeight) {