diff options
4 files changed, 53 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 080b76d9e..3fbd58ed5 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -228,7 +228,7 @@ public class WifiInjector { wifiHandler, new Random(), this); mWifiP2pMonitor = new WifiP2pMonitor(this); mSupplicantP2pIfaceHal = new SupplicantP2pIfaceHal(mWifiP2pMonitor); - mWifiP2pNative = new WifiP2pNative( + mWifiP2pNative = new WifiP2pNative(this, mWifiVendorHal, mSupplicantP2pIfaceHal, mHalDeviceManager, mPropertyService); @@ -786,4 +786,8 @@ public class WifiInjector { } return mNetdWrapper; } + + public WifiCondManager getWifiCondManager() { + return mWifiCondManager; + } } diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java index 7eba9d34c..0732510b3 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java @@ -24,14 +24,19 @@ import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pGroupList; import android.net.wifi.p2p.nsd.WifiP2pServiceInfo; +import android.net.wifi.wificond.WifiCondManager; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import com.android.server.wifi.HalDeviceManager; import com.android.server.wifi.PropertyService; +import com.android.server.wifi.WifiInjector; +import com.android.server.wifi.WifiNative; import com.android.server.wifi.WifiVendorHal; +import java.util.Set; + /** * Native calls for bring up/shut down of the supplicant daemon and for * sending requests to the supplicant daemon @@ -42,6 +47,7 @@ public class WifiP2pNative { private static final String TAG = "WifiP2pNative"; private boolean mVerboseLoggingEnabled = false; private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal; + private final WifiInjector mWifiInjector; private final HalDeviceManager mHalDeviceManager; private final PropertyService mPropertyService; private final WifiVendorHal mWifiVendorHal; @@ -108,9 +114,10 @@ public class WifiP2pNative { } } - public WifiP2pNative(WifiVendorHal wifiVendorHal, + public WifiP2pNative(WifiInjector wifiInjector, WifiVendorHal wifiVendorHal, SupplicantP2pIfaceHal p2pIfaceHal, HalDeviceManager halDeviceManager, PropertyService propertyService) { + mWifiInjector = wifiInjector; mWifiVendorHal = wifiVendorHal; mSupplicantP2pIfaceHal = p2pIfaceHal; mHalDeviceManager = halDeviceManager; @@ -597,6 +604,7 @@ public class WifiP2pNative { default: freq = config.groupOwnerBand; } + abortWifiRunningScanIfNeeded(join); return mSupplicantP2pIfaceHal.groupAdd( config.networkName, config.passphrase, @@ -604,6 +612,18 @@ public class WifiP2pNative { freq, config.deviceAddress, join); } + private void abortWifiRunningScanIfNeeded(boolean isJoin) { + if (!isJoin) return; + + WifiCondManager wifiCondManager = mWifiInjector.getWifiCondManager(); + WifiNative wifiNative = mWifiInjector.getWifiNative(); + Set<String> wifiClientInterfaces = wifiNative.getClientInterfaceNames(); + + for (String interfaceName: wifiClientInterfaces) { + wifiCondManager.abortScan(interfaceName); + } + } + /** * Terminate a P2P group. If a new virtual network interface was used for * the group, it must also be removed. The network interface name of the diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeInterfaceManagementTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeInterfaceManagementTest.java index eb48b71c7..48a4334cb 100644 --- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeInterfaceManagementTest.java +++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeInterfaceManagementTest.java @@ -42,6 +42,7 @@ import com.android.server.wifi.HalDeviceManager.InterfaceDestroyedListener; import com.android.server.wifi.HalDeviceManager.ManagerStatusListener; import com.android.server.wifi.PropertyService; import com.android.server.wifi.WifiBaseTest; +import com.android.server.wifi.WifiInjector; import com.android.server.wifi.WifiVendorHal; import org.junit.Before; @@ -68,6 +69,7 @@ public class WifiP2pNativeInterfaceManagementTest extends WifiBaseTest { @Mock private IWifiP2pIface mIWifiP2pIface; @Mock private IWifiIface mIWifiIface; @Mock private WifiVendorHal mWifiVendorHal; + @Mock private WifiInjector mWifiInjector; private WifiP2pNative mWifiP2pNative; private WifiStatus mWifiStatusSuccess; private ManagerStatusListener mManagerStatusListener; @@ -98,7 +100,7 @@ public class WifiP2pNativeInterfaceManagementTest extends WifiBaseTest { when(mPropertyService.getString(P2P_INTERFACE_PROPERTY, P2P_IFACE_NAME)) .thenReturn(P2P_IFACE_NAME); - mWifiP2pNative = new WifiP2pNative( + mWifiP2pNative = new WifiP2pNative(mWifiInjector, mWifiVendorHal, mSupplicantP2pIfaceHal, mHalDeviceManager, mPropertyService); } diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeTest.java index 045b1752f..41952d71b 100644 --- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeTest.java +++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pNativeTest.java @@ -37,6 +37,7 @@ import android.net.wifi.p2p.WifiP2pGroupList; import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo; import android.net.wifi.p2p.nsd.WifiP2pServiceInfo; +import android.net.wifi.wificond.WifiCondManager; import android.os.Handler; import androidx.test.filters.SmallTest; @@ -44,6 +45,8 @@ import androidx.test.filters.SmallTest; import com.android.server.wifi.HalDeviceManager; import com.android.server.wifi.PropertyService; import com.android.server.wifi.WifiBaseTest; +import com.android.server.wifi.WifiInjector; +import com.android.server.wifi.WifiNative; import com.android.server.wifi.WifiVendorHal; import org.junit.Before; @@ -52,6 +55,9 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.HashSet; +import java.util.Set; + /** * Unit tests for {@link com.android.server.wifi.WifiP2pMonitor}. */ @@ -77,6 +83,9 @@ public class WifiP2pNativeTest extends WifiBaseTest { private static final String TEST_NFC_SELECT_MSG = "select"; private static final String TEST_CLIENT_LIST = "aa:bb:cc:dd:ee:ff 11:22:33:44:55:66"; + @Mock private WifiInjector mWifiInjector; + @Mock private WifiCondManager mWifiCondManager; + @Mock private WifiNative mWifiNative; @Mock private WifiVendorHal mWifiVendorHalMock; @Mock private SupplicantP2pIfaceHal mSupplicantP2pIfaceHalMock; @Mock private HalDeviceManager mHalDeviceManagerMock; @@ -85,6 +94,7 @@ public class WifiP2pNativeTest extends WifiBaseTest { private WifiP2pNative mWifiP2pNative; private WifiP2pGroupList mWifiP2pGroupList = new WifiP2pGroupList(); + private Set<String> mWifiClientInterfaceNames = new HashSet<String>(); private WifiP2pGroup createP2pGroup( int networkId, String networkName, String passphrase, boolean isGo, String goAddr) { @@ -100,12 +110,22 @@ public class WifiP2pNativeTest extends WifiBaseTest { @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); + + mWifiClientInterfaceNames.add("wlan0"); + mWifiClientInterfaceNames.add("wlan1"); + mWifiP2pNative = new WifiP2pNative( + mWifiInjector, mWifiVendorHalMock, mSupplicantP2pIfaceHalMock, mHalDeviceManagerMock, mPropertyServiceMock); + when(mWifiInjector.getWifiCondManager()).thenReturn(mWifiCondManager); + when(mWifiInjector.getWifiNative()).thenReturn(mWifiNative); + + when(mWifiNative.getClientInterfaceNames()).thenReturn(mWifiClientInterfaceNames); + mWifiP2pGroupList.add( createP2pGroup(1, "testGroup1", "passphrase", true, "aa:bb:cc:dd:ee:f0")); mWifiP2pGroupList.add( @@ -423,6 +443,10 @@ public class WifiP2pNativeTest extends WifiBaseTest { .build(); assertTrue(mWifiP2pNative.p2pGroupAdd(config, true)); + for (String intf: mWifiClientInterfaceNames) { + verify(mWifiCondManager).abortScan(eq(intf)); + } + verify(mSupplicantP2pIfaceHalMock).groupAdd( eq(TEST_NETWORK_NAME), eq(TEST_PASSPHRASE), |