Add Emergency Number Test Mode

Add EMERGENCY_NUMBER_SOURCE_TEST_MODE

This also does not allow to send the service categories from database when
dialing.

Bug: 122840137
Test: Manual; Treehugger
Change-Id: I4ea3539e3b814b71e03e956d4a857ec20141fa8c
This commit is contained in:
sqian
2019-01-15 18:26:35 -08:00
parent c2f2977c4b
commit cb4bd3a30f
4 changed files with 78 additions and 3 deletions

View File

@@ -7182,6 +7182,7 @@ package android.telephony.ims {
method public int getServiceType();
method public static int getVideoStateFromCallType(int);
method public static int getVideoStateFromImsCallProfile(android.telephony.ims.ImsCallProfile);
method public boolean isEmergencyCallTesting();
method public boolean isVideoCall();
method public boolean isVideoPaused();
method public static int presentationToOir(int);
@@ -7190,6 +7191,7 @@ package android.telephony.ims {
method public void setCallExtraInt(java.lang.String, int);
method public void setCallRestrictCause(int);
method public void setEmergencyCallRouting(int);
method public void setEmergencyCallTesting(boolean);
method public void setEmergencyServiceCategories(int);
method public void setEmergencyUrns(java.util.List<java.lang.String>);
method public void updateCallExtras(android.telephony.ims.ImsCallProfile);

View File

@@ -27,6 +27,7 @@ import android.telephony.Rlog;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
@@ -176,6 +177,12 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu
* Bit-field which indicates the number is from the platform-maintained database.
*/
public static final int EMERGENCY_NUMBER_SOURCE_DATABASE = 1 << 4;
/**
* Bit-field which indicates the number is from test mode.
*
* @hide
*/
public static final int EMERGENCY_NUMBER_SOURCE_TEST = 1 << 5;
/** Bit-field which indicates the number is from the modem config. */
public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG =
EmergencyNumberSource.MODEM_CONFIG;
@@ -326,6 +333,21 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu
return mEmergencyServiceCategoryBitmask;
}
/**
* Returns the bitmask of emergency service categories of the emergency number for
* internal dialing.
*
* @return bitmask of the emergency service categories
*
* @hide
*/
public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmaskInternalDial() {
if (mEmergencyNumberSourceBitmask == EMERGENCY_NUMBER_SOURCE_DATABASE) {
return EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED;
}
return mEmergencyServiceCategoryBitmask;
}
/**
* Returns the emergency service categories of the emergency number.
*
@@ -577,6 +599,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu
emergencyNumberList.remove(i--);
}
}
Collections.sort(emergencyNumberList);
}
/**
@@ -613,6 +636,12 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu
if (first.getEmergencyCallRouting() != second.getEmergencyCallRouting()) {
return false;
}
// Never merge two numbers if one of them is from test mode but the other one is not;
// This supports to remove a number from the test mode.
if (first.isFromSources(EMERGENCY_NUMBER_SOURCE_TEST)
^ second.isFromSources(EMERGENCY_NUMBER_SOURCE_TEST)) {
return false;
}
return true;
}
@@ -638,4 +667,13 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu
}
return null;
}
/**
* Validate Emergency Number address that only allows '0'-'9', '*', or '#'
*
* @hide
*/
public static boolean validateEmergencyNumberAddress(String address) {
return address.matches("[0-9*#]+");
}
}

View File

@@ -347,6 +347,9 @@ public final class ImsCallProfile implements Parcelable {
private @EmergencyCallRouting int mEmergencyCallRouting =
EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN;
/** Indicates if the call is for testing purpose */
private boolean mEmergencyCallTesting = false;
/**
* Extras associated with this {@link ImsCallProfile}.
* <p>
@@ -534,9 +537,10 @@ public final class ImsCallProfile implements Parcelable {
+ ", callType=" + mCallType
+ ", restrictCause=" + mRestrictCause
+ ", mediaProfile=" + mMediaProfile.toString()
+ ", emergencyServiceCategories=" + mEmergencyCallRouting
+ ", emergencyServiceCategories=" + mEmergencyServiceCategories
+ ", emergencyUrns=" + mEmergencyUrns
+ ", emergencyCallRouting=" + mEmergencyCallRouting + " }";
+ ", emergencyCallRouting=" + mEmergencyCallRouting
+ ", emergencyCallTesting=" + mEmergencyCallTesting + " }";
}
@Override
@@ -554,6 +558,7 @@ public final class ImsCallProfile implements Parcelable {
out.writeInt(mEmergencyServiceCategories);
out.writeStringList(mEmergencyUrns);
out.writeInt(mEmergencyCallRouting);
out.writeBoolean(mEmergencyCallTesting);
}
private void readFromParcel(Parcel in) {
@@ -564,6 +569,7 @@ public final class ImsCallProfile implements Parcelable {
mEmergencyServiceCategories = in.readInt();
mEmergencyUrns = in.createStringArrayList();
mEmergencyCallRouting = in.readInt();
mEmergencyCallTesting = in.readBoolean();
}
public static final Creator<ImsCallProfile> CREATOR = new Creator<ImsCallProfile>() {
@@ -784,9 +790,11 @@ public final class ImsCallProfile implements Parcelable {
* @hide
*/
public void setEmergencyCallInfo(EmergencyNumber num) {
setEmergencyServiceCategories(num.getEmergencyServiceCategoryBitmask());
setEmergencyServiceCategories(num.getEmergencyServiceCategoryBitmaskInternalDial());
setEmergencyUrns(num.getEmergencyUrns());
setEmergencyCallRouting(num.getEmergencyCallRouting());
setEmergencyCallTesting(num.getEmergencyNumberSourceBitmask()
== EmergencyNumber.EMERGENCY_NUMBER_SOURCE_TEST);
}
/**
@@ -842,6 +850,15 @@ public final class ImsCallProfile implements Parcelable {
mEmergencyCallRouting = emergencyCallRouting;
}
/**
* Set if this is for testing emergency call, only valid if {@link #getServiceType} returns
* {@link #SERVICE_TYPE_EMERGENCY}.
*/
@VisibleForTesting
public void setEmergencyCallTesting(boolean isTesting) {
mEmergencyCallTesting = isTesting;
}
/**
* Get the emergency service categories, only valid if {@link #getServiceType} returns
* {@link #SERVICE_TYPE_EMERGENCY}
@@ -892,4 +909,11 @@ public final class ImsCallProfile implements Parcelable {
public @EmergencyCallRouting int getEmergencyCallRouting() {
return mEmergencyCallRouting;
}
/**
* Get if the emergency call is for testing purpose.
*/
public boolean isEmergencyCallTesting() {
return mEmergencyCallTesting;
}
}

View File

@@ -41,6 +41,7 @@ import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.TelephonyHistogram;
import android.telephony.VisualVoicemailSmsFilterSettings;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.aidl.IImsCapabilityCallback;
import android.telephony.ims.aidl.IImsConfig;
import android.telephony.ims.aidl.IImsConfigCallback;
@@ -1776,4 +1777,14 @@ interface ITelephony {
* Set the String provisioning value for the provisioning key specified.
*/
int setImsProvisioningString(int subId, int key, String value);
/**
* Update Emergency Number List for Test Mode.
*/
void updateEmergencyNumberListTestMode(int action, in EmergencyNumber num);
/**
* Get the full emergency number list for Test Mode.
*/
List<String> getEmergencyNumberListTestMode();
}