Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d9ec2f3 authored by Lee Shombert's avatar Lee Shombert
Browse files

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
parent cbaad935
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -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()));
    }
}