[RTT] Run HDM status change listener on a local handler
Specify a local handler on which to run the HDM status change
listener. Otherwise (with null) the status listener is run synchronous/
blocking (inline) and is causing deadlock.
Bug: 72463371
Test: unit test, integration test
Change-Id: I20cfc4ffe05307b30623cdd435aaa7275290b406
(cherry picked from commit bf8ba2170fc9a8f019b932eb43f375f341afcc89)
diff --git a/service/java/com/android/server/wifi/rtt/RttNative.java b/service/java/com/android/server/wifi/rtt/RttNative.java
index 9ffda91..e749248 100644
--- a/service/java/com/android/server/wifi/rtt/RttNative.java
+++ b/service/java/com/android/server/wifi/rtt/RttNative.java
@@ -30,6 +30,7 @@
import android.net.wifi.rtt.RangingRequest;
import android.net.wifi.rtt.RangingResult;
import android.net.wifi.rtt.ResponderConfig;
+import android.os.Handler;
import android.os.RemoteException;
import android.util.Log;
@@ -63,13 +64,13 @@
/**
* Initialize the object - registering with the HAL device manager.
*/
- public void start() {
+ public void start(Handler handler) {
synchronized (mLock) {
mHalDeviceManager.initialize();
mHalDeviceManager.registerStatusListener(() -> {
if (VDBG) Log.d(TAG, "hdm.onStatusChanged");
updateController();
- }, null);
+ }, handler);
updateController();
}
}
diff --git a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
index 8918fda..c709ec9 100644
--- a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
+++ b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
@@ -176,7 +176,7 @@
}, intentFilter);
mRttServiceSynchronized.mHandler.post(() -> {
- rttNative.start();
+ rttNative.start(mRttServiceSynchronized.mHandler);
});
}
diff --git a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
index 3f64de9..6048e52 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttNativeTest.java
@@ -88,7 +88,7 @@
when(mockRttController.rangeCancel(anyInt(), any(ArrayList.class))).thenReturn(status);
mDut = new RttNative(mockRttServiceImpl, mockHalDeviceManager);
- mDut.start();
+ mDut.start(null);
verify(mockHalDeviceManager).registerStatusListener(mHdmStatusListener.capture(), any());
verify(mockRttController).registerEventCallback(any());
verify(mockRttServiceImpl).enableIfPossible();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
index 838d379..fc7112a 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
@@ -207,7 +207,7 @@
BroadcastReceiver.class);
verify(mockContext, times(2)).registerReceiver(bcastRxCaptor.capture(),
any(IntentFilter.class));
- verify(mockNative).start();
+ verify(mockNative).start(any());
mPowerBcastReceiver = bcastRxCaptor.getAllValues().get(0);
mLocationModeReceiver = bcastRxCaptor.getAllValues().get(1);