diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-10-04 17:39:46 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-10-04 17:39:46 +0000 |
commit | 8d9c37cebe5528310c7e9b78b373965dba8f0789 (patch) | |
tree | 3ff7ea166e3541fa89806e71a82f1462767e9b92 /service | |
parent | d6ecd26cff564827d5a1ec4ccef772ce40ad4021 (diff) | |
parent | 25fea7a2f8bf1978283d464d3fb3a78a7552898d (diff) |
Merge "WifiNetworkFactory: Remove network from config manager" into qt-qpr1-dev
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/WifiNetworkFactory.java | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java index c375e9f59..48797f773 100644 --- a/service/java/com/android/server/wifi/WifiNetworkFactory.java +++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java @@ -712,6 +712,11 @@ public class WifiNetworkFactory extends NetworkFactory { WifiConfiguration existingSavedNetwork = mWifiConfigManager.getConfiguredNetwork(network.configKey()); if (existingSavedNetwork != null) { + if (WifiConfigurationUtil.hasCredentialChanged(existingSavedNetwork, network)) { + // TODO (b/142035508): What if the user has a saved network with different + // credentials? + Log.w(TAG, "Network config already present in config manager, reusing"); + } return existingSavedNetwork.networkId; } NetworkUpdateResult networkUpdateResult = @@ -724,6 +729,32 @@ public class WifiNetworkFactory extends NetworkFactory { return networkUpdateResult.netId; } + // Helper method to remove the provided network configuration from WifiConfigManager, if it was + // added by an app's specifier request. + private void disconnectAndRemoveNetworkFromWifiConfigManager( + @Nullable WifiConfiguration network) { + // Trigger a disconnect first. + mWifiInjector.getClientModeImpl().disconnectCommand(); + + if (network == null) return; + WifiConfiguration wcmNetwork = + mWifiConfigManager.getConfiguredNetwork(network.configKey()); + if (wcmNetwork == null) { + Log.e(TAG, "Network not present in config manager"); + return; + } + // Remove the network if it was added previously by an app's specifier request. + if (wcmNetwork.ephemeral && wcmNetwork.fromWifiNetworkSpecifier) { + boolean success = + mWifiConfigManager.removeNetwork(wcmNetwork.networkId, wcmNetwork.creatorUid); + if (!success) { + Log.e(TAG, "Failed to remove network from config manager"); + } else if (mVerboseLoggingEnabled) { + Log.v(TAG, "Removed network from config manager " + wcmNetwork.networkId); + } + } + } + // Helper method to trigger a connection request & schedule a timeout alarm to track the // connection request. private void connectToNetwork(@NonNull WifiConfiguration network) { @@ -762,7 +793,6 @@ public class WifiNetworkFactory extends NetworkFactory { networkToConnect.SSID = network.SSID; // Set the WifiConfiguration.BSSID field to prevent roaming. networkToConnect.BSSID = findBestBssidFromActiveMatchedScanResultsForNetwork(network); - // Mark the network ephemeral so that it's automatically removed at the end of connection. networkToConnect.ephemeral = true; networkToConnect.fromWifiNetworkSpecifier = true; @@ -770,7 +800,8 @@ public class WifiNetworkFactory extends NetworkFactory { mUserSelectedNetwork = networkToConnect; // Disconnect from the current network before issuing a new connect request. - mWifiInjector.getClientModeImpl().disconnectCommand(); + disconnectAndRemoveNetworkFromWifiConfigManager(mUserSelectedNetwork); + // Trigger connection to the network. connectToNetwork(networkToConnect); // Triggered connection to network, now wait for the connection status. @@ -974,7 +1005,7 @@ public class WifiNetworkFactory extends NetworkFactory { // Invoked at the termination of current connected request processing. private void teardownForConnectedNetwork() { Log.i(TAG, "Disconnecting from network on reset"); - mWifiInjector.getClientModeImpl().disconnectCommand(); + disconnectAndRemoveNetworkFromWifiConfigManager(mUserSelectedNetwork); mConnectedSpecificNetworkRequest = null; mConnectedSpecificNetworkRequestSpecifier = null; // ensure there is no active request in progress. |