Modify DeleteMarkerDialogFragment to delete one or multiple markers

This commit is contained in:
Jimmy Shih
2013-04-29 18:04:27 -07:00
parent ccfe7dc335
commit 6a74a18e99
5 changed files with 51 additions and 51 deletions
+6 -3
View File
@@ -894,11 +894,14 @@ limitations under the License.
translation_description="When adding a marker, the message indicating success."> translation_description="When adding a marker, the message indicating success.">
A marker was inserted. A marker was inserted.
</string> </string>
<string name="marker_delete_one_marker_confirm_message" <string name="marker_delete_one_confirm_message"
translation_description="When deleting a marker, the confirmation dialog message informing the translation_description="When deleting one marker, the confirmation message.">
user that the marker will be permanently deleted from the device.">
The marker will be permanently deleted from the device. The marker will be permanently deleted from the device.
</string> </string>
<string name="marker_delete_multiple_confirm_message"
translation_description="When deleting multiple markers, the confirmation message.">
The markers will be permanently deleted from the device.
</string>
<string name="marker_label_end" <string name="marker_label_end"
translation_description="When inserting a marker to indicate the end of a track, the marker's translation_description="When inserting a marker to indicate the end of a track, the marker's
name. E.g., 'track_name (End)'. name. E.g., 'track_name (End)'.
@@ -20,8 +20,8 @@ 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.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.DeleteOneMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.IntentUtils;
import com.google.android.apps.mytracks.util.StatsUtils; import com.google.android.apps.mytracks.util.StatsUtils;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
@@ -39,8 +39,7 @@ import android.widget.TextView;
* *
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
*/ */
public class MarkerDetailActivity extends AbstractMyTracksActivity public class MarkerDetailActivity extends AbstractMyTracksActivity implements DeleteMarkerCaller {
implements DeleteOneMarkerCaller {
public static final String EXTRA_MARKER_ID = "marker_id"; public static final String EXTRA_MARKER_ID = "marker_id";
private static final String TAG = MarkerDetailActivity.class.getSimpleName(); private static final String TAG = MarkerDetailActivity.class.getSimpleName();
@@ -134,9 +133,8 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.marker_detail_delete: case R.id.marker_detail_delete:
DeleteOneMarkerDialogFragment.newInstance(markerId, waypoint.getTrackId()).show( DeleteMarkerDialogFragment.newInstance(new long[] { markerId })
getSupportFragmentManager(), .show(getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG);
DeleteOneMarkerDialogFragment.DELETE_ONE_MARKER_DIALOG_TAG);
return true; return true;
default: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
@@ -144,7 +142,7 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onDeleteOneMarkerDone() { public void onDeleteMarkerDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -20,8 +20,8 @@ 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.Waypoint.WaypointType; import com.google.android.apps.mytracks.content.Waypoint.WaypointType;
import com.google.android.apps.mytracks.content.WaypointsColumns; import com.google.android.apps.mytracks.content.WaypointsColumns;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
import com.google.android.apps.mytracks.util.ApiAdapterFactory; import com.google.android.apps.mytracks.util.ApiAdapterFactory;
import com.google.android.apps.mytracks.util.IntentUtils; import com.google.android.apps.mytracks.util.IntentUtils;
import com.google.android.apps.mytracks.util.ListItemUtils; import com.google.android.apps.mytracks.util.ListItemUtils;
@@ -55,7 +55,7 @@ import android.widget.ListView;
* *
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
*/ */
public class MarkerListActivity extends AbstractMyTracksActivity implements DeleteOneMarkerCaller { public class MarkerListActivity extends AbstractMyTracksActivity implements DeleteMarkerCaller {
public static final String EXTRA_TRACK_ID = "track_id"; public static final String EXTRA_TRACK_ID = "track_id";
@@ -286,9 +286,8 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
startActivity(intent); startActivity(intent);
return true; return true;
case R.id.list_context_menu_delete: case R.id.list_context_menu_delete:
DeleteOneMarkerDialogFragment.newInstance(markerId, track.getId()).show( DeleteMarkerDialogFragment.newInstance(new long[] { markerId })
getSupportFragmentManager(), .show(getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG);
DeleteOneMarkerDialogFragment.DELETE_ONE_MARKER_DIALOG_TAG);
return true; return true;
default: default:
return false; return false;
@@ -306,7 +305,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
} }
@Override @Override
public void onDeleteOneMarkerDone() { public void onDeleteMarkerDone() {
// Do nothing // Do nothing
} }
} }
@@ -24,8 +24,8 @@ 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.DeleteOneMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller; import com.google.android.apps.mytracks.fragments.DeleteMarkerDialogFragment.DeleteMarkerCaller;
import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller; import com.google.android.apps.mytracks.fragments.DeleteTrackDialogFragment.DeleteTrackCaller;
import com.google.android.apps.mytracks.services.MyTracksLocationManager; import com.google.android.apps.mytracks.services.MyTracksLocationManager;
@@ -75,7 +75,7 @@ import java.util.SortedSet;
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
public class SearchListActivity extends AbstractSendToGoogleActivity public class SearchListActivity extends AbstractSendToGoogleActivity
implements DeleteTrackCaller, DeleteOneMarkerCaller { implements DeleteTrackCaller, DeleteMarkerCaller {
private static final String TAG = SearchListActivity.class.getSimpleName(); private static final String TAG = SearchListActivity.class.getSimpleName();
@@ -351,9 +351,8 @@ public class SearchListActivity extends AbstractSendToGoogleActivity
return true; return true;
case R.id.list_context_menu_delete: case R.id.list_context_menu_delete:
if (markerId != null) { if (markerId != null) {
DeleteOneMarkerDialogFragment.newInstance(markerId, trackId).show( DeleteMarkerDialogFragment.newInstance(new long[] { markerId }).show(
getSupportFragmentManager(), getSupportFragmentManager(), DeleteMarkerDialogFragment.DELETE_MARKER_DIALOG_TAG);
DeleteOneMarkerDialogFragment.DELETE_ONE_MARKER_DIALOG_TAG);
} else { } else {
DeleteTrackDialogFragment.newInstance(false, new long[] { trackId }) DeleteTrackDialogFragment.newInstance(false, new long[] { trackId })
.show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG); .show(getSupportFragmentManager(), DeleteTrackDialogFragment.DELETE_TRACK_DIALOG_TAG);
@@ -519,7 +518,7 @@ public class SearchListActivity extends AbstractSendToGoogleActivity
} }
@Override @Override
public void onDeleteOneMarkerDone() { public void onDeleteMarkerDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -29,67 +29,68 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
/** /**
* A DialogFragment to delete one marker. * A DialogFragment to delete marker.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public class DeleteOneMarkerDialogFragment extends DialogFragment { public class DeleteMarkerDialogFragment extends DialogFragment {
/** /**
* Interface for caller of this dialog fragment. * Interface for caller of this dialog fragment.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public interface DeleteOneMarkerCaller { public interface DeleteMarkerCaller {
/** /**
* Called when delete one marker is done. * Called when delete marker is done.
*/ */
public void onDeleteOneMarkerDone(); public void onDeleteMarkerDone();
} }
public static final String DELETE_ONE_MARKER_DIALOG_TAG = "deleteOneMarkerDialog"; public static final String DELETE_MARKER_DIALOG_TAG = "deleteMarkerDialog";
private static final String KEY_MARKER_ID = "markerId"; private static final String KEY_MARKER_IDS = "markerIds";
private static final String KEY_TRACK_ID = "trackId";
public static DeleteOneMarkerDialogFragment newInstance(long markerId, long trackId) { public static DeleteMarkerDialogFragment newInstance(long[] markerIds) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putLong(KEY_MARKER_ID, markerId); bundle.putLongArray(KEY_MARKER_IDS, markerIds);
bundle.putLong(KEY_TRACK_ID, trackId);
DeleteOneMarkerDialogFragment deleteOneMarkerDialogFragment = new DeleteOneMarkerDialogFragment(); DeleteMarkerDialogFragment deleteMarkerDialogFragment = new DeleteMarkerDialogFragment();
deleteOneMarkerDialogFragment.setArguments(bundle); deleteMarkerDialogFragment.setArguments(bundle);
return deleteOneMarkerDialogFragment; return deleteMarkerDialogFragment;
} }
private DeleteOneMarkerCaller caller; private DeleteMarkerCaller caller;
private FragmentActivity fragmentActivity;
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
try { try {
caller = (DeleteOneMarkerCaller) activity; caller = (DeleteMarkerCaller) activity;
} catch (ClassCastException e) { } catch (ClassCastException e) {
throw new ClassCastException( throw new ClassCastException(
activity.toString() + " must implement " + DeleteOneMarkerCaller.class.getSimpleName()); activity.toString() + " must implement " + DeleteMarkerCaller.class.getSimpleName());
} }
} }
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
fragmentActivity = getActivity(); final FragmentActivity fragmentActivity = getActivity();
return DialogUtils.createConfirmationDialog(fragmentActivity, final long[] markerIds = getArguments().getLongArray(KEY_MARKER_IDS);
R.string.marker_delete_one_marker_confirm_message, new DialogInterface.OnClickListener() { int messageId = markerIds.length > 1 ? R.string.marker_delete_multiple_confirm_message
: R.string.marker_delete_one_confirm_message;
return DialogUtils.createConfirmationDialog(
fragmentActivity, messageId, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
MyTracksProviderUtils.Factory.get(fragmentActivity).deleteWaypoint( for (long markerId : markerIds) {
getArguments().getLong(KEY_MARKER_ID), MyTracksProviderUtils.Factory.get(fragmentActivity)
new DescriptionGeneratorImpl(fragmentActivity)); .deleteWaypoint(markerId, new DescriptionGeneratorImpl(fragmentActivity));
caller.onDeleteOneMarkerDone(); }
caller.onDeleteMarkerDone();
} }
}).start(); }).start();
} }