Add AddEmail after choosing an account.

This commit is contained in:
Jimmy Shih
2013-02-15 13:05:54 -08:00
parent d1db798f16
commit 15a2024614
16 changed files with 185 additions and 107 deletions
@@ -22,9 +22,9 @@ limitations under the License.
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" > android:padding="8dp" >
<MultiAutoCompleteTextView <MultiAutoCompleteTextView
android:hint="@string/share_track_add_people_hint" android:hint="@string/share_track_add_emails_hint"
android:completionThreshold="1" android:completionThreshold="1"
android:id="@+id/add_people" android:id="@+id/add_emails"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_width="match_parent" android:layout_width="match_parent"
+4 -4
View File
@@ -2220,11 +2220,11 @@ limitations under the License.
</string> </string>
<!-- Share Track --> <!-- Share Track -->
<string name="share_track_add_people" <string name="share_track_add_emails_title"
translation_description="The dialog title for adding people to share a track with."> translation_description="The dialog title for adding emails to share a track with.">
Add people Add emails
</string> </string>
<string name="share_track_add_people_hint" <string name="share_track_add_emails_hint"
translation_description="The hint in the auto complete text box for entering email addresses."> translation_description="The hint in the auto complete text box for entering email addresses.">
Enter email addresses Enter email addresses
</string> </string>
@@ -144,7 +144,7 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onMarkerDeleted() { public void onDeleteOneMarkerDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -306,7 +306,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
} }
@Override @Override
public void onMarkerDeleted() { public void onDeleteOneMarkerDone() {
// Do nothing // Do nothing
} }
} }
@@ -24,13 +24,14 @@ 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;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller; 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;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller; import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment.DeleteOneTrackCaller;
import com.google.android.apps.mytracks.io.sendtogoogle.AccountChooserActivity;
import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest;
import com.google.android.apps.mytracks.services.MyTracksLocationManager; import com.google.android.apps.mytracks.services.MyTracksLocationManager;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.stats.TripStatistics; import com.google.android.apps.mytracks.stats.TripStatistics;
@@ -510,11 +511,15 @@ public class SearchListActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onConfirmed(int confirmId, long trackId) { public void onConfirmDone(int confirmId, long trackId) {
switch (confirmId) { switch (confirmId) {
case R.string.confirm_share_drive_key: case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId) SendRequest sendRequest = new SendRequest(trackId);
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
Intent intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break; break;
default: default:
} }
@@ -526,7 +531,7 @@ public class SearchListActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onTrackDeleted() { public void onDeleteOneTrackDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -536,7 +541,7 @@ public class SearchListActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onMarkerDeleted() { public void onDeleteOneMarkerDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -21,7 +21,6 @@ import com.google.android.apps.mytracks.content.Track;
import com.google.android.apps.mytracks.content.TrackDataHub; import com.google.android.apps.mytracks.content.TrackDataHub;
import com.google.android.apps.mytracks.content.Waypoint; import com.google.android.apps.mytracks.content.Waypoint;
import com.google.android.apps.mytracks.content.WaypointCreationRequest; import com.google.android.apps.mytracks.content.WaypointCreationRequest;
import com.google.android.apps.mytracks.fragments.AddPeopleDialogFragment;
import com.google.android.apps.mytracks.fragments.ChartFragment; 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;
@@ -35,6 +34,7 @@ import com.google.android.apps.mytracks.fragments.MyTracksMapFragment;
import com.google.android.apps.mytracks.fragments.StatsFragment; import com.google.android.apps.mytracks.fragments.StatsFragment;
import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.SaveActivity;
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.sendtogoogle.AccountChooserActivity;
import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest; import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.settings.SettingsActivity; import com.google.android.apps.mytracks.settings.SettingsActivity;
@@ -430,11 +430,12 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onConfirmed(int confirmId, long confirmTrackId) { public void onConfirmDone(int confirmId, long confirmTrackId) {
Intent intent;
switch (confirmId) { switch (confirmId) {
case R.string.confirm_play_earth_key: case R.string.confirm_play_earth_key:
AnalyticsUtils.sendPageViews(this, "/action/play"); AnalyticsUtils.sendPageViews(this, "/action/play");
Intent intent = IntentUtils.newIntent(this, SaveActivity.class) intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_ID, confirmTrackId) .putExtra(SaveActivity.EXTRA_TRACK_ID, confirmTrackId)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML) .putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true); .putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
@@ -446,8 +447,12 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG); getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
break; break;
case R.string.confirm_share_drive_key: case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(confirmTrackId) SendRequest sendRequest = new SendRequest(trackId);
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break; break;
default: default:
} }
@@ -459,7 +464,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
} }
@Override @Override
public void onTrackDeleted() { public void onDeleteOneTrackDone() {
runOnUiThread(new Runnable() { runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -23,7 +23,6 @@ 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;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller; 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;
@@ -34,6 +33,8 @@ import com.google.android.apps.mytracks.fragments.WelcomeDialogFragment;
import com.google.android.apps.mytracks.io.file.ImportActivity; import com.google.android.apps.mytracks.io.file.ImportActivity;
import com.google.android.apps.mytracks.io.file.SaveActivity; import com.google.android.apps.mytracks.io.file.SaveActivity;
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.sendtogoogle.AccountChooserActivity;
import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest;
import com.google.android.apps.mytracks.io.sync.SyncUtils; import com.google.android.apps.mytracks.io.sync.SyncUtils;
import com.google.android.apps.mytracks.services.ITrackRecordingService; import com.google.android.apps.mytracks.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection; import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
@@ -632,11 +633,15 @@ public class TrackListActivity extends FragmentActivity
} }
@Override @Override
public void onConfirmed(int confirmId, long trackId) { public void onConfirmDone(int confirmId, long trackId) {
switch (confirmId) { switch (confirmId) {
case R.string.confirm_share_drive_key: case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId) SendRequest sendRequest = new SendRequest(trackId);
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG); sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
Intent intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break; break;
default: default:
} }
@@ -648,7 +653,7 @@ public class TrackListActivity extends FragmentActivity
} }
@Override @Override
public void onTrackDeleted() { public void onDeleteOneTrackDone() {
// Do nothing // Do nothing
} }
@@ -16,16 +16,12 @@
package com.google.android.apps.mytracks.fragments; package com.google.android.apps.mytracks.fragments;
import com.google.android.apps.mytracks.io.sendtogoogle.AccountChooserActivity;
import com.google.android.apps.mytracks.io.sendtogoogle.SendRequest;
import com.google.android.apps.mytracks.util.IntentUtils;
import com.google.android.maps.mytracks.R; import com.google.android.maps.mytracks.R;
import android.app.Activity; 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;
import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@@ -38,35 +34,62 @@ import android.widget.FilterQueryProvider;
import android.widget.MultiAutoCompleteTextView; import android.widget.MultiAutoCompleteTextView;
/** /**
* A DialogFragment to add people to share a track with. * A DialogFragment to add emails.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public class AddPeopleDialogFragment extends DialogFragment { public class AddEmailsDialogFragment extends DialogFragment {
public static final String ADD_PEOPLE_DIALOG_TAG = "addPeopleDialog"; /**
* Interface for caller of this dialog fragment.
*
* @author Jimmy Shih
*/
public interface AddEmailsCaller {
/**
* Called when add emails is done.
*
* @param emails the added emails
*/
public void onAddEmailsDone(String emails);
}
public static final String ADD_EMAILS_DIALOG_TAG = "addEmailsDialog";
private static final String KEY_TRACK_ID = "trackId"; private static final String KEY_TRACK_ID = "trackId";
public static AddPeopleDialogFragment newInstance(long trackId) { public static AddEmailsDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putLong(KEY_TRACK_ID, trackId); bundle.putLong(KEY_TRACK_ID, trackId);
AddPeopleDialogFragment addPeopleDialogFragment = new AddPeopleDialogFragment(); AddEmailsDialogFragment addPeopleDialogFragment = new AddEmailsDialogFragment();
addPeopleDialogFragment.setArguments(bundle); addPeopleDialogFragment.setArguments(bundle);
return addPeopleDialogFragment; return addPeopleDialogFragment;
} }
private MultiAutoCompleteTextView multiAutoCompleteTextView; private MultiAutoCompleteTextView multiAutoCompleteTextView;
private AddEmailsCaller caller;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
caller = (AddEmailsCaller) activity;
} catch (ClassCastException e) {
throw new ClassCastException(
activity.toString() + " must implement " + AddEmailsCaller.class.getSimpleName());
}
}
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
FragmentActivity activity = getActivity(); FragmentActivity activity = getActivity();
View view = activity.getLayoutInflater().inflate(R.layout.add_people, null); View view = activity.getLayoutInflater().inflate(R.layout.add_emails, null);
multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_people); multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_emails);
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.add_people_item, SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.add_emails_item,
getCursor(getActivity(), null), new String[] { getCursor(getActivity(), null), new String[] {
ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA }, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA },
new int[] { android.R.id.text1, android.R.id.text2 }, 0); new int[] { android.R.id.text1, android.R.id.text2 }, 0);
@@ -85,24 +108,28 @@ public class AddPeopleDialogFragment extends DialogFragment {
}); });
multiAutoCompleteTextView.setAdapter(adapter); multiAutoCompleteTextView.setAdapter(adapter);
return new AlertDialog.Builder(activity).setNegativeButton(R.string.generic_cancel, null) return new AlertDialog.Builder(activity).setNegativeButton(
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { R.string.generic_cancel, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
String acl = multiAutoCompleteTextView.getText().toString(); caller.onAddEmailsDone(null);
if (acl != null && !acl.equals("")) {
long trackId = getArguments().getLong(KEY_TRACK_ID);
SendRequest sendRequest = new SendRequest(trackId);
sendRequest.setSendDrive(true);
sendRequest.setAcl(acl);
Intent intent = IntentUtils.newIntent(getActivity(), AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
}
} }
}).setTitle(R.string.share_track_add_people).setView(view).create(); }).setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String acl = multiAutoCompleteTextView.getText().toString();
caller.onAddEmailsDone(acl);
}
}).setTitle(R.string.share_track_add_emails_title).setView(view).create();
} }
@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
caller.onAddEmailsDone(null);
}
/** /**
* Gets the cursor * Gets the cursor
* *
@@ -44,9 +44,9 @@ public class ConfirmDialogFragment extends DialogFragment {
public interface ConfirmCaller { public interface ConfirmCaller {
/** /**
* Called when confirmed. * Called when confirm is done.
*/ */
public void onConfirmed(int confirmId, long trackId); public void onConfirmDone(int confirmId, long trackId);
} }
public static final String CONFIRM_DIALOG_TAG = "confirmDialog"; public static final String CONFIRM_DIALOG_TAG = "confirmDialog";
@@ -92,7 +92,7 @@ public class ConfirmDialogFragment extends DialogFragment {
if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) { if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) {
long trackId = getArguments().getLong(KEY_TRACK_ID); long trackId = getArguments().getLong(KEY_TRACK_ID);
dismiss(); dismiss();
caller.onConfirmed(confirmId, trackId); caller.onConfirmDone(confirmId, trackId);
} }
} }
@@ -110,7 +110,7 @@ public class ConfirmDialogFragment extends DialogFragment {
int confirmId = getArguments().getInt(KEY_CONFIRM_ID); int confirmId = getArguments().getInt(KEY_CONFIRM_ID);
long trackId = getArguments().getLong(KEY_TRACK_ID); long trackId = getArguments().getLong(KEY_TRACK_ID);
PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked()); PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked());
caller.onConfirmed(confirmId, trackId); caller.onConfirmDone(confirmId, trackId);
} }
}).setTitle(R.string.generic_confirm_title).setView(view).create(); }).setTitle(R.string.generic_confirm_title).setView(view).create();
} }
@@ -35,23 +35,23 @@ import android.support.v4.app.FragmentActivity;
*/ */
public class DeleteOneMarkerDialogFragment extends DialogFragment { public class DeleteOneMarkerDialogFragment extends DialogFragment {
public static final String DELETE_ONE_MARKER_DIALOG_TAG = "deleteOneMarkerDialog";
private static final String KEY_MARKER_ID = "markerId";
private static final String KEY_TRACK_ID = "trackId";
/** /**
* 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 DeleteOneMarkerCaller {
/** /**
* Called when a marker is deleted. * Called when delete one marker is done.
*/ */
public void onMarkerDeleted(); public void onDeleteOneMarkerDone();
} }
public static final String DELETE_ONE_MARKER_DIALOG_TAG = "deleteOneMarkerDialog";
private static final String KEY_MARKER_ID = "markerId";
private static final String KEY_TRACK_ID = "trackId";
public static DeleteOneMarkerDialogFragment newInstance(long markerId, long trackId) { public static DeleteOneMarkerDialogFragment newInstance(long markerId, long trackId) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putLong(KEY_MARKER_ID, markerId); bundle.putLong(KEY_MARKER_ID, markerId);
@@ -89,7 +89,7 @@ public class DeleteOneMarkerDialogFragment extends DialogFragment {
MyTracksProviderUtils.Factory.get(fragmentActivity).deleteWaypoint( MyTracksProviderUtils.Factory.get(fragmentActivity).deleteWaypoint(
getArguments().getLong(KEY_MARKER_ID), getArguments().getLong(KEY_MARKER_ID),
new DescriptionGeneratorImpl(fragmentActivity)); new DescriptionGeneratorImpl(fragmentActivity));
caller.onMarkerDeleted(); caller.onDeleteOneMarkerDone();
} }
}).start(); }).start();
} }
@@ -50,9 +50,9 @@ public class DeleteOneTrackDialogFragment extends DialogFragment {
public TrackRecordingServiceConnection getTrackRecordingServiceConnection(); public TrackRecordingServiceConnection getTrackRecordingServiceConnection();
/** /**
* Called when a track is deleted. * Called when delete one track is done.
*/ */
public void onTrackDeleted(); public void onDeleteOneTrackDone();
} }
public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog"; public static final String DELETE_ONE_TRACK_DIALOG_TAG = "deleteOneTrackDialog";
@@ -98,7 +98,7 @@ public class DeleteOneTrackDialogFragment extends DialogFragment {
@Override @Override
public void run() { public void run() {
MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(trackId); MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(trackId);
caller.onTrackDeleted(); caller.onDeleteOneTrackDone();
} }
}).start(); }).start();
} }
@@ -39,7 +39,7 @@ public class SendDriveActivity extends AbstractSendActivity {
@Override @Override
protected AbstractSendAsyncTask createAsyncTask() { protected AbstractSendAsyncTask createAsyncTask() {
return new SendDriveAsyncTask( return new SendDriveAsyncTask(
this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getAcl()); this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getDriveShareEmails());
} }
@Override @Override
@@ -17,6 +17,8 @@
package com.google.android.apps.mytracks.io.sendtogoogle; package com.google.android.apps.mytracks.io.sendtogoogle;
import com.google.android.apps.mytracks.Constants; import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment;
import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment.AddEmailsCaller;
import com.google.android.apps.mytracks.io.drive.SendDriveActivity; import com.google.android.apps.mytracks.io.drive.SendDriveActivity;
import com.google.android.apps.mytracks.io.fusiontables.SendFusionTablesActivity; import com.google.android.apps.mytracks.io.fusiontables.SendFusionTablesActivity;
import com.google.android.apps.mytracks.io.gdata.maps.MapsConstants; import com.google.android.apps.mytracks.io.gdata.maps.MapsConstants;
@@ -39,6 +41,7 @@ import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
@@ -49,7 +52,7 @@ import java.io.IOException;
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public class AccountChooserActivity extends Activity { public class AccountChooserActivity extends FragmentActivity implements AddEmailsCaller {
private static final String TAG = AccountChooserActivity.class.getSimpleName(); private static final String TAG = AccountChooserActivity.class.getSimpleName();
private static final int DIALOG_NO_ACCOUNT_ID = 0; private static final int DIALOG_NO_ACCOUNT_ID = 0;
@@ -143,6 +146,17 @@ public class AccountChooserActivity extends Activity {
} }
} }
@Override
public void onAddEmailsDone(String emails) {
if (emails != null && !emails.equals("")) {
sendRequest.setDriveShareEmails(emails);
Intent intent = IntentUtils.newIntent(this, SendDriveActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
}
finish();
}
/** /**
* Creates a chooser dialog. * Creates a chooser dialog.
*/ */
@@ -327,7 +341,13 @@ public class AccountChooserActivity extends Activity {
private void startNextActivity() { private void startNextActivity() {
Class<?> next; Class<?> next;
if (sendRequest.isSendDrive()) { if (sendRequest.isSendDrive()) {
next = SendDriveActivity.class; if (sendRequest.isDriveShare()) {
AddEmailsDialogFragment.newInstance(sendRequest.getTrackId())
.show(getSupportFragmentManager(), AddEmailsDialogFragment.ADD_EMAILS_DIALOG_TAG);
return;
} else {
next = SendDriveActivity.class;
}
} else if (sendRequest.isSendMaps()) { } else if (sendRequest.isSendMaps()) {
next = sendRequest.isNewMap() ? SendMapsActivity.class : ChooseMapActivity.class; next = sendRequest.isNewMap() ? SendMapsActivity.class : ChooseMapActivity.class;
} else if (sendRequest.isSendFusionTables()) { } else if (sendRequest.isSendFusionTables()) {
@@ -33,11 +33,12 @@ public class SendRequest implements Parcelable {
private long trackId = -1L; private long trackId = -1L;
private String sharingAppPackageName = null; private String sharingAppPackageName = null;
private String sharingAppClassName = null; private String sharingAppClassName = null;
private String acl = null;
private boolean sendDrive = false; private boolean sendDrive = false;
private boolean sendMaps = false; private boolean sendMaps = false;
private boolean sendFusionTables = false; private boolean sendFusionTables = false;
private boolean sendSpreadsheets = false; private boolean sendSpreadsheets = false;
private boolean driveShare = false;
private String driveShareEmails = null;
private boolean newMap = false; private boolean newMap = false;
private Account account = null; private Account account = null;
private String mapId = null; private String mapId = null;
@@ -94,22 +95,6 @@ public class SendRequest implements Parcelable {
this.sharingAppClassName = sharingAppClassName; this.sharingAppClassName = sharingAppClassName;
} }
/**
* Gets the email address of the user to share the track with.
*/
public String getAcl() {
return acl;
}
/**
* Sets the email address of the user to share the track with.
*
* @param acl the email address
*/
public void setAcl(String acl) {
this.acl = acl;
}
/** /**
* True if the user has selected the send to Google Drive option. * True if the user has selected the send to Google Drive option.
*/ */
@@ -178,6 +163,22 @@ public class SendRequest implements Parcelable {
this.sendSpreadsheets = sendSpreadsheets; this.sendSpreadsheets = sendSpreadsheets;
} }
public boolean isDriveShare() {
return driveShare;
}
public void setDriveShare(boolean driveShare) {
this.driveShare = driveShare;
}
public String getDriveShareEmails() {
return driveShareEmails;
}
public void setDriveShareEmails(String driveShareEmails) {
this.driveShareEmails = driveShareEmails;
}
/** /**
* True if the user has selected to create a new Google Maps. * True if the user has selected to create a new Google Maps.
*/ */
@@ -297,11 +298,12 @@ public class SendRequest implements Parcelable {
trackId = in.readLong(); trackId = in.readLong();
sharingAppPackageName = in.readString(); sharingAppPackageName = in.readString();
sharingAppClassName = in.readString(); sharingAppClassName = in.readString();
acl = in.readString();
sendDrive = in.readByte() == 1; sendDrive = in.readByte() == 1;
sendMaps = in.readByte() == 1; sendMaps = in.readByte() == 1;
sendFusionTables = in.readByte() == 1; sendFusionTables = in.readByte() == 1;
sendSpreadsheets = in.readByte() == 1; sendSpreadsheets = in.readByte() == 1;
driveShare = in.readByte() == 1;
driveShareEmails = in.readString();
newMap = in.readByte() == 1; newMap = in.readByte() == 1;
account = in.readParcelable(null); account = in.readParcelable(null);
mapId = in.readString(); mapId = in.readString();
@@ -321,11 +323,12 @@ public class SendRequest implements Parcelable {
out.writeLong(trackId); out.writeLong(trackId);
out.writeString(sharingAppPackageName); out.writeString(sharingAppPackageName);
out.writeString(sharingAppClassName); out.writeString(sharingAppClassName);
out.writeString(acl);
out.writeByte((byte) (sendDrive ? 1 : 0)); out.writeByte((byte) (sendDrive ? 1 : 0));
out.writeByte((byte) (sendMaps ? 1 : 0)); out.writeByte((byte) (sendMaps ? 1 : 0));
out.writeByte((byte) (sendFusionTables ? 1 : 0)); out.writeByte((byte) (sendFusionTables ? 1 : 0));
out.writeByte((byte) (sendSpreadsheets ? 1 : 0)); out.writeByte((byte) (sendSpreadsheets ? 1 : 0));
out.writeByte((byte) (driveShare ? 1 : 0));
out.writeString(driveShareEmails);
out.writeByte((byte) (newMap ? 1 : 0)); out.writeByte((byte) (newMap ? 1 : 0));
out.writeParcelable(account, 0); out.writeParcelable(account, 0);
out.writeString(mapId); out.writeString(mapId);
@@ -26,12 +26,16 @@ import android.test.AndroidTestCase;
* @author Youtao Liu * @author Youtao Liu
*/ */
public class SendRequestTest extends AndroidTestCase { public class SendRequestTest extends AndroidTestCase {
private SendRequest sendRequest; private SendRequest sendRequest;
final static private String ACCOUNTNAME = "testAccount1"; private static final String SHARING_APP_PACKAGE_NAME = "package";
final static private String ACCOUNTYPE = "testType1"; private static final String SHARING_APP_CLASS_NAME = "class";
final static private String MAPID = "mapId1"; private final static String ACCOUNTNAME = "testAccount1";
private final static String ACCOUNTYPE = "testType1";
private final static String MAPID = "mapId1";
private final static String DRIVE_SHARE_EMAILS = "foo@foo.com";
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
super.setUp(); super.setUp();
@@ -141,12 +145,13 @@ public class SendRequestTest extends AndroidTestCase {
parcel.writeLong(2); parcel.writeLong(2);
parcel.writeString(""); parcel.writeString("");
parcel.writeString(""); parcel.writeString("");
parcel.writeString("");
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeString(DRIVE_SHARE_EMAILS);
parcel.writeByte((byte) 1);
Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE);
parcel.writeParcelable(account, 0); parcel.writeParcelable(account, 0);
parcel.writeString(MAPID); parcel.writeString(MAPID);
@@ -159,11 +164,12 @@ public class SendRequestTest extends AndroidTestCase {
assertEquals(2, sendRequest.getTrackId()); assertEquals(2, sendRequest.getTrackId());
assertEquals("", sendRequest.getSharingAppPackageName()); assertEquals("", sendRequest.getSharingAppPackageName());
assertEquals("", sendRequest.getSharingAppClassName()); assertEquals("", sendRequest.getSharingAppClassName());
assertEquals("", sendRequest.getAcl());
assertTrue(sendRequest.isSendDrive()); assertTrue(sendRequest.isSendDrive());
assertTrue(sendRequest.isSendMaps()); assertTrue(sendRequest.isSendMaps());
assertTrue(sendRequest.isSendFusionTables()); assertTrue(sendRequest.isSendFusionTables());
assertTrue(sendRequest.isSendSpreadsheets()); assertTrue(sendRequest.isSendSpreadsheets());
assertTrue(sendRequest.isDriveShare());
assertEquals(DRIVE_SHARE_EMAILS, sendRequest.getDriveShareEmails());
assertTrue(sendRequest.isNewMap()); assertTrue(sendRequest.isNewMap());
assertEquals(account, sendRequest.getAccount()); assertEquals(account, sendRequest.getAccount());
assertEquals(MAPID, sendRequest.getMapId()); assertEquals(MAPID, sendRequest.getMapId());
@@ -182,12 +188,13 @@ public class SendRequestTest extends AndroidTestCase {
parcel.writeLong(4); parcel.writeLong(4);
parcel.writeString(null); parcel.writeString(null);
parcel.writeString(null); parcel.writeString(null);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeString(null); parcel.writeString(null);
parcel.writeByte((byte) 0); parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0);
Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE);
parcel.writeParcelable(account, 0); parcel.writeParcelable(account, 0);
parcel.writeString(MAPID); parcel.writeString(MAPID);
@@ -200,11 +207,12 @@ public class SendRequestTest extends AndroidTestCase {
assertEquals(4, sendRequest.getTrackId()); assertEquals(4, sendRequest.getTrackId());
assertNull(sendRequest.getSharingAppPackageName()); assertNull(sendRequest.getSharingAppPackageName());
assertNull(sendRequest.getSharingAppClassName()); assertNull(sendRequest.getSharingAppClassName());
assertNull(sendRequest.getAcl());
assertFalse(sendRequest.isSendDrive()); assertFalse(sendRequest.isSendDrive());
assertFalse(sendRequest.isSendMaps()); assertFalse(sendRequest.isSendMaps());
assertFalse(sendRequest.isSendFusionTables()); assertFalse(sendRequest.isSendFusionTables());
assertFalse(sendRequest.isSendSpreadsheets()); assertFalse(sendRequest.isSendSpreadsheets());
assertFalse(sendRequest.isDriveShare());
assertNull(sendRequest.getDriveShareEmails());
assertFalse(sendRequest.isNewMap()); assertFalse(sendRequest.isNewMap());
assertEquals(account, sendRequest.getAccount()); assertEquals(account, sendRequest.getAccount());
assertEquals(MAPID, sendRequest.getMapId()); assertEquals(MAPID, sendRequest.getMapId());
@@ -226,11 +234,12 @@ public class SendRequestTest extends AndroidTestCase {
long trackId = parcel.readLong(); long trackId = parcel.readLong();
String sharingAppPackageName = parcel.readString(); String sharingAppPackageName = parcel.readString();
String sharingAppClassName = parcel.readString(); String sharingAppClassName = parcel.readString();
String acl = parcel.readString();
boolean sendDrive = parcel.readByte() == 1; boolean sendDrive = parcel.readByte() == 1;
boolean sendMaps = parcel.readByte() == 1; boolean sendMaps = parcel.readByte() == 1;
boolean sendFusionTables = parcel.readByte() == 1; boolean sendFusionTables = parcel.readByte() == 1;
boolean sendSpreadsheets = parcel.readByte() == 1; boolean sendSpreadsheets = parcel.readByte() == 1;
boolean driveShare = parcel.readByte() == 1;
String dirveShareEmails = parcel.readString();
boolean newMap = parcel.readByte() == 1; boolean newMap = parcel.readByte() == 1;
Parcelable account = parcel.readParcelable(null); Parcelable account = parcel.readParcelable(null);
String mapId = parcel.readString(); String mapId = parcel.readString();
@@ -241,11 +250,12 @@ public class SendRequestTest extends AndroidTestCase {
assertEquals(1, trackId); assertEquals(1, trackId);
assertNull(sharingAppPackageName); assertNull(sharingAppPackageName);
assertNull(sharingAppClassName); assertNull(sharingAppClassName);
assertNull(acl);
assertFalse(sendDrive); assertFalse(sendDrive);
assertFalse(sendMaps); assertFalse(sendMaps);
assertFalse(sendFusionTables); assertFalse(sendFusionTables);
assertFalse(sendSpreadsheets); assertFalse(sendSpreadsheets);
assertFalse(driveShare);
assertNull(dirveShareEmails);
assertFalse(newMap); assertFalse(newMap);
assertNull(account); assertNull(account);
assertNull(mapId); assertNull(mapId);
@@ -260,13 +270,14 @@ public class SendRequestTest extends AndroidTestCase {
*/ */
public void testWriteToParcel() { public void testWriteToParcel() {
sendRequest = new SendRequest(4); sendRequest = new SendRequest(4);
sendRequest.setSharingAppPackageName("package"); sendRequest.setSharingAppPackageName(SHARING_APP_PACKAGE_NAME);
sendRequest.setSharingAppClassName("class"); sendRequest.setSharingAppClassName(SHARING_APP_CLASS_NAME);
sendRequest.setAcl("acl");
sendRequest.setSendDrive(true); sendRequest.setSendDrive(true);
sendRequest.setSendMaps(true); sendRequest.setSendMaps(true);
sendRequest.setSendFusionTables(true); sendRequest.setSendFusionTables(true);
sendRequest.setSendSpreadsheets(true); sendRequest.setSendSpreadsheets(true);
sendRequest.setDriveShare(true);
sendRequest.setDriveShareEmails(DRIVE_SHARE_EMAILS);
sendRequest.setNewMap(true); sendRequest.setNewMap(true);
Account accountNew = new Account(ACCOUNTNAME + "2", ACCOUNTYPE + "2"); Account accountNew = new Account(ACCOUNTNAME + "2", ACCOUNTYPE + "2");
sendRequest.setAccount(accountNew); sendRequest.setAccount(accountNew);
@@ -282,11 +293,12 @@ public class SendRequestTest extends AndroidTestCase {
long trackId = parcel.readLong(); long trackId = parcel.readLong();
String sharingAppPackageName = parcel.readString(); String sharingAppPackageName = parcel.readString();
String sharingAppClassName = parcel.readString(); String sharingAppClassName = parcel.readString();
String acl = parcel.readString();
boolean sendDrive = parcel.readByte() == 1; boolean sendDrive = parcel.readByte() == 1;
boolean sendMaps = parcel.readByte() == 1; boolean sendMaps = parcel.readByte() == 1;
boolean sendFusionTables = parcel.readByte() == 1; boolean sendFusionTables = parcel.readByte() == 1;
boolean sendSpreadsheets = parcel.readByte() == 1; boolean sendSpreadsheets = parcel.readByte() == 1;
boolean shareDrive = parcel.readByte() == 1;
String driveShareEmails = parcel.readString();
boolean newMap = parcel.readByte() == 1; boolean newMap = parcel.readByte() == 1;
Parcelable account = parcel.readParcelable(null); Parcelable account = parcel.readParcelable(null);
String mapId = parcel.readString(); String mapId = parcel.readString();
@@ -295,13 +307,14 @@ public class SendRequestTest extends AndroidTestCase {
boolean fusionTablesSuccess = parcel.readByte() == 1; boolean fusionTablesSuccess = parcel.readByte() == 1;
boolean spreadsheetsSuccess = parcel.readByte() == 1; boolean spreadsheetsSuccess = parcel.readByte() == 1;
assertEquals(4, trackId); assertEquals(4, trackId);
assertEquals("package", sharingAppPackageName); assertEquals(SHARING_APP_PACKAGE_NAME, sharingAppPackageName);
assertEquals("class", sharingAppClassName); assertEquals(SHARING_APP_CLASS_NAME, sharingAppClassName);
assertEquals("acl", acl);
assertTrue(sendDrive); assertTrue(sendDrive);
assertTrue(sendMaps); assertTrue(sendMaps);
assertTrue(sendFusionTables); assertTrue(sendFusionTables);
assertTrue(sendSpreadsheets); assertTrue(sendSpreadsheets);
assertTrue(shareDrive);
assertEquals(DRIVE_SHARE_EMAILS, driveShareEmails);
assertTrue(newMap); assertTrue(newMap);
assertEquals(accountNew, account); assertEquals(accountNew, account);
assertEquals(MAPID, mapId); assertEquals(MAPID, mapId);