Fail gracefully when IMS is not available
Bug: 118823723
Test: Manual; atest FrameworksTelephonyTests
Merged-In: Id37f4085f5de64d590168648c0e6bce60474c0fd
Change-Id: Id37f4085f5de64d590168648c0e6bce60474c0fd
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 46f99e2..74f4dee 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -138,6 +138,7 @@
import com.android.internal.telephony.TelephonyPermissions;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.euicc.EuiccConnector;
+import com.android.internal.telephony.ims.ImsResolver;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccIoResult;
import com.android.internal.telephony.uicc.IccUtils;
@@ -4027,7 +4028,12 @@
final long identity = Binder.clearCallingIdentity();
try {
- PhoneFactory.getImsResolver().enableIms(slotId);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return;
+ }
+ resolver.enableIms(slotId);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4042,7 +4048,12 @@
final long identity = Binder.clearCallingIdentity();
try {
- PhoneFactory.getImsResolver().disableIms(slotId);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return;
+ }
+ resolver.disableIms(slotId);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4059,7 +4070,12 @@
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().getMmTelFeatureAndListen(slotId, callback);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return null;
+ }
+ return resolver.getMmTelFeatureAndListen(slotId, callback);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4076,7 +4092,12 @@
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().getRcsFeatureAndListen(slotId, callback);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return null;
+ }
+ return resolver.getRcsFeatureAndListen(slotId, callback);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4084,14 +4105,19 @@
/**
* Returns the {@link IImsRegistration} structure associated with the slotId and feature
- * specified.
+ * specified or null if IMS is not supported on the slot specified.
*/
public IImsRegistration getImsRegistration(int slotId, int feature) throws RemoteException {
enforceModifyPermission();
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().getImsRegistration(slotId, feature);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return null;
+ }
+ return resolver.getImsRegistration(slotId, feature);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4099,14 +4125,19 @@
/**
* Returns the {@link IImsConfig} structure associated with the slotId and feature
- * specified.
+ * specified or null if IMS is not supported on the slot specified.
*/
public IImsConfig getImsConfig(int slotId, int feature) throws RemoteException {
enforceModifyPermission();
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().getImsConfig(slotId, feature);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return null;
+ }
+ return resolver.getImsConfig(slotId, feature);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4131,8 +4162,13 @@
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().overrideImsServiceConfiguration(slotId,
- isCarrierImsService, packageName);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return false;
+ }
+ return resolver.overrideImsServiceConfiguration(slotId, isCarrierImsService,
+ packageName);
} finally {
Binder.restoreCallingIdentity(identity);
}
@@ -4154,8 +4190,12 @@
final long identity = Binder.clearCallingIdentity();
try {
- return PhoneFactory.getImsResolver().getImsServiceConfiguration(slotId,
- isCarrierImsService);
+ ImsResolver resolver = PhoneFactory.getImsResolver();
+ if (resolver == null) {
+ // may happen if the device does not support IMS.
+ return "";
+ }
+ return resolver.getImsServiceConfiguration(slotId, isCarrierImsService);
} finally {
Binder.restoreCallingIdentity(identity);
}