diff --git a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java index e0de592f8d..824727e002 100644 --- a/Tethering/common/TetheringLib/src/android/net/TetheringManager.java +++ b/Tethering/common/TetheringLib/src/android/net/TetheringManager.java @@ -1188,6 +1188,17 @@ public class TetheringManager { public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof TetheringRequest otherRequest)) return false; + if (!equalsIgnoreUidPackage(otherRequest)) return false; + TetheringRequestParcel parcel = getParcel(); + TetheringRequestParcel otherParcel = otherRequest.getParcel(); + return parcel.uid == otherParcel.uid + && Objects.equals(parcel.packageName, otherParcel.packageName); + } + + /** + * @hide + */ + public boolean equalsIgnoreUidPackage(TetheringRequest otherRequest) { TetheringRequestParcel parcel = getParcel(); TetheringRequestParcel otherParcel = otherRequest.getParcel(); return parcel.tetheringType == otherParcel.tetheringType @@ -1197,8 +1208,6 @@ public class TetheringManager { && parcel.showProvisioningUi == otherParcel.showProvisioningUi && parcel.connectivityScope == otherParcel.connectivityScope && Objects.equals(parcel.softApConfig, otherParcel.softApConfig) - && parcel.uid == otherParcel.uid - && Objects.equals(parcel.packageName, otherParcel.packageName) && Objects.equals(parcel.interfaceName, otherParcel.interfaceName); } diff --git a/Tethering/src/com/android/networkstack/tethering/Tethering.java b/Tethering/src/com/android/networkstack/tethering/Tethering.java index bdc9387ee0..70934af95d 100644 --- a/Tethering/src/com/android/networkstack/tethering/Tethering.java +++ b/Tethering/src/com/android/networkstack/tethering/Tethering.java @@ -664,7 +664,7 @@ public class Tethering { final TetheringRequest unfinishedRequest = mActiveTetheringRequests.get(type); // If tethering is already enabled with a different request, // disable before re-enabling. - if (unfinishedRequest != null && !unfinishedRequest.equals(request)) { + if (unfinishedRequest != null && !unfinishedRequest.equalsIgnoreUidPackage(request)) { enableTetheringInternal(type, false /* disabled */, unfinishedRequest.getInterfaceName(), null); mEntitlementMgr.stopProvisioningIfNeeded(type); diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java index 32f0756bfc..97758cf01e 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringTest.java @@ -267,8 +267,9 @@ public class TetheringTest { private static final String TEST_P2P_REGEX = "test_p2p-p2p\\d-.*"; private static final String TEST_BT_REGEX = "test_pan\\d"; private static final int TEST_CALLER_UID = 1000; + private static final int TEST_CALLER_UID_2 = 2000; private static final String TEST_CALLER_PKG = "com.test.tethering"; - + private static final String TEST_CALLER_PKG_2 = "com.test.tethering2"; private static final int CELLULAR_NETID = 100; private static final int WIFI_NETID = 101; private static final int DUN_NETID = 102; @@ -785,7 +786,10 @@ public class TetheringTest { if (interfaceName != null) { builder.setInterfaceName(interfaceName); } - return builder.build(); + TetheringRequest request = builder.build(); + request.setUid(TEST_CALLER_UID); + request.setPackageName(TEST_CALLER_PKG); + return request; } @NonNull @@ -2786,6 +2790,17 @@ public class TetheringTest { verify(mUsbManager, never()).setCurrentFunctions(UsbManager.FUNCTION_NONE); reset(mUsbManager); + // Enable USB tethering again with the same request but different uid/package and expect no + // change to USB. + TetheringRequest differentUidPackage = createTetheringRequest(TETHERING_USB); + differentUidPackage.setUid(TEST_CALLER_UID_2); + differentUidPackage.setPackageName(TEST_CALLER_PKG_2); + mTethering.startTethering(differentUidPackage, TEST_CALLER_PKG_2, secondResult); + mLooper.dispatchAll(); + secondResult.assertHasResult(); + verify(mUsbManager, never()).setCurrentFunctions(UsbManager.FUNCTION_NONE); + reset(mUsbManager); + // Enable USB tethering with a different request and expect that USB is stopped and // started. mTethering.startTethering(createTetheringRequest(TETHERING_USB,