[Telephony Mainline] To replace SubscriptionController api with SubscriptionManager

  SubscriptionController
   - getActiveSubIdList(Z)
      -> use @SystemApi getActiveAndHiddenSubscriptionInfoList instead
   - getDefaultSubId()
      -> use getDefaultSubscriptionId() instead
   - isActiveSubId(I)
      -> use isActiveSubscriptionId(int) instead
      -> add permission READ_PHONE_STATE

Bug: 145345704
Test: make & atest CarrierIdProviderTest
Change-Id: I8fcf96a1f4357ba565740e6422ac56ccea0338ca
diff --git a/src/com/android/providers/telephony/CarrierIdProvider.java b/src/com/android/providers/telephony/CarrierIdProvider.java
index dadacc5..122c304 100644
--- a/src/com/android/providers/telephony/CarrierIdProvider.java
+++ b/src/com/android/providers/telephony/CarrierIdProvider.java
@@ -34,12 +34,12 @@
 import android.os.FileUtils;
 import android.os.SystemProperties;
 import android.provider.Telephony.CarrierId;
+import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.SubscriptionController;
 import com.android.internal.telephony.util.TelephonyUtils;
 import com.android.providers.telephony.nano.CarrierIdProto;
 
@@ -605,13 +605,21 @@
 
         // Handle DEFAULT_SUBSCRIPTION_ID
         if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
-            subId = SubscriptionController.getInstance().getDefaultSubId();
+            subId = SubscriptionManager.getDefaultSubscriptionId();
         }
 
-        if (!SubscriptionController.getInstance().isActiveSubId(subId)) {
+        SubscriptionManager sm = (SubscriptionManager) getContext().getSystemService(
+            Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+        if (!sm.isActiveSubscriptionId(subId)) {
             // Remove absent subId from the currentSubscriptionMap.
-            final List activeSubscriptions = Arrays.asList(SubscriptionController.getInstance()
-                    .getActiveSubIdList(false));
+            List activeSubscriptions = new ArrayList<>();
+            final List<SubscriptionInfo> subscriptionInfoList =
+                sm.getActiveAndHiddenSubscriptionInfoList();
+            if (subscriptionInfoList != null) {
+                for (SubscriptionInfo subInfo : subscriptionInfoList) {
+                    activeSubscriptions.add(subInfo.getSubscriptionId());
+                }
+            }
             int count = 0;
             for (int subscription : mCurrentSubscriptionMap.keySet()) {
                 if (!activeSubscriptions.contains(subscription)) {
@@ -631,7 +639,7 @@
 
     private Cursor queryCarrierIdForCurrentSubscription(Uri uri, String[] projectionIn) {
         // Parse the subId, using the default subId if subId is not provided
-        int subId = SubscriptionController.getInstance().getDefaultSubId();
+        int subId = SubscriptionManager.getDefaultSubscriptionId();
         if (!TextUtils.isEmpty(uri.getLastPathSegment())) {
             try {
                 subId = Integer.parseInt(uri.getLastPathSegment());
@@ -643,7 +651,7 @@
 
         // Handle DEFAULT_SUBSCRIPTION_ID
         if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
-            subId = SubscriptionController.getInstance().getDefaultSubId();
+            subId = SubscriptionManager.getDefaultSubscriptionId();
         }
 
         if (!mCurrentSubscriptionMap.containsKey(subId)) {
diff --git a/src/com/android/providers/telephony/ServiceStateProvider.java b/src/com/android/providers/telephony/ServiceStateProvider.java
index f707200..2b4fae3 100644
--- a/src/com/android/providers/telephony/ServiceStateProvider.java
+++ b/src/com/android/providers/telephony/ServiceStateProvider.java
@@ -60,7 +60,6 @@
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.SubscriptionController;
 
 import java.util.HashMap;
 
@@ -111,7 +110,7 @@
 
     @VisibleForTesting
     public int getDefaultSubId() {
-        return SubscriptionController.getInstance().getDefaultSubId();
+        return SubscriptionManager.getDefaultSubscriptionId();
     }
 
     @Override
diff --git a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
index 13917ff..ee0e016 100644
--- a/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
+++ b/tests/src/com/android/providers/telephony/CarrierIdProviderTest.java
@@ -17,6 +17,7 @@
 package com.android.providers.telephony;
 
 import android.content.ContentValues;
+import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.pm.ProviderInfo;
@@ -26,23 +27,21 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.provider.Telephony.CarrierId;
+import android.telephony.SubscriptionManager;
 import android.test.mock.MockContentResolver;
 import android.test.mock.MockContext;
 import android.util.Log;
 
-import com.android.internal.telephony.SubscriptionController;
-
 import junit.framework.TestCase;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.lang.reflect.Field;
-
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 /**
  * Tests for testing CRUD operations of CarrierIdProvider.
@@ -77,7 +76,7 @@
     private CarrierIdProviderTestable mCarrierIdProviderTestable;
     private FakeContentObserver mContentObserver;
     private SharedPreferences mSharedPreferences = mock(SharedPreferences.class);
-    private SubscriptionController mSubController = mock(SubscriptionController.class);
+    private SubscriptionManager subscriptionManager = mock(SubscriptionManager.class);
 
     private class FakeContentResolver extends MockContentResolver {
         @Override
@@ -121,8 +120,13 @@
 
         @Override
         public Object getSystemService(String name) {
-            Log.d(TAG, "getSystemService: returning null");
-            return null;
+            switch (name) {
+                case Context.TELEPHONY_SUBSCRIPTION_SERVICE:
+                    return subscriptionManager;
+                default:
+                    Log.d(TAG, "getSystemService: returning null");
+                    return null;
+            }
         }
 
         @Override
@@ -148,12 +152,6 @@
         mContext = new MockContextWithProvider(mCarrierIdProviderTestable);
         mContentResolver = mContext.getContentResolver();
         mContentObserver = new FakeContentObserver(null);
-
-        doReturn("").when(mSubController).getDataEnabledOverrideRules(anyInt());
-
-        Field field = SubscriptionController.class.getDeclaredField("sInstance");
-        field.setAccessible(true);
-        field.set(null, mSubController);
     }
 
     @Override
@@ -341,8 +339,7 @@
             ContentValues cv = new ContentValues();
             cv.put(CarrierId.CARRIER_ID, dummy_cid);
             cv.put(CarrierId.CARRIER_NAME, dummy_name);
-            doReturn(1).when(mSubController).getDefaultSubId();
-            doReturn(true).when(mSubController).isActiveSubId(eq(1));
+            when(subscriptionManager.isActiveSubscriptionId(eq(1))).thenReturn(true);
             mContext.getContentResolver().update(Uri.withAppendedPath(CarrierId.CONTENT_URI,
                     "1"), cv, null, null);
         } catch (Exception e) {
@@ -351,7 +348,6 @@
         }
         int carrierId = -1;
         String carrierName = null;
-
         // query carrier id for subId 1
         try {
             final Cursor c = mContext.getContentResolver().query(
@@ -416,9 +412,6 @@
             ContentValues cv = new ContentValues();
             cv.put(CarrierId.CARRIER_ID, dummy_cid);
             cv.put(CarrierId.CARRIER_NAME, dummy_name);
-            doReturn(1).when(mSubController).getDefaultSubId();
-            doReturn(true).when(mSubController).isActiveSubId(eq(1));
-
             mContext.getContentResolver().update(CarrierId.CONTENT_URI, cv, null, null);
             Assert.fail("should throw an exception for wrong uri");
         } catch (IllegalArgumentException ex) {