parent carrier id

The parent-child relationship can be used to further differentiate a
single carrier by different networks, by prepaid v.s. postpaid
or even by 4G v.s. 3G plan. parent carrier id it's an optional field.
A carrier id with a valid parent_carrier_id is considered fine-grained carrier id,
will not be returned as API getSimCarrierId but will be returned as
new API getSimPreciseCarrierId.

Bug: 110559381
Change-Id: Ib5b8e2a2e14412c2a3f178f80c24d67a86b0036f
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 6ce8784..5401ddc 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -2069,6 +2069,29 @@
         }
     }
 
+    @Override
+    public int getSubscriptionPreciseCarrierId(int subId) {
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            final Phone phone = getPhone(subId);
+            return phone == null ? TelephonyManager.UNKNOWN_CARRIER_ID
+                    : phone.getPreciseCarrierId();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public String getSubscriptionPreciseCarrierName(int subId) {
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            final Phone phone = getPhone(subId);
+            return phone == null ? null : phone.getPreciseCarrierName();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
     //
     // Internal helper methods.
     //