Merge "For Internet Picker - Information about Wi-Fi scanning when Wi-Fi is off" into sc-qpr1-dev am: c5cc2f81fe

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/16048447

Change-Id: I8a9eabbbf330dbb2db33c4d0ce000403e55be99d
diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml
index 9cab924..2d211b5 100644
--- a/res/xml/network_provider_settings.xml
+++ b/res/xml/network_provider_settings.xml
@@ -81,4 +81,10 @@
     <com.android.settings.datausage.DataUsagePreference
         android:key="non_carrier_data_usage"
         android:title="@string/non_carrier_data_usage"/>
+
+    <com.android.settingslib.widget.FooterPreference
+        android:key="wifi_status_message_footer"
+        android:selectable="false"
+        settings:allowDividerAbove="false"
+        settings:searchable="false"/>
 </PreferenceScreen>
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 88211ad..8a4929a 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.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.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 @@
     @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 @@
     LayoutPreference mResetInternetPreference;
     @VisibleForTesting
     ConnectedEthernetNetworkController mConnectedEthernetNetworkController;
+    @VisibleForTesting
+    FooterPreference mWifiStatusMessagePreference;
 
     /**
      * Mobile networks list for provider model
@@ -305,6 +311,7 @@
         addNetworkMobileProviderController();
         addConnectedEthernetNetworkController();
         addWifiSwitchPreferenceController();
+        mWifiStatusMessagePreference = findPreference(PREF_KEY_WIFI_STATUS_MESSAGE);
     }
 
     private void updateAirplaneModeMsgPreference(boolean visible) {
@@ -717,6 +724,7 @@
 
         switch (wifiState) {
             case WifiManager.WIFI_STATE_ENABLED:
+                setWifiScanMessage(/* isWifiEnabled */ true);
                 updateWifiEntryPreferences();
                 break;
 
@@ -732,6 +740,7 @@
                 break;
 
             case WifiManager.WIFI_STATE_DISABLED:
+                setWifiScanMessage(/* isWifiEnabled */ false);
                 removeConnectedWifiEntryPreference();
                 removeWifiEntryPreference();
                 setAdditionalSettingsSummaries();
@@ -741,6 +750,34 @@
         }
     }
 
+    @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 19b044b..e048849 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.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 @@
         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 =
@@ -532,6 +534,35 @@
     }
 
     @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() {
         View fragmentView = mock(View.class);