diff --git a/MyTracks/res/layout/export.xml b/MyTracks/res/layout/export.xml
index 1692139ac..a352c964d 100644
--- a/MyTracks/res/layout/export.xml
+++ b/MyTracks/res/layout/export.xml
@@ -16,19 +16,15 @@ limitations under the License.
-->
-
-
-
+
@@ -41,10 +37,6 @@ limitations under the License.
android:text="@string/export_google_maps_unlisted"
style="@style/TextMedium" />
-
@@ -57,14 +49,6 @@ limitations under the License.
android:text="@string/export_google_fusion_tables_private"
style="@style/TextMedium" />
-
-
@@ -81,5 +65,10 @@ limitations under the License.
android:id="@+id/export_external_storage_tcx"
style="@style/TextMedium" />
-
+
+
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java
index b1332a6fb..78f9fef38 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/AbstractSendToGoogleActivity.java
@@ -22,6 +22,7 @@ import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmDeleteDialogFragment.ConfirmDeleteCaller;
import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment;
import com.google.android.apps.mytracks.fragments.ConfirmSyncDialogFragment.ConfirmSyncCaller;
+import com.google.android.apps.mytracks.fragments.ExportDialogFragment.ExportType;
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;
@@ -158,20 +159,45 @@ public abstract class AbstractSendToGoogleActivity extends AbstractMyTracksActiv
*/
protected void shareTrack(long trackId) {
AnalyticsUtils.sendPageViews(this, AnalyticsUtils.ACTION_SHARE_DRIVE);
- sendRequest = new SendRequest(trackId);
- sendRequest.setSendDrive(true);
- ShareTrackDialogFragment.newInstance(sendRequest.getTrackId())
+ ShareTrackDialogFragment.newInstance(trackId)
.show(getSupportFragmentManager(), ShareTrackDialogFragment.SHARE_TRACK_DIALOG_TAG);
}
@Override
- public void onShareTrackDone(boolean makePublic, String emails, Account account) {
+ public void onShareTrackDone(long trackId, boolean makePublic, String emails, Account account) {
+ sendRequest = new SendRequest(trackId);
+ sendRequest.setSendDrive(true);
sendRequest.setDriveSharePublic(makePublic);
sendRequest.setDriveShareEmails(emails);
sendRequest.setAccount(account);
onConfirmSyncDone(true);
}
+ protected void exportTrackToGoogle(long trackId, ExportType exportType, Account account) {
+ sendRequest = new SendRequest(trackId);
+ String pageView;
+ switch (exportType) {
+ case GOOGLE_DRIVE:
+ pageView = AnalyticsUtils.ACTION_EXPORT_DRIVE;
+ sendRequest.setSendDrive(true);
+ break;
+ case GOOGLE_MAPS:
+ pageView = AnalyticsUtils.ACTION_EXPORT_MAPS;
+ sendRequest.setSendMaps(true);
+ break;
+ case GOOGLE_FUSION_TABLES:
+ pageView = AnalyticsUtils.ACTION_EXPORT_FUSION_TABLES;
+ sendRequest.setSendFusionTables(true);
+ break;
+ default:
+ pageView = AnalyticsUtils.ACTION_EXPORT_SPREADSHEETS;
+ sendRequest.setSendSpreadsheets(true);
+ }
+ AnalyticsUtils.sendPageViews(this, pageView);
+ sendRequest.setAccount(account);
+ onConfirmSyncDone(true);
+ }
+
/**
* Sends a request to Google.
*
diff --git a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
index 47a6aec37..5c05de724 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/TrackDetailActivity.java
@@ -35,7 +35,6 @@ import com.google.android.apps.mytracks.fragments.PlayMultipleDialogFragment.Pla
import com.google.android.apps.mytracks.fragments.StatsFragment;
import com.google.android.apps.mytracks.io.file.TrackFileFormat;
import com.google.android.apps.mytracks.io.file.exporter.SaveActivity;
-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;
import com.google.android.apps.mytracks.util.AnalyticsUtils;
@@ -51,6 +50,7 @@ import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtil
import com.google.android.apps.mytracks.util.TrackUtils;
import com.google.android.maps.mytracks.R;
+import android.accounts.Account;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -486,36 +486,17 @@ public class TrackDetailActivity extends AbstractSendToGoogleActivity
}
@Override
- public void onExportDone(ExportType exportType, TrackFileFormat trackFileFormat) {
+ public void onExportDone(
+ ExportType exportType, TrackFileFormat trackFileFormat, Account account) {
if (exportType == ExportType.EXTERNAL_STORAGE) {
- AnalyticsUtils.sendPageViews(this,
- AnalyticsUtils.ACTION_EXPORT_PREFIX + trackFileFormat.getExtension());
+ AnalyticsUtils.sendPageViews(
+ this, AnalyticsUtils.ACTION_EXPORT_PREFIX + trackFileFormat.getExtension());
Intent intent = IntentUtils.newIntent(this, SaveActivity.class)
.putExtra(SaveActivity.EXTRA_TRACK_IDS, new long[] { trackId })
.putExtra(SaveActivity.EXTRA_TRACK_FILE_FORMAT, (Parcelable) trackFileFormat);
startActivity(intent);
} else {
- SendRequest sendRequest = new SendRequest(trackId);
- String pageView;
- switch (exportType) {
- case GOOGLE_DRIVE:
- pageView = AnalyticsUtils.ACTION_EXPORT_DRIVE;
- sendRequest.setSendDrive(true);
- break;
- case GOOGLE_MAPS:
- pageView = AnalyticsUtils.ACTION_EXPORT_MAPS;
- sendRequest.setSendMaps(true);
- break;
- case GOOGLE_FUSION_TABLES:
- pageView = AnalyticsUtils.ACTION_EXPORT_FUSION_TABLES;
- sendRequest.setSendFusionTables(true);
- break;
- default:
- pageView = AnalyticsUtils.ACTION_EXPORT_SPREADSHEETS;
- sendRequest.setSendSpreadsheets(true);
- }
- AnalyticsUtils.sendPageViews(this, pageView);
- sendToGoogle(sendRequest);
+ exportTrackToGoogle(trackId, exportType, account);
}
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java
index 3354b13f2..25e0096fd 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ExportDialogFragment.java
@@ -16,11 +16,15 @@
package com.google.android.apps.mytracks.fragments;
+import com.google.android.apps.mytracks.Constants;
import com.google.android.apps.mytracks.io.file.TrackFileFormat;
+import com.google.android.apps.mytracks.util.AccountUtils;
import com.google.android.apps.mytracks.util.FileUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
+import android.accounts.Account;
+import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -28,9 +32,13 @@ import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
import android.widget.RadioButton;
import android.widget.RadioGroup;
-import android.widget.RadioGroup.OnCheckedChangeListener;
+import android.widget.Spinner;
+
+import java.util.ArrayList;
/**
* A DialogFragment to export a track.
@@ -45,7 +53,16 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
* @author Jimmy Shih
*/
public enum ExportType {
- GOOGLE_DRIVE, GOOGLE_MAPS, GOOGLE_FUSION_TABLES, GOOGLE_SPREADSHEET, EXTERNAL_STORAGE
+ GOOGLE_DRIVE(R.string.export_google_drive),
+ GOOGLE_MAPS(R.string.export_google_maps),
+ GOOGLE_FUSION_TABLES(R.string.export_google_fusion_tables),
+ GOOGLE_SPREADSHEET(R.string.export_google_spreadsheets),
+ EXTERNAL_STORAGE(R.string.export_external_storage);
+ final int resId;
+
+ ExportType(int resId) {
+ this.resId = resId;
+ }
}
/**
@@ -57,8 +74,13 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
/**
* Called when export is done.
+ *
+ * @param exportType the export type
+ * @param trackFileFormat the track file format
+ * @param account the account
*/
- public void onExportDone(ExportType exportType, TrackFileFormat trackFileFormat);
+ public void onExportDone(
+ ExportType exportType, TrackFileFormat trackFileFormat, Account account);
}
public static final String EXPORT_DIALOG_TAG = "export";
@@ -75,10 +97,15 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
}
private ExportCaller caller;
- private RadioGroup exportTypeOptions;
+ private Account[] accounts;
+ private ArrayList exportTypeOptionsList;
+
+ // UI elements
+ private Spinner exportTypeOptions;
private RadioGroup exportGoogleMapsOptions;
private RadioGroup exportGoogleFusionTablesOptions;
private RadioGroup exportExternalStorageOptions;
+ private Spinner accountSpinner;
@Override
public void onAttach(Activity activity) {
@@ -94,48 +121,28 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
@Override
protected Dialog createDialog() {
FragmentActivity fragmentActivity = getActivity();
- boolean hideDrive = getArguments().getBoolean(KEY_HIDE_DRIVE);
- ExportType exportType = ExportType.valueOf(PreferencesUtils.getString(
- fragmentActivity, R.string.export_type_key, PreferencesUtils.EXPORT_TYPE_DEFAULT));
-
- if (hideDrive && exportType == ExportType.GOOGLE_DRIVE) {
- exportType = ExportType.GOOGLE_MAPS;
- }
+ accounts = AccountManager.get(fragmentActivity).getAccountsByType(Constants.ACCOUNT_TYPE);
// Get views
View view = fragmentActivity.getLayoutInflater().inflate(R.layout.export, null);
- exportTypeOptions = (RadioGroup) view.findViewById(R.id.export_type_options);
- RadioButton exportGoogleDrive = (RadioButton) view.findViewById(R.id.export_google_drive);
+ exportTypeOptions = (Spinner) view.findViewById(R.id.export_type_options);
exportGoogleMapsOptions = (RadioGroup) view.findViewById(R.id.export_google_maps_options);
exportGoogleFusionTablesOptions = (RadioGroup) view.findViewById(
R.id.export_google_fusion_tables_options);
exportExternalStorageOptions = (RadioGroup) view.findViewById(
R.id.export_external_storage_options);
+ accountSpinner = (Spinner) view.findViewById(R.id.export_account);
+
+ // Setup exportTypeOptions
+ setupExportTypeOptions(fragmentActivity);
- // exportTypeOptions
- exportTypeOptions.setOnCheckedChangeListener(new OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- exportGoogleMapsOptions.setVisibility(
- checkedId == R.id.export_google_maps ? View.VISIBLE : View.GONE);
- exportGoogleFusionTablesOptions.setVisibility(
- checkedId == R.id.export_google_fusion_tables ? View.VISIBLE : View.GONE);
- exportExternalStorageOptions.setVisibility(
- checkedId == R.id.export_external_storage ? View.VISIBLE : View.GONE);
- }
- });
- exportTypeOptions.check(getExportTypeId(exportType));
-
- // exportGoogleDrive
- exportGoogleDrive.setVisibility(hideDrive ? View.GONE : View.VISIBLE);
-
- // exportGoogleMapsOptions
+ // Setup exportGoogleMapsOptions
boolean exportGoogleMapsPublic = PreferencesUtils.getBoolean(fragmentActivity,
R.string.export_google_maps_public_key, PreferencesUtils.EXPORT_GOOGLE_MAPS_PUBLIC_DEFAULT);
exportGoogleMapsOptions.check(
exportGoogleMapsPublic ? R.id.export_google_maps_public : R.id.export_google_maps_unlisted);
- // exportGoogleFusionTablesOptions
+ // Setup exportGoogleFusionTablesOptions
boolean exportGoogleFusionTablesPublic = PreferencesUtils.getBoolean(fragmentActivity,
R.string.export_google_fusion_tables_public_key,
PreferencesUtils.EXPORT_GOOGLE_FUSION_TABLES_PUBLIC_DEFAULT);
@@ -143,7 +150,7 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
exportGoogleFusionTablesPublic ? R.id.export_google_fusion_tables_public
: R.id.export_google_fusion_tables_private);
- // exportExternalStorageOptions
+ // Setup exportExternalStorageOptions
setExternalStorageOption(
(RadioButton) view.findViewById(R.id.export_external_storage_kml), TrackFileFormat.KML);
setExternalStorageOption(
@@ -157,35 +164,102 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
PreferencesUtils.EXPORT_EXTERNAL_STORAGE_FORMAT_DEFAULT));
exportExternalStorageOptions.check(getExternalStorageFormatId(trackFileFormat));
+ // Setup accountSpinner
+ AccountUtils.setupAccountSpinner(fragmentActivity, accountSpinner, accounts);
+
return new AlertDialog.Builder(fragmentActivity).setNegativeButton(
R.string.generic_cancel, null)
.setPositiveButton(R.string.menu_export, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
FragmentActivity context = getActivity();
- int id = exportTypeOptions.getCheckedRadioButtonId();
- ExportType type = getExportType(id);
+ ExportType type = exportTypeOptionsList.get(
+ exportTypeOptions.getSelectedItemPosition());
TrackFileFormat format = null;
PreferencesUtils.setString(context, R.string.export_type_key, type.name());
- if (id == R.id.export_google_maps) {
+ if (type == ExportType.GOOGLE_MAPS) {
PreferencesUtils.setBoolean(context, R.string.export_google_maps_public_key,
exportGoogleMapsOptions.getCheckedRadioButtonId()
== R.id.export_google_maps_public);
- } else if (id == R.id.export_google_fusion_tables) {
+ } else if (type == ExportType.GOOGLE_FUSION_TABLES) {
PreferencesUtils.setBoolean(context, R.string.export_google_fusion_tables_public_key,
exportGoogleFusionTablesOptions.getCheckedRadioButtonId()
== R.id.export_google_fusion_tables_public);
- } else if (id == R.id.export_external_storage) {
+ } else if (type == ExportType.EXTERNAL_STORAGE) {
format = getTrackFileFormat(exportExternalStorageOptions.getCheckedRadioButtonId());
PreferencesUtils.setString(
context, R.string.export_external_storage_format_key, format.name());
}
- caller.onExportDone(type, format);
+ Account account;
+ if (accounts.length == 0) {
+ account = null;
+ } else if (accounts.length == 1) {
+ account = accounts[0];
+ } else {
+ account = accounts[accountSpinner.getSelectedItemPosition()];
+ }
+ AccountUtils.updateShareTrackAccountPreference(context, account);
+ caller.onExportDone(type, format, account);
}
}).setTitle(R.string.export_title).setView(view).create();
}
+ private void setupExportTypeOptions(FragmentActivity fragmentActivity) {
+ boolean hideDrive = getArguments().getBoolean(KEY_HIDE_DRIVE);
+ ExportType exportType = ExportType.valueOf(PreferencesUtils.getString(
+ fragmentActivity, R.string.export_type_key, PreferencesUtils.EXPORT_TYPE_DEFAULT));
+
+ if (hideDrive && exportType == ExportType.GOOGLE_DRIVE) {
+ exportType = ExportType.GOOGLE_MAPS;
+ }
+
+ exportTypeOptionsList = new ArrayList();
+ ArrayAdapter adapter = new ArrayAdapter(
+ getActivity(), android.R.layout.simple_spinner_item);
+ if (accounts.length > 0) {
+ if (!hideDrive) {
+ exportTypeOptionsList.add(ExportType.GOOGLE_DRIVE);
+ }
+ exportTypeOptionsList.add(ExportType.GOOGLE_MAPS);
+ exportTypeOptionsList.add(ExportType.GOOGLE_FUSION_TABLES);
+ exportTypeOptionsList.add(ExportType.GOOGLE_SPREADSHEET);
+ }
+ exportTypeOptionsList.add(ExportType.EXTERNAL_STORAGE);
+
+ int selection = 0;
+ for (int i = 0; i < exportTypeOptionsList.size(); i++) {
+ ExportType type = exportTypeOptionsList.get(i);
+ adapter.add(getString(type.resId));
+ if (type == exportType) {
+ selection = i;
+ }
+ }
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ exportTypeOptions.setAdapter(adapter);
+ exportTypeOptions.setSelection(selection);
+ exportTypeOptions.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+
+ @Override
+ public void onItemSelected(AdapterView> parent, View view, int position, long id) {
+ ExportType type = exportTypeOptionsList.get(position);
+ exportGoogleMapsOptions.setVisibility(
+ type == ExportType.GOOGLE_MAPS ? View.VISIBLE : View.GONE);
+ exportGoogleFusionTablesOptions.setVisibility(
+ type == ExportType.GOOGLE_FUSION_TABLES ? View.VISIBLE : View.GONE);
+ exportExternalStorageOptions.setVisibility(
+ type == ExportType.EXTERNAL_STORAGE ? View.VISIBLE : View.GONE);
+ accountSpinner.setVisibility(
+ accounts.length > 1 && type != ExportType.EXTERNAL_STORAGE ? View.VISIBLE : View.GONE);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView> parent) {
+ // Safely ignore
+ }
+ });
+ }
+
/**
* Sets an external storage option.
*
@@ -232,44 +306,4 @@ public class ExportDialogFragment extends AbstractMyTracksDialogFragment {
return TrackFileFormat.TCX;
}
}
-
- /**
- * Gets the export type id from an export type.
- *
- * @param exportType the export type
- */
- private int getExportTypeId(ExportType exportType) {
- switch (exportType) {
- case GOOGLE_DRIVE:
- return R.id.export_google_drive;
- case GOOGLE_MAPS:
- return R.id.export_google_maps;
- case GOOGLE_FUSION_TABLES:
- return R.id.export_google_fusion_tables;
- case GOOGLE_SPREADSHEET:
- return R.id.export_google_spreadsheets;
- default:
- return R.id.export_external_storage;
- }
- }
-
- /**
- * Gets the export type from an export type id.
- *
- * @param exportTypeId the export type id
- */
- private ExportType getExportType(int exportTypeId) {
- switch (exportTypeId) {
- case R.id.export_google_drive:
- return ExportType.GOOGLE_DRIVE;
- case R.id.export_google_maps:
- return ExportType.GOOGLE_MAPS;
- case R.id.export_google_fusion_tables:
- return ExportType.GOOGLE_FUSION_TABLES;
- case R.id.export_google_spreadsheets:
- return ExportType.GOOGLE_SPREADSHEET;
- default:
- return ExportType.EXTERNAL_STORAGE;
- }
- }
}
diff --git a/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
index d23d701e8..67763f2e9 100644
--- a/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
+++ b/MyTracks/src/com/google/android/apps/mytracks/fragments/ShareTrackDialogFragment.java
@@ -17,6 +17,7 @@
package com.google.android.apps.mytracks.fragments;
import com.google.android.apps.mytracks.Constants;
+import com.google.android.apps.mytracks.util.AccountUtils;
import com.google.android.apps.mytracks.util.PreferencesUtils;
import com.google.android.maps.mytracks.R;
@@ -33,7 +34,6 @@ import android.provider.ContactsContract;
import android.support.v4.app.FragmentActivity;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
-import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
@@ -59,11 +59,12 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
/**
* Called when share track is done.
*
+ * @param trackId the track id
* @param makePublic true to make the track public
* @param emails the emails to share the track with
* @param account the google drive account
*/
- public void onShareTrackDone(boolean makePublic, String emails, Account account);
+ public void onShareTrackDone(long trackId, boolean makePublic, String emails, Account account);
}
public static final String SHARE_TRACK_DIALOG_TAG = "shareTrackDialog";
@@ -80,7 +81,6 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
}
private ShareTrackCaller caller;
- private FragmentActivity fragmentActivity;
private Account[] accounts;
// UI elements
@@ -102,7 +102,7 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
@Override
protected Dialog createDialog() {
- fragmentActivity = getActivity();
+ FragmentActivity fragmentActivity = getActivity();
accounts = AccountManager.get(fragmentActivity).getAccountsByType(Constants.ACCOUNT_TYPE);
if (accounts.length == 0) {
@@ -137,7 +137,7 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
SimpleCursorAdapter adapter = new SimpleCursorAdapter(fragmentActivity,
- R.layout.add_emails_item, getAutoCompleteCursor(null), new String[] {
+ R.layout.add_emails_item, getAutoCompleteCursor(fragmentActivity, null), new String[] {
ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.CommonDataKinds.Email.DATA },
new int[] { android.R.id.text1, android.R.id.text2 }, 0);
adapter.setCursorToStringConverter(new SimpleCursorAdapter.CursorToStringConverter() {
@@ -150,41 +150,41 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
adapter.setFilterQueryProvider(new FilterQueryProvider() {
@Override
public Cursor runQuery(CharSequence constraint) {
- return getAutoCompleteCursor(constraint);
+ return getAutoCompleteCursor(getActivity(), constraint);
}
});
multiAutoCompleteTextView.setAdapter(adapter);
// Setup accountSpinner
accountSpinner = (Spinner) view.findViewById(R.id.share_track_account);
- setupAccountSpinner(accountSpinner);
-
+ accountSpinner.setVisibility(accounts.length > 1 ? View.VISIBLE : View.GONE);
+ AccountUtils.setupAccountSpinner(fragmentActivity, accountSpinner, accounts);
+
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) {
+ FragmentActivity context = getActivity();
if (!publicCheckBox.isChecked() && !inviteCheckBox.isChecked()) {
- Toast.makeText(fragmentActivity, R.string.share_track_no_selection, Toast.LENGTH_LONG)
- .show();
+ Toast.makeText(context, R.string.share_track_no_selection, Toast.LENGTH_LONG).show();
return;
}
String acl = multiAutoCompleteTextView.getText().toString().trim();
if (!publicCheckBox.isChecked() && acl.equals("")) {
- Toast.makeText(fragmentActivity, R.string.share_track_no_emails, Toast.LENGTH_LONG)
- .show();
+ Toast.makeText(context, R.string.share_track_no_emails, Toast.LENGTH_LONG).show();
return;
}
+ PreferencesUtils.setBoolean(
+ context, R.string.share_track_public_key, publicCheckBox.isChecked());
+ PreferencesUtils.setBoolean(
+ context, R.string.share_track_invite_key, inviteCheckBox.isChecked());
Account account = accounts.length > 1 ? accounts[accountSpinner
.getSelectedItemPosition()]
: accounts[0];
- PreferencesUtils.setBoolean(
- fragmentActivity, R.string.share_track_public_key, publicCheckBox.isChecked());
- PreferencesUtils.setBoolean(
- fragmentActivity, R.string.share_track_invite_key, inviteCheckBox.isChecked());
- PreferencesUtils.setString(
- fragmentActivity, R.string.share_track_account_key, account.name);
- caller.onShareTrackDone(publicCheckBox.isChecked(), acl, account);
+ AccountUtils.updateShareTrackAccountPreference(context, account);
+ caller.onShareTrackDone(
+ getArguments().getLong(KEY_TRACK_ID), publicCheckBox.isChecked(), acl, account);
}
}).setTitle(R.string.share_track_title).setView(view).create();
}
@@ -194,7 +194,7 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
*
* @param constraint the constraint
*/
- private Cursor getAutoCompleteCursor(CharSequence constraint) {
+ private Cursor getAutoCompleteCursor(FragmentActivity fragmentActivity, CharSequence constraint) {
String order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
if (constraint != null) {
@@ -207,26 +207,4 @@ public class ShareTrackDialogFragment extends AbstractMyTracksDialogFragment {
Uri uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
return fragmentActivity.getContentResolver().query(uri, projection, selection, null, order);
}
-
- private void setupAccountSpinner(Spinner spinner) {
- boolean hasMultiple = accounts.length > 1;
- spinner.setVisibility(hasMultiple ? View.VISIBLE : View.GONE);
- if (hasMultiple) {
- String shareTrackAccount = PreferencesUtils.getString(fragmentActivity,
- R.string.share_track_account_key, PreferencesUtils.SHARE_TRACK_ACCOUNT_DEFAULT);
- ArrayAdapter adapter = new ArrayAdapter(
- fragmentActivity, R.layout.account_spinner_item);
- int selection = 0;
- for (int i = 0; i < accounts.length; i++) {
- String name = accounts[i].name;
- adapter.add(name);
- if (name.equals(shareTrackAccount)) {
- selection = i;
- }
- }
- adapter.setDropDownViewResource(R.layout.account_spinner_dropdown_item);
- spinner.setAdapter(adapter);
- spinner.setSelection(selection);
- }
- }
}
\ No newline at end of file
diff --git a/MyTracks/src/com/google/android/apps/mytracks/util/AccountUtils.java b/MyTracks/src/com/google/android/apps/mytracks/util/AccountUtils.java
new file mode 100644
index 000000000..8fdc82d0c
--- /dev/null
+++ b/MyTracks/src/com/google/android/apps/mytracks/util/AccountUtils.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.google.android.apps.mytracks.util;
+
+import com.google.android.maps.mytracks.R;
+
+import android.accounts.Account;
+import android.content.Context;
+import android.support.v4.app.FragmentActivity;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+
+/**
+ * Utilities for account.
+ *
+ * @author Jimmy Shih
+ */
+public class AccountUtils {
+
+ private AccountUtils() {}
+
+ /**
+ * Sets up account spinner.
+ *
+ * @param fragmentActivity tyhe fragment activity
+ * @param spinner the spinner
+ * @param accounts the accounts
+ */
+ public static void setupAccountSpinner(
+ FragmentActivity fragmentActivity, Spinner spinner, Account[] accounts) {
+ if (accounts.length > 1) {
+ String shareTrackAccount = PreferencesUtils.getString(fragmentActivity,
+ R.string.share_track_account_key, PreferencesUtils.SHARE_TRACK_ACCOUNT_DEFAULT);
+ ArrayAdapter adapter = new ArrayAdapter(
+ fragmentActivity, R.layout.account_spinner_item);
+ int selection = 0;
+ for (int i = 0; i < accounts.length; i++) {
+ String name = accounts[i].name;
+ adapter.add(name);
+ if (name.equals(shareTrackAccount)) {
+ selection = i;
+ }
+ }
+ adapter.setDropDownViewResource(R.layout.account_spinner_dropdown_item);
+ spinner.setAdapter(adapter);
+ spinner.setSelection(selection);
+ }
+ }
+
+ /**
+ * Updates the share track account preference.
+ *
+ * @param context the context
+ * @param account the account
+ */
+ public static void updateShareTrackAccountPreference(Context context, Account account) {
+ if (account != null) {
+ PreferencesUtils.setString(context, R.string.share_track_account_key, account.name);
+ }
+ }
+}