Loading src/java/com/android/internal/telephony/ImsSmsDispatcher.java +1 −6 Original line number Diff line number Diff line Loading @@ -235,13 +235,8 @@ public class ImsSmsDispatcher extends SMSDispatcher { public ImsSmsDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { super(phone, smsDispatchersController); mImsManagerConnector = new FeatureConnector<ImsManager>(mContext, mPhone.getPhoneId(), mImsManagerConnector = new FeatureConnector<>(mContext, mPhone.getPhoneId(), new FeatureConnector.Listener<ImsManager>() { @Override public boolean isSupported() { return ImsManager.isImsSupportedOnDevice(mContext); } @Override public ImsManager getFeatureManager() { return ImsManager.getInstance(mContext, phone.getPhoneId()); Loading src/java/com/android/internal/telephony/imsphone/ImsPhone.java +6 −177 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.NetworkStats; import android.net.Uri; import android.os.AsyncResult; Loading Loading @@ -79,18 +78,15 @@ import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsSsData; import android.telephony.ims.ImsSsInfo; import android.telephony.ims.RegistrationManager; import android.telephony.ims.feature.ImsFeature; import android.telephony.ims.stub.ImsUtImplBase; import android.text.TextUtils; import android.util.LocalLog; import com.android.ims.FeatureConnector; import com.android.ims.ImsEcbm; import com.android.ims.ImsEcbmStateListener; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.ims.ImsUtInterface; import com.android.ims.RcsFeatureManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallForwardInfo; Loading Loading @@ -212,13 +208,6 @@ public class ImsPhone extends ImsPhoneBase { @UnsupportedAppUsage private ServiceState mSS = new ServiceState(); private RcsFeatureManager mRcsManager; @VisibleForTesting public FeatureConnector<RcsFeatureManager> mRcsManagerConnector; @VisibleForTesting public FeatureConnector.Listener<RcsFeatureManager> mRcsFeatureConnectorListener; public ImsRcsStatusListener mRcsStatusListener; // To redial silently through GSM or CDMA when dialing through IMS fails private String mLastDialString; Loading @@ -233,9 +222,8 @@ public class ImsPhone extends ImsPhoneBase { private final LocalLog mRegLocalLog = new LocalLog(100); private TelephonyMetrics mMetrics; // The helper class to receive and store the MmTel and RCS registration status updated. // The helper class to receive and store the MmTel registration status updated. private ImsRegistrationCallbackHelper mImsMmTelRegistrationHelper; private ImsRegistrationCallbackHelper mImsRcsRegistrationHelper; private boolean mRoaming = false; Loading Loading @@ -337,7 +325,8 @@ public class ImsPhone extends ImsPhoneBase { mMetrics = TelephonyMetrics.getInstance(); initImsRegistration(); mImsMmTelRegistrationHelper = new ImsRegistrationCallbackHelper(mMmTelRegistrationUpdate, context.getMainExecutor()); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG); Loading @@ -359,10 +348,6 @@ public class ImsPhone extends ImsPhoneBase { mDefaultPhone.registerForServiceStateChanged(this, EVENT_SERVICE_STATE_CHANGED, null); // Force initial roaming state update later, on EVENT_CARRIER_CONFIG_CHANGED. // Settings provider or CarrierConfig may not be loaded now. // Listen to the carrier config changed to initialize RcsFeatureManager IntentFilter filter = new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); mContext.registerReceiver(mCarrierConfigChangedReceiver, filter); } //todo: get rid of this function. It is not needed since parentPhone obj never changes Loading @@ -385,106 +370,6 @@ public class ImsPhone extends ImsPhoneBase { } mDefaultPhone.unregisterForServiceStateChanged(this); } mContext.unregisterReceiver(mCarrierConfigChangedReceiver); if (mRcsManagerConnector != null) { mRcsManagerConnector.disconnect(); mRcsManagerConnector = null; } if (mRcsManager != null) { mRcsManager.release(); mRcsManager = null; } } private BroadcastReceiver mCarrierConfigChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent == null) { return; } if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) { Bundle bundle = intent.getExtras(); if (bundle == null) { return; } int phoneId = bundle.getInt(CarrierConfigManager.EXTRA_SLOT_INDEX); if (phoneId == mPhoneId) { sendEmptyMessage(EVENT_CARRIER_CONFIG_CHANGED); } } } }; /** * Create RcsManagerConnector to initialize RcsFeatureManager */ @VisibleForTesting public void initRcsFeatureManager() { if (mRcsManagerConnector != null) { mRcsManagerConnector.disconnect(); mRcsManagerConnector = null; } logd("initRcsFeatureManager"); mRcsFeatureConnectorListener = new FeatureConnector.Listener<>() { @Override public boolean isSupported() { // Check if Telephony IMS is supported or not if (!ImsManager.isImsSupportedOnDevice(mContext)) { return false; } return true; } @Override public RcsFeatureManager getFeatureManager() { logd("Create RcsFeatureManager instance"); return new RcsFeatureManager(mContext, mPhoneId); } @Override public void connectionReady(RcsFeatureManager manager) throws ImsException { logi("RcsFeatureManager is ready"); mRcsManager = manager; // Listen to the IMS RCS registration status changed mRcsManager.registerImsRegistrationCallback( mImsRcsRegistrationHelper.getCallbackBinder()); if (mRcsStatusListener != null) { mRcsStatusListener.onRcsConnected(getPhoneId(), mRcsManager); } } @Override public void connectionUnavailable() { logi("RcsFeatureManager is unavailable"); resetImsRegistrationState(ImsFeature.FEATURE_RCS); if (mRcsManager != null) { mRcsManager.release(); } mRcsManager = null; if (mRcsStatusListener != null) { mRcsStatusListener.onRcsDisconnected(getPhoneId()); } } }; mRcsManagerConnector = new FeatureConnector<>(mContext, mPhoneId, mRcsFeatureConnectorListener, mContext.getMainExecutor(), LOG_TAG); mRcsManagerConnector.connect(); } public RcsFeatureManager getRcsManager() { return mRcsManager; } public void setRcsStatusListener(ImsRcsStatusListener listener) { mRcsStatusListener = listener; } @UnsupportedAppUsage Loading Loading @@ -1714,14 +1599,6 @@ public class ImsPhone extends ImsPhoneBase { updateRoamingState(sst.mSS); } break; case EVENT_CARRIER_CONFIG_CHANGED: if (DBG) logd("EVENT_CARRIER_CONFIG_CHANGED"); if (mRcsManager == null) { initRcsFeatureManager(); } else { mRcsManager.updateCapabilities(); } break; default: super.handleMessage(msg); Loading Loading @@ -1897,25 +1774,11 @@ public class ImsPhone extends ImsPhoneBase { mCT.getImsRegistrationTech(callback); } /** * Get the IMS RCS registration technology for this Phone. */ public void getImsRcsRegistrationTech(Consumer<Integer> callback) { mRcsManager.getImsRegistrationTech(callback); } @Override public void getImsRegistrationState(Consumer<Integer> callback) { callback.accept(mImsMmTelRegistrationHelper.getImsRegistrationState()); } /** * Retrieve the current RCS registration state. */ public void getImsRcsRegistrationState(Consumer<Integer> callback) { callback.accept(mImsRcsRegistrationHelper.getImsRegistrationState()); } @Override public Phone getDefaultPhone() { return mDefaultPhone; Loading Loading @@ -2204,18 +2067,9 @@ public class ImsPhone extends ImsPhoneBase { /** * Reset the IMS registration state. */ public void resetImsRegistrationState(int featureType) { if (DBG) logd("resetImsRegistrationState: feature=" + featureType); if (featureType == ImsFeature.FEATURE_MMTEL) { public void resetImsRegistrationState() { if (DBG) logd("resetImsRegistrationState"); mImsMmTelRegistrationHelper.reset(); } else if (featureType == ImsFeature.FEATURE_RCS) { mImsRcsRegistrationHelper.reset(); } } private void initImsRegistration() { mImsMmTelRegistrationHelper = new ImsRegistrationCallbackHelper(mMmTelRegistrationUpdate); mImsRcsRegistrationHelper = new ImsRegistrationCallbackHelper(mRcsRegistrationUpdate); } private ImsRegistrationCallbackHelper.ImsRegistrationUpdate mMmTelRegistrationUpdate = new Loading Loading @@ -2262,29 +2116,6 @@ public class ImsPhone extends ImsPhoneBase { } }; private ImsRegistrationCallbackHelper.ImsRegistrationUpdate mRcsRegistrationUpdate = new ImsRegistrationCallbackHelper.ImsRegistrationUpdate() { @Override public void handleImsRegistered(int imsRadioTech) { if (DBG) logd("handle RCS registered"); } @Override public void handleImsRegistering(int imsRadioTech) { if (DBG) logd("handle RCS registering"); } @Override public void handleImsUnregistered(ImsReasonInfo imsReasonInfo) { if (DBG) logd("handle RCS unregistered"); } @Override public void handleImsSubscriberAssociatedUriChanged(Uri[] uris) { if (DBG) logd("handle RCS SubscriberAssociatedUriChanged"); } }; public IccRecords getIccRecords() { return mDefaultPhone.getIccRecords(); } Loading @@ -2307,8 +2138,6 @@ public class ImsPhone extends ImsPhoneBase { pw.println(" mSilentRedialRegistrants = " + mSilentRedialRegistrants); pw.println(" mImsMmTelRegistrationState = " + mImsMmTelRegistrationHelper.getImsRegistrationState()); pw.println(" mImsRcsRegistrationState = " + mImsRcsRegistrationHelper.getImsRegistrationState()); pw.println(" mRoaming = " + mRoaming); pw.println(" mSsnRegistrants = " + mSsnRegistrants); pw.println(" Registration Log:"); Loading src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +2 −7 Original line number Diff line number Diff line Loading @@ -591,14 +591,9 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { mVtDataUsageUidSnapshot = new NetworkStats(currentTime, 1); // Allow the executor to be specified for testing. mImsManagerConnector = new FeatureConnector<ImsManager>( mImsManagerConnector = new FeatureConnector<>( phone.getContext(), phone.getPhoneId(), new FeatureConnector.Listener<ImsManager>() { @Override public boolean isSupported() { return ImsManager.isImsSupportedOnDevice(phone.getContext()); } @Override public ImsManager getFeatureManager() { return ImsManager.getInstance(phone.getContext(), phone.getPhoneId()); Loading Loading @@ -4253,7 +4248,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { boolean tmpIsVideoCallEnabled = isVideoCallEnabled(); mMmTelCapabilities = new MmTelFeature.MmTelCapabilities(); mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE); mPhone.resetImsRegistrationState(ImsFeature.FEATURE_MMTEL); mPhone.resetImsRegistrationState(); mPhone.processDisconnectReason(new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN, ImsReasonInfo.CODE_UNSPECIFIED)); boolean isVideoEnabled = isVideoCallEnabled(); Loading src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java +15 −18 Original line number Diff line number Diff line Loading @@ -16,22 +16,20 @@ package com.android.internal.telephony.imsphone; import android.annotation.AnyThread; import android.annotation.NonNull; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.RegistrationManager; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.util.Log; import com.android.internal.telephony.util.HandlerExecutor; import java.util.concurrent.Executor; /** * A helper class to manager the ImsRegistrationCallback can notify the state changed to listener. */ @AnyThread public class ImsRegistrationCallbackHelper { private static final String TAG = "ImsRegCallbackHelper"; Loading Loading @@ -63,6 +61,7 @@ public class ImsRegistrationCallbackHelper { private ImsRegistrationUpdate mImsRegistrationUpdate; private int mRegistrationState = RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED; private final Object mLock = new Object(); private final RegistrationManager.RegistrationCallback mImsRegistrationCallback = new RegistrationManager.RegistrationCallback() { Loading Loading @@ -90,8 +89,9 @@ public class ImsRegistrationCallbackHelper { } }; public ImsRegistrationCallbackHelper(@NonNull ImsRegistrationUpdate registrationUpdate) { mImsRegistrationCallback.setExecutor(getThreadExecutor()); public ImsRegistrationCallbackHelper(@NonNull ImsRegistrationUpdate registrationUpdate, Executor executor) { mImsRegistrationCallback.setExecutor(executor); mImsRegistrationUpdate = registrationUpdate; } Loading @@ -108,17 +108,21 @@ public class ImsRegistrationCallbackHelper { */ public synchronized void updateRegistrationState( @RegistrationManager.ImsRegistrationState int newState) { synchronized (mLock) { Log.d(TAG, "updateRegistrationState: registration state from " + mRegistrationState + " to " + newState); mRegistrationState = newState; } } public int getImsRegistrationState() { synchronized (mLock) { return mRegistrationState; } } public boolean isImsRegistered() { return mRegistrationState == RegistrationManager.REGISTRATION_STATE_REGISTERED; return getImsRegistrationState() == RegistrationManager.REGISTRATION_STATE_REGISTERED; } public RegistrationManager.RegistrationCallback getCallback() { Loading @@ -128,11 +132,4 @@ public class ImsRegistrationCallbackHelper { public IImsRegistrationCallback getCallbackBinder() { return mImsRegistrationCallback.getBinder(); } private Executor getThreadExecutor() { if (Looper.myLooper() == null) { Looper.prepare(); } return new HandlerExecutor(new Handler(Looper.myLooper())); } } tests/telephonytests/src/com/android/internal/telephony/ims/FeatureConnectorTest.java +10 −3 Original line number Diff line number Diff line Loading @@ -19,11 +19,13 @@ package com.android.internal.telephony.ims; import junit.framework.AssertionFailedError; import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.HandlerThread; import android.os.Looper; import android.telephony.ims.feature.ImsFeature; Loading Loading @@ -70,7 +72,7 @@ public class FeatureConnectorTest extends TelephonyTest { mHandlerThread = new HandlerThread("ConnectorHandlerThread"); mHandlerThread.start(); mFeatureConnector = new FeatureConnector<ImsManager>(mContext, phoneId, mFeatureConnector = new FeatureConnector<>(mContext, phoneId, mListener, mExecutor, mHandlerThread.getLooper()); mFeatureConnector.mListener = mListener; } Loading @@ -85,7 +87,7 @@ public class FeatureConnectorTest extends TelephonyTest { @SmallTest public void testConnect() { // ImsManager is supported on device when(mListener.isSupported()).thenReturn(true); setImsSupportedFeature(true); when(mListener.getFeatureManager()).thenReturn(mImsManager); mFeatureConnector.connect(); Loading @@ -97,7 +99,7 @@ public class FeatureConnectorTest extends TelephonyTest { reset(mListener); // ImsManager is NOT supported on device when(mListener.isSupported()).thenReturn(false); setImsSupportedFeature(false); when(mListener.getFeatureManager()).thenReturn(mImsManager); mFeatureConnector.connect(); Loading Loading @@ -145,4 +147,9 @@ public class FeatureConnectorTest extends TelephonyTest { // Verify removeNotifyStatusChangedCallback will be called if ImsManager is not null. verify(mImsManager).removeNotifyStatusChangedCallback(anyObject()); } private void setImsSupportedFeature(boolean isSupported) { doReturn(isSupported).when(mPackageManager).hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS); } } Loading
src/java/com/android/internal/telephony/ImsSmsDispatcher.java +1 −6 Original line number Diff line number Diff line Loading @@ -235,13 +235,8 @@ public class ImsSmsDispatcher extends SMSDispatcher { public ImsSmsDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { super(phone, smsDispatchersController); mImsManagerConnector = new FeatureConnector<ImsManager>(mContext, mPhone.getPhoneId(), mImsManagerConnector = new FeatureConnector<>(mContext, mPhone.getPhoneId(), new FeatureConnector.Listener<ImsManager>() { @Override public boolean isSupported() { return ImsManager.isImsSupportedOnDevice(mContext); } @Override public ImsManager getFeatureManager() { return ImsManager.getInstance(mContext, phone.getPhoneId()); Loading
src/java/com/android/internal/telephony/imsphone/ImsPhone.java +6 −177 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.NetworkStats; import android.net.Uri; import android.os.AsyncResult; Loading Loading @@ -79,18 +78,15 @@ import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsSsData; import android.telephony.ims.ImsSsInfo; import android.telephony.ims.RegistrationManager; import android.telephony.ims.feature.ImsFeature; import android.telephony.ims.stub.ImsUtImplBase; import android.text.TextUtils; import android.util.LocalLog; import com.android.ims.FeatureConnector; import com.android.ims.ImsEcbm; import com.android.ims.ImsEcbmStateListener; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.ims.ImsUtInterface; import com.android.ims.RcsFeatureManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.Call; import com.android.internal.telephony.CallForwardInfo; Loading Loading @@ -212,13 +208,6 @@ public class ImsPhone extends ImsPhoneBase { @UnsupportedAppUsage private ServiceState mSS = new ServiceState(); private RcsFeatureManager mRcsManager; @VisibleForTesting public FeatureConnector<RcsFeatureManager> mRcsManagerConnector; @VisibleForTesting public FeatureConnector.Listener<RcsFeatureManager> mRcsFeatureConnectorListener; public ImsRcsStatusListener mRcsStatusListener; // To redial silently through GSM or CDMA when dialing through IMS fails private String mLastDialString; Loading @@ -233,9 +222,8 @@ public class ImsPhone extends ImsPhoneBase { private final LocalLog mRegLocalLog = new LocalLog(100); private TelephonyMetrics mMetrics; // The helper class to receive and store the MmTel and RCS registration status updated. // The helper class to receive and store the MmTel registration status updated. private ImsRegistrationCallbackHelper mImsMmTelRegistrationHelper; private ImsRegistrationCallbackHelper mImsRcsRegistrationHelper; private boolean mRoaming = false; Loading Loading @@ -337,7 +325,8 @@ public class ImsPhone extends ImsPhoneBase { mMetrics = TelephonyMetrics.getInstance(); initImsRegistration(); mImsMmTelRegistrationHelper = new ImsRegistrationCallbackHelper(mMmTelRegistrationUpdate, context.getMainExecutor()); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG); Loading @@ -359,10 +348,6 @@ public class ImsPhone extends ImsPhoneBase { mDefaultPhone.registerForServiceStateChanged(this, EVENT_SERVICE_STATE_CHANGED, null); // Force initial roaming state update later, on EVENT_CARRIER_CONFIG_CHANGED. // Settings provider or CarrierConfig may not be loaded now. // Listen to the carrier config changed to initialize RcsFeatureManager IntentFilter filter = new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); mContext.registerReceiver(mCarrierConfigChangedReceiver, filter); } //todo: get rid of this function. It is not needed since parentPhone obj never changes Loading @@ -385,106 +370,6 @@ public class ImsPhone extends ImsPhoneBase { } mDefaultPhone.unregisterForServiceStateChanged(this); } mContext.unregisterReceiver(mCarrierConfigChangedReceiver); if (mRcsManagerConnector != null) { mRcsManagerConnector.disconnect(); mRcsManagerConnector = null; } if (mRcsManager != null) { mRcsManager.release(); mRcsManager = null; } } private BroadcastReceiver mCarrierConfigChangedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent == null) { return; } if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(intent.getAction())) { Bundle bundle = intent.getExtras(); if (bundle == null) { return; } int phoneId = bundle.getInt(CarrierConfigManager.EXTRA_SLOT_INDEX); if (phoneId == mPhoneId) { sendEmptyMessage(EVENT_CARRIER_CONFIG_CHANGED); } } } }; /** * Create RcsManagerConnector to initialize RcsFeatureManager */ @VisibleForTesting public void initRcsFeatureManager() { if (mRcsManagerConnector != null) { mRcsManagerConnector.disconnect(); mRcsManagerConnector = null; } logd("initRcsFeatureManager"); mRcsFeatureConnectorListener = new FeatureConnector.Listener<>() { @Override public boolean isSupported() { // Check if Telephony IMS is supported or not if (!ImsManager.isImsSupportedOnDevice(mContext)) { return false; } return true; } @Override public RcsFeatureManager getFeatureManager() { logd("Create RcsFeatureManager instance"); return new RcsFeatureManager(mContext, mPhoneId); } @Override public void connectionReady(RcsFeatureManager manager) throws ImsException { logi("RcsFeatureManager is ready"); mRcsManager = manager; // Listen to the IMS RCS registration status changed mRcsManager.registerImsRegistrationCallback( mImsRcsRegistrationHelper.getCallbackBinder()); if (mRcsStatusListener != null) { mRcsStatusListener.onRcsConnected(getPhoneId(), mRcsManager); } } @Override public void connectionUnavailable() { logi("RcsFeatureManager is unavailable"); resetImsRegistrationState(ImsFeature.FEATURE_RCS); if (mRcsManager != null) { mRcsManager.release(); } mRcsManager = null; if (mRcsStatusListener != null) { mRcsStatusListener.onRcsDisconnected(getPhoneId()); } } }; mRcsManagerConnector = new FeatureConnector<>(mContext, mPhoneId, mRcsFeatureConnectorListener, mContext.getMainExecutor(), LOG_TAG); mRcsManagerConnector.connect(); } public RcsFeatureManager getRcsManager() { return mRcsManager; } public void setRcsStatusListener(ImsRcsStatusListener listener) { mRcsStatusListener = listener; } @UnsupportedAppUsage Loading Loading @@ -1714,14 +1599,6 @@ public class ImsPhone extends ImsPhoneBase { updateRoamingState(sst.mSS); } break; case EVENT_CARRIER_CONFIG_CHANGED: if (DBG) logd("EVENT_CARRIER_CONFIG_CHANGED"); if (mRcsManager == null) { initRcsFeatureManager(); } else { mRcsManager.updateCapabilities(); } break; default: super.handleMessage(msg); Loading Loading @@ -1897,25 +1774,11 @@ public class ImsPhone extends ImsPhoneBase { mCT.getImsRegistrationTech(callback); } /** * Get the IMS RCS registration technology for this Phone. */ public void getImsRcsRegistrationTech(Consumer<Integer> callback) { mRcsManager.getImsRegistrationTech(callback); } @Override public void getImsRegistrationState(Consumer<Integer> callback) { callback.accept(mImsMmTelRegistrationHelper.getImsRegistrationState()); } /** * Retrieve the current RCS registration state. */ public void getImsRcsRegistrationState(Consumer<Integer> callback) { callback.accept(mImsRcsRegistrationHelper.getImsRegistrationState()); } @Override public Phone getDefaultPhone() { return mDefaultPhone; Loading Loading @@ -2204,18 +2067,9 @@ public class ImsPhone extends ImsPhoneBase { /** * Reset the IMS registration state. */ public void resetImsRegistrationState(int featureType) { if (DBG) logd("resetImsRegistrationState: feature=" + featureType); if (featureType == ImsFeature.FEATURE_MMTEL) { public void resetImsRegistrationState() { if (DBG) logd("resetImsRegistrationState"); mImsMmTelRegistrationHelper.reset(); } else if (featureType == ImsFeature.FEATURE_RCS) { mImsRcsRegistrationHelper.reset(); } } private void initImsRegistration() { mImsMmTelRegistrationHelper = new ImsRegistrationCallbackHelper(mMmTelRegistrationUpdate); mImsRcsRegistrationHelper = new ImsRegistrationCallbackHelper(mRcsRegistrationUpdate); } private ImsRegistrationCallbackHelper.ImsRegistrationUpdate mMmTelRegistrationUpdate = new Loading Loading @@ -2262,29 +2116,6 @@ public class ImsPhone extends ImsPhoneBase { } }; private ImsRegistrationCallbackHelper.ImsRegistrationUpdate mRcsRegistrationUpdate = new ImsRegistrationCallbackHelper.ImsRegistrationUpdate() { @Override public void handleImsRegistered(int imsRadioTech) { if (DBG) logd("handle RCS registered"); } @Override public void handleImsRegistering(int imsRadioTech) { if (DBG) logd("handle RCS registering"); } @Override public void handleImsUnregistered(ImsReasonInfo imsReasonInfo) { if (DBG) logd("handle RCS unregistered"); } @Override public void handleImsSubscriberAssociatedUriChanged(Uri[] uris) { if (DBG) logd("handle RCS SubscriberAssociatedUriChanged"); } }; public IccRecords getIccRecords() { return mDefaultPhone.getIccRecords(); } Loading @@ -2307,8 +2138,6 @@ public class ImsPhone extends ImsPhoneBase { pw.println(" mSilentRedialRegistrants = " + mSilentRedialRegistrants); pw.println(" mImsMmTelRegistrationState = " + mImsMmTelRegistrationHelper.getImsRegistrationState()); pw.println(" mImsRcsRegistrationState = " + mImsRcsRegistrationHelper.getImsRegistrationState()); pw.println(" mRoaming = " + mRoaming); pw.println(" mSsnRegistrants = " + mSsnRegistrants); pw.println(" Registration Log:"); Loading
src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java +2 −7 Original line number Diff line number Diff line Loading @@ -591,14 +591,9 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { mVtDataUsageUidSnapshot = new NetworkStats(currentTime, 1); // Allow the executor to be specified for testing. mImsManagerConnector = new FeatureConnector<ImsManager>( mImsManagerConnector = new FeatureConnector<>( phone.getContext(), phone.getPhoneId(), new FeatureConnector.Listener<ImsManager>() { @Override public boolean isSupported() { return ImsManager.isImsSupportedOnDevice(phone.getContext()); } @Override public ImsManager getFeatureManager() { return ImsManager.getInstance(phone.getContext(), phone.getPhoneId()); Loading Loading @@ -4253,7 +4248,7 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall { boolean tmpIsVideoCallEnabled = isVideoCallEnabled(); mMmTelCapabilities = new MmTelFeature.MmTelCapabilities(); mPhone.setServiceState(ServiceState.STATE_OUT_OF_SERVICE); mPhone.resetImsRegistrationState(ImsFeature.FEATURE_MMTEL); mPhone.resetImsRegistrationState(); mPhone.processDisconnectReason(new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN, ImsReasonInfo.CODE_UNSPECIFIED)); boolean isVideoEnabled = isVideoCallEnabled(); Loading
src/java/com/android/internal/telephony/imsphone/ImsRegistrationCallbackHelper.java +15 −18 Original line number Diff line number Diff line Loading @@ -16,22 +16,20 @@ package com.android.internal.telephony.imsphone; import android.annotation.AnyThread; import android.annotation.NonNull; import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.RegistrationManager; import android.telephony.ims.aidl.IImsRegistrationCallback; import android.util.Log; import com.android.internal.telephony.util.HandlerExecutor; import java.util.concurrent.Executor; /** * A helper class to manager the ImsRegistrationCallback can notify the state changed to listener. */ @AnyThread public class ImsRegistrationCallbackHelper { private static final String TAG = "ImsRegCallbackHelper"; Loading Loading @@ -63,6 +61,7 @@ public class ImsRegistrationCallbackHelper { private ImsRegistrationUpdate mImsRegistrationUpdate; private int mRegistrationState = RegistrationManager.REGISTRATION_STATE_NOT_REGISTERED; private final Object mLock = new Object(); private final RegistrationManager.RegistrationCallback mImsRegistrationCallback = new RegistrationManager.RegistrationCallback() { Loading Loading @@ -90,8 +89,9 @@ public class ImsRegistrationCallbackHelper { } }; public ImsRegistrationCallbackHelper(@NonNull ImsRegistrationUpdate registrationUpdate) { mImsRegistrationCallback.setExecutor(getThreadExecutor()); public ImsRegistrationCallbackHelper(@NonNull ImsRegistrationUpdate registrationUpdate, Executor executor) { mImsRegistrationCallback.setExecutor(executor); mImsRegistrationUpdate = registrationUpdate; } Loading @@ -108,17 +108,21 @@ public class ImsRegistrationCallbackHelper { */ public synchronized void updateRegistrationState( @RegistrationManager.ImsRegistrationState int newState) { synchronized (mLock) { Log.d(TAG, "updateRegistrationState: registration state from " + mRegistrationState + " to " + newState); mRegistrationState = newState; } } public int getImsRegistrationState() { synchronized (mLock) { return mRegistrationState; } } public boolean isImsRegistered() { return mRegistrationState == RegistrationManager.REGISTRATION_STATE_REGISTERED; return getImsRegistrationState() == RegistrationManager.REGISTRATION_STATE_REGISTERED; } public RegistrationManager.RegistrationCallback getCallback() { Loading @@ -128,11 +132,4 @@ public class ImsRegistrationCallbackHelper { public IImsRegistrationCallback getCallbackBinder() { return mImsRegistrationCallback.getBinder(); } private Executor getThreadExecutor() { if (Looper.myLooper() == null) { Looper.prepare(); } return new HandlerExecutor(new Handler(Looper.myLooper())); } }
tests/telephonytests/src/com/android/internal/telephony/ims/FeatureConnectorTest.java +10 −3 Original line number Diff line number Diff line Loading @@ -19,11 +19,13 @@ package com.android.internal.telephony.ims; import junit.framework.AssertionFailedError; import static org.mockito.ArgumentMatchers.anyObject; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; import android.os.HandlerThread; import android.os.Looper; import android.telephony.ims.feature.ImsFeature; Loading Loading @@ -70,7 +72,7 @@ public class FeatureConnectorTest extends TelephonyTest { mHandlerThread = new HandlerThread("ConnectorHandlerThread"); mHandlerThread.start(); mFeatureConnector = new FeatureConnector<ImsManager>(mContext, phoneId, mFeatureConnector = new FeatureConnector<>(mContext, phoneId, mListener, mExecutor, mHandlerThread.getLooper()); mFeatureConnector.mListener = mListener; } Loading @@ -85,7 +87,7 @@ public class FeatureConnectorTest extends TelephonyTest { @SmallTest public void testConnect() { // ImsManager is supported on device when(mListener.isSupported()).thenReturn(true); setImsSupportedFeature(true); when(mListener.getFeatureManager()).thenReturn(mImsManager); mFeatureConnector.connect(); Loading @@ -97,7 +99,7 @@ public class FeatureConnectorTest extends TelephonyTest { reset(mListener); // ImsManager is NOT supported on device when(mListener.isSupported()).thenReturn(false); setImsSupportedFeature(false); when(mListener.getFeatureManager()).thenReturn(mImsManager); mFeatureConnector.connect(); Loading Loading @@ -145,4 +147,9 @@ public class FeatureConnectorTest extends TelephonyTest { // Verify removeNotifyStatusChangedCallback will be called if ImsManager is not null. verify(mImsManager).removeNotifyStatusChangedCallback(anyObject()); } private void setImsSupportedFeature(boolean isSupported) { doReturn(isSupported).when(mPackageManager).hasSystemFeature( PackageManager.FEATURE_TELEPHONY_IMS); } }