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

Commit a9d551ca authored by Shuo Qian's avatar Shuo Qian Committed by Gerrit Code Review
Browse files

Merge "Compare Emergency number display priority"

parents ea008f14 56601498
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -43032,7 +43032,8 @@ package android.telephony.data {
package android.telephony.emergency {
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 int describeContents();
    method public java.lang.String getCountryIso();
    method public java.lang.String getCountryIso();
    method public int getEmergencyNumberSourceBitmask();
    method public int getEmergencyNumberSourceBitmask();
+80 −20
Original line number Original line 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
 * A parcelable class that wraps and retrieves the information of number, service category(s) and
 * country code for a specific emergency number.
 * 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";
    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
     * Returns the bitmask of emergency service categories of the emergency number.
     * the emergency number.
     *
     *
     * @return bitmask of the emergency service categories {@link EmergencyServiceCategories}
     * @return bitmask of the emergency service categories
     */
     */
    public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() {
    public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() {
        return mEmergencyServiceCategoryBitmask;
        return mEmergencyServiceCategoryBitmask;
    }
    }


    /**
    /**
     * Returns the emergency service categories {@link EmergencyServiceCategories} of the emergency
     * Returns the emergency service categories of the emergency number.
     * 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() {
    public List<Integer> getEmergencyServiceCategories() {
        List<Integer> categories = new ArrayList<>();
        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)
     * Checks if the emergency number is in the supplied emergency service category(s).
     * {@link EmergencyServiceCategories}.
     *
     *
     * @return {@code true} if the emergency number is in the specified emergency service
     * @param categories - the supplied emergency service categories
     * category(s) {@link EmergencyServiceCategories}; {@code false} otherwise.
     *
     *
     * @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) {
    public boolean isInEmergencyServiceCategories(@EmergencyServiceCategories int categories) {
        if (categories == EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED) {
        if (categories == EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED) {
            return serviceUnspecified();
            return serviceUnspecified();
        }
        }
        if (serviceUnspecified()) {
            return true;
        }
        return (mEmergencyServiceCategoryBitmask & categories) == categories;
        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() {
    public @EmergencyNumberSources int getEmergencyNumberSourceBitmask() {
        return mEmergencyNumberSourceBitmask;
        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() {
    public List<Integer> getEmergencyNumberSources() {
        List<Integer> sources = new ArrayList<>();
        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)
     * Checks if the emergency number is from the specified emergency number source(s).
     * {@link EmergencyNumberSources}.
     *
     *
     * @return {@code true} if the emergency number is from the specified emergency number
     * @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) {
    public boolean isFromSources(@EmergencyNumberSources int sources) {
        return (mEmergencyNumberSourceBitmask & sources) == sources;
        return (mEmergencyNumberSourceBitmask & sources) == sources;
@@ -359,6 +363,62 @@ public final class EmergencyNumber implements Parcelable {
        return (o == this || toString().equals(o.toString()));
        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 =
    public static final Parcelable.Creator<EmergencyNumber> CREATOR =
            new Parcelable.Creator<EmergencyNumber>() {
            new Parcelable.Creator<EmergencyNumber>() {
        @Override
        @Override