[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);