Merge "WifiNetworkSuggestion setIsMetered change to tri-state" into rvc-dev
diff --git a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
index cedf9b0..8c494943 100644
--- a/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
+++ b/wifi/java/android/net/wifi/WifiNetworkSuggestion.java
@@ -100,7 +100,7 @@
         /**
          * Whether this network is metered or not.
          */
-        private boolean mIsMetered;
+        private int mMeteredOverride;
         /**
          * Priority of this network among other network suggestions provided by the app.
          * The lower the number, the higher the priority (i.e value of 0 = highest priority).
@@ -156,7 +156,7 @@
             mIsHiddenSSID = false;
             mIsAppInteractionRequired = false;
             mIsUserInteractionRequired = false;
-            mIsMetered = false;
+            mMeteredOverride = WifiConfiguration.METERED_OVERRIDE_NONE;
             mIsSharedWithUser = true;
             mIsSharedWithUserSet = false;
             mIsInitialAutojoinEnabled = true;
@@ -421,14 +421,18 @@
         /**
          * Specifies whether this network is metered.
          * <p>
-         * <li>If not set, defaults to false (i.e not metered).</li>
+         * <li>If not set, defaults to detect automatically.</li>
          *
          * @param isMetered {@code true} to indicate that the network is metered, {@code false}
-         *                  otherwise.
+         *                  for not metered.
          * @return Instance of {@link Builder} to enable chaining of the builder method.
          */
         public @NonNull Builder setIsMetered(boolean isMetered) {
-            mIsMetered = isMetered;
+            if (isMetered) {
+                mMeteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED;
+            } else {
+                mMeteredOverride = WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+            }
             return this;
         }
 
@@ -541,9 +545,7 @@
 
             wifiConfiguration.hiddenSSID = mIsHiddenSSID;
             wifiConfiguration.priority = mPriority;
-            wifiConfiguration.meteredOverride =
-                    mIsMetered ? WifiConfiguration.METERED_OVERRIDE_METERED
-                            : WifiConfiguration.METERED_OVERRIDE_NOT_METERED;
+            wifiConfiguration.meteredOverride = mMeteredOverride;
             wifiConfiguration.carrierId = mCarrierId;
             wifiConfiguration.trusted = !mIsNetworkUntrusted;
             return wifiConfiguration;
@@ -572,9 +574,7 @@
             wifiConfiguration.FQDN = mPasspointConfiguration.getHomeSp().getFqdn();
             wifiConfiguration.setPasspointUniqueId(mPasspointConfiguration.getUniqueId());
             wifiConfiguration.priority = mPriority;
-            wifiConfiguration.meteredOverride =
-                    mIsMetered ? WifiConfiguration.METERED_OVERRIDE_METERED
-                            : WifiConfiguration.METERED_OVERRIDE_NONE;
+            wifiConfiguration.meteredOverride = mMeteredOverride;
             wifiConfiguration.trusted = !mIsNetworkUntrusted;
             mPasspointConfiguration.setCarrierId(mCarrierId);
             mPasspointConfiguration.setMeteredOverride(wifiConfiguration.meteredOverride);
diff --git a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
index aca1909..d1d1c61 100644
--- a/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
+++ b/wifi/tests/src/android/net/wifi/WifiNetworkSuggestionTest.java
@@ -56,7 +56,7 @@
                 .get(WifiConfiguration.KeyMgmt.NONE));
         assertTrue(suggestion.isAppInteractionRequired);
         assertFalse(suggestion.isUserInteractionRequired);
-        assertEquals(WifiConfiguration.METERED_OVERRIDE_NOT_METERED,
+        assertEquals(WifiConfiguration.METERED_OVERRIDE_NONE,
                 suggestion.wifiConfiguration.meteredOverride);
         assertEquals(-1, suggestion.wifiConfiguration.priority);
         assertFalse(suggestion.isUserAllowedToManuallyConnect);
@@ -86,7 +86,7 @@
                 suggestion.wifiConfiguration.preSharedKey);
         assertTrue(suggestion.isAppInteractionRequired);
         assertFalse(suggestion.isUserInteractionRequired);
-        assertEquals(WifiConfiguration.METERED_OVERRIDE_NOT_METERED,
+        assertEquals(WifiConfiguration.METERED_OVERRIDE_NONE,
                 suggestion.wifiConfiguration.meteredOverride);
         assertEquals(0, suggestion.wifiConfiguration.priority);
         assertFalse(suggestion.isUserAllowedToManuallyConnect);
@@ -125,6 +125,36 @@
 
     /**
      * Validate correctness of WifiNetworkSuggestion object created by
+     * {@link WifiNetworkSuggestion.Builder#build()} for WPA_PSK network which requires
+     * user interaction and is not metered.
+     */
+    @Test
+    public void
+            testWifiNetworkSuggestionBuilderForWpa2PskNetworkWithNotMeteredAndReqUserInteraction() {
+        WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
+                .setSsid(TEST_SSID)
+                .setWpa2Passphrase(TEST_PRESHARED_KEY)
+                .setIsUserInteractionRequired(true)
+                .setIsInitialAutojoinEnabled(false)
+                .setIsMetered(false)
+                .build();
+
+        assertEquals("\"" + TEST_SSID + "\"", suggestion.wifiConfiguration.SSID);
+        assertTrue(suggestion.wifiConfiguration.allowedKeyManagement
+                .get(WifiConfiguration.KeyMgmt.WPA_PSK));
+        assertEquals("\"" + TEST_PRESHARED_KEY + "\"",
+                suggestion.wifiConfiguration.preSharedKey);
+        assertFalse(suggestion.isAppInteractionRequired);
+        assertTrue(suggestion.isUserInteractionRequired);
+        assertEquals(WifiConfiguration.METERED_OVERRIDE_NOT_METERED,
+                suggestion.wifiConfiguration.meteredOverride);
+        assertEquals(-1, suggestion.wifiConfiguration.priority);
+        assertTrue(suggestion.isUserAllowedToManuallyConnect);
+        assertFalse(suggestion.isInitialAutoJoinEnabled);
+    }
+
+    /**
+     * Validate correctness of WifiNetworkSuggestion object created by
      * {@link WifiNetworkSuggestion.Builder#build()} for OWE network.
      */
     @Test