summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiNetworkFactory.java
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2019-01-16 16:24:02 -0800
committerRoshan Pius <rpius@google.com>2019-01-18 08:02:25 -0800
commite9b9e8526f976a8942711d546547de6b8c286220 (patch)
tree568a2a0825f3ace8ea91104a21447ba6853e46de /service/java/com/android/server/wifi/WifiNetworkFactory.java
parent812bc06ef69c687f0a440449273ad78d46da15e0 (diff)
downloadandroid_frameworks_opt_net_wifi-e9b9e8526f976a8942711d546547de6b8c286220.tar.gz
android_frameworks_opt_net_wifi-e9b9e8526f976a8942711d546547de6b8c286220.tar.bz2
android_frameworks_opt_net_wifi-e9b9e8526f976a8942711d546547de6b8c286220.zip
WifiNetworkFactory: Persist user approvals
Persist the list of approved access points for each app. Bug: 122658039 Test: ./frameworks/opt/net/wifi/tests/wifitests/runtests.sh Test: act.py -c wifi_manager.config -tb dut-name -tc WifiNetworkRequestTest Test: act.py -c wifi_manager.config -tb dut-name -tc WifiNetworkRequestTest :test_connect_to_wpa_psk_2g_which_is_already_approved Change-Id: Iec0450ccadf04c3168088b456bb33ed6a786ac8e
Diffstat (limited to 'service/java/com/android/server/wifi/WifiNetworkFactory.java')
-rw-r--r--service/java/com/android/server/wifi/WifiNetworkFactory.java55
1 files changed, 52 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiNetworkFactory.java b/service/java/com/android/server/wifi/WifiNetworkFactory.java
index 0552d2c90..ce83a6d5e 100644
--- a/service/java/com/android/server/wifi/WifiNetworkFactory.java
+++ b/service/java/com/android/server/wifi/WifiNetworkFactory.java
@@ -67,7 +67,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
-
/**
* Network factory to handle trusted wifi network requests.
*/
@@ -98,6 +97,7 @@ public class WifiNetworkFactory extends NetworkFactory {
private final WifiInjector mWifiInjector;
private final WifiConnectivityManager mWifiConnectivityManager;
private final WifiConfigManager mWifiConfigManager;
+ private final WifiConfigStore mWifiConfigStore;
private final WifiPermissionsUtil mWifiPermissionsUtil;
private final WifiScanner.ScanSettings mScanSettings;
private final NetworkFactoryScanListener mScanListener;
@@ -128,11 +128,16 @@ public class WifiNetworkFactory extends NetworkFactory {
private boolean mConnectionTimeoutSet = false;
private boolean mIsPeriodicScanPaused = false;
private boolean mWifiEnabled = false;
+ /**
+ * Indicates that we have new data to serialize.
+ */
+ private boolean mHasNewDataToSerialize = false;
/**
* Helper class to store an access point that the user previously approved for a specific app.
+ * TODO(b/123014687): Move to a common util class.
*/
- private static class AccessPoint {
+ public static class AccessPoint {
public final String ssid;
public final MacAddress bssid;
public final @NetworkType int networkType;
@@ -310,12 +315,39 @@ public class WifiNetworkFactory extends NetworkFactory {
return true;
};
+ /**
+ * Module to interact with the wifi config store.
+ */
+ private class NetworkRequestDataSource implements NetworkRequestStoreData.DataSource {
+ @Override
+ public Map<String, Set<AccessPoint>> toSerialize() {
+ // Clear the flag after writing to disk.
+ mHasNewDataToSerialize = false;
+ return mUserApprovedAccessPointMap;
+ }
+
+ @Override
+ public void fromDeserialized(Map<String, Set<AccessPoint>> approvedAccessPointMap) {
+ mUserApprovedAccessPointMap.putAll(approvedAccessPointMap);
+ }
+
+ @Override
+ public void reset() {
+ mUserApprovedAccessPointMap.clear();
+ }
+
+ @Override
+ public boolean hasNewDataToSerialize() {
+ return mHasNewDataToSerialize;
+ }
+ }
public WifiNetworkFactory(Looper looper, Context context, NetworkCapabilities nc,
ActivityManager activityManager, AlarmManager alarmManager,
Clock clock, WifiInjector wifiInjector,
WifiConnectivityManager connectivityManager,
WifiConfigManager configManager,
+ WifiConfigStore configStore,
WifiPermissionsUtil wifiPermissionsUtil) {
super(looper, context, TAG, nc);
mContext = context;
@@ -326,6 +358,7 @@ public class WifiNetworkFactory extends NetworkFactory {
mWifiInjector = wifiInjector;
mWifiConnectivityManager = connectivityManager;
mWifiConfigManager = configManager;
+ mWifiConfigStore = configStore;
mWifiPermissionsUtil = wifiPermissionsUtil;
// Create the scan settings.
mScanSettings = new WifiScanner.ScanSettings();
@@ -338,9 +371,21 @@ public class WifiNetworkFactory extends NetworkFactory {
mRegisteredCallbacks = new ExternalCallbackTracker<INetworkRequestMatchCallback>(mHandler);
mSrcMessenger = new Messenger(new Handler(looper, mNetworkConnectionTriggerCallback));
+ // register the data store for serializing/deserializing data.
+ configStore.registerStoreData(
+ wifiInjector.makeNetworkRequestStoreData(new NetworkRequestDataSource()));
+
setScoreFilter(SCORE_FILTER);
}
+ private void saveToStore() {
+ // Set the flag to let WifiConfigStore that we have new data to write.
+ mHasNewDataToSerialize = true;
+ if (!mWifiConfigManager.saveToStore(true)) {
+ Log.w(TAG, "Failed to save to store");
+ }
+ }
+
/**
* Enable verbose logging.
*/
@@ -549,6 +594,7 @@ public class WifiNetworkFactory extends NetworkFactory {
super.dump(fd, pw, args);
pw.println(TAG + ": mGenericConnectionReqCount " + mGenericConnectionReqCount);
pw.println(TAG + ": mActiveSpecificNetworkRequest " + mActiveSpecificNetworkRequest);
+ pw.println(TAG + ": mUserApprovedAccessPointMap " + mUserApprovedAccessPointMap);
}
/**
@@ -1061,6 +1107,8 @@ public class WifiNetworkFactory extends NetworkFactory {
newUserApprovedAccessPoints.add(approvedAccessPoint);
}
}
+ if (newUserApprovedAccessPoints.isEmpty()) return;
+
String requestorPackageName = mContext.getPackageManager().getNameForUid(
mActiveSpecificNetworkRequestSpecifier.requestorUid);
Set<AccessPoint> approvedAccessPoints =
@@ -1069,11 +1117,12 @@ public class WifiNetworkFactory extends NetworkFactory {
approvedAccessPoints = new HashSet<>();
mUserApprovedAccessPointMap.put(requestorPackageName, approvedAccessPoints);
}
- approvedAccessPoints.addAll(newUserApprovedAccessPoints);
if (mVerboseLoggingEnabled) {
Log.v(TAG, "Adding " + newUserApprovedAccessPoints
+ " to user approved access point for " + requestorPackageName);
}
+ approvedAccessPoints.addAll(newUserApprovedAccessPoints);
+ saveToStore();
}
private String getSimplePackageName(@NonNull String origPackageName) {