diff options
8 files changed, 42 insertions, 9 deletions
diff --git a/PREUPLOAD.cfg b/PREUPLOAD.cfg index 32b4e3bb6a..20b6ab2111 100644 --- a/PREUPLOAD.cfg +++ b/PREUPLOAD.cfg @@ -1,6 +1,6 @@ [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} -metrics_pdd_hook = ${REPO_ROOT}/frameworks/opt/net/wifi/metrics_pdd_hook.py "service/proto/src/metrics.proto" ${PREUPLOAD_COMMIT_MESSAGE} ${PREUPLOAD_FILES} +metrics_pdd_hook = ${REPO_ROOT}/packages/modules/Wifi/metrics_pdd_hook.py "service/proto/src/metrics.proto" ${PREUPLOAD_COMMIT_MESSAGE} ${PREUPLOAD_FILES} [Builtin Hooks] commit_msg_bug_field = true diff --git a/service/java/com/android/server/wifi/ActiveModeManager.java b/service/java/com/android/server/wifi/ActiveModeManager.java index 40fba52ab3..44d8576018 100644 --- a/service/java/com/android/server/wifi/ActiveModeManager.java +++ b/service/java/com/android/server/wifi/ActiveModeManager.java @@ -17,6 +17,7 @@ package com.android.server.wifi; import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.WorkSource; import java.io.FileDescriptor; @@ -138,7 +139,7 @@ public interface ActiveModeManager { /** * Method to get the role for a mode manager. */ - Role getRole(); + @Nullable Role getRole(); /** * Method to get the iface name for the mode manager. diff --git a/service/java/com/android/server/wifi/ActiveModeWarden.java b/service/java/com/android/server/wifi/ActiveModeWarden.java index cb647527b5..e475176646 100644 --- a/service/java/com/android/server/wifi/ActiveModeWarden.java +++ b/service/java/com/android/server/wifi/ActiveModeWarden.java @@ -779,10 +779,11 @@ public class ActiveModeWarden { /** Get all client mode managers in the specified roles. */ @NonNull public List<ConcreteClientModeManager> getClientModeManagersInRoles(ClientRole... roles) { - Set<ClientRole> rolesList = Set.of(roles); + Set<ClientRole> rolesSet = Set.of(roles); List<ConcreteClientModeManager> result = new ArrayList<>(); for (ConcreteClientModeManager manager : mClientModeManagers) { - if (rolesList.contains(manager.getRole())) { + ClientRole role = manager.getRole(); + if (role != null && rolesSet.contains(role)) { result.add(manager); } } diff --git a/service/java/com/android/server/wifi/ConcreteClientModeManager.java b/service/java/com/android/server/wifi/ConcreteClientModeManager.java index 9ef9bf70f2..89b8278c51 100644 --- a/service/java/com/android/server/wifi/ConcreteClientModeManager.java +++ b/service/java/com/android/server/wifi/ConcreteClientModeManager.java @@ -424,7 +424,7 @@ public class ConcreteClientModeManager implements ClientModeManager { } @Override - public ClientRole getRole() { + @Nullable public ClientRole getRole() { return mRole; } diff --git a/service/java/com/android/server/wifi/DefaultClientModeManager.java b/service/java/com/android/server/wifi/DefaultClientModeManager.java index 7f34befd26..3ff79a91d4 100644 --- a/service/java/com/android/server/wifi/DefaultClientModeManager.java +++ b/service/java/com/android/server/wifi/DefaultClientModeManager.java @@ -16,6 +16,7 @@ package com.android.server.wifi; +import android.annotation.Nullable; import android.net.wifi.WifiManager; import android.os.WorkSource; @@ -37,7 +38,7 @@ public class DefaultClientModeManager implements ClientModeManager, ClientModeDe } @Override - public ClientRole getRole() { + @Nullable public ClientRole getRole() { return null; } diff --git a/service/java/com/android/server/wifi/SoftApManager.java b/service/java/com/android/server/wifi/SoftApManager.java index 9a3d2fd6b1..8915a2442c 100644 --- a/service/java/com/android/server/wifi/SoftApManager.java +++ b/service/java/com/android/server/wifi/SoftApManager.java @@ -267,7 +267,7 @@ public class SoftApManager implements ActiveModeManager { } @Override - public SoftApRole getRole() { + @Nullable public SoftApRole getRole() { return mRole; } diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index e35bd55a59..7c41a1e2d4 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -2967,8 +2967,8 @@ public class WifiServiceImpl extends BaseWifiService { long ident = Binder.clearCallingIdentity(); try { WifiInfo result = mWifiThreadRunner.call( - getClientModeManagerForConnectionInfo(uid, callingPackage) - ::syncRequestConnectionInfo, new WifiInfo()); + () -> getClientModeManagerForConnectionInfo(uid, callingPackage) + .syncRequestConnectionInfo(), new WifiInfo()); boolean hideDefaultMacAddress = true; boolean hideBssidSsidNetworkIdAndFqdn = true; diff --git a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java index a64ec9661f..4c9ae4ffcd 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java @@ -3277,4 +3277,34 @@ public class ActiveModeWardenTest extends WifiBaseTest { // Ensure we get the callback immediately. verify(primarCmmCallback).onChange(null, mClientModeManager); } + + @Test + public void testGetCmmInRolesWithNullRoleInOneCmm() throws Exception { + enterClientModeActiveState(); + + // Ensure that we can create more client ifaces. + when(mWifiNative.isItPossibleToCreateStaIface(any())).thenReturn(true); + when(mResources.getBoolean(R.bool.config_wifiMultiStaLocalOnlyConcurrencyEnabled)) + .thenReturn(true); + + ConcreteClientModeManager additionalClientModeManager = + mock(ConcreteClientModeManager.class); + when(mWifiInjector.makeClientModeManager( + any(), any(), any(), anyBoolean())).thenReturn(additionalClientModeManager); + + mActiveModeWarden.requestLocalOnlyClientModeManager( + mock(ActiveModeWarden.ExternalClientModeManagerRequestListener.class), + TEST_WORKSOURCE, TEST_SSID_2, TEST_BSSID_2); + mLooper.dispatchAll(); + + // No role set, should be ignored. + when(additionalClientModeManager.getRole()).thenReturn(null); + assertEquals(1, mActiveModeWarden.getClientModeManagersInRoles( + ROLE_CLIENT_PRIMARY, ROLE_CLIENT_LOCAL_ONLY).size()); + + // Role set, should be included. + when(additionalClientModeManager.getRole()).thenReturn(ROLE_CLIENT_LOCAL_ONLY); + assertEquals(2, mActiveModeWarden.getClientModeManagersInRoles( + ROLE_CLIENT_PRIMARY, ROLE_CLIENT_LOCAL_ONLY).size()); + } } |