Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f36225e authored by Shuo Qian's avatar Shuo Qian Committed by android-build-merger
Browse files

Merge "Compare Emergency number display priority"

am: a9d551ca

Change-Id: I59d2226ba82c67af80ebbd7f976991f1ed4ee8c4
parents fd0e78ec a9d551ca
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -43032,7 +43032,8 @@ package android.telephony.data {
package android.telephony.emergency {
  public final class EmergencyNumber implements android.os.Parcelable {
  public final class EmergencyNumber implements java.lang.Comparable android.os.Parcelable {
    method public int compareTo(android.telephony.emergency.EmergencyNumber);
    method public int describeContents();
    method public java.lang.String getCountryIso();
    method public int getEmergencyNumberSourceBitmask();
+80 −20
Original line number Diff line number Diff line
@@ -33,7 +33,7 @@ import java.util.Set;
 * A parcelable class that wraps and retrieves the information of number, service category(s) and
 * country code for a specific emergency number.
 */
public final class EmergencyNumber implements Parcelable {
public final class EmergencyNumber implements Parcelable, Comparable<EmergencyNumber> {

    private static final String LOG_TAG = "EmergencyNumber";

@@ -235,20 +235,22 @@ public final class EmergencyNumber implements Parcelable {
    }

    /**
     * Returns the bitmask of emergency service categories {@link EmergencyServiceCategories} of
     * the emergency number.
     * Returns the bitmask of emergency service categories of the emergency number.
     *
     * @return bitmask of the emergency service categories {@link EmergencyServiceCategories}
     * @return bitmask of the emergency service categories
     */
    public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() {
        return mEmergencyServiceCategoryBitmask;
    }

    /**
     * Returns the emergency service categories {@link EmergencyServiceCategories} of the emergency
     * number.
     * Returns the emergency service categories of the emergency number.
     *
     * @return a list of the emergency service categories {@link EmergencyServiceCategories}
     * Note: if the emergency number is in {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}, only
     * {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED} is returned and it means the number is in
     * all categories.
     *
     * @return a list of the emergency service categories
     */
    public List<Integer> getEmergencyServiceCategories() {
        List<Integer> categories = new ArrayList<>();
@@ -276,34 +278,37 @@ public final class EmergencyNumber implements Parcelable {
    }

    /**
     * Checks if the emergency number is in the specified emergency service category(s)
     * {@link EmergencyServiceCategories}.
     * Checks if the emergency number is in the supplied emergency service category(s).
     *
     * @return {@code true} if the emergency number is in the specified emergency service
     * category(s) {@link EmergencyServiceCategories}; {@code false} otherwise.
     * @param categories - the supplied emergency service categories
     *
     * @param categories - emergency service categories {@link EmergencyServiceCategories}
     * @return {@code true} if the emergency number is in the specified emergency service
     * category(s) or if its emergency service category is
     * {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}; {@code false} otherwise.
     */
    public boolean isInEmergencyServiceCategories(@EmergencyServiceCategories int categories) {
        if (categories == EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED) {
            return serviceUnspecified();
        }
        if (serviceUnspecified()) {
            return true;
        }
        return (mEmergencyServiceCategoryBitmask & categories) == categories;
    }

    /**
     * Returns the bitmask of the sources {@link EmergencyNumberSources} of the emergency number.
     * Returns the bitmask of the sources of the emergency number.
     *
     * @return bitmask of the emergency number sources {@link EmergencyNumberSources}
     * @return bitmask of the emergency number sources
     */
    public @EmergencyNumberSources int getEmergencyNumberSourceBitmask() {
        return mEmergencyNumberSourceBitmask;
    }

    /**
     * Returns a list of {@link EmergencyNumberSources} of the emergency number.
     * Returns a list of sources of the emergency number.
     *
     * @return a list of {@link EmergencyNumberSources}
     * @return a list of emergency number sources
     */
    public List<Integer> getEmergencyNumberSources() {
        List<Integer> sources = new ArrayList<>();
@@ -316,13 +321,12 @@ public final class EmergencyNumber implements Parcelable {
    }

    /**
     * Checks if the emergency number is from the specified emergency number source(s)
     * {@link EmergencyNumberSources}.
     * Checks if the emergency number is from the specified emergency number source(s).
     *
     * @return {@code true} if the emergency number is from the specified emergency number
     * source(s) {@link EmergencyNumberSources}; {@code false} otherwise.
     * source(s); {@code false} otherwise.
     *
     * @param sources - {@link EmergencyNumberSources}
     * @param sources - the supplied emergency number sources
     */
    public boolean isFromSources(@EmergencyNumberSources int sources) {
        return (mEmergencyNumberSourceBitmask & sources) == sources;
@@ -359,6 +363,62 @@ public final class EmergencyNumber implements Parcelable {
        return (o == this || toString().equals(o.toString()));
    }

    /**
     * Calculate the score for display priority.
     *
     * A higher display priority score means the emergency number has a higher display priority.
     * The score is higher if the source is defined for a higher display priority.
     *
     * The priority of sources are defined as follows:
     *     EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING >
     *     EMERGENCY_NUMBER_SOURCE_SIM >
     *     EMERGENCY_NUMBER_SOURCE_DEFAULT >
     *     EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG
     *
     */
    private int getDisplayPriorityScore() {
        int score = 0;
        if (this.isFromSources(EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING)) {
            score += 1 << 4;
        }
        if (this.isFromSources(EMERGENCY_NUMBER_SOURCE_SIM)) {
            score += 1 << 3;
        }
        // TODO add a score if the number comes from Google's emergency number database
        if (this.isFromSources(EMERGENCY_NUMBER_SOURCE_DEFAULT)) {
            score += 1 << 1;
        }
        if (this.isFromSources(EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG)) {
            score += 1 << 0;
        }
        return score;
    }

    /**
     * Compare the display priority for this emergency number and the supplied emergency number.
     *
     * @param emergencyNumber the supplied emergency number
     * @return a negative value if the supplied emergency number has a lower display priority;
     *         a positive value if the supplied emergency number has a higher display priority;
     *         0 if both have equal display priority.
     */
    @Override
    public int compareTo(EmergencyNumber emergencyNumber) {
        if (this.getDisplayPriorityScore()
                > emergencyNumber.getDisplayPriorityScore()) {
            return -1;
        } else if (this.getDisplayPriorityScore()
                < emergencyNumber.getDisplayPriorityScore()) {
            return 1;
        } else {
            /**
             * TODO if both numbers have the same display priority score, the number matches the
             * Google's emergency number database has a higher display priority.
             */
            return 0;
        }
    }

    public static final Parcelable.Creator<EmergencyNumber> CREATOR =
            new Parcelable.Creator<EmergencyNumber>() {
        @Override