diff --git a/java/com/android/voicemail/impl/CarrierIdentifier.java b/java/com/android/voicemail/impl/CarrierIdentifier.java
index 82b6a24..76576e7 100644
--- a/java/com/android/voicemail/impl/CarrierIdentifier.java
+++ b/java/com/android/voicemail/impl/CarrierIdentifier.java
@@ -19,14 +19,16 @@
 import android.annotation.TargetApi;
 import android.content.Context;
 import android.os.Build.VERSION_CODES;
+import android.support.annotation.Nullable;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.TelephonyManager;
 import com.google.auto.value.AutoValue;
+import java.util.Optional;
 
 /** Identifies a carrier. */
 @AutoValue
 @TargetApi(VERSION_CODES.O)
-@SuppressWarnings("missingpermission")
+@SuppressWarnings({"missingpermission", "AndroidApiChecker"})
 public abstract class CarrierIdentifier {
 
   public abstract String mccMnc();
@@ -52,20 +54,25 @@
     return new AutoValue_CarrierIdentifier.Builder().setGid1("");
   }
 
-  public static CarrierIdentifier forHandle(
-      Context context, PhoneAccountHandle phoneAccountHandle) {
+  /** Create a identifier for a {@link PhoneAccountHandle}. Absent if the handle is not valid. */
+  public static Optional<CarrierIdentifier> forHandle(
+      Context context, @Nullable PhoneAccountHandle phoneAccountHandle) {
+    if (phoneAccountHandle == null) {
+      return Optional.empty();
+    }
     TelephonyManager telephonyManager =
         context
             .getSystemService(TelephonyManager.class)
             .createForPhoneAccountHandle(phoneAccountHandle);
     if (telephonyManager == null) {
-      throw new IllegalArgumentException("Invalid PhoneAccountHandle");
+      return Optional.empty();
     }
     String gid1 = telephonyManager.getGroupIdLevel1();
     if (gid1 == null) {
       gid1 = "";
     }
 
-    return builder().setMccMnc(telephonyManager.getSimOperator()).setGid1(gid1).build();
+    return Optional.of(
+        builder().setMccMnc(telephonyManager.getSimOperator()).setGid1(gid1).build());
   }
 }
diff --git a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
index b56f792..4c4df27 100644
--- a/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
+++ b/java/com/android/voicemail/impl/OmtpVvmCarrierConfigHelper.java
@@ -39,6 +39,7 @@
 import com.android.voicemail.impl.sms.StatusMessage;
 import com.android.voicemail.impl.sync.VvmAccountManager;
 import java.util.Collections;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -55,7 +56,7 @@
  * <p>TODO(twyen): refactor this to an interface.
  */
 @TargetApi(VERSION_CODES.O)
-@SuppressWarnings("missingpermission")
+@SuppressWarnings({"missingpermission", "AndroidApiChecker"})
 public class OmtpVvmCarrierConfigHelper {
 
   private static final String TAG = "OmtpVvmCarrierCfgHlpr";
@@ -105,25 +106,25 @@
   public OmtpVvmCarrierConfigHelper(Context context, @Nullable PhoneAccountHandle handle) {
     this.context = context;
     phoneAccountHandle = handle;
-    TelephonyManager telephonyManager =
-        context
-            .getSystemService(TelephonyManager.class)
-            .createForPhoneAccountHandle(phoneAccountHandle);
-    if (telephonyManager == null) {
-      VvmLog.e(TAG, "PhoneAccountHandle is invalid");
-      carrierConfig = null;
-      telephonyConfig = null;
-      overrideConfig = null;
-      vvmType = null;
-      protocol = null;
-      return;
-    }
-
     if (overrideConfigForTest != null) {
       overrideConfig = overrideConfigForTest;
       carrierConfig = new PersistableBundle();
       telephonyConfig = new PersistableBundle();
     } else {
+      Optional<CarrierIdentifier> carrierIdentifier = CarrierIdentifier.forHandle(context, handle);
+      TelephonyManager telephonyManager =
+          context
+              .getSystemService(TelephonyManager.class)
+              .createForPhoneAccountHandle(phoneAccountHandle);
+      if (telephonyManager == null || !carrierIdentifier.isPresent()) {
+        VvmLog.e(TAG, "PhoneAccountHandle is invalid");
+        carrierConfig = null;
+        telephonyConfig = null;
+        overrideConfig = null;
+        vvmType = null;
+        protocol = null;
+        return;
+      }
       if (ConfigOverrideFragment.isOverridden(context)) {
         overrideConfig = ConfigOverrideFragment.getConfig(context);
         VvmLog.w(TAG, "Config override is activated: " + overrideConfig);
@@ -132,9 +133,7 @@
       }
 
       carrierConfig = getCarrierConfig(telephonyManager);
-      telephonyConfig =
-          new DialerVvmConfigManager(context)
-              .getConfig(CarrierIdentifier.forHandle(context, phoneAccountHandle));
+      telephonyConfig = new DialerVvmConfigManager(context).getConfig(carrierIdentifier.get());
     }
 
     vvmType = getVvmType();
