diff --git a/MyTracks/src/com/google/android/apps/mytracks/MenuManager.java b/MyTracks/src/com/google/android/apps/mytracks/MenuManager.java
deleted file mode 100644
index 4bad6d532..000000000
--- a/MyTracks/src/com/google/android/apps/mytracks/MenuManager.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright 2010 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;
-
-import static com.google.android.apps.mytracks.Constants.CHART_TAB_TAG;
-import static com.google.android.apps.mytracks.Constants.MAP_TAB_TAG;
-
-import com.google.android.maps.mytracks.R;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.view.Menu;
-import android.view.MenuItem;
-
-/**
- * Manage the application menus.
- *
- * @author Sandor Dornbush
- */
-class MenuManager {
-
- private final TrackDetailActivity activity;
- private MenuItem recordTrack;
- private MenuItem stopRecording;
-
- public MenuManager(TrackDetailActivity activity) {
- this.activity = activity;
- }
-
- /**
- * Fills the menu with its initial options.
- *
- * @param menu the menu to fill
- * @return true on success, false otherwise
- */
- public boolean onCreateOptionsMenu(Menu menu) {
- activity.getMenuInflater().inflate(R.menu.track_detail, menu);
-
- // TODO: Replace search button with search widget if API level >= 11
- return true;
- }
-
- /**
- * Prepares the menu for display.
- *
- * @param menu the menu to update for display
- * @param hasRecorded whether any track has been recorded
- * @param isRecording whether we're recording a track now
- * @param hasSelectedTrack whether there's a track currently selected for display
- * @param isSatelliteMode whether the map is currently in satellite mode
- * @param currentTabTag the tag for the currently-displayed tab
- */
- public void onPrepareOptionsMenu(Menu menu, boolean hasRecorded,
- boolean isRecording, boolean hasSelectedTrack,
- boolean isSatelliteMode, String currentTabTag) {
- menu.findItem(R.id.menu_markers)
- .setEnabled(hasRecorded && hasSelectedTrack);
-
- recordTrack = menu.findItem(R.id.menu_record_track);
- stopRecording = menu.findItem(R.id.menu_stop_recording);
- updateActionItems(isRecording);
-
- menu.findItem(R.id.menu_chart_settings)
- .setVisible(CHART_TAB_TAG.equals(currentTabTag));
-
- boolean isMapTab = MAP_TAB_TAG.equals(currentTabTag);
- menu.findItem(R.id.menu_my_location)
- .setVisible(isMapTab);
- menu.findItem(R.id.menu_satellite_mode)
- .setVisible(isMapTab)
- .setTitle(isSatelliteMode ? R.string.menu_map_mode : R.string.menu_satellite_mode);
- }
-
- /**
- * Updates the action items.
- * TODO: also update the action items when
- *
- * - start/stop a recording from the home screen widget.
- *
- receive a direct service call to start/stop a recording.
- *
- *
- * @param isRecording true if recording a track
- */
- private void updateActionItems(boolean isRecording) {
- recordTrack.setEnabled(!isRecording).setVisible(!isRecording);
- stopRecording.setEnabled(isRecording).setVisible(isRecording);
- }
-
- /**
- * Called when an option from the menu is selected.
- *
- * @param item the selected item
- * @return true if the action was handled, false otherwise
- */
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_record_track: {
- activity.startRecording();
- updateActionItems(true);
- return true;
- }
- case R.id.menu_stop_recording: {
- activity.stopRecording();
- updateActionItems(false);
- return true;
- }
- case R.id.menu_markers: {
- Intent startIntent = new Intent(activity, WaypointsList.class);
- startIntent.putExtra("trackid", activity.getSelectedTrackId());
- activity.startActivityForResult(startIntent, Constants.SHOW_WAYPOINT);
- return true;
- }
- case R.id.menu_sensor_state: {
- return startActivity(SensorStateActivity.class);
- }
- case R.id.menu_settings: {
- return startActivity(SettingsActivity.class);
- }
- case R.id.menu_aggregated_statistics: {
- return startActivity(AggregatedStatsActivity.class);
- }
- case R.id.menu_help: {
- return startActivity(WelcomeActivity.class);
- }
- case R.id.menu_search: {
- // TODO: Pass the current track ID and current location to do some fancier ranking.
- activity.onSearchRequested();
- return true;
- }
- case R.id.menu_chart_settings: {
- activity.showChartSettings();
- return true;
- }
- case R.id.menu_my_location: {
- activity.showMyLocation();
- return true;
- }
- case R.id.menu_satellite_mode: {
- activity.toggleSatelliteView();
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Starts an activity with the given class.
- */
- private boolean startActivity(Class extends Activity> activityClass) {
- activity.startActivity(new Intent(activity, activityClass));
- return true;
- }
-}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 97df82df0..d03cfde73 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -29,6 +29,7 @@ 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.maps.mytracks.R;
+import com.google.common.annotations.VisibleForTesting;
import android.app.TabActivity;
import android.content.Context;
@@ -64,10 +65,12 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
private MyTracksProviderUtils myTracksProviderUtils;
private SharedPreferences sharedPreferences;
private TrackDataHub trackDataHub;
- private MenuManager menuManager;
private TrackRecordingServiceConnection trackRecordingServiceConnection;
private NavControls navControls;
+ private MenuItem recordTrack;
+ private MenuItem stopRecording;
+
/**
* True if a new track should be created after the track recording service
* binds.
@@ -106,7 +109,6 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
myTracksProviderUtils = MyTracksProviderUtils.Factory.get(this);
sharedPreferences = getSharedPreferences(Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
trackDataHub = ((MyTracksApplication) getApplication()).getTrackDataHub();
- menuManager = new MenuManager(this);
trackRecordingServiceConnection = new TrackRecordingServiceConnection(this, serviceBindCallback);
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
@@ -196,29 +198,117 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
@Override
public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- return menuManager.onCreateOptionsMenu(menu);
+ getMenuInflater().inflate(R.menu.track_detail, menu);
+ recordTrack = menu.findItem(R.id.menu_record_track);
+ stopRecording = menu.findItem(R.id.menu_stop_recording);
+ return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- MapActivity map = getMapTab();
- boolean isSatelliteView = map != null ? map.isSatelliteView() : false;
+ updateMenuItems(ServiceUtils.isRecording(
+ this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences));
- menuManager.onPrepareOptionsMenu(menu, myTracksProviderUtils.getLastTrack() != null,
- ServiceUtils.isRecording(this, trackRecordingServiceConnection.getServiceIfBound(), sharedPreferences),
- trackDataHub.isATrackSelected(),
- isSatelliteView,
- getTabHost().getCurrentTabTag());
+ String currentTabTag = getTabHost().getCurrentTabTag();
+ menu.findItem(R.id.menu_chart_settings).setVisible(CHART_TAB_TAG.equals(currentTabTag));
+ menu.findItem(R.id.menu_my_location).setVisible(MAP_TAB_TAG.equals(currentTabTag));
+
+ // Set map or satellite mode
+ MapActivity mapActivity = (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG);
+ boolean isSatelliteMode = mapActivity != null ? mapActivity.isSatelliteView() : false;
+ menu.findItem(R.id.menu_satellite_mode)
+ .setVisible(MAP_TAB_TAG.equals(currentTabTag))
+ .setTitle(isSatelliteMode ? R.string.menu_map_mode : R.string.menu_satellite_mode);
return super.onPrepareOptionsMenu(menu);
}
+ /**
+ * Updates menu item
+ *
+ * @param isRecording true if recording
+ */
+ private void updateMenuItems(boolean isRecording) {
+ if (recordTrack != null) {
+ recordTrack.setVisible(!isRecording);
+ }
+ if (stopRecording != null) {
+ stopRecording.setVisible(isRecording);
+ }
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item) {
- return menuManager.onOptionsItemSelected(item)
- ? true
- : super.onOptionsItemSelected(item);
+ MapActivity mapActivity;
+ switch (item.getItemId()) {
+ case R.id.menu_record_track:
+ updateMenuItems(true);
+ startRecording();
+ return true;
+ case R.id.menu_stop_recording:
+ updateMenuItems(false);
+ stopRecording();
+ return true;
+ case R.id.menu_markers:
+ Intent intent = new Intent(this, WaypointsList.class)
+ .putExtra("trackid", trackDataHub.getSelectedTrackId());
+ startActivityForResult(intent, Constants.SHOW_WAYPOINT);
+ return true;
+ case R.id.menu_sensor_state:
+ startActivity(new Intent(this, SensorStateActivity.class));
+ return true;
+ case R.id.menu_settings:
+ startActivity(new Intent(this, SettingsActivity.class));
+ return true;
+ case R.id.menu_aggregated_statistics:
+ startActivity(new Intent(this, AggregatedStatsActivity.class));
+ return true;
+ case R.id.menu_help:
+ startActivity(new Intent(this, WelcomeActivity.class));
+ return true;
+ case R.id.menu_search:
+ onSearchRequested();
+ return true;
+ case R.id.menu_chart_settings:
+ ChartActivity chartActivity = (ChartActivity) getLocalActivityManager()
+ .getActivity(CHART_TAB_TAG);
+ if (chartActivity != null) {
+ chartActivity.showChartSettingsDialog();
+ }
+ return true;
+ case R.id.menu_my_location:
+ mapActivity = (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG);
+ if (mapActivity != null) {
+ mapActivity.showMyLocation();
+ }
+ return true;
+ case R.id.menu_satellite_mode:
+ mapActivity = (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG);
+ if (mapActivity != null) {
+ mapActivity.setSatelliteView(!mapActivity.isSatelliteView());
+ }
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, final Intent results) {
+ if (requestCode != Constants.SHOW_WAYPOINT) {
+ Log.d(TAG, "Warning unhandled request code: " + requestCode);
+ return;
+ }
+ if (results != null) {
+ long waypointId = results.getLongExtra(WaypointDetails.WAYPOINT_ID_EXTRA, -1L);
+ if (waypointId != -1L) {
+ MapActivity mapActivity = (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG);
+ if (mapActivity != null) {
+ getTabHost().setCurrentTab(0);
+ mapActivity.showWaypoint(waypointId);
+ }
+ }
+ }
}
@Override
@@ -240,21 +330,11 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
@Override
- public void onActivityResult(int requestCode, int resultCode, final Intent results) {
- if (requestCode != Constants.SHOW_WAYPOINT) {
- Log.d(TAG, "Warning unhandled request code: " + requestCode);
- return;
- }
- 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);
- }
- }
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_DOWN) {
+ navControls.show();
}
+ return false;
}
private void showWaypoint(long trackId, long waypointId) {
@@ -268,14 +348,6 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
}
}
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_DOWN) {
- navControls.show();
- }
- return false;
- }
-
/**
* Inserts a waypoint marker.
*
@@ -320,6 +392,7 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
* Starts the track recording service (if not already running) and binds to
* it. Starts recording a new track.
*/
+ @VisibleForTesting
void startRecording() {
synchronized (trackRecordingServiceConnection) {
startNewTrackRequested = true;
@@ -337,11 +410,10 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
* Stops the track recording service and unbinds from it. Will display a toast
* "Stopped recording" and pop up the Track Details activity.
*/
+ @VisibleForTesting
void stopRecording() {
// Save the track id as the shared preference will overwrite the recording track id.
- SharedPreferences sharedPreferences = getSharedPreferences(
- Constants.SETTINGS_NAME, Context.MODE_PRIVATE);
- long currentTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1);
+ long currentTrackId = sharedPreferences.getLong(getString(R.string.recording_track_key), -1L);
ITrackRecordingService trackRecordingService = trackRecordingServiceConnection.getServiceIfBound();
if (trackRecordingService != null) {
@@ -361,52 +433,4 @@ public class TrackDetailActivity extends TabActivity implements OnTouchListener
startActivity(intent);
}
}
-
- long getSelectedTrackId() {
- return trackDataHub.getSelectedTrackId();
- }
-
- /**
- * Asks the chart tab to show its settings.
- */
- public void showChartSettings() {
- ChartActivity chart = getChartTab();
- if (chart != null) {
- chart.showChartSettingsDialog();
- }
- }
-
- /**
- * Asks the map tab to show the map in satellite mode.
- */
- public void toggleSatelliteView() {
- MapActivity mapTab = getMapTab();
- if (mapTab != null) {
- mapTab.setSatelliteView(!mapTab.isSatelliteView());
- }
- }
-
- /**
- * Asks the map tab to jump to the current location.
- */
- public void showMyLocation() {
- MapActivity mapTab = getMapTab();
- if (mapTab != null) {
- mapTab.showMyLocation();
- }
- }
-
- /**
- * Returns the map tab instance if available, or null otherwise.
- */
- private MapActivity getMapTab() {
- return (MapActivity) getLocalActivityManager().getActivity(MAP_TAB_TAG);
- }
-
- /**
- * Returns the chart tab instance if available, or null otherwise.
- */
- 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 9d6fdbd3e..5c7a34251 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackListActivity.java
@@ -35,7 +35,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcelable;
@@ -447,17 +446,7 @@ public class TrackListActivity extends FragmentActivity {
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);
+ MyTracksProviderUtils.Factory.get(getActivity()).deleteAllTracks();
}
});
}
diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java
index d01e671ae..7b412de1e 100644
--- a/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java
+++ b/MyTracksTest/src/com/google/android/apps/mytracks/TrackDetailActivityTest.java
@@ -59,10 +59,7 @@ public class TrackDetailActivityTest extends ActivityInstrumentationTestCase2|