Correct cache use in SubscriptionManager

Bug: 234632427

Change the SubscriptionManager caches so that error conditions
(RemoteException, null ISub, TimeoutException) do not generate values
in the cache.  Instead, these error conditions are handled above the
cache.

Test: atest
 * SubscriptionControllerTest
 * android.telephony.cts.SubscriptionManagerTest
Change-Id: I758a4636a49e7889cfd08b613e90cb09411fc8ab
This commit is contained in:
Lee Shombert
2022-07-29 07:39:36 -07:00
parent cbaad935ee
commit 0d9ec2f351

View File

@@ -194,13 +194,24 @@ public class SubscriptionManager {
}
@Override
public T recompute(Void aVoid) {
public T recompute(Void query) {
// This always throws on any error. The exceptions must be handled outside
// the cache.
try {
return mInterfaceMethod.applyOrThrow(TelephonyManager.getSubscriptionService());
} catch (Exception re) {
throw new RuntimeException(re);
}
}
@Override
public T query(Void query) {
T result = mDefaultValue;
try {
ISub iSub = TelephonyManager.getSubscriptionService();
if (iSub != null) {
result = mInterfaceMethod.applyOrThrow(iSub);
result = super.query(query);
}
} catch (Exception ex) {
Rlog.w(LOG_TAG, "Failed to recompute cache key for " + mCacheKeyProperty);
@@ -229,12 +240,24 @@ public class SubscriptionManager {
@Override
public T recompute(Integer query) {
// This always throws on any error. The exceptions must be handled outside
// the cache.
try {
return mInterfaceMethod.applyOrThrow(
TelephonyManager.getSubscriptionService(), query);
} catch (Exception re) {
throw new RuntimeException(re);
}
}
@Override
public T query(Integer query) {
T result = mDefaultValue;
try {
ISub iSub = TelephonyManager.getSubscriptionService();
if (iSub != null) {
result = mInterfaceMethod.applyOrThrow(iSub, query);
result = super.query(query);
}
} catch (Exception ex) {
Rlog.w(LOG_TAG, "Failed to recompute cache key for " + mCacheKeyProperty);
@@ -4118,4 +4141,3 @@ public class SubscriptionManager {
usageSetting, subscriptionId, mContext.getOpPackageName()));
}
}