diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 65caa5123c2bc..0fc0a45d35409 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -239,6 +239,10 @@ public class WifiNative { return WifiNative.doBooleanCommand("SET config_methods " + cfg); } + public static boolean setP2pSsidPostfix(String postfix) { + return WifiNative.doBooleanCommand("SET p2p_ssid_postfix " + postfix); + } + public static boolean p2pFind() { return doBooleanCommand("P2P_FIND"); } diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java index 9473993b90c40..e141abac5d90c 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroup.java @@ -172,6 +172,12 @@ public class WifiP2pGroup implements Parcelable { return mClients.size() == 0; } + /** @hide Returns {@code true} if the device is part of the group */ + public boolean contains(WifiP2pDevice device) { + if (mOwner.equals(device) || mClients.contains(device)) return true; + return false; + } + /** Get the list of clients currently part of the p2p group */ public Collection getClientList() { return Collections.unmodifiableCollection(mClients); diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index ceca78d3a8417..dede1b51f7caf 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -1088,16 +1088,13 @@ public class WifiP2pService extends IWifiP2pManager.Stub { break; case WifiMonitor.P2P_DEVICE_LOST_EVENT: WifiP2pDevice device = (WifiP2pDevice) message.obj; - if (device.equals(mGroup.getOwner())) { - logd("Lost the group owner, killing p2p connection"); - WifiNative.p2pGroupRemove(mGroup.getInterface()); - } else if (mGroup.removeClient(device)) { - if (!mPersistGroup && mGroup.isClientListEmpty()) { - Slog.d(TAG, "Client list empty, removing a non-persistent p2p group"); - WifiNative.p2pGroupRemove(mGroup.getInterface()); - } + //Device loss for a connected device indicates it is not in discovery any more + if (mGroup.contains(device)) { + if (DBG) logd("Lost " + device +" , do nothing"); + return HANDLED; } - return NOT_HANDLED; // Do the regular device lost handling + // Do the regular device lost handling + return NOT_HANDLED; case WifiP2pManager.DISABLE_P2P: sendMessage(WifiP2pManager.REMOVE_GROUP); deferMessage(message); @@ -1401,6 +1398,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub { private void initializeP2pSettings() { WifiNative.setPersistentReconnect(true); WifiNative.setDeviceName(mThisDevice.deviceName); + //DIRECT-XY-DEVICENAME (XY is randomly generated) + WifiNative.setP2pSsidPostfix("-" + mThisDevice.deviceName); WifiNative.setDeviceType(mThisDevice.primaryDeviceType); //The supplicant default is to support everything, but a bug necessitates //the framework to specify this explicitly