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

Commit 4362f097 authored by SongFerng Wang's avatar SongFerng Wang Committed by Automerger Merge Worker
Browse files

Merge "Fix the burst callback issue on the repository" into main am: a23320ee

parents 3521df9d a23320ee
Loading
Loading
Loading
Loading
+52 −13
Original line number Original line Diff line number Diff line
@@ -225,6 +225,9 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
            createTelephonyManagerBySubId(subId);
            createTelephonyManagerBySubId(subId);
            mDataRoamingObserver.register(mContext, subId);
            mDataRoamingObserver.register(mContext, subId);
        }
        }
        // When one client registers callback first time, convey the cached results to the client
        // so that the client is aware of the content therein.
        sendAvailableSubInfoCache(mobileNetworkCallback);
    }
    }


    public void addRegisterBySubId(int subId) {
    public void addRegisterBySubId(int subId) {
@@ -415,7 +418,15 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions


    private void onAvailableSubInfoChanged(
    private void onAvailableSubInfoChanged(
            List<SubscriptionInfoEntity> availableSubInfoEntityList) {
            List<SubscriptionInfoEntity> availableSubInfoEntityList) {
        synchronized (this) {
            if (mAvailableSubInfoEntityList != null
                    && mAvailableSubInfoEntityList.size() == availableSubInfoEntityList.size()
                    && mAvailableSubInfoEntityList.containsAll(availableSubInfoEntityList)) {
                Log.d(TAG, "onAvailableSubInfoChanged, duplicates = " + availableSubInfoEntityList);
                return;
            }
            mAvailableSubInfoEntityList = new ArrayList<>(availableSubInfoEntityList);
            mAvailableSubInfoEntityList = new ArrayList<>(availableSubInfoEntityList);
        }
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "onAvailableSubInfoChanged, availableSubInfoEntityList = "
            Log.d(TAG, "onAvailableSubInfoChanged, availableSubInfoEntityList = "
                    + availableSubInfoEntityList);
                    + availableSubInfoEntityList);
@@ -425,25 +436,50 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
        }
        }
        mMetricsFeatureProvider.action(mContext,
        mMetricsFeatureProvider.action(mContext,
                SettingsEnums.ACTION_MOBILE_NETWORK_DB_NOTIFY_SUB_INFO_IS_CHANGED, 0);
                SettingsEnums.ACTION_MOBILE_NETWORK_DB_NOTIFY_SUB_INFO_IS_CHANGED, 0);
        onActiveSubInfoListChanged(mAvailableSubInfoEntityList);
        onActiveSubInfoListChanged(availableSubInfoEntityList);
    }
    }


    private void onActiveSubInfoListChanged(
    private void onActiveSubInfoListChanged(
            List<SubscriptionInfoEntity> availableSubInfoEntityList) {
            List<SubscriptionInfoEntity> availableSubInfoEntityList) {
        mActiveSubInfoEntityList = availableSubInfoEntityList.stream()
        List<SubscriptionInfoEntity> activeSubInfoEntityList =
                availableSubInfoEntityList.stream()
                .filter(SubscriptionInfoEntity::isActiveSubscription)
                .filter(SubscriptionInfoEntity::isActiveSubscription)
                .filter(SubscriptionInfoEntity::isSubscriptionVisible)
                .filter(SubscriptionInfoEntity::isSubscriptionVisible)
                .collect(Collectors.toList());
                .collect(Collectors.toList());
        if (DEBUG) {
        if (DEBUG) {
            Log.d(TAG, "onActiveSubInfoChanged, activeSubInfoEntityList = "
            Log.d(TAG, "onActiveSubInfoChanged, activeSubInfoEntityList = "
                    + mActiveSubInfoEntityList);
                    + activeSubInfoEntityList);
        }
        List<SubscriptionInfoEntity> tempActiveSubInfoEntityList = new ArrayList<>(
                activeSubInfoEntityList);
        synchronized (this) {
            mActiveSubInfoEntityList = activeSubInfoEntityList;
        }
        }
        List<SubscriptionInfoEntity> activeSubInfoEntityList = new ArrayList<>(
                mActiveSubInfoEntityList);
        for (MobileNetworkCallback callback : sCallbacks) {
        for (MobileNetworkCallback callback : sCallbacks) {
            callback.onActiveSubInfoChanged(tempActiveSubInfoEntityList);
        }
    }

    private void sendAvailableSubInfoCache(MobileNetworkCallback callback) {
        if (callback != null) {
             List<SubscriptionInfoEntity> availableSubInfoEntityList = null;
             List<SubscriptionInfoEntity> activeSubInfoEntityList = null;
             synchronized (this) {
                 if (mAvailableSubInfoEntityList != null) {
                     availableSubInfoEntityList = new ArrayList<>(mAvailableSubInfoEntityList);
                 }
                 if (mActiveSubInfoEntityList != null) {
                     activeSubInfoEntityList = new ArrayList<>(mActiveSubInfoEntityList);
                 }
             }
             if (availableSubInfoEntityList != null) {
                 callback.onAvailableSubInfoChanged(availableSubInfoEntityList);
             }
             if (activeSubInfoEntityList != null) {
                 callback.onActiveSubInfoChanged(activeSubInfoEntityList);
                 callback.onActiveSubInfoChanged(activeSubInfoEntityList);
             }
             }
        }
        }
    }


    private void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {
    private void onAllUiccInfoChanged(List<UiccInfoEntity> uiccInfoEntityList) {
        mUiccInfoEntityList = new ArrayList<>(uiccInfoEntityList);
        mUiccInfoEntityList = new ArrayList<>(uiccInfoEntityList);
@@ -497,8 +533,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
        mMobileNetworkDatabase.deleteSubInfoBySubId(subId);
        mMobileNetworkDatabase.deleteSubInfoBySubId(subId);
        mMobileNetworkDatabase.deleteUiccInfoBySubId(subId);
        mMobileNetworkDatabase.deleteUiccInfoBySubId(subId);
        mMobileNetworkDatabase.deleteMobileNetworkInfoBySubId(subId);
        mMobileNetworkDatabase.deleteMobileNetworkInfoBySubId(subId);
        mAvailableSubInfoEntityList.removeIf(info -> info.subId.equals(subId));
        mActiveSubInfoEntityList.removeIf(info -> info.subId.equals(subId));
        mUiccInfoEntityList.removeIf(info -> info.subId.equals(subId));
        mUiccInfoEntityList.removeIf(info -> info.subId.equals(subId));
        mMobileNetworkInfoEntityList.removeIf(info -> info.subId.equals(subId));
        mMobileNetworkInfoEntityList.removeIf(info -> info.subId.equals(subId));
        int id = Integer.parseInt(subId);
        int id = Integer.parseInt(subId);
@@ -655,10 +689,15 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions


    private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> inputAvailableInfoList) {
    private void insertAvailableSubInfoToEntity(List<SubscriptionInfo> inputAvailableInfoList) {
        sExecutor.execute(() -> {
        sExecutor.execute(() -> {
            SubscriptionInfoEntity[] availableInfoArray = mAvailableSubInfoEntityList.toArray(
            SubscriptionInfoEntity[] availableInfoArray = null;
            int availableEntitySize = 0;
            synchronized (this) {
                availableInfoArray = mAvailableSubInfoEntityList.toArray(
                    new SubscriptionInfoEntity[0]);
                    new SubscriptionInfoEntity[0]);
                availableEntitySize = mAvailableSubInfoEntityList.size();
            }
            if ((inputAvailableInfoList == null || inputAvailableInfoList.size() == 0)
            if ((inputAvailableInfoList == null || inputAvailableInfoList.size() == 0)
                    && mAvailableSubInfoEntityList.size() != 0) {
                    && availableEntitySize != 0) {
                if (DEBUG) {
                if (DEBUG) {
                    Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
                    Log.d(TAG, "availableSudInfoList from framework is empty, remove all subs");
                }
                }
@@ -671,7 +710,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
                SubscriptionInfo[] inputAvailableInfoArray = inputAvailableInfoList.toArray(
                SubscriptionInfo[] inputAvailableInfoArray = inputAvailableInfoList.toArray(
                        new SubscriptionInfo[0]);
                        new SubscriptionInfo[0]);
                // Remove the redundant subInfo
                // Remove the redundant subInfo
                if (inputAvailableInfoList.size() <= mAvailableSubInfoEntityList.size()) {
                if (inputAvailableInfoList.size() <= availableEntitySize) {
                    for (SubscriptionInfo subInfo : inputAvailableInfoArray) {
                    for (SubscriptionInfo subInfo : inputAvailableInfoArray) {
                        int subId = subInfo.getSubscriptionId();
                        int subId = subInfo.getSubscriptionId();
                        if (mSubscriptionInfoMap.containsKey(subId)) {
                        if (mSubscriptionInfoMap.containsKey(subId)) {
@@ -685,7 +724,7 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
                                deleteAllInfoBySubId(String.valueOf(key));
                                deleteAllInfoBySubId(String.valueOf(key));
                            }
                            }
                        }
                        }
                    } else if (inputAvailableInfoList.size() < mAvailableSubInfoEntityList.size()) {
                    } else if (inputAvailableInfoList.size() < availableEntitySize) {
                        // Check the subInfo between the new list from framework and old list in
                        // Check the subInfo between the new list from framework and old list in
                        // the database, if the subInfo is not existed in the new list, delete it
                        // the database, if the subInfo is not existed in the new list, delete it
                        // from the database.
                        // from the database.