Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8df099df authored by Paul Jensen's avatar Paul Jensen
Browse files

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
parent 75c33d9d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
+26 −1
Original line number Diff line number Diff line
@@ -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");