From 4a49f426fb514a12b73693ffc7f28cec42613efb Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Fri, 20 Mar 2020 13:31:35 +0800 Subject: [PATCH] [Settings] Avoid from accessing IMS with invalid subscription id Check subscription ID before accessing to IMS APIs Bug: 149190278 Test: make and manual test Change-Id: I0561529ccaf23c84d7d6dd3e268386ab82f17418 --- .../android/settings/network/ims/ImsQueryController.java | 3 +++ .../android/settings/network/ims/VolteQueryImsState.java | 9 +++++++++ .../android/settings/network/ims/VtQueryImsState.java | 3 +++ .../settings/network/ims/WifiCallingQueryImsState.java | 9 +++++++++ 4 files changed, 24 insertions(+) diff --git a/src/com/android/settings/network/ims/ImsQueryController.java b/src/com/android/settings/network/ims/ImsQueryController.java index 068a80537b9..3f17da2b360 100644 --- a/src/com/android/settings/network/ims/ImsQueryController.java +++ b/src/com/android/settings/network/ims/ImsQueryController.java @@ -83,6 +83,9 @@ abstract class ImsQueryController { @VisibleForTesting boolean isProvisionedOnDevice(int subId) { + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + return false; + } return (new ImsQueryProvisioningStat(subId, mCapability, mTech)).query(); } diff --git a/src/com/android/settings/network/ims/VolteQueryImsState.java b/src/com/android/settings/network/ims/VolteQueryImsState.java index 22fb529ef80..1fa72d7fb4d 100644 --- a/src/com/android/settings/network/ims/VolteQueryImsState.java +++ b/src/com/android/settings/network/ims/VolteQueryImsState.java @@ -60,6 +60,9 @@ public class VolteQueryImsState extends ImsQueryController { */ @VisibleForTesting boolean isEnabledByUser(int subId) { + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + return false; + } return (new ImsQueryEnhanced4gLteModeUserSetting(subId)).query(); } @@ -75,6 +78,9 @@ public class VolteQueryImsState extends ImsQueryController { * @return true when VoLTE has been enabled, otherwise false */ public boolean isVoLteProvisioned() { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } if (!isProvisionedOnDevice(mSubId)) { return false; } @@ -92,6 +98,9 @@ public class VolteQueryImsState extends ImsQueryController { * @return true when VoLTE can be performed, otherwise false */ public boolean isReadyToVoLte() { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } return isVoLteProvisioned() && MobileNetworkUtils.isImsServiceStateReady(getImsManager(mSubId)); } diff --git a/src/com/android/settings/network/ims/VtQueryImsState.java b/src/com/android/settings/network/ims/VtQueryImsState.java index c0776036bf1..f6de5126c98 100644 --- a/src/com/android/settings/network/ims/VtQueryImsState.java +++ b/src/com/android/settings/network/ims/VtQueryImsState.java @@ -59,6 +59,9 @@ public class VtQueryImsState extends ImsQueryController { */ @VisibleForTesting boolean isEnabledByUser(int subId) { + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + return false; + } return (new ImsQueryVtUserSetting(subId)).query(); } diff --git a/src/com/android/settings/network/ims/WifiCallingQueryImsState.java b/src/com/android/settings/network/ims/WifiCallingQueryImsState.java index 1667b7f9804..bdf021caab9 100644 --- a/src/com/android/settings/network/ims/WifiCallingQueryImsState.java +++ b/src/com/android/settings/network/ims/WifiCallingQueryImsState.java @@ -56,6 +56,9 @@ public class WifiCallingQueryImsState extends ImsQueryController { */ @VisibleForTesting boolean isEnabledByUser(int subId) { + if (!SubscriptionManager.isValidSubscriptionId(subId)) { + return false; + } return (new ImsQueryWfcUserSetting(subId)).query(); } @@ -71,6 +74,9 @@ public class WifiCallingQueryImsState extends ImsQueryController { * @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; @@ -86,6 +92,9 @@ public class WifiCallingQueryImsState extends ImsQueryController { * @return true when Wifi Calling can be performed, otherwise false */ public boolean isReadyToWifiCalling() { + if (!SubscriptionManager.isValidSubscriptionId(mSubId)) { + return false; + } return isWifiCallingProvisioned() && MobileNetworkUtils.isImsServiceStateReady(getImsManager(mSubId)); }