diff options
| -rw-r--r-- | packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java index 22f53eabb99b..e38cca739253 100644 --- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java +++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java @@ -57,6 +57,7 @@ import java.lang.InterruptedException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Random; +import java.util.concurrent.atomic.AtomicBoolean; public class CaptivePortalLoginActivity extends Activity { private static final String TAG = CaptivePortalLoginActivity.class.getSimpleName(); @@ -82,6 +83,8 @@ public class CaptivePortalLoginActivity extends Activity { private ConnectivityManager mCm; private boolean mLaunchBrowser = false; private MyWebViewClient mWebViewClient; + // Ensures that done() happens once exactly, handling concurrent callers with atomic operations. + private final AtomicBoolean isDone = new AtomicBoolean(false); @Override protected void onCreate(Bundle savedInstanceState) { @@ -178,13 +181,13 @@ public class CaptivePortalLoginActivity extends Activity { } private void done(Result result) { + if (isDone.getAndSet(true)) { + // isDone was already true: done() already called + return; + } if (DBG) { Log.d(TAG, String.format("Result %s for %s", result.name(), mUrl.toString())); } - if (mNetworkCallback != null) { - mCm.unregisterNetworkCallback(mNetworkCallback); - mNetworkCallback = null; - } logMetricsEvent(result.metricsEvent); switch (result) { case DISMISSED: @@ -244,8 +247,8 @@ public class CaptivePortalLoginActivity extends Activity { public void onDestroy() { super.onDestroy(); if (mNetworkCallback != null) { + // mNetworkCallback is not null if mUrl is not null. mCm.unregisterNetworkCallback(mNetworkCallback); - mNetworkCallback = null; } if (mLaunchBrowser) { // Give time for this network to become default. After 500ms just proceed. |