diff options
3 files changed, 178 insertions, 71 deletions
diff --git a/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java b/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java index 3d15ec647..dca3a6082 100644 --- a/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java +++ b/service/java/com/android/server/wifi/p2p/SupplicantP2pIfaceHal.java @@ -63,7 +63,6 @@ public class SupplicantP2pIfaceHal { private static final String TAG = "SupplicantP2pIfaceHal"; private static boolean sVerboseLoggingEnabled = true; private static final int RESULT_NOT_VALID = -1; - private static final int DEFAULT_GROUP_OWNER_INTENT = 6; private static final int DEFAULT_OPERATING_CLASS = 81; /** * Regex pattern for extracting the wps device type bytes. @@ -828,13 +827,9 @@ public class SupplicantP2pIfaceHal { String preSelectedPin = TextUtils.isEmpty(config.wps.pin) ? "" : config.wps.pin; boolean persistent = (config.netId == WifiP2pGroup.NETWORK_ID_PERSISTENT); - int goIntent = 0; - if (!joinExistingGroup) { - int groupOwnerIntent = config.groupOwnerIntent; - if (groupOwnerIntent < 0 || groupOwnerIntent > 15) { - groupOwnerIntent = DEFAULT_GROUP_OWNER_INTENT; - } - goIntent = groupOwnerIntent; + if (config.groupOwnerIntent < 0 || config.groupOwnerIntent > 15) { + Log.e(TAG, "Invalid group owner intent: " + config.groupOwnerIntent); + return null; } SupplicantResult<String> result = new SupplicantResult( @@ -842,7 +837,7 @@ public class SupplicantP2pIfaceHal { try { mISupplicantP2pIface.connect( peerAddress, provisionMethod, preSelectedPin, joinExistingGroup, - persistent, goIntent, + persistent, config.groupOwnerIntent, (SupplicantStatus status, String generatedPin) -> { result.setResult(status, generatedPin); }); diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java index 219da3884..eb2a89c4e 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pServiceImpl.java @@ -44,6 +44,9 @@ import android.net.ip.IIpClient; import android.net.ip.IpClientCallbacks; import android.net.ip.IpClientUtil; import android.net.shared.ProvisioningConfiguration; +import android.net.wifi.ScanResult; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WpsInfo; import android.net.wifi.p2p.IWifiP2pManager; @@ -130,6 +133,8 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { private static final String TAG = "WifiP2pService"; private boolean mVerboseLoggingEnabled = false; private static final String NETWORKTYPE = "WIFI_P2P"; + @VisibleForTesting + static final int DEFAULT_GROUP_OWNER_INTENT = 6; private Context mContext; @@ -2240,6 +2245,8 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { break; case PEER_CONNECTION_USER_CONFIRM: mSavedPeerConfig.wps.setup = WpsInfo.DISPLAY; + mSavedPeerConfig.groupOwnerIntent = + selectGroupOwnerIntentIfNecessary(mSavedPeerConfig); mWifiNative.p2pConnect(mSavedPeerConfig, FORM_GROUP); transitionTo(mGroupNegotiationState); break; @@ -3537,6 +3544,7 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { Log.e(TAG, "Invalid device"); return; } + config.groupOwnerIntent = selectGroupOwnerIntentIfNecessary(config); String pin = mWifiNative.p2pConnect(config, dev.isGroupOwner()); try { Integer.parseInt(pin); @@ -4313,6 +4321,38 @@ public class WifiP2pServiceImpl extends IWifiP2pManager.Stub { clearServiceRequests(c.mMessenger); } } + + private int selectGroupOwnerIntentIfNecessary(WifiP2pConfig config) { + int intent = config.groupOwnerIntent; + // return the legacy default value for invalid values. + if (intent != WifiP2pConfig.GROUP_OWNER_INTENT_AUTO) { + if (intent < WifiP2pConfig.GROUP_OWNER_INTENT_MIN + || intent > WifiP2pConfig.GROUP_OWNER_INTENT_MAX) { + intent = DEFAULT_GROUP_OWNER_INTENT; + } + return intent; + } + + WifiManager wifiManager = mContext.getSystemService(WifiManager.class); + + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + Log.d(TAG, "WifiInfo: " + wifiInfo); + int freq = wifiInfo.getFrequency(); + if (wifiInfo.getNetworkId() == WifiConfiguration.INVALID_NETWORK_ID) { + intent = DEFAULT_GROUP_OWNER_INTENT + 1; + } else if (ScanResult.is24GHz(freq)) { + intent = WifiP2pConfig.GROUP_OWNER_INTENT_MIN; + } else if (ScanResult.is5GHz(freq)) { + // If both sides use the maximum, the negotiation would fail. + intent = WifiP2pConfig.GROUP_OWNER_INTENT_MAX - 1; + } else { + intent = DEFAULT_GROUP_OWNER_INTENT; + } + Log.i(TAG, "change GO intent value from " + + config.groupOwnerIntent + " to " + intent); + return intent; + } + } /** diff --git a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java index cae812d58..171dc9b24 100644 --- a/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java +++ b/tests/wifitests/src/com/android/server/wifi/p2p/WifiP2pServiceImplTest.java @@ -56,6 +56,8 @@ import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.TetheringManager; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.net.wifi.WpsInfo; import android.net.wifi.p2p.WifiP2pConfig; @@ -65,6 +67,7 @@ import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pGroupList; import android.net.wifi.p2p.WifiP2pInfo; import android.net.wifi.p2p.WifiP2pManager; +import android.net.wifi.p2p.WifiP2pProvDiscEvent; import android.net.wifi.p2p.WifiP2pWfdInfo; import android.net.wifi.p2p.nsd.WifiP2pServiceInfo; import android.net.wifi.p2p.nsd.WifiP2pServiceRequest; @@ -167,6 +170,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Mock WifiP2pServiceRequest mTestWifiP2pServiceRequest; @Mock UserManager mUserManager; @Mock WifiP2pMetrics mWifiP2pMetrics; + @Mock WifiManager mWifiManager; + @Mock WifiInfo mWifiInfo; @Spy FakeWifiLog mLog; @Spy MockWifiP2pMonitor mWifiMonitor; @@ -626,6 +631,25 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { } /** + * Send simple API msg. + * + * Mock the API msg with objects. + * + * @param replyMessenger for checking replied message. + */ + private void sendSimpleMsg(Messenger replyMessenger, + int what, Object obj) throws Exception { + Message msg = Message.obtain(); + msg.what = what; + msg.obj = obj; + if (replyMessenger != null) { + msg.replyTo = replyMessenger; + } + mP2pStateMachineMessenger.send(Message.obtain(msg)); + mLooper.dispatchAll(); + } + + /** * force P2p State enter InactiveState to start others unit test * * @param clientBinder client binder to use for p2p channel init @@ -747,6 +771,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mContext.getResources()).thenReturn(mResources); + when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager); + when(mWifiManager.getConnectionInfo()).thenReturn(mWifiInfo); when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_DEVICE_NAME))).thenReturn(thisDeviceName); when(mWifiSettingsConfigStore.get(eq(WIFI_P2P_PENDING_FACTORY_RESET))).thenReturn(false); when(mHandlerThread.getLooper()).thenReturn(mLooper.getLooper()); @@ -772,6 +798,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { when(mWifiPermissionsUtil.checkNetworkStackPermission(anyInt())).thenReturn(true); when(mWifiPermissionsUtil.checkReadWifiCredentialPermission(anyInt())).thenReturn(true); when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(true); + when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), + anyBoolean())).thenReturn(true); when(mWifiNative.setupInterface(any(), any())).thenReturn(IFACE_NAME_P2P); when(mWifiNative.p2pGetDeviceAddress()).thenReturn(thisDeviceMac); doAnswer(new AnswerWithArguments() { @@ -982,8 +1010,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { forceP2pEnabled(mClient1); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); doNothing().when(mWifiPermissionsUtil).checkPackage(anyInt(), anyString()); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pServiceAdd(any())).thenReturn(true); sendAddLocalServiceMsg(mClientMessenger); verify(mWifiNative).p2pServiceAdd(any()); @@ -1000,8 +1026,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { forceP2pEnabled(mClient1); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); doNothing().when(mWifiPermissionsUtil).checkPackage(anyInt(), anyString()); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pServiceAdd(any())).thenReturn(false); sendAddLocalServiceMsg(mClientMessenger); verify(mWifiNative).p2pServiceAdd(any()); @@ -1062,8 +1086,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testConnectWithConfigValidAsGroupSuccess() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(true); sendConnectMsgWithConfigValidAsGroup(mClientMessenger); @@ -1079,8 +1101,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testConnectWithConfigValidAsGroupFailureWhenNativeCallFailure() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(false); sendConnectMsgWithConfigValidAsGroup(mClientMessenger); @@ -1147,8 +1167,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testCreateGroupWithConfigValidAsGroupSuccess() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); when(mWifiNative.p2pGroupAdd(any(), eq(false))).thenReturn(true); sendCreateGroupMsgWithConfigValidAsGroup(mClientMessenger); @@ -1165,8 +1183,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testCreateGroupWithConfigValidAsGroupFailureWhenNativeCallFailure() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); when(mWifiNative.p2pGroupAdd(any(), eq(false))).thenReturn(false); sendCreateGroupMsgWithConfigValidAsGroup(mClientMessenger); @@ -1247,8 +1263,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testDiscoverPeersSuccess() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pFind(anyInt())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendDiscoverPeersMsg(mClientMessenger); @@ -1264,8 +1278,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testDiscoverPeersFailureWhenNativeCallFailure() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pFind(anyInt())).thenReturn(false); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendDiscoverPeersMsg(mClientMessenger); @@ -1364,8 +1376,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { .thenReturn("mServiceDiscReqId"); when(mWifiNative.p2pFind(anyInt())).thenReturn(true); forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendAddServiceRequestMsg(mClientMessenger); sendDiscoverServiceMsg(mClientMessenger); @@ -1383,8 +1393,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testDiscoverServicesFailureWhenAddServiceRequestFailure() throws Exception { when(mWifiNative.p2pServDiscReq(anyString(), anyString())).thenReturn(null); forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendAddServiceRequestMsg(mClientMessenger); sendDiscoverServiceMsg(mClientMessenger); @@ -1404,8 +1412,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { .thenReturn("mServiceDiscReqId"); when(mWifiNative.p2pFind(anyInt())).thenReturn(false); forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendAddServiceRequestMsg(mClientMessenger); sendDiscoverServiceMsg(mClientMessenger); @@ -1504,8 +1510,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testRequestPeersSuccess() throws Exception { forceP2pEnabled(mClient1); mockPeersList(); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendRequestPeersMsg(mClientMessenger); verify(mClientHandler).sendMessage(mMessageCaptor.capture()); @@ -1581,8 +1585,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { sendGroupStartedMsg(mTestWifiP2pGroup); simulateTetherReady(); when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(false); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendRequestGroupInfoMsg(mClientMessenger); verify(mClientHandler).sendMessage(mMessageCaptor.capture()); @@ -1606,8 +1608,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { sendGroupStartedMsg(mTestWifiP2pGroup); simulateTetherReady(); when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(true); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendRequestGroupInfoMsg(mClientMessenger); verify(mClientHandler).sendMessage(mMessageCaptor.capture()); @@ -1791,8 +1791,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testPeerScanMetricWhenSendDiscoverPeers() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pFind(anyInt())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendDiscoverPeersMsg(mClientMessenger); @@ -1811,8 +1809,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { .thenReturn("mServiceDiscReqId"); when(mWifiNative.p2pFind(anyInt())).thenReturn(true); forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendAddServiceRequestMsg(mClientMessenger); sendDiscoverServiceMsg(mClientMessenger); @@ -1920,8 +1916,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testStartFreshConnectionEventWhenSendConnect() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); mockPeersList(); @@ -1943,8 +1937,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testStartReinvokeConnectionEventWhenSendConnect() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyInt())) .thenReturn(true); when(mTestWifiP2pDevice.isGroupOwner()).thenReturn(true); @@ -1976,8 +1968,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testStartReinvokeConnectionEventWhenCreateGroup() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendCreateGroupMsg(mClientMessenger, WifiP2pGroup.NETWORK_ID_PERSISTENT, null); @@ -1996,8 +1986,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testStartLocalConnectionWhenCreateGroup() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); // permissions for factory reset @@ -2028,8 +2016,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testStartLocalConnectionEventWhenCreateTemporaryGroup() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendCreateGroupMsg(mClientMessenger, WifiP2pGroup.NETWORK_ID_TEMPORARY, null); @@ -2049,8 +2035,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testStartFastConnectionEventWhenSendConnectWithConfig() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(any(), eq(true))).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2075,8 +2059,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testStartFastConnectionEventWhenCreateGroupWithConfig() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendCreateGroupMsg(mClientMessenger, 0, mTestWifiP2pFastConnectionConfig); @@ -2118,8 +2100,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testEndConnectionEventWhenTimeout() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2140,8 +2120,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testEndConnectionEventWhenCancel() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2161,8 +2139,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testEndConnectionEventWhenProvDiscFailure() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2182,8 +2158,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testEndConnectionEventWhenGroupRemoval() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2203,8 +2177,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testEndConnectionEventWhenInvitationFailure() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); when(mWifiNative.p2pGroupAdd(anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); @@ -2244,8 +2216,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testRequestDeviceInfoSuccessWhenP2pEnabled() throws Exception { forceP2pEnabled(mClient1); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO); verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"), @@ -2263,8 +2233,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { */ @Test public void testRequestDeviceInfoReturnEmptyWifiP2pDeviceWhenP2pDisabled() throws Exception { - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO); verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"), @@ -2284,8 +2252,6 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { public void testRequestDeviceInfoReturnsActualMacForNetworkSettingsApp() throws Exception { forceP2pEnabled(mClient1); when(mWifiPermissionsUtil.checkLocalMacAddressPermission(anyInt())).thenReturn(true); - when(mWifiPermissionsUtil.checkCanAccessWifiDirect(anyString(), anyString(), anyInt(), - anyBoolean())).thenReturn(true); sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); sendSimpleMsg(mClientMessenger, WifiP2pManager.REQUEST_DEVICE_INFO); verify(mWifiPermissionsUtil).checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"), @@ -3578,6 +3544,8 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { @Test public void testRequestDiscoveryStateWhenStarted() throws Exception { forceP2pEnabled(mClient1); + when(mWifiPermissionsUtil.checkCanAccessWifiDirect(any(), any(), + anyInt(), anyBoolean())).thenReturn(false); when(mWifiPermissionsUtil.checkCanAccessWifiDirect(eq("testPkg1"), eq("testFeature"), anyInt(), anyBoolean())).thenReturn(true); when(mWifiNative.p2pFind(anyInt())).thenReturn(true); @@ -4002,4 +3970,108 @@ public class WifiP2pServiceImplTest extends WifiBaseTest { Message message = mMessageCaptor.getValue(); assertEquals(WifiP2pManager.CONNECT_FAILED, message.what); } + + /** + * Verify the group owner intent value is selected correctly when no STA connection. + */ + @Test + public void testGroupOwnerIntentSelectionWithoutStaConnection() throws Exception { + when(mWifiInfo.getNetworkId()).thenReturn(WifiConfiguration.INVALID_NETWORK_ID); + when(mWifiInfo.getFrequency()).thenReturn(2412); + forceP2pEnabled(mClient1); + sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); + + mockEnterProvisionDiscoveryState(); + + WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent(); + pdEvent.device = mTestWifiP2pDevice; + sendSimpleMsg(null, + WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT, + pdEvent); + + ArgumentCaptor<WifiP2pConfig> configCaptor = + ArgumentCaptor.forClass(WifiP2pConfig.class); + verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean()); + WifiP2pConfig config = configCaptor.getValue(); + assertEquals(WifiP2pServiceImpl.DEFAULT_GROUP_OWNER_INTENT + 1, + config.groupOwnerIntent); + } + + /** + * Verify the group owner intent value is selected correctly when 2.4GHz STA connection. + */ + @Test + public void testGroupOwnerIntentSelectionWith24GStaConnection() throws Exception { + when(mWifiInfo.getNetworkId()).thenReturn(1); + when(mWifiInfo.getFrequency()).thenReturn(2412); + forceP2pEnabled(mClient1); + sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); + + mockEnterProvisionDiscoveryState(); + + WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent(); + pdEvent.device = mTestWifiP2pDevice; + sendSimpleMsg(null, + WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT, + pdEvent); + + ArgumentCaptor<WifiP2pConfig> configCaptor = + ArgumentCaptor.forClass(WifiP2pConfig.class); + verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean()); + WifiP2pConfig config = configCaptor.getValue(); + assertEquals(WifiP2pConfig.GROUP_OWNER_INTENT_MIN, + config.groupOwnerIntent); + } + + /** + * Verify the group owner intent value is selected correctly when 5GHz STA connection. + */ + @Test + public void testGroupOwnerIntentSelectionWith5GHzStaConnection() throws Exception { + when(mWifiInfo.getNetworkId()).thenReturn(1); + when(mWifiInfo.getFrequency()).thenReturn(5200); + forceP2pEnabled(mClient1); + sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); + + mockEnterProvisionDiscoveryState(); + + WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent(); + pdEvent.device = mTestWifiP2pDevice; + sendSimpleMsg(null, + WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT, + pdEvent); + + ArgumentCaptor<WifiP2pConfig> configCaptor = + ArgumentCaptor.forClass(WifiP2pConfig.class); + verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean()); + WifiP2pConfig config = configCaptor.getValue(); + assertEquals(WifiP2pConfig.GROUP_OWNER_INTENT_MAX - 1, + config.groupOwnerIntent); + } + + /** + * Verify the group owner intent value is selected correctly when 6GHz STA connection. + */ + @Test + public void testGroupOwnerIntentSelectionWith6GHzStaConnection() throws Exception { + when(mWifiInfo.getNetworkId()).thenReturn(1); + when(mWifiInfo.getFrequency()).thenReturn(6000); + forceP2pEnabled(mClient1); + sendChannelInfoUpdateMsg("testPkg1", "testFeature", mClient1, mClientMessenger); + + mockEnterProvisionDiscoveryState(); + + WifiP2pProvDiscEvent pdEvent = new WifiP2pProvDiscEvent(); + pdEvent.device = mTestWifiP2pDevice; + sendSimpleMsg(null, + WifiP2pMonitor.P2P_PROV_DISC_PBC_RSP_EVENT, + pdEvent); + + ArgumentCaptor<WifiP2pConfig> configCaptor = + ArgumentCaptor.forClass(WifiP2pConfig.class); + verify(mWifiNative).p2pConnect(configCaptor.capture(), anyBoolean()); + WifiP2pConfig config = configCaptor.getValue(); + assertEquals(WifiP2pServiceImpl.DEFAULT_GROUP_OWNER_INTENT, + config.groupOwnerIntent); + } } |