diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java index 9ff901b86be..c70ade6266f 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.network.telephony; import android.content.Context; +import android.os.Looper; import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; @@ -43,6 +44,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC Enhanced4gLtePreferenceController.On4gLteUpdateListener { private Preference mPreference; + private TelephonyManager mTelephonyManager; private CarrierConfigManager mCarrierConfigManager; @VisibleForTesting ImsManager mImsManager; @@ -55,7 +57,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC super(context, key); mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); mDataContentObserver = new MobileDataEnabledListener(context, this); - mPhoneStateListener = new PhoneCallStateListener(); + mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper()); } @Override @@ -74,7 +76,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @Override public void onStart() { - mPhoneStateListener.register(mContext, mSubId); + mPhoneStateListener.register(mSubId); mDataContentObserver.start(mSubId); } @@ -115,7 +117,9 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC public VideoCallingPreferenceController init(int subId) { mSubId = subId; + mTelephonyManager = mContext.getSystemService(TelephonyManager.class); if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId)); } @@ -152,23 +156,18 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC private class PhoneCallStateListener extends PhoneStateListener { - PhoneCallStateListener() { - super(); + public PhoneCallStateListener(Looper looper) { + super(looper); } - private TelephonyManager mTelephonyManager; - @Override public void onCallStateChanged(int state, String incomingNumber) { mCallState = state; updateState(mPreference); } - public void register(Context context, int subId) { - mTelephonyManager = context.getSystemService(TelephonyManager.class); - if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { - mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId); - } + public void register(int subId) { + mSubId = subId; mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE); } diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLtePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLtePreferenceControllerTest.java index 58289b94c2f..bea8f679604 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLtePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLtePreferenceControllerTest.java @@ -67,7 +67,7 @@ public class Enhanced4gLtePreferenceControllerTest { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - doReturn(mTelephonyManager).when(mContext).getSystemService(TelephonyManager.class); + doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE); doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class); doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class); doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID); diff --git a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java index cefcb15f5c5..dbfd3b24766 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java @@ -76,6 +76,10 @@ public class WifiCallingPreferenceControllerTest { mContext = spy(RuntimeEnvironment.application); + mQueryImsState = new MockWifiCallingQueryImsState(mContext, SUB_ID); + mQueryImsState.setIsEnabledByUser(true); + mQueryImsState.setIsProvisionedOnDevice(true); + mPreference = new Preference(mContext); mController = spy(new WifiCallingPreferenceController(mContext, "wifi_calling") { @Override @@ -85,8 +89,8 @@ public class WifiCallingPreferenceControllerTest { }); mController.mCarrierConfigManager = mCarrierConfigManager; mController.init(SUB_ID); - mController.mImsManager = mImsManager; mController.mCallState = TelephonyManager.CALL_STATE_IDLE; + doReturn(mQueryImsState).when(mController).queryImsState(anyInt()); mPreference.setKey(mController.getPreferenceKey()); when(mController.getTelephonyManager(mContext, SUB_ID)).thenReturn(mTelephonyManager);