[Settings] Apply ImsQueryController#isServiceStateReady to VoLte

Apply ImsQueryController#isServiceStateReady() to VoLte part

Bug: 140542283
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest
Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gLteSliceHelperTest
Change-Id: I1535df837f2e015cd1afb0891fd69a98c7d6991a
diff --git a/src/com/android/settings/network/ims/VolteQueryImsState.java b/src/com/android/settings/network/ims/VolteQueryImsState.java
index 1fa72d7..167b4b1 100644
--- a/src/com/android/settings/network/ims/VolteQueryImsState.java
+++ b/src/com/android/settings/network/ims/VolteQueryImsState.java
@@ -27,10 +27,6 @@
 
 import androidx.annotation.VisibleForTesting;
 
-import com.android.ims.ImsManager;
-import com.android.settings.network.SubscriptionUtil;
-import com.android.settings.network.telephony.MobileNetworkUtils;
-
 /**
  * Controller class for querying Volte status
  */
@@ -66,12 +62,6 @@
         return (new ImsQueryEnhanced4gLteModeUserSetting(subId)).query();
     }
 
-    @VisibleForTesting
-    ImsManager getImsManager(int subId) {
-        return ImsManager.getInstance(mContext,
-                SubscriptionUtil.getPhoneId(mContext, subId));
-    }
-
     /**
      * Check whether VoLTE has been provisioned or not on this subscription
      *
@@ -101,8 +91,15 @@
         if (!SubscriptionManager.isValidSubscriptionId(mSubId)) {
             return false;
         }
-        return isVoLteProvisioned()
-                && MobileNetworkUtils.isImsServiceStateReady(getImsManager(mSubId));
+        if (!isVoLteProvisioned()) {
+            return false;
+        }
+        try {
+            return isServiceStateReady(mSubId);
+        } catch (InterruptedException | IllegalArgumentException | ImsException exception) {
+            Log.w(LOG_TAG, "fail to get VoLte service status. subId=" + mSubId, exception);
+        }
+        return false;
     }
 
     /**
diff --git a/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java b/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java
index 97d76ca..515ab5b 100644
--- a/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java
+++ b/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java
@@ -19,10 +19,6 @@
 import android.content.Context;
 import android.telephony.ims.ImsException;
 
-import com.android.ims.ImsManager;
-
-
-
 /**
  * Controller class for mock VoLte status
  */
@@ -31,6 +27,7 @@
     private Boolean mIsTtyOnVolteEnabled;
     private Boolean mIsSupported;
     private Boolean mIsProvisionedOnDevice;
+    private Boolean mIsServiceStateReady;
     private Boolean mIsEnabledByUser;
 
     /**
@@ -43,10 +40,6 @@
         super(context, subId);
     }
 
-    public ImsManager getImsManager(int subId) {
-        return super.getImsManager(subId);
-    }
-
     public void setIsTtyOnVolteEnabled(boolean enabled) {
         mIsTtyOnVolteEnabled = enabled;
     }
@@ -84,6 +77,19 @@
         return super.isProvisionedOnDevice(subId);
     }
 
+    public void setServiceStateReady(boolean isReady) {
+        mIsServiceStateReady = isReady;
+    }
+
+    @Override
+    boolean isServiceStateReady(int subId) throws InterruptedException, ImsException,
+            IllegalArgumentException {
+        if (mIsServiceStateReady != null) {
+            return mIsServiceStateReady;
+        }
+        return super.isServiceStateReady(subId);
+    }
+
     public void setIsEnabledByUser(boolean enabled) {
         mIsEnabledByUser = enabled;
     }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
index ba71a79..598f30a 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java
@@ -28,12 +28,9 @@
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.ims.ProvisioningManager;
-import android.telephony.ims.feature.MmTelFeature;
-import android.telephony.ims.stub.ImsRegistrationImplBase;
 
 import androidx.preference.SwitchPreference;
 
-import com.android.ims.ImsManager;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.network.ims.MockVolteQueryImsState;
 import com.android.settingslib.RestrictedSwitchPreference;
@@ -59,8 +56,6 @@
     @Mock
     private CarrierConfigManager mCarrierConfigManager;
     @Mock
-    private ImsManager mImsManager;
-    @Mock
     private ProvisioningManager mProvisioningManager;
 
     private MockVolteQueryImsState mQueryImsState;
@@ -86,9 +81,10 @@
         doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
 
         mQueryImsState = spy(new MockVolteQueryImsState(mContext, SUB_ID));
-        doReturn(mImsManager).when(mQueryImsState).getImsManager(anyInt());
         mQueryImsState.setEnabledByPlatform(true);
         mQueryImsState.setIsProvisionedOnDevice(true);
+        mQueryImsState.setIsTtyOnVolteEnabled(true);
+        mQueryImsState.setServiceStateReady(true);
         mQueryImsState.setIsEnabledByUser(true);
 
         mPreference = new RestrictedSwitchPreference(mContext);
@@ -100,6 +96,9 @@
 
     @Test
     public void getAvailabilityStatus_default_returnUnavailable() {
+        mQueryImsState.setEnabledByPlatform(false);
+        mQueryImsState.setIsProvisionedOnDevice(false);
+
         mController.init(SUB_ID);
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(
@@ -109,9 +108,6 @@
     @Test
     public void getAvailabilityStatus_volteDisabled_returnUnavailable() {
         mQueryImsState.setEnabledByPlatform(false);
-        doReturn(true).when(mProvisioningManager).getProvisioningStatusForCapability(
-                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
-                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
 
         assertThat(mController.getAvailabilityStatus()).isEqualTo(
                 BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
@@ -123,7 +119,6 @@
         mPreference.setEnabled(false);
         mCarrierConfig.putInt(CarrierConfigManager.KEY_ENHANCED_4G_LTE_TITLE_VARIANT_INT, 1);
         mController.mCallState = TelephonyManager.CALL_STATE_IDLE;
-        doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
         mCarrierConfig.putBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true);
 
         mController.updateState(mPreference);
@@ -135,8 +130,6 @@
     public void updateState_configOn_prefChecked() {
         mQueryImsState.setIsEnabledByUser(true);
         mPreference.setChecked(false);
-        doReturn(true).when(mImsManager).isEnhanced4gLteModeSettingEnabledByUser();
-        doReturn(true).when(mImsManager).isNonTtyOrTtyOnVolteEnabled();
 
         mController.updateState(mPreference);
 
diff --git a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
index 944d8e6..50446ad 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java
@@ -43,7 +43,6 @@
 import androidx.slice.core.SliceQuery;
 import androidx.slice.widget.SliceLiveData;
 
-import com.android.ims.ImsManager;
 import com.android.settings.R;
 import com.android.settings.network.ims.MockVolteQueryImsState;
 import com.android.settings.slices.CustomSliceRegistry;
@@ -74,8 +73,6 @@
     private CarrierConfigManager mMockCarrierConfigManager;
 
     @Mock
-    private ImsManager mMockImsManager;
-    @Mock
     private ProvisioningManager mProvisioningManager;
 
     private ShadowSubscriptionManager mShadowSubscriptionManager;
@@ -109,9 +106,10 @@
         mReceiver = spy(new SliceBroadcastReceiver());
 
         mQueryImsState = spy(new MockVolteQueryImsState(mContext, SUB_ID));
-        doReturn(mMockImsManager).when(mQueryImsState).getImsManager(anyInt());
         mQueryImsState.setEnabledByPlatform(true);
         mQueryImsState.setIsProvisionedOnDevice(true);
+        mQueryImsState.setIsTtyOnVolteEnabled(true);
+        mQueryImsState.setServiceStateReady(true);
         mQueryImsState.setIsEnabledByUser(true);
 
         mEnhanced4gLteSliceHelper = spy(new FakeEnhanced4gLteSliceHelper(mContext));
@@ -149,7 +147,6 @@
     public void test_CreateEnhanced4gLteSlice_success() {
         mQueryImsState.setEnabledByPlatform(true);
         mQueryImsState.setIsProvisionedOnDevice(true);
-        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
         when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
 
         final Slice slice = mEnhanced4gLteSliceHelper.createEnhanced4gLteSlice(
@@ -163,7 +160,6 @@
     public void test_SettingSliceProvider_getsRightSliceEnhanced4gLte() {
         mQueryImsState.setEnabledByPlatform(true);
         mQueryImsState.setIsProvisionedOnDevice(true);
-        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
         when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null);
         when(mSlicesFeatureProvider.getNewEnhanced4gLteSliceHelper(mContext))
                 .thenReturn(mEnhanced4gLteSliceHelper);
@@ -180,7 +176,6 @@
         mQueryImsState.setEnabledByPlatform(true);
         mQueryImsState.setIsProvisionedOnDevice(true);
         mQueryImsState.setIsEnabledByUser(false);
-        when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true);
         when(mSlicesFeatureProvider.getNewEnhanced4gLteSliceHelper(mContext))
                 .thenReturn(mEnhanced4gLteSliceHelper);
 
@@ -194,7 +189,7 @@
         // change the setting
         mReceiver.onReceive(mContext, intent);
 
-        verify((mMockImsManager)).setEnhanced4gLteModeSetting(
+        verify(mEnhanced4gLteSliceHelper).setEnhanced4gLteModeSetting(anyInt(),
                 mEnhanced4gLteSettingCaptor.capture());
 
         // assert the change