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

Commit 0a9e7046 authored by Mengjun Leng's avatar Mengjun Leng Committed by SongFerng Wang
Browse files

Refacotr mobile data observer for repository

In current design, the mobile data observer might be removed due to
SIM absence after registered so that mobile data network info can't
be updated to clients.

To fix it, migrate it to use API TelephonyCallback.onUserMobileDataStateChanged

Change-Id: I26c8f946823abb7505f0227c8dd8ab0700d0c5f2
Merged-In: I26c8f946823abb7505f0227c8dd8ab0700d0c5f2
parent 2a8de4ad
Loading
Loading
Loading
Loading
+21 −25
Original line number Diff line number Diff line
@@ -91,7 +91,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
    private AirplaneModeObserver mAirplaneModeObserver;
    private DataRoamingObserver mDataRoamingObserver;
    private MetricsFeatureProvider mMetricsFeatureProvider;
    private Map<Integer, MobileDataContentObserver> mDataContentObserverMap = new HashMap<>();
    private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
    private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
    private int mCardState = UiccSlotInfo.CARD_STATE_INFO_ABSENT;
@@ -209,6 +208,9 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
     */
    public void addRegister(LifecycleOwner lifecycleOwner,
            MobileNetworkCallback mobileNetworkCallback, int subId) {
        if (DEBUG) {
            Log.d(TAG, "addRegister by SUB ID " + subId);
        }
        if (sCallbacks.isEmpty()) {
            mSubscriptionManager.addOnSubscriptionsChangedListener(mContext.getMainExecutor(),
                    this);
@@ -222,7 +224,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
        observeAllUiccInfo(lifecycleOwner);
        observeAllMobileNetworkInfo(lifecycleOwner);
        if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            addRegisterBySubId(subId);
            createTelephonyManagerBySubId(subId);
            mDataRoamingObserver.register(mContext, subId);
        }
@@ -231,25 +232,12 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
        sendAvailableSubInfoCache(mobileNetworkCallback);
    }

    public void addRegisterBySubId(int subId) {
        MobileDataContentObserver dataContentObserver = new MobileDataContentObserver(
                new Handler(Looper.getMainLooper()));
        dataContentObserver.setOnMobileDataChangedListener(() -> {
            sExecutor.execute(() -> {
                insertMobileNetworkInfo(mContext, subId,
                        getTelephonyManagerBySubId(mContext, subId));
            });
        });
        dataContentObserver.register(mContext, subId);
        mDataContentObserverMap.put(subId, dataContentObserver);
    }

    private void createTelephonyManagerBySubId(int subId) {
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return;
        }
        PhoneCallStateTelephonyCallback
                telephonyCallback = new PhoneCallStateTelephonyCallback();
                telephonyCallback = new PhoneCallStateTelephonyCallback(subId);
        TelephonyManager telephonyManager = mContext.getSystemService(
                TelephonyManager.class).createForSubscriptionId(subId);
        telephonyManager.registerTelephonyCallback(mContext.getMainExecutor(),
@@ -288,10 +276,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
                }
            }
        }
        if (mDataContentObserverMap.containsKey(subId)) {
            mDataContentObserverMap.get(subId).unRegister(mContext);
            mDataContentObserverMap.remove(subId);
        }
    }

    public void removeRegister(MobileNetworkCallback mobileNetworkCallback) {
@@ -300,10 +284,6 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
            mSubscriptionManager.removeOnSubscriptionsChangedListener(this);
            mAirplaneModeObserver.unRegister(mContext);
            mDataRoamingObserver.unRegister(mContext);
            mDataContentObserverMap.forEach((id, observer) -> {
                observer.unRegister(mContext);
            });
            mDataContentObserverMap.clear();

            mTelephonyManagerMap.forEach((id, manager) -> {
                TelephonyCallback callback = mTelephonyCallbackMap.get(id);
@@ -764,7 +744,14 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
    }

    private class PhoneCallStateTelephonyCallback extends TelephonyCallback implements
            TelephonyCallback.CallStateListener {
            TelephonyCallback.CallStateListener,
            TelephonyCallback.UserMobileDataStateListener {

        private int mSubId;

        public PhoneCallStateTelephonyCallback(int subId) {
            mSubId = subId;
        }

        @Override
        public void onCallStateChanged(int state) {
@@ -772,6 +759,15 @@ public class MobileNetworkRepository extends SubscriptionManager.OnSubscriptions
                callback.onCallStateChanged(state);
            }
        }

        @Override
        public void onUserMobileDataStateChanged(boolean enabled) {
            Log.d(TAG, "onUserMobileDataStateChanged enabled " + enabled + " on SUB " + mSubId);
            sExecutor.execute(() -> {
                insertMobileNetworkInfo(mContext, mSubId,
                        getTelephonyManagerBySubId(mContext, mSubId));
            });
        }
    }

    /**
+0 −3
Original line number Diff line number Diff line
@@ -100,9 +100,6 @@ public abstract class DefaultSubscriptionController extends TelephonyBasePrefere
        mMobileNetworkRepository.addRegister(mLifecycleOwner, this,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        mMobileNetworkRepository.updateEntity();
        // Can not get default subId from database until get the callback, add register by subId
        // later.
        mMobileNetworkRepository.addRegisterBySubId(getDefaultSubscriptionId());
        mDataSubscriptionChangedReceiver.registerReceiver();
    }