diff --git a/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java b/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java index cd57c8d298..fb162267bb 100644 --- a/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java +++ b/Tethering/src/com/android/networkstack/tethering/EntitlementManager.java @@ -167,6 +167,11 @@ public class EntitlementManager { } else { mLog.e("Current user (" + currentUserId + ") is not allowed to perform entitlement check."); + // If the user is not allowed to perform an entitlement check + // (e.g., a non-admin user), notify the receiver immediately. + // This is necessary because the entitlement check app cannot + // be launched to conduct the check and deliver the results. + receiver.send(TETHER_ERROR_PROVISIONING_FAILED, null); return null; } } else { diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java index bec7b94b16..51c2d56d09 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java @@ -188,8 +188,9 @@ public final class EntitlementManagerTest { if (intent != null) { assertUiTetherProvisioningIntent(type, config, receiver, intent); uiProvisionCount++; + // If the intent is null, the result is sent by the underlying method. + receiver.send(fakeEntitlementResult, null); } - receiver.send(fakeEntitlementResult, null); return intent; } @@ -644,6 +645,15 @@ public final class EntitlementManagerTest { mEnMgr.startProvisioningIfNeeded(TETHERING_USB, true); mLooper.dispatchAll(); assertEquals(expectedUiProvisionCount, mDeps.uiProvisionCount); + if (expectedUiProvisionCount == 0) { // Failed to launch entitlement UI. + assertLatestEntitlementResult(TETHERING_USB, TETHER_ERROR_PROVISIONING_FAILED, false); + verify(mTetherProvisioningFailedListener).onTetherProvisioningFailed(TETHERING_USB, + FAILED_TETHERING_REASON); + } else { + assertLatestEntitlementResult(TETHERING_USB, TETHER_ERROR_NO_ERROR, false); + verify(mTetherProvisioningFailedListener, never()).onTetherProvisioningFailed(anyInt(), + anyString()); + } } @Test