Refresh subscription info when subid changes

We store the initial subId and check if it has changed so that we always
have the updated subscription info in fillList().

Fixes: 111731641
Test: manually verify that swapping the SIM loads new APNs
Change-Id: I3475915f2c380fb67b2e56436423d491e489d91e
Merged-In: I29492ef016c8ca9836ecf28c787e441629cfecb0
diff --git a/src/com/android/settings/network/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java
index bbbcdbc..09d4f50 100755
--- a/src/com/android/settings/network/ApnSettings.java
+++ b/src/com/android/settings/network/ApnSettings.java
@@ -103,6 +103,7 @@
     private RestoreApnProcessHandler mRestoreApnProcessHandler;
     private HandlerThread mRestoreDefaultApnThread;
     private SubscriptionInfo mSubscriptionInfo;
+    private int mSubId;
     private UiccController mUiccController;
     private String mMvnoType;
     private String mMvnoMatchData;
@@ -135,6 +136,18 @@
                     }
                     break;
                 }
+            } else if(intent.getAction().equals(
+                    TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED)) {
+                if (!mRestoreDefaultApnMode) {
+                    int extraSubId = intent.getIntExtra(TelephonyManager.EXTRA_SUBSCRIPTION_ID,
+                            SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+                    if (extraSubId != mSubId) {
+                        // subscription has changed
+                        mSubId = extraSubId;
+                        mSubscriptionInfo = getSubscriptionInfo(mSubId);
+                    }
+                    fillList();
+                }
             }
         }
     };
@@ -157,7 +170,7 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         final Activity activity = getActivity();
-        final int subId = activity.getIntent().getIntExtra(SUB_ID,
+        mSubId = activity.getIntent().getIntExtra(SUB_ID,
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
         mMobileStateFilter = new IntentFilter(
@@ -165,7 +178,7 @@
 
         setIfOnlyAvailableForAdmins(true);
 
-        mSubscriptionInfo = SubscriptionManager.from(activity).getActiveSubscriptionInfo(subId);
+        mSubscriptionInfo = getSubscriptionInfo(mSubId);
         mUiccController = UiccController.getInstance();
 
         CarrierConfigManager configManager = (CarrierConfigManager)
@@ -246,6 +259,10 @@
         return null;
     }
 
+    private SubscriptionInfo getSubscriptionInfo(int subId) {
+        return SubscriptionManager.from(getActivity()).getActiveSubscriptionInfo(subId);
+    }
+
     private void fillList() {
         final TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
         final int subId = mSubscriptionInfo != null ? mSubscriptionInfo.getSubscriptionId()