Expose onEmergencyNumberListChanged, semantics change

Expose the onEmergencyNumberListChanged method, which seems to have been
left hidden inadvertently when introduced.

Add a new version of onOutgoingEmergencyCall that supplies a
subscription ID and deprecate the old one. Along with this, send
emergency call events from any subscription to all listeners regardless
of which subscription the listener specified.

Test: atest CtsTelecomTestCases:OutgoingCallTest
Bug: 162647577
bug: 165660452
Change-Id: Ia0e10bfb3376ff82d03a6dbc4bf71c22b0ace366
This commit is contained in:
Hall Liu
2020-08-05 17:34:49 -07:00
parent 1633cc69a0
commit cebecc648b
8 changed files with 61 additions and 18 deletions

View File

@@ -47836,6 +47836,7 @@ package android.telephony {
method public void onDataConnectionStateChanged(int); method public void onDataConnectionStateChanged(int);
method public void onDataConnectionStateChanged(int, int); method public void onDataConnectionStateChanged(int, int);
method @RequiresPermission("android.permission.READ_PHONE_STATE") public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo); method @RequiresPermission("android.permission.READ_PHONE_STATE") public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
method public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo); method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
method public void onMessageWaitingIndicatorChanged(boolean); method public void onMessageWaitingIndicatorChanged(boolean);
method @RequiresPermission("android.permission.MODIFY_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState); method @RequiresPermission("android.permission.MODIFY_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);

View File

@@ -10816,7 +10816,8 @@ package android.telephony {
public class PhoneStateListener { public class PhoneStateListener {
method public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes); method public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber); method @Deprecated public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber); method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState); method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
method public void onRadioPowerStateChanged(int); method public void onRadioPowerStateChanged(int);

View File

@@ -4071,7 +4071,8 @@ package android.telephony {
} }
public class PhoneStateListener { public class PhoneStateListener {
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber); method @Deprecated public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber); method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
field @RequiresPermission("android.permission.READ_ACTIVE_EMERGENCY_SESSION") public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 268435456; // 0x10000000 field @RequiresPermission("android.permission.READ_ACTIVE_EMERGENCY_SESSION") public static final int LISTEN_OUTGOING_EMERGENCY_CALL = 268435456; // 0x10000000
field @RequiresPermission("android.permission.READ_ACTIVE_EMERGENCY_SESSION") public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 536870912; // 0x20000000 field @RequiresPermission("android.permission.READ_ACTIVE_EMERGENCY_SESSION") public static final int LISTEN_OUTGOING_EMERGENCY_SMS = 536870912; // 0x20000000

View File

@@ -938,7 +938,6 @@ public class PhoneStateListener {
* {@link SubscriptionManager#getDefaultSubscriptionId}) * {@link SubscriptionManager#getDefaultSubscriptionId})
* and the value as the list of {@link EmergencyNumber}; * and the value as the list of {@link EmergencyNumber};
* null if this information is not available. * null if this information is not available.
* @hide
*/ */
public void onEmergencyNumberListChanged( public void onEmergencyNumberListChanged(
@NonNull Map<Integer, List<EmergencyNumber>> emergencyNumberList) { @NonNull Map<Integer, List<EmergencyNumber>> emergencyNumberList) {
@@ -948,16 +947,49 @@ public class PhoneStateListener {
/** /**
* Callback invoked when an outgoing call is placed to an emergency number. * Callback invoked when an outgoing call is placed to an emergency number.
* *
* @param placedEmergencyNumber the emergency number {@link EmergencyNumber} the call is placed * This method will be called when an emergency call is placed on any subscription (including
* to. * the no-SIM case), regardless of which subscription this listener was registered on.
*
* This method is deprecated. Both this method and the new
* {@link #onOutgoingEmergencyCall(EmergencyNumber, int)} will be called when an outgoing
* emergency call is placed.
*
* @param placedEmergencyNumber The {@link EmergencyNumber} the emergency call was placed to.
*
* @deprecated Use {@link #onOutgoingEmergencyCall(EmergencyNumber, int)}.
* @hide * @hide
*/ */
@SystemApi @SystemApi
@TestApi @TestApi
@Deprecated
public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber) { public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber) {
// default implementation empty // default implementation empty
} }
/**
* Callback invoked when an outgoing call is placed to an emergency number.
*
* This method will be called when an emergency call is placed on any subscription (including
* the no-SIM case), regardless of which subscription this listener was registered on.
*
* Both this method and the deprecated {@link #onOutgoingEmergencyCall(EmergencyNumber)} will be
* called when an outgoing emergency call is placed. You should only implement one of these
* methods.
*
* @param placedEmergencyNumber The {@link EmergencyNumber} the emergency call was placed to.
* @param subscriptionId The subscription ID used to place the emergency call. If the
* emergency call was placed without a valid subscription (e.g. when there
* are no SIM cards in the device), this will be equal to
* {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID}.
*
* @hide
*/
@SystemApi
@TestApi
public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber,
int subscriptionId) {
}
/** /**
* Callback invoked when an outgoing SMS is placed to an emergency number. * Callback invoked when an outgoing SMS is placed to an emergency number.
* *
@@ -1336,13 +1368,19 @@ public class PhoneStateListener {
() -> psl.onEmergencyNumberListChanged(emergencyNumberList))); () -> psl.onEmergencyNumberListChanged(emergencyNumberList)));
} }
public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber) { public void onOutgoingEmergencyCall(@NonNull EmergencyNumber placedEmergencyNumber,
int subscriptionId) {
PhoneStateListener psl = mPhoneStateListenerWeakRef.get(); PhoneStateListener psl = mPhoneStateListenerWeakRef.get();
if (psl == null) return; if (psl == null) return;
Binder.withCleanCallingIdentity( Binder.withCleanCallingIdentity(
() -> mExecutor.execute( () -> mExecutor.execute(
() -> psl.onOutgoingEmergencyCall(placedEmergencyNumber))); () -> psl.onOutgoingEmergencyCall(placedEmergencyNumber)));
Binder.withCleanCallingIdentity(
() -> mExecutor.execute(
() -> psl.onOutgoingEmergencyCall(placedEmergencyNumber,
subscriptionId)));
} }
public void onOutgoingEmergencySms(@NonNull EmergencyNumber sentEmergencyNumber) { public void onOutgoingEmergencySms(@NonNull EmergencyNumber sentEmergencyNumber) {

View File

@@ -61,7 +61,7 @@ oneway interface IPhoneStateListener {
void onRadioPowerStateChanged(in int state); void onRadioPowerStateChanged(in int state);
void onCallAttributesChanged(in CallAttributes callAttributes); void onCallAttributesChanged(in CallAttributes callAttributes);
void onEmergencyNumberListChanged(in Map emergencyNumberList); void onEmergencyNumberListChanged(in Map emergencyNumberList);
void onOutgoingEmergencyCall(in EmergencyNumber placedEmergencyNumber); void onOutgoingEmergencyCall(in EmergencyNumber placedEmergencyNumber, int subscriptionId);
void onOutgoingEmergencySms(in EmergencyNumber sentEmergencyNumber); void onOutgoingEmergencySms(in EmergencyNumber sentEmergencyNumber);
void onCallDisconnectCauseChanged(in int disconnectCause, in int preciseDisconnectCause); void onCallDisconnectCauseChanged(in int disconnectCause, in int preciseDisconnectCause);
void onImsCallDisconnectCauseChanged(in ImsReasonInfo imsReasonInfo); void onImsCallDisconnectCauseChanged(in ImsReasonInfo imsReasonInfo);

View File

@@ -45986,6 +45986,7 @@ package android.telephony {
method public void onDataConnectionStateChanged(int); method public void onDataConnectionStateChanged(int);
method public void onDataConnectionStateChanged(int, int); method public void onDataConnectionStateChanged(int, int);
method @RequiresPermission("android.permission.READ_PHONE_STATE") public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo); method @RequiresPermission("android.permission.READ_PHONE_STATE") public void onDisplayInfoChanged(@NonNull android.telephony.TelephonyDisplayInfo);
method public void onEmergencyNumberListChanged(@NonNull java.util.Map<java.lang.Integer,java.util.List<android.telephony.emergency.EmergencyNumber>>);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo); method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onImsCallDisconnectCauseChanged(@NonNull android.telephony.ims.ImsReasonInfo);
method public void onMessageWaitingIndicatorChanged(boolean); method public void onMessageWaitingIndicatorChanged(boolean);
method @RequiresPermission("android.permission.MODIFY_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState); method @RequiresPermission("android.permission.MODIFY_PHONE_STATE") public void onPreciseDataConnectionStateChanged(@NonNull android.telephony.PreciseDataConnectionState);

View File

@@ -9682,7 +9682,8 @@ package android.telephony {
public class PhoneStateListener { public class PhoneStateListener {
method public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes); method public void onCallAttributesChanged(@NonNull android.telephony.CallAttributes);
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber); method @Deprecated public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber);
method public void onOutgoingEmergencyCall(@NonNull android.telephony.emergency.EmergencyNumber, int);
method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber); method public void onOutgoingEmergencySms(@NonNull android.telephony.emergency.EmergencyNumber);
method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState); method @RequiresPermission("android.permission.READ_PRECISE_PHONE_STATE") public void onPreciseCallStateChanged(@NonNull android.telephony.PreciseCallState);
method public void onRadioPowerStateChanged(int); method public void onRadioPowerStateChanged(int);

View File

@@ -2103,12 +2103,13 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
synchronized (mRecords) { synchronized (mRecords) {
if (validatePhoneId(phoneId)) { if (validatePhoneId(phoneId)) {
mOutgoingCallEmergencyNumber[phoneId] = emergencyNumber; mOutgoingCallEmergencyNumber[phoneId] = emergencyNumber;
}
for (Record r : mRecords) { for (Record r : mRecords) {
// Send to all listeners regardless of subscription
if (r.matchPhoneStateListenerEvent( if (r.matchPhoneStateListenerEvent(
PhoneStateListener.LISTEN_OUTGOING_EMERGENCY_CALL) PhoneStateListener.LISTEN_OUTGOING_EMERGENCY_CALL)) {
&& idMatch(r.subId, subId, phoneId)) {
try { try {
r.callback.onOutgoingEmergencyCall(emergencyNumber); r.callback.onOutgoingEmergencyCall(emergencyNumber, subId);
} catch (RemoteException ex) { } catch (RemoteException ex) {
mRemoveList.add(r.binder); mRemoveList.add(r.binder);
} }
@@ -2117,7 +2118,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
handleRemoveListLocked(); handleRemoveListLocked();
} }
}
@Override @Override
public void notifyOutgoingEmergencySms(int phoneId, int subId, public void notifyOutgoingEmergencySms(int phoneId, int subId,