From ec19db6bd46d112167e87556e8dacdd32ef911e9 Mon Sep 17 00:00:00 2001 From: zhangshuxiao Date: Mon, 13 Mar 2017 21:39:16 +0800 Subject: [PATCH] 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. binder: 1885: binder_alloc_buf size 1058080 failed, no address space Test: more than 500 configurations. Change-Id: I35b8bac478c6d9efa2fb8572fdc7ca22eb910609 Signed-off-by: zhangshuxiao --- wifi/java/android/net/wifi/IWifiManager.aidl | 8 ++++++-- wifi/java/android/net/wifi/WifiManager.java | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 18c124503136e..af48d0a2b6ca0 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -16,7 +16,11 @@ package android.net.wifi; + +import android.content.pm.ParceledListSlice; + import android.net.wifi.hotspot2.PasspointConfiguration; + import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.ScanSettings; @@ -51,9 +55,9 @@ interface IWifiManager */ oneway void requestActivityInfo(in ResultReceiver result); - List getConfiguredNetworks(); + ParceledListSlice getConfiguredNetworks(); - List getPrivilegedConfiguredNetworks(); + ParceledListSlice getPrivilegedConfiguredNetworks(); WifiConfiguration getMatchingWifiConfig(in ScanResult scanResult); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index ed6a166d3fc66..a438deb796f81 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -21,6 +21,7 @@ import android.annotation.SdkConstant.SdkConstantType; import android.annotation.SystemApi; import android.bluetooth.BluetoothAdapter; import android.content.Context; +import android.content.pm.ParceledListSlice; import android.net.ConnectivityManager; import android.net.DhcpInfo; import android.net.Network; @@ -46,6 +47,7 @@ import com.android.server.net.NetworkPinner; import java.net.InetAddress; import java.util.List; import java.util.concurrent.CountDownLatch; +import java.util.Collections; /** * This class provides the primary API for managing all aspects of Wi-Fi @@ -859,7 +861,12 @@ public class WifiManager { */ public List getConfiguredNetworks() { try { - return mService.getConfiguredNetworks(); + ParceledListSlice parceledList = + mService.getConfiguredNetworks(); + if (parceledList == null) { + return Collections.emptyList(); + } + return parceledList.getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -869,7 +876,12 @@ public class WifiManager { @SystemApi public List getPrivilegedConfiguredNetworks() { try { - return mService.getPrivilegedConfiguredNetworks(); + ParceledListSlice parceledList = + mService.getPrivilegedConfiguredNetworks(); + if (parceledList == null) { + return Collections.emptyList(); + } + return parceledList.getList(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); }