diff options
author | 2017-06-20 05:04:01 +0000 | |
---|---|---|
committer | 2017-06-20 05:04:02 +0000 | |
commit | 48bc4c1f420d8f60c4d83d0ded4be0f37a37dd22 (patch) | |
tree | dd84380599a40d13419272f4dee3b9a82b145acd | |
parent | 04e89ad63172cc15ed41d20cb9f4dec2dfa1b8e5 (diff) | |
parent | 605b295011be74c786a2eef586d31ccb07160422 (diff) |
Merge "CaptivePortalLogin correctly unregisters callbacks"
-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 71d9fc8e53d8..7480ad164f68 100644 --- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java +++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java @@ -58,6 +58,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(); @@ -83,6 +84,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) { @@ -179,13 +182,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: @@ -245,8 +248,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. |