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

Commit ca8a3d7e authored by Weng Su's avatar Weng Su
Browse files

[Provider Model] Add connected ethernet network to internet panel

- Show the connected ethernet network to first item of internet panel

- Screenshot:
  https://screenshot.googleplex.com/teritCBuvxxSyr6

Bug: 176796623
Test: manual test
- atest NetworkProviderWorkerTest \
        ProviderModelSliceTest

Change-Id: I423a7951f403bf86c288da52fc342520fd24f466
parent e9d44254
Loading
Loading
Loading
Loading
+34 −5
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLI
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
@@ -35,6 +36,7 @@ import androidx.slice.builders.ListBuilder;

import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.network.telephony.NetworkProviderWorker;
import com.android.settings.slices.CustomSliceable;
@@ -105,13 +107,19 @@ public class ProviderModelSlice extends WifiSlice {
        final boolean hasCarrier = mHelper.hasCarrier();
        log("hasCarrier: " + hasCarrier);

        // First section:  Add a Wi-Fi item which state is connected.
        // First section:  Add a Ethernet or Wi-Fi item which state is connected.
        if (isEthernetConnected()) {
            log("get Ethernet item which is connected");
            listBuilder.addRow(createEthernetRow());
            maxListSize--;
        } else {
            final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
            if (connectedWifiItem != null) {
            log("get Wi-Fi item witch is connected");
                log("get Wi-Fi item which is connected");
                listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
                maxListSize--;
            }
        }

        // Second section:  Add a carrier item.
        if (hasCarrier) {
@@ -228,4 +236,25 @@ public class ProviderModelSlice extends WifiSlice {
    NetworkProviderWorker getWorker() {
        return SliceBackgroundWorker.getInstance(getUri());
    }

    private boolean isEthernetConnected() {
        final NetworkProviderWorker worker = getWorker();
        if (worker == null) {
            return false;
        }
        return worker.isEthernetConnected();
    }

    @VisibleForTesting
    ListBuilder.RowBuilder createEthernetRow() {
        final ListBuilder.RowBuilder rowBuilder = new ListBuilder.RowBuilder();
        final Drawable drawable = mContext.getDrawable(R.drawable.ic_settings_ethernet);
        if (drawable != null) {
            drawable.setTintList(Utils.getColorAttr(mContext, android.R.attr.colorAccent));
            rowBuilder.setTitleItem(Utils.createIconWithDrawable(drawable), ListBuilder.ICON_IMAGE);
        }
        return rowBuilder
                .setTitle(mContext.getText(R.string.ethernet))
                .setSubtitle(mContext.getText(R.string.cannot_switch_networks_while_connected));
    }
}
+33 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.network.telephony;

import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET;
import static com.android.settingslib.mobile.MobileMappings.getIconKey;
import static com.android.settingslib.mobile.MobileMappings.mapIconSets;

@@ -33,6 +34,7 @@ import android.util.Log;

import androidx.annotation.VisibleForTesting;

import com.android.settings.network.InternetUpdater;
import com.android.settings.network.MobileDataContentObserver;
import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.network.SubscriptionsChangeListener;
@@ -50,7 +52,8 @@ import java.util.concurrent.Executor;
public class NetworkProviderWorker extends WifiScanWorker implements
        SignalStrengthListener.Callback, MobileDataEnabledListener.Client,
        DataConnectivityListener.Client,
        SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
        SubscriptionsChangeListener.SubscriptionsChangeListenerClient,
        InternetUpdater.OnInternetTypeChangedListener {
    private static final String TAG = "NetworkProviderWorker";
    private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 4;
    private DataContentObserver mMobileDataObserver;
@@ -67,6 +70,8 @@ public class NetworkProviderWorker extends WifiScanWorker implements
    private TelephonyDisplayInfo mTelephonyDisplayInfo =
            new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
                    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
    private InternetUpdater mInternetUpdater;
    private @InternetUpdater.InternetType int mInternetType;

    public NetworkProviderWorker(Context context, Uri uri) {
        super(context, uri);
@@ -85,6 +90,9 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        mConnectivityListener = new DataConnectivityListener(context, this);
        mSignalStrengthListener = new SignalStrengthListener(context, this);
        mConfig = getConfig(mContext);

        mInternetUpdater = new InternetUpdater(mContext, getLifecycle(), this);
        mInternetType = mInternetUpdater.getInternetType();
    }

    @Override
@@ -260,4 +268,28 @@ public class NetworkProviderWorker extends WifiScanWorker implements
        return updateNetworkTypeName(mContext, mConfig, mTelephonyDisplayInfo,
                mDefaultDataSubid);
    }

    /**
     * Called when internet type is changed.
     *
     * @param internetType the internet type
     */
    public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) {
        if (mInternetType == internetType) {
            return;
        }
        boolean changeWithEthernet =
                mInternetType == INTERNET_ETHERNET || internetType == INTERNET_ETHERNET;
        mInternetType = internetType;
        if (changeWithEthernet) {
            updateSlice();
        }
    }

    /**
     * Returns true, if the ethernet network is connected.
     */
    public boolean isEthernetConnected() {
        return mInternetType == INTERNET_ETHERNET;
    }
}
+35 −0
Original line number Diff line number Diff line
@@ -262,6 +262,30 @@ public class ProviderModelSliceTest {
        verify(mListBuilder, times(2)).addRow(any(ListBuilder.RowBuilder.class));
    }

    @Test
    @UiThreadTest
    public void getSlice_connectedEthernet_getOneEthernetAndOneCarrierAndTwoWiFi() {
        mWifiList.clear();
        mockWifiItemCondition(mMockWifiSliceItem1, "wifi1", "wifi1",
                WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi1_key", true);
        mWifiList.add(mMockWifiSliceItem1);
        mockWifiItemCondition(mMockWifiSliceItem2, "wifi2", "wifi2",
                WifiEntry.CONNECTED_STATE_DISCONNECTED, "wifi2_key", true);
        mWifiList.add(mMockWifiSliceItem2);
        mMockNetworkProviderWorker.updateSelfResults(mWifiList);
        when(mProviderModelSliceHelper.isAirplaneModeEnabled()).thenReturn(false);
        when(mProviderModelSliceHelper.hasCarrier()).thenReturn(true);
        when(mProviderModelSliceHelper.isDataSimActive()).thenReturn(true);
        when(mMockNetworkProviderWorker.isEthernetConnected()).thenReturn(true);

        final Slice slice = mMockProviderModelSlice.getSlice();

        assertThat(slice).isNotNull();
        assertThat(mMockProviderModelSlice.hasCreateEthernetRow()).isTrue();
        verify(mListBuilder, times(1)).addRow(mMockCarrierRowBuild);
        verify(mListBuilder, times(4)).addRow(any(ListBuilder.RowBuilder.class));
    }

    @Test
    public void providerModelSlice_hasCorrectUri() {
        assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI);
@@ -333,6 +357,7 @@ public class ProviderModelSliceTest {

    public class MockProviderModelSlice extends ProviderModelSlice {
        private MockNetworkProviderWorker mNetworkProviderWorker;
        private boolean mHasCreateEthernetRow;

        MockProviderModelSlice(Context context, MockNetworkProviderWorker networkProviderWorker) {
            super(context);
@@ -348,6 +373,16 @@ public class ProviderModelSliceTest {
        NetworkProviderWorker getWorker() {
            return mNetworkProviderWorker;
        }

        @Override
        ListBuilder.RowBuilder createEthernetRow() {
            mHasCreateEthernetRow = true;
            return super.createEthernetRow();
        }

        public boolean hasCreateEthernetRow() {
            return mHasCreateEthernetRow;
        }
    }

    @Test
+44 −0
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.settings.network.telephony;

import static com.android.settings.network.InternetUpdater.INTERNET_CELLULAR;
import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET;
import static com.android.settings.network.InternetUpdater.INTERNET_WIFI;
import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;

import static com.google.common.truth.Truth.assertThat;
@@ -225,6 +228,47 @@ public class NetworkProviderWorkerTest {
        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
    }

    @Test
    public void onInternetTypeChanged_connectedFromWifiToEthernet_callUpdateSlice() {
        mMockNetworkProviderWorker.receiveNotification(false);
        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_WIFI);

        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET);

        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
    }

    @Test
    public void onInternetTypeChanged_connectedFromEthernetToCarrier_callUpdateSlice() {
        mMockNetworkProviderWorker.receiveNotification(false);
        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET);

        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_CELLULAR);

        assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
    }

    @Test
    public void isEthernetConnected_connectedEthernet_shouldBeTrue() {
        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_ETHERNET);

        assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isTrue();
    }

    @Test
    public void isEthernetConnected_connectedWifi_shouldBeFalse() {
        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_WIFI);

        assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isFalse();
    }

    @Test
    public void isEthernetConnected_connectedCarrier_shouldBeFalse() {
        mMockNetworkProviderWorker.onInternetTypeChanged(INTERNET_CELLULAR);

        assertThat(mMockNetworkProviderWorker.isEthernetConnected()).isFalse();
    }

    public class MockNetworkProviderWorker extends NetworkProviderWorker {
        private boolean mHasNotification = false;
        private int mDefaultDataSubId = 1;