diff options
| author | Samuel Tardieu <sam@rfc1149.net> | 2013-12-28 11:10:33 +0100 |
|---|---|---|
| committer | Samuel Tardieu <sam@rfc1149.net> | 2013-12-28 11:16:33 +0100 |
| commit | 58d4c70c00ed1de52e8cda665a77230b249906ac (patch) | |
| tree | 924af3cccdc831fe00c4a6fe27483e1775c6a70e /main/src/cgeo/geocaching/MainActivity.java | |
| parent | 8a4a97f46ac02d7475a4a9532cb3b80800dcda90 (diff) | |
| download | cgeo-58d4c70c00ed1de52e8cda665a77230b249906ac.zip cgeo-58d4c70c00ed1de52e8cda665a77230b249906ac.tar.gz cgeo-58d4c70c00ed1de52e8cda665a77230b249906ac.tar.bz2 | |
fix #3480: quasi-systematic concurrent logins
The login procedure was initiated in both `onCreate()` and `onResume()`.
It has been limited to `onResume()` and refactored as to not manipulate
a global variable.
Also, the previous code prevented cgeo from retrying a failed login to
one of the cache providers if another had succeeded, as every provider
cleared `setLogin()` in case of success. This has been fixed as well.
Diffstat (limited to 'main/src/cgeo/geocaching/MainActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/MainActivity.java | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/main/src/cgeo/geocaching/MainActivity.java b/main/src/cgeo/geocaching/MainActivity.java index 127a21d..d3f78cf 100644 --- a/main/src/cgeo/geocaching/MainActivity.java +++ b/main/src/cgeo/geocaching/MainActivity.java @@ -1,8 +1,5 @@ package cgeo.geocaching; -import butterknife.ButterKnife; -import butterknife.InjectView; - import cgeo.geocaching.activity.AbstractActivity; import cgeo.geocaching.connector.ConnectorFactory; import cgeo.geocaching.connector.capability.ILogin; @@ -22,9 +19,10 @@ import cgeo.geocaching.utils.Log; import cgeo.geocaching.utils.RunnableWithArgument; import cgeo.geocaching.utils.Version; +import butterknife.ButterKnife; +import butterknife.InjectView; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; - import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -232,9 +230,28 @@ public class MainActivity extends AbstractActivity { locationUpdater.startGeo(); satellitesHandler.startGeo(); updateUserInfoHandler.sendEmptyMessage(-1); + startBackgroundLogin(); init(); } + private void startBackgroundLogin() { + assert(app != null); + + (new Thread() { + @Override + public void run() { + final boolean mustLogin = app.mustRelog(); + + for (final ILogin conn : ConnectorFactory.getActiveLiveConnectors()) { + if (mustLogin || !conn.isLoggedIn()) { + conn.login(firstLoginHandler, MainActivity.this); + updateUserInfoHandler.sendEmptyMessage(-1); + } + } + } + }).start(); + } + @Override public void onDestroy() { initialized = false; @@ -342,11 +359,6 @@ public class MainActivity extends AbstractActivity { } private void init() { - - if (app.checkLogin) { - (new FirstLoginThread()).start(); - } - if (initialized) { return; } @@ -700,23 +712,6 @@ public class MainActivity extends AbstractActivity { } } - private class FirstLoginThread extends Thread { - - @Override - public void run() { - if (app == null) { - return; - } - - ILogin[] conns = ConnectorFactory.getActiveLiveConnectors(); - - for (ILogin conn : conns) { - conn.login(firstLoginHandler, MainActivity.this); - updateUserInfoHandler.sendEmptyMessage(-1); - } - } - } - private class ObtainAddressThread extends Thread { public ObtainAddressThread() { |
