summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorzhangshuxiao <zhangshuxiao@xiaomi.com>2017-03-13 22:05:52 +0800
committerShuxiao Zhang <zhangshuxiao@xiaomi.com>2017-03-15 01:16:20 +0000
commitf384821f8979152ba83ec70614a59094c838c8c6 (patch)
tree6ca19b2933e4a8fd11bf276ec9ef838887fb9ba1 /service
parenta4d316f8e789bc1aa6645235f139e48636fe1f2d (diff)
WiFi: Wifi service get configured networks use ParceledListSlice.
The number of configurations will be more and more, some users configured more than 600KB or even 1M, It will cause the binder failed. Therefore, we use ParceledListSlice to splits into multiple transactions when more than 64K. Test: more than 500 configurations. Change-Id: I4b56a6d34f7d6631ae7d2f8bcbc2c4f42a17456b Signed-off-by: zhangshuxiao <zhangshuxiao@xiaomi.com>
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java35
1 files changed, 23 insertions, 12 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 19eaf5218..7ab7182d1 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -37,6 +37,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
import android.database.ContentObserver;
import android.net.ConnectivityManager;
import android.net.DhcpInfo;
@@ -869,16 +870,19 @@ public class WifiServiceImpl extends IWifiManager.Stub {
* @return the list of configured networks
*/
@Override
- public List<WifiConfiguration> getConfiguredNetworks() {
+ public ParceledListSlice<WifiConfiguration> getConfiguredNetworks() {
enforceAccessPermission();
mLog.trace("getConfiguredNetworks uid=%").c(Binder.getCallingUid()).flush();
if (mWifiStateMachineChannel != null) {
- return mWifiStateMachine.syncGetConfiguredNetworks(Binder.getCallingUid(),
- mWifiStateMachineChannel);
+ List<WifiConfiguration> configs = mWifiStateMachine.syncGetConfiguredNetworks(
+ Binder.getCallingUid(), mWifiStateMachineChannel);
+ if (configs != null) {
+ return new ParceledListSlice<WifiConfiguration>(configs);
+ }
} else {
Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
- return null;
}
+ return null;
}
/**
@@ -886,16 +890,20 @@ public class WifiServiceImpl extends IWifiManager.Stub {
* @return the list of configured networks with real preSharedKey
*/
@Override
- public List<WifiConfiguration> getPrivilegedConfiguredNetworks() {
+ public ParceledListSlice<WifiConfiguration> getPrivilegedConfiguredNetworks() {
enforceReadCredentialPermission();
enforceAccessPermission();
mLog.trace("getPrivilegedConfiguredNetworks uid=%").c(Binder.getCallingUid()).flush();
if (mWifiStateMachineChannel != null) {
- return mWifiStateMachine.syncGetPrivilegedConfiguredNetwork(mWifiStateMachineChannel);
+ List<WifiConfiguration> configs =
+ mWifiStateMachine.syncGetPrivilegedConfiguredNetwork(mWifiStateMachineChannel);
+ if (configs != null) {
+ return new ParceledListSlice<WifiConfiguration>(configs);
+ }
} else {
Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
- return null;
}
+ return null;
}
/**
@@ -1741,12 +1749,15 @@ public class WifiServiceImpl extends IWifiManager.Stub {
/* ignore - local call */
}
// Delete all Wifi SSIDs
- List<WifiConfiguration> networks = getConfiguredNetworks();
- if (networks != null) {
- for (WifiConfiguration config : networks) {
- removeNetwork(config.networkId);
+ if (mWifiStateMachineChannel != null) {
+ List<WifiConfiguration> networks = mWifiStateMachine.syncGetConfiguredNetworks(
+ Binder.getCallingUid(), mWifiStateMachineChannel);
+ if (networks != null) {
+ for (WifiConfiguration config : networks) {
+ removeNetwork(config.networkId);
+ }
+ saveConfiguration();
}
- saveConfiguration();
}
}
}