From ca8a3d7e645c4c50acf6adbd858924b63659e443 Mon Sep 17 00:00:00 2001 From: Weng Su Date: Mon, 25 Jan 2021 06:15:55 +0800 Subject: [PATCH] [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 --- .../settings/network/ProviderModelSlice.java | 39 +++++++++++++--- .../telephony/NetworkProviderWorker.java | 34 +++++++++++++- .../network/ProviderModelSliceTest.java | 35 +++++++++++++++ .../telephony/NetworkProviderWorkerTest.java | 44 +++++++++++++++++++ 4 files changed, 146 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java index 443c2391b4f..7e71fefc156 100644 --- a/src/com/android/settings/network/ProviderModelSlice.java +++ b/src/com/android/settings/network/ProviderModelSlice.java @@ -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,12 +107,18 @@ public class ProviderModelSlice extends WifiSlice { final boolean hasCarrier = mHelper.hasCarrier(); log("hasCarrier: " + hasCarrier); - // First section: Add a Wi-Fi item which state is connected. - final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList); - if (connectedWifiItem != null) { - log("get Wi-Fi item witch is connected"); - listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem)); + // 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 which is connected"); + listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem)); + maxListSize--; + } } // Second section: Add a carrier item. @@ -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)); + } } diff --git a/src/com/android/settings/network/telephony/NetworkProviderWorker.java b/src/com/android/settings/network/telephony/NetworkProviderWorker.java index 18aeb4d751f..e2e0264375c 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWorker.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWorker.java @@ -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; + } } diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java index fcca1c2ffd2..9f70bcf9ba0 100644 --- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java @@ -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 diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java index a48a62a38a5..1905e444ce0 100644 --- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java @@ -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;