Add share via drive in the contextual menu.

This commit is contained in:
Jimmy Shih
2013-02-14 10:46:24 -08:00
parent 0b5af64ca1
commit 66fd25365b
13 changed files with 159 additions and 118 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

+5
View File
@@ -15,6 +15,11 @@ See the License for the specific language governing permissions and
limitations under the License. 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
android:icon="@drawable/menu_share_drive"
android:id="@+id/list_context_menu_share_drive"
android:showAsAction="ifRoom"
android:title="@string/menu_share_drive"/>
<item <item
android:icon="@drawable/menu_show_on_map" android:icon="@drawable/menu_show_on_map"
android:id="@+id/list_context_menu_show_on_map" android:id="@+id/list_context_menu_show_on_map"
+1 -1
View File
@@ -35,7 +35,7 @@ limitations under the License.
android:title="@string/menu_share"> android:title="@string/menu_share">
</item> </item>
<item <item
android:icon="@drawable/menu_share" android:icon="@drawable/menu_share_drive"
android:id="@+id/track_detail_share_drive" android:id="@+id/track_detail_share_drive"
android:orderInCategory="4" android:orderInCategory="4"
android:showAsAction="ifRoom" android:showAsAction="ifRoom"
@@ -16,6 +16,8 @@
package com.google.android.apps.mytracks; package com.google.android.apps.mytracks;
import android.view.Menu;
/** /**
* Callback when an item in the contextual action mode is selected. * Callback when an item in the contextual action mode is selected.
* *
@@ -33,18 +35,11 @@ public interface ContextualActionModeCallback {
public boolean onClick(int itemId, int position, long id); public boolean onClick(int itemId, int position, long id);
/** /**
* True if the item in the selected row can be edited. * Invoked to prepare the menu for the selected item.
* *
* @param position the position of the selected row * @param menu the menu
* @param id the id of the selected row * @param position the position of the selected item
* @param id the id of the selected item
*/ */
public boolean canEdit(int position, long id); public void onPrepare(Menu menu, int position, long id);
/**
* True if the item in the selected row can be deleted.
*
* @param position the position of the selected row
* @param id the id of the selected row
*/
public boolean canDelete(int position, long id);
} }
@@ -73,16 +73,12 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
return handleContextItem(itemId, id); return handleContextItem(itemId, id);
} }
@Override public void onPrepare(Menu menu, int position, long id) {
public boolean canEdit(int position, long id) {
Track track = myTracksProviderUtils.getTrack(trackId); Track track = myTracksProviderUtils.getTrack(trackId);
return !track.isSharedWithMe(); menu.findItem(R.id.list_context_menu_share_drive).setVisible(false);
} menu.findItem(R.id.list_context_menu_show_on_map).setVisible(true);
menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
@Override menu.findItem(R.id.list_context_menu_delete).setVisible(!track.isSharedWithMe());
public boolean canDelete(int poistion, long id) {
Track track = myTracksProviderUtils.getTrack(trackId);
return !track.isSharedWithMe();
} }
}; };
@@ -169,7 +165,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
int iconId = statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin; int iconId = statistics ? R.drawable.yellow_pushpin : R.drawable.blue_pushpin;
String category = statistics ? null : cursor.getString(categoryIndex); String category = statistics ? null : cursor.getString(categoryIndex);
String description = statistics ? null : cursor.getString(descriptionIndex); String description = statistics ? null : cursor.getString(descriptionIndex);
ListItemUtils.setListItem(MarkerListActivity.this, view, false, true, iconId, ListItemUtils.setListItem(MarkerListActivity.this, view, false, true, iconId,
R.string.icon_marker, cursor.getString(nameIndex), category, null, null, R.string.icon_marker, cursor.getString(nameIndex), category, null, null,
cursor.getLong(timeIndex), description); cursor.getLong(timeIndex), description);
@@ -259,9 +255,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.list_context_menu, menu); getMenuInflater().inflate(R.menu.list_context_menu, menu);
Track track = myTracksProviderUtils.getTrack(trackId); contextualActionModeCallback.onPrepare(menu, 0, 0);
menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
menu.findItem(R.id.list_context_menu_delete).setVisible(!track.isSharedWithMe());
} }
@Override @Override
@@ -24,6 +24,9 @@ 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.AddPeopleDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller; import com.google.android.apps.mytracks.fragments.DeleteOneMarkerDialogFragment.DeleteOneMarkerCaller;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
@@ -75,7 +78,7 @@ import java.util.SortedSet;
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
public class SearchListActivity extends AbstractMyTracksActivity public class SearchListActivity extends AbstractMyTracksActivity
implements DeleteOneTrackCaller, DeleteOneMarkerCaller { implements ConfirmCaller, DeleteOneTrackCaller, DeleteOneMarkerCaller {
private static final String TAG = SearchListActivity.class.getSimpleName(); private static final String TAG = SearchListActivity.class.getSimpleName();
@@ -131,25 +134,17 @@ public class SearchListActivity extends AbstractMyTracksActivity
return handleContextItem(itemId, position); return handleContextItem(itemId, position);
} }
@Override public void onPrepare(Menu menu, int position, long id) {
public boolean canEdit(int position, long id) {
Map<String, Object> item = arrayAdapter.getItem(position);
Long trackId = (Long) item.get(TRACK_ID_FIELD);
Track track = myTracksProviderUtils.getTrack(trackId);
return !track.isSharedWithMe();
}
@Override
public boolean canDelete(int position, long id) {
Map<String, Object> item = arrayAdapter.getItem(position); Map<String, Object> item = arrayAdapter.getItem(position);
Long trackId = (Long) item.get(TRACK_ID_FIELD); Long trackId = (Long) item.get(TRACK_ID_FIELD);
Long markerId = (Long) item.get(MARKER_ID_FIELD); Long markerId = (Long) item.get(MARKER_ID_FIELD);
if (markerId != null) { Track track = myTracksProviderUtils.getTrack(trackId);
Track track = myTracksProviderUtils.getTrack(trackId); menu.findItem(R.id.list_context_menu_share_drive)
return !track.isSharedWithMe(); .setVisible(markerId == null && !track.isSharedWithMe());
} else { menu.findItem(R.id.list_context_menu_show_on_map).setVisible(markerId != null);
return true; menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
} menu.findItem(R.id.list_context_menu_delete)
.setVisible(markerId == null || !track.isSharedWithMe());
} }
}; };
@@ -295,14 +290,8 @@ public class SearchListActivity extends AbstractMyTracksActivity
super.onCreateContextMenu(menu, v, menuInfo); super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.list_context_menu, menu); getMenuInflater().inflate(R.menu.list_context_menu, menu);
Map<String, Object> item = arrayAdapter.getItem(((AdapterContextMenuInfo) menuInfo).position); int position = ((AdapterContextMenuInfo) menuInfo).position;
Long trackId = (Long) item.get(TRACK_ID_FIELD); contextualActionModeCallback.onPrepare(menu, position, 0);
Long markerId = (Long) item.get(MARKER_ID_FIELD);
Track track = myTracksProviderUtils.getTrack(trackId);
menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
if (markerId != null) {
menu.findItem(R.id.list_context_menu_delete).setVisible(!track.isSharedWithMe());
}
} }
@Override @Override
@@ -337,6 +326,12 @@ public class SearchListActivity extends AbstractMyTracksActivity
Long markerId = (Long) item.get(MARKER_ID_FIELD); Long markerId = (Long) item.get(MARKER_ID_FIELD);
Intent intent; Intent intent;
switch (itemId) { switch (itemId) {
case R.id.list_context_menu_share_drive:
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
getString(R.string.share_track_drive_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true;
case R.id.list_context_menu_show_on_map: case R.id.list_context_menu_show_on_map:
if (markerId != null) { if (markerId != null) {
intent = IntentUtils.newIntent(this, TrackDetailActivity.class) intent = IntentUtils.newIntent(this, TrackDetailActivity.class)
@@ -509,6 +504,17 @@ public class SearchListActivity extends AbstractMyTracksActivity
resultMap.put(MARKER_ID_FIELD, null); resultMap.put(MARKER_ID_FIELD, null);
} }
@Override
public void onConfirmed(int confirmId, long trackId) {
switch (confirmId) {
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
break;
default:
}
}
@Override @Override
public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { public TrackRecordingServiceConnection getTrackRecordingServiceConnection() {
return trackRecordingServiceConnection; return trackRecordingServiceConnection;
@@ -26,6 +26,7 @@ import com.google.android.apps.mytracks.fragments.ChartFragment;
import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment;
import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseUploadServiceDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment; import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment; import com.google.android.apps.mytracks.fragments.FrequencyDialogFragment;
@@ -70,7 +71,7 @@ import java.util.Locale;
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
* @author Rodrigo Damazio * @author Rodrigo Damazio
*/ */
public class TrackDetailActivity extends AbstractMyTracksActivity implements DeleteOneTrackCaller { public class TrackDetailActivity extends AbstractMyTracksActivity implements ConfirmCaller, DeleteOneTrackCaller {
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";
@@ -322,34 +323,6 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }
/**
* Invokes when the confirm dialog is done.
*
* @param id the confirm id
*/
public void onConfirmDialogDone(int id) {
switch (id) {
case R.string.confirm_play_earth_key:
AnalyticsUtils.sendPageViews(this, "/action/play");
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
startActivity(intent);
break;
case R.string.confirm_share_map_key:
AnalyticsUtils.sendPageViews(this, "/action/share");
ChooseActivityDialogFragment.newInstance(trackId, null).show(
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
break;
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
break;
default:
}
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
Intent intent; Intent intent;
@@ -364,7 +337,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
if (isEarthInstalled()) { if (isEarthInstalled()) {
ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key, ConfirmDialogFragment.newInstance(R.string.confirm_play_earth_key,
PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT, PreferencesUtils.CONFIRM_PLAY_EARTH_DEFAULT,
getString(R.string.track_detail_play_confirm_message)) getString(R.string.track_detail_play_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
} else { } else {
new InstallEarthDialogFragment().show( new InstallEarthDialogFragment().show(
@@ -374,13 +347,13 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
case R.id.track_detail_share: case R.id.track_detail_share:
ConfirmDialogFragment.newInstance(R.string.confirm_share_map_key, ConfirmDialogFragment.newInstance(R.string.confirm_share_map_key,
PreferencesUtils.CONFIRM_SHARE_MAP_DEFAULT, StringUtils.getHtml( PreferencesUtils.CONFIRM_SHARE_MAP_DEFAULT, StringUtils.getHtml(
this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url)) this, R.string.share_track_map_confirm_message, R.string.maps_public_unlisted_url),
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); trackId).show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true; return true;
case R.id.track_detail_share_drive: case R.id.track_detail_share_drive:
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key, ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT, PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
getString(R.string.share_track_drive_confirm_message)) getString(R.string.share_track_drive_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true; return true;
case R.id.track_detail_markers: case R.id.track_detail_markers:
@@ -455,6 +428,30 @@ public class TrackDetailActivity extends AbstractMyTracksActivity implements Del
return super.onTrackballEvent(event); return super.onTrackballEvent(event);
} }
@Override
public void onConfirmed(int confirmId, long confirmTrackId) {
switch (confirmId) {
case R.string.confirm_play_earth_key:
AnalyticsUtils.sendPageViews(this, "/action/play");
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_ID, confirmTrackId)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
startActivity(intent);
break;
case R.string.confirm_share_map_key:
AnalyticsUtils.sendPageViews(this, "/action/share");
ChooseActivityDialogFragment.newInstance(confirmTrackId, null).show(
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
break;
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(confirmTrackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
break;
default:
}
}
@Override @Override
public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { public TrackRecordingServiceConnection getTrackRecordingServiceConnection() {
return trackRecordingServiceConnection; return trackRecordingServiceConnection;
@@ -23,6 +23,9 @@ import com.google.android.apps.mytracks.content.TrackDataListener;
import com.google.android.apps.mytracks.content.TrackDataType; import com.google.android.apps.mytracks.content.TrackDataType;
import com.google.android.apps.mytracks.content.TracksColumns; import com.google.android.apps.mytracks.content.TracksColumns;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.fragments.AddPeopleDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller;
import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteAllTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
@@ -89,7 +92,8 @@ import java.util.Locale;
* *
* @author Leif Hendrik Wilden * @author Leif Hendrik Wilden
*/ */
public class TrackListActivity extends FragmentActivity implements DeleteOneTrackCaller { public class TrackListActivity extends FragmentActivity
implements ConfirmCaller, DeleteOneTrackCaller {
private static final String TAG = TrackListActivity.class.getSimpleName(); private static final String TAG = TrackListActivity.class.getSimpleName();
private static final String START_GPS_KEY = "start_gps_key"; private static final String START_GPS_KEY = "start_gps_key";
@@ -195,15 +199,12 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
return handleContextItem(itemId, id); return handleContextItem(itemId, id);
} }
@Override public void onPrepare(Menu menu, int position, long id) {
public boolean canEdit(int position, long id) {
Track track = myTracksProviderUtils.getTrack(id); Track track = myTracksProviderUtils.getTrack(id);
return !track.isSharedWithMe(); menu.findItem(R.id.list_context_menu_share_drive).setVisible(!track.isSharedWithMe());
} menu.findItem(R.id.list_context_menu_show_on_map).setVisible(false);
menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
@Override menu.findItem(R.id.list_context_menu_delete).setVisible(true);
public boolean canDelete(int position, long id) {
return true;
} }
}; };
@@ -401,10 +402,10 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits); TrackListActivity.this, cursor.getDouble(totalDistanceIndex), metricUnits);
long startTime = cursor.getLong(startTimeIndex); long startTime = cursor.getLong(startTimeIndex);
String description = cursor.getString(descriptionIndex); String description = cursor.getString(descriptionIndex);
ListItemUtils.setListItem(TrackListActivity.this, view, isRecording, recordingTrackPaused, ListItemUtils.setListItem(TrackListActivity.this, view, isRecording, recordingTrackPaused,
iconId, R.string.icon_track, name, category, totalTime, iconId, R.string.icon_track, name, category, totalTime, totalDistance, startTime,
totalDistance, startTime, description); description);
} }
}; };
listView.setAdapter(sectionResourceCursorAdapter); listView.setAdapter(sectionResourceCursorAdapter);
@@ -607,9 +608,7 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.list_context_menu, menu); getMenuInflater().inflate(R.menu.list_context_menu, menu);
long trackId = ((AdapterContextMenuInfo) menuInfo).id; contextualActionModeCallback.onPrepare(menu, 0, ((AdapterContextMenuInfo) menuInfo).id);
Track track = myTracksProviderUtils.getTrack(trackId);
menu.findItem(R.id.list_context_menu_edit).setVisible(!track.isSharedWithMe());
} }
@Override @Override
@@ -630,6 +629,17 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
return super.onKeyUp(keyCode, event); return super.onKeyUp(keyCode, event);
} }
@Override
public void onConfirmed(int confirmId, long trackId) {
switch (confirmId) {
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
break;
default:
}
}
@Override @Override
public TrackRecordingServiceConnection getTrackRecordingServiceConnection() { public TrackRecordingServiceConnection getTrackRecordingServiceConnection() {
return trackRecordingServiceConnection; return trackRecordingServiceConnection;
@@ -763,6 +773,12 @@ public class TrackListActivity extends FragmentActivity implements DeleteOneTrac
private boolean handleContextItem(int itemId, long trackId) { private boolean handleContextItem(int itemId, long trackId) {
Intent intent; Intent intent;
switch (itemId) { switch (itemId) {
case R.id.list_context_menu_share_drive:
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
getString(R.string.share_track_drive_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
return true;
case R.id.list_context_menu_show_on_map: case R.id.list_context_menu_show_on_map:
intent = IntentUtils.newIntent(this, TrackDetailActivity.class) intent = IntentUtils.newIntent(this, TrackDetailActivity.class)
.putExtra(TrackDetailActivity.EXTRA_TRACK_ID, trackId); .putExtra(TrackDetailActivity.EXTRA_TRACK_ID, trackId);
@@ -16,10 +16,10 @@
package com.google.android.apps.mytracks.fragments; package com.google.android.apps.mytracks.fragments;
import com.google.android.apps.mytracks.TrackDetailActivity;
import com.google.android.apps.mytracks.util.PreferencesUtils; import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
@@ -36,35 +36,62 @@ import android.widget.TextView;
*/ */
public class ConfirmDialogFragment extends DialogFragment { public class ConfirmDialogFragment extends DialogFragment {
/**
* Interface for caller of this dialog fragment.
*
* @author Jimmy Shih
*/
public interface ConfirmCaller {
/**
* Called when confirmed.
*/
public void onConfirmed(int confirmId, long trackId);
}
public static final String CONFIRM_DIALOG_TAG = "confirmDialog"; public static final String CONFIRM_DIALOG_TAG = "confirmDialog";
private static final String KEY_CONFIRM_ID = "confirmId"; private static final String KEY_CONFIRM_ID = "confirmId";
private static final String KEY_DEFAULT_VALUE = "defaultValue"; private static final String KEY_DEFAULT_VALUE = "defaultValue";
private static final String KEY_MESSAGE = "message"; private static final String KEY_MESSAGE = "message";
private static final String KEY_TRACK_ID = "trackId";
private CheckBox checkBox; private CheckBox checkBox;
public static ConfirmDialogFragment newInstance( public static ConfirmDialogFragment newInstance(
int confirmId, boolean defaultValue, CharSequence message) { int confirmId, boolean defaultValue, CharSequence message, long trackId) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt(KEY_CONFIRM_ID, confirmId); bundle.putInt(KEY_CONFIRM_ID, confirmId);
bundle.putBoolean(KEY_DEFAULT_VALUE, defaultValue); bundle.putBoolean(KEY_DEFAULT_VALUE, defaultValue);
bundle.putCharSequence(KEY_MESSAGE, message); bundle.putCharSequence(KEY_MESSAGE, message);
bundle.putLong(KEY_TRACK_ID, trackId);
ConfirmDialogFragment confirmDialogFragment = new ConfirmDialogFragment(); ConfirmDialogFragment confirmDialogFragment = new ConfirmDialogFragment();
confirmDialogFragment.setArguments(bundle); confirmDialogFragment.setArguments(bundle);
return confirmDialogFragment; return confirmDialogFragment;
} }
private ConfirmCaller caller;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
caller = (ConfirmCaller) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement ConfirmCaller");
}
}
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
int confirmId = getArguments().getInt(KEY_CONFIRM_ID); int confirmId = getArguments().getInt(KEY_CONFIRM_ID);
boolean defaultValue = getArguments().getBoolean(KEY_DEFAULT_VALUE); boolean defaultValue = getArguments().getBoolean(KEY_DEFAULT_VALUE);
if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) { if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) {
long trackId = getArguments().getLong(KEY_TRACK_ID);
dismiss(); dismiss();
TrackDetailActivity trackDetailActivity = (TrackDetailActivity) getActivity(); caller.onConfirmed(confirmId, trackId);
trackDetailActivity.onConfirmDialogDone(confirmId);
} }
} }
@@ -80,9 +107,9 @@ public class ConfirmDialogFragment extends DialogFragment {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
int confirmId = getArguments().getInt(KEY_CONFIRM_ID); int confirmId = getArguments().getInt(KEY_CONFIRM_ID);
long trackId = getArguments().getLong(KEY_TRACK_ID);
PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked()); PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked());
TrackDetailActivity trackDetailActivity = (TrackDetailActivity) getActivity(); caller.onConfirmed(confirmId, trackId);
trackDetailActivity.onConfirmDialogDone(confirmId);
} }
}).setTitle(R.string.generic_confirm_title).setView(view).create(); }).setTitle(R.string.generic_confirm_title).setView(view).create();
} }
@@ -37,9 +37,6 @@ import android.support.v4.app.FragmentActivity;
*/ */
public class DeleteOneTrackDialogFragment extends DialogFragment { public class DeleteOneTrackDialogFragment extends DialogFragment {
public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog";
private static final String KEY_TRACK_ID = "trackId";
/** /**
* Interface for caller of this dialog fragment. * Interface for caller of this dialog fragment.
* *
@@ -57,6 +54,9 @@ public class DeleteOneTrackDialogFragment extends DialogFragment {
*/ */
public void onTrackDeleted(); public void onTrackDeleted();
} }
public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog";
private static final String KEY_TRACK_ID = "trackId";
public static DeleteOneTrackDialogFragment newInstance(long trackId) { public static DeleteOneTrackDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
@@ -59,32 +59,33 @@ public class Api11Adapter extends Api10Adapter {
final ContextualActionModeCallback contextualActionModeCallback) { final ContextualActionModeCallback contextualActionModeCallback) {
listView.setOnItemLongClickListener(new OnItemLongClickListener() { listView.setOnItemLongClickListener(new OnItemLongClickListener() {
ActionMode actionMode; ActionMode actionMode;
@Override
@Override
public boolean onItemLongClick( public boolean onItemLongClick(
AdapterView<?> parent, View view, final int position, final long id) { AdapterView<?> parent, View view, final int position, final long id) {
if (actionMode != null) { if (actionMode != null) {
return false; return false;
} }
actionMode = activity.startActionMode(new ActionMode.Callback() { actionMode = activity.startActionMode(new ActionMode.Callback() {
@Override @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.list_context_menu, menu); mode.getMenuInflater().inflate(R.menu.list_context_menu, menu);
return true; return true;
} }
@Override
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.findItem(R.id.list_context_menu_edit) contextualActionModeCallback.onPrepare(menu, position, id);
.setVisible(contextualActionModeCallback.canEdit(position, id));
menu.findItem(R.id.list_context_menu_delete)
.setVisible(contextualActionModeCallback.canDelete(position, id));
// Return true to indicate change // Return true to indicate change
return true; return true;
} }
@Override
@Override
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
actionMode = null; actionMode = null;
} }
@Override
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) { public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
mode.finish(); mode.finish();
return contextualActionModeCallback.onClick(item.getItemId(), position, id); return contextualActionModeCallback.onClick(item.getItemId(), position, id);