diff options
author | 2022-12-07 01:46:32 +0000 | |
---|---|---|
committer | 2022-12-07 01:46:32 +0000 | |
commit | cbcbf1b7cdf4ee6829e7d462a78f53f465534b4a (patch) | |
tree | f1855b740284cb849d8ccc611f82e925bbc69ea1 | |
parent | bf9e4be3053dd58731ca19358460495276dd039f (diff) | |
parent | 7705de3e986d33d30cbc6b1d035b1f222ba8452b (diff) |
Merge "Apply "most-recent" delivery policy to ACTION_RSSI_CHANGED."
-rw-r--r-- | service/java/com/android/server/wifi/ClientModeImpl.java | 11 | ||||
-rw-r--r-- | service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java | 23 |
2 files changed, 33 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java index 8b3b636b02..8fd71c5fb7 100644 --- a/service/java/com/android/server/wifi/ClientModeImpl.java +++ b/service/java/com/android/server/wifi/ClientModeImpl.java @@ -37,6 +37,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.app.AlarmManager; +import android.app.BroadcastOptions; import android.app.admin.SecurityLog; import android.content.BroadcastReceiver; import android.content.Context; @@ -2755,10 +2756,18 @@ public class ClientModeImpl extends StateMachine implements ClientMode { Intent intent = new Intent(WifiManager.RSSI_CHANGED_ACTION); intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(WifiManager.EXTRA_NEW_RSSI, newRssi); + final BroadcastOptions opts; + if (SdkLevel.isAtLeastU()) { + opts = BroadcastOptions.makeBasic(); + opts.setDeliveryGroupPolicy(BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT); + } else { + opts = null; + } mBroadcastQueue.queueOrSendBroadcast( mClientModeManager, () -> mContext.sendBroadcastAsUser(intent, UserHandle.ALL, - android.Manifest.permission.ACCESS_WIFI_STATE)); + android.Manifest.permission.ACCESS_WIFI_STATE, + opts == null ? null : opts.toBundle())); } private void sendLinkConfigurationChangedBroadcast() { diff --git a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java index c563f464d2..f5b31023c3 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java @@ -76,6 +76,7 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.mockito.Mockito.withSettings; +import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; @@ -143,6 +144,7 @@ import android.os.Looper; import android.os.Messenger; import android.os.PowerManager; import android.os.Process; +import android.os.UserHandle; import android.os.test.TestLooper; import android.provider.Settings; import android.telephony.TelephonyManager; @@ -3424,6 +3426,7 @@ public class ClientModeImplTest extends WifiBaseTest { mCmi.enableRssiPolling(true); connect(); mLooper.dispatchAll(); + assertRssiChangeBroadcastSent(); when(mClock.getWallClockMillis()).thenReturn(startMillis + 3333); mLooper.dispatchAll(); WifiInfo wifiInfo = mWifiInfo; @@ -5249,6 +5252,26 @@ public class ClientModeImplTest extends WifiBaseTest { } return null; }).when(mContext).sendBroadcastAsUser(any(), any(), anyString()); + + doAnswer(invocation -> { + final Intent intent = invocation.getArgument(0); + if (WifiManager.RSSI_CHANGED_ACTION.equals(intent.getAction())) { + fail("Should not send RSSI_CHANGED broadcast!"); + } + return null; + }).when(mContext).sendBroadcastAsUser(any(), any(), anyString(), any()); + } + + /** + * Verifies that RSSI change broadcast is sent. + */ + private void assertRssiChangeBroadcastSent() throws Exception { + ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).sendBroadcastAsUser(intentCaptor.capture(), + eq(UserHandle.ALL), eq(Manifest.permission.ACCESS_WIFI_STATE), any()); + Intent intent = intentCaptor.getValue(); + assertNotNull(intent); + assertEquals(WifiManager.RSSI_CHANGED_ACTION, intent.getAction()); } /** |