diff --git a/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java b/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java index d825ca973..b64ba523e 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java +++ b/MyTracks/src/com/google/android/apps/mytracks/MyMapsList.java @@ -24,7 +24,6 @@ import com.google.android.apps.mytracks.io.mymaps.MapsFacade; import com.google.android.apps.mytracks.io.mymaps.MyMapsConstants; import com.google.android.maps.mytracks.R; -import android.accounts.Account; import android.app.Activity; import android.content.Intent; import android.os.Bundle; @@ -96,14 +95,13 @@ public class MyMapsList extends Activity implements MapsFacade.MapsListCallback return; } - Account account = new Account(accountName, accountType); - doLogin(account); + doLogin(auth.getAccountObject(accountName, accountType)); } else { doLogin(null); } } - private void doLogin(final Account account) { + private void doLogin(final Object account) { // Starts in the UI thread. auth.doLogin(new AuthCallback() { @Override diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/AuthManager.java b/MyTracks/src/com/google/android/apps/mytracks/io/AuthManager.java index 15325d8e6..6276a158b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/AuthManager.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/AuthManager.java @@ -81,4 +81,13 @@ public interface AuthManager { * is successfully fetched */ void invalidateAndRefresh(AuthCallback whenFinished); + + /** + * Returns an object that represents the given account, if possible. + * + * @param accountName the name of the account + * @param accountType the type of the account + * @return the account object + */ + Object getAccountObject(String accountName, String accountType); } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/AuthManagerOld.java b/MyTracks/src/com/google/android/apps/mytracks/io/AuthManagerOld.java index 623bbf592..4e80345fb 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/AuthManagerOld.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/AuthManagerOld.java @@ -133,4 +133,9 @@ public class AuthManagerOld implements AuthManager { } }); } + + @Override + public Object getAccountObject(String accountName, String accountType) { + throw new UnsupportedOperationException("Legacy auth manager knows nothing about accounts"); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/ModernAuthManager.java b/MyTracks/src/com/google/android/apps/mytracks/io/ModernAuthManager.java index 0b2d9e6bd..8f663a42b 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/ModernAuthManager.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/ModernAuthManager.java @@ -213,4 +213,9 @@ public class ModernAuthManager implements AuthManager { }).start(); } } + + @Override + public Object getAccountObject(String accountName, String accountType) { + return new Account(accountName, accountType); + } } diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/SendActivity.java b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/SendActivity.java index 44ae883c8..712ade62f 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/SendActivity.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/sendtogoogle/SendActivity.java @@ -118,7 +118,7 @@ public class SendActivity extends Activity implements ProgressIndicator { // Authentication private AuthManager lastAuth; private final HashMap authMap = new HashMap(); - private final AccountChooser accountChooser = new AccountChooser(); + private AccountChooser accountChooser; private String lastAccountName; private String lastAccountType; @@ -268,9 +268,6 @@ public class SendActivity extends Activity implements ProgressIndicator { lastAccountName = savedInstanceState.getString(STATE_ACCOUNT_NAME); lastAccountType = savedInstanceState.getString(STATE_ACCOUNT_TYPE); - if (lastAccountName != null && lastAccountType != null) { - accountChooser.setChosenAccount(lastAccountName, lastAccountType); - } } @Override @@ -762,6 +759,15 @@ public class SendActivity extends Activity implements ProgressIndicator { } private void chooseAccount(final int requestCode, final String service) { + if (accountChooser == null) { + accountChooser = new AccountChooser(); + + // Restore state if necessary. + if (lastAccountName != null && lastAccountType != null) { + accountChooser.setChosenAccount(lastAccountName, lastAccountType); + } + } + accountChooser.chooseAccount(SendActivity.this, new AccountChooser.AccountHandler() { @Override