2020import android .content .Intent ;
2121import android .graphics .Bitmap ;
2222import android .net .ConnectivityManager ;
23+ import android .net .ConnectivityManager .NetworkCallback ;
2324import android .net .Network ;
25+ import android .net .NetworkCapabilities ;
26+ import android .net .NetworkRequest ;
2427import android .os .Bundle ;
2528import android .provider .Settings ;
2629import 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