summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java11
-rw-r--r--service/java/com/android/server/wifi/WifiConfigManager.java46
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java6
-rw-r--r--tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java34
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java94
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java3
-rw-r--r--tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java10
7 files changed, 165 insertions, 39 deletions
diff --git a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
index f248e08be..2c231a0c4 100644
--- a/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
+++ b/service/java/com/android/server/wifi/NetworkSuggestionEvaluator.java
@@ -20,7 +20,6 @@ import android.annotation.NonNull;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiNetworkSuggestion;
-import android.os.Process;
import android.util.LocalLog;
import java.util.Comparator;
@@ -124,18 +123,22 @@ public class NetworkSuggestionEvaluator implements WifiNetworkSelector.NetworkEv
existingSavedNetwork.networkId));
return existingSavedNetwork;
}
- return addCandidateToWifiConfigManager(candidateNetworkSuggestion.wifiConfiguration);
+ return addCandidateToWifiConfigManager(
+ candidateNetworkSuggestion.wifiConfiguration,
+ candidateNetworkSuggestion.suggestorUid,
+ candidateNetworkSuggestion.suggestorPackageName);
}
// Add and enable this network to the central database (i.e WifiConfigManager).
// Returns the copy of WifiConfiguration with the allocated network ID filled in.
private WifiConfiguration addCandidateToWifiConfigManager(
- @NonNull WifiConfiguration wifiConfiguration) {
+ @NonNull WifiConfiguration wifiConfiguration, int uid, @NonNull String packageName) {
// Mark the network ephemeral because we don't want these persisted by WifiConfigManager.
wifiConfiguration.ephemeral = true;
+ wifiConfiguration.fromWifiNetworkSuggestion = true;
NetworkUpdateResult result =
- mWifiConfigManager.addOrUpdateNetwork(wifiConfiguration, Process.WIFI_UID);
+ mWifiConfigManager.addOrUpdateNetwork(wifiConfiguration, uid, packageName);
if (!result.isSuccess()) {
mLocalLog.log("Failed to add network suggestion");
return null;
diff --git a/service/java/com/android/server/wifi/WifiConfigManager.java b/service/java/com/android/server/wifi/WifiConfigManager.java
index bd5ffe905..9ad1f44e4 100644
--- a/service/java/com/android/server/wifi/WifiConfigManager.java
+++ b/service/java/com/android/server/wifi/WifiConfigManager.java
@@ -16,6 +16,7 @@
package com.android.server.wifi;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManagerInternal;
@@ -1008,7 +1009,7 @@ public class WifiConfigManager {
* configuration.
*/
private WifiConfiguration createNewInternalWifiConfigurationFromExternal(
- WifiConfiguration externalConfig, int uid) {
+ WifiConfiguration externalConfig, int uid, @Nullable String packageName) {
WifiConfiguration newInternalConfig = new WifiConfiguration();
// First allocate a new network ID for the configuration.
@@ -1028,6 +1029,8 @@ public class WifiConfigManager {
newInternalConfig.ephemeral = externalConfig.ephemeral;
newInternalConfig.osu = externalConfig.osu;
newInternalConfig.trusted = externalConfig.trusted;
+ newInternalConfig.fromWifiNetworkSuggestion = externalConfig.fromWifiNetworkSuggestion;
+ newInternalConfig.fromWifiNetworkSpecifier = externalConfig.fromWifiNetworkSpecifier;
newInternalConfig.useExternalScores = externalConfig.useExternalScores;
newInternalConfig.shared = externalConfig.shared;
newInternalConfig.updateIdentifier = externalConfig.updateIdentifier;
@@ -1035,7 +1038,7 @@ public class WifiConfigManager {
// Add debug information for network addition.
newInternalConfig.creatorUid = newInternalConfig.lastUpdateUid = uid;
newInternalConfig.creatorName = newInternalConfig.lastUpdateName =
- mContext.getPackageManager().getNameForUid(uid);
+ packageName != null ? packageName : mContext.getPackageManager().getNameForUid(uid);
newInternalConfig.creationTime = newInternalConfig.updateTime =
createDebugTimeStampString(mClock.getWallClockMillis());
updateRandomizedMacAddress(newInternalConfig);
@@ -1078,7 +1081,8 @@ public class WifiConfigManager {
* configuration.
*/
private WifiConfiguration updateExistingInternalWifiConfigurationFromExternal(
- WifiConfiguration internalConfig, WifiConfiguration externalConfig, int uid) {
+ WifiConfiguration internalConfig, WifiConfiguration externalConfig, int uid,
+ @Nullable String packageName) {
WifiConfiguration newInternalConfig = new WifiConfiguration(internalConfig);
// Copy over all the public elements from the provided configuration.
@@ -1086,7 +1090,8 @@ public class WifiConfigManager {
// Add debug information for network update.
newInternalConfig.lastUpdateUid = uid;
- newInternalConfig.lastUpdateName = mContext.getPackageManager().getNameForUid(uid);
+ newInternalConfig.lastUpdateName =
+ packageName != null ? packageName : mContext.getPackageManager().getNameForUid(uid);
newInternalConfig.updateTime = createDebugTimeStampString(mClock.getWallClockMillis());
return newInternalConfig;
@@ -1098,10 +1103,12 @@ public class WifiConfigManager {
* network configuration. Otherwise, the networkId should refer to an existing configuration.
*
* @param config provided WifiConfiguration object.
- * @param uid UID of the app requesting the network addition/deletion.
+ * @param uid UID of the app requesting the network addition/modification.
+ * @param packageName Package name of the app requesting the network addition/modification.
* @return NetworkUpdateResult object representing status of the update.
*/
- private NetworkUpdateResult addOrUpdateNetworkInternal(WifiConfiguration config, int uid) {
+ private NetworkUpdateResult addOrUpdateNetworkInternal(WifiConfiguration config, int uid,
+ @Nullable String packageName) {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Adding/Updating network " + config.getPrintableSsid());
}
@@ -1115,7 +1122,8 @@ public class WifiConfigManager {
Log.e(TAG, "Cannot add network with invalid config");
return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID);
}
- newInternalConfig = createNewInternalWifiConfigurationFromExternal(config, uid);
+ newInternalConfig =
+ createNewInternalWifiConfigurationFromExternal(config, uid, packageName);
// Since the original config provided may have had an empty
// {@link WifiConfiguration#allowedKeyMgmt} field, check again if we already have a
// network with the the same configkey.
@@ -1136,7 +1144,7 @@ public class WifiConfigManager {
}
newInternalConfig =
updateExistingInternalWifiConfigurationFromExternal(
- existingInternalConfig, config, uid);
+ existingInternalConfig, config, uid, packageName);
}
// Only add networks with proxy settings if the user has permission to
@@ -1220,10 +1228,12 @@ public class WifiConfigManager {
* network configuration. Otherwise, the networkId should refer to an existing configuration.
*
* @param config provided WifiConfiguration object.
- * @param uid UID of the app requesting the network addition/modification.
+ * @param uid UID of the app requesting the network addition/modification.
+ * @param packageName Package name of the app requesting the network addition/modification.
* @return NetworkUpdateResult object representing status of the update.
*/
- public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid) {
+ public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid,
+ @Nullable String packageName) {
if (!doesUidBelongToCurrentUser(uid)) {
Log.e(TAG, "UID " + uid + " not visible to the current user");
return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID);
@@ -1236,7 +1246,7 @@ public class WifiConfigManager {
Log.e(TAG, "Cannot add/update network before store is read!");
return new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID);
}
- NetworkUpdateResult result = addOrUpdateNetworkInternal(config, uid);
+ NetworkUpdateResult result = addOrUpdateNetworkInternal(config, uid, packageName);
if (!result.isSuccess()) {
Log.e(TAG, "Failed to add/update network " + config.getPrintableSsid());
return result;
@@ -1259,6 +1269,20 @@ public class WifiConfigManager {
}
}
return result;
+
+ }
+
+ /**
+ * Add a network or update a network configuration to our database.
+ * If the supplied networkId is INVALID_NETWORK_ID, we create a new empty
+ * network configuration. Otherwise, the networkId should refer to an existing configuration.
+ *
+ * @param config provided WifiConfiguration object.
+ * @param uid UID of the app requesting the network addition/modification.
+ * @return NetworkUpdateResult object representing status of the update.
+ */
+ public NetworkUpdateResult addOrUpdateNetwork(WifiConfiguration config, int uid) {
+ return addOrUpdateNetwork(config, uid, null);
}
/**
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 42e7aa98f..1bd93c635 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -662,7 +662,9 @@ public class WifiNetworkFactory extends NetworkFactory {
return existingSavedNetwork.networkId;
}
NetworkUpdateResult networkUpdateResult =
- mWifiConfigManager.addOrUpdateNetwork(network, Process.WIFI_UID);
+ mWifiConfigManager.addOrUpdateNetwork(
+ network, mActiveSpecificNetworkRequestSpecifier.requestorUid,
+ mActiveSpecificNetworkRequestSpecifier.requestorPackageName);
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Added network to config manager " + networkUpdateResult.netId);
}
@@ -706,6 +708,8 @@ public class WifiNetworkFactory extends NetworkFactory {
// Mark the network ephemeral so that it's automatically removed at the end of connection.
network.ephemeral = true;
+ network.fromWifiNetworkSpecifier = true;
+
// Store the user selected network.
mUserSelectedNetwork = network;
diff --git a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
index 08f09642a..4d403162c 100644
--- a/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/NetworkSuggestionEvaluatorTest.java
@@ -50,6 +50,8 @@ public class NetworkSuggestionEvaluatorTest {
private static final int TEST_UID = 3555;
private static final int TEST_UID_OTHER = 3545;
private static final int TEST_NETWORK_ID = 55;
+ private static final String TEST_PACKAGE = "com.test";
+ private static final String TEST_PACKAGE_OTHER = "com.test.other";
private @Mock WifiConfigManager mWifiConfigManager;
private @Mock WifiNetworkSuggestionsManager mWifiNetworkSuggestionsManager;
@@ -83,11 +85,12 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {};
int[] priorities = {};
int[] uids = {};
+ String[] packageNames = {};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
@@ -120,11 +123,12 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {true};
int[] priorities = {0};
int[] uids = {TEST_UID};
+ String[] packageNames = {TEST_PACKAGE};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
// setup config manager interactions.
@@ -167,11 +171,12 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {true, true};
int[] priorities = {0, 1};
int[] uids = {TEST_UID, TEST_UID};
+ String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
// setup config manager interactions.
@@ -220,11 +225,12 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {true, true, false};
int[] priorities = {0, 1, 0};
int[] uids = {TEST_UID, TEST_UID, TEST_UID_OTHER};
+ String[] packageNames = {TEST_PACKAGE, TEST_PACKAGE, TEST_PACKAGE_OTHER};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
// setup config manager interactions.
@@ -270,15 +276,16 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {true};
int[] priorities = {0};
int[] uids = {TEST_UID};
+ String[] packageNames = {TEST_PACKAGE};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
// Fail add to WifiConfigManager
- when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt()))
+ when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString()))
.thenReturn(new NetworkUpdateResult(WifiConfiguration.INVALID_NETWORK_ID));
List<Pair<ScanDetail, WifiConfiguration>> connectableNetworks = new ArrayList<>();
@@ -295,7 +302,7 @@ public class NetworkSuggestionEvaluatorTest {
assertEquals(suggestionSsids[0], connectableNetworks.get(0).second.SSID);
assertEquals(scanSsids[0], connectableNetworks.get(0).first.getScanResult().SSID);
- verify(mWifiConfigManager).addOrUpdateNetwork(any(), anyInt());
+ verify(mWifiConfigManager).addOrUpdateNetwork(any(), anyInt(), anyString());
}
/**
@@ -317,11 +324,12 @@ public class NetworkSuggestionEvaluatorTest {
boolean[] meteredness = {true};
int[] priorities = {0};
int[] uids = {TEST_UID};
+ String[] packageNames = {TEST_PACKAGE};
ScanDetail[] scanDetails =
buildScanDetails(scanSsids, bssids, freqs, caps, levels, mClock);
WifiNetworkSuggestion[] suggestions = buildNetworkSuggestions(suggestionSsids, securities,
- appInteractions, meteredness, priorities, uids);
+ appInteractions, meteredness, priorities, uids, packageNames);
// Link the scan result with suggestions.
linkScanDetailsWithNetworkSuggestions(scanDetails, suggestions);
// Existing saved network matching the credentials.
@@ -351,7 +359,7 @@ public class NetworkSuggestionEvaluatorTest {
private void setupAddToWifiConfigManager(WifiConfiguration candidate) {
// setup & verify the WifiConfigmanager interactions for adding/enabling the network.
- when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt()))
+ when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString()))
.thenReturn(new NetworkUpdateResult(TEST_NETWORK_ID));
when(mWifiConfigManager.updateNetworkSelectionStatus(eq(TEST_NETWORK_ID), anyInt()))
.thenReturn(true);
@@ -367,10 +375,12 @@ public class NetworkSuggestionEvaluatorTest {
ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor =
ArgumentCaptor.forClass(WifiConfiguration.class);
- verify(mWifiConfigManager).addOrUpdateNetwork(wifiConfigurationCaptor.capture(), anyInt());
+ verify(mWifiConfigManager).addOrUpdateNetwork(wifiConfigurationCaptor.capture(), anyInt(),
+ anyString());
WifiConfiguration addedWifiConfiguration = wifiConfigurationCaptor.getValue();
assertNotNull(addedWifiConfiguration);
assertTrue(addedWifiConfiguration.ephemeral);
+ assertTrue(addedWifiConfiguration.fromWifiNetworkSuggestion);
assertEquals(candidate.SSID, addedWifiConfiguration.SSID);
verify(mWifiConfigManager).updateNetworkSelectionStatus(eq(TEST_NETWORK_ID), anyInt());
@@ -420,7 +430,7 @@ public class NetworkSuggestionEvaluatorTest {
private WifiNetworkSuggestion[] buildNetworkSuggestions(
String[] ssids, int[] securities, boolean[] appInteractions, boolean[] meteredness,
- int[] priorities, int[] uids) {
+ int[] priorities, int[] uids, String[] packageNames) {
WifiConfiguration[] configs = buildWifiConfigurations(ssids, securities);
WifiNetworkSuggestion[] suggestions = new WifiNetworkSuggestion[configs.length];
for (int i = 0; i < configs.length; i++) {
@@ -429,7 +439,7 @@ public class NetworkSuggestionEvaluatorTest {
? WifiConfiguration.METERED_OVERRIDE_METERED
: WifiConfiguration.METERED_OVERRIDE_NONE;
suggestions[i] = new WifiNetworkSuggestion(configs[i], appInteractions[i],
- false, uids[i], "");
+ false, uids[i], packageNames[i]);
}
return suggestions;
}
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
index 752ef09cd..c330a14fc 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigManagerTest.java
@@ -19,6 +19,7 @@ package com.android.server.wifi;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
+import android.annotation.Nullable;
import android.app.admin.DeviceAdminInfo;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.test.MockAnswerUtil.AnswerWithArguments;
@@ -495,6 +496,56 @@ public class WifiConfigManagerTest {
}
/**
+ * Verifies the addition of a single suggestion network using
+ * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int, String)} and verifies
+ * that the {@link WifiConfigManager#getSavedNetworks()} does not return this network.
+ */
+ @Test
+ public void testAddSingleSuggestionNetwork() throws Exception {
+ WifiConfiguration suggestionNetwork = WifiConfigurationTestUtil.createOpenNetwork();
+ suggestionNetwork.ephemeral = true;
+ suggestionNetwork.fromWifiNetworkSuggestion = true;
+ List<WifiConfiguration> networks = new ArrayList<>();
+ networks.add(suggestionNetwork);
+
+ verifyAddSuggestionOrRequestNetworkToWifiConfigManager(suggestionNetwork);
+
+ List<WifiConfiguration> retrievedNetworks =
+ mWifiConfigManager.getConfiguredNetworksWithPasswords();
+ WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate(
+ networks, retrievedNetworks);
+
+ // Ensure that this is not returned in the saved network list.
+ assertTrue(mWifiConfigManager.getSavedNetworks(Process.WIFI_UID).isEmpty());
+ verify(mWcmListener, never()).onSavedNetworkAdded(suggestionNetwork.networkId);
+ }
+
+ /**
+ * Verifies the addition of a single specifier network using
+ * {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int, String)} and verifies
+ * that the {@link WifiConfigManager#getSavedNetworks()} does not return this network.
+ */
+ @Test
+ public void testAddSingleSpecifierNetwork() throws Exception {
+ WifiConfiguration suggestionNetwork = WifiConfigurationTestUtil.createOpenNetwork();
+ suggestionNetwork.ephemeral = true;
+ suggestionNetwork.fromWifiNetworkSpecifier = true;
+ List<WifiConfiguration> networks = new ArrayList<>();
+ networks.add(suggestionNetwork);
+
+ verifyAddSuggestionOrRequestNetworkToWifiConfigManager(suggestionNetwork);
+
+ List<WifiConfiguration> retrievedNetworks =
+ mWifiConfigManager.getConfiguredNetworksWithPasswords();
+ WifiConfigurationTestUtil.assertConfigurationsEqualForConfigManagerAddOrUpdate(
+ networks, retrievedNetworks);
+
+ // Ensure that this is not returned in the saved network list.
+ assertTrue(mWifiConfigManager.getSavedNetworks(Process.WIFI_UID).isEmpty());
+ verify(mWcmListener, never()).onSavedNetworkAdded(suggestionNetwork.networkId);
+ }
+
+ /**
* Verifies that the modification of a single open network using
* {@link WifiConfigManager#addOrUpdateNetwork(WifiConfiguration, int)} with a UID which
* has no permission to modify the network fails.
@@ -4339,9 +4390,10 @@ public class WifiConfigManagerTest {
* Modifies the provided configuration with creator uid, package name
* and time.
*/
- private void setCreationDebugParams(WifiConfiguration configuration) {
- configuration.creatorUid = configuration.lastUpdateUid = TEST_CREATOR_UID;
- configuration.creatorName = configuration.lastUpdateName = TEST_CREATOR_NAME;
+ private void setCreationDebugParams(WifiConfiguration configuration, int uid,
+ String packageName) {
+ configuration.creatorUid = configuration.lastUpdateUid = uid;
+ configuration.creatorName = configuration.lastUpdateName = packageName;
configuration.creationTime = configuration.updateTime =
WifiConfigManager.createDebugTimeStampString(
TEST_WALLCLOCK_CREATION_TIME_MILLIS);
@@ -4600,7 +4652,15 @@ public class WifiConfigManagerTest {
* Adds the provided configuration to WifiConfigManager with uid = TEST_CREATOR_UID.
*/
private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration) {
- return addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID);
+ return addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID, null);
+ }
+
+ /**
+ * Adds the provided configuration to WifiConfigManager with uid specified.
+ */
+ private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration,
+ int uid) {
+ return addNetworkToWifiConfigManager(configuration, uid, null);
}
/**
@@ -4612,15 +4672,17 @@ public class WifiConfigManagerTest {
* This method also triggers a store read if not already done.
*/
private NetworkUpdateResult addNetworkToWifiConfigManager(WifiConfiguration configuration,
- int uid) {
+ int uid,
+ @Nullable String packageName) {
clearInvocations(mContext, mWifiConfigStore, mNetworkListSharedStoreData,
mNetworkListUserStoreData);
triggerStoreReadIfNeeded();
when(mClock.getWallClockMillis()).thenReturn(TEST_WALLCLOCK_CREATION_TIME_MILLIS);
NetworkUpdateResult result =
- mWifiConfigManager.addOrUpdateNetwork(configuration, uid);
+ mWifiConfigManager.addOrUpdateNetwork(configuration, uid, packageName);
setDefaults(configuration);
- setCreationDebugParams(configuration);
+ setCreationDebugParams(
+ configuration, uid, packageName != null ? packageName : TEST_CREATOR_NAME);
configuration.networkId = result.getNetworkId();
return result;
}
@@ -4660,6 +4722,24 @@ public class WifiConfigManagerTest {
}
/**
+ * Add ephemeral network to WifiConfigManager and ensure that it was successful.
+ */
+ private NetworkUpdateResult verifyAddSuggestionOrRequestNetworkToWifiConfigManager(
+ WifiConfiguration configuration) throws Exception {
+ NetworkUpdateResult result =
+ addNetworkToWifiConfigManager(configuration, TEST_CREATOR_UID, TEST_CREATOR_NAME);
+ assertTrue(result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID);
+ assertTrue(result.isNewNetwork());
+ assertTrue(result.hasIpChanged());
+ assertTrue(result.hasProxyChanged());
+
+ verifyNetworkAddBroadcast(configuration);
+ // Ensure that the write was not invoked for ephemeral network addition.
+ mContextConfigStoreMockOrder.verify(mWifiConfigStore, never()).write(anyBoolean());
+ return result;
+ }
+
+ /**
* Add Passpoint network to WifiConfigManager and ensure that it was successful.
*/
private NetworkUpdateResult verifyAddPasspointNetworkToWifiConfigManager(
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java
index 40cfd7457..00749ac7d 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiConfigurationTestUtil.java
@@ -595,7 +595,10 @@ public class WifiConfigurationTestUtil {
assertEquals(expected.meteredOverride, actual.meteredOverride);
assertEquals(expected.useExternalScores, actual.useExternalScores);
assertEquals(expected.ephemeral, actual.ephemeral);
+ assertEquals(expected.osu, actual.osu);
assertEquals(expected.trusted, actual.trusted);
+ assertEquals(expected.fromWifiNetworkSuggestion, actual.fromWifiNetworkSuggestion);
+ assertEquals(expected.fromWifiNetworkSpecifier, actual.fromWifiNetworkSpecifier);
assertEquals(expected.creatorUid, actual.creatorUid);
assertEquals(expected.creatorName, actual.creatorName);
assertEquals(expected.creationTime, actual.creationTime);
diff --git a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
index ec3e9bb98..151f09469 100644
--- a/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
+++ b/tests/wifitests/src/com/android/server/wifi/WifiNetworkFactoryTest.java
@@ -162,7 +162,7 @@ public class WifiNetworkFactoryTest {
.thenReturn(IMPORTANCE_FOREGROUND_SERVICE);
when(mWifiInjector.getWifiScanner()).thenReturn(mWifiScanner);
when(mWifiInjector.getClientModeImpl()).thenReturn(mClientModeImpl);
- when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt()))
+ when(mWifiConfigManager.addOrUpdateNetwork(any(), anyInt(), anyString()))
.thenReturn(new NetworkUpdateResult(TEST_NETWORK_ID_1));
mWifiNetworkFactory = new WifiNetworkFactory(mLooper.getLooper(), mContext,
@@ -983,11 +983,12 @@ public class WifiNetworkFactoryTest {
ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor =
ArgumentCaptor.forClass(WifiConfiguration.class);
verify(mWifiConfigManager).addOrUpdateNetwork(
- wifiConfigurationCaptor.capture(), eq(Process.WIFI_UID));
+ wifiConfigurationCaptor.capture(), eq(TEST_UID_1), eq(TEST_PACKAGE_NAME_1));
WifiConfiguration network = wifiConfigurationCaptor.getValue();
assertNotNull(network);
WifiConfigurationTestUtil.assertConfigurationEqual(selectedNetwork, network);
assertTrue(network.ephemeral);
+ assertTrue(network.fromWifiNetworkSpecifier);
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(mClientModeImpl).sendMessage(messageCaptor.capture());
@@ -1029,7 +1030,7 @@ public class WifiNetworkFactoryTest {
verify(mWifiConnectivityManager).setSpecificNetworkRequestInProgress(true);
// verify we don't try to add the network to WifiConfigManager.
- verify(mWifiConfigManager, never()).addOrUpdateNetwork(any(), anyInt());
+ verify(mWifiConfigManager, never()).addOrUpdateNetwork(any(), anyInt(), anyString());
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
verify(mClientModeImpl).sendMessage(messageCaptor.capture());
@@ -1084,13 +1085,14 @@ public class WifiNetworkFactoryTest {
ArgumentCaptor<WifiConfiguration> wifiConfigurationCaptor =
ArgumentCaptor.forClass(WifiConfiguration.class);
verify(mWifiConfigManager).addOrUpdateNetwork(
- wifiConfigurationCaptor.capture(), eq(Process.WIFI_UID));
+ wifiConfigurationCaptor.capture(), eq(TEST_UID_1), eq(TEST_PACKAGE_NAME_1));
WifiConfiguration network = wifiConfigurationCaptor.getValue();
assertNotNull(network);
WifiConfiguration expectedWifiConfiguration = new WifiConfiguration(mSelectedNetwork);
expectedWifiConfiguration.BSSID = matchingScanResult.BSSID;
WifiConfigurationTestUtil.assertConfigurationEqual(expectedWifiConfiguration, network);
assertTrue(network.ephemeral);
+ assertTrue(network.fromWifiNetworkSpecifier);
// Verify connection message.
ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);