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
+1
View File
@@ -31,6 +31,7 @@ limitations under the License.
<string name="chart_show_speed_key">chartShowSpeed</string>
<string name="confirm_play_earth_key">confirmPlayEarth</string>
<string name="confirm_share_drive_key">confirmShareDrive</string>
<string name="confirm_share_file_key">confirmShareFile</string>
<string name="confirm_share_maps_key">confirmShareMaps</string>
<string name="default_activity_key">defaultActivity</string>
<string name="default_map_public_key">defaultMapPublic</string>
+11
View File
@@ -2038,6 +2038,13 @@ limitations under the License.
share via Google Drive.">
Via Google Drive
</string>
<string name="settings_sharing_share_track_file"
translation_description="In the 'Sharing' settings, the option in the 'Share track' setting to
share as a file.
%1$s: file format. E.g., 'GPX'.">
As %1$s file
</string>
<string name="settings_sharing_share_track_maps"
translation_description="In the 'Sharing' settings, the option in the 'Share track' setting to
share via Google Maps url.">
@@ -2099,6 +2106,10 @@ limitations under the License.
This will upload your track to Google Drive so you can share the file with friends. The file
will be private and only those you have shared with will have access.
</string>
<string name="share_track_file_confirm_message"
translation_description="The confirmation message when sharing a track as a file.">
This will save your track to external storage so you can share the file.
</string>
<string name="share_track_maps_confirm_message"
translation_description="The confirmation message when sharing a track via Google Maps with
friends.
@@ -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 = "";