Add make track public in sharing dialog.

This commit is contained in:
Jimmy Shih
2013-06-06 14:58:12 -07:00
parent c8736b7f72
commit efa6f53fdf
14 changed files with 186 additions and 83 deletions
@@ -21,14 +21,23 @@ limitations under the License.
android:layout_width="match_parent" android:layout_width="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" > android:padding="8dp" >
<TextView
android:text="@string/share_track_emails_label"
style="@style/EditLabel" />
<MultiAutoCompleteTextView <MultiAutoCompleteTextView
android:hint="@string/share_track_add_emails_hint"
android:completionThreshold="1" android:completionThreshold="1"
android:id="@+id/add_emails" android:hint="@string/share_track_emails_hint"
android:id="@+id/share_track_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"
android:singleLine="false" > android:singleLine="false" >
</MultiAutoCompleteTextView> </MultiAutoCompleteTextView>
<CheckBox
android:id="@+id/share_track_public"
android:layout_gravity="center_vertical"
android:layout_marginTop="16dp"
android:text="@string/share_track_public"
style="@style/TextMedium" />
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>
+24 -12
View File
@@ -2000,26 +2000,29 @@ limitations under the License.
</string> </string>
<!-- Share Track --> <!-- Share Track -->
<string name="share_track_add_emails_title" <string name="share_track_confirm_message"
translation_description="The dialog title for entering email addresses for sharing a track
with.">
Share track with
</string>
<string name="share_track_add_emails_hint"
translation_description="The hint in the auto complete text box for entering email addresses.">
Enter email addresses
</string>
<string name="share_track_drive_confirm_message"
translation_description="The confirmation message when sharing a track via Google Drive with translation_description="The confirmation message when sharing a track via Google Drive with
friends."> friends.">
This will upload your track to Google Drive so you can share the file with friends. The file This will upload your track to Google Drive so you can share the file with friends.
will be private and only those you have shared with will have access. </string>
<string name="share_track_emails_hint"
translation_description="The hint for the auto complete text box for entering email addresses.">
Email addresses
</string>
<string name="share_track_emails_label"
translation_description="The label for the auto complete text box for entering email
addresses.">
Invite to view:
</string> </string>
<string name="share_track_picker_title" <string name="share_track_picker_title"
translation_description="When sharing a track with friends, the title on the picker to ask the translation_description="When sharing a track with friends, the title on the picker to ask the
user to select an application."> user to select an application.">
Select an application Select an application
</string> </string>
<string name="share_track_public"
translation_description="The checkbox to make a track public and share its url.">
Make public &amp; share URL
</string>
<string name="share_track_share_file" <string name="share_track_share_file"
translation_description="After saving a track to the external storage, the button on the result translation_description="After saving a track to the external storage, the button on the result
dialog to share the saved track file with friends."> dialog to share the saved track file with friends.">
@@ -2046,10 +2049,19 @@ limitations under the License.
%2$s: track description."> %2$s: track description.">
I think you might be interested in this track:\n\n%1$s\n\n%2$s I think you might be interested in this track:\n\n%1$s\n\n%2$s
</string> </string>
<string name="share_track_share_url_title"
translation_description="The dialog title asking the user to select an application for sharing
an URL.">
Share URL using:
</string>
<string name="share_track_subject" <string name="share_track_subject"
translation_description="When sharing a track with friends, the subject line."> translation_description="When sharing a track with friends, the subject line.">
I would like to share a track with you I would like to share a track with you
</string> </string>
<string name="share_track_title"
translation_description="The dialog title to share a track.">
Share track
</string>
<!-- Stats --> <!-- Stats -->
<string name="stats_average_moving_pace" <string name="stats_average_moving_pace"
@@ -16,16 +16,15 @@
package com.google.android.apps.mytracks; package com.google.android.apps.mytracks;
import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment;
import com.google.android.apps.mytracks.fragments.AddEmailsDialogFragment.AddEmailsCaller;
import com.google.android.apps.mytracks.fragments.CheckPermissionFragment; import com.google.android.apps.mytracks.fragments.CheckPermissionFragment;
import com.google.android.apps.mytracks.fragments.CheckPermissionFragment.CheckPermissionCaller; import com.google.android.apps.mytracks.fragments.CheckPermissionFragment.CheckPermissionCaller;
import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment; import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment;
import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment.ChooseAccountCaller; import com.google.android.apps.mytracks.fragments.ChooseAccountDialogFragment.ChooseAccountCaller;
import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment;
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.InstallEarthDialogFragment; import com.google.android.apps.mytracks.fragments.InstallEarthDialogFragment;
import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment;
import com.google.android.apps.mytracks.fragments.ShareTrackDialogFragment.ShareTrackCaller;
import com.google.android.apps.mytracks.io.drive.SendDriveActivity; import com.google.android.apps.mytracks.io.drive.SendDriveActivity;
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;
@@ -66,7 +65,7 @@ import java.io.IOException;
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActivity implements
ChooseAccountCaller, CheckPermissionCaller, AddEmailsCaller, ConfirmCaller { ChooseAccountCaller, CheckPermissionCaller, ShareTrackCaller, ConfirmCaller {
private static final String TAG = AbstractMyTracksActivity.class.getSimpleName(); private static final String TAG = AbstractMyTracksActivity.class.getSimpleName();
private static final String SEND_REQUEST_KEY = "send_request_key"; private static final String SEND_REQUEST_KEY = "send_request_key";
@@ -182,13 +181,12 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
} }
@Override @Override
public void onAddEmailsDone(String emails) { public void onShareTrackDone(String emails, boolean makePublic) {
if (emails != null && !emails.equals("")) { sendRequest.setDriveShareEmails(emails);
sendRequest.setDriveShareEmails(emails); sendRequest.setDriveSharePublic(makePublic);
Intent intent = IntentUtils.newIntent(this, SendDriveActivity.class) Intent intent = IntentUtils.newIntent(this, SendDriveActivity.class)
.putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest); .putExtra(SendRequest.SEND_REQUEST_KEY, sendRequest);
startActivity(intent); startActivity(intent);
}
} }
private void onDrivePermissionSuccess() { private void onDrivePermissionSuccess() {
@@ -260,15 +258,11 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
* <p> * <p>
* isSendDrive and isDriveEnableSync -> enable sync * isSendDrive and isDriveEnableSync -> enable sync
* <p> * <p>
* isSendDrive and isDriveShare -> show {@link AddEmailsDialogFragment} * isSendDrive and isDriveShare -> show {@link ShareTrackDialogFragment}
* <p> * <p>
* isSendDrive -> start {@link SendDriveActivity} * isSendDrive -> start {@link SendDriveActivity}
* <p> * <p>
* isSendMaps and isMapShare -> show {@link ChooseActivityDialogFragment} * isSendMaps -> start {@link SendMapsActivity}
* <p>
* isSendMaps and isMapsExistingMap -> start {@link ChooseMapActivity}
* <p>
* isSendMaps and !isMapsExistingMap -> {@link SendMapsActivity}
* <p> * <p>
* isSendFusionTables -> start {@link SendFusionTablesActivity} * isSendFusionTables -> start {@link SendFusionTablesActivity}
* <p> * <p>
@@ -292,8 +286,8 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
SyncUtils.enableSync(sendRequest.getAccount()); SyncUtils.enableSync(sendRequest.getAccount());
return; return;
} else if (sendRequest.isDriveShare()) { } else if (sendRequest.isDriveShare()) {
AddEmailsDialogFragment.newInstance(sendRequest.getTrackId()) ShareTrackDialogFragment.newInstance(sendRequest.getTrackId())
.show(getSupportFragmentManager(), AddEmailsDialogFragment.ADD_EMAILS_DIALOG_TAG); .show(getSupportFragmentManager(), ShareTrackDialogFragment.SHARE_TRACK_DIALOG_TAG);
return; return;
} else { } else {
next = SendDriveActivity.class; next = SendDriveActivity.class;
@@ -344,7 +338,7 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
protected void confirmShare(long trackId) { protected void confirmShare(long trackId) {
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), new long[] { trackId }) getString(R.string.share_track_confirm_message), new long[] { trackId })
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG); .show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
} }
@@ -124,7 +124,7 @@ public class ChooseActivityDialogFragment extends DialogFragment {
caller.onChooseActivityDone( caller.onChooseActivityDone(
activityInfo.applicationInfo.packageName, activityInfo.name); activityInfo.applicationInfo.packageName, activityInfo.name);
} }
}).setTitle(R.string.share_track_picker_title).create(); }).setTitle(R.string.share_track_share_url_title).create();
} }
@Override @Override
@@ -30,64 +30,69 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.SimpleCursorAdapter; import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View; import android.view.View;
import android.widget.CheckBox;
import android.widget.FilterQueryProvider; import android.widget.FilterQueryProvider;
import android.widget.MultiAutoCompleteTextView; import android.widget.MultiAutoCompleteTextView;
/** /**
* A DialogFragment to add emails. * A DialogFragment to share a track.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public class AddEmailsDialogFragment extends DialogFragment { public class ShareTrackDialogFragment extends DialogFragment {
/** /**
* Interface for caller of this dialog fragment. * Interface for caller of this dialog fragment.
* *
* @author Jimmy Shih * @author Jimmy Shih
*/ */
public interface AddEmailsCaller { public interface ShareTrackCaller {
/** /**
* Called when add emails is done. * Called when share track is done.
* *
* @param emails the added emails * @param emails the added emails
* @param makePublic true to make the track public
*/ */
public void onAddEmailsDone(String emails); public void onShareTrackDone(String emails, boolean makePublic);
} }
public static final String ADD_EMAILS_DIALOG_TAG = "addEmailsDialog"; public static final String SHARE_TRACK_DIALOG_TAG = "shareTrackDialog";
private static final String KEY_TRACK_ID = "trackId"; private static final String KEY_TRACK_ID = "trackId";
public static AddEmailsDialogFragment newInstance(long trackId) { public static ShareTrackDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putLong(KEY_TRACK_ID, trackId); bundle.putLong(KEY_TRACK_ID, trackId);
AddEmailsDialogFragment addPeopleDialogFragment = new AddEmailsDialogFragment(); ShareTrackDialogFragment shareleTrackDialogFragment = new ShareTrackDialogFragment();
addPeopleDialogFragment.setArguments(bundle); shareleTrackDialogFragment.setArguments(bundle);
return addPeopleDialogFragment; return shareleTrackDialogFragment;
} }
private AddEmailsCaller caller; private ShareTrackCaller caller;
private FragmentActivity fragmentActivity; private FragmentActivity fragmentActivity;
private MultiAutoCompleteTextView multiAutoCompleteTextView; private MultiAutoCompleteTextView multiAutoCompleteTextView;
private CheckBox checkBox;
@Override @Override
public void onAttach(Activity activity) { public void onAttach(Activity activity) {
super.onAttach(activity); super.onAttach(activity);
try { try {
caller = (AddEmailsCaller) activity; caller = (ShareTrackCaller) activity;
} catch (ClassCastException e) { } catch (ClassCastException e) {
throw new ClassCastException( throw new ClassCastException(
activity.toString() + " must implement " + AddEmailsCaller.class.getSimpleName()); activity.toString() + " must implement " + ShareTrackCaller.class.getSimpleName());
} }
} }
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
fragmentActivity = getActivity(); fragmentActivity = getActivity();
View view = fragmentActivity.getLayoutInflater().inflate(R.layout.add_emails, null); View view = fragmentActivity.getLayoutInflater().inflate(R.layout.share_track, null);
multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_emails);
multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(
R.id.share_track_emails);
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer()); multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
SimpleCursorAdapter adapter = new SimpleCursorAdapter(fragmentActivity, SimpleCursorAdapter adapter = new SimpleCursorAdapter(fragmentActivity,
@@ -109,15 +114,17 @@ public class AddEmailsDialogFragment extends DialogFragment {
}); });
multiAutoCompleteTextView.setAdapter(adapter); multiAutoCompleteTextView.setAdapter(adapter);
checkBox = (CheckBox) view.findViewById(R.id.share_track_public);
return new AlertDialog.Builder(fragmentActivity).setNegativeButton( return new AlertDialog.Builder(fragmentActivity).setNegativeButton(
R.string.generic_cancel, null) R.string.generic_cancel, null)
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() { .setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
String acl = multiAutoCompleteTextView.getText().toString(); String acl = multiAutoCompleteTextView.getText().toString();
caller.onAddEmailsDone(acl); caller.onShareTrackDone(acl, checkBox.isChecked());
} }
}).setTitle(R.string.share_track_add_emails_title).setView(view).create(); }).setTitle(R.string.share_track_title).setView(view).create();
} }
/** /**
@@ -37,8 +37,8 @@ public class SendDriveActivity extends AbstractSendActivity {
@Override @Override
protected AbstractSendAsyncTask createAsyncTask() { protected AbstractSendAsyncTask createAsyncTask() {
return new SendDriveAsyncTask( return new SendDriveAsyncTask(this, sendRequest.getTrackId(), sendRequest.getAccount(),
this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getDriveShareEmails()); sendRequest.getDriveShareEmails(), sendRequest.isDriveSharePublic());
} }
@Override @Override
@@ -28,6 +28,7 @@ import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecovera
import com.google.api.services.drive.Drive; import com.google.api.services.drive.Drive;
import com.google.api.services.drive.model.File; import com.google.api.services.drive.model.File;
import com.google.api.services.drive.model.Permission; import com.google.api.services.drive.model.Permission;
import com.google.api.services.drive.model.PermissionList;
import android.accounts.Account; import android.accounts.Account;
import android.content.Context; import android.content.Context;
@@ -44,10 +45,12 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
private final long trackId; private final long trackId;
private final Account account; private final Account account;
private final String[] acl; private final String[] acl;
private final boolean isPublic;
private final Context context; private final Context context;
private final MyTracksProviderUtils myTracksProviderUtils; private final MyTracksProviderUtils myTracksProviderUtils;
public SendDriveAsyncTask(SendDriveActivity activity, long trackId, Account account, String acl) { public SendDriveAsyncTask(
SendDriveActivity activity, long trackId, Account account, String acl, boolean isPublic) {
super(activity); super(activity);
this.trackId = trackId; this.trackId = trackId;
this.account = account; this.account = account;
@@ -56,6 +59,7 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
} else { } else {
this.acl = null; this.acl = null;
} }
this.isPublic = isPublic;
context = activity.getApplicationContext(); context = activity.getApplicationContext();
myTracksProviderUtils = MyTracksProviderUtils.Factory.get(context); myTracksProviderUtils = MyTracksProviderUtils.Factory.get(context);
@@ -91,18 +95,18 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
File driveFile = drive.files().get(driveId).execute(); File driveFile = drive.files().get(driveId).execute();
if (SyncUtils.isValid(driveFile, folderId) && SyncUtils.updateDriveFile( if (SyncUtils.isValid(driveFile, folderId) && SyncUtils.updateDriveFile(
drive, driveFile, context, myTracksProviderUtils, track, false)) { drive, driveFile, context, myTracksProviderUtils, track, false)) {
addPermission(drive, driveId); addPermission(drive, driveFile);
return true; return true;
} }
SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null); SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null);
} }
String id = SyncUtils.insertDriveFile( File file = SyncUtils.insertDriveFile(
drive, folderId, context, myTracksProviderUtils, track, false); drive, folderId, context, myTracksProviderUtils, track, false);
if (id == null) { if (file == null) {
return false; return false;
} }
addPermission(drive, id); addPermission(drive, file);
return true; return true;
} catch (UserRecoverableAuthException e) { } catch (UserRecoverableAuthException e) {
SendToGoogleUtils.sendNotification( SendToGoogleUtils.sendNotification(
@@ -128,16 +132,38 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
* @param drive the drive * @param drive the drive
* @param driveId the drive id * @param driveId the drive id
*/ */
private void addPermission(Drive drive, String driveId) throws IOException { private void addPermission(Drive drive, File file) throws IOException {
if (isPublic) {
boolean hasPublic = false;
PermissionList permissionList = drive.permissions().list(file.getId()).execute();
for (Permission permission : permissionList.getItems()) {
String role = permission.getRole();
if (role.equals("reader") || role.equals("writer")) {
if (permission.getType().equals("anyone")) {
hasPublic = true;
break;
}
}
}
if (!hasPublic) {
Permission permission = new Permission();
permission.setRole("reader");
permission.setType("anyone");
permission.setValue("");
drive.permissions().insert(file.getId(), permission).execute();
}
shareUrl = file.getAlternateLink();
}
if (acl != null) { if (acl != null) {
for (String email : acl) { for (String email : acl) {
email = email.trim(); email = email.trim();
if (!email.equals("")) { if (!email.equals("")) {
Permission permission = new Permission(); Permission permission = new Permission();
permission.setValue(email);
permission.setType("user");
permission.setRole("reader"); permission.setRole("reader");
drive.permissions().insert(driveId, permission).execute(); permission.setType("user");
permission.setValue(email);
drive.permissions().insert(file.getId(), permission).execute();
} }
} }
} }
@@ -214,8 +214,9 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask {
} }
Drive drive = SyncUtils.getDriveService(driveCredential); Drive drive = SyncUtils.getDriveService(driveCredential);
Permission permission = new Permission(); Permission permission = new Permission();
permission.setType("anyone");
permission.setRole("reader"); permission.setRole("reader");
permission.setType("anyone");
permission.setValue("");
drive.permissions().insert(tableId, permission).execute(); drive.permissions().insert(tableId, permission).execute();
return true; return true;
} }
@@ -90,7 +90,8 @@ public abstract class AbstractSendActivity extends Activity {
* *
* @param success true if the AsyncTask is successful * @param success true if the AsyncTask is successful
*/ */
public void onAsyncTaskCompleted(boolean success) { public void onAsyncTaskCompleted(boolean success, String shareUrl) {
sendRequest.setShareUrl(shareUrl);
startNextActivity(success, false); startNextActivity(success, false);
} }
@@ -35,6 +35,11 @@ public abstract class AbstractSendAsyncTask extends AsyncTask<Void, Integer, Boo
*/ */
private boolean success; private boolean success;
/**
* The share url from the AsyncTask.
*/
protected String shareUrl;
/** /**
* True if the AsyncTask has completed. * True if the AsyncTask has completed.
*/ */
@@ -53,6 +58,7 @@ public abstract class AbstractSendAsyncTask extends AsyncTask<Void, Integer, Boo
public AbstractSendAsyncTask(AbstractSendActivity activity) { public AbstractSendAsyncTask(AbstractSendActivity activity) {
this.activity = activity; this.activity = activity;
success = false; success = false;
shareUrl = null;
completed = false; completed = false;
canRetry = true; canRetry = true;
} }
@@ -65,7 +71,7 @@ public abstract class AbstractSendAsyncTask extends AsyncTask<Void, Integer, Boo
public void setActivity(AbstractSendActivity activity) { public void setActivity(AbstractSendActivity activity) {
this.activity = activity; this.activity = activity;
if (completed && activity != null) { if (completed && activity != null) {
activity.onAsyncTaskCompleted(success); activity.onAsyncTaskCompleted(success, shareUrl);
} }
} }
@@ -98,7 +104,7 @@ public abstract class AbstractSendAsyncTask extends AsyncTask<Void, Integer, Boo
saveResult(); saveResult();
} }
if (activity != null) { if (activity != null) {
activity.onAsyncTaskCompleted(success); activity.onAsyncTaskCompleted(success, shareUrl);
} }
} }
@@ -36,9 +36,10 @@ public class SendRequest implements Parcelable {
private boolean sendFusionTables = false; private boolean sendFusionTables = false;
private boolean sendSpreadsheets = false; private boolean sendSpreadsheets = false;
private boolean driveEnableSync = false; private boolean driveEnableSync = false; // to enable Drive sync
private boolean driveShare = false; private boolean driveShare = false; // to enable Drive share
private String driveShareEmails = null; private String driveShareEmails = null; // share with emails
private boolean driveSharePublic = false; // share as public
private Account account = null; private Account account = null;
@@ -46,6 +47,7 @@ public class SendRequest implements Parcelable {
private boolean mapsSuccess = false; private boolean mapsSuccess = false;
private boolean spreadsheetsSuccess = false; private boolean spreadsheetsSuccess = false;
private boolean fusionTablesSuccess = false; private boolean fusionTablesSuccess = false;
private String shareUrl = null;
/** /**
* Creates a new send request. * Creates a new send request.
@@ -116,6 +118,14 @@ public class SendRequest implements Parcelable {
this.driveShareEmails = driveShareEmails; this.driveShareEmails = driveShareEmails;
} }
public boolean isDriveSharePublic() {
return driveSharePublic;
}
public void setDriveSharePublic(boolean driveSharePublic) {
this.driveSharePublic = driveSharePublic;
}
public Account getAccount() { public Account getAccount() {
return account; return account;
} }
@@ -156,6 +166,14 @@ public class SendRequest implements Parcelable {
this.spreadsheetsSuccess = spreadsheetsSuccess; this.spreadsheetsSuccess = spreadsheetsSuccess;
} }
public String getShareUrl() {
return shareUrl;
}
public void setShareUrl(String shareUrl) {
this.shareUrl = shareUrl;
}
private SendRequest(Parcel in) { private SendRequest(Parcel in) {
trackId = in.readLong(); trackId = in.readLong();
sendDrive = in.readByte() == 1; sendDrive = in.readByte() == 1;
@@ -165,11 +183,13 @@ public class SendRequest implements Parcelable {
driveEnableSync = in.readByte() == 1; driveEnableSync = in.readByte() == 1;
driveShare = in.readByte() == 1; driveShare = in.readByte() == 1;
driveShareEmails = in.readString(); driveShareEmails = in.readString();
driveSharePublic = in.readByte() == 1;
account = in.readParcelable(null); account = in.readParcelable(null);
driveSuccess = in.readByte() == 1; driveSuccess = in.readByte() == 1;
mapsSuccess = in.readByte() == 1; mapsSuccess = in.readByte() == 1;
fusionTablesSuccess = in.readByte() == 1; fusionTablesSuccess = in.readByte() == 1;
spreadsheetsSuccess = in.readByte() == 1; spreadsheetsSuccess = in.readByte() == 1;
shareUrl = in.readString();
} }
@Override @Override
@@ -187,11 +207,13 @@ public class SendRequest implements Parcelable {
out.writeByte((byte) (driveEnableSync ? 1 : 0)); out.writeByte((byte) (driveEnableSync ? 1 : 0));
out.writeByte((byte) (driveShare ? 1 : 0)); out.writeByte((byte) (driveShare ? 1 : 0));
out.writeString(driveShareEmails); out.writeString(driveShareEmails);
out.writeByte((byte) (driveSharePublic ? 1 : 0));
out.writeParcelable(account, 0); out.writeParcelable(account, 0);
out.writeByte((byte) (driveSuccess ? 1 : 0)); out.writeByte((byte) (driveSuccess ? 1 : 0));
out.writeByte((byte) (mapsSuccess ? 1 : 0)); out.writeByte((byte) (mapsSuccess ? 1 : 0));
out.writeByte((byte) (fusionTablesSuccess ? 1 : 0)); out.writeByte((byte) (fusionTablesSuccess ? 1 : 0));
out.writeByte((byte) (spreadsheetsSuccess ? 1 : 0)); out.writeByte((byte) (spreadsheetsSuccess ? 1 : 0));
out.writeString(shareUrl);
} }
public static final Parcelable.Creator<SendRequest> public static final Parcelable.Creator<SendRequest>
@@ -60,7 +60,7 @@ public class UploadResultActivity extends FragmentActivity implements ChooseActi
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
sendRequest = getIntent().getParcelableExtra(SendRequest.SEND_REQUEST_KEY); sendRequest = getIntent().getParcelableExtra(SendRequest.SEND_REQUEST_KEY);
shareUrl = null; shareUrl = sendRequest.getShareUrl();
Track track = MyTracksProviderUtils.Factory.get(this).getTrack(sendRequest.getTrackId()); Track track = MyTracksProviderUtils.Factory.get(this).getTrack(sendRequest.getTrackId());
if (track == null) { if (track == null) {
@@ -69,6 +69,12 @@ public class UploadResultActivity extends FragmentActivity implements ChooseActi
return; return;
} }
if (sendRequest.isDriveSuccess() && shareUrl != null) {
new ChooseActivityDialogFragment().show(
getSupportFragmentManager(), ChooseActivityDialogFragment.CHOOSE_ACTIVITY_DIALOG_TAG);
return;
}
if (sendRequest.isSendMaps() && sendRequest.isMapsSuccess()) { if (sendRequest.isSendMaps() && sendRequest.isMapsSuccess()) {
shareUrl = SendMapsUtils.getMapUrl(track); shareUrl = SendMapsUtils.getMapUrl(track);
} }
@@ -262,9 +262,9 @@ public class SyncUtils {
* @param myTracksProviderUtils the myTracksProviderUtils * @param myTracksProviderUtils the myTracksProviderUtils
* @param track the track * @param track the track
* @param canRetry true if can retry * @param canRetry true if can retry
* @return the added drive file id or null. * @return the added drive file or null.
*/ */
public static String insertDriveFile(Drive drive, String folderId, Context context, public static File insertDriveFile(Drive drive, String folderId, Context context,
MyTracksProviderUtils myTracksProviderUtils, Track track, boolean canRetry) MyTracksProviderUtils myTracksProviderUtils, Track track, boolean canRetry)
throws IOException { throws IOException {
java.io.File file = getFile(context, myTracksProviderUtils, track); java.io.File file = getFile(context, myTracksProviderUtils, track);
@@ -281,7 +281,7 @@ public class SyncUtils {
return null; return null;
} }
SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, uploadedFile); SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, uploadedFile);
return uploadedFile.getId(); return uploadedFile;
} finally { } finally {
file.delete(); file.delete();
} }
@@ -32,6 +32,7 @@ public class SendRequestTest extends AndroidTestCase {
private final static String ACCOUNTNAME = "testAccount1"; private final static String ACCOUNTNAME = "testAccount1";
private final static String ACCOUNTYPE = "testType1"; private final static String ACCOUNTYPE = "testType1";
private final static String DRIVE_SHARE_EMAILS = "foo@foo.com"; private final static String DRIVE_SHARE_EMAILS = "foo@foo.com";
private final static String SHARE_URL = "url@url.com";
@Override @Override
protected void setUp() throws Exception { protected void setUp() throws Exception {
@@ -128,12 +129,14 @@ public class SendRequestTest extends AndroidTestCase {
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeByte((byte) 1); parcel.writeByte((byte) 1);
parcel.writeString(DRIVE_SHARE_EMAILS); 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.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(SHARE_URL);
parcel.setDataPosition(0); parcel.setDataPosition(0);
sendRequest = SendRequest.CREATOR.createFromParcel(parcel); sendRequest = SendRequest.CREATOR.createFromParcel(parcel);
assertEquals(2, sendRequest.getTrackId()); assertEquals(2, sendRequest.getTrackId());
@@ -144,11 +147,13 @@ public class SendRequestTest extends AndroidTestCase {
assertTrue(sendRequest.isDriveEnableSync()); assertTrue(sendRequest.isDriveEnableSync());
assertTrue(sendRequest.isDriveShare()); assertTrue(sendRequest.isDriveShare());
assertEquals(DRIVE_SHARE_EMAILS, sendRequest.getDriveShareEmails()); assertEquals(DRIVE_SHARE_EMAILS, sendRequest.getDriveShareEmails());
assertTrue(sendRequest.isDriveSharePublic());
assertEquals(account, sendRequest.getAccount()); assertEquals(account, sendRequest.getAccount());
assertTrue(sendRequest.isDriveSuccess()); assertTrue(sendRequest.isDriveSuccess());
assertTrue(sendRequest.isMapsSuccess()); assertTrue(sendRequest.isMapsSuccess());
assertTrue(sendRequest.isFusionTablesSuccess()); assertTrue(sendRequest.isFusionTablesSuccess());
assertTrue(sendRequest.isSpreadsheetsSuccess()); assertTrue(sendRequest.isSpreadsheetsSuccess());
assertEquals(SHARE_URL, sendRequest.getShareUrl());
} }
/** /**
@@ -165,12 +170,14 @@ public class SendRequestTest extends AndroidTestCase {
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);
Account account = new Account(ACCOUNTNAME, ACCOUNTYPE); Account account = new Account(ACCOUNTNAME, ACCOUNTYPE);
parcel.writeParcelable(account, 0); parcel.writeParcelable(account, 0);
parcel.writeByte((byte) 0); parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0); parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0); parcel.writeByte((byte) 0);
parcel.writeByte((byte) 0); parcel.writeByte((byte) 0);
parcel.writeString(null);
parcel.setDataPosition(0); parcel.setDataPosition(0);
sendRequest = SendRequest.CREATOR.createFromParcel(parcel); sendRequest = SendRequest.CREATOR.createFromParcel(parcel);
assertEquals(4, sendRequest.getTrackId()); assertEquals(4, sendRequest.getTrackId());
@@ -181,11 +188,13 @@ public class SendRequestTest extends AndroidTestCase {
assertFalse(sendRequest.isDriveEnableSync()); assertFalse(sendRequest.isDriveEnableSync());
assertFalse(sendRequest.isDriveShare()); assertFalse(sendRequest.isDriveShare());
assertNull(sendRequest.getDriveShareEmails()); assertNull(sendRequest.getDriveShareEmails());
assertFalse(sendRequest.isDriveSharePublic());
assertEquals(account, sendRequest.getAccount()); assertEquals(account, sendRequest.getAccount());
assertFalse(sendRequest.isDriveSuccess()); assertFalse(sendRequest.isDriveSuccess());
assertFalse(sendRequest.isMapsSuccess()); assertFalse(sendRequest.isMapsSuccess());
assertFalse(sendRequest.isFusionTablesSuccess()); assertFalse(sendRequest.isFusionTablesSuccess());
assertFalse(sendRequest.isSpreadsheetsSuccess()); assertFalse(sendRequest.isSpreadsheetsSuccess());
assertNull(sendRequest.getShareUrl());
} }
/** /**
@@ -205,11 +214,13 @@ public class SendRequestTest extends AndroidTestCase {
boolean driveEnableSync = parcel.readByte() == 1; boolean driveEnableSync = parcel.readByte() == 1;
boolean driveShare = parcel.readByte() == 1; boolean driveShare = parcel.readByte() == 1;
String dirveShareEmails = parcel.readString(); String dirveShareEmails = parcel.readString();
boolean driveSharePublic = parcel.readByte() == 1;
Parcelable account = parcel.readParcelable(null); Parcelable account = parcel.readParcelable(null);
boolean driveSuccess = parcel.readByte() == 1; boolean driveSuccess = parcel.readByte() == 1;
boolean mapsSuccess = parcel.readByte() == 1; boolean mapsSuccess = parcel.readByte() == 1;
boolean fusionTablesSuccess = parcel.readByte() == 1; boolean fusionTablesSuccess = parcel.readByte() == 1;
boolean spreadsheetsSuccess = parcel.readByte() == 1; boolean spreadsheetsSuccess = parcel.readByte() == 1;
String shareUrl = parcel.readString();
assertEquals(1, trackId); assertEquals(1, trackId);
assertFalse(sendDrive); assertFalse(sendDrive);
assertFalse(sendMaps); assertFalse(sendMaps);
@@ -218,11 +229,13 @@ public class SendRequestTest extends AndroidTestCase {
assertFalse(driveEnableSync); assertFalse(driveEnableSync);
assertFalse(driveShare); assertFalse(driveShare);
assertNull(dirveShareEmails); assertNull(dirveShareEmails);
assertFalse(driveSharePublic);
assertNull(account); assertNull(account);
assertFalse(driveSuccess); assertFalse(driveSuccess);
assertFalse(mapsSuccess); assertFalse(mapsSuccess);
assertFalse(fusionTablesSuccess); assertFalse(fusionTablesSuccess);
assertFalse(spreadsheetsSuccess); assertFalse(spreadsheetsSuccess);
assertNull(shareUrl);
} }
/** /**
@@ -237,12 +250,14 @@ public class SendRequestTest extends AndroidTestCase {
sendRequest.setDriveEnableSync(true); sendRequest.setDriveEnableSync(true);
sendRequest.setDriveShare(true); sendRequest.setDriveShare(true);
sendRequest.setDriveShareEmails(DRIVE_SHARE_EMAILS); sendRequest.setDriveShareEmails(DRIVE_SHARE_EMAILS);
sendRequest.setDriveSharePublic(true);
Account accountNew = new Account(ACCOUNTNAME + "2", ACCOUNTYPE + "2"); Account accountNew = new Account(ACCOUNTNAME + "2", ACCOUNTYPE + "2");
sendRequest.setAccount(accountNew); sendRequest.setAccount(accountNew);
sendRequest.setMapsSuccess(true); sendRequest.setMapsSuccess(true);
sendRequest.setDriveSuccess(true); sendRequest.setDriveSuccess(true);
sendRequest.setFusionTablesSuccess(true); sendRequest.setFusionTablesSuccess(true);
sendRequest.setSpreadsheetsSuccess(true); sendRequest.setSpreadsheetsSuccess(true);
sendRequest.setShareUrl(SHARE_URL);
Parcel parcel = Parcel.obtain(); Parcel parcel = Parcel.obtain();
parcel.setDataPosition(0); parcel.setDataPosition(0);
sendRequest.writeToParcel(parcel, 1); sendRequest.writeToParcel(parcel, 1);
@@ -255,11 +270,13 @@ public class SendRequestTest extends AndroidTestCase {
boolean driveEnableSync = parcel.readByte() == 1; boolean driveEnableSync = parcel.readByte() == 1;
boolean driveShare = parcel.readByte() == 1; boolean driveShare = parcel.readByte() == 1;
String driveShareEmails = parcel.readString(); String driveShareEmails = parcel.readString();
boolean driveSharePublic = parcel.readByte() == 1;
Parcelable account = parcel.readParcelable(null); Parcelable account = parcel.readParcelable(null);
boolean driveSuccess = parcel.readByte() == 1; boolean driveSuccess = parcel.readByte() == 1;
boolean mapsSuccess = parcel.readByte() == 1; boolean mapsSuccess = parcel.readByte() == 1;
boolean fusionTablesSuccess = parcel.readByte() == 1; boolean fusionTablesSuccess = parcel.readByte() == 1;
boolean spreadsheetsSuccess = parcel.readByte() == 1; boolean spreadsheetsSuccess = parcel.readByte() == 1;
String shareUrl = parcel.readString();
assertEquals(4, trackId); assertEquals(4, trackId);
assertTrue(sendDrive); assertTrue(sendDrive);
assertTrue(sendMaps); assertTrue(sendMaps);
@@ -268,10 +285,12 @@ public class SendRequestTest extends AndroidTestCase {
assertTrue(driveEnableSync); assertTrue(driveEnableSync);
assertTrue(driveShare); assertTrue(driveShare);
assertEquals(DRIVE_SHARE_EMAILS, driveShareEmails); assertEquals(DRIVE_SHARE_EMAILS, driveShareEmails);
assertTrue(driveSharePublic);
assertEquals(accountNew, account); assertEquals(accountNew, account);
assertTrue(driveSuccess); assertTrue(driveSuccess);
assertTrue(mapsSuccess); assertTrue(mapsSuccess);
assertTrue(fusionTablesSuccess); assertTrue(fusionTablesSuccess);
assertTrue(spreadsheetsSuccess); assertTrue(spreadsheetsSuccess);
assertEquals(SHARE_URL, shareUrl);
} }
} }