Add overlay to control if ignore saved open network

Bug: 154654080
Test: atest com.android.server.wifi
Change-Id: I0e41dc95c1b6a2e0e9a0ab79aacab7fa7a846154
diff --git a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
index fc1b32d..b83af52 100644
--- a/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
+++ b/service/java/com/android/server/wifi/WifiNetworkSuggestionsManager.java
@@ -2028,6 +2028,10 @@
      */
     public boolean shouldBeIgnoredBySecureSuggestionFromSameCarrier(
             @NonNull WifiConfiguration configuration, List<ScanDetail> scanDetails) {
+        if (!mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable)) {
+            return false;
+        }
         if (configuration == null || scanDetails == null || !configuration.isOpenNetwork()) {
             return false;
         }
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index c58ab19..5d8a47c 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -412,4 +412,6 @@
          cause the wifi stack to turn wifi off and wait for user input.
          Set to 0 to turn off recovery attempts and always turn off wifi on failures -->
     <integer translatable="false" name="config_wifiMaxNativeFailureSelfRecoveryPerHour">2</integer>
+    <!-- Ignore the open saved network if from carrier provisioning app, there is a same open suggestion and a secure suggestion from same carrier available -->
+    <bool translatable="false" name="config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable">true</bool>
 </resources>
diff --git a/service/res/values/overlayable.xml b/service/res/values/overlayable.xml
index 687b6b9..6045472 100644
--- a/service/res/values/overlayable.xml
+++ b/service/res/values/overlayable.xml
@@ -129,6 +129,7 @@
           <item type="bool" name="config_wifiSaeUpgradeEnabled" />
           <item type="bool" name="config_wifiSaeUpgradeOffloadEnabled" />
           <item type="integer" name="config_wifiMaxNativeFailureSelfRecoveryPerHour" />
+          <item type="bool" name="config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable" />
           <!-- Params from config.xml that can be overlayed -->
 
           <!-- Params from strings.xml that can be overlayed -->
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
index 5018337..79c9c0a 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkSuggestionsManagerTest.java
@@ -3721,6 +3721,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithoutSameOpenSuggestion() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3746,6 +3749,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithoutSecureSuggestion() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3771,6 +3777,9 @@
 
     @Test
     public void testShouldNotBeIgnoredWithoutCarrierProvisioningPermission() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiCarrierInfoManager.getCarrierIdForPackageWithCarrierPrivileges(anyString()))
                 .thenReturn(TEST_CARRIER_ID);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3796,6 +3805,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromDifferentCarrierId() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3821,6 +3833,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithAutojoinDisabled() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3846,6 +3861,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithDifferentMeterness() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3872,6 +3890,9 @@
 
     @Test
     public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithNetworkDisabled() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
@@ -3903,7 +3924,38 @@
     }
 
     @Test
+    public void testShouldNotBeIgnoredBySecureSuggestionFromSameCarrierWithOverlayFalse() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(false);
+        when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
+                .thenReturn(true);
+        WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();
+        ScanDetail scanDetail1 = createScanDetailForNetwork(network1);
+        network1.carrierId = TEST_CARRIER_ID;
+        WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion(
+                network1, null, false, false, true, true);
+        WifiConfiguration network2 = WifiConfigurationTestUtil.createPskNetwork();
+        ScanDetail scanDetail2 = createScanDetailForNetwork(network2);
+        network2.carrierId = TEST_CARRIER_ID;
+        WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion(
+                network2, null, false, false, true, true);
+
+        List<ScanDetail> scanDetails = Arrays.asList(scanDetail1, scanDetail2);
+        // Both open and secure suggestions with same carrierId,
+        List<WifiNetworkSuggestion> suggestionList = Arrays.asList(suggestion1, suggestion2);
+        assertEquals(WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS,
+                mWifiNetworkSuggestionsManager.add(suggestionList, TEST_UID_1,
+                        TEST_PACKAGE_1, TEST_FEATURE));
+        assertFalse(mWifiNetworkSuggestionsManager
+                .shouldBeIgnoredBySecureSuggestionFromSameCarrier(network1, scanDetails));
+    }
+
+    @Test
     public void testShouldBeIgnoredBySecureSuggestionFromSameCarrier() {
+        when(mResources.getBoolean(
+                R.bool.config_wifiIgnoreOpenSavedNetworkWhenSecureSuggestionAvailable))
+                .thenReturn(true);
         when(mWifiPermissionsUtil.checkNetworkCarrierProvisioningPermission(anyInt()))
                 .thenReturn(true);
         WifiConfiguration network1 = WifiConfigurationTestUtil.createOpenNetwork();