Revert "Additional changes to SubscriptionManager API as per API council."

This reverts commit 1285f74fcb6a8bf080c224e5a36db00ab1167d4c.

Change-Id: I366556368a9c429d8c356bcdb8e29af9c6c4c71e
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index cb9c54b..a625b47 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -195,7 +195,6 @@
     private INetworkStatsService mStatsService;
     private NetworkPolicyManager mPolicyManager;
     private TelephonyManager mTelephonyManager;
-    private SubscriptionManager mSubscriptionManager;
 
     private INetworkStatsSession mStatsSession;
 
@@ -287,14 +286,13 @@
                 ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
         mPolicyManager = NetworkPolicyManager.from(context);
         mTelephonyManager = TelephonyManager.from(context);
-        mSubscriptionManager = SubscriptionManager.from(context);
 
         mPrefs = getActivity().getSharedPreferences(PREF_FILE, Context.MODE_PRIVATE);
 
         mPolicyEditor = new NetworkPolicyEditor(mPolicyManager);
         mPolicyEditor.read();
 
-        mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
+        mSubInfoList = SimSettings.getSortedSubInfoList(getActivity());
         mMobileTagMap = initMobileTabTag(mSubInfoList);
 
         try {
@@ -944,7 +942,7 @@
         } else {
             //SUB SELECT
             isEnable = mTelephonyManager.getDataEnabled()
-                && (subId == mSubscriptionManager.getDefaultDataSubId());
+                && (subId == SubscriptionManager.getDefaultDataSubId());
         }
         return isEnable;
     }
@@ -1133,8 +1131,8 @@
 
     private void handleMultiSimDataDialog() {
         final SubscriptionInfo currentSir = getCurrentTabSubInfo(getActivity());
-        final SubscriptionInfo nextSir = mSubscriptionManager.getActiveSubscriptionInfo(
-                mSubscriptionManager.getDefaultDataSubId());
+        final SubscriptionInfo nextSir = SubscriptionManager.getSubscriptionInfoForSubscriber(
+                SubscriptionManager.getDefaultDataSubId());
 
         if (currentSir.getSubscriptionId() == nextSir.getSubscriptionId()) {
             setMobileDataEnabled(true);
@@ -1151,7 +1149,7 @@
         builder.setPositiveButton(R.string.okay, new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int id) {
-                mSubscriptionManager.setDefaultDataSubId(currentSir.getSubscriptionId());
+                SubscriptionManager.setDefaultDataSubId(currentSir.getSubscriptionId());
                 setMobileDataEnabled(true);
                 updateBody();
             }
@@ -2248,7 +2246,7 @@
         final NetworkTemplate template = intent.getParcelableExtra(EXTRA_NETWORK_TEMPLATE);
         if (template == null) {
             final int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY,
-                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+                    SubscriptionManager.INVALID_SUB_ID);
             if (SubscriptionManager.isValidSubId(subId)) {
                 return TAB_MOBILE + String.valueOf(subId);
             }
@@ -2341,8 +2339,7 @@
         final ConnectivityManager conn = ConnectivityManager.from(context);
         final TelephonyManager tele = TelephonyManager.from(context);
 
-        final List<SubscriptionInfo> subInfoList =
-                SubscriptionManager.from(context).getActiveSubscriptionInfoList();
+        final List<SubscriptionInfo> subInfoList = SubscriptionManager.getActiveSubscriptionInfoList();
         // No activated Subscription
         if (subInfoList == null) {
             return false;
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index cfe27bb..d8744cc 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -215,7 +215,7 @@
             mTabHost.clearAllTabs();
 
             for (int i = 0; i < numSims; ++i) {
-                final SubscriptionInfo subInfo = Utils.findRecordBySlotId(this, i);
+                final SubscriptionInfo subInfo = Utils.findRecordBySlotId(i);
                 mTabHost.addTab(buildTabSpec(String.valueOf(i),
                         String.valueOf(subInfo == null
                             ? context.getString(R.string.sim_editor_title, i + 1)
@@ -469,7 +469,7 @@
         @Override
         public void onTabChanged(String tabId) {
             final int slotId = Integer.parseInt(tabId);
-            final SubscriptionInfo sir = Utils.findRecordBySlotId(getBaseContext(), slotId);
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(slotId);
 
             mPhone = (sir == null) ? null
                 : PhoneFactory.getPhone(SubscriptionManager.getPhoneId(sir.getSubscriptionId()));
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 9b7b0cf..ab39689 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -111,7 +111,6 @@
     private static final boolean ONLY_ONE_TRUST_AGENT = true;
 
     private DevicePolicyManager mDPM;
-    private SubscriptionManager mSubscriptionManager;
 
     private ChooseLockSettingsHelper mChooseLockSettingsHelper;
     private LockPatternUtils mLockPatternUtils;
@@ -371,10 +370,9 @@
     /* Return true if a SIM is ready for locking.
      * TODO: consider adding to TelephonyManager or SubscritpionManasger.
      */
-    private boolean isSimReady() {
+    private static boolean isSimReady() {
         int simState = TelephonyManager.SIM_STATE_UNKNOWN;
-        final List<SubscriptionInfo> subInfoList =
-                mSubscriptionManager.getActiveSubscriptionInfoList();
+        final List<SubscriptionInfo> subInfoList = SubscriptionManager.getActiveSubscriptionInfoList();
         if (subInfoList != null) {
             for (SubscriptionInfo subInfo : subInfoList) {
                 simState = TelephonyManager.getDefault().getSimState(subInfo.getSimSlotIndex());
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index f7aa566..e687beb 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -988,17 +988,15 @@
      * finds a record with subId.
      * Since the number of SIMs are few, an array is fine.
      */
-    public static SubscriptionInfo findRecordBySubId(Context context, final int subId) {
+    public static SubscriptionInfo findRecordBySubId(final int subId) {
         final List<SubscriptionInfo> subInfoList =
-                SubscriptionManager.from(context).getActiveSubscriptionInfoList();
-        if (subInfoList != null) {
-            final int subInfoLength = subInfoList.size();
+                SubscriptionManager.getActiveSubscriptionInfoList();
+        final int subInfoLength = subInfoList.size();
 
-            for (int i = 0; i < subInfoLength; ++i) {
-                final SubscriptionInfo sir = subInfoList.get(i);
-                if (sir != null && sir.getSubscriptionId() == subId) {
-                    return sir;
-                }
+        for (int i = 0; i < subInfoLength; ++i) {
+            final SubscriptionInfo sir = subInfoList.get(i);
+            if (sir != null && sir.getSubscriptionId() == subId) {
+                return sir;
             }
         }
 
@@ -1009,18 +1007,16 @@
      * finds a record with slotId.
      * Since the number of SIMs are few, an array is fine.
      */
-    public static SubscriptionInfo findRecordBySlotId(Context context, final int slotId) {
+    public static SubscriptionInfo findRecordBySlotId(final int slotId) {
         final List<SubscriptionInfo> subInfoList =
-                SubscriptionManager.from(context).getActiveSubscriptionInfoList();
-        if (subInfoList != null) {
-            final int subInfoLength = subInfoList.size();
+                SubscriptionManager.getActiveSubscriptionInfoList();
+        final int subInfoLength = subInfoList.size();
 
-            for (int i = 0; i < subInfoLength; ++i) {
-                final SubscriptionInfo sir = subInfoList.get(i);
-                if (sir.getSimSlotIndex() == slotId) {
-                    //Right now we take the first subscription on a SIM.
-                    return sir;
-                }
+        for (int i = 0; i < subInfoLength; ++i) {
+            final SubscriptionInfo sir = subInfoList.get(i);
+            if (sir.getSimSlotIndex() == slotId) {
+                //Right now we take the first subscription on a SIM.
+                return sir;
             }
         }
 
diff --git a/src/com/android/settings/deviceinfo/ImeiInformation.java b/src/com/android/settings/deviceinfo/ImeiInformation.java
index 72d3158..921ef8e 100644
--- a/src/com/android/settings/deviceinfo/ImeiInformation.java
+++ b/src/com/android/settings/deviceinfo/ImeiInformation.java
@@ -42,12 +42,9 @@
     private static final String KEY_IMEI = "imei";
     private static final String KEY_IMEI_SV = "imei_sv";
 
-    private SubscriptionManager mSubscriptionManager;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mSubscriptionManager = SubscriptionManager.from(this);
         final TelephonyManager telephonyManager =
             (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
         initPreferenceScreen(telephonyManager.getSimCount());
@@ -103,17 +100,17 @@
         }
     }
 
-    private Phone getPhoneFromSlotId(int slotIdx) {
-        final SubscriptionInfo subInfo =
-                mSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(slotIdx);
+    private Phone getPhoneFromSlotId(int slotId) {
+        final List<SubscriptionInfo> subInfos = SubscriptionManager.getSubscriptionInfoUsingSlotId(slotId);
 
-        if (subInfo == null) {
+        if (subInfos == null || subInfos.size() < 1) {
             return null;
         }
 
         final Phone[] phones = PhoneFactory.getPhones();
         for (int i = 0; i < phones.length; i++) {
-            if (phones[i].getSubId() == subInfo.getSubscriptionId()) {
+            // Currently we only operate with the first subscription of a SIM.
+            if (phones[i].getSubId() == subInfos.get(0).getSubscriptionId()) {
                 return phones[i];
             }
         }
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index 11daf0c..46addf3 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -11,7 +11,7 @@
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
- * limitations under the License.
+* limitations under the License.
  */
 
 package com.android.settings.deviceinfo;
@@ -143,7 +143,7 @@
         mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH);
 
         for (int i = 0; i < mTelephonyManager.getSimCount(); i++) {
-            final SubscriptionInfo sir = Utils.findRecordBySlotId(this, i);
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(i);
             if (sir != null) {
                 mSelectableSubInfos.add(sir);
             }
@@ -355,7 +355,7 @@
         final Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId(
                         mSir.getSubscriptionId()));
         if (UserHandle.myUserId() == UserHandle.USER_OWNER
-                && mSir.getSubscriptionId() != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+                && mSir.getSubscriptionId() != SubscriptionManager.INVALID_SUB_ID) {
             if (phone == null) {
                 Log.e(TAG, "Unable to locate a phone object for the given Subscription ID.");
                 return;
diff --git a/src/com/android/settings/sim/SimBootReceiver.java b/src/com/android/settings/sim/SimBootReceiver.java
index f8d7106..2d9d15e 100644
--- a/src/com/android/settings/sim/SimBootReceiver.java
+++ b/src/com/android/settings/sim/SimBootReceiver.java
@@ -19,6 +19,8 @@
 import com.android.settings.R;
 import com.android.settings.Settings.SimSettingsActivity;
 
+import java.util.List;
+
 import android.app.NotificationManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -29,9 +31,10 @@
 import android.content.res.Resources;
 import android.support.v4.app.NotificationCompat;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionListener;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
+import android.util.Log;
 
 import com.android.settings.Utils;
 
@@ -44,17 +47,16 @@
     private SharedPreferences mSharedPreferences = null;
     private TelephonyManager mTelephonyManager;
     private Context mContext;
-    private SubscriptionManager mSubscriptionManager;
 
     @Override
     public void onReceive(Context context, Intent intent) {
         mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
         mContext = context;
-        mSubscriptionManager = SubscriptionManager.from(mContext);
         mSharedPreferences = mContext.getSharedPreferences(SHARED_PREFERENCES_NAME,
                 Context.MODE_PRIVATE);
 
-        mSubscriptionManager.registerOnSubscriptionsChangedListener(mSubscriptionListener);
+        SubscriptionManager.register(mContext, mSubscriptionListener,
+                SubscriptionListener.LISTEN_SUBSCRIPTION_INFO_LIST_CHANGED);
     }
 
     private void detectChangeAndNotify() {
@@ -69,12 +71,12 @@
         // by checking if the list is empty.
         // This is not completely correct, but works for most cases.
         // See Bug: 18377252
-        if (mSubscriptionManager.getActiveSubscriptionInfoList().size() < 1) {
+        if (SubscriptionManager.getActiveSubscriptionInfoList().size() < 1) {
             return;
         }
 
         for (int i = 0; i < numSlots; i++) {
-            final SubscriptionInfo sir = Utils.findRecordBySlotId(mContext, i);
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(i);
             final String key = SLOT_PREFIX+i;
             final int lastSubId = getLastSubId(key);
 
@@ -131,10 +133,9 @@
         notificationManager.cancel(NOTIFICATION_ID);
     }
 
-    private final OnSubscriptionsChangedListener mSubscriptionListener =
-            new OnSubscriptionsChangedListener() {
+    private final SubscriptionListener mSubscriptionListener = new SubscriptionListener() {
         @Override
-        public void onSubscriptionsChanged() {
+        public void onSubscriptionInfoChanged() {
             detectChangeAndNotify();
         }
     };
diff --git a/src/com/android/settings/sim/SimSettings.java b/src/com/android/settings/sim/SimSettings.java
index e0d26b0..e2f56cb 100644
--- a/src/com/android/settings/sim/SimSettings.java
+++ b/src/com/android/settings/sim/SimSettings.java
@@ -69,7 +69,6 @@
 
 public class SimSettings extends RestrictedSettingsFragment implements Indexable {
     private static final String TAG = "SimSettings";
-    private static final boolean DBG = false;
 
     private static final String DISALLOW_CONFIG_SIM = "no_config_sim";
     private static final String SIM_CARD_CATEGORY = "sim_cards";
@@ -119,9 +118,6 @@
 
     private PreferenceCategory mSimCards = null;
 
-    private SubscriptionManager mSubscriptionManager;
-    private Utils mUtils;
-
     public SimSettings() {
         super(DISALLOW_CONFIG_SIM);
     }
@@ -130,13 +126,9 @@
     public void onCreate(final Bundle bundle) {
         super.onCreate(bundle);
 
-        mSubscriptionManager = SubscriptionManager.from(getActivity());
-
         if (mSubInfoList == null) {
-            mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
-            // FIXME: b/18385348, SimSettings.java needs to handle null from getActiveSubscription
+            mSubInfoList = SubscriptionManager.getActiveSubscriptionInfoList();
         }
-        if (DBG) log("[onCreate] mSubInfoList=" + mSubInfoList);
 
         createPreferences();
         updateAllOptions();
@@ -156,7 +148,7 @@
         mAvailableSubInfos = new ArrayList<SubscriptionInfo>(numSlots);
         mSelectableSubInfos = new ArrayList<SubscriptionInfo>();
         for (int i = 0; i < numSlots; ++i) {
-            final SubscriptionInfo sir = Utils.findRecordBySlotId(getActivity(), i);
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(i);
             mSimCards.addPreference(new SimPreference(getActivity(), sir, i));
             mAvailableSubInfos.add(sir);
             if (sir != null) {
@@ -174,7 +166,7 @@
 
         mAvailableSubInfos = new ArrayList<SubscriptionInfo>(numSlots);
         for (int i = 0; i < numSlots; ++i) {
-            final SubscriptionInfo sir = Utils.findRecordBySlotId(getActivity(), i);
+            final SubscriptionInfo sir = Utils.findRecordBySlotId(i);
             mAvailableSubInfos.add(sir);
             if (sir != null) {
             }
@@ -187,7 +179,7 @@
     }
 
     private void updateSimSlotValues() {
-        mSubscriptionManager.getAllSubscriptionInfoList();
+        SubscriptionManager.getAllSubscriptionInfoList();
 
         final int prefSize = mSimCards.getPreferenceCount();
         for (int i = 0; i < prefSize; ++i) {
@@ -206,11 +198,9 @@
 
     private void updateSmsValues() {
         final Preference simPref = findPreference(KEY_SMS);
-        final SubscriptionInfo sir = Utils.findRecordBySubId(getActivity(),
-                mSubscriptionManager.getDefaultSmsSubId());
+        final SubscriptionInfo sir = Utils.findRecordBySubId(SubscriptionManager.getDefaultSmsSubId());
         simPref.setTitle(R.string.sms_messages_title);
-        if (DBG) log("[updateSmsValues] mSubInfoList=" + mSubInfoList);
-        if (mSubInfoList != null && mSubInfoList.size() == 1) {
+        if (mSubInfoList.size() == 1) {
             simPref.setSummary(mSubInfoList.get(0).getDisplayName());
         } else if (sir != null) {
             simPref.setSummary(sir.getDisplayName());
@@ -222,12 +212,9 @@
 
     private void updateCellularDataValues() {
         final Preference simPref = findPreference(KEY_CELLULAR_DATA);
-        final SubscriptionInfo sir = Utils.findRecordBySubId(getActivity(),
-                mSubscriptionManager.getDefaultDataSubId());
+        final SubscriptionInfo sir = Utils.findRecordBySubId(SubscriptionManager.getDefaultDataSubId());
         simPref.setTitle(R.string.cellular_data_title);
-        if (DBG) log("[updateCellularDataValues] mSubInfoList=" + mSubInfoList);
-
-        if (mSubInfoList != null && mSubInfoList.size() == 1) {
+        if (mSubInfoList.size() == 1) {
             simPref.setSummary(mSubInfoList.get(0).getDisplayName());
         } else if (sir != null) {
             simPref.setSummary(sir.getDisplayName());
@@ -253,9 +240,7 @@
     public void onResume() {
         super.onResume();
 
-        mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
-        if (DBG) log("[onResme] mSubInfoList=" + mSubInfoList);
-
+        mSubInfoList = SubscriptionManager.getActiveSubscriptionInfoList();
         updateAvailableSubInfos();
         updateAllOptions();
     }
@@ -290,7 +275,7 @@
 
                         if (id == DATA_PICK) {
                             sir = mSelectableSubInfos.get(value);
-                            mSubscriptionManager.setDefaultDataSubId(sir.getSubscriptionId());
+                            SubscriptionManager.setDefaultDataSubId(sir.getSubscriptionId());
                         } else if (id == CALLS_PICK) {
                             final TelecomManager telecomManager =
                                     TelecomManager.from(getActivity());
@@ -300,7 +285,7 @@
                                     value < 1 ? null : phoneAccountsList.get(value - 1));
                         } else if (id == SMS_PICK) {
                             sir = mSelectableSubInfos.get(value);
-                            mSubscriptionManager.setDefaultSmsSubId(sir.getSubscriptionId());
+                            SubscriptionManager.setDefaultSmsSubId(sir.getSubscriptionId());
                         }
 
                         updateActivitesCategory();
@@ -514,16 +499,16 @@
                     String displayName = nameText.getText().toString();
                     int subId = mSubInfoRecord.getSubscriptionId();
                     mSubInfoRecord.setDisplayName(displayName);
-                    mSubscriptionManager.setDisplayName(displayName, subId,
+                    SubscriptionManager.setDisplayName(displayName, subId,
                             SubscriptionManager.NAME_SOURCE_USER_INPUT);
-                    Utils.findRecordBySubId(getActivity(), subId).setDisplayName(displayName);
+                    Utils.findRecordBySubId(subId).setDisplayName(displayName);
 
                     final int tintSelected = tintSpinner.getSelectedItemPosition();
                     int subscriptionId = mSubInfoRecord.getSubscriptionId();
                     int tint = mTintArr[tintSelected];
                     mSubInfoRecord.setIconTint(tint);
-                    mSubscriptionManager.setIconTint(tint, subscriptionId);
-                    Utils.findRecordBySubId(getActivity(), subscriptionId).setIconTint(tint);
+                    SubscriptionManager.setIconTint(tint, subscriptionId);
+                    Utils.findRecordBySubId(subscriptionId).setIconTint(tint);
 
                     updateAllOptions();
                     update();
@@ -611,8 +596,27 @@
 
     }
 
-    private void log(String s) {
-        Log.d(TAG, s);
+    /**
+     * Sort Subscription List in SIM Id, Subscription Id
+     * @param context The Context
+     * @return Sorted Subscription List or NULL if no activated Subscription
+     */
+    public static List<SubscriptionInfo> getSortedSubInfoList(Context context) {
+        List<SubscriptionInfo> infoList = SubscriptionManager.getActiveSubscriptionInfoList();
+        if (infoList != null) {
+            Collections.sort(infoList, new Comparator<SubscriptionInfo>() {
+
+                @Override
+                public int compare(SubscriptionInfo arg0, SubscriptionInfo arg1) {
+                    int flag = arg0.getSimSlotIndex() - arg1.getSimSlotIndex();
+                    if (flag == 0) {
+                        return arg0.getSubscriptionId() - arg1.getSubscriptionId();
+                    }
+                    return flag;
+                }
+            });
+        }
+        return infoList;
     }
 
     /**