diff --git a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
index 0de0be3..1ea4a5b 100644
--- a/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
+++ b/src/com/android/contacts/common/interactions/ImportExportDialogFragment.java
@@ -69,6 +69,8 @@
             Contacts.LOOKUP_KEY
     };
 
+    private SubscriptionManager mSubscriptionManager;
+
     /** Preferred way to show this dialog */
     public static void show(FragmentManager fragmentManager, boolean contactsAreAvailable,
             Class callingActivity) {
@@ -112,12 +114,15 @@
         final TelephonyManager manager =
                 (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
 
+        mSubscriptionManager = SubscriptionManager.from(getActivity());
+
         if (res.getBoolean(R.bool.config_allow_import_from_sdcard)) {
             adapter.add(new AdapterEntry(getString(R.string.import_from_sdcard),
                     R.string.import_from_sdcard));
         }
         if (manager != null && res.getBoolean(R.bool.config_allow_sim_import)) {
-            final List<SubscriptionInfo> subInfoRecords = getAllSubInfoList();
+            final List<SubscriptionInfo> subInfoRecords =
+                    mSubscriptionManager.getActiveSubscriptionInfoList();
             if (subInfoRecords.size() == 1) {
                 adapter.add(new AdapterEntry(getString(R.string.import_from_sim),
                         R.string.import_from_sim, subInfoRecords.get(0).getSubscriptionId()));
@@ -272,27 +277,6 @@
         dismiss();
     }
 
-    /**
-     * Return the same values as {@link SubscriptionManager#getAllSubscriptionInfoList()} without relying
-     * on any hidden methods.
-     */
-    // TODO: replace with a method that doesn't make assumptions about the number of SIM slots
-    private static List<SubscriptionInfo> getAllSubInfoList() {
-        final List<SubscriptionInfo> subInfoRecords0 = SubscriptionManager.getSubscriptionInfoUsingSlotId(0);
-        final List<SubscriptionInfo> subInfoRecords1 = SubscriptionManager.getSubscriptionInfoUsingSlotId(1);
-        if (subInfoRecords0 == null && subInfoRecords1 != null) {
-            return subInfoRecords1;
-        }
-        if (subInfoRecords0 != null && subInfoRecords1 == null) {
-            return subInfoRecords0;
-        }
-        if (subInfoRecords0 == null && subInfoRecords1 == null) {
-            return Collections.EMPTY_LIST;
-        }
-        subInfoRecords0.addAll(subInfoRecords1);
-        return subInfoRecords0;
-    }
-
     private String getSubDescription(SubscriptionInfo record) {
         CharSequence name = record.getDisplayName();
         if (TextUtils.isEmpty(record.getNumber())) {
@@ -314,7 +298,7 @@
         }
 
         public AdapterEntry(String label, int resId) {
-            this(label, resId, SubscriptionManager.INVALID_SUB_ID);
+            this(label, resId, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
         }
     }
 }
diff --git a/src/com/android/contacts/common/util/AccountSelectionUtil.java b/src/com/android/contacts/common/util/AccountSelectionUtil.java
index da30e89..c378041 100644
--- a/src/com/android/contacts/common/util/AccountSelectionUtil.java
+++ b/src/com/android/contacts/common/util/AccountSelectionUtil.java
@@ -74,7 +74,7 @@
                 int resId) {
             // Subscription id is only needed for importing from SIM card. We can safely ignore
             // its value for SD card importing.
-            this(context, accountList, resId, SubscriptionManager.INVALID_SUB_ID);
+            this(context, accountList, resId, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
         }
 
         public void onClick(DialogInterface dialog, int which) {
