Add option to share as a file.

This commit is contained in:
Jimmy Shih
2013-04-18 15:50:51 -07:00
parent c38ee02d4b
commit c21bfd84c1
6 changed files with 104 additions and 52 deletions
@@ -27,6 +27,8 @@ import com.google.android.apps.mytracks.fragments.ChooseActivityDialogFragment.C
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDialogFragment.ConfirmCaller;
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.TrackFileFormat;
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.maps.ChooseMapActivity;
@@ -52,6 +54,7 @@ import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.widget.Toast;
@@ -338,36 +341,63 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
protected void confirmShare(long trackId) {
String shareTrack = PreferencesUtils.getString(
this, R.string.share_track_key, PreferencesUtils.SHARE_TRACK_DEFAULT);
if (shareTrack.equals(PreferencesUtils.SHARE_TRACK_DEFAULT)) {
String driveValue = getString(R.string.settings_sharing_share_track_drive_value);
String mapsValue = getString(R.string.settings_sharing_share_track_maps_value);
if (shareTrack.equals(driveValue)) {
ConfirmDialogFragment.newInstance(R.string.confirm_share_drive_key,
PreferencesUtils.CONFIRM_SHARE_DRIVE_DEFAULT,
getString(R.string.share_track_drive_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
} else {
} else if (shareTrack.equals(mapsValue)) {
ConfirmDialogFragment.newInstance(R.string.confirm_share_maps_key,
PreferencesUtils.CONFIRM_SHARE_MAPS_DEFAULT, StringUtils.getHtml(this,
R.string.share_track_maps_confirm_message, R.string.maps_public_unlisted_url),
PreferencesUtils.CONFIRM_SHARE_MAPS_DEFAULT, StringUtils.getHtml(
this, R.string.share_track_maps_confirm_message, R.string.maps_public_unlisted_url),
trackId).show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
}
} else {
ConfirmDialogFragment.newInstance(R.string.confirm_share_file_key,
PreferencesUtils.CONFIRM_SHARE_FILE_DEFAULT,
getString(R.string.share_track_file_confirm_message), trackId)
.show(getSupportFragmentManager(), ConfirmDialogFragment.CONFIRM_DIALOG_TAG);
}
}
@Override
public void onConfirmDone(int confirmId, long trackId) {
SendRequest newRequest;
switch (confirmId) {
case R.string.confirm_share_drive_key:
AnalyticsUtils.sendPageViews(this, "/action/share_drive");
SendRequest sendRequest = new SendRequest(trackId);
sendRequest.setSendDrive(true);
sendRequest.setDriveShare(true);
sendToGoogle(sendRequest);
newRequest = new SendRequest(trackId);
newRequest.setSendDrive(true);
newRequest.setDriveShare(true);
sendToGoogle(newRequest);
break;
case R.string.confirm_share_maps_key:
AnalyticsUtils.sendPageViews(this, "/action/share_maps");
sendRequest = new SendRequest(trackId);
sendRequest.setSendMaps(true);
sendRequest.setMapsShare(true);
sendToGoogle(sendRequest);
break;
newRequest = new SendRequest(trackId);
newRequest.setSendMaps(true);
newRequest.setMapsShare(true);
sendToGoogle(newRequest);
break;
case R.string.confirm_share_file_key:
String shareTrack = PreferencesUtils.getString(
this, R.string.share_track_key, PreferencesUtils.SHARE_TRACK_DEFAULT);
TrackFileFormat trackFileFormat;
if (shareTrack.equals(TrackFileFormat.GPX.name())) {
trackFileFormat = TrackFileFormat.GPX;
} else if (shareTrack.equals(TrackFileFormat.KML.name())) {
trackFileFormat = TrackFileFormat.KML;
} else if (shareTrack.equals(TrackFileFormat.CSV.name())) {
trackFileFormat = TrackFileFormat.CSV;
} else {
trackFileFormat = TrackFileFormat.TCX;
}
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_ID, trackId)
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat)
.putExtra(SaveActivity.EXTRA_SHARE_TRACK, true);
startActivity(intent);
break;
default:
}
}
@@ -44,6 +44,7 @@ public class SaveActivity extends Activity {
public static final String EXTRA_TRACK_FILE_FORMAT = "track_file_format";
public static final String EXTRA_TRACK_ID = "track_id";
public static final String EXTRA_PLAY_TRACK = "play_track";
public static final String EXTRA_SHARE_TRACK = "share_track";
public static final String GOOGLE_EARTH_KML_MIME_TYPE = "application/vnd.google-earth.kml+xml";
public static final String GOOGLE_EARTH_PACKAGE = "com.google.earth";
@@ -59,6 +60,7 @@ public class SaveActivity extends Activity {
private TrackFileFormat trackFileFormat;
private long trackId;
private boolean playTrack;
private boolean shareTrack;
private String directoryName;
private SaveAsyncTask saveAsyncTask;
@@ -70,9 +72,6 @@ public class SaveActivity extends Activity {
// the number of tracks to save
private int totalCount;
// the last successfully saved path
private String savedPath;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -81,6 +80,7 @@ public class SaveActivity extends Activity {
trackFileFormat = intent.getParcelableExtra(EXTRA_TRACK_FILE_FORMAT);
trackId = intent.getLongExtra(EXTRA_TRACK_ID, -1L);
playTrack = intent.getBooleanExtra(EXTRA_PLAY_TRACK, false);
shareTrack = intent.getBooleanExtra(EXTRA_SHARE_TRACK, false);
if (!FileUtils.isExternalStorageWriteable()) {
Toast.makeText(this, R.string.external_storage_not_writable, Toast.LENGTH_LONG).show();
@@ -88,7 +88,7 @@ public class SaveActivity extends Activity {
return;
}
directoryName = playTrack ? FileUtils.buildExternalDirectoryPath(
directoryName = playTrack || shareTrack ? FileUtils.buildExternalDirectoryPath(
trackFileFormat.getExtension(), "tmp")
: FileUtils.buildExternalDirectoryPath(trackFileFormat.getExtension());
@@ -141,7 +141,7 @@ public class SaveActivity extends Activity {
success = false;
message = getString(R.string.save_error, successCount, totalTracks, directoryName);
}
AlertDialog.Builder builder = new AlertDialog.Builder(this).setCancelable(true).setIcon(
return new AlertDialog.Builder(this).setCancelable(true).setIcon(
success ? android.R.drawable.ic_dialog_info : android.R.drawable.ic_dialog_alert)
.setMessage(message).setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
@@ -155,22 +155,8 @@ public class SaveActivity extends Activity {
dialog.dismiss();
finish();
}
}).setTitle(success ? R.string.generic_success_title : R.string.generic_error_title);
if (success && trackId != -1L && !playTrack && savedPath != null) {
builder.setNegativeButton(
R.string.share_track_share_file, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = IntentUtils.newShareFileIntent(
SaveActivity.this, trackId, savedPath, trackFileFormat);
startActivity(
Intent.createChooser(intent, getString(R.string.share_track_picker_title)));
finish();
}
});
}
return builder.create();
}).setTitle(success ? R.string.generic_success_title : R.string.generic_error_title)
.create();
default:
return null;
}
@@ -181,24 +167,31 @@ public class SaveActivity extends Activity {
*
* @param aSuccessCount the number of tracks successfully saved
* @param aTotalCount the number of tracks to save
* @param aSavedPath the last successfully saved path
* @param savedPath the last successfully saved path
*/
public void onAsyncTaskCompleted(int aSuccessCount, int aTotalCount, String aSavedPath) {
public void onAsyncTaskCompleted(int aSuccessCount, int aTotalCount, String savedPath) {
successCount = aSuccessCount;
totalCount = aTotalCount;
savedPath = aSavedPath;
removeDialog(DIALOG_PROGRESS_ID);
if (successCount == 1 && totalCount == 1 && playTrack && savedPath != null) {
Intent intent = new Intent().addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID)
.setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS)
.setDataAndType(Uri.fromFile(new File(savedPath)), GOOGLE_EARTH_KML_MIME_TYPE);
startActivity(intent);
finish();
} else {
showDialog(DIALOG_RESULT_ID);
if (successCount == 1 && totalCount == 1 && savedPath != null) {
if (playTrack) {
Intent intent = new Intent().addFlags(
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(GOOGLE_EARTH_TOUR_FEATURE_ID, KmlTrackWriter.TOUR_FEATURE_ID)
.setClassName(GOOGLE_EARTH_PACKAGE, GOOGLE_EARTH_CLASS)
.setDataAndType(Uri.fromFile(new File(savedPath)), GOOGLE_EARTH_KML_MIME_TYPE);
startActivity(intent);
finish();
return;
} else if (shareTrack) {
Intent intent = IntentUtils.newShareFileIntent(this, trackId, savedPath, trackFileFormat);
startActivity(
Intent.createChooser(intent, getString(R.string.share_track_picker_title)));
finish();
return;
}
}
showDialog(DIALOG_RESULT_ID);
}
/**
@@ -28,6 +28,9 @@ import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
/**
* An activity for accessing the sharing settings.
*
@@ -45,14 +48,27 @@ public class SharingSettingsActivity extends AbstractSettingsActivity {
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
addPreferencesFromResource(R.xml.sharing_settings);
shareTrackListPreference = (ListPreference) findPreference(getString(R.string.share_track_key));
String value = PreferencesUtils.getString(
this, R.string.share_track_key, PreferencesUtils.SHARE_TRACK_DEFAULT);
String[] values = getResources().getStringArray(R.array.share_track_values);
String[] options = getResources().getStringArray(R.array.share_track_options);
String fileTypes[] = getResources().getStringArray(R.array.file_types);
ArrayList<String> shareTrackValues = new ArrayList<String>(
Arrays.asList(getResources().getStringArray(R.array.share_track_values)));
for (String fileType : fileTypes) {
shareTrackValues.add(fileType);
}
String[] values = shareTrackValues.toArray(new String[shareTrackValues.size()]);
ArrayList<String> shareTrackOptions = new ArrayList<String>(
Arrays.asList(getResources().getStringArray(R.array.share_track_options)));
for (String fileType : fileTypes) {
shareTrackOptions.add(getString(R.string.settings_sharing_share_track_file, fileType));
}
String[] options = shareTrackOptions.toArray(new String[shareTrackOptions.size()]);
configureListPreference(shareTrackListPreference, options, options, values, value, null);
allowAccessCheckBoxPreference = (CheckBoxPreference) findPreference(
getString(R.string.allow_access_key));
@@ -52,6 +52,7 @@ public class PreferencesUtils {
public static final boolean CONFIRM_PLAY_EARTH_DEFAULT = true;
public static final boolean CONFIRM_SHARE_DRIVE_DEFAULT = true;
public static final boolean CONFIRM_SHARE_FILE_DEFAULT = true;
public static final boolean CONFIRM_SHARE_MAPS_DEFAULT = true;
public static final String DEFAULT_ACTIVITY_DEFAULT = "";