From 0d9ec2f351a257ca06eae2be600b2aaf195631fb Mon Sep 17 00:00:00 2001 From: Lee Shombert Date: Fri, 29 Jul 2022 07:39:36 -0700 Subject: 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 --- .../android/telephony/SubscriptionManager.java | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 1f97d862fb6b..f28408e1abc9 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -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())); } } - -- cgit v1.2.3-59-g8ed1b