Merge "CaptivePortalLogin correctly unregisters callbacks"

This commit is contained in:
Hugo Benichi
2017-06-20 05:04:01 +00:00
committed by Gerrit Code Review

View File

@@ -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.