From bfd3020038bd9351c5d9ff4aedbc30b8dd3cf1cd Mon Sep 17 00:00:00 2001 From: changbetty Date: Wed, 13 Oct 2021 15:13:36 +0000 Subject: [PATCH] For Internet Picker - Information about Wi-Fi scanning when Wi-Fi is off Bug: 202323013 Test: manual test Test: make RunSettingsRoboTests ROBOTEST_FILTER=NetworkProviderSettingsTest Change-Id: I4a26ec43bb7e1758b8170a7ff9fa7d5846cb4a35 --- res/xml/network_provider_settings.xml | 6 +++ .../network/NetworkProviderSettings.java | 37 +++++++++++++++++++ .../network/NetworkProviderSettingsTest.java | 31 ++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml index 9cab9241534..2d211b5fc85 100644 --- a/res/xml/network_provider_settings.xml +++ b/res/xml/network_provider_settings.xml @@ -81,4 +81,10 @@ + + diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 88211ad17ed..8a4929a591b 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -61,7 +61,9 @@ import com.android.settings.core.FeatureFlags; import com.android.settings.core.SubSettingLauncher; import com.android.settings.datausage.DataUsagePreference; import com.android.settings.datausage.DataUsageUtils; +import com.android.settings.location.WifiScanningFragment; import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settings.utils.AnnotationSpan; import com.android.settings.wifi.AddNetworkFragment; import com.android.settings.wifi.AddWifiNetworkPreference; import com.android.settings.wifi.ConfigureWifiEntryFragment; @@ -79,6 +81,7 @@ import com.android.settingslib.RestrictedLockUtilsInternal; import com.android.settingslib.search.Indexable; import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.utils.ThreadUtils; +import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.LongPressWifiEntryPreference; import com.android.settingslib.wifi.WifiSavedConfigUtils; @@ -132,6 +135,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @VisibleForTesting static final String PREF_KEY_DATA_USAGE = "non_carrier_data_usage"; private static final String PREF_KEY_RESET_INTERNET = "resetting_your_internet"; + private static final String PREF_KEY_WIFI_STATUS_MESSAGE = "wifi_status_message_footer"; private static final int REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER = 0; @@ -231,6 +235,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment LayoutPreference mResetInternetPreference; @VisibleForTesting ConnectedEthernetNetworkController mConnectedEthernetNetworkController; + @VisibleForTesting + FooterPreference mWifiStatusMessagePreference; /** * Mobile networks list for provider model @@ -305,6 +311,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment addNetworkMobileProviderController(); addConnectedEthernetNetworkController(); addWifiSwitchPreferenceController(); + mWifiStatusMessagePreference = findPreference(PREF_KEY_WIFI_STATUS_MESSAGE); } private void updateAirplaneModeMsgPreference(boolean visible) { @@ -717,6 +724,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: + setWifiScanMessage(/* isWifiEnabled */ true); updateWifiEntryPreferences(); break; @@ -732,6 +740,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment break; case WifiManager.WIFI_STATE_DISABLED: + setWifiScanMessage(/* isWifiEnabled */ false); removeConnectedWifiEntryPreference(); removeWifiEntryPreference(); setAdditionalSettingsSummaries(); @@ -741,6 +750,34 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } + @VisibleForTesting + void setWifiScanMessage(boolean isWifiEnabled) { + final Context context = getContext(); + if (context == null) { + return; + } + if (isWifiEnabled || !mWifiManager.isScanAlwaysAvailable()) { + mWifiStatusMessagePreference.setVisible(false); + return; + } + if (TextUtils.isEmpty(mWifiStatusMessagePreference.getTitle())) { + AnnotationSpan.LinkInfo info = new AnnotationSpan.LinkInfo( + AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, + v -> launchWifiScanningFragment()); + CharSequence text = AnnotationSpan.linkify( + context.getText(R.string.wifi_scan_notify_message), info); + mWifiStatusMessagePreference.setTitle(text); + } + mWifiStatusMessagePreference.setVisible(true); + } + + private void launchWifiScanningFragment() { + new SubSettingLauncher(getContext()) + .setDestination(WifiScanningFragment.class.getName()) + .setSourceMetricsCategory(SettingsEnums.SETTINGS_NETWORK_CATEGORY) + .launch(); + } + @Override public void onWifiEntriesChanged() { if (mIsWifiEntryListStale) { diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 19b044b7abf..e048849ae9c 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -67,6 +67,7 @@ import com.android.settings.wifi.AddWifiNetworkPreference; import com.android.settings.wifi.ConnectedWifiEntryPreference; import com.android.settings.wifi.WifiConfigController2; import com.android.settings.wifi.WifiDialog2; +import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.LongPressWifiEntryPreference; import com.android.wifitrackerlib.WifiEntry; @@ -144,6 +145,7 @@ public class NetworkProviderSettingsTest { mNetworkProviderSettings.mAirplaneModeMsgPreference = mAirplaneModeMsgPreference; mNetworkProviderSettings.mAirplaneModeEnabler = mAirplaneModeEnabler; mNetworkProviderSettings.mInternetUpdater = mInternetUpdater; + mNetworkProviderSettings.mWifiStatusMessagePreference = new FooterPreference(mContext); doReturn(NetworkProviderSettings.PREF_KEY_CONNECTED_ACCESS_POINTS) .when(mConnectedWifiEntryPreferenceCategory).getKey(); mNetworkProviderSettings.mConnectedWifiEntryPreferenceCategory = @@ -531,6 +533,35 @@ public class NetworkProviderSettingsTest { verify(mNetworkProviderSettings.mWifiEntryPreferenceCategory, never()).setVisible(true); } + @Test + public void setWifiScanMessage_wifiOnScanOn_footerIsInvisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ true); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse(); + } + + @Test + public void setWifiScanMessage_wifiOffScanOn_footerIsVisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(true); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isTrue(); + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.getTitle().length()) + .isNotEqualTo(0); + } + + @Test + public void setWifiScanMessage_wifiOffScanOff_footerIsInvisible() { + when(mWifiManager.isScanAlwaysAvailable()).thenReturn(false); + + mNetworkProviderSettings.setWifiScanMessage(/* isWifiEnabled */ false); + + assertThat(mNetworkProviderSettings.mWifiStatusMessagePreference.isVisible()).isFalse(); + } + @Test @Config(shadows = ShadowPreferenceFragmentCompat.class) public void onStop_shouldRemoveCallbacks() {