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
@@ -144,7 +144,7 @@ public class MarkerDetailActivity extends AbstractMyTracksActivity
}
@Override
public void onMarkerDeleted() {
public void onDeleteOneMarkerDone() {
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -306,7 +306,7 @@ public class MarkerListActivity extends AbstractMyTracksActivity implements Dele
}
@Override
public void onMarkerDeleted() {
public void onDeleteOneMarkerDone() {
// 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.Waypoint;
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.DeleteOneMarkerCaller;
import com.google.android.apps.mytracks.fragments.DeleteOneTrackDialogFragment;
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.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.stats.TripStatistics;
@@ -510,11 +511,15 @@ public class SearchListActivity extends AbstractMyTracksActivity
}
@Override
public void onConfirmed(int confirmId, long trackId) {
public void onConfirmDone(int confirmId, long trackId) {
switch (confirmId) {
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
SendRequest sendRequest = new SendRequest(trackId);
sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
Intent intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break;
default:
}
@@ -526,7 +531,7 @@ public class SearchListActivity extends AbstractMyTracksActivity
}
@Override
public void onTrackDeleted() {
public void onDeleteOneTrackDone() {
runOnUiThread(new Runnable() {
@Override
public void run() {
@@ -536,7 +541,7 @@ public class SearchListActivity extends AbstractMyTracksActivity
}
@Override
public void onMarkerDeleted() {
public void onDeleteOneMarkerDone() {
runOnUiThread(new Runnable() {
@Override
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.Waypoint;
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.ChooseActivityDialogFragment;
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.io.file.SaveActivity;
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.services.TrackRecordingServiceConnection;
import com.google.android.apps.mytracks.settings.SettingsActivity;
@@ -430,11 +430,12 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
}
@Override
public void onConfirmed(int confirmId, long confirmTrackId) {
public void onConfirmDone(int confirmId, long confirmTrackId) {
Intent intent;
switch (confirmId) {
case R.string.confirm_play_earth_key:
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_FILE_FORMAT, (Parcelable) TrackFileFormat.KML)
.putExtra(SaveActivity.EXTRA_PLAY_TRACK, true);
@@ -446,8 +447,12 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
break;
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(confirmTrackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
SendRequest sendRequest = new SendRequest(trackId);
sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break;
default:
}
@@ -459,7 +464,7 @@ public class TrackDetailActivity extends AbstractMyTracksActivity
}
@Override
public void onTrackDeleted() {
public void onDeleteOneTrackDone() {
runOnUiThread(new Runnable() {
@Override
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.TracksColumns;
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;
@@ -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.SaveActivity;
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.services.ITrackRecordingService;
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
@@ -632,11 +633,15 @@ public class TrackListActivity extends FragmentActivity
}
@Override
public void onConfirmed(int confirmId, long trackId) {
public void onConfirmDone(int confirmId, long trackId) {
switch (confirmId) {
case R.string.confirm_share_drive_key:
AddPeopleDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), AddPeopleDialogFragment.ADD_PEOPLE_DIALOG_TAG);
SendRequest sendRequest = new SendRequest(trackId);
sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
Intent intent = IntentUtils.newIntent(this, AccountChooserActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent);
break;
default:
}
@@ -648,7 +653,7 @@ public class TrackListActivity extends FragmentActivity
}
@Override
public void onTrackDeleted() {
public void onDeleteOneTrackDone() {
// Do nothing
}
@@ -16,16 +16,12 @@
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 android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
@@ -38,35 +34,62 @@ import android.widget.FilterQueryProvider;
import android.widget.MultiAutoCompleteTextView;
/**
* A DialogFragment to add people to share a track with.
* A DialogFragment to add emails.
*
* @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";
public static AddPeopleDialogFragment newInstance(long trackId) {
public static AddEmailsDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle();
bundle.putLong(KEY_TRACK_ID, trackId);
AddPeopleDialogFragment addPeopleDialogFragment = new AddPeopleDialogFragment();
AddEmailsDialogFragment addPeopleDialogFragment = new AddEmailsDialogFragment();
addPeopleDialogFragment.setArguments(bundle);
return addPeopleDialogFragment;
}
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
public Dialog onCreateDialog(Bundle savedInstanceState) {
FragmentActivity activity = getActivity();
View view = activity.getLayoutInflater().inflate(R.layout.add_people, null);
multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_people);
View view = activity.getLayoutInflater().inflate(R.layout.add_emails, null);
multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_emails);
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[] {
ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA },
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
@@ -85,24 +108,28 @@ public class AddPeopleDialogFragment extends DialogFragment {
});
multiAutoCompleteTextView.setAdapter(adapter);
return new AlertDialog.Builder(activity).setNegativeButton(R.string.generic_cancel, null)
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
return new AlertDialog.Builder(activity).setNegativeButton(
R.string.generic_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String acl = multiAutoCompleteTextView.getText().toString();
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);
}
caller.onAddEmailsDone(null);
}
}).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
*
@@ -44,9 +44,9 @@ public class ConfirmDialogFragment extends DialogFragment {
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";
@@ -92,7 +92,7 @@ public class ConfirmDialogFragment extends DialogFragment {
if (!PreferencesUtils.getBoolean(getActivity(), confirmId, defaultValue)) {
long trackId = getArguments().getLong(KEY_TRACK_ID);
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);
long trackId = getArguments().getLong(KEY_TRACK_ID);
PreferencesUtils.setBoolean(getActivity(), confirmId, !checkBox.isChecked());
caller.onConfirmed(confirmId, trackId);
caller.onConfirmDone(confirmId, trackId);
}
}).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 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.
*
* @author Jimmy Shih
*/
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) {
Bundle bundle = new Bundle();
bundle.putLong(KEY_MARKER_ID, markerId);
@@ -89,7 +89,7 @@ public class DeleteOneMarkerDialogFragment extends DialogFragment {
MyTracksProviderUtils.Factory.get(fragmentActivity).deleteWaypoint(
getArguments().getLong(KEY_MARKER_ID),
new DescriptionGeneratorImpl(fragmentActivity));
caller.onMarkerDeleted();
caller.onDeleteOneMarkerDone();
}
}).start();
}
@@ -50,9 +50,9 @@ public class DeleteOneTrackDialogFragment extends DialogFragment {
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";
@@ -98,7 +98,7 @@ public class DeleteOneTrackDialogFragment extends DialogFragment {
@Override
public void run() {
MyTracksProviderUtils.Factory.get(fragmentActivity).deleteTrack(trackId);
caller.onTrackDeleted();
caller.onDeleteOneTrackDone();
}
}).start();
}
@@ -39,7 +39,7 @@ public class SendDriveActivity extends AbstractSendActivity {
@Override
protected AbstractSendAsyncTask createAsyncTask() {
return new SendDriveAsyncTask(
this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getAcl());
this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getDriveShareEmails());
}
@Override
@@ -17,6 +17,8 @@
package com.google.android.apps.mytracks.io.sendtogoogle;
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.fusiontables.SendFusionTablesActivity;
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.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.widget.Toast;
@@ -49,7 +52,7 @@ import java.io.IOException;
*
* @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 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.
*/
@@ -327,7 +341,13 @@ public class AccountChooserActivity extends Activity {
private void startNextActivity() {
Class<?> next;
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()) {
next = sendRequest.isNewMap() ? SendMapsActivity.class : ChooseMapActivity.class;
} else if (sendRequest.isSendFusionTables()) {
@@ -33,11 +33,12 @@ public class SendRequest implements Parcelable {
private long trackId = -1L;
private String sharingAppPackageName = null;
private String sharingAppClassName = null;
private String acl = null;
private boolean sendDrive = false;
private boolean sendMaps = false;
private boolean sendFusionTables = false;
private boolean sendSpreadsheets = false;
private boolean driveShare = false;
private String driveShareEmails = null;
private boolean newMap = false;
private Account account = null;
private String mapId = null;
@@ -94,22 +95,6 @@ public class SendRequest implements Parcelable {
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.
*/
@@ -178,6 +163,22 @@ public class SendRequest implements Parcelable {
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.
*/
@@ -297,11 +298,12 @@ public class SendRequest implements Parcelable {
trackId = in.readLong();
sharingAppPackageName = in.readString();
sharingAppClassName = in.readString();
acl = in.readString();
sendDrive = in.readByte() == 1;
sendMaps = in.readByte() == 1;
sendFusionTables = in.readByte() == 1;
sendSpreadsheets = in.readByte() == 1;
driveShare = in.readByte() == 1;
driveShareEmails = in.readString();
newMap = in.readByte() == 1;
account = in.readParcelable(null);
mapId = in.readString();
@@ -321,11 +323,12 @@ public class SendRequest implements Parcelable {
out.writeLong(trackId);
out.writeString(sharingAppPackageName);
out.writeString(sharingAppClassName);
out.writeString(acl);
out.writeByte((byte) (sendDrive ? 1 : 0));
out.writeByte((byte) (sendMaps ? 1 : 0));
out.writeByte((byte) (sendFusionTables ? 1 : 0));
out.writeByte((byte) (sendSpreadsheets ? 1 : 0));
out.writeByte((byte) (driveShare ? 1 : 0));
out.writeString(driveShareEmails);
out.writeByte((byte) (newMap ? 1 : 0));
out.writeParcelable(account, 0);
out.writeString(mapId);