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

Commit cce2ff30 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Update ImsPhoneCallTracker with new CarrierConfigManager APIs"

parents 85f0a9bd ae5ed0dc
Loading
Loading
Loading
Loading
+42 −24
Original line number Diff line number Diff line
@@ -571,18 +571,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()
@@ -592,10 +590,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)));
            }
@@ -1251,10 +1255,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
@@ -1515,6 +1529,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
@@ -70,7 +70,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;
@@ -173,6 +172,7 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
    private ImsPhoneCallTracker.ConnectorFactory mConnectorFactory;
    private CommandsInterface mMockCi;
    private DomainSelectionResolver mDomainSelectionResolver;
    private CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener;

    private final Executor mExecutor = Runnable::run;

@@ -278,7 +278,13 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
        DomainSelectionResolver.setDomainSelectionResolver(mDomainSelectionResolver);
        doReturn(false).when(mDomainSelectionResolver).isDomainSelectionSupported();

        // 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 =
@@ -2606,10 +2612,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();
    }