- * isSendDrive and isDriveShare -> show {@link AddEmailsDialogFragment} + * isSendDrive and isDriveShare -> show {@link ShareTrackDialogFragment} *
* isSendDrive -> start {@link SendDriveActivity} *
- * isSendMaps and isMapShare -> show {@link ChooseActivityDialogFragment} - *
- * isSendMaps and isMapsExistingMap -> start {@link ChooseMapActivity} - *
- * isSendMaps and !isMapsExistingMap -> {@link SendMapsActivity} + * isSendMaps -> start {@link SendMapsActivity} *
* isSendFusionTables -> start {@link SendFusionTablesActivity} *
@@ -292,8 +286,8 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
SyncUtils.enableSync(sendRequest.getAccount());
return;
} else if (sendRequest.isDriveShare()) {
- AddEmailsDialogFragment.newInstance(sendRequest.getTrackId())
- .show(getSupportFragmentManager(), AddEmailsDialogFragment.ADD_EMAILS_DIALOG_TAG);
+ ShareTrackDialogFragment.newInstance(sendRequest.getTrackId())
+ .show(getSupportFragmentManager(), ShareTrackDialogFragment.SHARE_TRACK_DIALOG_TAG);
return;
} else {
next = SendDriveActivity.class;
@@ -344,7 +338,7 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
protected void confirmShare(long trackId) {
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
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);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java
index 06262ca8f..1dba7e249 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ChooseActivityDialogFragment.java
@@ -124,7 +124,7 @@ public class ChooseActivityDialogFragment extends DialogFragment {
caller.onChooseActivityDone(
activityInfo.applicationInfo.packageName, activityInfo.name);
}
- }).setTitle(R.string.share_track_picker_title).create();
+ }).setTitle(R.string.share_track_share_url_title).create();
}
@Override
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
similarity index 79%
rename from MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java
rename to MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
index a22734399..736dc2110 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/AddEmailsDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
@@ -30,64 +30,69 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
+import android.widget.CheckBox;
import android.widget.FilterQueryProvider;
import android.widget.MultiAutoCompleteTextView;
/**
- * A DialogFragment to add emails.
+ * A DialogFragment to share a track.
*
* @author Jimmy Shih
*/
-public class AddEmailsDialogFragment extends DialogFragment {
+public class ShareTrackDialogFragment extends DialogFragment {
/**
* Interface for caller of this dialog fragment.
*
* @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 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";
- public static AddEmailsDialogFragment newInstance(long trackId) {
+ public static ShareTrackDialogFragment newInstance(long trackId) {
Bundle bundle = new Bundle();
bundle.putLong(KEY_TRACK_ID, trackId);
- AddEmailsDialogFragment addPeopleDialogFragment = new AddEmailsDialogFragment();
- addPeopleDialogFragment.setArguments(bundle);
- return addPeopleDialogFragment;
+ ShareTrackDialogFragment shareleTrackDialogFragment = new ShareTrackDialogFragment();
+ shareleTrackDialogFragment.setArguments(bundle);
+ return shareleTrackDialogFragment;
}
- private AddEmailsCaller caller;
+ private ShareTrackCaller caller;
private FragmentActivity fragmentActivity;
private MultiAutoCompleteTextView multiAutoCompleteTextView;
-
+ private CheckBox checkBox;
+
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
- caller = (AddEmailsCaller) activity;
+ caller = (ShareTrackCaller) activity;
} catch (ClassCastException e) {
throw new ClassCastException(
- activity.toString() + " must implement " + AddEmailsCaller.class.getSimpleName());
+ activity.toString() + " must implement " + ShareTrackCaller.class.getSimpleName());
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
fragmentActivity = getActivity();
- View view = fragmentActivity.getLayoutInflater().inflate(R.layout.add_emails, null);
- multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(R.id.add_emails);
+ View view = fragmentActivity.getLayoutInflater().inflate(R.layout.share_track, null);
+
+ multiAutoCompleteTextView = (MultiAutoCompleteTextView) view.findViewById(
+ R.id.share_track_emails);
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
SimpleCursorAdapter adapter = new SimpleCursorAdapter(fragmentActivity,
@@ -109,15 +114,17 @@ public class AddEmailsDialogFragment extends DialogFragment {
});
multiAutoCompleteTextView.setAdapter(adapter);
+ checkBox = (CheckBox) view.findViewById(R.id.share_track_public);
+
return new AlertDialog.Builder(fragmentActivity).setNegativeButton(
R.string.generic_cancel, null)
.setPositiveButton(R.string.generic_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
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();
}
/**
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java
index 6db5dcb25..207683b2c 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveActivity.java
@@ -37,8 +37,8 @@ public class SendDriveActivity extends AbstractSendActivity {
@Override
protected AbstractSendAsyncTask createAsyncTask() {
- return new SendDriveAsyncTask(
- this, sendRequest.getTrackId(), sendRequest.getAccount(), sendRequest.getDriveShareEmails());
+ return new SendDriveAsyncTask(this, sendRequest.getTrackId(), sendRequest.getAccount(),
+ sendRequest.getDriveShareEmails(), sendRequest.isDriveSharePublic());
}
@Override
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java
index 5f0f9f262..2dde0638e 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/drive/SendDriveAsyncTask.java
@@ -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.model.File;
import com.google.api.services.drive.model.Permission;
+import com.google.api.services.drive.model.PermissionList;
import android.accounts.Account;
import android.content.Context;
@@ -44,10 +45,12 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
private final long trackId;
private final Account account;
private final String[] acl;
+ private final boolean isPublic;
private final Context context;
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);
this.trackId = trackId;
this.account = account;
@@ -56,7 +59,8 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
} else {
this.acl = null;
}
-
+ this.isPublic = isPublic;
+
context = activity.getApplicationContext();
myTracksProviderUtils = MyTracksProviderUtils.Factory.get(context);
}
@@ -91,18 +95,18 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
File driveFile = drive.files().get(driveId).execute();
if (SyncUtils.isValid(driveFile, folderId) && SyncUtils.updateDriveFile(
drive, driveFile, context, myTracksProviderUtils, track, false)) {
- addPermission(drive, driveId);
+ addPermission(drive, driveFile);
return true;
}
SyncUtils.updateTrackWithDriveFileInfo(myTracksProviderUtils, track, null);
}
- String id = SyncUtils.insertDriveFile(
+ File file = SyncUtils.insertDriveFile(
drive, folderId, context, myTracksProviderUtils, track, false);
- if (id == null) {
+ if (file == null) {
return false;
}
- addPermission(drive, id);
+ addPermission(drive, file);
return true;
} catch (UserRecoverableAuthException e) {
SendToGoogleUtils.sendNotification(
@@ -128,16 +132,38 @@ public class SendDriveAsyncTask extends AbstractSendAsyncTask {
* @param drive the drive
* @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) {
for (String email : acl) {
email = email.trim();
if (!email.equals("")) {
Permission permission = new Permission();
- permission.setValue(email);
- permission.setType("user");
permission.setRole("reader");
- drive.permissions().insert(driveId, permission).execute();
+ permission.setType("user");
+ permission.setValue(email);
+ drive.permissions().insert(file.getId(), permission).execute();
}
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java
index 7601f627a..b2d4998cd 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/fusiontables/SendFusionTablesAsyncTask.java
@@ -214,8 +214,9 @@ public class SendFusionTablesAsyncTask extends AbstractSendAsyncTask {
}
Drive drive = SyncUtils.getDriveService(driveCredential);
Permission permission = new Permission();
- permission.setType("anyone");
permission.setRole("reader");
+ permission.setType("anyone");
+ permission.setValue("");
drive.permissions().insert(tableId, permission).execute();
return true;
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java
index b21aee1d9..1c5d1b002 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendActivity.java
@@ -90,7 +90,8 @@ public abstract class AbstractSendActivity extends Activity {
*
* @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);
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java
index 11dab9c5c..2b69b269f 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/AbstractSendAsyncTask.java
@@ -20,7 +20,7 @@ import android.os.AsyncTask;
/**
* The abstract class for AsyncTasks sending a track to Google.
- *
+ *
* @author Jimmy Shih
*/
public abstract class AbstractSendAsyncTask extends AsyncTask