diff options
author | zhangshuxiao <zhangshuxiao@xiaomi.com> | 2017-03-13 22:05:52 +0800 |
---|---|---|
committer | Shuxiao Zhang <zhangshuxiao@xiaomi.com> | 2017-03-15 01:16:20 +0000 |
commit | f384821f8979152ba83ec70614a59094c838c8c6 (patch) | |
tree | 6ca19b2933e4a8fd11bf276ec9ef838887fb9ba1 /service | |
parent | a4d316f8e789bc1aa6645235f139e48636fe1f2d (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.java | 35 |
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(); } } } |