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

Commit 9b6a1789 authored by Rambo Wang's avatar Rambo Wang Committed by Automerger Merge Worker
Browse files

Merge "Update ImsPhoneCallTracker with new CarrierConfigManager APIs" into main am: 2888fc7c

parents 4d7e50ae 2888fc7c
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;
@@ -141,6 +140,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;

@@ -244,7 +244,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 =
@@ -1931,10 +1937,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();
    }