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

Commit 7336f0a3 authored by Hall Liu's avatar Hall Liu Committed by Automerger Merge Worker
Browse files

Refactor SubscriptionManager caching code am: 29b1874f am: 2ec58b11

Change-Id: Icbf02f035f765129189645553f45bc98c1841d70
parents 96a18e55 2ec58b11
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1121,6 +1121,7 @@ filegroup {
        "core/java/com/android/internal/os/SomeArgs.java",
        "core/java/com/android/internal/os/SomeArgs.java",
        "core/java/com/android/internal/util/BitwiseInputStream.java",
        "core/java/com/android/internal/util/BitwiseInputStream.java",
        "core/java/com/android/internal/util/BitwiseOutputStream.java",
        "core/java/com/android/internal/util/BitwiseOutputStream.java",
        "core/java/com/android/internal/util/FunctionalUtils.java",
        "core/java/com/android/internal/util/HexDump.java",
        "core/java/com/android/internal/util/HexDump.java",
        "core/java/com/android/internal/util/IndentingPrintWriter.java",
        "core/java/com/android/internal/util/IndentingPrintWriter.java",
        "core/java/com/android/internal/util/Preconditions.java",
        "core/java/com/android/internal/util/Preconditions.java",
+44 −47
Original line number Original line Diff line number Diff line
@@ -63,6 +63,7 @@ import com.android.internal.telephony.ISetOpportunisticDataCallback;
import com.android.internal.telephony.ISub;
import com.android.internal.telephony.ISub;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.util.HandlerExecutor;
import com.android.internal.telephony.util.HandlerExecutor;
import com.android.internal.util.FunctionalUtils;
import com.android.internal.util.Preconditions;
import com.android.internal.util.Preconditions;
import com.android.telephony.Rlog;
import com.android.telephony.Rlog;


@@ -149,21 +150,49 @@ public class SubscriptionManager {


    private static final int MAX_CACHE_SIZE = 4;
    private static final int MAX_CACHE_SIZE = 4;


    private static PropertyInvalidatedCache<Void, Integer> sDefaultSubIdCache =
    private static class SubscriptionPropertyInvalidatedCache<T>
            new PropertyInvalidatedCache<Void, Integer>(
            extends PropertyInvalidatedCache<Void, T> {
                    MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_SUB_ID_PROPERTY) {
        private final FunctionalUtils.ThrowingFunction<ISub, T> mSubscriptionInterfaceMethod;
            @Override
        private final String mCacheKeyProperty;
            protected Integer recompute(Void query) {
        private final T mDefaultValue;
                return getDefaultSubscriptionIdInternal();

            }};
        SubscriptionPropertyInvalidatedCache(
                FunctionalUtils.ThrowingFunction<ISub, T> subscriptionInterfaceMethod,
                String cacheKeyProperty,
                T defaultValue) {
            super(MAX_CACHE_SIZE, cacheKeyProperty);
            mSubscriptionInterfaceMethod = subscriptionInterfaceMethod;
            mCacheKeyProperty = cacheKeyProperty;
            mDefaultValue = defaultValue;
        }


    private static PropertyInvalidatedCache<Void, Integer> sDefaultDataSubIdCache =
            new PropertyInvalidatedCache<Void, Integer>(
                    MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY) {
        @Override
        @Override
            protected Integer recompute(Void query) {
        protected T recompute(Void aVoid) {
                return getDefaultDataSubscriptionIdInternal();
            T result = mDefaultValue;
            }};

            try {
                ISub iSub = TelephonyManager.getSubscriptionService();
                if (iSub != null) {
                    result = mSubscriptionInterfaceMethod.applyOrThrow(iSub);
                }
            } catch (Exception ex) {
                Rlog.w(LOG_TAG, "Failed to recompute cache key for " + mCacheKeyProperty);
            }

            if (VDBG) logd("recomputing " + mCacheKeyProperty + ", result = " + result);
            return result;
        }
    }

    private static SubscriptionPropertyInvalidatedCache<Integer> sDefaultSubIdCache =
            new SubscriptionPropertyInvalidatedCache<>(ISub::getDefaultSubId,
                    CACHE_KEY_DEFAULT_SUB_ID_PROPERTY,
                    INVALID_SUBSCRIPTION_ID);

    private static SubscriptionPropertyInvalidatedCache<Integer> sDefaultDataSubIdCache =
            new SubscriptionPropertyInvalidatedCache<>(ISub::getDefaultDataSubId,
                    CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY,
                    INVALID_SUBSCRIPTION_ID);


    private static PropertyInvalidatedCache<Void, Integer> sDefaultSmsSubIdCache =
    private static PropertyInvalidatedCache<Void, Integer> sDefaultSmsSubIdCache =
            new SubscriptionPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
            new SubscriptionPropertyInvalidatedCache<>(ISub::getDefaultSmsSubId,
@@ -1888,22 +1917,6 @@ public class SubscriptionManager {
        return sDefaultSubIdCache.query(null);
        return sDefaultSubIdCache.query(null);
    }
    }


    private static int getDefaultSubscriptionIdInternal() {
        int subId = INVALID_SUBSCRIPTION_ID;

        try {
            ISub iSub = TelephonyManager.getSubscriptionService();
            if (iSub != null) {
                subId = iSub.getDefaultSubId();
            }
        } catch (RemoteException ex) {
            // ignore it
        }

        if (VDBG) logd("getDefaultSubId=" + subId);
        return subId;
    }

    /**
    /**
     * Returns the system's default voice subscription id.
     * Returns the system's default voice subscription id.
     *
     *
@@ -2045,22 +2058,6 @@ public class SubscriptionManager {
        return sDefaultDataSubIdCache.query(null);
        return sDefaultDataSubIdCache.query(null);
    }
    }


    private static int getDefaultDataSubscriptionIdInternal() {
        int subId = INVALID_SUBSCRIPTION_ID;

        try {
            ISub iSub = TelephonyManager.getSubscriptionService();
            if (iSub != null) {
                subId = iSub.getDefaultDataSubId();
            }
        } catch (RemoteException ex) {
            // ignore it
        }

        if (VDBG) logd("getDefaultDataSubscriptionId, sub id = " + subId);
        return subId;
    }

    /**
    /**
     * Set the subscription which will be used by default for data, with the subscription which
     * Set the subscription which will be used by default for data, with the subscription which
     * the supplied subscription ID corresponds to; or throw a RuntimeException if the supplied
     * the supplied subscription ID corresponds to; or throw a RuntimeException if the supplied