Merge "Add PhoneStateListener#onPreferredDataSubIdChanged"
diff --git a/src/java/com/android/internal/telephony/SubscriptionController.java b/src/java/com/android/internal/telephony/SubscriptionController.java
index 8c08420..5414e34 100644
--- a/src/java/com/android/internal/telephony/SubscriptionController.java
+++ b/src/java/com/android/internal/telephony/SubscriptionController.java
@@ -2304,7 +2304,7 @@
             if (mPreferredDataSubId != subId) {
                 mPreferredDataSubId = subId;
                 PhoneSwitcher.getInstance().setPreferredData(subId);
-                //TODO: notifyPreferredDataSubIdChanged();
+                notifyPreferredDataSubIdChanged();
             }
 
             return 0;
@@ -2313,6 +2313,17 @@
         }
     }
 
+    private void notifyPreferredDataSubIdChanged() {
+        ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
+                "telephony.registry"));
+        try {
+            if (DBG) logd("notifyPreferredDataSubIdChanged:");
+            tr.notifyPreferredDataSubIdChanged(mPreferredDataSubId);
+        } catch (RemoteException ex) {
+            // Should never happen because its always available.
+        }
+    }
+
     @Override
     public List<SubscriptionInfo> getOpportunisticSubscriptions(int slotId, String callingPackage) {
         return getSubscriptionInfoListFromCacheHelper(
diff --git a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
index 42a8ad1..0809224 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyRegistryTest.java
@@ -16,6 +16,7 @@
 package com.android.internal.telephony;
 
 import static android.telephony.PhoneStateListener.LISTEN_PHONE_CAPABILITY_CHANGE;
+import static android.telephony.PhoneStateListener.LISTEN_PREFERRED_DATA_SUBID_CHANGE;
 
 import static org.junit.Assert.assertEquals;
 
@@ -38,6 +39,7 @@
     private PhoneStateListener mPhoneStateListener;
     private TelephonyRegistry mTelephonyRegistry;
     private PhoneCapability mPhoneCapability;
+    private int mPreferredSubId;
 
     public class PhoneStateListenerWrapper extends PhoneStateListener {
         @Override
@@ -45,6 +47,11 @@
             mPhoneCapability = capability;
             setReady(true);
         }
+        @Override
+        public void onPreferredDataSubIdChanged(int preferredSubId) {
+            mPreferredSubId = preferredSubId;
+            setReady(true);
+        }
     }
 
     private void addTelephonyRegistryService() {
@@ -97,4 +104,25 @@
         waitUntilReady();
         assertEquals(phoneCapability, mPhoneCapability);
     }
+
+
+    @Test @SmallTest
+    public void testPreferredDataSubChanged() {
+        // mTelephonyRegistry.listen with notifyNow = true should trigger callback immediately.
+        setReady(false);
+        int preferredSubId = 0;
+        mTelephonyRegistry.notifyPreferredDataSubIdChanged(preferredSubId);
+        mTelephonyRegistry.listen(mContext.getOpPackageName(),
+                mPhoneStateListener.callback,
+                LISTEN_PREFERRED_DATA_SUBID_CHANGE, true);
+        waitUntilReady();
+        assertEquals(preferredSubId, mPreferredSubId);
+
+        // notifyPhoneCapabilityChanged with a new capability. Callback should be triggered.
+        setReady(false);
+        mPreferredSubId = 1;
+        mTelephonyRegistry.notifyPreferredDataSubIdChanged(preferredSubId);
+        waitUntilReady();
+        assertEquals(preferredSubId, mPreferredSubId);
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java b/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
index 58527d3..8a65fe9 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/mocks/TelephonyRegistryMock.java
@@ -417,4 +417,9 @@
     public void notifyRadioPowerStateChanged(int state) {
         throw new RuntimeException("Not implemented");
     }
+
+    @Override
+    public void notifyPreferredDataSubIdChanged(int subId) {
+        throw new RuntimeException("Not implemented");
+    }
 }