Merge "Add createForPhoneAccountHandle() and getServicetate() Respect TelephonyManager's subId when listening to phone state"

This commit is contained in:
Ta-wei Yen
2016-11-10 21:46:34 +00:00
committed by Gerrit Code Review
5 changed files with 56 additions and 5 deletions

View File

@@ -37211,6 +37211,7 @@ package android.telephony {
public class TelephonyManager {
method public boolean canChangeDtmfToneLength();
method public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
method public android.telephony.TelephonyManager createForSubscriptionId(int);
method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
method public int getCallState();
@@ -37233,6 +37234,7 @@ package android.telephony {
method public int getNetworkType();
method public int getPhoneCount();
method public int getPhoneType();
method public android.telephony.ServiceState getServiceState();
method public java.lang.String getSimCountryIso();
method public java.lang.String getSimOperator();
method public java.lang.String getSimOperatorName();

View File

@@ -40150,6 +40150,7 @@ package android.telephony {
method public boolean canChangeDtmfToneLength();
method public int checkCarrierPrivilegesForPackage(java.lang.String);
method public int checkCarrierPrivilegesForPackageAnyPhone(java.lang.String);
method public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
method public android.telephony.TelephonyManager createForSubscriptionId(int);
method public void dial(java.lang.String);
method public boolean disableDataConnectivity();
@@ -40187,6 +40188,7 @@ package android.telephony {
method public int getNetworkType();
method public int getPhoneCount();
method public int getPhoneType();
method public android.telephony.ServiceState getServiceState();
method public java.lang.String getSimCountryIso();
method public java.lang.String getSimOperator();
method public java.lang.String getSimOperatorName();

View File

@@ -37288,6 +37288,7 @@ package android.telephony {
public class TelephonyManager {
method public boolean canChangeDtmfToneLength();
method public android.telephony.TelephonyManager createForPhoneAccountHandle(android.telecom.PhoneAccountHandle);
method public android.telephony.TelephonyManager createForSubscriptionId(int);
method public java.util.List<android.telephony.CellInfo> getAllCellInfo();
method public int getCallState();
@@ -37310,6 +37311,7 @@ package android.telephony {
method public int getNetworkType();
method public int getPhoneCount();
method public int getPhoneType();
method public android.telephony.ServiceState getServiceState();
method public java.lang.String getSimCountryIso();
method public java.lang.String getSimOperator();
method public java.lang.String getSimOperatorName();

View File

@@ -233,7 +233,7 @@ public class PhoneStateListener {
* @hide
*/
/** @hide */
protected int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
protected Integer mSubId;
private final Handler mHandler;
@@ -242,7 +242,7 @@ public class PhoneStateListener {
* This class requires Looper.myLooper() not return null.
*/
public PhoneStateListener() {
this(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, Looper.myLooper());
this(null, Looper.myLooper());
}
/**
@@ -251,7 +251,7 @@ public class PhoneStateListener {
* @hide
*/
public PhoneStateListener(Looper looper) {
this(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, looper);
this(null, looper);
}
/**
@@ -260,7 +260,7 @@ public class PhoneStateListener {
* own non-null Looper use PhoneStateListener(int subId, Looper looper) below.
* @hide
*/
public PhoneStateListener(int subId) {
public PhoneStateListener(Integer subId) {
this(subId, Looper.myLooper());
}
@@ -269,7 +269,7 @@ public class PhoneStateListener {
* and non-null Looper.
* @hide
*/
public PhoneStateListener(int subId, Looper looper) {
public PhoneStateListener(Integer subId, Looper looper) {
if (DBG) log("ctor: subId=" + subId + " looper=" + looper);
mSubId = subId;
mHandler = new Handler(looper) {

View File

@@ -255,6 +255,22 @@ public class TelephonyManager {
return new TelephonyManager(mContext, subId);
}
/**
* Create a new TelephonyManager object pinned to the subscription ID associated with the given
* phone account.
*
* @return a TelephonyManager that uses the given phone account for all calls, or {@code null}
* if the phone account does not correspond to a valid subscription ID.
*/
@Nullable
public TelephonyManager createForPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) {
int subId = getSubIdForPhoneAccountHandle(phoneAccountHandle);
if (!SubscriptionManager.isValidSubscriptionId(subId)) {
return null;
}
return new TelephonyManager(mContext, subId);
}
/** {@hide} */
public boolean isMultiSimEnabled() {
return (multiSimConfig.equals("dsds") || multiSimConfig.equals("dsda") ||
@@ -2783,6 +2799,12 @@ public class TelephonyManager {
if (mContext == null) return;
try {
Boolean notifyNow = (getITelephony() != null);
// If the listener has not explicitly set the subId (for example, created with the
// default constructor), replace the subId so it will listen to the account the
// telephony manager is created with.
if (listener.mSubId == null) {
listener.mSubId = mSubId;
}
sRegistry.listenForSubscriber(listener.mSubId, getOpPackageName(),
listener.callback, events, notifyNow);
} catch (RemoteException ex) {
@@ -5146,6 +5168,19 @@ public class TelephonyManager {
return retval;
}
private int getSubIdForPhoneAccountHandle(PhoneAccountHandle phoneAccountHandle) {
int retval = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
try {
ITelecomService service = getTelecomService();
if (service != null) {
retval = getSubIdForPhoneAccount(service.getPhoneAccount(phoneAccountHandle));
}
} catch (RemoteException e) {
}
return retval;
}
/**
* Resets telephony manager settings back to factory defaults.
*
@@ -5194,6 +5229,16 @@ public class TelephonyManager {
result.send(0, null);
}
/**
* Returns the current {@link ServiceState} information.
*
* <p>Requires Permission:
* {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
public ServiceState getServiceState() {
return getServiceStateForSubscriber(getSubId());
}
/**
* Returns the service state information on specified subscription. Callers require
* either READ_PRIVILEGED_PHONE_STATE or READ_PHONE_STATE to retrieve the information.