Loading res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -12554,6 +12554,8 @@ <string name="airplane_mode_network_available">Airplane mode networks available</string> <!-- Summary for warning to disconnect ethernet first then switch to other networks. [CHAR LIMIT=60] --> <string name="to_switch_networks_disconnect_ethernet">To switch networks, disconnect ethernet</string> <!-- Summary for cannot switch networks to Wi-Fi nor mobile data networks while connected to an ethernet network. [CHAR LIMIT=60] --> <string name="cannot_switch_networks_while_connected">Cannot switch networks while connected</string> <!-- Summary text separator for preferences including a short description (eg. "Connected / 5G"). [CHAR LIMIT=50] --> res/xml/network_provider_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,12 @@ android:layout="@layout/view_airplane_mode_networks_button" settings:allowDividerBelow="true"/> <Preference android:key="connected_ethernet_network" android:title="@string/ethernet" android:summary="@string/cannot_switch_networks_while_connected" android:icon="@drawable/ic_settings_ethernet"/> <PreferenceCategory android:key="connected_access_point" android:layout="@layout/preference_category_no_label"/> Loading src/com/android/settings/network/ConnectedEthernetNetworkController.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.network; import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET; import android.content.Context; import android.graphics.drawable.Drawable; import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; /** * PreferenceController to show the connected ethernet network. */ public class ConnectedEthernetNetworkController extends AbstractPreferenceController implements InternetUpdater.OnInternetTypeChangedListener { public static final String KEY = "connected_ethernet_network"; private Preference mPreference; private InternetUpdater mInternetUpdater; private @InternetUpdater.InternetType int mInternetType; public ConnectedEthernetNetworkController(Context context, Lifecycle lifecycle) { super(context); mInternetUpdater = new InternetUpdater(context, lifecycle, this); mInternetType = mInternetUpdater.getInternetType(); } @Override public boolean isAvailable() { return mInternetType == INTERNET_ETHERNET; } @Override public String getPreferenceKey() { return KEY; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(KEY); final Drawable drawable = mContext.getDrawable(R.drawable.ic_settings_ethernet); if (drawable != null) { drawable.setTintList( Utils.getColorAttr(mContext, android.R.attr.colorControlActivated)); mPreference.setIcon(drawable); } } /** * Called when internet type is changed. * * @param internetType the internet type */ public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) { mInternetType = internetType; if (mPreference != null) { mPreference.setVisible(isAvailable()); } } } src/com/android/settings/network/NetworkProviderSettings.java +11 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mViewAirplaneModeNetworksButtonPreference; @VisibleForTesting LayoutPreference mResetInternetPreference; @VisibleForTesting ConnectedEthernetNetworkController mConnectedEthernetNetworkController; /** * Mobile networks list for provider model Loading Loading @@ -267,6 +269,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } addNetworkMobileProviderController(); addViewAirplaneModeNetworksButtonController(); addConnectedEthernetNetworkController(); } private void addNetworkMobileProviderController() { Loading @@ -287,6 +290,14 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mViewAirplaneModeNetworksButtonPreference.displayPreference(getPreferenceScreen()); } private void addConnectedEthernetNetworkController() { if (mConnectedEthernetNetworkController == null) { mConnectedEthernetNetworkController = new ConnectedEthernetNetworkController(getContext(), getSettingsLifecycle()); } mConnectedEthernetNetworkController.displayPreference(getPreferenceScreen()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Loading tests/unit/src/com/android/settings/network/ConnectedEthernetNetworkControllerTest.java 0 → 100644 +137 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.network; import static com.android.settings.network.InternetUpdater.INTERNET_APM; import static com.android.settings.network.InternetUpdater.INTERNET_APM_NETWORKS; 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.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Looper; import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @RunWith(AndroidJUnit4.class) public class ConnectedEthernetNetworkControllerTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); private Context mContext; private ConnectedEthernetNetworkController mController; private PreferenceScreen mScreen; private Preference mPreference; @Before public void setUp() { mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(ConnectivityManager.class)).thenReturn( mock(ConnectivityManager.class)); when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mock(WifiManager.class)); mController = new ConnectedEthernetNetworkController(mContext, mock(Lifecycle.class)); if (Looper.myLooper() == null) { Looper.prepare(); } final PreferenceManager preferenceManager = new PreferenceManager(mContext); mScreen = preferenceManager.createPreferenceScreen(mContext); mPreference = new Preference(mContext); mPreference.setKey(ConnectedEthernetNetworkController.KEY); mScreen.addPreference(mPreference); } @Test public void isAvailable_internetApm_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_APM); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetApmNetworks_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_APM_NETWORKS); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetWifi_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_WIFI); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetCellular_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_CELLULAR); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetEthernet_shouldBeTrue() { mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mController.isAvailable()).isTrue(); } @Test public void isVisible_internetWifiToEthernet_shouldBeFalseThenTrue() { mController.displayPreference(mScreen); mController.onInternetTypeChanged(INTERNET_WIFI); assertThat(mPreference.isVisible()).isFalse(); mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mPreference.isVisible()).isTrue(); } @Test public void isVisible_internetEthernetToCellular_shouldBeTrueThenFalse() { mController.displayPreference(mScreen); mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mPreference.isVisible()).isTrue(); mController.onInternetTypeChanged(INTERNET_CELLULAR); assertThat(mPreference.isVisible()).isFalse(); } } Loading
res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -12554,6 +12554,8 @@ <string name="airplane_mode_network_available">Airplane mode networks available</string> <!-- Summary for warning to disconnect ethernet first then switch to other networks. [CHAR LIMIT=60] --> <string name="to_switch_networks_disconnect_ethernet">To switch networks, disconnect ethernet</string> <!-- Summary for cannot switch networks to Wi-Fi nor mobile data networks while connected to an ethernet network. [CHAR LIMIT=60] --> <string name="cannot_switch_networks_while_connected">Cannot switch networks while connected</string> <!-- Summary text separator for preferences including a short description (eg. "Connected / 5G"). [CHAR LIMIT=50] -->
res/xml/network_provider_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,12 @@ android:layout="@layout/view_airplane_mode_networks_button" settings:allowDividerBelow="true"/> <Preference android:key="connected_ethernet_network" android:title="@string/ethernet" android:summary="@string/cannot_switch_networks_while_connected" android:icon="@drawable/ic_settings_ethernet"/> <PreferenceCategory android:key="connected_access_point" android:layout="@layout/preference_category_no_label"/> Loading
src/com/android/settings/network/ConnectedEthernetNetworkController.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.network; import static com.android.settings.network.InternetUpdater.INTERNET_ETHERNET; import android.content.Context; import android.graphics.drawable.Drawable; import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; /** * PreferenceController to show the connected ethernet network. */ public class ConnectedEthernetNetworkController extends AbstractPreferenceController implements InternetUpdater.OnInternetTypeChangedListener { public static final String KEY = "connected_ethernet_network"; private Preference mPreference; private InternetUpdater mInternetUpdater; private @InternetUpdater.InternetType int mInternetType; public ConnectedEthernetNetworkController(Context context, Lifecycle lifecycle) { super(context); mInternetUpdater = new InternetUpdater(context, lifecycle, this); mInternetType = mInternetUpdater.getInternetType(); } @Override public boolean isAvailable() { return mInternetType == INTERNET_ETHERNET; } @Override public String getPreferenceKey() { return KEY; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); mPreference = screen.findPreference(KEY); final Drawable drawable = mContext.getDrawable(R.drawable.ic_settings_ethernet); if (drawable != null) { drawable.setTintList( Utils.getColorAttr(mContext, android.R.attr.colorControlActivated)); mPreference.setIcon(drawable); } } /** * Called when internet type is changed. * * @param internetType the internet type */ public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) { mInternetType = internetType; if (mPreference != null) { mPreference.setVisible(isAvailable()); } } }
src/com/android/settings/network/NetworkProviderSettings.java +11 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mViewAirplaneModeNetworksButtonPreference; @VisibleForTesting LayoutPreference mResetInternetPreference; @VisibleForTesting ConnectedEthernetNetworkController mConnectedEthernetNetworkController; /** * Mobile networks list for provider model Loading Loading @@ -267,6 +269,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } addNetworkMobileProviderController(); addViewAirplaneModeNetworksButtonController(); addConnectedEthernetNetworkController(); } private void addNetworkMobileProviderController() { Loading @@ -287,6 +290,14 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mViewAirplaneModeNetworksButtonPreference.displayPreference(getPreferenceScreen()); } private void addConnectedEthernetNetworkController() { if (mConnectedEthernetNetworkController == null) { mConnectedEthernetNetworkController = new ConnectedEthernetNetworkController(getContext(), getSettingsLifecycle()); } mConnectedEthernetNetworkController.displayPreference(getPreferenceScreen()); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Loading
tests/unit/src/com/android/settings/network/ConnectedEthernetNetworkControllerTest.java 0 → 100644 +137 −0 Original line number Diff line number Diff line /* * Copyright (C) 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.network; import static com.android.settings.network.InternetUpdater.INTERNET_APM; import static com.android.settings.network.InternetUpdater.INTERNET_APM_NETWORKS; 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.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.net.ConnectivityManager; import android.net.wifi.WifiManager; import android.os.Looper; import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @RunWith(AndroidJUnit4.class) public class ConnectedEthernetNetworkControllerTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); private Context mContext; private ConnectedEthernetNetworkController mController; private PreferenceScreen mScreen; private Preference mPreference; @Before public void setUp() { mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(ConnectivityManager.class)).thenReturn( mock(ConnectivityManager.class)); when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mock(WifiManager.class)); mController = new ConnectedEthernetNetworkController(mContext, mock(Lifecycle.class)); if (Looper.myLooper() == null) { Looper.prepare(); } final PreferenceManager preferenceManager = new PreferenceManager(mContext); mScreen = preferenceManager.createPreferenceScreen(mContext); mPreference = new Preference(mContext); mPreference.setKey(ConnectedEthernetNetworkController.KEY); mScreen.addPreference(mPreference); } @Test public void isAvailable_internetApm_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_APM); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetApmNetworks_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_APM_NETWORKS); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetWifi_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_WIFI); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetCellular_shouldBeFalse() { mController.onInternetTypeChanged(INTERNET_CELLULAR); assertThat(mController.isAvailable()).isFalse(); } @Test public void isAvailable_internetEthernet_shouldBeTrue() { mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mController.isAvailable()).isTrue(); } @Test public void isVisible_internetWifiToEthernet_shouldBeFalseThenTrue() { mController.displayPreference(mScreen); mController.onInternetTypeChanged(INTERNET_WIFI); assertThat(mPreference.isVisible()).isFalse(); mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mPreference.isVisible()).isTrue(); } @Test public void isVisible_internetEthernetToCellular_shouldBeTrueThenFalse() { mController.displayPreference(mScreen); mController.onInternetTypeChanged(INTERNET_ETHERNET); assertThat(mPreference.isVisible()).isTrue(); mController.onInternetTypeChanged(INTERNET_CELLULAR); assertThat(mPreference.isVisible()).isFalse(); } }