Fix Telecom CTS crashes when checking for emergency/voicemail number

Bug: 355008150
Test: atest CtsTelecomTestCases
Test: atest CtsTelecomTestCases3
Flag: EXEMPT bugfix
Change-Id: I62a6b6d729849b79aef093eb3e2e3a16180c99c3
diff --git a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
index 5df0de8..df45a6e 100644
--- a/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
+++ b/services/core/java/com/android/server/location/injector/SystemEmergencyHelper.java
@@ -77,7 +77,7 @@
                         mIsInEmergencyCall = mTelephonyManager.isEmergencyNumber(
                                 intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
                         dispatchEmergencyStateChanged();
-                    } catch (IllegalStateException e) {
+                    } catch (IllegalStateException | UnsupportedOperationException e) {
                         Log.w(TAG, "Failed to call TelephonyManager.isEmergencyNumber().", e);
                     }
                 }
diff --git a/telecomm/java/android/telecom/CallerInfoAsyncQuery.java b/telecomm/java/android/telecom/CallerInfoAsyncQuery.java
index 93cd291..a03d7e2 100644
--- a/telecomm/java/android/telecom/CallerInfoAsyncQuery.java
+++ b/telecomm/java/android/telecom/CallerInfoAsyncQuery.java
@@ -483,18 +483,28 @@
 
         // check to see if these are recognized numbers, and use shortcuts if we can.
         TelephonyManager tm = context.getSystemService(TelephonyManager.class);
+
         boolean isEmergencyNumber = false;
         try {
             isEmergencyNumber = tm.isEmergencyNumber(number);
-        } catch (IllegalStateException ise) {
+        } catch (IllegalStateException | UnsupportedOperationException ise) {
             // Ignore the exception that Telephony is not up. Use PhoneNumberUtils API now.
             // Ideally the PhoneNumberUtils API needs to be removed once the
             // telphony service not up issue can be fixed (b/187412989)
+            // UnsupportedOperationException: telephony.calling may not be supported on this device
             isEmergencyNumber = PhoneNumberUtils.isLocalEmergencyNumber(context, number);
         }
+
+        boolean isVoicemailNumber;
+        try {
+            isVoicemailNumber = PhoneNumberUtils.isVoiceMailNumber(context, subId, number);
+        } catch (UnsupportedOperationException ex) {
+            isVoicemailNumber = false;
+        }
+
         if (isEmergencyNumber) {
             cw.event = EVENT_EMERGENCY_NUMBER;
-        } else if (PhoneNumberUtils.isVoiceMailNumber(context, subId, number)) {
+        } else if (isVoicemailNumber) {
             cw.event = EVENT_VOICEMAIL_NUMBER;
         } else {
             cw.event = EVENT_NEW_QUERY;