summaryrefslogtreecommitdiffstats
path: root/packages/CaptivePortalLogin
diff options
context:
space:
mode:
authorPaul Jensen <pauljensen@google.com>2014-11-26 18:43:29 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-11-26 18:43:29 +0000
commitf19f90b229c9d15b33895988fd5e4e13d786f616 (patch)
tree03631e77f913be6b92295ca34f927b5c8ca7d5b6 /packages/CaptivePortalLogin
parente4d336eb9542f59d9ab4d5bfb21ad4ce9fc5a83a (diff)
parent58a493accfeafa13fd77a16e832c5ad72a4c9006 (diff)
downloadframeworks_base-f19f90b229c9d15b33895988fd5e4e13d786f616.zip
frameworks_base-f19f90b229c9d15b33895988fd5e4e13d786f616.tar.gz
frameworks_base-f19f90b229c9d15b33895988fd5e4e13d786f616.tar.bz2
am 58a493ac: am be3736d3: Merge "Don\'t let NetworkMonitor state stop user-initiated transitions." into lmp-mr1-dev
* commit '58a493accfeafa13fd77a16e832c5ad72a4c9006': Don't let NetworkMonitor state stop user-initiated transitions.
Diffstat (limited to 'packages/CaptivePortalLogin')
-rw-r--r--packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java39
1 files changed, 27 insertions, 12 deletions
diff --git a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
index 7a262de..1c7b033 100644
--- a/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
+++ b/packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java
@@ -62,13 +62,19 @@ public class CaptivePortalLoginActivity extends Activity {
// Intent broadcast to ConnectivityService indicating sign-in is complete.
// Extras:
// EXTRA_TEXT = netId
- // LOGGED_IN_RESULT = "1" if we should use network, "0" if not.
+ // LOGGED_IN_RESULT = one of the CAPTIVE_PORTAL_APP_RETURN_* values below.
+ // RESPONSE_TOKEN = data fragment from launching Intent
private static final String ACTION_CAPTIVE_PORTAL_LOGGED_IN =
"android.net.netmon.captive_portal_logged_in";
private static final String LOGGED_IN_RESULT = "result";
+ private static final int CAPTIVE_PORTAL_APP_RETURN_APPEASED = 0;
+ private static final int CAPTIVE_PORTAL_APP_RETURN_UNWANTED = 1;
+ private static final int CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS = 2;
+ private static final String RESPONSE_TOKEN = "response_token";
private URL mURL;
private int mNetId;
+ private String mResponseToken;
private NetworkCallback mNetworkCallback;
@Override
@@ -78,12 +84,18 @@ public class CaptivePortalLoginActivity extends Activity {
String server = Settings.Global.getString(getContentResolver(), "captive_portal_server");
if (server == null) server = DEFAULT_SERVER;
try {
- mURL = new URL("http://" + server + "/generate_204");
- } catch (MalformedURLException e) {
- done(true);
+ mURL = new URL("http", server, "/generate_204");
+ final Uri dataUri = getIntent().getData();
+ if (!dataUri.getScheme().equals("netid")) {
+ throw new MalformedURLException();
+ }
+ mNetId = Integer.parseInt(dataUri.getSchemeSpecificPart());
+ mResponseToken = dataUri.getFragment();
+ } catch (MalformedURLException|NumberFormatException e) {
+ // System misconfigured, bail out in a way that at least provides network access.
+ done(CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS);
}
- mNetId = Integer.parseInt(getIntent().getStringExtra(Intent.EXTRA_TEXT));
final Network network = new Network(mNetId);
ConnectivityManager.setProcessDefaultNetwork(network);
@@ -121,7 +133,7 @@ public class CaptivePortalLoginActivity extends Activity {
mNetworkCallback = new NetworkCallback() {
@Override
public void onLost(Network lostNetwork) {
- if (network.equals(lostNetwork)) done(false);
+ if (network.equals(lostNetwork)) done(CAPTIVE_PORTAL_APP_RETURN_UNWANTED);
}
};
final NetworkRequest.Builder builder = new NetworkRequest.Builder();
@@ -165,11 +177,14 @@ public class CaptivePortalLoginActivity extends Activity {
}
}
- private void done(boolean use_network) {
- ConnectivityManager.from(this).unregisterNetworkCallback(mNetworkCallback);
+ private void done(int result) {
+ if (mNetworkCallback != null) {
+ ConnectivityManager.from(this).unregisterNetworkCallback(mNetworkCallback);
+ }
Intent intent = new Intent(ACTION_CAPTIVE_PORTAL_LOGGED_IN);
intent.putExtra(Intent.EXTRA_TEXT, String.valueOf(mNetId));
- intent.putExtra(LOGGED_IN_RESULT, use_network ? "1" : "0");
+ intent.putExtra(LOGGED_IN_RESULT, String.valueOf(result));
+ intent.putExtra(RESPONSE_TOKEN, mResponseToken);
sendBroadcast(intent);
finish();
}
@@ -194,11 +209,11 @@ public class CaptivePortalLoginActivity extends Activity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_use_network) {
- done(true);
+ done(CAPTIVE_PORTAL_APP_RETURN_WANTED_AS_IS);
return true;
}
if (id == R.id.action_do_not_use_network) {
- done(false);
+ done(CAPTIVE_PORTAL_APP_RETURN_UNWANTED);
return true;
}
return super.onOptionsItemSelected(item);
@@ -227,7 +242,7 @@ public class CaptivePortalLoginActivity extends Activity {
if (urlConnection != null) urlConnection.disconnect();
}
if (httpResponseCode == 204) {
- done(true);
+ done(CAPTIVE_PORTAL_APP_RETURN_APPEASED);
}
}
}).start();