[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
This commit is contained in:
@@ -24,6 +24,7 @@ import static com.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLI
|
|||||||
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;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
@@ -35,6 +36,7 @@ import androidx.slice.builders.ListBuilder;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.SubSettings;
|
import com.android.settings.SubSettings;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.network.telephony.MobileNetworkUtils;
|
import com.android.settings.network.telephony.MobileNetworkUtils;
|
||||||
import com.android.settings.network.telephony.NetworkProviderWorker;
|
import com.android.settings.network.telephony.NetworkProviderWorker;
|
||||||
import com.android.settings.slices.CustomSliceable;
|
import com.android.settings.slices.CustomSliceable;
|
||||||
@@ -105,13 +107,19 @@ public class ProviderModelSlice extends WifiSlice {
|
|||||||
final boolean hasCarrier = mHelper.hasCarrier();
|
final boolean hasCarrier = mHelper.hasCarrier();
|
||||||
log("hasCarrier: " + 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);
|
final WifiSliceItem connectedWifiItem = mHelper.getConnectedWifiItem(wifiList);
|
||||||
if (connectedWifiItem != null) {
|
if (connectedWifiItem != null) {
|
||||||
log("get Wi-Fi item witch is connected");
|
log("get Wi-Fi item which is connected");
|
||||||
listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
|
listBuilder.addRow(getWifiSliceItemRow(connectedWifiItem));
|
||||||
maxListSize--;
|
maxListSize--;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Second section: Add a carrier item.
|
// Second section: Add a carrier item.
|
||||||
if (hasCarrier) {
|
if (hasCarrier) {
|
||||||
@@ -228,4 +236,25 @@ public class ProviderModelSlice extends WifiSlice {
|
|||||||
NetworkProviderWorker getWorker() {
|
NetworkProviderWorker getWorker() {
|
||||||
return SliceBackgroundWorker.getInstance(getUri());
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.android.settings.network.telephony;
|
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.getIconKey;
|
||||||
import static com.android.settingslib.mobile.MobileMappings.mapIconSets;
|
import static com.android.settingslib.mobile.MobileMappings.mapIconSets;
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
|
import com.android.settings.network.InternetUpdater;
|
||||||
import com.android.settings.network.MobileDataContentObserver;
|
import com.android.settings.network.MobileDataContentObserver;
|
||||||
import com.android.settings.network.MobileDataEnabledListener;
|
import com.android.settings.network.MobileDataEnabledListener;
|
||||||
import com.android.settings.network.SubscriptionsChangeListener;
|
import com.android.settings.network.SubscriptionsChangeListener;
|
||||||
@@ -50,7 +52,8 @@ import java.util.concurrent.Executor;
|
|||||||
public class NetworkProviderWorker extends WifiScanWorker implements
|
public class NetworkProviderWorker extends WifiScanWorker implements
|
||||||
SignalStrengthListener.Callback, MobileDataEnabledListener.Client,
|
SignalStrengthListener.Callback, MobileDataEnabledListener.Client,
|
||||||
DataConnectivityListener.Client,
|
DataConnectivityListener.Client,
|
||||||
SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
|
SubscriptionsChangeListener.SubscriptionsChangeListenerClient,
|
||||||
|
InternetUpdater.OnInternetTypeChangedListener {
|
||||||
private static final String TAG = "NetworkProviderWorker";
|
private static final String TAG = "NetworkProviderWorker";
|
||||||
private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 4;
|
private static final int PROVIDER_MODEL_DEFAULT_EXPANDED_ROW_COUNT = 4;
|
||||||
private DataContentObserver mMobileDataObserver;
|
private DataContentObserver mMobileDataObserver;
|
||||||
@@ -67,6 +70,8 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
private TelephonyDisplayInfo mTelephonyDisplayInfo =
|
private TelephonyDisplayInfo mTelephonyDisplayInfo =
|
||||||
new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
|
||||||
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
|
TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
|
||||||
|
private InternetUpdater mInternetUpdater;
|
||||||
|
private @InternetUpdater.InternetType int mInternetType;
|
||||||
|
|
||||||
public NetworkProviderWorker(Context context, Uri uri) {
|
public NetworkProviderWorker(Context context, Uri uri) {
|
||||||
super(context, uri);
|
super(context, uri);
|
||||||
@@ -85,6 +90,9 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
mConnectivityListener = new DataConnectivityListener(context, this);
|
mConnectivityListener = new DataConnectivityListener(context, this);
|
||||||
mSignalStrengthListener = new SignalStrengthListener(context, this);
|
mSignalStrengthListener = new SignalStrengthListener(context, this);
|
||||||
mConfig = getConfig(mContext);
|
mConfig = getConfig(mContext);
|
||||||
|
|
||||||
|
mInternetUpdater = new InternetUpdater(mContext, getLifecycle(), this);
|
||||||
|
mInternetType = mInternetUpdater.getInternetType();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -260,4 +268,28 @@ public class NetworkProviderWorker extends WifiScanWorker implements
|
|||||||
return updateNetworkTypeName(mContext, mConfig, mTelephonyDisplayInfo,
|
return updateNetworkTypeName(mContext, mConfig, mTelephonyDisplayInfo,
|
||||||
mDefaultDataSubid);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -262,6 +262,30 @@ public class ProviderModelSliceTest {
|
|||||||
verify(mListBuilder, times(2)).addRow(any(ListBuilder.RowBuilder.class));
|
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
|
@Test
|
||||||
public void providerModelSlice_hasCorrectUri() {
|
public void providerModelSlice_hasCorrectUri() {
|
||||||
assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI);
|
assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI);
|
||||||
@@ -333,6 +357,7 @@ public class ProviderModelSliceTest {
|
|||||||
|
|
||||||
public class MockProviderModelSlice extends ProviderModelSlice {
|
public class MockProviderModelSlice extends ProviderModelSlice {
|
||||||
private MockNetworkProviderWorker mNetworkProviderWorker;
|
private MockNetworkProviderWorker mNetworkProviderWorker;
|
||||||
|
private boolean mHasCreateEthernetRow;
|
||||||
|
|
||||||
MockProviderModelSlice(Context context, MockNetworkProviderWorker networkProviderWorker) {
|
MockProviderModelSlice(Context context, MockNetworkProviderWorker networkProviderWorker) {
|
||||||
super(context);
|
super(context);
|
||||||
@@ -348,6 +373,16 @@ public class ProviderModelSliceTest {
|
|||||||
NetworkProviderWorker getWorker() {
|
NetworkProviderWorker getWorker() {
|
||||||
return mNetworkProviderWorker;
|
return mNetworkProviderWorker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
ListBuilder.RowBuilder createEthernetRow() {
|
||||||
|
mHasCreateEthernetRow = true;
|
||||||
|
return super.createEthernetRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasCreateEthernetRow() {
|
||||||
|
return mHasCreateEthernetRow;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
|
|
||||||
package com.android.settings.network.telephony;
|
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.android.settings.slices.CustomSliceRegistry.PROVIDER_MODEL_SLICE_URI;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@@ -225,6 +228,47 @@ public class NetworkProviderWorkerTest {
|
|||||||
assertThat(mMockNetworkProviderWorker.hasNotification()).isTrue();
|
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 {
|
public class MockNetworkProviderWorker extends NetworkProviderWorker {
|
||||||
private boolean mHasNotification = false;
|
private boolean mHasNotification = false;
|
||||||
private int mDefaultDataSubId = 1;
|
private int mDefaultDataSubId = 1;
|
||||||
|
Reference in New Issue
Block a user