From c134ef08d428e36e34052ab7e40456ef56c9833a Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Sat, 28 Mar 2020 05:39:10 +0800 Subject: [PATCH] [Settings] Replace ImsManager#isWfcEnabledByPlatform() Replace ImsManager#isWfcEnabledByPlatform(). Bug: 140542283 Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingSettingsForSubTest Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingSettingsTest Test: m RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingPreferenceControllerTest Change-Id: I85907efb39aecdb3fb18cacf11ce4510b898edc4 --- .../network/ims/WifiCallingQueryImsState.java | 32 +++++++++++++------ .../calling/WifiCallingSettingsForSub.java | 2 +- .../ims/MockWifiCallingQueryImsState.java | 16 ++++++++++ .../wifi/calling/WifiCallingSettingsTest.java | 5 +-- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/src/com/android/settings/network/ims/WifiCallingQueryImsState.java b/src/com/android/settings/network/ims/WifiCallingQueryImsState.java index bdf021caab9..6ed0d606590 100644 --- a/src/com/android/settings/network/ims/WifiCallingQueryImsState.java +++ b/src/com/android/settings/network/ims/WifiCallingQueryImsState.java @@ -20,8 +20,10 @@ import android.content.Context; import android.telecom.TelecomManager; import android.telephony.AccessNetworkConstants; import android.telephony.SubscriptionManager; +import android.telephony.ims.ImsException; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; +import android.util.Log; import androidx.annotation.VisibleForTesting; @@ -34,6 +36,8 @@ import com.android.settings.network.telephony.MobileNetworkUtils; */ public class WifiCallingQueryImsState extends ImsQueryController { + private static final String LOG_TAG = "WifiCallingQueryImsState"; + private Context mContext; private int mSubId; @@ -68,22 +72,30 @@ public class WifiCallingQueryImsState extends ImsQueryController { SubscriptionUtil.getPhoneId(mContext, subId)); } + /** + * Check whether Wifi Calling is a supported feature on this subscription + * + * @return true when Wifi Calling is a supported feature, otherwise false + */ + public boolean isWifiCallingSupported() { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } + try { + return isEnabledByPlatform(mSubId); + } catch (InterruptedException | IllegalArgumentException | ImsException exception) { + Log.w(LOG_TAG, "fail to get WFC supporting status. subId=" + mSubId, exception); + } + return false; + } + /** * Check whether Wifi Calling has been provisioned or not on this subscription * * @return true when Wifi Calling has been enabled, otherwise false */ public boolean isWifiCallingProvisioned() { - if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { - return false; - } - final ImsManager imsManager = getImsManager(mSubId); - if (imsManager == null) { - return false; - } - - return imsManager.isWfcEnabledByPlatform() - && isProvisionedOnDevice(mSubId); + return isWifiCallingSupported() && isProvisionedOnDevice(mSubId); } /** diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java index a00bb2324d4..96aae0ea4bb 100644 --- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java @@ -419,7 +419,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment updateBody(); - if (mImsManager.isWfcEnabledByPlatform()) { + if (queryImsState(mSubId).isWifiCallingSupported()) { mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); mSwitchBar.addOnSwitchChangeListener(this); diff --git a/tests/robotests/src/com/android/settings/network/ims/MockWifiCallingQueryImsState.java b/tests/robotests/src/com/android/settings/network/ims/MockWifiCallingQueryImsState.java index 8123c935b1a..af1031da07f 100644 --- a/tests/robotests/src/com/android/settings/network/ims/MockWifiCallingQueryImsState.java +++ b/tests/robotests/src/com/android/settings/network/ims/MockWifiCallingQueryImsState.java @@ -17,6 +17,7 @@ package com.android.settings.network.ims; import android.content.Context; +import android.telephony.ims.ImsException; import com.android.ims.ImsManager; @@ -27,6 +28,7 @@ import com.android.ims.ImsManager; public class MockWifiCallingQueryImsState extends WifiCallingQueryImsState { private Boolean mIsTtyOnVolteEnabled; + private Boolean mIsEnabledOnPlatform; private Boolean mIsProvisionedOnDevice; private Boolean mIsEnabledByUser; @@ -56,6 +58,20 @@ public class MockWifiCallingQueryImsState extends WifiCallingQueryImsState { return super.isTtyOnVolteEnabled(subId); } + + public void setIsEnabledByPlatform(boolean isEnabled) { + mIsEnabledOnPlatform = isEnabled; + } + + @Override + boolean isEnabledByPlatform(int subId) throws InterruptedException, ImsException, + IllegalArgumentException { + if (mIsEnabledOnPlatform != null) { + return mIsEnabledOnPlatform; + } + return super.isEnabledByPlatform(subId); + } + public void setIsProvisionedOnDevice(boolean isProvisioned) { mIsProvisionedOnDevice = isProvisioned; } diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java index dc3b2b0a714..90633cb8d6b 100644 --- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java +++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsTest.java @@ -78,7 +78,8 @@ public class WifiCallingSettingsTest { doReturn(true).when(mQueryImsState2).isEnabledByUser(); doReturn(mImsManager).when(mQueryImsState1).getImsManager(anyInt()); doReturn(mImsManager).when(mQueryImsState2).getImsManager(anyInt()); - doReturn(true).when(mImsManager).isWfcEnabledByPlatform(); + mQueryImsState1.setIsEnabledByPlatform(true); + mQueryImsState2.setIsEnabledByPlatform(true); mQueryImsState1.setIsProvisionedOnDevice(true); mQueryImsState2.setIsProvisionedOnDevice(true); @@ -100,7 +101,7 @@ public class WifiCallingSettingsTest { SubscriptionUtil.setActiveSubscriptionsForTesting(new ArrayList<>( Collections.singletonList(info))); - doReturn(true).when(mImsManager).isWfcEnabledByPlatform(); + mQueryImsState1.setIsEnabledByPlatform(true); mQueryImsState1.setIsProvisionedOnDevice(true); final Intent intent = new Intent();