Skip to content

Commit 8df099d

Browse files
committed
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
1 parent 75c33d9 commit 8df099d

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

packages/CaptivePortalLogin/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package="com.android.captiveportallogin" >
2121

2222
<uses-permission android:name="android.permission.INTERNET" />
23+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2324

2425
<application android:label="@string/app_name" >
2526
<activity

packages/CaptivePortalLogin/src/com/android/captiveportallogin/CaptivePortalLoginActivity.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
import android.content.Intent;
2121
import android.graphics.Bitmap;
2222
import android.net.ConnectivityManager;
23+
import android.net.ConnectivityManager.NetworkCallback;
2324
import android.net.Network;
25+
import android.net.NetworkCapabilities;
26+
import android.net.NetworkRequest;
2427
import android.os.Bundle;
2528
import android.provider.Settings;
2629
import android.provider.Settings.Global;
@@ -55,6 +58,7 @@ public class CaptivePortalLoginActivity extends Activity {
5558

5659
private URL mURL;
5760
private int mNetId;
61+
private NetworkCallback mNetworkCallback;
5862

5963
@Override
6064
protected void onCreate(Bundle savedInstanceState) {
@@ -73,7 +77,27 @@ protected void onCreate(Bundle savedInstanceState) {
7377
getActionBar().setDisplayShowHomeEnabled(false);
7478

7579
mNetId = Integer.parseInt(getIntent().getStringExtra(Intent.EXTRA_TEXT));
76-
ConnectivityManager.setProcessDefaultNetwork(new Network(mNetId));
80+
final Network network = new Network(mNetId);
81+
ConnectivityManager.setProcessDefaultNetwork(network);
82+
83+
// Exit app if Network disappears.
84+
final NetworkCapabilities networkCapabilities =
85+
ConnectivityManager.from(this).getNetworkCapabilities(network);
86+
if (networkCapabilities == null) {
87+
finish();
88+
return;
89+
}
90+
mNetworkCallback = new NetworkCallback() {
91+
@Override
92+
public void onLost(Network lostNetwork) {
93+
if (network.equals(lostNetwork)) done(false);
94+
}
95+
};
96+
final NetworkRequest.Builder builder = new NetworkRequest.Builder();
97+
for (int transportType : networkCapabilities.getTransportTypes()) {
98+
builder.addTransportType(transportType);
99+
}
100+
ConnectivityManager.from(this).registerNetworkCallback(builder.build(), mNetworkCallback);
77101

78102
WebView myWebView = (WebView) findViewById(R.id.webview);
79103
WebSettings webSettings = myWebView.getSettings();
@@ -84,6 +108,7 @@ protected void onCreate(Bundle savedInstanceState) {
84108
}
85109

86110
private void done(boolean use_network) {
111+
ConnectivityManager.from(this).unregisterNetworkCallback(mNetworkCallback);
87112
Intent intent = new Intent(ACTION_CAPTIVE_PORTAL_LOGGED_IN);
88113
intent.putExtra(Intent.EXTRA_TEXT, String.valueOf(mNetId));
89114
intent.putExtra(LOGGED_IN_RESULT, use_network ? "1" : "0");

0 commit comments

Comments
 (0)