Loading src/com/android/settings/network/ProviderModelSlice.java +34 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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)); } } src/com/android/settings/network/telephony/NetworkProviderWorker.java +33 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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 Loading Loading @@ -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; } } tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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 Loading tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading
src/com/android/settings/network/ProviderModelSlice.java +34 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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) { Loading Loading @@ -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)); } }
src/com/android/settings/network/telephony/NetworkProviderWorker.java +33 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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); Loading @@ -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 Loading Loading @@ -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; } }
tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java +35 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); Loading @@ -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 Loading
tests/unit/src/com/android/settings/network/telephony/NetworkProviderWorkerTest.java +44 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading