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

Commit 4e341b78 authored by Weng Su's avatar Weng Su Committed by Android (Google) Code Review
Browse files

Merge "[Provider Model] Move the Internet unavailable Wi-Fi down" into sc-dev

parents 21cf6c04 439cc64b
Loading
Loading
Loading
Loading
+19 −21
Original line number Original line Diff line number Diff line
@@ -142,13 +142,13 @@ public class InternetUpdater implements AirplaneModeEnabler.OnAirplaneModeChange
    private NetworkCallback mNetworkCallback = new NetworkCallback() {
    private NetworkCallback mNetworkCallback = new NetworkCallback() {
        public void onCapabilitiesChanged(@NonNull Network network,
        public void onCapabilitiesChanged(@NonNull Network network,
                @NonNull NetworkCapabilities networkCapabilities) {
                @NonNull NetworkCapabilities networkCapabilities) {
            checkNetworkCapabilities(networkCapabilities);
            updateInternetAvailable(networkCapabilities);
        }
        }


        @Override
        @Override
        public void onLost(@NonNull Network network) {
        public void onLost(@NonNull Network network) {
            mInternetAvailable = false;
            mInternetAvailable = false;
            update();
            updateInternetType();
        }
        }
    };
    };


@@ -203,7 +203,7 @@ public class InternetUpdater implements AirplaneModeEnabler.OnAirplaneModeChange
        Network activeNetwork = mConnectivityManager.getActiveNetwork();
        Network activeNetwork = mConnectivityManager.getActiveNetwork();
        if (activeNetwork == null) {
        if (activeNetwork == null) {
            mInternetAvailable = false;
            mInternetAvailable = false;
            update();
            updateInternetType();
            return;
            return;
        }
        }


@@ -211,36 +211,34 @@ public class InternetUpdater implements AirplaneModeEnabler.OnAirplaneModeChange
                mConnectivityManager.getNetworkCapabilities(activeNetwork);
                mConnectivityManager.getNetworkCapabilities(activeNetwork);
        if (activeNetworkCapabilities == null) {
        if (activeNetworkCapabilities == null) {
            mInternetAvailable = false;
            mInternetAvailable = false;
            update();
            updateInternetType();
            return;
            return;
        }
        }


        checkNetworkCapabilities(activeNetworkCapabilities);
        updateInternetAvailable(activeNetworkCapabilities);
    }

    private void checkNetworkCapabilities(@NonNull NetworkCapabilities networkCapabilities) {
        if (!networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
            mInternetAvailable = false;
            update();
            return;
    }
    }


    @VisibleForTesting
    void updateInternetAvailable(@NonNull NetworkCapabilities capabilities) {
        boolean internetAvailable = false;
        boolean internetAvailable = false;
        for (int transport : networkCapabilities.getTransportTypes()) {
        if (capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                && capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
            for (int transport : capabilities.getTransportTypes()) {
                if (sTransportMap.containsKey(transport)) {
                if (sTransportMap.containsKey(transport)) {
                    mTransport = transport;
                    mTransport = transport;
                    internetAvailable = true;
                    internetAvailable = true;
                Log.i(TAG, "Detect an internet capability network with transport type: "
                    Log.i(TAG, "Detect an internet available network with transport type: "
                            + mTransport);
                            + mTransport);
                    break;
                    break;
                }
                }
            }
            }
        }
        mInternetAvailable = internetAvailable;
        mInternetAvailable = internetAvailable;
        update();
        updateInternetType();
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    void update() {
    void updateInternetType() {
        @InternetType int internetType = INTERNET_NETWORKS_AVAILABLE;
        @InternetType int internetType = INTERNET_NETWORKS_AVAILABLE;
        if (mInternetAvailable) {
        if (mInternetAvailable) {
            internetType = sTransportMap.get(mTransport);
            internetType = sTransportMap.get(mTransport);
+28 −9
Original line number Original line Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;


import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;
import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;


import android.annotation.ColorInt;
import android.app.settings.SettingsEnums;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
@@ -30,6 +31,7 @@ import android.telephony.SubscriptionManager;
import android.util.Log;
import android.util.Log;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
import androidx.slice.Slice;
import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.ListBuilder;


@@ -83,9 +85,10 @@ public class ProviderModelSlice extends WifiSlice {
        // Second section:  Add a carrier item.
        // Second section:  Add a carrier item.
        // Third section:  Add the Wi-Fi items which are not connected.
        // Third section:  Add the Wi-Fi items which are not connected.
        // Fourth section:  If device has connection problem, this row show the message for user.
        // Fourth section:  If device has connection problem, this row show the message for user.
        boolean hasEthernet = isEthernetConnected();
        @InternetUpdater.InternetType int internetType = getInternetType();
        final ListBuilder listBuilder = mHelper.createListBuilder(getUri());
        final ListBuilder listBuilder = mHelper.createListBuilder(getUri());
        if (mHelper.isAirplaneModeEnabled() && !mWifiManager.isWifiEnabled() && !hasEthernet) {
        if (mHelper.isAirplaneModeEnabled() && !mWifiManager.isWifiEnabled()
                && internetType != InternetUpdater.INTERNET_ETHERNET) {
            log("Airplane mode is enabled.");
            log("Airplane mode is enabled.");
            return listBuilder.build();
            return listBuilder.build();
        }
        }
@@ -105,15 +108,17 @@ public class ProviderModelSlice extends WifiSlice {
        log("hasCarrier: " + hasCarrier);
        log("hasCarrier: " + hasCarrier);


        // First section:  Add a Ethernet or Wi-Fi item which state is connected.
        // First section:  Add a Ethernet or Wi-Fi item which state is connected.
        boolean isConnectedWifiAddedTop = false;
        final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
        final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
        if (hasEthernet) {
        if (internetType == InternetUpdater.INTERNET_ETHERNET) {
            log("get Ethernet item which is connected");
            log("get Ethernet item which is connected");
            listBuilder.addRow(createEthernetRow());
            listBuilder.addRow(createEthernetRow());
            maxListSize--;
            maxListSize--;
        } else {
        } else {
            if (connectedWifiItem != null) {
            if (connectedWifiItem != null && internetType == InternetUpdater.INTERNET_WIFI) {
                log("get Wi-Fi item which is connected");
                log("get Wi-Fi item which is connected to internet");
                listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
                listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
                isConnectedWifiAddedTop = true;
                maxListSize--;
                maxListSize--;
            }
            }
        }
        }
@@ -128,7 +133,7 @@ public class ProviderModelSlice extends WifiSlice {
        }
        }


        // Third section:  Add the connected Wi-Fi item to Wi-Fi list if the Ethernet is connected.
        // Third section:  Add the connected Wi-Fi item to Wi-Fi list if the Ethernet is connected.
        if (connectedWifiItem != null && hasEthernet) {
        if (connectedWifiItem != null && !isConnectedWifiAddedTop) {
            log("get Wi-Fi item which is connected");
            log("get Wi-Fi item which is connected");
            listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
            listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
            maxListSize--;
            maxListSize--;
@@ -222,12 +227,12 @@ public class ProviderModelSlice extends WifiSlice {
        return SliceBackgroundWorker.getInstance(getUri());
        return SliceBackgroundWorker.getInstance(getUri());
    }
    }


    private boolean isEthernetConnected() {
    private @InternetUpdater.InternetType int getInternetType() {
        final NetworkProviderWorker worker = getWorker();
        final NetworkProviderWorker worker = getWorker();
        if (worker == null) {
        if (worker == null) {
            return false;
            return InternetUpdater.INTERNET_NETWORKS_AVAILABLE;
        }
        }
        return worker.isEthernetConnected();
        return worker.getInternetType();
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -243,6 +248,20 @@ public class ProviderModelSlice extends WifiSlice {
                .setSubtitle(mContext.getText(R.string.to_switch_networks_disconnect_ethernet));
                .setSubtitle(mContext.getText(R.string.to_switch_networks_disconnect_ethernet));
    }
    }


    @Override
    protected IconCompat getWifiSliceItemLevelIcon(WifiSliceItem wifiSliceItem) {
        if (wifiSliceItem.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED
                && getInternetType() != InternetUpdater.INTERNET_WIFI) {
            final @ColorInt int tint = Utils.getColorAttrDefaultColor(mContext,
                    android.R.attr.colorControlNormal);
            final Drawable drawable = mContext.getDrawable(
                    Utils.getWifiIconResource(wifiSliceItem.getLevel()));
            drawable.setTint(tint);
            return Utils.createIconWithDrawable(drawable);
        }
        return super.getWifiSliceItemLevelIcon(wifiSliceItem);
    }

    /**
    /**
     * Wrap the subscriptionManager call for test mocking.
     * Wrap the subscriptionManager call for test mocking.
     */
     */
+3 −3
Original line number Original line Diff line number Diff line
@@ -288,9 +288,9 @@ public class NetworkProviderWorker extends WifiScanWorker implements
    }
    }


    /**
    /**
     * Returns true, if the ethernet network is connected.
     * Returns the internet type.
     */
     */
    public boolean isEthernetConnected() {
    public @InternetUpdater.InternetType int getInternetType() {
        return mInternetType == INTERNET_ETHERNET;
        return mInternetType;
    }
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -164,7 +164,7 @@ public class WifiSlice implements CustomSliceable {
        return rowBuilder;
        return rowBuilder;
    }
    }


    private IconCompat getWifiSliceItemLevelIcon(WifiSliceItem wifiSliceItem) {
    protected IconCompat getWifiSliceItemLevelIcon(WifiSliceItem wifiSliceItem) {
        final @ColorInt int tint;
        final @ColorInt int tint;
        if (wifiSliceItem.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) {
        if (wifiSliceItem.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) {
            tint = Utils.getColorAccentDefaultColor(mContext);
            tint = Utils.getColorAccentDefaultColor(mContext);
+34 −10
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager;


import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Lifecycle;
@@ -107,57 +108,80 @@ public class InternetUpdaterTest {
    }
    }


    @Test
    @Test
    public void update_apmOnWifiOff_getInternetApm() {
    public void updateInternetAvailable_wifiConnectedAndNoValidated_internetUnavailable() {
        final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
        networkCapabilities.addTransportType(TRANSPORT_WIFI);
        networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);

        mInternetUpdater.updateInternetAvailable(networkCapabilities);

        assertThat(mInternetUpdater.mInternetAvailable).isEqualTo(false);
    }

    @Test
    public void updateInternetAvailable_wifiConnectedAndValidated_internetAvailable() {
        final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
        networkCapabilities.addTransportType(TRANSPORT_WIFI);
        networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
        networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);

        mInternetUpdater.updateInternetAvailable(networkCapabilities);

        assertThat(mInternetUpdater.mInternetAvailable).isEqualTo(true);
    }

    @Test
    public void updateInternetType_apmOnWifiOff_getInternetApm() {
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(WifiManager.WIFI_STATE_DISABLED).when(mWifiManager).getWifiState();
        doReturn(WifiManager.WIFI_STATE_DISABLED).when(mWifiManager).getWifiState();
        mInternetUpdater.mInternetAvailable = false;
        mInternetUpdater.mInternetAvailable = false;


        mInternetUpdater.update();
        mInternetUpdater.updateInternetType();


        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_OFF);
        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_OFF);
    }
    }


    @Test
    @Test
    public void update_apmOnWifiOnNotConnected_getInternetNetworksAvailable() {
    public void updateInternetType_apmOnWifiOnNotConnected_getInternetNetworksAvailable() {
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
        doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
        mInternetUpdater.mInternetAvailable = false;
        mInternetUpdater.mInternetAvailable = false;


        mInternetUpdater.update();
        mInternetUpdater.updateInternetType();


        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_NETWORKS_AVAILABLE);
        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_NETWORKS_AVAILABLE);
    }
    }


    @Test
    @Test
    public void update_apmOnWifiConnected_getInternetWifi() {
    public void updateInternetType_apmOnWifiConnected_getInternetWifi() {
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mWifiManager).isWifiEnabled();
        doReturn(true).when(mWifiManager).isWifiEnabled();
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mTransport = TRANSPORT_WIFI;
        mInternetUpdater.mTransport = TRANSPORT_WIFI;


        mInternetUpdater.update();
        mInternetUpdater.updateInternetType();


        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_WIFI);
        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_WIFI);
    }
    }


    @Test
    @Test
    public void update_apmOnCellularConnected_getInternetCellular() {
    public void updateInternetType_apmOnCellularConnected_getInternetCellular() {
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mTransport = TRANSPORT_CELLULAR;
        mInternetUpdater.mTransport = TRANSPORT_CELLULAR;


        mInternetUpdater.update();
        mInternetUpdater.updateInternetType();


        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_CELLULAR);
        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_CELLULAR);
    }
    }


    @Test
    @Test
    public void update_apmOnEthernetConnected_getInternetEthernet() {
    public void updateInternetType_apmOnEthernetConnected_getInternetEthernet() {
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        doReturn(true).when(mAirplaneModeEnabler).isAirplaneModeOn();
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mInternetAvailable = true;
        mInternetUpdater.mTransport = TRANSPORT_ETHERNET;
        mInternetUpdater.mTransport = TRANSPORT_ETHERNET;


        mInternetUpdater.update();
        mInternetUpdater.updateInternetType();


        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_ETHERNET);
        assertThat(mInternetUpdater.getInternetType()).isEqualTo(INTERNET_ETHERNET);
    }
    }
Loading