Change CellBroadcast APIs to SystemApi

Bug: 135956699
Test: atest SmsManagerPermissionTest
Change-Id: Ibbb22505a80567d1c08cffe9b7a7fdbd10890abe
This commit is contained in:
Jordan Liu
2019-08-16 14:07:03 -07:00
parent d9c0c15c96
commit 657ef5a7e8
12 changed files with 538 additions and 135 deletions

View File

@@ -6102,6 +6102,30 @@ package android.provider {
field public static final String WAIT_TIME_RETRY = "wait_time"; field public static final String WAIT_TIME_RETRY = "wait_time";
} }
public static final class Telephony.CellBroadcasts implements android.provider.BaseColumns {
field public static final String CID = "cid";
field public static final String CMAS_CATEGORY = "cmas_category";
field public static final String CMAS_CERTAINTY = "cmas_certainty";
field public static final String CMAS_MESSAGE_CLASS = "cmas_message_class";
field public static final String CMAS_RESPONSE_TYPE = "cmas_response_type";
field public static final String CMAS_SEVERITY = "cmas_severity";
field public static final String CMAS_URGENCY = "cmas_urgency";
field @NonNull public static final android.net.Uri CONTENT_URI;
field public static final String DEFAULT_SORT_ORDER = "date DESC";
field public static final String DELIVERY_TIME = "date";
field public static final String ETWS_WARNING_TYPE = "etws_warning_type";
field public static final String GEOGRAPHICAL_SCOPE = "geo_scope";
field public static final String LAC = "lac";
field public static final String LANGUAGE_CODE = "language";
field public static final String MESSAGE_BODY = "body";
field public static final String MESSAGE_FORMAT = "format";
field public static final String MESSAGE_PRIORITY = "priority";
field public static final String MESSAGE_READ = "read";
field public static final String PLMN = "plmn";
field public static final String SERIAL_NUMBER = "serial_number";
field public static final String SERVICE_CATEGORY = "service_category";
}
public final class TimeZoneRulesDataContract { public final class TimeZoneRulesDataContract {
field public static final String AUTHORITY = "com.android.timezone"; field public static final String AUTHORITY = "com.android.timezone";
} }
@@ -7934,7 +7958,125 @@ package android.telephony {
field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1 field public static final int ROAMING_TYPE_UNKNOWN = 1; // 0x1
} }
public final class SmsCbCmasInfo implements android.os.Parcelable {
ctor public SmsCbCmasInfo(int, int, int, int, int, int);
method public int describeContents();
method public int getCategory();
method public int getCertainty();
method public int getMessageClass();
method public int getResponseType();
method public int getSeverity();
method public int getUrgency();
method public void writeToParcel(android.os.Parcel, int);
field public static final int CMAS_CATEGORY_CBRNE = 10; // 0xa
field public static final int CMAS_CATEGORY_ENV = 7; // 0x7
field public static final int CMAS_CATEGORY_FIRE = 5; // 0x5
field public static final int CMAS_CATEGORY_GEO = 0; // 0x0
field public static final int CMAS_CATEGORY_HEALTH = 6; // 0x6
field public static final int CMAS_CATEGORY_INFRA = 9; // 0x9
field public static final int CMAS_CATEGORY_MET = 1; // 0x1
field public static final int CMAS_CATEGORY_OTHER = 11; // 0xb
field public static final int CMAS_CATEGORY_RESCUE = 4; // 0x4
field public static final int CMAS_CATEGORY_SAFETY = 2; // 0x2
field public static final int CMAS_CATEGORY_SECURITY = 3; // 0x3
field public static final int CMAS_CATEGORY_TRANSPORT = 8; // 0x8
field public static final int CMAS_CATEGORY_UNKNOWN = -1; // 0xffffffff
field public static final int CMAS_CERTAINTY_LIKELY = 1; // 0x1
field public static final int CMAS_CERTAINTY_OBSERVED = 0; // 0x0
field public static final int CMAS_CERTAINTY_UNKNOWN = -1; // 0xffffffff
field public static final int CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY = 3; // 0x3
field public static final int CMAS_CLASS_CMAS_EXERCISE = 5; // 0x5
field public static final int CMAS_CLASS_EXTREME_THREAT = 1; // 0x1
field public static final int CMAS_CLASS_OPERATOR_DEFINED_USE = 6; // 0x6
field public static final int CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT = 0; // 0x0
field public static final int CMAS_CLASS_REQUIRED_MONTHLY_TEST = 4; // 0x4
field public static final int CMAS_CLASS_SEVERE_THREAT = 2; // 0x2
field public static final int CMAS_CLASS_UNKNOWN = -1; // 0xffffffff
field public static final int CMAS_RESPONSE_TYPE_ASSESS = 6; // 0x6
field public static final int CMAS_RESPONSE_TYPE_AVOID = 5; // 0x5
field public static final int CMAS_RESPONSE_TYPE_EVACUATE = 1; // 0x1
field public static final int CMAS_RESPONSE_TYPE_EXECUTE = 3; // 0x3
field public static final int CMAS_RESPONSE_TYPE_MONITOR = 4; // 0x4
field public static final int CMAS_RESPONSE_TYPE_NONE = 7; // 0x7
field public static final int CMAS_RESPONSE_TYPE_PREPARE = 2; // 0x2
field public static final int CMAS_RESPONSE_TYPE_SHELTER = 0; // 0x0
field public static final int CMAS_RESPONSE_TYPE_UNKNOWN = -1; // 0xffffffff
field public static final int CMAS_SEVERITY_EXTREME = 0; // 0x0
field public static final int CMAS_SEVERITY_SEVERE = 1; // 0x1
field public static final int CMAS_SEVERITY_UNKNOWN = -1; // 0xffffffff
field public static final int CMAS_URGENCY_EXPECTED = 1; // 0x1
field public static final int CMAS_URGENCY_IMMEDIATE = 0; // 0x0
field public static final int CMAS_URGENCY_UNKNOWN = -1; // 0xffffffff
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbCmasInfo> CREATOR;
}
public final class SmsCbEtwsInfo implements android.os.Parcelable {
ctor public SmsCbEtwsInfo(int, boolean, boolean, boolean, @Nullable byte[]);
method public int describeContents();
method @Nullable public byte[] getPrimaryNotificationSignature();
method public long getPrimaryNotificationTimestamp();
method public int getWarningType();
method public boolean isEmergencyUserAlert();
method public boolean isPopupAlert();
method public boolean isPrimary();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbEtwsInfo> CREATOR;
field public static final int ETWS_WARNING_TYPE_EARTHQUAKE = 0; // 0x0
field public static final int ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI = 2; // 0x2
field public static final int ETWS_WARNING_TYPE_OTHER_EMERGENCY = 4; // 0x4
field public static final int ETWS_WARNING_TYPE_TEST_MESSAGE = 3; // 0x3
field public static final int ETWS_WARNING_TYPE_TSUNAMI = 1; // 0x1
field public static final int ETWS_WARNING_TYPE_UNKNOWN = -1; // 0xffffffff
}
public final class SmsCbLocation implements android.os.Parcelable {
method public int describeContents();
method public int getCid();
method public int getLac();
method @NonNull public String getPlmn();
method public boolean isInLocationArea(@NonNull android.telephony.SmsCbLocation);
method public boolean isInLocationArea(@Nullable String, int, int);
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbLocation> CREATOR;
}
public final class SmsCbMessage implements android.os.Parcelable {
ctor public SmsCbMessage(int, int, int, @NonNull android.telephony.SmsCbLocation, int, @Nullable String, @Nullable String, int, @Nullable android.telephony.SmsCbEtwsInfo, @Nullable android.telephony.SmsCbCmasInfo);
method @NonNull public static android.telephony.SmsCbMessage createFromCursor(@NonNull android.database.Cursor);
method public int describeContents();
method @Nullable public android.telephony.SmsCbCmasInfo getCmasWarningInfo();
method @NonNull public android.content.ContentValues getContentValues();
method @Nullable public android.telephony.SmsCbEtwsInfo getEtwsWarningInfo();
method public int getGeographicalScope();
method @Nullable public String getLanguageCode();
method @NonNull public android.telephony.SmsCbLocation getLocation();
method @Nullable public String getMessageBody();
method public int getMessageFormat();
method public int getMessagePriority();
method public long getReceivedTime();
method public int getSerialNumber();
method public int getServiceCategory();
method public boolean isCmasMessage();
method public boolean isEmergencyMessage();
method public boolean isEtwsMessage();
method public boolean needGeoFencingCheck();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.SmsCbMessage> CREATOR;
field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3; // 0x3
field public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0; // 0x0
field public static final int GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE = 2; // 0x2
field public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1; // 0x1
field public static final int MESSAGE_FORMAT_3GPP = 1; // 0x1
field public static final int MESSAGE_FORMAT_3GPP2 = 2; // 0x2
field public static final int MESSAGE_PRIORITY_EMERGENCY = 3; // 0x3
field public static final int MESSAGE_PRIORITY_INTERACTIVE = 1; // 0x1
field public static final int MESSAGE_PRIORITY_NORMAL = 0; // 0x0
field public static final int MESSAGE_PRIORITY_URGENT = 2; // 0x2
}
public final class SmsManager { public final class SmsManager {
method public boolean disableCellBroadcastRange(int, int, int);
method public boolean enableCellBroadcastRange(int, int, int);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void sendMultipartTextMessageWithoutPersisting(String, String, java.util.List<java.lang.String>, java.util.List<android.app.PendingIntent>, java.util.List<android.app.PendingIntent>); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void sendMultipartTextMessageWithoutPersisting(String, String, java.util.List<java.lang.String>, java.util.List<android.app.PendingIntent>, java.util.List<android.app.PendingIntent>);
field public static final int RESULT_CANCELLED = 23; // 0x17 field public static final int RESULT_CANCELLED = 23; // 0x17
field public static final int RESULT_ENCODING_ERROR = 18; // 0x12 field public static final int RESULT_ENCODING_ERROR = 18; // 0x12
@@ -7964,6 +8106,7 @@ package android.telephony {
public class SubscriptionManager { public class SubscriptionManager {
method public java.util.List<android.telephony.SubscriptionInfo> getAvailableSubscriptionInfoList(); method public java.util.List<android.telephony.SubscriptionInfo> getAvailableSubscriptionInfoList();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEnabledSubscriptionId(int); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getEnabledSubscriptionId(int);
method @NonNull public static android.content.res.Resources getResourcesForSubId(@NonNull android.content.Context, int);
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isSubscriptionEnabled(int); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isSubscriptionEnabled(int);
method public void requestEmbeddedSubscriptionInfoListRefresh(); method public void requestEmbeddedSubscriptionInfoListRefresh();
method public void requestEmbeddedSubscriptionInfoListRefresh(int); method public void requestEmbeddedSubscriptionInfoListRefresh(int);

View File

@@ -591,30 +591,6 @@ Landroid/telephony/ims/compat/stub/ImsUtListenerImplBase;-><init>()V
Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V Landroid/telephony/mbms/IMbmsStreamingSessionCallback$Stub;-><init>()V
Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()V Landroid/telephony/mbms/IStreamingServiceCallback$Stub;-><init>()V
Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService; Landroid/telephony/mbms/vendor/IMbmsStreamingService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/telephony/mbms/vendor/IMbmsStreamingService;
Landroid/telephony/SmsCbCmasInfo;->getCategory()I
Landroid/telephony/SmsCbCmasInfo;->getCertainty()I
Landroid/telephony/SmsCbCmasInfo;->getMessageClass()I
Landroid/telephony/SmsCbCmasInfo;->getResponseType()I
Landroid/telephony/SmsCbCmasInfo;->getSeverity()I
Landroid/telephony/SmsCbCmasInfo;->getUrgency()I
Landroid/telephony/SmsCbEtwsInfo;->getWarningType()I
Landroid/telephony/SmsCbLocation;-><init>(Ljava/lang/String;)V
Landroid/telephony/SmsCbLocation;-><init>(Ljava/lang/String;II)V
Landroid/telephony/SmsCbLocation;->getCid()I
Landroid/telephony/SmsCbLocation;->getLac()I
Landroid/telephony/SmsCbLocation;->getPlmn()Ljava/lang/String;
Landroid/telephony/SmsCbMessage;-><init>(Landroid/os/Parcel;)V
Landroid/telephony/SmsCbMessage;->getCmasWarningInfo()Landroid/telephony/SmsCbCmasInfo;
Landroid/telephony/SmsCbMessage;->getEtwsWarningInfo()Landroid/telephony/SmsCbEtwsInfo;
Landroid/telephony/SmsCbMessage;->getGeographicalScope()I
Landroid/telephony/SmsCbMessage;->getLanguageCode()Ljava/lang/String;
Landroid/telephony/SmsCbMessage;->getLocation()Landroid/telephony/SmsCbLocation;
Landroid/telephony/SmsCbMessage;->getMessageBody()Ljava/lang/String;
Landroid/telephony/SmsCbMessage;->getMessageFormat()I
Landroid/telephony/SmsCbMessage;->getSerialNumber()I
Landroid/telephony/SmsCbMessage;->getServiceCategory()I
Landroid/telephony/SmsCbMessage;->isCmasMessage()Z
Landroid/telephony/SmsCbMessage;->isEmergencyMessage()Z
Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants; Landroid/telephony/TelephonyManager$MultiSimVariants;->values()[Landroid/telephony/TelephonyManager$MultiSimVariants;
Landroid/util/Singleton;-><init>()V Landroid/util/Singleton;-><init>()V
Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/view/accessibility/IAccessibilityManager$Stub$Proxy;-><init>(Landroid/os/IBinder;)V

View File

@@ -3909,9 +3909,10 @@ public final class Telephony {
} }
/** /**
* Contains received SMS cell broadcast messages. * Contains received SMS cell broadcast messages. More details are available in 3GPP TS 23.041.
* @hide * @hide
*/ */
@SystemApi
public static final class CellBroadcasts implements BaseColumns { public static final class CellBroadcasts implements BaseColumns {
/** /**
@@ -3923,30 +3924,52 @@ public final class Telephony {
/** /**
* The {@code content://} URI for this table. * The {@code content://} URI for this table.
*/ */
@NonNull
public static final Uri CONTENT_URI = Uri.parse("content://cellbroadcasts"); public static final Uri CONTENT_URI = Uri.parse("content://cellbroadcasts");
/** /**
* Message geographical scope. * Message geographical scope. Valid values are:
* <ul>
* <li>{@link android.telephony.SmsCbMessage#GEOGRAPHICAL_SCOPE_CELL_WIDE}. meaning the
* message is for the radio service cell</li>
* <li>{@link android.telephony.SmsCbMessage#GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE},
* meaning the message is for the radio service cell and immediately displayed</li>
* <li>{@link android.telephony.SmsCbMessage#GEOGRAPHICAL_SCOPE_PLMN_WIDE}, meaning the
* message is for the PLMN (i.e. MCC/MNC)</li>
* <li>{@link android.telephony.SmsCbMessage#GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE},
* meaning the message is for the location area (in GSM) or service area (in UMTS)</li>
* </ul>
*
* <p>A message meant for a particular scope is automatically dismissed when the device
* exits that scope.</p>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String GEOGRAPHICAL_SCOPE = "geo_scope"; public static final String GEOGRAPHICAL_SCOPE = "geo_scope";
/** /**
* Message serial number. * Message serial number.
* <p>
* A 16-bit integer which identifies a particular CBS (cell
* broadcast short message service) message. The core network is responsible for
* allocating this value, and the value may be managed cyclically (3GPP TS 23.041 section
* 9.2.1) once the serial message has been incremented a sufficient number of times.
* </p>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String SERIAL_NUMBER = "serial_number"; public static final String SERIAL_NUMBER = "serial_number";
/** /**
* PLMN of broadcast sender. {@code SERIAL_NUMBER + PLMN + LAC + CID} uniquely identifies * PLMN (i.e. MCC/MNC) of broadcast sender. {@code SERIAL_NUMBER + PLMN + LAC + CID}
* a broadcast for duplicate detection purposes. * uniquely identifies a broadcast for duplicate detection purposes.
* <P>Type: TEXT</P> * <P>Type: TEXT</P>
*/ */
public static final String PLMN = "plmn"; public static final String PLMN = "plmn";
/** /**
* Location Area (GSM) or Service Area (UMTS) of broadcast sender. Unused for CDMA. * Location area code (LAC).
* Only included if Geographical Scope of message is not PLMN wide (01). * <p>Code representing location area (GSM) or service area (UMTS) of broadcast sender.
* Unused for CDMA. Only included if Geographical Scope of message is not PLMN wide (01).
* This value is sent by the network based on the cell tower.
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String LAC = "lac"; public static final String LAC = "lac";
@@ -3961,23 +3984,29 @@ public final class Telephony {
/** /**
* Message code. <em>OBSOLETE: merged into SERIAL_NUMBER.</em> * Message code. <em>OBSOLETE: merged into SERIAL_NUMBER.</em>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
* @hide
*/ */
public static final String V1_MESSAGE_CODE = "message_code"; public static final String V1_MESSAGE_CODE = "message_code";
/** /**
* Message identifier. <em>OBSOLETE: renamed to SERVICE_CATEGORY.</em> * Message identifier. <em>OBSOLETE: renamed to SERVICE_CATEGORY.</em>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
* @hide
*/ */
public static final String V1_MESSAGE_IDENTIFIER = "message_id"; public static final String V1_MESSAGE_IDENTIFIER = "message_id";
/** /**
* Service category (GSM/UMTS: message identifier; CDMA: service category). * Service category which represents the general topic of the message.
* <p>
* For GSM/UMTS: message identifier (see 3GPP TS 23.041 section 9.4.1.2.2)
* For CDMA: a 16-bit CDMA service category (see 3GPP2 C.R1001-D section 9.3)
* </p>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String SERVICE_CATEGORY = "service_category"; public static final String SERVICE_CATEGORY = "service_category";
/** /**
* Message language code. * Message language code. (See 3GPP TS 23.041 section 9.4.1.2.3 for details).
* <P>Type: TEXT</P> * <P>Type: TEXT</P>
*/ */
public static final String LANGUAGE_CODE = "language"; public static final String LANGUAGE_CODE = "language";
@@ -3990,6 +4019,7 @@ public final class Telephony {
/** /**
* Message delivery time. * Message delivery time.
* <p>This value is a system timestamp using {@link System#currentTimeMillis}</p>
* <P>Type: INTEGER (long)</P> * <P>Type: INTEGER (long)</P>
*/ */
public static final String DELIVERY_TIME = "date"; public static final String DELIVERY_TIME = "date";
@@ -4001,25 +4031,36 @@ public final class Telephony {
public static final String MESSAGE_READ = "read"; public static final String MESSAGE_READ = "read";
/** /**
* Message format (3GPP or 3GPP2). * Message format ({@link android.telephony.SmsCbMessage#MESSAGE_FORMAT_3GPP} or
* {@link android.telephony.SmsCbMessage#MESSAGE_FORMAT_3GPP2}).
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String MESSAGE_FORMAT = "format"; public static final String MESSAGE_FORMAT = "format";
/** /**
* Message priority (including emergency). * Message priority.
* <p>This includes
* <ul>
* <li>{@link android.telephony.SmsCbMessage#MESSAGE_PRIORITY_NORMAL}</li>
* <li>{@link android.telephony.SmsCbMessage#MESSAGE_PRIORITY_INTERACTIVE}</li>
* <li>{@link android.telephony.SmsCbMessage#MESSAGE_PRIORITY_URGENT}</li>
* <li>{@link android.telephony.SmsCbMessage#MESSAGE_PRIORITY_EMERGENCY}</li>
* </p>
* </ul>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String MESSAGE_PRIORITY = "priority"; public static final String MESSAGE_PRIORITY = "priority";
/** /**
* ETWS warning type (ETWS alerts only). * ETWS (Earthquake and Tsunami Warning System) warning type (ETWS alerts only).
* <p>See {@link android.telephony.SmsCbEtwsInfo}</p>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String ETWS_WARNING_TYPE = "etws_warning_type"; public static final String ETWS_WARNING_TYPE = "etws_warning_type";
/** /**
* CMAS message class (CMAS alerts only). * CMAS (Commercial Mobile Alert System) message class (CMAS alerts only).
* <p>See {@link android.telephony.SmsCbCmasInfo}</p>
* <P>Type: INTEGER</P> * <P>Type: INTEGER</P>
*/ */
public static final String CMAS_MESSAGE_CLASS = "cmas_message_class"; public static final String CMAS_MESSAGE_CLASS = "cmas_message_class";
@@ -4060,12 +4101,14 @@ public final class Telephony {
/** /**
* The timestamp in millisecond of when the device received the message. * The timestamp in millisecond of when the device received the message.
* <P>Type: BIGINT</P> * <P>Type: BIGINT</P>
* @hide
*/ */
public static final String RECEIVED_TIME = "received_time"; public static final String RECEIVED_TIME = "received_time";
/** /**
* Indicates that whether the message has been broadcasted to the application. * Indicates that whether the message has been broadcasted to the application.
* <P>Type: BOOLEAN</P> * <P>Type: BOOLEAN</P>
* @hide
*/ */
public static final String MESSAGE_BROADCASTED = "message_broadcasted"; public static final String MESSAGE_BROADCASTED = "message_broadcasted";
@@ -4101,12 +4144,15 @@ public final class Telephony {
* "circle|0,0|100;polygon|0,0|0,1.5|1,1|1,0;circle|100.123,100|200.123" * "circle|0,0|100;polygon|0,0|0,1.5|1,1|1,0;circle|100.123,100|200.123"
* *
* <P>Type: TEXT</P> * <P>Type: TEXT</P>
* @hide
*/ */
public static final String GEOMETRIES = "geometries"; public static final String GEOMETRIES = "geometries";
/** /**
* Query columns for instantiating {@link android.telephony.CellBroadcastMessage} objects. * Query columns for instantiating {@link android.telephony.CellBroadcastMessage} objects.
* @hide
*/ */
@NonNull
public static final String[] QUERY_COLUMNS = { public static final String[] QUERY_COLUMNS = {
_ID, _ID,
GEOGRAPHICAL_SCOPE, GEOGRAPHICAL_SCOPE,
@@ -4132,6 +4178,7 @@ public final class Telephony {
/** /**
* Query columns for instantiating {@link android.telephony.SmsCbMessage} objects. * Query columns for instantiating {@link android.telephony.SmsCbMessage} objects.
* @hide
*/ */
public static final String[] QUERY_COLUMNS_FWK = { public static final String[] QUERY_COLUMNS_FWK = {
_ID, _ID,

View File

@@ -369,15 +369,16 @@ public class ServiceState implements Parcelable {
/** /**
* Create a new ServiceState from a intent notifier Bundle * Create a new ServiceState from a intent notifier Bundle
* *
* This method is used by PhoneStateIntentReceiver and maybe by * This method is used by PhoneStateIntentReceiver, CellBroadcastReceiver, and maybe by
* external applications. * external applications.
* *
* @param m Bundle from intent notifier * @param m Bundle from intent notifier
* @return newly created ServiceState * @return newly created ServiceState
* @hide * @hide
*/ */
@NonNull
@UnsupportedAppUsage @UnsupportedAppUsage
public static ServiceState newFromBundle(Bundle m) { public static ServiceState newFromBundle(@NonNull Bundle m) {
ServiceState ret; ServiceState ret;
ret = new ServiceState(); ret = new ServiceState();
ret.setFromNotifierBundle(m); ret.setFromNotifierBundle(m);

View File

@@ -16,17 +16,25 @@
package android.telephony; package android.telephony;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** /**
* Contains CMAS warning notification Type 1 elements for a {@link SmsCbMessage}. * Contains CMAS (Commercial Mobile Alert System) warning notification Type 1 elements for a
* {@link SmsCbMessage}.
* Supported values for each element are defined in TIA-1149-0-1 (CMAS over CDMA) and * Supported values for each element are defined in TIA-1149-0-1 (CMAS over CDMA) and
* 3GPP TS 23.041 (for GSM/UMTS). * 3GPP TS 23.041 (for GSM/UMTS).
* *
* {@hide} * {@hide}
*/ */
public class SmsCbCmasInfo implements Parcelable { @SystemApi
public final class SmsCbCmasInfo implements Parcelable {
// CMAS message class (in GSM/UMTS message identifier or CDMA service category). // CMAS message class (in GSM/UMTS message identifier or CDMA service category).
@@ -54,6 +62,21 @@ public class SmsCbCmasInfo implements Parcelable {
/** CMAS category for warning types that are reserved for future extension. */ /** CMAS category for warning types that are reserved for future extension. */
public static final int CMAS_CLASS_UNKNOWN = -1; public static final int CMAS_CLASS_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_CLASS_"},
value = {
CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT,
CMAS_CLASS_EXTREME_THREAT,
CMAS_CLASS_SEVERE_THREAT,
CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY,
CMAS_CLASS_REQUIRED_MONTHLY_TEST,
CMAS_CLASS_CMAS_EXERCISE,
CMAS_CLASS_OPERATOR_DEFINED_USE,
CMAS_CLASS_UNKNOWN,
})
public @interface Class {}
// CMAS alert category (in CDMA type 1 elements record). // CMAS alert category (in CDMA type 1 elements record).
/** CMAS alert category: Geophysical including landslide. */ /** CMAS alert category: Geophysical including landslide. */
@@ -98,6 +121,26 @@ public class SmsCbCmasInfo implements Parcelable {
*/ */
public static final int CMAS_CATEGORY_UNKNOWN = -1; public static final int CMAS_CATEGORY_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_CATEORY_"},
value = {
CMAS_CATEGORY_GEO,
CMAS_CATEGORY_MET,
CMAS_CATEGORY_SAFETY,
CMAS_CATEGORY_SECURITY,
CMAS_CATEGORY_RESCUE,
CMAS_CATEGORY_FIRE,
CMAS_CATEGORY_HEALTH,
CMAS_CATEGORY_ENV,
CMAS_CATEGORY_TRANSPORT,
CMAS_CATEGORY_INFRA,
CMAS_CATEGORY_CBRNE,
CMAS_CATEGORY_OTHER,
CMAS_CATEGORY_UNKNOWN,
})
public @interface Category {}
// CMAS response type (in CDMA type 1 elements record). // CMAS response type (in CDMA type 1 elements record).
/** CMAS response type: Take shelter in place. */ /** CMAS response type: Take shelter in place. */
@@ -130,6 +173,22 @@ public class SmsCbCmasInfo implements Parcelable {
*/ */
public static final int CMAS_RESPONSE_TYPE_UNKNOWN = -1; public static final int CMAS_RESPONSE_TYPE_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_RESPONSE_TYPE_"},
value = {
CMAS_RESPONSE_TYPE_SHELTER,
CMAS_RESPONSE_TYPE_EVACUATE,
CMAS_RESPONSE_TYPE_PREPARE,
CMAS_RESPONSE_TYPE_EXECUTE,
CMAS_RESPONSE_TYPE_MONITOR,
CMAS_RESPONSE_TYPE_AVOID,
CMAS_RESPONSE_TYPE_ASSESS,
CMAS_RESPONSE_TYPE_NONE,
CMAS_RESPONSE_TYPE_UNKNOWN,
})
public @interface ResponseType {}
// 4-bit CMAS severity (in GSM/UMTS message identifier or CDMA type 1 elements record). // 4-bit CMAS severity (in GSM/UMTS message identifier or CDMA type 1 elements record).
/** CMAS severity type: Extraordinary threat to life or property. */ /** CMAS severity type: Extraordinary threat to life or property. */
@@ -145,6 +204,16 @@ public class SmsCbCmasInfo implements Parcelable {
*/ */
public static final int CMAS_SEVERITY_UNKNOWN = -1; public static final int CMAS_SEVERITY_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_SEVERITY_"},
value = {
CMAS_SEVERITY_EXTREME,
CMAS_SEVERITY_SEVERE,
CMAS_SEVERITY_UNKNOWN,
})
public @interface Severity {}
// CMAS urgency (in GSM/UMTS message identifier or CDMA type 1 elements record). // CMAS urgency (in GSM/UMTS message identifier or CDMA type 1 elements record).
/** CMAS urgency type: Responsive action should be taken immediately. */ /** CMAS urgency type: Responsive action should be taken immediately. */
@@ -160,6 +229,16 @@ public class SmsCbCmasInfo implements Parcelable {
*/ */
public static final int CMAS_URGENCY_UNKNOWN = -1; public static final int CMAS_URGENCY_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_URGENCY_"},
value = {
CMAS_URGENCY_IMMEDIATE,
CMAS_URGENCY_EXPECTED,
CMAS_URGENCY_UNKNOWN,
})
public @interface Urgency {}
// CMAS certainty (in GSM/UMTS message identifier or CDMA type 1 elements record). // CMAS certainty (in GSM/UMTS message identifier or CDMA type 1 elements record).
/** CMAS certainty type: Determined to have occurred or to be ongoing. */ /** CMAS certainty type: Determined to have occurred or to be ongoing. */
@@ -175,27 +254,38 @@ public class SmsCbCmasInfo implements Parcelable {
*/ */
public static final int CMAS_CERTAINTY_UNKNOWN = -1; public static final int CMAS_CERTAINTY_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"CMAS_CERTAINTY_"},
value = {
CMAS_CERTAINTY_OBSERVED,
CMAS_CERTAINTY_LIKELY,
CMAS_CERTAINTY_UNKNOWN,
})
public @interface Certainty {}
/** CMAS message class. */ /** CMAS message class. */
private final int mMessageClass; private final @Class int mMessageClass;
/** CMAS category. */ /** CMAS category. */
private final int mCategory; private final @Category int mCategory;
/** CMAS response type. */ /** CMAS response type. */
private final int mResponseType; private final @ResponseType int mResponseType;
/** CMAS severity. */ /** CMAS severity. */
private final int mSeverity; private final @Severity int mSeverity;
/** CMAS urgency. */ /** CMAS urgency. */
private final int mUrgency; private final @Urgency int mUrgency;
/** CMAS certainty. */ /** CMAS certainty. */
private final int mCertainty; private final @Certainty int mCertainty;
/** Create a new SmsCbCmasInfo object with the specified values. */ /** Create a new SmsCbCmasInfo object with the specified values. */
public SmsCbCmasInfo(int messageClass, int category, int responseType, int severity, public SmsCbCmasInfo(@Class int messageClass, @Category int category,
int urgency, int certainty) { @ResponseType int responseType,
@Severity int severity, @Urgency int urgency, @Certainty int certainty) {
mMessageClass = messageClass; mMessageClass = messageClass;
mCategory = category; mCategory = category;
mResponseType = responseType; mResponseType = responseType;
@@ -234,7 +324,7 @@ public class SmsCbCmasInfo implements Parcelable {
* Returns the CMAS message class, e.g. {@link #CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT}. * Returns the CMAS message class, e.g. {@link #CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT}.
* @return one of the {@code CMAS_CLASS} values * @return one of the {@code CMAS_CLASS} values
*/ */
public int getMessageClass() { public @Class int getMessageClass() {
return mMessageClass; return mMessageClass;
} }
@@ -242,7 +332,7 @@ public class SmsCbCmasInfo implements Parcelable {
* Returns the CMAS category, e.g. {@link #CMAS_CATEGORY_GEO}. * Returns the CMAS category, e.g. {@link #CMAS_CATEGORY_GEO}.
* @return one of the {@code CMAS_CATEGORY} values * @return one of the {@code CMAS_CATEGORY} values
*/ */
public int getCategory() { public @Category int getCategory() {
return mCategory; return mCategory;
} }
@@ -250,7 +340,7 @@ public class SmsCbCmasInfo implements Parcelable {
* Returns the CMAS response type, e.g. {@link #CMAS_RESPONSE_TYPE_SHELTER}. * Returns the CMAS response type, e.g. {@link #CMAS_RESPONSE_TYPE_SHELTER}.
* @return one of the {@code CMAS_RESPONSE_TYPE} values * @return one of the {@code CMAS_RESPONSE_TYPE} values
*/ */
public int getResponseType() { public @ResponseType int getResponseType() {
return mResponseType; return mResponseType;
} }
@@ -258,7 +348,7 @@ public class SmsCbCmasInfo implements Parcelable {
* Returns the CMAS severity, e.g. {@link #CMAS_SEVERITY_EXTREME}. * Returns the CMAS severity, e.g. {@link #CMAS_SEVERITY_EXTREME}.
* @return one of the {@code CMAS_SEVERITY} values * @return one of the {@code CMAS_SEVERITY} values
*/ */
public int getSeverity() { public @Severity int getSeverity() {
return mSeverity; return mSeverity;
} }
@@ -266,15 +356,16 @@ public class SmsCbCmasInfo implements Parcelable {
* Returns the CMAS urgency, e.g. {@link #CMAS_URGENCY_IMMEDIATE}. * Returns the CMAS urgency, e.g. {@link #CMAS_URGENCY_IMMEDIATE}.
* @return one of the {@code CMAS_URGENCY} values * @return one of the {@code CMAS_URGENCY} values
*/ */
public int getUrgency() { public @Urgency int getUrgency() {
return mUrgency; return mUrgency;
} }
/** /**
* Returns the CMAS certainty, e.g. {@link #CMAS_CERTAINTY_OBSERVED}. * Returns the CMAS certainty, e.g. {@link #CMAS_CERTAINTY_OBSERVED}.
*
* @return one of the {@code CMAS_CERTAINTY} values * @return one of the {@code CMAS_CERTAINTY} values
*/ */
public int getCertainty() { public @Certainty int getCertainty() {
return mCertainty; return mCertainty;
} }
@@ -287,6 +378,7 @@ public class SmsCbCmasInfo implements Parcelable {
/** /**
* Describe the kinds of special objects contained in the marshalled representation. * Describe the kinds of special objects contained in the marshalled representation.
*
* @return a bitmask indicating this Parcelable contains no special objects * @return a bitmask indicating this Parcelable contains no special objects
*/ */
@Override @Override
@@ -295,8 +387,9 @@ public class SmsCbCmasInfo implements Parcelable {
} }
/** Creator for unparcelling objects. */ /** Creator for unparcelling objects. */
public static final Parcelable.Creator<SmsCbCmasInfo> @NonNull
CREATOR = new Parcelable.Creator<SmsCbCmasInfo>() { public static final Parcelable.Creator<SmsCbCmasInfo> CREATOR =
new Parcelable.Creator<SmsCbCmasInfo>() {
@Override @Override
public SmsCbCmasInfo createFromParcel(Parcel in) { public SmsCbCmasInfo createFromParcel(Parcel in) {
return new SmsCbCmasInfo(in); return new SmsCbCmasInfo(in);

View File

@@ -16,22 +16,29 @@
package android.telephony; package android.telephony;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.IccUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneOffset; import java.time.ZoneOffset;
import java.util.Arrays; import java.util.Arrays;
/** /**
* Contains information elements for a GSM or UMTS ETWS warning notification. * Contains information elements for a GSM or UMTS ETWS (Earthquake and Tsunami Warning
* Supported values for each element are defined in 3GPP TS 23.041. * System) warning notification. Supported values for each element are defined in 3GPP TS 23.041.
* *
* {@hide} * {@hide}
*/ */
public class SmsCbEtwsInfo implements Parcelable { @SystemApi
public final class SmsCbEtwsInfo implements Parcelable {
/** ETWS warning type for earthquake. */ /** ETWS warning type for earthquake. */
public static final int ETWS_WARNING_TYPE_EARTHQUAKE = 0x00; public static final int ETWS_WARNING_TYPE_EARTHQUAKE = 0x00;
@@ -51,17 +58,30 @@ public class SmsCbEtwsInfo implements Parcelable {
/** Unknown ETWS warning type. */ /** Unknown ETWS warning type. */
public static final int ETWS_WARNING_TYPE_UNKNOWN = -1; public static final int ETWS_WARNING_TYPE_UNKNOWN = -1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = {"ETWS_WARNING_TYPE_"},
value = {
ETWS_WARNING_TYPE_EARTHQUAKE,
ETWS_WARNING_TYPE_TSUNAMI,
ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI,
ETWS_WARNING_TYPE_TEST_MESSAGE,
ETWS_WARNING_TYPE_OTHER_EMERGENCY,
ETWS_WARNING_TYPE_UNKNOWN,
})
public @interface WarningType {}
/** One of the ETWS warning type constants defined in this class. */ /** One of the ETWS warning type constants defined in this class. */
private final int mWarningType; private final @WarningType int mWarningType;
/** Whether or not to activate the emergency user alert tone and vibration. */ /** Whether or not to activate the emergency user alert tone and vibration. */
private final boolean mEmergencyUserAlert; private final boolean mIsEmergencyUserAlert;
/** Whether or not to activate a popup alert. */ /** Whether or not to activate a popup alert. */
private final boolean mActivatePopup; private final boolean mIsPopupAlert;
/** Whether ETWS primary message or not/ */ /** Whether ETWS primary message or not/ */
private final boolean mPrimary; private final boolean mIsPrimary;
/** /**
* 50-byte security information (ETWS primary notification for GSM only). As of Release 10, * 50-byte security information (ETWS primary notification for GSM only). As of Release 10,
@@ -70,24 +90,35 @@ public class SmsCbEtwsInfo implements Parcelable {
* parceled with the broadcast intent if present, but the timestamp is only computed if an * parceled with the broadcast intent if present, but the timestamp is only computed if an
* application asks for the individual components. * application asks for the individual components.
*/ */
@Nullable
private final byte[] mWarningSecurityInformation; private final byte[] mWarningSecurityInformation;
/** Create a new SmsCbEtwsInfo object with the specified values. */ /**
public SmsCbEtwsInfo(int warningType, boolean emergencyUserAlert, boolean activatePopup, * Create a new SmsCbEtwsInfo object with the specified values.
boolean primary, byte[] warningSecurityInformation) { * @param warningType the type of ETWS warning
* @param isEmergencyUserAlert whether the warning is an emergency alert, which will activate
* the user alert tone and vibration
* @param isPopupAlert whether the warning will activate a popup alert
* @param isPrimary whether this is an ETWS primary message
* @param warningSecurityInformation 50-byte security information (for primary notifications
* on GSM only).
*/
public SmsCbEtwsInfo(@WarningType int warningType, boolean isEmergencyUserAlert,
boolean isPopupAlert,
boolean isPrimary, @Nullable byte[] warningSecurityInformation) {
mWarningType = warningType; mWarningType = warningType;
mEmergencyUserAlert = emergencyUserAlert; mIsEmergencyUserAlert = isEmergencyUserAlert;
mActivatePopup = activatePopup; mIsPopupAlert = isPopupAlert;
mPrimary = primary; mIsPrimary = isPrimary;
mWarningSecurityInformation = warningSecurityInformation; mWarningSecurityInformation = warningSecurityInformation;
} }
/** Create a new SmsCbEtwsInfo object from a Parcel. */ /** Create a new SmsCbEtwsInfo object from a Parcel. */
SmsCbEtwsInfo(Parcel in) { SmsCbEtwsInfo(Parcel in) {
mWarningType = in.readInt(); mWarningType = in.readInt();
mEmergencyUserAlert = (in.readInt() != 0); mIsEmergencyUserAlert = (in.readInt() != 0);
mActivatePopup = (in.readInt() != 0); mIsPopupAlert = (in.readInt() != 0);
mPrimary = (in.readInt() != 0); mIsPrimary = (in.readInt() != 0);
mWarningSecurityInformation = in.createByteArray(); mWarningSecurityInformation = in.createByteArray();
} }
@@ -100,9 +131,9 @@ public class SmsCbEtwsInfo implements Parcelable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mWarningType); dest.writeInt(mWarningType);
dest.writeInt(mEmergencyUserAlert ? 1 : 0); dest.writeInt(mIsEmergencyUserAlert ? 1 : 0);
dest.writeInt(mActivatePopup ? 1 : 0); dest.writeInt(mIsPopupAlert ? 1 : 0);
dest.writeInt(mPrimary ? 1 : 0); dest.writeInt(mIsPrimary ? 1 : 0);
dest.writeByteArray(mWarningSecurityInformation); dest.writeByteArray(mWarningSecurityInformation);
} }
@@ -110,16 +141,17 @@ public class SmsCbEtwsInfo implements Parcelable {
* Returns the ETWS warning type. * Returns the ETWS warning type.
* @return a warning type such as {@link #ETWS_WARNING_TYPE_EARTHQUAKE} * @return a warning type such as {@link #ETWS_WARNING_TYPE_EARTHQUAKE}
*/ */
public int getWarningType() { public @WarningType int getWarningType() {
return mWarningType; return mWarningType;
} }
/** /**
* Returns the ETWS emergency user alert flag. * Returns the ETWS emergency user alert flag. If the ETWS message is an emergency alert, it
* will activate an alert tone and vibration.
* @return true to notify terminal to activate emergency user alert; false otherwise * @return true to notify terminal to activate emergency user alert; false otherwise
*/ */
public boolean isEmergencyUserAlert() { public boolean isEmergencyUserAlert() {
return mEmergencyUserAlert; return mIsEmergencyUserAlert;
} }
/** /**
@@ -127,7 +159,7 @@ public class SmsCbEtwsInfo implements Parcelable {
* @return true to notify terminal to activate display popup; false otherwise * @return true to notify terminal to activate display popup; false otherwise
*/ */
public boolean isPopupAlert() { public boolean isPopupAlert() {
return mActivatePopup; return mIsPopupAlert;
} }
/** /**
@@ -135,7 +167,7 @@ public class SmsCbEtwsInfo implements Parcelable {
* @return true if the message is primary message, otherwise secondary message * @return true if the message is primary message, otherwise secondary message
*/ */
public boolean isPrimary() { public boolean isPrimary() {
return mPrimary; return mIsPrimary;
} }
/** /**
@@ -188,6 +220,7 @@ public class SmsCbEtwsInfo implements Parcelable {
* 3GPP TS 23.041 states that the UE shall ignore this value if received. * 3GPP TS 23.041 states that the UE shall ignore this value if received.
* @return a byte array containing a copy of the primary notification digital signature * @return a byte array containing a copy of the primary notification digital signature
*/ */
@Nullable
public byte[] getPrimaryNotificationSignature() { public byte[] getPrimaryNotificationSignature() {
if (mWarningSecurityInformation == null || mWarningSecurityInformation.length < 50) { if (mWarningSecurityInformation == null || mWarningSecurityInformation.length < 50) {
return null; return null;
@@ -198,7 +231,7 @@ public class SmsCbEtwsInfo implements Parcelable {
@Override @Override
public String toString() { public String toString() {
return "SmsCbEtwsInfo{warningType=" + mWarningType + ", emergencyUserAlert=" return "SmsCbEtwsInfo{warningType=" + mWarningType + ", emergencyUserAlert="
+ mEmergencyUserAlert + ", activatePopup=" + mActivatePopup + '}'; + mIsEmergencyUserAlert + ", activatePopup=" + mIsPopupAlert + '}';
} }
/** /**
@@ -211,6 +244,7 @@ public class SmsCbEtwsInfo implements Parcelable {
} }
/** Creator for unparcelling objects. */ /** Creator for unparcelling objects. */
@NonNull
public static final Creator<SmsCbEtwsInfo> CREATOR = new Creator<SmsCbEtwsInfo>() { public static final Creator<SmsCbEtwsInfo> CREATOR = new Creator<SmsCbEtwsInfo>() {
@Override @Override
public SmsCbEtwsInfo createFromParcel(Parcel in) { public SmsCbEtwsInfo createFromParcel(Parcel in) {

View File

@@ -16,6 +16,9 @@
package android.telephony; package android.telephony;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -27,9 +30,11 @@ import android.os.Parcelable;
* *
* @hide * @hide
*/ */
public class SmsCbLocation implements Parcelable { @SystemApi
public final class SmsCbLocation implements Parcelable {
/** The PLMN. Note that this field may be an empty string, but isn't allowed to be null. */ /** The PLMN. Note that this field may be an empty string. */
@NonNull
private final String mPlmn; private final String mPlmn;
private final int mLac; private final int mLac;
@@ -38,6 +43,7 @@ public class SmsCbLocation implements Parcelable {
/** /**
* Construct an empty location object. This is used for some test cases, and for * Construct an empty location object. This is used for some test cases, and for
* cell broadcasts saved in older versions of the database without location info. * cell broadcasts saved in older versions of the database without location info.
* @hide
*/ */
public SmsCbLocation() { public SmsCbLocation() {
mPlmn = ""; mPlmn = "";
@@ -48,6 +54,7 @@ public class SmsCbLocation implements Parcelable {
/** /**
* Construct a location object for the PLMN. This class is immutable, so * Construct a location object for the PLMN. This class is immutable, so
* the same object can be reused for multiple broadcasts. * the same object can be reused for multiple broadcasts.
* @hide
*/ */
public SmsCbLocation(String plmn) { public SmsCbLocation(String plmn) {
mPlmn = plmn; mPlmn = plmn;
@@ -58,6 +65,7 @@ public class SmsCbLocation implements Parcelable {
/** /**
* Construct a location object for the PLMN, LAC, and Cell ID. This class is immutable, so * Construct a location object for the PLMN, LAC, and Cell ID. This class is immutable, so
* the same object can be reused for multiple broadcasts. * the same object can be reused for multiple broadcasts.
* @hide
*/ */
public SmsCbLocation(String plmn, int lac, int cid) { public SmsCbLocation(String plmn, int lac, int cid) {
mPlmn = plmn; mPlmn = plmn;
@@ -67,6 +75,7 @@ public class SmsCbLocation implements Parcelable {
/** /**
* Initialize the object from a Parcel. * Initialize the object from a Parcel.
* @hide
*/ */
public SmsCbLocation(Parcel in) { public SmsCbLocation(Parcel in) {
mPlmn = in.readString(); mPlmn = in.readString();
@@ -78,6 +87,7 @@ public class SmsCbLocation implements Parcelable {
* Returns the MCC/MNC of the network as a String. * Returns the MCC/MNC of the network as a String.
* @return the PLMN identifier (MCC+MNC) as a String * @return the PLMN identifier (MCC+MNC) as a String
*/ */
@NonNull
public String getPlmn() { public String getPlmn() {
return mPlmn; return mPlmn;
} }
@@ -129,7 +139,7 @@ public class SmsCbLocation implements Parcelable {
* @param area the location area to compare with this location * @param area the location area to compare with this location
* @return true if this location is contained within the specified location area * @return true if this location is contained within the specified location area
*/ */
public boolean isInLocationArea(SmsCbLocation area) { public boolean isInLocationArea(@NonNull SmsCbLocation area) {
if (mCid != -1 && mCid != area.mCid) { if (mCid != -1 && mCid != area.mCid) {
return false; return false;
} }
@@ -147,7 +157,7 @@ public class SmsCbLocation implements Parcelable {
* @param cid the Cell ID to compare with * @param cid the Cell ID to compare with
* @return true if this location is contained within the specified PLMN, LAC, and Cell ID * @return true if this location is contained within the specified PLMN, LAC, and Cell ID
*/ */
public boolean isInLocationArea(String plmn, int lac, int cid) { public boolean isInLocationArea(@Nullable String plmn, int lac, int cid) {
if (!mPlmn.equals(plmn)) { if (!mPlmn.equals(plmn)) {
return false; return false;
} }
@@ -176,8 +186,9 @@ public class SmsCbLocation implements Parcelable {
dest.writeInt(mCid); dest.writeInt(mCid);
} }
public static final Parcelable.Creator<SmsCbLocation> CREATOR @NonNull
= new Parcelable.Creator<SmsCbLocation>() { public static final Parcelable.Creator<SmsCbLocation> CREATOR =
new Parcelable.Creator<SmsCbLocation>() {
@Override @Override
public SmsCbLocation createFromParcel(Parcel in) { public SmsCbLocation createFromParcel(Parcel in) {
return new SmsCbLocation(in); return new SmsCbLocation(in);

View File

@@ -16,7 +16,10 @@
package android.telephony; package android.telephony;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.content.ContentValues; import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import android.os.Parcel; import android.os.Parcel;
@@ -26,6 +29,8 @@ import android.provider.Telephony.CellBroadcasts;
import com.android.internal.telephony.CbGeoUtils; import com.android.internal.telephony.CbGeoUtils;
import com.android.internal.telephony.CbGeoUtils.Geometry; import com.android.internal.telephony.CbGeoUtils.Geometry;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List; import java.util.List;
/** /**
@@ -70,9 +75,11 @@ import java.util.List;
* *
* @hide * @hide
*/ */
public class SmsCbMessage implements Parcelable { @SystemApi
public final class SmsCbMessage implements Parcelable {
protected static final String LOG_TAG = "SMSCB"; /** @hide */
public static final String LOG_TAG = "SMSCB";
/** Cell wide geographical scope with immediate display (GSM/UMTS only). */ /** Cell wide geographical scope with immediate display (GSM/UMTS only). */
public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0; public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0;
@@ -81,17 +88,35 @@ public class SmsCbMessage implements Parcelable {
public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1; public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1;
/** Location / service area wide geographical scope (GSM/UMTS only). */ /** Location / service area wide geographical scope (GSM/UMTS only). */
public static final int GEOGRAPHICAL_SCOPE_LA_WIDE = 2; public static final int GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE = 2;
/** Cell wide geographical scope (GSM/UMTS only). */ /** Cell wide geographical scope (GSM/UMTS only). */
public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3; public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3;
/** @hide */
@IntDef(prefix = { "GEOGRAPHICAL_SCOPE_" }, value = {
GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE,
GEOGRAPHICAL_SCOPE_PLMN_WIDE,
GEOGRAPHICAL_SCOPE_LOCATION_AREA_WIDE,
GEOGRAPHICAL_SCOPE_CELL_WIDE,
})
@Retention(RetentionPolicy.SOURCE)
public @interface GeographicalScope {}
/** GSM or UMTS format cell broadcast. */ /** GSM or UMTS format cell broadcast. */
public static final int MESSAGE_FORMAT_3GPP = 1; public static final int MESSAGE_FORMAT_3GPP = 1;
/** CDMA format cell broadcast. */ /** CDMA format cell broadcast. */
public static final int MESSAGE_FORMAT_3GPP2 = 2; public static final int MESSAGE_FORMAT_3GPP2 = 2;
/** @hide */
@IntDef(prefix = { "MESSAGE_FORMAT_" }, value = {
MESSAGE_FORMAT_3GPP,
MESSAGE_FORMAT_3GPP2
})
@Retention(RetentionPolicy.SOURCE)
public @interface MessageFormat {}
/** Normal message priority. */ /** Normal message priority. */
public static final int MESSAGE_PRIORITY_NORMAL = 0; public static final int MESSAGE_PRIORITY_NORMAL = 0;
@@ -104,6 +129,16 @@ public class SmsCbMessage implements Parcelable {
/** Emergency message priority. */ /** Emergency message priority. */
public static final int MESSAGE_PRIORITY_EMERGENCY = 3; public static final int MESSAGE_PRIORITY_EMERGENCY = 3;
/** @hide */
@IntDef(prefix = { "MESSAGE_PRIORITY_" }, value = {
MESSAGE_PRIORITY_NORMAL,
MESSAGE_PRIORITY_INTERACTIVE,
MESSAGE_PRIORITY_URGENT,
MESSAGE_PRIORITY_EMERGENCY,
})
@Retention(RetentionPolicy.SOURCE)
public @interface MessagePriority {}
/** Format of this message (for interpretation of service category values). */ /** Format of this message (for interpretation of service category values). */
private final int mMessageFormat; private final int mMessageFormat;
@@ -123,6 +158,7 @@ public class SmsCbMessage implements Parcelable {
* message is not binary 01, the Location Area is included for comparison. If the GS is * message is not binary 01, the Location Area is included for comparison. If the GS is
* 00 or 11, the Cell ID is also included. LAC and Cell ID are -1 if not specified. * 00 or 11, the Cell ID is also included. LAC and Cell ID are -1 if not specified.
*/ */
@NonNull
private final SmsCbLocation mLocation; private final SmsCbLocation mLocation;
/** /**
@@ -133,18 +169,22 @@ public class SmsCbMessage implements Parcelable {
private final int mServiceCategory; private final int mServiceCategory;
/** Message language, as a two-character string, e.g. "en". */ /** Message language, as a two-character string, e.g. "en". */
@Nullable
private final String mLanguage; private final String mLanguage;
/** Message body, as a String. */ /** Message body, as a String. */
@Nullable
private final String mBody; private final String mBody;
/** Message priority (including emergency priority). */ /** Message priority (including emergency priority). */
private final int mPriority; private final int mPriority;
/** ETWS warning notification information (ETWS warnings only). */ /** ETWS warning notification information (ETWS warnings only). */
@Nullable
private final SmsCbEtwsInfo mEtwsWarningInfo; private final SmsCbEtwsInfo mEtwsWarningInfo;
/** CMAS warning notification information (CMAS warnings only). */ /** CMAS warning notification information (CMAS warnings only). */
@Nullable
private final SmsCbCmasInfo mCmasWarningInfo; private final SmsCbCmasInfo mCmasWarningInfo;
/** UNIX timestamp of when the message was received. */ /** UNIX timestamp of when the message was received. */
@@ -157,8 +197,9 @@ public class SmsCbMessage implements Parcelable {
* Create a new SmsCbMessage with the specified data. * Create a new SmsCbMessage with the specified data.
*/ */
public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber, public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber,
SmsCbLocation location, int serviceCategory, String language, String body, @NonNull SmsCbLocation location, int serviceCategory, @Nullable String language,
int priority, SmsCbEtwsInfo etwsWarningInfo, SmsCbCmasInfo cmasWarningInfo) { @Nullable String body, int priority, @Nullable SmsCbEtwsInfo etwsWarningInfo,
@Nullable SmsCbCmasInfo cmasWarningInfo) {
this(messageFormat, geographicalScope, serialNumber, location, serviceCategory, language, this(messageFormat, geographicalScope, serialNumber, location, serviceCategory, language,
body, priority, etwsWarningInfo, cmasWarningInfo, null /* geometries */, body, priority, etwsWarningInfo, cmasWarningInfo, null /* geometries */,
@@ -167,6 +208,7 @@ public class SmsCbMessage implements Parcelable {
/** /**
* Create a new {@link SmsCbMessage} with the warning area coordinates information. * Create a new {@link SmsCbMessage} with the warning area coordinates information.
* @hide
*/ */
public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber, public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber,
SmsCbLocation location, int serviceCategory, String language, String body, SmsCbLocation location, int serviceCategory, String language, String body,
@@ -186,8 +228,11 @@ public class SmsCbMessage implements Parcelable {
mGeometries = geometries; mGeometries = geometries;
} }
/** Create a new SmsCbMessage object from a Parcel. */ /**
public SmsCbMessage(Parcel in) { * Create a new SmsCbMessage object from a Parcel.
* @hide
*/
public SmsCbMessage(@NonNull Parcel in) {
mMessageFormat = in.readInt(); mMessageFormat = in.readInt();
mGeographicalScope = in.readInt(); mGeographicalScope = in.readInt();
mSerialNumber = in.readInt(); mSerialNumber = in.readInt();
@@ -252,8 +297,9 @@ public class SmsCbMessage implements Parcelable {
mGeometries != null ? CbGeoUtils.encodeGeometriesToString(mGeometries) : null); mGeometries != null ? CbGeoUtils.encodeGeometriesToString(mGeometries) : null);
} }
public static final Parcelable.Creator<SmsCbMessage> CREATOR @NonNull
= new Parcelable.Creator<SmsCbMessage>() { public static final Parcelable.Creator<SmsCbMessage> CREATOR =
new Parcelable.Creator<SmsCbMessage>() {
@Override @Override
public SmsCbMessage createFromParcel(Parcel in) { public SmsCbMessage createFromParcel(Parcel in) {
return new SmsCbMessage(in); return new SmsCbMessage(in);
@@ -270,7 +316,7 @@ public class SmsCbMessage implements Parcelable {
* *
* @return Geographical scope * @return Geographical scope
*/ */
public int getGeographicalScope() { public @GeographicalScope int getGeographicalScope() {
return mGeographicalScope; return mGeographicalScope;
} }
@@ -294,7 +340,8 @@ public class SmsCbMessage implements Parcelable {
* *
* @return the geographical location code for duplicate message detection * @return the geographical location code for duplicate message detection
*/ */
public SmsCbLocation getLocation() { @NonNull
public android.telephony.SmsCbLocation getLocation() {
return mLocation; return mLocation;
} }
@@ -315,6 +362,7 @@ public class SmsCbMessage implements Parcelable {
* *
* @return Language code * @return Language code
*/ */
@Nullable
public String getLanguageCode() { public String getLanguageCode() {
return mLanguage; return mLanguage;
} }
@@ -324,6 +372,7 @@ public class SmsCbMessage implements Parcelable {
* *
* @return Body, or null * @return Body, or null
*/ */
@Nullable
public String getMessageBody() { public String getMessageBody() {
return mBody; return mBody;
} }
@@ -332,6 +381,7 @@ public class SmsCbMessage implements Parcelable {
* Get the warning area coordinates information represent by polygons and circles. * Get the warning area coordinates information represent by polygons and circles.
* @return a list of geometries, {@link Nullable} means there is no coordinate information * @return a list of geometries, {@link Nullable} means there is no coordinate information
* associated to this message. * associated to this message.
* @hide
*/ */
@Nullable @Nullable
public List<Geometry> getGeometries() { public List<Geometry> getGeometries() {
@@ -350,7 +400,7 @@ public class SmsCbMessage implements Parcelable {
* Get the message format ({@link #MESSAGE_FORMAT_3GPP} or {@link #MESSAGE_FORMAT_3GPP2}). * Get the message format ({@link #MESSAGE_FORMAT_3GPP} or {@link #MESSAGE_FORMAT_3GPP2}).
* @return an integer representing 3GPP or 3GPP2 message format * @return an integer representing 3GPP or 3GPP2 message format
*/ */
public int getMessageFormat() { public @MessageFormat int getMessageFormat() {
return mMessageFormat; return mMessageFormat;
} }
@@ -360,7 +410,7 @@ public class SmsCbMessage implements Parcelable {
* {@link #MESSAGE_PRIORITY_INTERACTIVE} or {@link #MESSAGE_PRIORITY_URGENT}. * {@link #MESSAGE_PRIORITY_INTERACTIVE} or {@link #MESSAGE_PRIORITY_URGENT}.
* @return an integer representing the message priority * @return an integer representing the message priority
*/ */
public int getMessagePriority() { public @MessagePriority int getMessagePriority() {
return mPriority; return mPriority;
} }
@@ -373,6 +423,7 @@ public class SmsCbMessage implements Parcelable {
* *
* @return an SmsCbEtwsInfo object, or null if this is not an ETWS warning notification * @return an SmsCbEtwsInfo object, or null if this is not an ETWS warning notification
*/ */
@Nullable
public SmsCbEtwsInfo getEtwsWarningInfo() { public SmsCbEtwsInfo getEtwsWarningInfo() {
return mEtwsWarningInfo; return mEtwsWarningInfo;
} }
@@ -387,13 +438,14 @@ public class SmsCbMessage implements Parcelable {
* *
* @return an SmsCbCmasInfo object, or null if this is not a CMAS warning notification * @return an SmsCbCmasInfo object, or null if this is not a CMAS warning notification
*/ */
@Nullable
public SmsCbCmasInfo getCmasWarningInfo() { public SmsCbCmasInfo getCmasWarningInfo() {
return mCmasWarningInfo; return mCmasWarningInfo;
} }
/** /**
* Return whether this message is an emergency (PWS) message type. * Return whether this message is an emergency (PWS) message type.
* @return true if the message is a public warning notification; false otherwise * @return true if the message is an emergency notification; false otherwise
*/ */
public boolean isEmergencyMessage() { public boolean isEmergencyMessage() {
return mPriority == MESSAGE_PRIORITY_EMERGENCY; return mPriority == MESSAGE_PRIORITY_EMERGENCY;
@@ -440,6 +492,7 @@ public class SmsCbMessage implements Parcelable {
/** /**
* @return the {@link ContentValues} instance that includes the cell broadcast data. * @return the {@link ContentValues} instance that includes the cell broadcast data.
*/ */
@NonNull
public ContentValues getContentValues() { public ContentValues getContentValues() {
ContentValues cv = new ContentValues(16); ContentValues cv = new ContentValues(16);
cv.put(CellBroadcasts.GEOGRAPHICAL_SCOPE, mGeographicalScope); cv.put(CellBroadcasts.GEOGRAPHICAL_SCOPE, mGeographicalScope);
@@ -491,7 +544,8 @@ public class SmsCbMessage implements Parcelable {
* @return a {@link SmsCbMessage} instance. * @return a {@link SmsCbMessage} instance.
* @throws IllegalArgumentException if one of the required columns is missing * @throws IllegalArgumentException if one of the required columns is missing
*/ */
public static SmsCbMessage createFromCursor(Cursor cursor) { @NonNull
public static SmsCbMessage createFromCursor(@NonNull Cursor cursor) {
int geoScope = cursor.getInt( int geoScope = cursor.getInt(
cursor.getColumnIndexOrThrow(CellBroadcasts.GEOGRAPHICAL_SCOPE)); cursor.getColumnIndexOrThrow(CellBroadcasts.GEOGRAPHICAL_SCOPE));
int serialNum = cursor.getInt(cursor.getColumnIndexOrThrow(CellBroadcasts.SERIAL_NUMBER)); int serialNum = cursor.getInt(cursor.getColumnIndexOrThrow(CellBroadcasts.SERIAL_NUMBER));

View File

@@ -1673,15 +1673,14 @@ public final class SmsManager {
* *
* @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param ranType as defined in class SmsManager, the value can be one of these: * @param ranType the message format as defined in {@link SmsCbMessage]
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
* @return true if successful, false otherwise * @return true if successful, false otherwise
* @see #disableCellBroadcast(int, int) * @see #disableCellBroadcast(int, int)
* *
* {@hide} * {@hide}
*/ */
public boolean enableCellBroadcast(int messageIdentifier, int ranType) { public boolean enableCellBroadcast(int messageIdentifier,
@android.telephony.SmsCbMessage.MessageFormat int ranType) {
boolean success = false; boolean success = false;
try { try {
@@ -1720,16 +1719,15 @@ public final class SmsManager {
* *
* @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP) * @param messageIdentifier Message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param ranType as defined in class SmsManager, the value can be one of these: * @param ranType the message format as defined in {@link SmsCbMessage}
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA
* @return true if successful, false otherwise * @return true if successful, false otherwise
* *
* @see #enableCellBroadcast(int, int) * @see #enableCellBroadcast(int, int)
* *
* {@hide} * {@hide}
*/ */
public boolean disableCellBroadcast(int messageIdentifier, int ranType) { public boolean disableCellBroadcast(int messageIdentifier,
@android.telephony.SmsCbMessage.MessageFormat int ranType) {
boolean success = false; boolean success = false;
try { try {
@@ -1749,8 +1747,8 @@ public final class SmsManager {
/** /**
* Enable reception of cell broadcast (SMS-CB) messages with the given * Enable reception of cell broadcast (SMS-CB) messages with the given
* message identifier range and RAN type. The RAN type specify this message ID * message identifier range and RAN type. The RAN type specifies if this message ID
* belong to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients enable * belongs to 3GPP (GSM) or 3GPP2(CDMA). Note that if two different clients enable
* the same message identifier, they must both disable it for the device to stop * the same message identifier, they must both disable it for the device to stop
* receiving those messages. All received messages will be broadcast in an * receiving those messages. All received messages will be broadcast in an
* intent with the action "android.provider.Telephony.SMS_CB_RECEIVED". * intent with the action "android.provider.Telephony.SMS_CB_RECEIVED".
@@ -1762,26 +1760,29 @@ public final class SmsManager {
* dialog. If this method is called on a device that has multiple active subscriptions, this * dialog. If this method is called on a device that has multiple active subscriptions, this
* {@link SmsManager} instance has been created with {@link #getDefault()}, and no user-defined * {@link SmsManager} instance has been created with {@link #getDefault()}, and no user-defined
* default subscription is defined, the subscription ID associated with this message will be * default subscription is defined, the subscription ID associated with this message will be
* INVALID, which will result in the operation being completed on the subscription associated * {@link SubscriptionManager#INVALID_SUBSCRIPTION_ID}, which will result in the operation
* with logical slot 0. Use {@link #getSmsManagerForSubscriptionId(int)} to ensure the * being completed on the subscription associated with logical slot 0. Use
* operation is performed on the correct subscription. * {@link #getSmsManagerForSubscriptionId(int)} to ensure the operation is performed on the
* correct subscription.
* </p> * </p>
* *
* <p>Requires {@link android.Manifest.permission#RECEIVE_EMERGENCY_BROADCAST}</p>
*
* @param startMessageId first message identifier as specified in TS 23.041 (3GPP) * @param startMessageId first message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param endMessageId last message identifier as specified in TS 23.041 (3GPP) * @param endMessageId last message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param ranType as defined in class SmsManager, the value can be one of these: * @param ranType the message format as defined in {@link SmsCbMessage}
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM * @return true if successful, false if the modem reports a failure (e.g. the given range or
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA * RAN type is invalid).
* @return true if successful, false otherwise
* @see #disableCellBroadcastRange(int, int, int) * @see #disableCellBroadcastRange(int, int, int)
* *
* @throws IllegalArgumentException if endMessageId < startMessageId * @throws IllegalArgumentException if endMessageId < startMessageId
* {@hide} * {@hide}
*/ */
@UnsupportedAppUsage @SystemApi
public boolean enableCellBroadcastRange(int startMessageId, int endMessageId, int ranType) { public boolean enableCellBroadcastRange(int startMessageId, int endMessageId,
@android.telephony.SmsCbMessage.MessageFormat int ranType) {
boolean success = false; boolean success = false;
if (endMessageId < startMessageId) { if (endMessageId < startMessageId) {
@@ -1821,22 +1822,24 @@ public final class SmsManager {
* operation is performed on the correct subscription. * operation is performed on the correct subscription.
* </p> * </p>
* *
* <p>Requires {@link android.Manifest.permission#RECEIVE_EMERGENCY_BROADCAST}</p>
*
* @param startMessageId first message identifier as specified in TS 23.041 (3GPP) * @param startMessageId first message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param endMessageId last message identifier as specified in TS 23.041 (3GPP) * @param endMessageId last message identifier as specified in TS 23.041 (3GPP)
* or C.R1001-G (3GPP2) * or C.R1001-G (3GPP2)
* @param ranType as defined in class SmsManager, the value can be one of these: * @param ranType the message format as defined in {@link SmsCbMessage}
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_GSM * @return true if successful, false if the modem reports a failure (e.g. the given range or
* android.telephony.SmsMessage.CELL_BROADCAST_RAN_TYPE_CDMA * RAN type is invalid).
* @return true if successful, false otherwise
* *
* @see #enableCellBroadcastRange(int, int, int) * @see #enableCellBroadcastRange(int, int, int)
* *
* @throws IllegalArgumentException if endMessageId < startMessageId * @throws IllegalArgumentException if endMessageId < startMessageId
* {@hide} * {@hide}
*/ */
@UnsupportedAppUsage @SystemApi
public boolean disableCellBroadcastRange(int startMessageId, int endMessageId, int ranType) { public boolean disableCellBroadcastRange(int startMessageId, int endMessageId,
@android.telephony.SmsCbMessage.MessageFormat int ranType) {
boolean success = false; boolean success = false;
if (endMessageId < startMessageId) { if (endMessageId < startMessageId) {

View File

@@ -2290,14 +2290,19 @@ public class SubscriptionManager {
} }
/** /**
* Returns the resources associated with Subscription. * Returns the {@link Resources} from the given {@link Context} for the MCC/MNC associated with
* the subscription. If the subscription ID is invalid, the base resources are returned instead.
*
* Requires Permission: {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*
* @param context Context object * @param context Context object
* @param subId Subscription Id of Subscription who's resources are required * @param subId Subscription Id of Subscription whose resources are required
* @return Resources associated with Subscription. * @return Resources associated with Subscription.
* @hide * @hide
*/ */
@UnsupportedAppUsage @NonNull
public static Resources getResourcesForSubId(Context context, int subId) { @SystemApi
public static Resources getResourcesForSubId(@NonNull Context context, int subId) {
return getResourcesForSubId(context, subId, false); return getResourcesForSubId(context, subId, false);
} }

View File

@@ -16,6 +16,7 @@
package android.telephony.cdma; package android.telephony.cdma;
import android.annotation.NonNull;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
@@ -28,7 +29,7 @@ import android.os.Parcelable;
* *
* {@hide} * {@hide}
*/ */
public class CdmaSmsCbProgramData implements Parcelable { public final class CdmaSmsCbProgramData implements Parcelable {
/** Delete the specified service category from the list of enabled categories. */ /** Delete the specified service category from the list of enabled categories. */
public static final int OPERATION_DELETE_CATEGORY = 0; public static final int OPERATION_DELETE_CATEGORY = 0;
@@ -95,7 +96,7 @@ public class CdmaSmsCbProgramData implements Parcelable {
/** Create a new CdmaSmsCbProgramData object with the specified values. */ /** Create a new CdmaSmsCbProgramData object with the specified values. */
public CdmaSmsCbProgramData(int operation, int category, int language, int maxMessages, public CdmaSmsCbProgramData(int operation, int category, int language, int maxMessages,
int alertOption, String categoryName) { int alertOption, @NonNull String categoryName) {
mOperation = operation; mOperation = operation;
mCategory = category; mCategory = category;
mLanguage = language; mLanguage = language;
@@ -174,6 +175,7 @@ public class CdmaSmsCbProgramData implements Parcelable {
* Returns the service category name, in the language specified by {@link #getLanguage()}. * Returns the service category name, in the language specified by {@link #getLanguage()}.
* @return an optional service category name * @return an optional service category name
*/ */
@NonNull
public String getCategoryName() { public String getCategoryName() {
return mCategoryName; return mCategoryName;
} }

View File

@@ -16,12 +16,12 @@
package com.android.framework.permission.tests; package com.android.framework.permission.tests;
import java.util.ArrayList;
import android.telephony.SmsManager; import android.telephony.SmsManager;
import android.test.AndroidTestCase; import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
import java.util.ArrayList;
/** /**
* Verify that SmsManager apis cannot be called without required permissions. * Verify that SmsManager apis cannot be called without required permissions.
*/ */
@@ -32,6 +32,10 @@ public class SmsManagerPermissionTest extends AndroidTestCase {
private static final String DEST_NUMBER = "4567"; private static final String DEST_NUMBER = "4567";
private static final String SRC_NUMBER = "1234"; private static final String SRC_NUMBER = "1234";
private static final int CELL_BROADCAST_MESSAGE_ID_START = 10;
private static final int CELL_BROADCAST_MESSAGE_ID_END = 20;
private static final int CELL_BROADCAST_GSM_RAN_TYPE = 0;
/** /**
* Verify that SmsManager.sendTextMessage requires permissions. * Verify that SmsManager.sendTextMessage requires permissions.
* <p>Tests Permission: * <p>Tests Permission:
@@ -82,4 +86,34 @@ public class SmsManagerPermissionTest extends AndroidTestCase {
// expected // expected
} }
} }
/**
* Verify that SmsManager.enableCellBroadcastRange requires permissions.
* <p>Tests system permission: android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
*/
@SmallTest
public void testEnableCellBroadcastRange() {
try {
SmsManager.getDefault().enableCellBroadcastRange(CELL_BROADCAST_MESSAGE_ID_START,
CELL_BROADCAST_MESSAGE_ID_END, CELL_BROADCAST_GSM_RAN_TYPE);
fail("SmsManager.sendDataMessage did not throw SecurityException as expected");
} catch (SecurityException e) {
// expected
}
}
/**
* Verify that SmsManager.disableCellBroadcastRange requires permissions.
* <p>Tests system permission: android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST
*/
@SmallTest
public void testDisableCellBroadcastRange() {
try {
SmsManager.getDefault().disableCellBroadcastRange(CELL_BROADCAST_MESSAGE_ID_START,
CELL_BROADCAST_MESSAGE_ID_END, CELL_BROADCAST_GSM_RAN_TYPE);
fail("SmsManager.sendDataMessage did not throw SecurityException as expected");
} catch (SecurityException e) {
// expected
}
}
} }