summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChalard Jean <jchalard@google.com>2018-05-23 18:46:43 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-05-23 18:46:43 +0000
commitb0662ceb31d6b83dd2ecbbe4c7cbf67b43bdba7f (patch)
tree12de1151396e64d92956f56660f58d7636a879b0
parent7f247b5da3168117f09afe1403c3c62ddcef32be (diff)
parent92ad979af41cbdcae977bcbcb93ba5e67fcebf3a (diff)
downloadplatform_packages_modules_CaptivePortalLogin-pie-dr1-dev.tar.gz
platform_packages_modules_CaptivePortalLogin-pie-dr1-dev.tar.bz2
platform_packages_modules_CaptivePortalLogin-pie-dr1-dev.zip
-rw-r--r--src/com/android/captiveportallogin/CaptivePortalLoginActivity.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index 91c04fa..3630005 100644
--- a/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -16,6 +16,9 @@
package com.android.captiveportallogin;
+import static android.net.ConnectivityManager.EXTRA_CAPTIVE_PORTAL_PROBE_SPEC;
+import static android.net.captiveportal.CaptivePortalProbeSpec.HTTP_LOCATION_HEADER_NAME;
+
import android.app.Activity;
import android.app.LoadedApk;
import android.content.Context;
@@ -29,6 +32,7 @@ import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.Proxy;
import android.net.Uri;
+import android.net.captiveportal.CaptivePortalProbeSpec;
import android.net.dns.ResolvUtil;
import android.net.http.SslError;
import android.net.wifi.WifiInfo;
@@ -85,6 +89,7 @@ public class CaptivePortalLoginActivity extends Activity {
};
private URL mUrl;
+ private CaptivePortalProbeSpec mProbeSpec;
private String mUserAgent;
private Network mNetwork;
private CaptivePortal mCaptivePortal;
@@ -118,6 +123,14 @@ public class CaptivePortalLoginActivity extends Activity {
Log.d(TAG, String.format("onCreate for %s", mUrl.toString()));
}
+ final String spec = getIntent().getStringExtra(EXTRA_CAPTIVE_PORTAL_PROBE_SPEC);
+ try {
+ mProbeSpec = CaptivePortalProbeSpec.parseSpecOrNull(spec);
+ } catch (Exception e) {
+ // Make extra sure that invalid configurations do not cause crashes
+ mProbeSpec = null;
+ }
+
// Also initializes proxy system properties.
mCm.bindProcessToNetwork(mNetwork);
mCm.setProcessDefaultNetworkForHostResolution(
@@ -329,6 +342,7 @@ public class CaptivePortalLoginActivity extends Activity {
}
HttpURLConnection urlConnection = null;
int httpResponseCode = 500;
+ String locationHeader = null;
try {
urlConnection = (HttpURLConnection) network.openConnection(mUrl);
urlConnection.setInstanceFollowRedirects(false);
@@ -343,6 +357,7 @@ public class CaptivePortalLoginActivity extends Activity {
urlConnection.getInputStream();
httpResponseCode = urlConnection.getResponseCode();
+ locationHeader = urlConnection.getHeaderField(HTTP_LOCATION_HEADER_NAME);
if (DBG) {
Log.d(TAG, "probe at " + mUrl +
" ret=" + httpResponseCode +
@@ -353,13 +368,20 @@ public class CaptivePortalLoginActivity extends Activity {
} finally {
if (urlConnection != null) urlConnection.disconnect();
}
- if (httpResponseCode == 204) {
+ if (isDismissed(httpResponseCode, locationHeader, mProbeSpec)) {
done(Result.DISMISSED);
}
}
}).start();
}
+ private static boolean isDismissed(
+ int httpResponseCode, String locationHeader, CaptivePortalProbeSpec probeSpec) {
+ return (probeSpec != null)
+ ? probeSpec.getResult(httpResponseCode, locationHeader).isSuccessful()
+ : (httpResponseCode == 204);
+ }
+
private class MyWebViewClient extends WebViewClient {
private static final String INTERNAL_ASSETS = "file:///android_asset/";