diff options
| -rw-r--r-- | api/current.txt | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | telephony/java/android/telephony/emergency/EmergencyNumber.java | 29 | ||||
| -rw-r--r-- | telephony/java/android/telephony/ims/ImsCallProfile.java | 42 |
4 files changed, 71 insertions, 3 deletions
diff --git a/api/current.txt b/api/current.txt index 7e0c33cfb657..501f9c18c1f3 100644 --- a/api/current.txt +++ b/api/current.txt @@ -44853,6 +44853,7 @@ package android.telephony.emergency { method public java.util.List<java.lang.Integer> getEmergencyNumberSources(); method public java.util.List<java.lang.Integer> getEmergencyServiceCategories(); method public int getEmergencyServiceCategoryBitmask(); + method public java.util.List<java.lang.String> getEmergencyUrns(); method public java.lang.String getMnc(); method public java.lang.String getNumber(); method public boolean isFromSources(int); diff --git a/api/system-current.txt b/api/system-current.txt index cb1e96a2bc82..c7fc1a67fb9a 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6846,6 +6846,7 @@ package android.telephony.ims { method public static int getCallTypeFromVideoState(int); method public int getEmergencyCallRouting(); method public int getEmergencyServiceCategories(); + method public java.util.List<java.lang.String> getEmergencyUrns(); method public android.telephony.ims.ImsStreamMediaProfile getMediaProfile(); method public int getRestrictCause(); method public int getServiceType(); @@ -6860,6 +6861,7 @@ package android.telephony.ims { method public void setCallRestrictCause(int); method public void setEmergencyCallRouting(int); method public void setEmergencyServiceCategories(int); + method public void setEmergencyUrns(java.util.List<java.lang.String>); method public void updateCallExtras(android.telephony.ims.ImsCallProfile); method public void updateCallType(android.telephony.ims.ImsCallProfile); method public void updateMediaProfile(android.telephony.ims.ImsCallProfile); diff --git a/telephony/java/android/telephony/emergency/EmergencyNumber.java b/telephony/java/android/telephony/emergency/EmergencyNumber.java index a94b163ffd75..a5f56bbebd75 100644 --- a/telephony/java/android/telephony/emergency/EmergencyNumber.java +++ b/telephony/java/android/telephony/emergency/EmergencyNumber.java @@ -232,18 +232,21 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu private final String mCountryIso; private final String mMnc; private final int mEmergencyServiceCategoryBitmask; + private final List<String> mEmergencyUrns; private final int mEmergencyNumberSourceBitmask; private final int mEmergencyCallRouting; /** @hide */ public EmergencyNumber(@NonNull String number, @NonNull String countryIso, @NonNull String mnc, @EmergencyServiceCategories int emergencyServiceCategories, + @NonNull List<String> emergencyUrns, @EmergencyNumberSources int emergencyNumberSources, @EmergencyCallRouting int emergencyCallRouting) { this.mNumber = number; this.mCountryIso = countryIso; this.mMnc = mnc; this.mEmergencyServiceCategoryBitmask = emergencyServiceCategories; + this.mEmergencyUrns = emergencyUrns; this.mEmergencyNumberSourceBitmask = emergencyNumberSources; this.mEmergencyCallRouting = emergencyCallRouting; } @@ -254,6 +257,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu mCountryIso = source.readString(); mMnc = source.readString(); mEmergencyServiceCategoryBitmask = source.readInt(); + mEmergencyUrns = source.createStringArrayList(); mEmergencyNumberSourceBitmask = source.readInt(); mEmergencyCallRouting = source.readInt(); } @@ -265,6 +269,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu dest.writeString(mCountryIso); dest.writeString(mMnc); dest.writeInt(mEmergencyServiceCategoryBitmask); + dest.writeStringList(mEmergencyUrns); dest.writeInt(mEmergencyNumberSourceBitmask); dest.writeInt(mEmergencyCallRouting); } @@ -345,6 +350,22 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu } /** + * Returns the list of emergency Uniform Resources Names (URN) of the emergency number. + * + * For example, {@code urn:service:sos} is the generic URN for contacting emergency services + * of all type. + * + * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; + * RFC 5031 + * + * @return list of emergency Uniform Resources Names (URN) or an empty list if the emergency + * number does not have a specified emergency Uniform Resource Name. + */ + public @NonNull List<String> getEmergencyUrns() { + return mEmergencyUrns; + } + + /** * Checks if the emergency service category is unspecified for the emergency number * {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}. * @@ -434,6 +455,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu return "EmergencyNumber:" + "Number-" + mNumber + "|CountryIso-" + mCountryIso + "|Mnc-" + mMnc + "|ServiceCategories-" + Integer.toBinaryString(mEmergencyServiceCategoryBitmask) + + "|Urns-" + mEmergencyUrns + "|Sources-" + Integer.toBinaryString(mEmergencyNumberSourceBitmask) + "|Routing-" + Integer.toBinaryString(mEmergencyCallRouting); } @@ -448,6 +470,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu && mCountryIso.equals(other.mCountryIso) && mMnc.equals(other.mMnc) && mEmergencyServiceCategoryBitmask == other.mEmergencyServiceCategoryBitmask + && mEmergencyUrns.equals(other.mEmergencyUrns) && mEmergencyNumberSourceBitmask == other.mEmergencyNumberSourceBitmask && mEmergencyCallRouting == other.mEmergencyCallRouting; } @@ -455,7 +478,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu @Override public int hashCode() { return Objects.hash(mNumber, mCountryIso, mMnc, mEmergencyServiceCategoryBitmask, - mEmergencyNumberSourceBitmask, mEmergencyCallRouting); + mEmergencyUrns, mEmergencyNumberSourceBitmask, mEmergencyCallRouting); } /** @@ -584,6 +607,9 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu != second.getEmergencyServiceCategoryBitmask()) { return false; } + if (first.getEmergencyUrns().equals(second.getEmergencyUrns())) { + return false; + } if (first.getEmergencyCallRouting() != second.getEmergencyCallRouting()) { return false; } @@ -605,6 +631,7 @@ public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNu if (areSameEmergencyNumbers(first, second)) { return new EmergencyNumber(first.getNumber(), first.getCountryIso(), first.getMnc(), first.getEmergencyServiceCategoryBitmask(), + first.getEmergencyUrns(), first.getEmergencyNumberSourceBitmask() | second.getEmergencyNumberSourceBitmask(), first.getEmergencyCallRouting()); diff --git a/telephony/java/android/telephony/ims/ImsCallProfile.java b/telephony/java/android/telephony/ims/ImsCallProfile.java index 9c8d078a579b..525a96a4dae9 100644 --- a/telephony/java/android/telephony/ims/ImsCallProfile.java +++ b/telephony/java/android/telephony/ims/ImsCallProfile.java @@ -33,6 +33,8 @@ import com.android.internal.telephony.PhoneConstants; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.List; /** * Parcelable object to handle IMS call profile. @@ -323,6 +325,15 @@ public final class ImsCallProfile implements Parcelable { EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED; /** + * The emergency Uniform Resource Names (URN), only valid if {@link #getServiceType} returns + * {@link #SERVICE_TYPE_EMERGENCY}. + * + * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; + * 3gpp 22.101, Section 10 - Emergency Calls. + */ + private List<String> mEmergencyUrns = new ArrayList<>(); + + /** * The emergency call routing, only valid if {@link #getServiceType} returns * {@link #SERVICE_TYPE_EMERGENCY} * @@ -524,6 +535,7 @@ public final class ImsCallProfile implements Parcelable { + ", restrictCause=" + mRestrictCause + ", mediaProfile=" + mMediaProfile.toString() + ", emergencyServiceCategories=" + mEmergencyCallRouting + + ", emergencyUrns=" + mEmergencyUrns + ", emergencyCallRouting=" + mEmergencyCallRouting + " }"; } @@ -540,6 +552,7 @@ public final class ImsCallProfile implements Parcelable { out.writeBundle(filteredExtras); out.writeParcelable(mMediaProfile, 0); out.writeInt(mEmergencyServiceCategories); + out.writeStringList(mEmergencyUrns); out.writeInt(mEmergencyCallRouting); } @@ -549,6 +562,7 @@ public final class ImsCallProfile implements Parcelable { mCallExtras = in.readBundle(); mMediaProfile = in.readParcelable(ImsStreamMediaProfile.class.getClassLoader()); mEmergencyServiceCategories = in.readInt(); + mEmergencyUrns = in.createStringArrayList(); mEmergencyCallRouting = in.readInt(); } @@ -760,20 +774,21 @@ public final class ImsCallProfile implements Parcelable { } /** - * Set the emergency service categories and emergency call routing. The set value is valid + * Set the emergency number information. The set value is valid * only if {@link #getServiceType} returns {@link #SERVICE_TYPE_EMERGENCY} * * Reference: 3gpp 23.167, Section 6 - Functional description; + * 3gpp 24.503, Section 5.1.6.8.1 - General; * 3gpp 22.101, Section 10 - Emergency Calls. * * @hide */ public void setEmergencyCallInfo(EmergencyNumber num) { setEmergencyServiceCategories(num.getEmergencyServiceCategoryBitmask()); + setEmergencyUrns(num.getEmergencyUrns()); setEmergencyCallRouting(num.getEmergencyCallRouting()); } - /** * Set the emergency service categories. The set value is valid only if * {@link #getServiceType} returns {@link #SERVICE_TYPE_EMERGENCY} @@ -800,6 +815,18 @@ public final class ImsCallProfile implements Parcelable { } /** + * Set the emergency Uniform Resource Names (URN), only valid if {@link #getServiceType} + * returns {@link #SERVICE_TYPE_EMERGENCY}. + * + * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; + * 3gpp 22.101, Section 10 - Emergency Calls. + */ + @VisibleForTesting + public void setEmergencyUrns(List<String> emergencyUrns) { + mEmergencyUrns = emergencyUrns; + } + + /** * Set the emergency call routing, only valid if {@link #getServiceType} returns * {@link #SERVICE_TYPE_EMERGENCY} * @@ -841,6 +868,17 @@ public final class ImsCallProfile implements Parcelable { } /** + * Get the emergency Uniform Resource Names (URN), only valid if {@link #getServiceType} + * returns {@link #SERVICE_TYPE_EMERGENCY}. + * + * Reference: 3gpp 24.503, Section 5.1.6.8.1 - General; + * 3gpp 22.101, Section 10 - Emergency Calls. + */ + public List<String> getEmergencyUrns() { + return mEmergencyUrns; + } + + /** * Get the emergency call routing, only valid if {@link #getServiceType} returns * {@link #SERVICE_TYPE_EMERGENCY} * |