Merge "Add getNetworkSpecifier() and getCarrierConfig()"
diff --git a/api/current.txt b/api/current.txt
index 035f0e8..964712a3 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -37563,6 +37563,7 @@
     method public android.telephony.TelephonyManager createForSubscriptionId(int);
     method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
     method public int getCallState();
+    method public android.os.PersistableBundle getCarrierConfig();
     method public android.telephony.CellLocation getCellLocation();
     method public int getDataActivity();
     method public boolean getDataEnabled();
@@ -37580,6 +37581,7 @@
     method public java.lang.String getNetworkCountryIso();
     method public java.lang.String getNetworkOperator();
     method public java.lang.String getNetworkOperatorName();
+    method public java.lang.String getNetworkSpecifier();
     method public int getNetworkType();
     method public int getPhoneCount();
     method public int getPhoneType();
diff --git a/api/system-current.txt b/api/system-current.txt
index 776a186..49dc7c5 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -40752,6 +40752,7 @@
     method public boolean endCall();
     method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
     method public int getCallState();
+    method public android.os.PersistableBundle getCarrierConfig();
     method public java.util.List<java.lang.String> getCarrierPackageNamesForIntent(android.content.Intent);
     method public java.util.List<java.lang.String> getCarrierPackageNamesForIntentAndPhone(android.content.Intent, int);
     method public java.lang.String getCdmaMdn();
@@ -40780,6 +40781,7 @@
     method public java.lang.String getNetworkCountryIso();
     method public java.lang.String getNetworkOperator();
     method public java.lang.String getNetworkOperatorName();
+    method public java.lang.String getNetworkSpecifier();
     method public int getNetworkType();
     method public int getPhoneCount();
     method public int getPhoneType();
diff --git a/api/test-current.txt b/api/test-current.txt
index 617f50e..2b0ca00 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -37645,6 +37645,7 @@
     method public android.telephony.TelephonyManager createForSubscriptionId(int);
     method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
     method public int getCallState();
+    method public android.os.PersistableBundle getCarrierConfig();
     method public android.telephony.CellLocation getCellLocation();
     method public int getDataActivity();
     method public boolean getDataEnabled();
@@ -37662,6 +37663,7 @@
     method public java.lang.String getNetworkCountryIso();
     method public java.lang.String getNetworkOperator();
     method public java.lang.String getNetworkOperatorName();
+    method public java.lang.String getNetworkSpecifier();
     method public int getNetworkType();
     method public int getPhoneCount();
     method public int getPhoneType();
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 6a0aa84..5a15009 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -31,6 +31,7 @@
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.os.Bundle;
+import android.os.PersistableBundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
@@ -1416,6 +1417,34 @@
         return getTelephonyProperty(phoneId, TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, "");
      }
 
+
+    /**
+     * Returns the network specifier of the subscription ID pinned to the TelephonyManager.
+     *
+     * @see android.net.NetworkRequest.Builder#setNetworkSpecifier(String)
+     * @see #createForSubscriptionId(int)
+     * @see #createForPhoneAccountHandle(PhoneAccountHandle)
+     */
+    public String getNetworkSpecifier() {
+        return String.valueOf(mSubId);
+    }
+
+    /**
+     * Returns the carrier config of the subscription ID pinned to the TelephonyManager.
+     *
+     * <p>Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE
+     * READ_PHONE_STATE}
+     *
+     * @see CarrierConfigManager#getConfigForSubId(int)
+     * @see #createForSubscriptionId(int)
+     * @see #createForPhoneAccountHandle(PhoneAccountHandle)
+     */
+    public PersistableBundle getCarrierConfig() {
+        CarrierConfigManager carrierConfigManager = mContext
+                .getSystemService(CarrierConfigManager.class);
+        return carrierConfigManager.getConfigForSubId(mSubId);
+    }
+
     /**
      * Returns true if the device is considered roaming on the current
      * network, for GSM purposes.