Make CaptivePortalLogin app exit if underlying Network disconnects.

The app is no longer useful if the underlying Network has disconnected
and could get in the way of another signing into another Network.

bug:17672087
Change-Id: I26e820444640975e7fd4dd73244f4d4f4b40cb5e
This commit is contained in:
Paul Jensen
2014-09-26 15:19:17 -04:00
parent 75c33d9d04
commit 8df099df15
2 changed files with 27 additions and 1 deletions

View File

@@ -20,6 +20,7 @@
package="com.android.captiveportallogin" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:label="@string/app_name" >
<activity

View File

@@ -20,7 +20,10 @@ import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Bundle;
import android.provider.Settings;
import android.provider.Settings.Global;
@@ -55,6 +58,7 @@ public class CaptivePortalLoginActivity extends Activity {
private URL mURL;
private int mNetId;
private NetworkCallback mNetworkCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -73,7 +77,27 @@ public class CaptivePortalLoginActivity extends Activity {
getActionBar().setDisplayShowHomeEnabled(false);
mNetId = Integer.parseInt(getIntent().getStringExtra(Intent.EXTRA_TEXT));
ConnectivityManager.setProcessDefaultNetwork(new Network(mNetId));
final Network network = new Network(mNetId);
ConnectivityManager.setProcessDefaultNetwork(network);
// Exit app if Network disappears.
final NetworkCapabilities networkCapabilities =
ConnectivityManager.from(this).getNetworkCapabilities(network);
if (networkCapabilities == null) {
finish();
return;
}
mNetworkCallback = new NetworkCallback() {
@Override
public void onLost(Network lostNetwork) {
if (network.equals(lostNetwork)) done(false);
}
};
final NetworkRequest.Builder builder = new NetworkRequest.Builder();
for (int transportType : networkCapabilities.getTransportTypes()) {
builder.addTransportType(transportType);
}
ConnectivityManager.from(this).registerNetworkCallback(builder.build(), mNetworkCallback);
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
@@ -84,6 +108,7 @@ public class CaptivePortalLoginActivity extends Activity {
}
private void done(boolean use_network) {
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");