summaryrefslogtreecommitdiff
path: root/telephony/java/com/android/ims/ImsReasonInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'telephony/java/com/android/ims/ImsReasonInfo.java')
-rw-r--r--telephony/java/com/android/ims/ImsReasonInfo.java326
1 files changed, 326 insertions, 0 deletions
diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java
new file mode 100644
index 000000000000..99faba69640a
--- /dev/null
+++ b/telephony/java/com/android/ims/ImsReasonInfo.java
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2013 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 com.android.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class enables an application to get details on why a method call failed.
+ *
+ * @hide
+ */
+public class ImsReasonInfo implements Parcelable {
+
+ /**
+ * Reason types, defines the error category.
+ * UNSPECIFIED - unknown error reason
+ * LOCAL - indicates the local/device error reason
+ * LOCAL_TIMEOUT - indicates the local error reason when a specific timer is expired
+ * STATUSCODE - indicates the interworking error reason by SIP status code received
+ * from the network
+ * MEDIA - indicates the media error reason (local resource, SDP parameter, etc.)
+ * USER - indicates the error reason by the local or remote user
+ * UT - indicates the error reason for the supplementary service configuration
+ */
+ public static final int TYPE_UNSPECIFIED = 0;
+ public static final int TYPE_LOCAL = 1;
+ public static final int TYPE_TIMEOUT = 2;
+ public static final int TYPE_STATUSCODE = 3;
+ public static final int TYPE_MEDIA = 4;
+ public static final int TYPE_USER = 5;
+ public static final int TYPE_UT = 8;
+
+ /**
+ * Specific code of each types
+ */
+ public static final int CODE_UNSPECIFIED = 0;
+
+ /**
+ * LOCAL
+ */
+ // IMS -> Telephony
+ // The passed argument is an invalid
+ public static final int CODE_LOCAL_ILLEGAL_ARGUMENT = 101;
+ // The operation is invoked in invalid call state
+ public static final int CODE_LOCAL_ILLEGAL_STATE = 102;
+ // IMS service internal error
+ public static final int CODE_LOCAL_INTERNAL_ERROR = 103;
+ // IMS service goes down (service connection is lost)
+ public static final int CODE_LOCAL_IMS_SERVICE_DOWN = 106;
+ // No pending incoming call exists
+ public static final int CODE_LOCAL_NO_PENDING_CALL = 107;
+
+ // IMS -> Telephony
+ // Service unavailable; by power off
+ public static final int CODE_LOCAL_POWER_OFF = 111;
+ // Service unavailable; by low battery
+ public static final int CODE_LOCAL_LOW_BATTERY = 112;
+ // Service unavailable; by out of service (data service state)
+ public static final int CODE_LOCAL_NETWORK_NO_SERVICE = 121;
+ // Service unavailable; by no LTE coverage
+ // (VoLTE is not supported even though IMS is registered)
+ public static final int CODE_LOCAL_NETWORK_NO_LTE_COVERAGE = 122;
+ // Service unavailable; by located in roaming area
+ public static final int CODE_LOCAL_NETWORK_ROAMING = 123;
+ // Service unavailable; by IP changed
+ public static final int CODE_LOCAL_NETWORK_IP_CHANGED = 124;
+ // Service unavailable; other
+ public static final int CODE_LOCAL_SERVICE_UNAVAILABLE = 131;
+ // Service unavailable; IMS connection is lost (IMS is not registered)
+ public static final int CODE_LOCAL_NOT_REGISTERED = 132;
+
+ // IMS <-> Telephony
+ // Max call exceeded
+ public static final int CODE_LOCAL_CALL_EXCEEDED = 141;
+ // IMS <- Telephony
+ // Call busy
+ public static final int CODE_LOCAL_CALL_BUSY = 142;
+ // Call decline
+ public static final int CODE_LOCAL_CALL_DECLINE = 143;
+ // IMS -> Telephony
+ // SRVCC is in progress
+ public static final int CODE_LOCAL_CALL_VCC_ON_PROGRESSING = 144;
+ // Resource reservation is failed (QoS precondition)
+ public static final int CODE_LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 145;
+ // Retry CS call; VoLTE service can't be provided by the network or remote end
+ // Resolve the extra code(EXTRA_CODE_CALL_RETRY_*) if the below code is set
+ public static final int CODE_LOCAL_CALL_CS_RETRY_REQUIRED = 146;
+ // Retry VoLTE call; VoLTE service can't be provided by the network temporarily
+ public static final int CODE_LOCAL_CALL_VOLTE_RETRY_REQUIRED = 147;
+ // IMS call is already terminated (in TERMINATED state)
+ public static final int CODE_LOCAL_CALL_TERMINATED = 148;
+
+ /**
+ * TIMEOUT (IMS -> Telephony)
+ */
+ // 1xx waiting timer is expired after sending INVITE request (MO only)
+ public static final int CODE_TIMEOUT_1XX_WAITING = 201;
+ // User no answer during call setup operation (MO/MT)
+ // MO : 200 OK to INVITE request is not received,
+ // MT : No action from user after alerting the call
+ public static final int CODE_TIMEOUT_NO_ANSWER = 202;
+ // User no answer during call update operation (MO/MT)
+ // MO : 200 OK to re-INVITE request is not received,
+ // MT : No action from user after alerting the call
+ public static final int CODE_TIMEOUT_NO_ANSWER_CALL_UPDATE = 203;
+
+ /**
+ * STATUSCODE (SIP response code) (IMS -> Telephony)
+ */
+ // 3xx responses
+ // SIP request is redirected
+ public static final int CODE_SIP_REDIRECTED = 321;
+ // 4xx responses
+ // 400 : Bad Request
+ public static final int CODE_SIP_BAD_REQUEST = 331;
+ // 403 : Forbidden
+ public static final int CODE_SIP_FORBIDDEN = 332;
+ // 404 : Not Found
+ public static final int CODE_SIP_NOT_FOUND = 333;
+ // 415 : Unsupported Media Type
+ // 416 : Unsupported URI Scheme
+ // 420 : Bad Extension
+ public static final int CODE_SIP_NOT_SUPPORTED = 334;
+ // 408 : Request Timeout
+ public static final int CODE_SIP_REQUEST_TIMEOUT = 335;
+ // 480 : Temporarily Unavailable
+ public static final int CODE_SIP_TEMPRARILY_UNAVAILABLE = 336;
+ // 484 : Address Incomplete
+ public static final int CODE_SIP_BAD_ADDRESS = 337;
+ // 486 : Busy Here
+ // 600 : Busy Everywhere
+ public static final int CODE_SIP_BUSY = 338;
+ // 487 : Request Terminated
+ public static final int CODE_SIP_REQUEST_CANCELLED = 339;
+ // 406 : Not Acceptable
+ // 488 : Not Acceptable Here
+ // 606 : Not Acceptable
+ public static final int CODE_SIP_NOT_ACCEPTABLE = 340;
+ // 410 : Gone
+ // 604 : Does Not Exist Anywhere
+ public static final int CODE_SIP_NOT_REACHABLE = 341;
+ // Others
+ public static final int CODE_SIP_CLIENT_ERROR = 342;
+ // 5xx responses
+ // 501 : Server Internal Error
+ public static final int CODE_SIP_SERVER_INTERNAL_ERROR = 351;
+ // 503 : Service Unavailable
+ public static final int CODE_SIP_SERVICE_UNAVAILABLE = 352;
+ // 504 : Server Time-out
+ public static final int CODE_SIP_SERVER_TIMEOUT = 353;
+ // Others
+ public static final int CODE_SIP_SERVER_ERROR = 354;
+ // 6xx responses
+ // 603 : Decline
+ public static final int CODE_SIP_USER_REJECTED = 361;
+ // Others
+ public static final int CODE_SIP_GLOBAL_ERROR = 362;
+
+ /**
+ * MEDIA (IMS -> Telephony)
+ */
+ // Media resource initialization failed
+ public static final int CODE_MEDIA_INIT_FAILED = 401;
+ // RTP timeout (no audio / video traffic in the session)
+ public static final int CODE_MEDIA_NO_DATA = 402;
+ // Media is not supported; so dropped the call
+ public static final int CODE_MEDIA_NOT_ACCEPTABLE = 403;
+ // Unknown media related errors
+ public static final int CODE_MEDIA_UNSPECIFIED = 404;
+
+ /**
+ * USER
+ */
+ // Telephony -> IMS
+ // User triggers the call end
+ public static final int CODE_USER_TERMINATED = 501;
+ // No action while an incoming call is ringing
+ public static final int CODE_USER_NOANSWER = 502;
+ // User ignores an incoming call
+ public static final int CODE_USER_IGNORE = 503;
+ // User declines an incoming call
+ public static final int CODE_USER_DECLINE = 504;
+ // IMS -> Telephony
+ // The call is terminated by the network or remote user
+ public static final int CODE_USER_TERMINATED_BY_REMOTE = 510;
+
+ /**
+ * Extra codes for the specific code value
+ * This value can be referred when the code is CODE_LOCAL_CALL_CS_RETRY_REQUIRED.
+ */
+ // Try to connect CS call; normal
+ public static final int EXTRA_CODE_CALL_RETRY_NORMAL = 1;
+ // Try to connect CS call without the notification to user
+ public static final int EXTRA_CODE_CALL_RETRY_SILENT_REDIAL = 2;
+ // Try to connect CS call by the settings of the menu
+ public static final int EXTRA_CODE_CALL_RETRY_BY_SETTINGS = 3;
+
+ /**
+ * UT
+ */
+ public static final int CODE_UT_NOT_SUPPORTED = 801;
+ public static final int CODE_UT_SERVICE_UNAVAILABLE = 802;
+ public static final int CODE_UT_OPERATION_NOT_ALLOWED = 803;
+ public static final int CODE_UT_CB_PASSWORD_MISMATCH = 821;
+
+
+
+ // For reason type
+ public int mReasonType;
+ // For main reason code
+ public int mCode;
+ // For the extra code value; it depends on the code value.
+ public int mExtraCode;
+ // For the additional message of the reason info.
+ public String mExtraMessage;
+
+ public ImsReasonInfo() {
+ mReasonType = TYPE_UNSPECIFIED;
+ mCode = CODE_UNSPECIFIED;
+ mExtraCode = CODE_UNSPECIFIED;
+ mExtraMessage = null;
+ }
+
+ public ImsReasonInfo(Parcel in) {
+ readFromParcel(in);
+ }
+
+ public ImsReasonInfo(int code, int extraCode) {
+ mReasonType = (int) (code / 100);
+ mCode = code;
+ mExtraCode = extraCode;
+ mExtraMessage = null;
+ }
+
+ public ImsReasonInfo(int code, int extraCode, String extraMessage) {
+ mReasonType = (int) (code / 100);
+ mCode = code;
+ mExtraCode = extraCode;
+ mExtraMessage = extraMessage;
+ }
+
+ /**
+ *
+ */
+ public int getCode() {
+ return mCode;
+ }
+
+ /**
+ *
+ */
+ public int getExtraCode() {
+ return mExtraCode;
+ }
+
+ /**
+ *
+ */
+ public String getExtraMessage() {
+ return mExtraMessage;
+ }
+
+ /**
+ *
+ */
+ public int getReasonType() {
+ return mReasonType;
+ }
+
+ /**
+ * Returns the string format of {@link ImsReasonInfo}
+ *
+ * @return the string format of {@link ImsReasonInfo}
+ */
+ public String toString() {
+ return "ImsReasonInfo :: {" + mReasonType + ", "
+ + mCode + ", " + mExtraCode + ", " + mExtraMessage + "}";
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ out.writeInt(mReasonType);
+ out.writeInt(mCode);
+ out.writeInt(mExtraCode);
+ out.writeString(mExtraMessage);
+ }
+
+ private void readFromParcel(Parcel in) {
+ mReasonType = in.readInt();
+ mCode = in.readInt();
+ mExtraCode = in.readInt();
+ mExtraMessage = in.readString();
+ }
+
+ public static final Creator<ImsReasonInfo> CREATOR = new Creator<ImsReasonInfo>() {
+ @Override
+ public ImsReasonInfo createFromParcel(Parcel in) {
+ return new ImsReasonInfo(in);
+ }
+
+ @Override
+ public ImsReasonInfo[] newArray(int size) {
+ return new ImsReasonInfo[size];
+ }
+ };
+}