diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 63359c1576345..4bf1ca35403d1 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -640,6 +640,27 @@ public class WifiNative { return ""; } + public int getGroupCapability(String deviceAddress) { + int gc = 0; + if (TextUtils.isEmpty(deviceAddress)) return gc; + String peerInfo = p2pPeer(deviceAddress); + if (TextUtils.isEmpty(peerInfo)) return gc; + + String[] tokens = peerInfo.split("\n"); + for (String token : tokens) { + if (token.startsWith("group_capab=")) { + String[] nameValue = token.split("="); + if (nameValue.length != 2) break; + try { + return Integer.decode(nameValue[1]); + } catch(NumberFormatException e) { + return gc; + } + } + } + return gc; + } + public String p2pPeer(String deviceAddress) { return doStringCommand("P2P_PEER " + deviceAddress); } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java index b2347c851c1a7..48cdbc2d84263 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java @@ -19,6 +19,7 @@ package android.net.wifi.p2p; import android.os.Parcelable; import android.os.Parcel; import android.net.wifi.p2p.WifiP2pDevice; +import android.text.TextUtils; import android.util.Log; import java.util.ArrayList; @@ -84,10 +85,21 @@ public class WifiP2pDeviceList implements Parcelable { } /** @hide */ - public void updateStatus(String deviceAddress, int status) { - if (deviceAddress == null) return; + public void updateGroupCapability(String deviceAddress, int groupCapab) { + if (TextUtils.isEmpty(deviceAddress)) return; WifiP2pDevice d = mDevices.get(deviceAddress); - d.status = status; + if (d != null) { + d.groupCapability = groupCapab; + } + } + + /** @hide */ + public void updateStatus(String deviceAddress, int status) { + if (TextUtils.isEmpty(deviceAddress)) return; + WifiP2pDevice d = mDevices.get(deviceAddress); + if (d != null) { + d.status = status; + } } /** @hide */ diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index 806730cc69452..a3a697cfa63d9 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -764,6 +764,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub { WifiP2pConfig config = (WifiP2pConfig) message.obj; mAutonomousGroup = false; + /* Update group capability before connect */ + int gc = mWifiNative.getGroupCapability(config.deviceAddress); + mPeers.updateGroupCapability(config.deviceAddress, gc); + if (mSavedPeerConfig != null && config.deviceAddress.equals( mSavedPeerConfig.deviceAddress)) { mSavedPeerConfig = config;