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

Commit 12cc2fd9 authored by rambowang's avatar rambowang Committed by Rambo Wang
Browse files

Update ImsPhoneCallTracker with new CarrierConfigManager APIs

Replace carrier config change broadcast receiver with listener

Bug: 263267340
Test: atest ImsPhoneCallTrackerTest
Merged-In: Ifd10745e026a2520f8c2e5ca58036e1e13032e55
Change-Id: Ifd10745e026a2520f8c2e5ca58036e1e13032e55
(cherry picked from commit ae5ed0dc)
parent 81ee5609
Loading
Loading
Loading
Loading
+42 −24
Original line number Diff line number Diff line
@@ -397,18 +397,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        }
    }

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener =
            new CarrierConfigManager.CarrierConfigChangeListener() {
                @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
                int subId = intent.getIntExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX,
                        SubscriptionManager.INVALID_SUBSCRIPTION_ID);
                int phoneId = intent.getIntExtra(CarrierConfigManager.EXTRA_SLOT_INDEX,
                        SubscriptionManager.INVALID_PHONE_INDEX);
                if (mPhone.getPhoneId() != phoneId) {
                    log("onReceive: Skipping indication for other phoneId: " + phoneId);
                public void onCarrierConfigChanged(int slotIndex, int subId, int carrierId,
                        int specificCarrierId) {
                    if (mPhone.getPhoneId() != slotIndex) {
                        log("onReceive: Skipping indication for other phoneId: " + slotIndex);
                        return;
                    }

                    PersistableBundle carrierConfig = getCarrierConfigBundle(subId);
                    mCarrierConfigForSubId = new Pair<>(subId, carrierConfig);
                    if (!mCurrentlyConnectedSubId.isEmpty()
@@ -418,10 +416,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                    } else {
                        // cache the latest config update until ImsService connects for this subId.
                        // Once it has connected, startListeningForCalls will apply the config.
                    log("onReceive: caching carrier config until ImsService connects for subId: "
                            + subId);
                        log("onReceive: caching carrier config until ImsService connects for "
                                + "subId: " + subId);
                    }
                }
            } else if (TelecomManager.ACTION_DEFAULT_DIALER_CHANGED.equals(intent.getAction())) {
            };

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (TelecomManager.ACTION_DEFAULT_DIALER_CHANGED.equals(intent.getAction())) {
                mDefaultDialerUid.set(getPackageUid(context, intent.getStringExtra(
                        TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME)));
            }
@@ -1055,10 +1059,20 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        mMetrics = TelephonyMetrics.getInstance();

        IntentFilter intentfilter = new IntentFilter();
        intentfilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        intentfilter.addAction(TelecomManager.ACTION_DEFAULT_DIALER_CHANGED);
        mPhone.getContext().registerReceiver(mReceiver, intentfilter);
        updateCarrierConfiguration(mPhone.getSubId(), getCarrierConfigBundle(mPhone.getSubId()));

        CarrierConfigManager ccm = mPhone.getContext().getSystemService(CarrierConfigManager.class);
        // Callback of listener directly access global states which are limited on main thread.
        // The callback can only be executed on main thread.
        if (ccm != null) {
            ccm.registerCarrierConfigChangeListener(
                    mPhone.getContext().getMainExecutor(), mCarrierConfigChangeListener);
            updateCarrierConfiguration(
                    mPhone.getSubId(), getCarrierConfigBundle(mPhone.getSubId()));
        } else {
            loge("CarrierConfigManager is not available.");
        }

        mSettingsCallback = new DataSettingsManager.DataSettingsManagerCallback(this::post) {
                @Override
@@ -1310,6 +1324,10 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {

        clearDisconnected();
        mPhone.getContext().unregisterReceiver(mReceiver);
        CarrierConfigManager ccm = mPhone.getContext().getSystemService(CarrierConfigManager.class);
        if (ccm != null && mCarrierConfigChangeListener != null) {
            ccm.unregisterCarrierConfigChangeListener(mCarrierConfigChangeListener);
        }
        mPhone.getDefaultPhone().getDataSettingsManager().unregisterCallback(mSettingsCallback);
        mImsManagerConnector.disconnect();

+9 −5
Original line number Diff line number Diff line
@@ -53,7 +53,6 @@ import static org.mockito.Mockito.when;
import android.annotation.Nullable;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.NetworkStats;
@@ -140,6 +139,7 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
    private ImsPhoneConnection mImsPhoneConnection;
    private INetworkStatsProviderCallback mVtDataUsageProviderCb;
    private ImsPhoneCallTracker.ConnectorFactory mConnectorFactory;
    private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener;

    private final Executor mExecutor = Runnable::run;

@@ -240,7 +240,13 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
            return mMockConnector;
        }).when(mConnectorFactory).create(any(), anyInt(), anyString(), any(), any());

        // Capture CarrierConfigChangeListener to emulate the carrier config change notification
        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> listenerArgumentCaptor =
                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
        mCTUT = new ImsPhoneCallTracker(mImsPhone, mConnectorFactory, Runnable::run);
        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
                listenerArgumentCaptor.capture());
        mCarrierConfigChangeListener = listenerArgumentCaptor.getAllValues().get(0);
        mCTUT.setDataEnabled(true);

        final ArgumentCaptor<VtDataUsageProvider> vtDataUsageProviderCaptor =
@@ -1927,10 +1933,8 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
    }

    private void sendCarrierConfigChanged() {
        Intent intent = new Intent(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        intent.putExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, mPhone.getSubId());
        intent.putExtra(CarrierConfigManager.EXTRA_SLOT_INDEX, mPhone.getPhoneId());
        mBroadcastReceiver.onReceive(mContext, intent);
        mCarrierConfigChangeListener.onCarrierConfigChanged(mPhone.getPhoneId(), mPhone.getSubId(),
                TelephonyManager.UNKNOWN_CARRIER_ID, TelephonyManager.UNKNOWN_CARRIER_ID);
        processAllMessages();
    }