diff --git a/MyTracks/AndroidManifest.xml b/MyTracks/AndroidManifest.xml
index 80f7e11fe..6b255feb1 100755
--- a/MyTracks/AndroidManifest.xml
+++ b/MyTracks/AndroidManifest.xml
@@ -190,28 +190,6 @@ limitations under the License.
android:name="android.app.default_searchable"
android:value="com.google.android.apps.mytracks.SearchActivity" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -244,6 +222,7 @@ limitations under the License.
android:name="android.app.default_searchable"
android:value="com.google.android.apps.mytracks.SearchActivity" />
+
@@ -257,6 +236,11 @@ limitations under the License.
+
+
+
+
+
diff --git a/MyTracks/res/drawable-hdpi/ic_menu_tracklist.png b/MyTracks/res/drawable-hdpi/ic_menu_tracklist.png
deleted file mode 100644
index 68338297b..000000000
Binary files a/MyTracks/res/drawable-hdpi/ic_menu_tracklist.png and /dev/null differ
diff --git a/MyTracks/res/drawable-ldpi/ic_menu_tracklist.png b/MyTracks/res/drawable-ldpi/ic_menu_tracklist.png
deleted file mode 100644
index 0ba0b6bad..000000000
Binary files a/MyTracks/res/drawable-ldpi/ic_menu_tracklist.png and /dev/null differ
diff --git a/MyTracks/res/drawable-mdpi/ic_menu_tracklist.png b/MyTracks/res/drawable-mdpi/ic_menu_tracklist.png
deleted file mode 100644
index 5c86763bb..000000000
Binary files a/MyTracks/res/drawable-mdpi/ic_menu_tracklist.png and /dev/null differ
diff --git a/MyTracks/res/menu/track_detail.xml b/MyTracks/res/menu/track_detail.xml
index 5ed7798dc..95d8bbca8 100644
--- a/MyTracks/res/menu/track_detail.xml
+++ b/MyTracks/res/menu/track_detail.xml
@@ -25,11 +25,6 @@ limitations under the License.
android:id="@+id/menu_stop_recording"
android:showAsAction="always"
android:title="@string/menu_stop_recording"/>
-
-
Stop recording
-
- Tracks
-
clickedData) {
- Intent intent = new Intent(Intent.ACTION_VIEW);
+ Intent intent = new Intent(this, TrackDetailActivity.class)
+ .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (clickedData.containsKey(WAYPOINT_ID_FIELD)) {
- long waypointId = (Long) clickedData.get(WAYPOINT_ID_FIELD);
- Uri uri = ContentUris.withAppendedId(WaypointsColumns.CONTENT_URI, waypointId);
- intent.setDataAndType(uri, WaypointsColumns.CONTENT_ITEMTYPE);
+ intent.putExtra(TrackDetailActivity.WAYPOINT_ID, (Long) clickedData.get(WAYPOINT_ID_FIELD));
} else {
- long trackId = (Long) clickedData.get(TRACK_ID_FIELD);
- Uri uri = ContentUris.withAppendedId(TracksColumns.CONTENT_URI, trackId);
- intent.setDataAndType(uri, TracksColumns.CONTENT_ITEMTYPE);
+ intent.putExtra(TrackDetailActivity.TRACK_ID, (Long) clickedData.get(TRACK_ID_FIELD));
}
return intent;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index c4c586ad2..97df82df0 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -22,31 +22,19 @@ import static com.google.android.apps.mytracks.Constants.TAG;
import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
import com.google.android.apps.mytracks.content.TrackDataHub;
-import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.WaypointCreationRequest;
-import com.google.android.apps.mytracks.content.WaypointsColumns;
import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
-import com.google.android.apps.mytracks.util.AnalyticsUtils;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
-import com.google.android.apps.mytracks.util.EulaUtils;
-import com.google.android.apps.mytracks.util.UriUtils;
-import com.google.android.maps.mytracks.BuildConfig;
import com.google.android.maps.mytracks.R;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
import android.app.TabActivity;
-import android.content.ContentUris;
import android.content.Context;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
-import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.speech.tts.TextToSpeech;
@@ -62,62 +50,44 @@ import android.widget.TabHost;
import android.widget.Toast;
/**
- * The super activity that embeds our sub activities.
+ * An activity to show the track detail.
*
* @author Leif Hendrik Wilden
* @author Rodrigo Damazio
*/
@SuppressWarnings("deprecation")
public class TrackDetailActivity extends TabActivity implements OnTouchListener {
- private static final int DIALOG_EULA_ID = 0;
- private static final int DIALOG_CHECK_UNITS_ID = 1;
- private static final String CHECK_UNITS_PREFERENCE_FILE = "checkunits";
- private static final String CHECK_UNITS_PREFERENCE_KEY = "checkunits.checked";
-
- private TrackDataHub dataHub;
-
- /**
- * Menu manager.
- */
+
+ public static final String TRACK_ID = "track_id";
+ public static final String WAYPOINT_ID = "waypoint_id";
+
+ private MyTracksProviderUtils myTracksProviderUtils;
+ private SharedPreferences sharedPreferences;
+ private TrackDataHub trackDataHub;
private MenuManager menuManager;
-
- /**
- * Preferences.
- */
- private SharedPreferences preferences;
-
+ private TrackRecordingServiceConnection trackRecordingServiceConnection;
+ private NavControls navControls;
+
/**
* True if a new track should be created after the track recording service
* binds.
*/
private boolean startNewTrackRequested = false;
- /**
- * Utilities to deal with the database.
- */
- private MyTracksProviderUtils providerUtils;
-
- /*
- * Tabs/View navigation:
- */
-
- private NavControls navControls;
-
private final Runnable changeTab = new Runnable() {
public void run() {
getTabHost().setCurrentTab(navControls.getCurrentIcons());
}
};
- /*
- * Recording service interaction:
+ /**
+ * Callback when {@linkk TrackRecordingServiceConnection} binding changes.
*/
-
private final Runnable serviceBindCallback = new Runnable() {
@Override
public void run() {
- synchronized (serviceConnection) {
- ITrackRecordingService service = serviceConnection.getServiceIfBound();
+ synchronized (trackRecordingServiceConnection) {
+ ITrackRecordingService service = trackRecordingServiceConnection.getServiceIfBound();
if (startNewTrackRequested && service != null) {
Log.i(TAG, "Starting recording");
startNewTrackRequested = false;
@@ -129,37 +99,21 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
};
- private TrackRecordingServiceConnection serviceConnection;
-
- /*
- * Application lifetime events:
- * ============================
- */
-
@Override
protected void onCreate(Bundle savedInstanceState) {
- Log.d(TAG, "MyTracks.onCreate");
super.onCreate(savedInstanceState);
- if (BuildConfig.DEBUG) {
- ApiAdapterFactory.getApiAdapter().enableStrictMode();
- }
- AnalyticsUtils.sendPageViews(this, "/appstart");
-
- providerUtils = MyTracksProviderUtils.Factory.get(this);
- preferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- dataHub = ((MyTracksApplication) getApplication()).getTrackDataHub();
+ myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this);
+ sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ trackDataHub = ((MyTracksApplication) getApplication()).getTrackDataHub();
menuManager = new MenuManager(this);
- serviceConnection = new TrackRecordingServiceConnection(this, serviceBindCallback);
+ trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, serviceBindCallback);
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
// Show the action bar (or nothing at all).
ApiAdapterFactory.getApiAdapter().showActionBar(this);
- // If the user just starts typing (on a device with a keyboard), we start a search.
- setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
-
final Resources res = getResources();
final TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec(MAP_TAB_TAG)
@@ -189,138 +143,55 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
navControls.show();
tabHost.addView(layout);
layout.setOnTouchListener(this);
-
- if (!EulaUtils.getEulaValue(this)) {
- showDialog(DIALOG_EULA_ID);
- }
}
@Override
protected void onStart() {
- Log.d(TAG, "MyTracks.onStart");
super.onStart();
- dataHub.start();
+ trackDataHub.start();
// Ensure that service is running and bound if we're supposed to be recording
- if (ServiceUtils.isRecording(this, null, preferences)) {
- serviceConnection.startAndBind();
+ if (ServiceUtils.isRecording(
+ this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences)) {
+ trackRecordingServiceConnection.startAndBind();
}
Intent intent = getIntent();
- String action = intent.getAction();
- Uri data = intent.getData();
- if ((Intent.ACTION_VIEW.equals(action) || Intent.ACTION_EDIT.equals(action))
- && TracksColumns.CONTENT_ITEMTYPE.equals(intent.getType())
- && UriUtils.matchesContentUri(data, TracksColumns.CONTENT_URI)) {
- long trackId = ContentUris.parseId(data);
- dataHub.loadTrack(trackId);
- } else if (Intent.ACTION_VIEW.equals(action)
- && WaypointsColumns.CONTENT_ITEMTYPE.equals(intent.getType())
- && UriUtils.matchesContentUri(data, WaypointsColumns.CONTENT_URI)) {
- // TODO(rdamazio): Waypoint URIs should be base/trackid/waypointid
- long waypointId = ContentUris.parseId(data);
- Waypoint waypoint = providerUtils.getWaypoint(waypointId);
- long trackId = waypoint.getTrackId();
-
+ long trackId = intent.getLongExtra(TRACK_ID, -1L);
+ if (trackId != -1L) {
+ trackDataHub.loadTrack(trackId);
+ return;
+ }
+
+ long waypointId = intent.getLongExtra(WAYPOINT_ID, -1L);
+ if (waypointId != -1L) {
+ Waypoint waypoint = myTracksProviderUtils.getWaypoint(waypointId);
+ trackId = waypoint.getTrackId();
+
// Request that the waypoint is shown (now or when the right track is loaded).
showWaypoint(trackId, waypointId);
-
+
// Load the right track, if not loaded already.
- dataHub.loadTrack(trackId);
+ trackDataHub.loadTrack(trackId);
}
}
@Override
protected void onResume() {
- // Called when the current activity is being displayed or re-displayed
- // to the user.
- Log.d(TAG, "MyTracks.onResume");
- serviceConnection.bindIfRunning();
super.onResume();
- }
-
- @Override
- protected void onPause() {
- // Called when activity is going into the background, but has not (yet) been
- // killed. Shouldn't block longer than approx. 2 seconds.
- Log.d(TAG, "MyTracks.onPause");
- super.onPause();
+ trackRecordingServiceConnection.bindIfRunning();
}
@Override
protected void onStop() {
- Log.d(TAG, "MyTracks.onStop");
- dataHub.stop();
super.onStop();
+ trackDataHub.stop();
}
@Override
protected void onDestroy() {
- Log.d(TAG, "MyTracks.onDestroy");
- serviceConnection.unbind();
super.onDestroy();
- }
-
- @Override
- protected Dialog onCreateDialog(int id) {
- switch (id) {
- case DIALOG_EULA_ID:
- return new AlertDialog.Builder(this)
- .setCancelable(true)
- .setMessage(EulaUtils.getEulaMessage(this))
- .setNegativeButton(R.string.eula_decline, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- finish();
- }
- })
- .setOnCancelListener(new DialogInterface.OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- finish();
- }
- })
- .setPositiveButton(R.string.eula_accept, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- EulaUtils.setEulaValue(TrackDetailActivity.this);
- startActivityForResult(
- new Intent(TrackDetailActivity.this, WelcomeActivity.class), Constants.WELCOME);
- }
- })
- .setTitle(R.string.eula_title)
- .create();
- case DIALOG_CHECK_UNITS_ID:
- return new AlertDialog.Builder(this)
- .setCancelable(true)
- .setOnCancelListener(new DialogInterface.OnCancelListener() {
- public void onCancel(DialogInterface dialog) {
- SharedPreferences sharedPreferences = getSharedPreferences(
- CHECK_UNITS_PREFERENCE_FILE, Context.MODE_PRIVATE);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(
- sharedPreferences.edit().putBoolean(CHECK_UNITS_PREFERENCE_KEY, true));
- }
- })
- .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- SharedPreferences sharedPreferences = getSharedPreferences(
- CHECK_UNITS_PREFERENCE_FILE, Context.MODE_PRIVATE);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(
- sharedPreferences.edit().putBoolean(CHECK_UNITS_PREFERENCE_KEY, true));
-
- int position = ((AlertDialog) dialog).getListView().getSelectedItemPosition();
- SharedPreferences.Editor editor = preferences.edit();
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(
- editor.putBoolean(getString(R.string.metric_units_key), position == 0));
- }
- })
- .setSingleChoiceItems(new CharSequence[] { getString(R.string.preferred_units_metric),
- getString(R.string.preferred_units_imperial) }, 0, null)
- .setTitle(R.string.preferred_units_title)
- .create();
- default:
- return null;
- }
+ trackRecordingServiceConnection.unbind();
}
@Override
@@ -334,9 +205,9 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
MapActivity map = getMapTab();
boolean isSatelliteView = map != null ? map.isSatelliteView() : false;
- menuManager.onPrepareOptionsMenu(menu, providerUtils.getLastTrack() != null,
- ServiceUtils.isRecording(this, serviceConnection.getServiceIfBound(), preferences),
- dataHub.isATrackSelected(),
+ menuManager.onPrepareOptionsMenu(menu, myTracksProviderUtils.getLastTrack() != null,
+ ServiceUtils.isRecording(this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences),
+ trackDataHub.isATrackSelected(),
isSatelliteView,
getTabHost().getCurrentTabTag());
@@ -350,15 +221,10 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
: super.onOptionsItemSelected(item);
}
- /*
- * Key events:
- * ===========
- */
-
@Override
public boolean onTrackballEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
- if (ServiceUtils.isRecording(this, serviceConnection.getServiceIfBound(), preferences)) {
+ if (ServiceUtils.isRecording(this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences)) {
try {
insertWaypoint(WaypointCreationRequest.DEFAULT_STATISTICS);
} catch (RemoteException e) {
@@ -374,53 +240,19 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
@Override
- public void onActivityResult(int requestCode, int resultCode,
- final Intent results) {
- Log.d(TAG, "MyTracks.onActivityResult");
- long trackId = dataHub.getSelectedTrackId();
- if (results != null) {
- trackId = results.getLongExtra("trackid", trackId);
+ public void onActivityResult(int requestCode, int resultCode, final Intent results) {
+ if (requestCode != Constants.SHOW_WAYPOINT) {
+ Log.d(TAG, "Warning unhandled request code: " + requestCode);
+ return;
}
-
- switch (requestCode) {
- case Constants.SHOW_TRACK: {
- if (results != null) {
- if (trackId >= 0) {
- dataHub.loadTrack(trackId);
-
- // The track list passed the requested action as result code. Hand
- // it off to the onActivityResult for further processing:
- if (resultCode != Constants.SHOW_TRACK) {
- onActivityResult(resultCode, Activity.RESULT_OK, results);
- }
- }
+ if (results != null) {
+ long waypointId = results.getLongExtra(WaypointDetails.WAYPOINT_ID_EXTRA, -1L);
+ if (waypointId != -1L) {
+ MapActivity map = getMapTab();
+ if (map != null) {
+ getTabHost().setCurrentTab(0);
+ map.showWaypoint(waypointId);
}
- break;
- }
- case Constants.SHOW_WAYPOINT: {
- if (results != null) {
- final long waypointId = results.getLongExtra(WaypointDetails.WAYPOINT_ID_EXTRA, -1);
- if (waypointId >= 0) {
- MapActivity map = getMapTab();
- if (map != null) {
- getTabHost().setCurrentTab(0);
- map.showWaypoint(waypointId);
- }
- }
- }
- break;
- }
- case Constants.WELCOME: {
- SharedPreferences sharedPreferences = getSharedPreferences(
- CHECK_UNITS_PREFERENCE_FILE, Context.MODE_PRIVATE);
- if (!sharedPreferences.getBoolean(CHECK_UNITS_PREFERENCE_KEY, false)) {
- showDialog(DIALOG_CHECK_UNITS_ID);
- }
- break;
- }
-
- default: {
- Log.w(TAG, "Warning unhandled request code: " + requestCode);
}
}
}
@@ -453,7 +285,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
* @throws RemoteException If the call on the service failed.
*/
private long insertWaypoint(WaypointCreationRequest request) throws RemoteException {
- ITrackRecordingService trackRecordingService = serviceConnection.getServiceIfBound();
+ ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound();
if (trackRecordingService == null) {
throw new IllegalStateException("The recording service is not bound.");
}
@@ -474,7 +306,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
try {
long recordingTrackId = trackRecordingService.startNewTrack();
// Select the recording track.
- dataHub.loadTrack(recordingTrackId);
+ trackDataHub.loadTrack(recordingTrackId);
Toast.makeText(this, getString(R.string.track_record_success), Toast.LENGTH_SHORT).show();
// TODO: We catch Exception, because after eliminating the service process
// all exceptions it may throw are no longer wrapped in a RemoteException.
@@ -489,9 +321,9 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
* it. Starts recording a new track.
*/
void startRecording() {
- synchronized (serviceConnection) {
+ synchronized (trackRecordingServiceConnection) {
startNewTrackRequested = true;
- serviceConnection.startAndBind();
+ trackRecordingServiceConnection.startAndBind();
// Binding was already requested before, it either already happened
// (in which case running the callback manually triggers the actual recording start)
@@ -511,7 +343,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
long currentTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1);
- ITrackRecordingService trackRecordingService = serviceConnection.getServiceIfBound();
+ ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound();
if (trackRecordingService != null) {
try {
trackRecordingService.endCurrentTrack();
@@ -520,7 +352,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
}
- serviceConnection.stop();
+ trackRecordingServiceConnection.stop();
if (currentTrackId > 0) {
Intent intent = new Intent(this, TrackEditActivity.class)
@@ -531,7 +363,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
long getSelectedTrackId() {
- return dataHub.getSelectedTrackId();
+ return trackDataHub.getSelectedTrackId();
}
/**
@@ -577,4 +409,4 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
private ChartActivity getChartTab() {
return (ChartActivity) getLocalActivityManager().getActivity(CHART_TAB_TAG);
}
-}
+}
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
index 7a1af743d..9d6fdbd3e 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -23,7 +23,9 @@ import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.ServiceUtils;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.util.ApiAdapterFactory;
+import com.google.android.apps.mytracks.util.CheckUnitsUtils;
import com.google.android.apps.mytracks.util.DialogUtils;
+import com.google.android.apps.mytracks.util.EulaUtils;
import com.google.android.apps.mytracks.util.StringUtils;
import com.google.android.maps.mytracks.R;
@@ -37,8 +39,10 @@ import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcelable;
+import android.speech.tts.TextToSpeech;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.FragmentTransaction;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
@@ -62,8 +66,13 @@ import android.widget.Toast;
public class TrackListActivity extends FragmentActivity {
private static final String TAG = TrackListActivity.class.getSimpleName();
- private static final String EXPORT_ALL_DIALOG_TAG = "exportAllDialog";
+ private static final String CHECK_UNITS_DIALOG_TAG = "checkUnitsDialog";
private static final String DELETE_ALL_DIALOG_TAG = "deleteAllDialog";
+ private static final String EULA_DIALOG_TAG = "eulaDialog";
+ private static final String EXPORT_ALL_DIALOG_TAG = "exportAllDialog";
+
+ private static final int WELCOME_ACTIVITY_REQUEST_CODE = 0;
+
private static final String[] PROJECTION = new String[] {
TracksColumns._ID,
TracksColumns.NAME,
@@ -108,8 +117,10 @@ public class TrackListActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
+ setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
setContentView(R.layout.track_list);
-
+
trackRecordingServiceConnection = new TrackRecordingServiceConnection(
this, bindChangedCallback);
@@ -138,8 +149,9 @@ public class TrackListActivity extends FragmentActivity {
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
- setResult(Constants.SHOW_TRACK, new Intent().putExtra("trackid", id));
- finish();
+ Intent intent = new Intent(TrackListActivity.this, TrackDetailActivity.class)
+ .putExtra(TrackDetailActivity.TRACK_ID, id);
+ startActivity(intent);
}
});
adapter = new ResourceCursorAdapter(this, R.layout.track_list_item, null, 0) {
@@ -205,13 +217,27 @@ public class TrackListActivity extends FragmentActivity {
adapter.swapCursor(null);
}
});
+
+ if (!EulaUtils.getEulaValue(this)) {
+ new EulaDialogFragment().show(getSupportFragmentManager(), EULA_DIALOG_TAG);
+ }
}
@Override
protected void onStart() {
super.onStart();
+ if (ServiceUtils.isRecording(
+ this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences)) {
+ trackRecordingServiceConnection.startAndBind();
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
trackRecordingServiceConnection.bindIfRunning();
}
+
@Override
protected void onDestroy() {
@@ -219,6 +245,23 @@ public class TrackListActivity extends FragmentActivity {
trackRecordingServiceConnection.unbind();
}
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, final Intent results) {
+ if (requestCode == WELCOME_ACTIVITY_REQUEST_CODE) {
+ if (!CheckUnitsUtils.getCheckUnitsValue(this)) {
+ /*
+ * See bug http://code.google.com/p/android/issues/detail?id=23761.
+ * Instead of
+ * new CheckUnitsDialogFragment().show(getSupportFragmentManager(), CHECK_UNITS_DIALOG_TAG)
+ * Need to use commitAllowingStateLoss with the support package.
+ */
+ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
+ fragmentTransaction.add(new CheckUnitsDialogFragment(), CHECK_UNITS_DIALOG_TAG);
+ fragmentTransaction.commitAllowingStateLoss();
+ }
+ }
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.track_list, menu);
@@ -361,6 +404,101 @@ public class TrackListActivity extends FragmentActivity {
}
}
+ /**
+ * Check Units DialogFragment.
+ */
+ private static class CheckUnitsDialogFragment extends DialogFragment {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+
+ return new AlertDialog.Builder(getActivity()).setCancelable(true)
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ public void onCancel(DialogInterface dialog) {
+ CheckUnitsUtils.setCheckUnitsValue(getActivity());
+ }
+ })
+ .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ CheckUnitsUtils.setCheckUnitsValue(getActivity());
+
+ int position = ((AlertDialog) dialog).getListView().getSelectedItemPosition();
+ SharedPreferences sharedPreferences = getActivity()
+ .getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(sharedPreferences.edit()
+ .putBoolean(getString(R.string.metric_units_key), position == 0));
+ }
+ })
+ .setSingleChoiceItems(new CharSequence[] { getString(R.string.preferred_units_metric),
+ getString(R.string.preferred_units_imperial) }, 0, null)
+ .setTitle(R.string.preferred_units_title)
+ .create();
+ }
+ }
+
+ /**
+ * Delete All DialogFragment.
+ */
+ private static class DeleteAllDialogFragment extends DialogFragment {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return DialogUtils.createConfirmationDialog(getActivity(),
+ R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks();
+ /*
+ * TODO Verify that selected_track_key is still needed with the
+ * ICS navigation design
+ */
+ SharedPreferences sharedPreferences = getActivity()
+ .getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
+ Editor editor = sharedPreferences.edit();
+ // TODO: Go through data manager
+ editor.putLong(getString(R.string.selected_track_key), -1L);
+ ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
+ }
+ });
+ }
+ };
+
+ /**
+ * Eula DialogFragment.
+ */
+ private static class EulaDialogFragment extends DialogFragment {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setCancelable(true)
+ .setMessage(
+ EulaUtils.getEulaMessage(getActivity()))
+ .setNegativeButton(R.string.eula_decline, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ getActivity().finish();
+ }
+ })
+ .setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @Override
+ public void onCancel(DialogInterface dialog) {
+ getActivity().finish();
+ }
+ })
+ .setPositiveButton(R.string.eula_accept, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ EulaUtils.setEulaValue(getActivity());
+ getActivity().startActivityForResult(
+ new Intent(getActivity(), WelcomeActivity.class), WELCOME_ACTIVITY_REQUEST_CODE);
+ }
+ })
+ .setTitle(R.string.eula_title)
+ .create();
+ }
+ }
+
/**
* Export All DialogFragment.
*/
@@ -391,33 +529,6 @@ public class TrackListActivity extends FragmentActivity {
}
};
- /**
- * Delete All DialogFragment.
- */
- private static class DeleteAllDialogFragment extends DialogFragment {
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return DialogUtils.createConfirmationDialog(getActivity(),
- R.string.track_list_delete_all_confirm_message, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks();
- /*
- * TODO Verify that selected_track_key is still needed with the
- * ICS navigation design
- */
- SharedPreferences sharedPreferences = getActivity()
- .getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- Editor editor = sharedPreferences.edit();
- // TODO: Go through data manager
- editor.putLong(getString(R.string.selected_track_key), -1L);
- ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
- }
- });
- }
- };
-
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/CheckUnitsUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/CheckUnitsUtils.java
new file mode 100644
index 000000000..85fe5aa0b
--- /dev/null
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/CheckUnitsUtils.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2012 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.util;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+
+/**
+ * Utilities for checking units.
+ *
+ * @author Jimmy Shih
+ */
+public class CheckUnitsUtils {
+
+ private static final String CHECK_UNITS_PREFERENCE_FILE = "checkunits";
+ private static final String CHECK_UNITS_PREFERENCE_KEY = "checkunits.checked";
+
+ private CheckUnitsUtils() {}
+
+ public static boolean getCheckUnitsValue(Context context) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ CHECK_UNITS_PREFERENCE_FILE, Context.MODE_PRIVATE);
+ return sharedPreferences.getBoolean(CHECK_UNITS_PREFERENCE_KEY, false);
+ }
+
+ public static void setCheckUnitsValue(Context context) {
+ SharedPreferences sharedPreferences = context.getSharedPreferences(
+ CHECK_UNITS_PREFERENCE_FILE, Context.MODE_PRIVATE);
+ Editor editor = sharedPreferences.edit().putBoolean(CHECK_UNITS_PREFERENCE_KEY, true);
+ ApiAdapterFactory.getApiAdapter().applyPreferenceChanges(editor);
+ }
+}