Code cleanup: cleanup AbtractSendToGoogleActivity

This commit is contained in:
Jimmy Shih
2013-12-19 12:44:20 -08:00
parent 3b5b2461bb
commit c8629cc92a
5 changed files with 68 additions and 43 deletions
@@ -35,6 +35,8 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// Set volume control stream for text to speech
setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM); setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
// Hide title must be before setContentView // Hide title must be before setContentView
@@ -50,11 +52,6 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity {
} }
} }
/**
* Gets the layout resource id.
*/
protected abstract int getLayoutResId();
/** /**
* Returns true to hide the title. Be default, do not hide the title. * Returns true to hide the title. Be default, do not hide the title.
*/ */
@@ -62,6 +59,11 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity {
return false; return false;
} }
/**
* Gets the layout resource id.
*/
protected abstract int getLayoutResId();
/** /**
* Returns true to configure the action bar home button as the up button. * Returns true to configure the action bar home button as the up button.
*/ */
@@ -69,25 +71,31 @@ public abstract class AbstractMyTracksActivity extends FragmentActivity {
return true; return true;
} }
/**
* Callback when the home menu item is selected.
*/
protected void onHomeSelected() {
finish();
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// Set menu icon color
TrackIconUtils.setMenuIconColor(menu); TrackIconUtils.setMenuIconColor(menu);
return super.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu);
} }
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
// Handle home menu item, up navigation
if (item.getItemId() == android.R.id.home) { if (item.getItemId() == android.R.id.home) {
onHomeSelected(); onHomeSelected();
return true; return true;
} }
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
/**
* Callback when the home menu item is selected. E.g., setup the back stack
* when home is selected.
*/
protected void onHomeSelected() {
finish();
}
} }
@@ -23,7 +23,6 @@ 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.PlayMultipleDialogFragment.PlayMultipleCaller;
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;
@@ -64,13 +63,19 @@ import android.widget.Toast;
import java.io.IOException; import java.io.IOException;
/** /**
* An abstract class for sending a track to Google services. * An abstract class for the following common tasks across
* {@link TrackListActivity}, {@link TrackDetailActivity}, and
* {@link SearchListActivity}:
* <p>
* - share track <br>
* - delete track <br>
* - play track <br>
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements
ChooseAccountCaller, ConfirmSyncCaller, CheckPermissionCaller, ShareTrackCaller, ChooseAccountCaller, ConfirmSyncCaller, CheckPermissionCaller, ShareTrackCaller,
ConfirmDeleteCaller, PlayMultipleCaller { ConfirmDeleteCaller {
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";
@@ -371,7 +376,12 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
startActivity(intent); startActivity(intent);
} }
protected void deleteTrack(long[] trackIds) { /**
* Delete tracks.
*
* @param trackIds the track ids
*/
protected void deleteTracks(long[] trackIds) {
ConfirmDeleteDialogFragment.newInstance(trackIds) ConfirmDeleteDialogFragment.newInstance(trackIds)
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG); .show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
} }
@@ -399,16 +409,23 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
startActivityForResult(intent, DELETE_REQUEST_CODE); startActivityForResult(intent, DELETE_REQUEST_CODE);
} }
/**
* Gets the track recording service connection. For stopping the current
* recording if need to delete the current recording track.
*/
abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection(); abstract protected TrackRecordingServiceConnection getTrackRecordingServiceConnection();
/**
* Called after {@link DeleteActivity} returns its result.
*/
abstract protected void onDeleted(); abstract protected void onDeleted();
/** /**
* Play track in Google Earth. * Play tracks in Google Earth.
* *
* @param trackIds the track ids * @param trackIds the track ids
*/ */
protected void playTrack(long[] trackIds) { protected void playTracks(long[] trackIds) {
AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_PLAY); AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_PLAY);
if (GoogleEarthUtils.isEarthInstalled(this)) { if (GoogleEarthUtils.isEarthInstalled(this)) {
Intent intent = IntentUtils.newIntent(this, SaveActivity.class) Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
@@ -421,9 +438,4 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG); getSupportFragmentManager(), InstallEarthDialogFragment.INSTALL_EARTH_DIALOG_TAG);
} }
} }
@Override
public void onPlayMultipleDone(long[] trackIds) {
playTrack(trackIds);
}
} }
@@ -24,7 +24,6 @@ import com.google.android.apps.mytracks.content.SearchEngineProvider;
import com.google.android.apps.mytracks.content.Track; import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.Waypoint.WaypointType; import com.google.android.apps.mytracks.content.Waypoint.WaypointType;
import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
import com.google.android.apps.mytracks.services.MyTracksLocationManager; import com.google.android.apps.mytracks.services.MyTracksLocationManager;
@@ -348,7 +347,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements
Intent intent; Intent intent;
switch (itemId) { switch (itemId) {
case R.id.list_context_menu_play: case R.id.list_context_menu_play:
playTrack(new long[] {trackId}); playTracks(new long[] {trackId});
return true; return true;
case R.id.list_context_menu_share: case R.id.list_context_menu_share:
shareTrack(trackId); shareTrack(trackId);
@@ -376,8 +375,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity implements
DeleteMarkerDialogFragment.newInstance(new long[] { markerId }).show( DeleteMarkerDialogFragment.newInstance(new long[] { markerId }).show(
getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG); getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG);
} else { } else {
ConfirmDeleteDialogFragment.newInstance(new long[] { trackId }) deleteTracks(new long[] { trackId });
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
} }
return true; return true;
default: default:
@@ -25,13 +25,13 @@ import com.google.android.apps.mytracks.content.WaypointCreationRequest;
import com.google.android.apps.mytracks.fragments.ChartFragment; import com.google.android.apps.mytracks.fragments.ChartFragment;
import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment;
import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller; import com.google.android.apps.mytracks.fragments.ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller;
import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment;
import com.google.android.apps.mytracks.fragments.ExportDialogFragment; 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.MyTracksMapFragment; import com.google.android.apps.mytracks.fragments.MyTracksMapFragment;
import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment; import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment;
import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.PlayMultipleCaller;
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;
import com.google.android.apps.mytracks.io.file.exporter.SaveActivity; import com.google.android.apps.mytracks.io.file.exporter.SaveActivity;
@@ -82,7 +82,7 @@ import java.util.Date;
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
public class TrackDetailActivity extends AbstractSendToGoogleActivity public class TrackDetailActivity extends AbstractSendToGoogleActivity
implements ChooseActivityTypeCaller, ExportCaller { implements ChooseActivityTypeCaller, ExportCaller, PlayMultipleCaller {
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";
@@ -415,7 +415,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
startActivityForResult(intent, CAMERA_REQUEST_CODE); startActivityForResult(intent, CAMERA_REQUEST_CODE);
return true; return true;
case R.id.track_detail_play: case R.id.track_detail_play:
playTrack(new long[] {trackId}); playTracks(new long[] {trackId});
return true; return true;
case R.id.track_detail_share: case R.id.track_detail_share:
shareTrack(trackId); shareTrack(trackId);
@@ -451,8 +451,7 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.track_detail_delete: case R.id.track_detail_delete:
ConfirmDeleteDialogFragment.newInstance(new long[] { trackId }) deleteTracks(new long[] { trackId });
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
return true; return true;
case R.id.track_detail_sensor_state: case R.id.track_detail_sensor_state:
intent = IntentUtils.newIntent(this, SensorStateActivity.class); intent = IntentUtils.newIntent(this, SensorStateActivity.class);
@@ -649,4 +648,9 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
Toast.makeText(this, message, Toast.LENGTH_LONG).show(); Toast.makeText(this, message, Toast.LENGTH_LONG).show();
} }
} }
@Override
public void onPlayMultipleDone(long[] trackIds) {
playTracks(trackIds);
}
} }
@@ -19,7 +19,6 @@ package com.google.android.apps.mytracks;
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.content.TracksColumns;
import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment;
import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment; import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment;
import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment.EnableSyncCaller; import com.google.android.apps.mytracks.fragments.EnableSyncDialogFragment.EnableSyncCaller;
import com.google.android.apps.mytracks.fragments.EulaDialogFragment; import com.google.android.apps.mytracks.fragments.EulaDialogFragment;
@@ -27,6 +26,7 @@ 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.PlayMultipleDialogFragment; import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment;
import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.PlayMultipleCaller;
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;
@@ -92,7 +92,7 @@ import java.util.Locale;
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
*/ */
public class TrackListActivity extends AbstractSendToGoogleActivity public class TrackListActivity extends AbstractSendToGoogleActivity
implements EulaCaller, EnableSyncCaller, FileTypeCaller { implements EulaCaller, EnableSyncCaller, FileTypeCaller, PlayMultipleCaller {
private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String TAG = TrackListActivity.class.getSimpleName();
private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME, private static final String[] PROJECTION = new String[] { TracksColumns._ID, TracksColumns.NAME,
@@ -565,8 +565,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
.show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG); .show(getSupportFragmentManager(), FileTypeDialogFragment.FILE_TYPE_DIALOG_TAG);
return true; return true;
case R.id.track_list_delete_all: case R.id.track_list_delete_all:
ConfirmDeleteDialogFragment.newInstance(new long[] {-1L}) deleteTracks(new long[] {-1L});
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
return true; return true;
case R.id.track_list_settings: case R.id.track_list_settings:
intent = IntentUtils.newIntent(this, SettingsActivity.class); intent = IntentUtils.newIntent(this, SettingsActivity.class);
@@ -790,7 +789,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
private boolean handleContextItem(int itemId, long[] trackIds) { private boolean handleContextItem(int itemId, long[] trackIds) {
switch (itemId) { switch (itemId) {
case R.id.list_context_menu_play: case R.id.list_context_menu_play:
playTrack(trackIds); playTracks(trackIds);
return true; return true;
case R.id.list_context_menu_share: case R.id.list_context_menu_share:
shareTrack(trackIds[0]); shareTrack(trackIds[0]);
@@ -804,8 +803,7 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
if (trackIds.length > 1 && trackIds.length == listView.getCount()) { if (trackIds.length > 1 && trackIds.length == listView.getCount()) {
trackIds = new long[] {-1L}; trackIds = new long[] {-1L};
} }
ConfirmDeleteDialogFragment.newInstance(trackIds) deleteTracks(trackIds);
.show(getSupportFragmentManager(), ConfirmDeleteDialogFragment.CONFIRM_DELETE_DIALOG_TAG);
return true; return true;
case R.id.list_context_menu_select_all: case R.id.list_context_menu_select_all:
int size = listView.getCount(); int size = listView.getCount();
@@ -817,4 +815,9 @@ public class TrackListActivity extends AbstractSendToGoogleActivity
return false; return false;
} }
} }
@Override
public void onPlayMultipleDone(long[] trackIds) {
playTracks(trackIds);
}
} }