Merge "Add Parcelable EmergencyNumber and APIs" am: 379ca95c89

am: e414f5ed16

Change-Id: Ic3f48cc3df90edde8c5ed1941a4e5a6f4e7ab572
This commit is contained in:
Shuo Qian
2018-10-05 16:08:31 -07:00
committed by android-build-merger
4 changed files with 424 additions and 0 deletions

View File

@@ -689,6 +689,7 @@ java_defaults {
"android.hardware.vibrator-V1.2-java",
"android.hardware.wifi-V1.0-java-constants",
"android.hardware.radio-V1.0-java",
"android.hardware.radio-V1.3-java",
"android.hardware.usb.gadget-V1.0-java",
],

View File

@@ -43025,6 +43025,36 @@ package android.telephony.data {
}
package android.telephony.emergency {
public final class EmergencyNumber implements android.os.Parcelable {
method public int describeContents();
method public java.lang.String getCountryIso();
method public int getEmergencyNumberSourceBitmask();
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.lang.String getNumber();
method public boolean isFromSources(int);
method public boolean isInEmergencyServiceCategories(int);
method public void writeToParcel(android.os.Parcel, int);
field public static final android.os.Parcelable.Creator<android.telephony.emergency.EmergencyNumber> CREATOR;
field public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT = 8; // 0x8
field public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG = 4; // 0x4
field public static final int EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING = 1; // 0x1
field public static final int EMERGENCY_NUMBER_SOURCE_SIM = 2; // 0x2
field public static final int EMERGENCY_SERVICE_CATEGORY_AIEC = 64; // 0x40
field public static final int EMERGENCY_SERVICE_CATEGORY_AMBULANCE = 2; // 0x2
field public static final int EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE = 4; // 0x4
field public static final int EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD = 8; // 0x8
field public static final int EMERGENCY_SERVICE_CATEGORY_MIEC = 32; // 0x20
field public static final int EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE = 16; // 0x10
field public static final int EMERGENCY_SERVICE_CATEGORY_POLICE = 1; // 0x1
field public static final int EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED = 0; // 0x0
}
}
package android.telephony.euicc {
public final class DownloadableSubscription implements android.os.Parcelable {

View File

@@ -0,0 +1,19 @@
/*
* Copyright (c) 2018, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.emergency;
parcelable EmergencyNumber;

View File

@@ -0,0 +1,374 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.telephony.emergency;
import android.annotation.IntDef;
import android.hardware.radio.V1_3.EmergencyNumberSource;
import android.hardware.radio.V1_3.EmergencyServiceCategory;
import android.os.Parcel;
import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
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 {
private static final String LOG_TAG = "EmergencyNumber";
/**
* Defining Emergency Service Category as follows:
* - General emergency call, all categories;
* - Police;
* - Ambulance;
* - Fire Brigade;
* - Marine Guard;
* - Mountain Rescue;
* - Manually Initiated eCall (MIeC);
* - Automatically Initiated eCall (AIeC);
*
* Category UNSPECIFIED (General emergency call, all categories) indicates that no specific
* services are associated with this emergency number; if the emergency number is specified,
* it has one or more defined emergency service categories.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*
* @hide
*/
@IntDef(flag = true, prefix = { "EMERGENCY_SERVICE_CATEGORY_" }, value = {
EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
EMERGENCY_SERVICE_CATEGORY_POLICE,
EMERGENCY_SERVICE_CATEGORY_AMBULANCE,
EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE,
EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD,
EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE,
EMERGENCY_SERVICE_CATEGORY_MIEC,
EMERGENCY_SERVICE_CATEGORY_AIEC
})
@Retention(RetentionPolicy.SOURCE)
public @interface EmergencyServiceCategories {}
/**
* Emergency Service Category UNSPECIFIED (General emergency call, all categories) bit-field
* indicates that no specific services are associated with this emergency number; if the
* emergency number is specified, it has one or more defined emergency service categories.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED =
EmergencyServiceCategory.UNSPECIFIED;
/**
* Bit-field that indicates Emergency Service Category for Police.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_POLICE = EmergencyServiceCategory.POLICE;
/**
* Bit-field that indicates Emergency Service Category for Ambulance.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_AMBULANCE =
EmergencyServiceCategory.AMBULANCE;
/**
* Bit-field that indicates Emergency Service Category for Fire Brigade.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE =
EmergencyServiceCategory.FIRE_BRIGADE;
/**
* Bit-field that indicates Emergency Service Category for Marine Guard.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD =
EmergencyServiceCategory.MARINE_GUARD;
/**
* Bit-field that indicates Emergency Service Category for Mountain Rescue.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE =
EmergencyServiceCategory.MOUNTAIN_RESCUE;
/**
* Bit-field that indicates Emergency Service Category for Manually Initiated eCall (MIeC)
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_MIEC = EmergencyServiceCategory.MIEC;
/**
* Bit-field that indicates Emergency Service Category for Automatically Initiated eCall (AIeC)
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_SERVICE_CATEGORY_AIEC = EmergencyServiceCategory.AIEC;
private static final Set<Integer> EMERGENCY_SERVICE_CATEGORY_SET;
static {
EMERGENCY_SERVICE_CATEGORY_SET = new HashSet<Integer>();
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_POLICE);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_AMBULANCE);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_FIRE_BRIGADE);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_MARINE_GUARD);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_MOUNTAIN_RESCUE);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_MIEC);
EMERGENCY_SERVICE_CATEGORY_SET.add(EMERGENCY_SERVICE_CATEGORY_AIEC);
}
/**
* The source to tell where the corresponding @1.3::EmergencyNumber comes from.
*
* The emergency number has one or more defined emergency number sources.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*
* @hide
*/
@IntDef(flag = true, prefix = { "EMERGENCY_NUMBER_SOURCE_" }, value = {
EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING,
EMERGENCY_NUMBER_SOURCE_SIM,
EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG,
EMERGENCY_NUMBER_SOURCE_DEFAULT
})
@Retention(RetentionPolicy.SOURCE)
public @interface EmergencyNumberSources {}
/**
* Bit-field which indicates the number is from the network signaling.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING =
EmergencyNumberSource.NETWORK_SIGNALING;
/**
* Bit-field which indicates the number is from the sim.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_NUMBER_SOURCE_SIM = EmergencyNumberSource.SIM;
/** Bit-field which indicates the number is from the modem config. */
public static final int EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG =
EmergencyNumberSource.MODEM_CONFIG;
/**
* Bit-field which indicates the number is available as default.
*
* 112, 911 must always be available; additionally, 000, 08, 110, 999, 118 and 119 must be
* available when sim is not present.
*
* Reference: 3gpp 22.101, Section 10 - Emergency Calls
*/
public static final int EMERGENCY_NUMBER_SOURCE_DEFAULT = EmergencyNumberSource.DEFAULT;
private static final Set<Integer> EMERGENCY_NUMBER_SOURCE_SET;
static {
EMERGENCY_NUMBER_SOURCE_SET = new HashSet<Integer>();
EMERGENCY_NUMBER_SOURCE_SET.add(EMERGENCY_NUMBER_SOURCE_NETWORK_SIGNALING);
EMERGENCY_NUMBER_SOURCE_SET.add(EMERGENCY_NUMBER_SOURCE_SIM);
EMERGENCY_NUMBER_SOURCE_SET.add(EMERGENCY_NUMBER_SOURCE_MODEM_CONFIG);
EMERGENCY_NUMBER_SOURCE_SET.add(EMERGENCY_NUMBER_SOURCE_DEFAULT);
}
private final String mNumber;
private final String mCountryIso;
private final int mEmergencyServiceCategoryBitmask;
private final int mEmergencyNumberSourceBitmask;
/** @hide */
public EmergencyNumber(String number, String countryIso,
int emergencyServiceCategories,
int emergencyNumberSources) {
this.mNumber = number;
this.mCountryIso = countryIso;
this.mEmergencyServiceCategoryBitmask = emergencyServiceCategories;
this.mEmergencyNumberSourceBitmask = emergencyNumberSources;
}
/** @hide */
public EmergencyNumber(Parcel source) {
mNumber = source.readString();
mCountryIso = source.readString();
mEmergencyServiceCategoryBitmask = source.readInt();
mEmergencyNumberSourceBitmask = source.readInt();
}
/**
* Get the dialing number of the emergency number.
*
* The character in the number string is only the dial pad
* character('0'-'9', '*', or '#'). For example: 911.
*
* @return the dialing number.
*/
public String getNumber() {
return mNumber;
}
/**
* Get the country code string (lowercase character) in ISO 3166 format of the emergency number.
*
* @return the country code string (lowercase character) in ISO 3166 format.
*/
public String getCountryIso() {
return mCountryIso;
}
/**
* Returns the bitmask of emergency service categories {@link EmergencyServiceCategories} of
* the emergency number.
*
* @return bitmask of the emergency service categories {@link EmergencyServiceCategories}
*/
public @EmergencyServiceCategories int getEmergencyServiceCategoryBitmask() {
return mEmergencyServiceCategoryBitmask;
}
/**
* Returns the emergency service categories {@link EmergencyServiceCategories} of the emergency
* number.
*
* @return a list of the emergency service categories {@link EmergencyServiceCategories}
*/
public List<Integer> getEmergencyServiceCategories() {
List<Integer> categories = new ArrayList<>();
if (serviceUnspecified()) {
categories.add(EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED);
return categories;
}
for (Integer category : EMERGENCY_SERVICE_CATEGORY_SET) {
if (isInEmergencyServiceCategories(category)) {
categories.add(category);
}
}
return categories;
}
/**
* Checks if the emergency service category is unspecified for the emergency number
* {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}.
*
* @return {@code true} if the emergency service category is unspecified for the emergency
* number {@link #EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED}; {@code false} otherwise.
*/
private boolean serviceUnspecified() {
return mEmergencyServiceCategoryBitmask == EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED;
}
/**
* Checks if the emergency number is in the specified emergency service category(s)
* {@link EmergencyServiceCategories}.
*
* @return {@code true} if the emergency number is in the specified emergency service
* category(s) {@link EmergencyServiceCategories}; {@code false} otherwise.
*
* @param categories - emergency service categories {@link EmergencyServiceCategories}
*/
public boolean isInEmergencyServiceCategories(@EmergencyServiceCategories int categories) {
if (categories == EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED) {
return serviceUnspecified();
}
return (mEmergencyServiceCategoryBitmask & categories) == categories;
}
/**
* Returns the bitmask of the sources {@link EmergencyNumberSources} of the emergency number.
*
* @return bitmask of the emergency number sources {@link EmergencyNumberSources}
*/
public @EmergencyNumberSources int getEmergencyNumberSourceBitmask() {
return mEmergencyNumberSourceBitmask;
}
/**
* Returns a list of {@link EmergencyNumberSources} of the emergency number.
*
* @return a list of {@link EmergencyNumberSources}
*/
public List<Integer> getEmergencyNumberSources() {
List<Integer> sources = new ArrayList<>();
for (Integer source : EMERGENCY_NUMBER_SOURCE_SET) {
if ((mEmergencyNumberSourceBitmask & source) == source) {
sources.add(source);
}
}
return sources;
}
/**
* 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
* source(s) {@link EmergencyNumberSources}; {@code false} otherwise.
*
* @param sources - {@link EmergencyNumberSources}
*/
public boolean isFromSources(@EmergencyNumberSources int sources) {
return (mEmergencyNumberSourceBitmask & sources) == sources;
}
@Override
/** @hide */
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mNumber);
dest.writeString(mCountryIso);
dest.writeInt(mEmergencyServiceCategoryBitmask);
dest.writeInt(mEmergencyNumberSourceBitmask);
}
@Override
/** @hide */
public int describeContents() {
return 0;
}
@Override
public String toString() {
return "EmergencyNumber = " + "[Number]" + mNumber + " / [CountryIso]" + mCountryIso
+ " / [ServiceCategories]"
+ Integer.toBinaryString(mEmergencyServiceCategoryBitmask)
+ " / [Sources]" + Integer.toBinaryString(mEmergencyNumberSourceBitmask);
}
@Override
public boolean equals(Object o) {
if (!EmergencyNumber.class.isInstance(o)) {
return false;
}
return (o == this || toString().equals(o.toString()));
}
public static final Parcelable.Creator<EmergencyNumber> CREATOR =
new Parcelable.Creator<EmergencyNumber>() {
@Override
public EmergencyNumber createFromParcel(Parcel in) {
return new EmergencyNumber(in);
}
@Override
public EmergencyNumber[] newArray(int size) {
return new EmergencyNumber[size];
}
};
}