Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +42 −24 Original line number Diff line number Diff line Loading @@ -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() Loading @@ -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))); } Loading Loading @@ -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 Loading Loading @@ -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(); Loading tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -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(); } Loading Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +42 −24 Original line number Diff line number Diff line Loading @@ -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() Loading @@ -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))); } Loading Loading @@ -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 Loading Loading @@ -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(); Loading
tests/telephonytests/src/com/android/internal/telephony/imsphone/ImsPhoneCallTrackerTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -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(); } Loading