diff --git a/src/com/android/settings/sim/smartForwarding/EnableSmartForwardingTask.java b/src/com/android/settings/sim/smartForwarding/EnableSmartForwardingTask.java
index 6fe62e0..6742e5e 100644
--- a/src/com/android/settings/sim/smartForwarding/EnableSmartForwardingTask.java
+++ b/src/com/android/settings/sim/smartForwarding/EnableSmartForwardingTask.java
@@ -37,8 +37,6 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
-import java.util.function.Consumer;
-import java.util.stream.Collectors;
 
 public class EnableSmartForwardingTask
         implements Callable<EnableSmartForwardingTask.FeatureResult> {
@@ -94,14 +92,9 @@
 
             mSlotUTData = new SlotUTData[tm.getActiveModemCount()];
             for (int i = 0; i < mSlotUTData.length; i++) {
-                int[] subIdList = sm.getSubscriptionIds(i);
-                if (subIdList.length < 1) {
-                    Log.e(TAG, "getSubscriptionIds() return empty sub id list.");
-                    return false;
-                }
-                int subId = subIdList[0];
+                int subId = SubscriptionManager.getSubscriptionId(i);
 
-                if (!sm.isActiveSubId(subId)) {
+                if (!SubscriptionManager.isValidSubscriptionId(subId)) {
                     mResult.setReason(FeatureResult.FailedReason.SIM_NOT_ACTIVE);
                     return false;
                 }
diff --git a/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java b/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java
index 070e65a..95ac999 100644
--- a/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java
+++ b/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java
@@ -137,7 +137,7 @@
         TelephonyManager tm = getSystemService(TelephonyManager.class);
         SubscriptionManager sm = getSystemService(SubscriptionManager.class);
 
-        boolean[] callWaitingStatus = getAllSlotCallWaitingStatus(this, sm, tm);
+        boolean[] callWaitingStatus = getAllSlotCallWaitingStatus(this, tm);
         CallForwardingInfo[] callForwardingInfo = getAllSlotCallForwardingStatus(this, sm, tm);
 
         // Disable feature
diff --git a/src/com/android/settings/sim/smartForwarding/SmartForwardingUtils.java b/src/com/android/settings/sim/smartForwarding/SmartForwardingUtils.java
index 5a82d8b..3674b2f 100644
--- a/src/com/android/settings/sim/smartForwarding/SmartForwardingUtils.java
+++ b/src/com/android/settings/sim/smartForwarding/SmartForwardingUtils.java
@@ -80,13 +80,12 @@
         preferences.clear().commit();
     }
 
-    public static boolean[] getAllSlotCallWaitingStatus(Context context, SubscriptionManager sm,
-            TelephonyManager tm) {
+    public static boolean[] getAllSlotCallWaitingStatus(Context context, TelephonyManager tm) {
         int phoneCount = tm.getActiveModemCount();
         boolean[] allStatus = new boolean[phoneCount];
 
         for (int i = 0; i < phoneCount; i++) {
-            int subId = sm.getSubscriptionIds(i)[0];
+            int subId = SubscriptionManager.getSubscriptionId(i);
             boolean callWaitingStatus = getBackupCallWaitingStatus(context, subId);
             allStatus[i] = callWaitingStatus;
         }
@@ -99,7 +98,7 @@
         CallForwardingInfo[] allStatus = new CallForwardingInfo[phoneCount];
 
         for (int i = 0; i < phoneCount; i++) {
-            int subId = sm.getSubscriptionIds(i)[0];
+            int subId = SubscriptionManager.getSubscriptionId(i);
             CallForwardingInfo callWaitingStatus = getBackupCallForwardingStatus(context, subId);
             allStatus[i] = callWaitingStatus;
         }
@@ -110,7 +109,7 @@
             TelephonyManager tm) {
         int phoneCount = tm.getActiveModemCount();
         for (int i = 0; i < phoneCount; i++) {
-            int subId = sm.getSubscriptionIds(i)[0];
+            int subId = SubscriptionManager.getSubscriptionId(i);
             clearBackupData(context, subId);
         }
     }
@@ -134,12 +133,8 @@
     public static String getPhoneNumber(Context context, int slotId) {
         SubscriptionManager subscriptionManager = context.getSystemService(
                 SubscriptionManager.class);
-        int[] subIdList = subscriptionManager.getSubscriptionIds(slotId);
-        if (subIdList != null) {
-            SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(subIdList[0]);
-            return (subInfo != null) ? subInfo.getNumber() : "";
-        } else {
-            return "";
-        }
+        SubscriptionInfo subInfo = subscriptionManager.getActiveSubscriptionInfo(
+                SubscriptionManager.getSubscriptionId(slotId));
+        return (subInfo != null) ? subInfo.getNumber() : "";
     }
 }
\ No newline at end of file
