From 19b232f73eab69c30e7643e419948feb45da09cf Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Wed, 22 Jan 2020 19:32:46 +0800 Subject: [PATCH] [Settings] Apply ImsQueryProvisioningStat to VoLTE 1. Code refactor 2. Apply ImsQueryProvisioningStat class to VoLTE's use case Bug: 140542283 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gLteSliceHelperTest Change-Id: Ie5a56e9b768b9abe88c635e4e5532d72c9ddd1a2 --- .../network/ims/ImsQueryController.java | 6 +- .../network/ims/ImsQueryProvisioningStat.java | 8 +- .../Enhanced4gBasePreferenceController.java | 51 +++-------- .../telephony/Enhanced4gLteSliceHelper.java | 42 ++-------- .../network/ims/MockVolteQueryImsState.java | 84 +++++++++++++++++++ .../network/ims/MockVtQueryImsState.java | 2 +- ...nhanced4gBasePreferenceControllerTest.java | 16 ++-- .../Enhanced4gLteSliceHelperTest.java | 34 ++------ 8 files changed, 126 insertions(+), 117 deletions(-) create mode 100644 tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java diff --git a/src/com/android/settings/network/ims/ImsQueryController.java b/src/com/android/settings/network/ims/ImsQueryController.java index 2d2a69fba22..5519ddd378d 100644 --- a/src/com/android/settings/network/ims/ImsQueryController.java +++ b/src/com/android/settings/network/ims/ImsQueryController.java @@ -39,9 +39,9 @@ abstract class ImsQueryController { /** * Constructor for query IMS status * - * @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability} - * @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech} - * @param transportType {@code @AccessNetworkConstants.TransportType} + * @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability} + * @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech} + * @param transportType {@link AccessNetworkConstants#TransportType} */ ImsQueryController( @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, diff --git a/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java b/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java index 68ffe8c40b9..34f232d2e79 100644 --- a/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java +++ b/src/com/android/settings/network/ims/ImsQueryProvisioningStat.java @@ -22,7 +22,7 @@ import android.telephony.ims.stub.ImsRegistrationImplBase; /** - * An {@code ImsQuery} for accessing IMS provision stat + * An {@link ImsQuery} for accessing IMS provision stat */ public class ImsQueryProvisioningStat implements ImsQuery { @@ -33,8 +33,8 @@ public class ImsQueryProvisioningStat implements ImsQuery { /** * Constructor * @param subId subscription id - * @param capability {@code MmTelFeature.MmTelCapabilities.MmTelCapability} - * @param tech {@code @ImsRegistrationImplBase.ImsRegistrationTech} + * @param capability {@link MmTelFeature.MmTelCapabilities#MmTelCapability} + * @param tech {@link ImsRegistrationImplBase#ImsRegistrationTech} */ public ImsQueryProvisioningStat(int subId, @MmTelFeature.MmTelCapabilities.MmTelCapability int capability, @@ -45,7 +45,7 @@ public class ImsQueryProvisioningStat implements ImsQuery { } /** - * Implementation of interface {@code ImsQuery} + * Implementation of interface {@link ImsQuery} * * @return result of query */ diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java index 123e100ff77..efbbbf875bc 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java @@ -23,9 +23,6 @@ import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.ims.ImsMmTelManager; -import android.telephony.ims.ProvisioningManager; -import android.telephony.ims.feature.MmTelFeature; -import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -33,8 +30,6 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; -import com.android.ims.ImsManager; -import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.ims.VolteQueryImsState; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; @@ -55,8 +50,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc Preference mPreference; private CarrierConfigManager mCarrierConfigManager; private PersistableBundle mCarrierConfig; - @VisibleForTesting - ImsManager mImsManager; private PhoneCallStateListener mPhoneStateListener; @VisibleForTesting Integer mCallState; @@ -81,10 +74,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc } mSubId = subId; mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); - if (SubscriptionManager.isValidSubscriptionId(mSubId)) { - mImsManager = ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId( - mContext, mSubId)); - } final boolean show4GForLTE = mCarrierConfig.getBoolean( CarrierConfigManager.KEY_SHOW_4G_FOR_LTE_DATA_ICON_BOOL); @@ -96,29 +85,26 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc return this; } - @VisibleForTesting - ProvisioningManager getProvisioningManager(int subId) { - return ProvisioningManager.createForSubscriptionId(subId); - } - @Override public int getAvailabilityStatus(int subId) { init(subId); if (!isModeMatched()) { return CONDITIONALLY_UNAVAILABLE; } + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + return CONDITIONALLY_UNAVAILABLE; + } final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); + if ((carrierConfig == null) + || carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) { + return CONDITIONALLY_UNAVAILABLE; + } final VolteQueryImsState queryState = queryImsState(subId); - final boolean isVisible = SubscriptionManager.isValidSubscriptionId(subId) - && mImsManager != null && carrierConfig != null - && mImsManager.isVolteEnabledByPlatform() - && isVolteProvisionedOnDevice(mSubId) - && MobileNetworkUtils.isImsServiceStateReady(mImsManager) - && !carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL); - return isVisible - ? (isUserControlAllowed() && queryState.isAllowUserControl() - ? AVAILABLE : AVAILABLE_UNSEARCHABLE) - : CONDITIONALLY_UNAVAILABLE; + if (!queryState.isReadyToVoLte()) { + return CONDITIONALLY_UNAVAILABLE; + } + return (isUserControlAllowed() && queryState.isAllowUserControl()) + ? AVAILABLE : AVAILABLE_UNSEARCHABLE; } @Override @@ -200,19 +186,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL); } - private boolean isVolteProvisionedOnDevice(int subId) { - if (!SubscriptionManager.isValidSubscriptionId(subId)) { - return true; - } - final ProvisioningManager provisioningMgr = getProvisioningManager(subId); - if (provisioningMgr == null) { - return true; - } - return provisioningMgr.getProvisioningStatusForCapability( - MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, - ImsRegistrationImplBase.REGISTRATION_TECH_LTE); - } - private class PhoneCallStateListener extends PhoneStateListener { PhoneCallStateListener() { diff --git a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java index 3cad3161bb3..31e8239a875 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java +++ b/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelper.java @@ -28,9 +28,6 @@ import android.os.PersistableBundle; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.ims.ImsMmTelManager; -import android.telephony.ims.ProvisioningManager; -import android.telephony.ims.feature.MmTelFeature; -import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -40,10 +37,8 @@ import androidx.slice.builders.ListBuilder; import androidx.slice.builders.ListBuilder.RowBuilder; import androidx.slice.builders.SliceAction; -import com.android.ims.ImsManager; import com.android.settings.R; import com.android.settings.Utils; -import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.ims.VolteQueryImsState; import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.SliceBroadcastReceiver; @@ -112,14 +107,6 @@ public class Enhanced4gLteSliceHelper { return null; } - final ImsManager imsManager = getImsManager(subId); - - if (!imsManager.isVolteEnabledByPlatform() - || !isVolteProvisionedOnDevice(subId)) { - Log.d(TAG, "Setting is either not provisioned or not enabled by Platform"); - return null; - } - if (isCarrierConfigManagerKeyEnabled( CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL, subId, false) || !isCarrierConfigManagerKeyEnabled( @@ -130,6 +117,11 @@ public class Enhanced4gLteSliceHelper { } final VolteQueryImsState queryState = queryImsState(subId); + if (!queryState.isVoLteProvisioned()) { + Log.d(TAG, "Setting is either not provisioned or not enabled by Platform"); + return null; + } + try { return getEnhanced4gLteSlice(sliceUri, queryState.isEnabledByUser(), subId); @@ -164,15 +156,6 @@ public class Enhanced4gLteSliceHelper { .build(); } - protected ImsManager getImsManager(int subId) { - return ImsManager.getInstance(mContext, SubscriptionUtil.getPhoneId(mContext, subId)); - } - - @VisibleForTesting - ProvisioningManager getProvisioningManager(int subId) { - return ProvisioningManager.createForSubscriptionId(subId); - } - /** * Handles Enhanced 4G LTE mode setting change from Enhanced 4G LTE slice and posts * notification. Should be called when intent action is ACTION_ENHANCED_4G_LTE_CHANGED @@ -183,9 +166,8 @@ public class Enhanced4gLteSliceHelper { final int subId = getDefaultVoiceSubId(); if (SubscriptionManager.isValidSubscriptionId(subId)) { - final ImsManager imsManager = getImsManager(subId); - if (imsManager.isVolteEnabledByPlatform() && isVolteProvisionedOnDevice(subId)) { - final VolteQueryImsState queryState = queryImsState(subId); + final VolteQueryImsState queryState = queryImsState(subId); + if (queryState.isVoLteProvisioned()) { final boolean currentValue = queryState.isEnabledByUser() && queryState.isAllowUserControl(); final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, @@ -285,16 +267,6 @@ public class Enhanced4gLteSliceHelper { return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent, 0 /* flags */); } - private boolean isVolteProvisionedOnDevice(int subId) { - final ProvisioningManager provisioningMgr = getProvisioningManager(subId); - if (provisioningMgr == null) { - return true; - } - return provisioningMgr.getProvisioningStatusForCapability( - MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, - ImsRegistrationImplBase.REGISTRATION_TECH_LTE); - } - @VisibleForTesting VolteQueryImsState queryImsState(int subId) { return new VolteQueryImsState(mContext, subId); diff --git a/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java b/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java new file mode 100644 index 00000000000..42ddd7006a9 --- /dev/null +++ b/tests/robotests/src/com/android/settings/network/ims/MockVolteQueryImsState.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.network.ims; + +import android.content.Context; + +import com.android.ims.ImsManager; + + + +/** + * Controller class for mock VoLte status + */ +public class MockVolteQueryImsState extends VolteQueryImsState { + + private ImsQuery mIsTtyOnVolteEnabled; + private ImsQuery mIsProvisionedOnDevice; + private ImsQuery mIsEnabledByUser; + + /** + * Constructor + * + * @param context {@link Context} + * @param subId subscription's id + */ + public MockVolteQueryImsState(Context context, int subId) { + super(context, subId); + } + + public ImsManager getImsManager(int subId) { + return super.getImsManager(subId); + } + + public void setIsTtyOnVolteEnabled(boolean enabled) { + mIsTtyOnVolteEnabled = new MockImsQueryResult.BooleanResult(enabled); + } + + @Override + ImsQuery isTtyOnVolteEnabled(int subId) { + if (mIsTtyOnVolteEnabled != null) { + return mIsTtyOnVolteEnabled; + } + return super.isTtyOnVolteEnabled(subId); + } + + public void setIsProvisionedOnDevice(boolean isProvisioned) { + mIsProvisionedOnDevice = new MockImsQueryResult.BooleanResult(isProvisioned); + } + + @Override + ImsQuery isProvisionedOnDevice(int subId) { + if (mIsProvisionedOnDevice != null) { + return mIsProvisionedOnDevice; + } + return super.isProvisionedOnDevice(subId); + } + + public void setIsEnabledByUser(boolean enabled) { + mIsEnabledByUser = new MockImsQueryResult.BooleanResult(enabled); + } + + @Override + ImsQuery isEnabledByUser(int subId) { + if (mIsEnabledByUser != null) { + return mIsEnabledByUser; + } + return super.isEnabledByUser(subId); + } + +} diff --git a/tests/robotests/src/com/android/settings/network/ims/MockVtQueryImsState.java b/tests/robotests/src/com/android/settings/network/ims/MockVtQueryImsState.java index 877db7952e1..b5971e9db1c 100644 --- a/tests/robotests/src/com/android/settings/network/ims/MockVtQueryImsState.java +++ b/tests/robotests/src/com/android/settings/network/ims/MockVtQueryImsState.java @@ -33,7 +33,7 @@ public class MockVtQueryImsState extends VtQueryImsState { /** * Constructor * - * @param context {@code Context} + * @param context {@link Context} * @param subId subscription's id */ public MockVtQueryImsState(Context context, int subId) { 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 3e0bfa3d587..d7db984c67e 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceControllerTest.java @@ -35,7 +35,7 @@ import androidx.preference.SwitchPreference; import com.android.ims.ImsManager; import com.android.settings.core.BasePreferenceController; -import com.android.settings.network.ims.VolteQueryImsState; +import com.android.settings.network.ims.MockVolteQueryImsState; import com.android.settingslib.RestrictedSwitchPreference; import org.junit.Before; @@ -63,7 +63,7 @@ public class Enhanced4gBasePreferenceControllerTest { @Mock private ProvisioningManager mProvisioningManager; - private VolteQueryImsState mQueryImsState; + private MockVolteQueryImsState mQueryImsState; private Enhanced4gLtePreferenceController mController; private SwitchPreference mPreference; @@ -85,17 +85,13 @@ public class Enhanced4gBasePreferenceControllerTest { mCarrierConfig = new PersistableBundle(); doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); - mQueryImsState = spy(new VolteQueryImsState(mContext, SUB_ID)); + mQueryImsState = spy(new MockVolteQueryImsState(mContext, SUB_ID)); + doReturn(mImsManager).when(mQueryImsState).getImsManager(anyInt()); + mQueryImsState.setIsProvisionedOnDevice(true); mPreference = new RestrictedSwitchPreference(mContext); - mController = spy(new Enhanced4gLtePreferenceController(mContext, "roaming") { - @Override - ProvisioningManager getProvisioningManager(int subId) { - return mProvisioningManager; - } - }); + mController = spy(new Enhanced4gLtePreferenceController(mContext, "VoLTE")); mController.init(SUB_ID); - mController.mImsManager = mImsManager; doReturn(mQueryImsState).when(mController).queryImsState(anyInt()); mPreference.setKey(mController.getPreferenceKey()); } 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 c9abe23a193..a89a7aac1c1 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/Enhanced4gLteSliceHelperTest.java @@ -34,8 +34,6 @@ import android.content.Intent; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.ims.ProvisioningManager; -import android.telephony.ims.feature.MmTelFeature; -import android.telephony.ims.stub.ImsRegistrationImplBase; import androidx.slice.Slice; import androidx.slice.SliceItem; @@ -47,7 +45,7 @@ import androidx.slice.widget.SliceLiveData; import com.android.ims.ImsManager; import com.android.settings.R; -import com.android.settings.network.ims.VolteQueryImsState; +import com.android.settings.network.ims.MockVolteQueryImsState; import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.SettingsSliceProvider; import com.android.settings.slices.SliceBroadcastReceiver; @@ -81,7 +79,7 @@ public class Enhanced4gLteSliceHelperTest { private ProvisioningManager mProvisioningManager; private ShadowSubscriptionManager mShadowSubscriptionManager; - private VolteQueryImsState mQueryImsState; + private MockVolteQueryImsState mQueryImsState; private Context mContext; private FakeEnhanced4gLteSliceHelper mEnhanced4gLteSliceHelper; @@ -110,7 +108,9 @@ public class Enhanced4gLteSliceHelperTest { //setup for SliceBroadcastReceiver test mReceiver = spy(new SliceBroadcastReceiver()); - mQueryImsState = spy(new VolteQueryImsState(mContext, SUB_ID)); + mQueryImsState = spy(new MockVolteQueryImsState(mContext, SUB_ID)); + doReturn(mMockImsManager).when(mQueryImsState).getImsManager(anyInt()); + mQueryImsState.setIsProvisionedOnDevice(true); mEnhanced4gLteSliceHelper = spy(new FakeEnhanced4gLteSliceHelper(mContext)); doReturn(mQueryImsState).when(mEnhanced4gLteSliceHelper).queryImsState(anyInt()); @@ -143,9 +143,7 @@ public class Enhanced4gLteSliceHelperTest { @Test public void test_CreateEnhanced4gLteSlice_success() { when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true); - when(mProvisioningManager.getProvisioningStatusForCapability( - MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, - ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true); + mQueryImsState.setIsProvisionedOnDevice(true); doReturn(true).when(mQueryImsState).isEnabledByUser(); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null); @@ -160,9 +158,7 @@ public class Enhanced4gLteSliceHelperTest { @Test public void test_SettingSliceProvider_getsRightSliceEnhanced4gLte() { when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true); - when(mProvisioningManager.getProvisioningStatusForCapability( - MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, - ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true); + mQueryImsState.setIsProvisionedOnDevice(true); doReturn(true).when(mQueryImsState).isEnabledByUser(); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mMockCarrierConfigManager.getConfigForSubId(1)).thenReturn(null); @@ -179,9 +175,7 @@ public class Enhanced4gLteSliceHelperTest { @Ignore public void test_SliceBroadcastReceiver_toggleOffEnhanced4gLte() { when(mMockImsManager.isVolteEnabledByPlatform()).thenReturn(true); - when(mProvisioningManager.getProvisioningStatusForCapability( - MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE, - ImsRegistrationImplBase.REGISTRATION_TECH_LTE)).thenReturn(true); + mQueryImsState.setIsProvisionedOnDevice(true); doReturn(false).when(mQueryImsState).isEnabledByUser(); when(mMockImsManager.isNonTtyOrTtyOnVolteEnabled()).thenReturn(true); when(mSlicesFeatureProvider.getNewEnhanced4gLteSliceHelper(mContext)) @@ -278,7 +272,7 @@ public class Enhanced4gLteSliceHelperTest { } private class FakeEnhanced4gLteSliceHelper extends Enhanced4gLteSliceHelper { - int mSubId = 1; + int mSubId = SUB_ID; FakeEnhanced4gLteSliceHelper(Context context) { super(context); @@ -289,16 +283,6 @@ public class Enhanced4gLteSliceHelperTest { return mMockCarrierConfigManager; } - @Override - protected ImsManager getImsManager(int subId) { - return mMockImsManager; - } - - @Override - ProvisioningManager getProvisioningManager(int subId) { - return mProvisioningManager; - } - protected int getDefaultVoiceSubId() { return mSubId; }