Merge cherrypicks of ['googleplex-android-review.googlesource.com/32784601'] into 25Q2-release.

Change-Id: Ia844cf2e2bf68fe98db30a28e53c94fdc465cf44
diff --git a/src/android/net/util/RawPacketTracker.java b/src/android/net/util/RawPacketTracker.java
index b5adcd1..20f0873 100644
--- a/src/android/net/util/RawPacketTracker.java
+++ b/src/android/net/util/RawPacketTracker.java
@@ -159,7 +159,7 @@
         tracker.setCapture(true);
 
         // remove scheduled stop events if it already in the queue
-        mHandler.removeMessages(CMD_STOP_CAPTURE, ifaceName);
+        mHandler.removeEqualMessages(CMD_STOP_CAPTURE, ifaceName);
 
         // capture up to configured capture time and stop capturing
         final Message stopMsg = mHandler.obtainMessage(CMD_STOP_CAPTURE, ifaceName);
@@ -184,7 +184,7 @@
 
         final Message msg = mHandler.obtainMessage(CMD_STOP_CAPTURE, ifaceName);
         // remove scheduled stop events if it already in the queue
-        mHandler.removeMessages(CMD_STOP_CAPTURE, ifaceName);
+        mHandler.removeEqualMessages(CMD_STOP_CAPTURE, ifaceName);
         mHandler.sendMessage(msg);
     }
 
diff --git a/tests/unit/src/android/net/util/RawPacketTrackerTest.kt b/tests/unit/src/android/net/util/RawPacketTrackerTest.kt
index 9e8ad5a..90af65b 100644
--- a/tests/unit/src/android/net/util/RawPacketTrackerTest.kt
+++ b/tests/unit/src/android/net/util/RawPacketTrackerTest.kt
@@ -23,6 +23,7 @@
 import com.android.testutils.assertThrows
 import com.android.testutils.visibleOnHandlerThread
 import kotlin.test.assertEquals
+import kotlin.test.assertFalse
 import kotlin.test.assertTrue
 import org.junit.After
 import org.junit.Before
@@ -100,6 +101,8 @@
         // stop capturing
         stopCaptureOnHandler(ifaceName)
         verifySetCapture(false, 1)
+
+        assertFalse(rawTracker.handler.hasMessages(RawPacketTracker.CMD_STOP_CAPTURE))
         verifyNoMoreInteractions(tracker)
     }
 
@@ -166,7 +169,8 @@
     }
 
     private fun startCaptureOnHandler(
-        ifaceName: String, maxCaptureTime: Long = TEST_MAX_CAPTURE_TIME_MS
+        ifaceName: String,
+        maxCaptureTime: Long = TEST_MAX_CAPTURE_TIME_MS
     ) {
         visibleOnHandlerThread(rawTracker.handler) {
             rawTracker.startCapture(ifaceName, maxCaptureTime)
@@ -174,8 +178,10 @@
     }
 
     private fun stopCaptureOnHandler(ifaceName: String) {
+        // always create new instance to validate removal of duplicated CMD_STOP_CAPTURE messages
+        val ifaceNameCloned = String(ifaceName.toCharArray())
         visibleOnHandlerThread(rawTracker.handler) {
-            rawTracker.stopCapture(ifaceName)
+            rawTracker.stopCapture(ifaceNameCloned)
         }
     }