diff options
| author | 2018-12-18 19:36:39 +0000 | |
|---|---|---|
| committer | 2018-12-18 19:36:39 +0000 | |
| commit | 99893d2ed478af01ff5e9c28c7a39a3fdbe5c25f (patch) | |
| tree | 46a6e692281061daefebed393fbef0c4e0d233fb | |
| parent | 17753a52cd8f1a9108689a59249ff0153d3f277f (diff) | |
| parent | 6a942d488af3356fe84b0cef396e613d8d74101e (diff) | |
Merge "new SystemAPI for preciseCallState and DisconnectCause"
| -rw-r--r-- | api/system-current.txt | 197 | ||||
| -rw-r--r-- | data/etc/privapp-permissions-platform.xml | 2 | ||||
| -rw-r--r-- | packages/Shell/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/TelephonyRegistry.java | 40 | ||||
| -rw-r--r-- | telephony/java/android/telephony/DisconnectCause.java | 42 | ||||
| -rw-r--r-- | telephony/java/android/telephony/PhoneStateListener.java | 41 | ||||
| -rw-r--r-- | telephony/java/android/telephony/PreciseCallState.java | 119 | ||||
| -rw-r--r-- | telephony/java/android/telephony/PreciseDisconnectCause.java | 314 | ||||
| -rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 50 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl | 1 |
10 files changed, 582 insertions, 225 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 9486d07e3f05..7d890c619503 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5698,6 +5698,83 @@ package android.telephony { field public static final java.lang.String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string"; } + public class DisconnectCause { + field public static final int ALREADY_DIALING = 72; // 0x48 + field public static final int ANSWERED_ELSEWHERE = 52; // 0x34 + field public static final int BUSY = 4; // 0x4 + field public static final int CALLING_DISABLED = 74; // 0x4a + field public static final int CALL_BARRED = 20; // 0x14 + field public static final int CALL_PULLED = 51; // 0x33 + field public static final int CANT_CALL_WHILE_RINGING = 73; // 0x49 + field public static final int CDMA_ACCESS_BLOCKED = 35; // 0x23 + field public static final int CDMA_ACCESS_FAILURE = 32; // 0x20 + field public static final int CDMA_ALREADY_ACTIVATED = 49; // 0x31 + field public static final int CDMA_DROP = 27; // 0x1b + field public static final int CDMA_INTERCEPT = 28; // 0x1c + field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 26; // 0x1a + field public static final int CDMA_NOT_EMERGENCY = 34; // 0x22 + field public static final int CDMA_PREEMPTED = 33; // 0x21 + field public static final int CDMA_REORDER = 29; // 0x1d + field public static final int CDMA_RETRY_ORDER = 31; // 0x1f + field public static final int CDMA_SO_REJECT = 30; // 0x1e + field public static final int CONGESTION = 5; // 0x5 + field public static final int CS_RESTRICTED = 22; // 0x16 + field public static final int CS_RESTRICTED_EMERGENCY = 24; // 0x18 + field public static final int CS_RESTRICTED_NORMAL = 23; // 0x17 + field public static final int DATA_DISABLED = 54; // 0x36 + field public static final int DATA_LIMIT_REACHED = 55; // 0x37 + field public static final int DIALED_CALL_FORWARDING_WHILE_ROAMING = 57; // 0x39 + field public static final int DIALED_MMI = 39; // 0x27 + field public static final int DIAL_LOW_BATTERY = 62; // 0x3e + field public static final int DIAL_MODIFIED_TO_DIAL = 48; // 0x30 + field public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66; // 0x42 + field public static final int DIAL_MODIFIED_TO_SS = 47; // 0x2f + field public static final int DIAL_MODIFIED_TO_USSD = 46; // 0x2e + field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69; // 0x45 + field public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70; // 0x46 + field public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67; // 0x43 + field public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68; // 0x44 + field public static final int EMERGENCY_PERM_FAILURE = 64; // 0x40 + field public static final int EMERGENCY_TEMP_FAILURE = 63; // 0x3f + field public static final int ERROR_UNSPECIFIED = 36; // 0x24 + field public static final int FDN_BLOCKED = 21; // 0x15 + field public static final int ICC_ERROR = 19; // 0x13 + field public static final int IMEI_NOT_ACCEPTED = 58; // 0x3a + field public static final int IMS_ACCESS_BLOCKED = 60; // 0x3c + field public static final int IMS_MERGED_SUCCESSFULLY = 45; // 0x2d + field public static final int IMS_SIP_ALTERNATE_EMERGENCY_CALL = 71; // 0x47 + field public static final int INCOMING_MISSED = 1; // 0x1 + field public static final int INCOMING_REJECTED = 16; // 0x10 + field public static final int INVALID_CREDENTIALS = 10; // 0xa + field public static final int INVALID_NUMBER = 7; // 0x7 + field public static final int LIMIT_EXCEEDED = 15; // 0xf + field public static final int LOCAL = 3; // 0x3 + field public static final int LOST_SIGNAL = 14; // 0xe + field public static final int LOW_BATTERY = 61; // 0x3d + field public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53; // 0x35 + field public static final int MMI = 6; // 0x6 + field public static final int NORMAL = 2; // 0x2 + field public static final int NORMAL_UNSPECIFIED = 65; // 0x41 + field public static final int NOT_DISCONNECTED = 0; // 0x0 + field public static final int NOT_VALID = -1; // 0xffffffff + field public static final int NO_PHONE_NUMBER_SUPPLIED = 38; // 0x26 + field public static final int NUMBER_UNREACHABLE = 8; // 0x8 + field public static final int OTASP_PROVISIONING_IN_PROCESS = 76; // 0x4c + field public static final int OUTGOING_CANCELED = 44; // 0x2c + field public static final int OUTGOING_FAILURE = 43; // 0x2b + field public static final int OUT_OF_NETWORK = 11; // 0xb + field public static final int OUT_OF_SERVICE = 18; // 0x12 + field public static final int POWER_OFF = 17; // 0x11 + field public static final int SERVER_ERROR = 12; // 0xc + field public static final int SERVER_UNREACHABLE = 9; // 0x9 + field public static final int TIMED_OUT = 13; // 0xd + field public static final int TOO_MANY_ONGOING_CALLS = 75; // 0x4b + field public static final int UNOBTAINABLE_NUMBER = 25; // 0x19 + field public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; // 0x32 + field public static final int VOICEMAIL_NUMBER_MISSING = 40; // 0x28 + field public static final int WIFI_LOST = 59; // 0x3b + } + public class MbmsDownloadSession implements java.lang.AutoCloseable { field public static final java.lang.String MBMS_DOWNLOAD_SERVICE_ACTION = "android.telephony.action.EmbmsDownload"; } @@ -5786,14 +5863,134 @@ package android.telephony { } public class PhoneStateListener { + method public void onCallDisconnectCauseChanged(int, int); + method public void onPreciseCallStateChanged(android.telephony.PreciseCallState); method public void onRadioPowerStateChanged(int); method public void onSrvccStateChanged(int); method public void onVoiceActivationStateChanged(int); + field public static final int LISTEN_CALL_DISCONNECT_CAUSES = 33554432; // 0x2000000 + field public static final int LISTEN_PRECISE_CALL_STATE = 2048; // 0x800 field public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000 field public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000 field public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000 } + public final class PreciseCallState implements android.os.Parcelable { + method public int describeContents(); + method public int getBackgroundCallState(); + method public int getForegroundCallState(); + method public int getRingingCallState(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.PreciseCallState> CREATOR; + field public static final int PRECISE_CALL_STATE_ACTIVE = 1; // 0x1 + field public static final int PRECISE_CALL_STATE_ALERTING = 4; // 0x4 + field public static final int PRECISE_CALL_STATE_DIALING = 3; // 0x3 + field public static final int PRECISE_CALL_STATE_DISCONNECTED = 7; // 0x7 + field public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; // 0x8 + field public static final int PRECISE_CALL_STATE_HOLDING = 2; // 0x2 + field public static final int PRECISE_CALL_STATE_IDLE = 0; // 0x0 + field public static final int PRECISE_CALL_STATE_INCOMING = 5; // 0x5 + field public static final int PRECISE_CALL_STATE_NOT_VALID = -1; // 0xffffffff + field public static final int PRECISE_CALL_STATE_WAITING = 6; // 0x6 + } + + public class PreciseDisconnectCause { + field public static final int ACCESS_CLASS_BLOCKED = 260; // 0x104 + field public static final int ACCESS_INFORMATION_DISCARDED = 43; // 0x2b + field public static final int ACM_LIMIT_EXCEEDED = 68; // 0x44 + field public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; // 0x39 + field public static final int BEARER_NOT_AVAIL = 58; // 0x3a + field public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 65; // 0x41 + field public static final int BUSY = 17; // 0x11 + field public static final int CALL_BARRED = 240; // 0xf0 + field public static final int CALL_REJECTED = 21; // 0x15 + field public static final int CDMA_ACCESS_BLOCKED = 1009; // 0x3f1 + field public static final int CDMA_ACCESS_FAILURE = 1006; // 0x3ee + field public static final int CDMA_DROP = 1001; // 0x3e9 + field public static final int CDMA_INTERCEPT = 1002; // 0x3ea + field public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; // 0x3e8 + field public static final int CDMA_NOT_EMERGENCY = 1008; // 0x3f0 + field public static final int CDMA_PREEMPTED = 1007; // 0x3ef + field public static final int CDMA_REORDER = 1003; // 0x3eb + field public static final int CDMA_RETRY_ORDER = 1005; // 0x3ed + field public static final int CDMA_SO_REJECT = 1004; // 0x3ec + field public static final int CHANNEL_NOT_AVAIL = 44; // 0x2c + field public static final int CHANNEL_UNACCEPTABLE = 6; // 0x6 + field public static final int CONDITIONAL_IE_ERROR = 100; // 0x64 + field public static final int DESTINATION_OUT_OF_ORDER = 27; // 0x1b + field public static final int ERROR_UNSPECIFIED = 65535; // 0xffff + field public static final int FACILITY_REJECTED = 29; // 0x1d + field public static final int FDN_BLOCKED = 241; // 0xf1 + field public static final int IMEI_NOT_ACCEPTED = 243; // 0xf3 + field public static final int IMSI_UNKNOWN_IN_VLR = 242; // 0xf2 + field public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 55; // 0x37 + field public static final int INCOMPATIBLE_DESTINATION = 88; // 0x58 + field public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; // 0x63 + field public static final int INTERWORKING_UNSPECIFIED = 127; // 0x7f + field public static final int INVALID_MANDATORY_INFORMATION = 96; // 0x60 + field public static final int INVALID_NUMBER_FORMAT = 28; // 0x1c + field public static final int INVALID_TRANSACTION_IDENTIFIER = 81; // 0x51 + field public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101; // 0x65 + field public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 97; // 0x61 + field public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98; // 0x62 + field public static final int NETWORK_DETACH = 261; // 0x105 + field public static final int NETWORK_OUT_OF_ORDER = 38; // 0x26 + field public static final int NETWORK_REJECT = 252; // 0xfc + field public static final int NETWORK_RESP_TIMEOUT = 251; // 0xfb + field public static final int NORMAL = 16; // 0x10 + field public static final int NORMAL_UNSPECIFIED = 31; // 0x1f + field public static final int NOT_VALID = -1; // 0xffffffff + field public static final int NO_ANSWER_FROM_USER = 19; // 0x13 + field public static final int NO_CIRCUIT_AVAIL = 34; // 0x22 + field public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; // 0x0 + field public static final int NO_ROUTE_TO_DESTINATION = 3; // 0x3 + field public static final int NO_USER_RESPONDING = 18; // 0x12 + field public static final int NO_VALID_SIM = 249; // 0xf9 + field public static final int NUMBER_CHANGED = 22; // 0x16 + field public static final int OEM_CAUSE_1 = 61441; // 0xf001 + field public static final int OEM_CAUSE_10 = 61450; // 0xf00a + field public static final int OEM_CAUSE_11 = 61451; // 0xf00b + field public static final int OEM_CAUSE_12 = 61452; // 0xf00c + field public static final int OEM_CAUSE_13 = 61453; // 0xf00d + field public static final int OEM_CAUSE_14 = 61454; // 0xf00e + field public static final int OEM_CAUSE_15 = 61455; // 0xf00f + field public static final int OEM_CAUSE_2 = 61442; // 0xf002 + field public static final int OEM_CAUSE_3 = 61443; // 0xf003 + field public static final int OEM_CAUSE_4 = 61444; // 0xf004 + field public static final int OEM_CAUSE_5 = 61445; // 0xf005 + field public static final int OEM_CAUSE_6 = 61446; // 0xf006 + field public static final int OEM_CAUSE_7 = 61447; // 0xf007 + field public static final int OEM_CAUSE_8 = 61448; // 0xf008 + field public static final int OEM_CAUSE_9 = 61449; // 0xf009 + field public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70; // 0x46 + field public static final int OPERATOR_DETERMINED_BARRING = 8; // 0x8 + field public static final int OUT_OF_SRV = 248; // 0xf8 + field public static final int PREEMPTION = 25; // 0x19 + field public static final int PROTOCOL_ERROR_UNSPECIFIED = 111; // 0x6f + field public static final int QOS_NOT_AVAIL = 49; // 0x31 + field public static final int RADIO_ACCESS_FAILURE = 253; // 0xfd + field public static final int RADIO_INTERNAL_ERROR = 250; // 0xfa + field public static final int RADIO_LINK_FAILURE = 254; // 0xfe + field public static final int RADIO_LINK_LOST = 255; // 0xff + field public static final int RADIO_OFF = 247; // 0xf7 + field public static final int RADIO_RELEASE_ABNORMAL = 259; // 0x103 + field public static final int RADIO_RELEASE_NORMAL = 258; // 0x102 + field public static final int RADIO_SETUP_FAILURE = 257; // 0x101 + field public static final int RADIO_UPLINK_FAILURE = 256; // 0x100 + field public static final int RECOVERY_ON_TIMER_EXPIRED = 102; // 0x66 + field public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 69; // 0x45 + field public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 50; // 0x32 + field public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47; // 0x2f + field public static final int SEMANTICALLY_INCORRECT_MESSAGE = 95; // 0x5f + field public static final int SERVICE_OPTION_NOT_AVAILABLE = 63; // 0x3f + field public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; // 0x4f + field public static final int STATUS_ENQUIRY = 30; // 0x1e + field public static final int SWITCHING_CONGESTION = 42; // 0x2a + field public static final int TEMPORARY_FAILURE = 41; // 0x29 + field public static final int UNOBTAINABLE_NUMBER = 1; // 0x1 + field public static final int USER_NOT_MEMBER_OF_CUG = 87; // 0x57 + } + public class ServiceState implements android.os.Parcelable { method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(); diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index af570b39925b..c21642559bb9 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -297,6 +297,8 @@ applications that come with the platform <permission name="android.permission.POWER_SAVER" /> <permission name="android.permission.READ_FRAME_BUFFER"/> <permission name="android.permission.READ_LOWPAN_CREDENTIAL"/> + <!-- Needed for test only --> + <permission name="android.permission.READ_PRECISE_PHONE_STATE" /> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.REAL_GET_TASKS"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml index 5fe08aab93cc..8cfc2a6b158d 100644 --- a/packages/Shell/AndroidManifest.xml +++ b/packages/Shell/AndroidManifest.xml @@ -27,6 +27,7 @@ <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> + <uses-permission android:name="android.permission.READ_PRECISE_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 1ef3e942ca23..d07cf78e47ed 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -214,6 +214,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { private PreciseCallState mPreciseCallState = new PreciseCallState(); + private int mCallDisconnectCause = DisconnectCause.NOT_VALID; + + private int mCallPreciseDisconnectCause = PreciseDisconnectCause.NOT_VALID; + private boolean mCarrierNetworkChangeState = false; private PhoneCapability mPhoneCapability = null; @@ -714,6 +718,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { remove(r.binder); } } + if ((events & PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES) != 0) { + try { + r.callback.onCallDisconnectCauseChanged(mCallDisconnectCause, + mCallPreciseDisconnectCause); + } catch (RemoteException ex) { + remove(r.binder); + } + } if ((events & PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE) != 0) { try { r.callback.onPreciseDataConnectionStateChanged( @@ -1491,9 +1503,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } handleRemoveListLocked(); } - broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState, - DisconnectCause.NOT_VALID, - PreciseDisconnectCause.NOT_VALID); + broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, + backgroundCallState); } public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause) { @@ -1501,12 +1512,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { return; } synchronized (mRecords) { - mPreciseCallState = new PreciseCallState(mRingingCallState, mForegroundCallState, - mBackgroundCallState, disconnectCause, preciseDisconnectCause); + mCallDisconnectCause = disconnectCause; + mCallPreciseDisconnectCause = preciseDisconnectCause; for (Record r : mRecords) { - if (r.matchPhoneStateListenerEvent(PhoneStateListener.LISTEN_PRECISE_CALL_STATE)) { + if (r.matchPhoneStateListenerEvent(PhoneStateListener + .LISTEN_CALL_DISCONNECT_CAUSES)) { try { - r.callback.onPreciseCallStateChanged(mPreciseCallState); + r.callback.onCallDisconnectCauseChanged(mCallDisconnectCause, + mCallPreciseDisconnectCause); } catch (RemoteException ex) { mRemoveList.add(r.binder); } @@ -1514,8 +1527,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } handleRemoveListLocked(); } - broadcastPreciseCallStateChanged(mRingingCallState, mForegroundCallState, - mBackgroundCallState, disconnectCause, preciseDisconnectCause); } public void notifyPreciseDataConnectionFailed(String reason, String apnType, @@ -1737,6 +1748,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState); pw.println("mPreciseCallState=" + mPreciseCallState); + pw.println("mCallDisconnectCause=" + mCallDisconnectCause); + pw.println("mCallPreciseDisconnectCause=" + mCallPreciseDisconnectCause); pw.println("mCarrierNetworkChangeState=" + mCarrierNetworkChangeState); pw.println("mRingingCallState=" + mRingingCallState); pw.println("mForegroundCallState=" + mForegroundCallState); @@ -1912,13 +1925,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } private void broadcastPreciseCallStateChanged(int ringingCallState, int foregroundCallState, - int backgroundCallState, int disconnectCause, int preciseDisconnectCause) { + int backgroundCallState) { Intent intent = new Intent(TelephonyManager.ACTION_PRECISE_CALL_STATE_CHANGED); intent.putExtra(TelephonyManager.EXTRA_RINGING_CALL_STATE, ringingCallState); intent.putExtra(TelephonyManager.EXTRA_FOREGROUND_CALL_STATE, foregroundCallState); intent.putExtra(TelephonyManager.EXTRA_BACKGROUND_CALL_STATE, backgroundCallState); - intent.putExtra(TelephonyManager.EXTRA_DISCONNECT_CAUSE, disconnectCause); - intent.putExtra(TelephonyManager.EXTRA_PRECISE_DISCONNECT_CAUSE, preciseDisconnectCause); mContext.sendBroadcastAsUser(intent, UserHandle.ALL, android.Manifest.permission.READ_PRECISE_PHONE_STATE); } @@ -2006,6 +2017,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { + "LISTEN_PREFERRED_DATA_SUBID_CHANGE"); } + if ((events & PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES) != 0) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.READ_PRECISE_PHONE_STATE, null); + } + return true; } diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java index c6887ab93109..f53cb8224706 100644 --- a/telephony/java/android/telephony/DisconnectCause.java +++ b/telephony/java/android/telephony/DisconnectCause.java @@ -16,12 +16,16 @@ package android.telephony; +import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; /** - * Contains disconnect call causes generated by the framework and the RIL. + * Describes the cause of a disconnected call. Those disconnect causes can be converted into a more + * generic {@link android.telecom.DisconnectCause} object. + * * @hide */ +@SystemApi public class DisconnectCause { /** The disconnect cause is not valid (Not received a disconnect cause) */ @@ -101,8 +105,8 @@ public class DisconnectCause { /** Unknown error or not specified */ public static final int ERROR_UNSPECIFIED = 36; /** - * Only emergency numbers are allowed, but we tried to dial - * a non-emergency number. + * Only emergency numbers are allowed, but we tried to dial a non-emergency number. + * @hide */ // TODO: This should be the same as NOT_EMERGENCY public static final int EMERGENCY_ONLY = 37; @@ -115,8 +119,7 @@ public class DisconnectCause { */ public static final int DIALED_MMI = 39; /** - * We tried to call a voicemail: URI but the device has no - * voicemail number configured. + * We tried to call a voicemail: URI but the device has no voicemail number configured. */ public static final int VOICEMAIL_NUMBER_MISSING = 40; /** @@ -129,6 +132,8 @@ public class DisconnectCause { * needs to be triggered by a *disconnect* event, rather than when * the InCallScreen first comes to the foreground. For now we use * the needToShowCallLostDialog field for this (see below.) + * + * @hide */ public static final int CDMA_CALL_LOST = 41; /** @@ -169,62 +174,52 @@ public class DisconnectCause { /** * Stk Call Control modified DIAL request to USSD request. - * {@hide} */ public static final int DIAL_MODIFIED_TO_USSD = 46; /** * Stk Call Control modified DIAL request to SS request. - * {@hide} */ public static final int DIAL_MODIFIED_TO_SS = 47; /** * Stk Call Control modified DIAL request to DIAL with modified data. - * {@hide} */ public static final int DIAL_MODIFIED_TO_DIAL = 48; /** * The call was terminated because CDMA phone service and roaming have already been activated. - * {@hide} */ public static final int CDMA_ALREADY_ACTIVATED = 49; /** * The call was terminated because it is not possible to place a video call while TTY is * enabled. - * {@hide} */ public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; /** * The call was terminated because it was pulled to another device. - * {@hide} */ public static final int CALL_PULLED = 51; /** * The call was terminated because it was answered on another device. - * {@hide} */ public static final int ANSWERED_ELSEWHERE = 52; /** * The call was terminated because the maximum allowable number of calls has been reached. - * {@hide} */ public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53; /** * The call was terminated because cellular data has been disabled. * Used when in a video call and the user disables cellular data via the settings. - * {@hide} */ public static final int DATA_DISABLED = 54; /** * The call was terminated because the data policy has disabled cellular data. * Used when in a video call and the user has exceeded the device data limit. - * {@hide} */ public static final int DATA_LIMIT_REACHED = 55; @@ -237,7 +232,6 @@ public class DisconnectCause { /** * The network does not accept the emergency call request because IMEI was used as * identification and this cability is not supported by the network. - * {@hide} */ public static final int IMEI_NOT_ACCEPTED = 58; @@ -249,7 +243,6 @@ public class DisconnectCause { /** * The call has failed because of access class barring. - * {@hide} */ public static final int IMS_ACCESS_BLOCKED = 60; @@ -265,51 +258,43 @@ public class DisconnectCause { /** * Emergency call failed with a temporary fail cause and can be redialed on this slot. - * {@hide} */ public static final int EMERGENCY_TEMP_FAILURE = 63; /** * Emergency call failed with a permanent fail cause and should not be redialed on this - * slot. - * {@hide} + * slot. */ public static final int EMERGENCY_PERM_FAILURE = 64; /** * This cause is used to report a normal event only when no other cause in the normal class * applies. - * {@hide} */ public static final int NORMAL_UNSPECIFIED = 65; /** * Stk Call Control modified DIAL request to video DIAL request. - * {@hide} */ public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66; /** * Stk Call Control modified Video DIAL request to SS request. - * {@hide} */ public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67; /** * Stk Call Control modified Video DIAL request to USSD request. - * {@hide} */ public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68; /** * Stk Call Control modified Video DIAL request to DIAL request. - * {@hide} */ public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69; /** * Stk Call Control modified Video DIAL request to Video DIAL request. - * {@hide} */ public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70; @@ -359,7 +344,10 @@ public class DisconnectCause { // Do nothing. } - /** Returns descriptive string for the specified disconnect cause. */ + /** + * Returns descriptive string for the specified disconnect cause. + * @hide + */ @UnsupportedAppUsage public static String toString(int cause) { switch (cause) { diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java index 0df0dafbe1dd..9317aa73ffc2 100644 --- a/telephony/java/android/telephony/PhoneStateListener.java +++ b/telephony/java/android/telephony/PhoneStateListener.java @@ -173,14 +173,14 @@ public class PhoneStateListener { public static final int LISTEN_CELL_INFO = 0x00000400; /** - * Listen for precise changes and fails to the device calls (cellular). + * Listen for {@link PreciseCallState.State} of ringing, background and foreground calls. * {@more} * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE * READ_PRECISE_PHONE_STATE} * * @hide */ - @UnsupportedAppUsage + @SystemApi public static final int LISTEN_PRECISE_CALL_STATE = 0x00000800; /** @@ -320,6 +320,18 @@ public class PhoneStateListener { */ public static final int LISTEN_EMERGENCY_NUMBER_LIST = 0x01000000; + /** + * Listen for call disconnect causes which contains {@link DisconnectCause} and + * {@link PreciseDisconnectCause}. + * {@more} + * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE + * READ_PRECISE_PHONE_STATE} + * + * @hide + */ + @SystemApi + public static final int LISTEN_CALL_DISCONNECT_CAUSES = 0x02000000; + /* * Subscription used to listen to the phone state changes * @hide @@ -530,15 +542,27 @@ public class PhoneStateListener { /** * Callback invoked when precise device call state changes. - * + * @param callState {@link PreciseCallState} * @hide */ - @UnsupportedAppUsage + @SystemApi public void onPreciseCallStateChanged(PreciseCallState callState) { // default implementation empty } /** + * Callback invoked when call disconnect cause changes. + * @param disconnectCause {@link DisconnectCause}. + * @param preciseDisconnectCause {@link PreciseDisconnectCause}. + * + * @hide + */ + @SystemApi + public void onCallDisconnectCauseChanged(int disconnectCause, int preciseDisconnectCause) { + // default implementation empty + } + + /** * Callback invoked when data connection state changes with precise information. * * @hide @@ -799,6 +823,15 @@ public class PhoneStateListener { () -> mExecutor.execute(() -> psl.onPreciseCallStateChanged(callState))); } + public void onCallDisconnectCauseChanged(int disconnectCause, int preciseDisconnectCause) { + PhoneStateListener psl = mPhoneStateListenerWeakRef.get(); + if (psl == null) return; + + Binder.withCleanCallingIdentity( + () -> mExecutor.execute(() -> psl.onCallDisconnectCauseChanged( + disconnectCause, preciseDisconnectCause))); + } + public void onPreciseDataConnectionStateChanged( PreciseDataConnectionState dataConnectionState) { PhoneStateListener psl = mPhoneStateListenerWeakRef.get(); diff --git a/telephony/java/android/telephony/PreciseCallState.java b/telephony/java/android/telephony/PreciseCallState.java index ed5c26ac5cf2..59f3e1f0e7f7 100644 --- a/telephony/java/android/telephony/PreciseCallState.java +++ b/telephony/java/android/telephony/PreciseCallState.java @@ -16,29 +16,51 @@ package android.telephony; +import android.annotation.IntDef; +import android.annotation.SystemApi; import android.annotation.UnsupportedAppUsage; import android.os.Parcel; import android.os.Parcelable; import android.telephony.DisconnectCause; import android.telephony.PreciseDisconnectCause; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.Objects; + /** - * Contains precise call state and call fail causes generated by the - * framework and the RIL. + * Contains precise call states. * * The following call information is included in returned PreciseCallState: * * <ul> - * <li>Ringing call state. - * <li>Foreground call state. - * <li>Background call state. - * <li>Disconnect cause; generated by the framework. - * <li>Precise disconnect cause; generated by the RIL. + * <li>Precise ringing call state. + * <li>Precise foreground call state. + * <li>Precise background call state. * </ul> * + * @see android.telephony.TelephonyManager.CallState which contains generic call states. + * * @hide */ -public class PreciseCallState implements Parcelable { +@SystemApi +public final class PreciseCallState implements Parcelable { + + /** @hide */ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = {"PRECISE_CALL_STATE_"}, + value = { + PRECISE_CALL_STATE_NOT_VALID, + PRECISE_CALL_STATE_IDLE, + PRECISE_CALL_STATE_ACTIVE, + PRECISE_CALL_STATE_HOLDING, + PRECISE_CALL_STATE_DIALING, + PRECISE_CALL_STATE_ALERTING, + PRECISE_CALL_STATE_INCOMING, + PRECISE_CALL_STATE_WAITING, + PRECISE_CALL_STATE_DISCONNECTED, + PRECISE_CALL_STATE_DISCONNECTING}) + public @interface State {} /** Call state is not valid (Not received a call state). */ public static final int PRECISE_CALL_STATE_NOT_VALID = -1; @@ -61,9 +83,9 @@ public class PreciseCallState implements Parcelable { /** Call state: Disconnecting. */ public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; - private int mRingingCallState = PRECISE_CALL_STATE_NOT_VALID; - private int mForegroundCallState = PRECISE_CALL_STATE_NOT_VALID; - private int mBackgroundCallState = PRECISE_CALL_STATE_NOT_VALID; + private @State int mRingingCallState = PRECISE_CALL_STATE_NOT_VALID; + private @State int mForegroundCallState = PRECISE_CALL_STATE_NOT_VALID; + private @State int mBackgroundCallState = PRECISE_CALL_STATE_NOT_VALID; private int mDisconnectCause = DisconnectCause.NOT_VALID; private int mPreciseDisconnectCause = PreciseDisconnectCause.NOT_VALID; @@ -73,8 +95,9 @@ public class PreciseCallState implements Parcelable { * @hide */ @UnsupportedAppUsage - public PreciseCallState(int ringingCall, int foregroundCall, int backgroundCall, - int disconnectCause, int preciseDisconnectCause) { + public PreciseCallState(@State int ringingCall, @State int foregroundCall, + @State int backgroundCall, int disconnectCause, + int preciseDisconnectCause) { mRingingCallState = ringingCall; mForegroundCallState = foregroundCall; mBackgroundCallState = backgroundCall; @@ -92,6 +115,8 @@ public class PreciseCallState implements Parcelable { /** * Construct a PreciseCallState object from the given parcel. + * + * @hide */ private PreciseCallState(Parcel in) { mRingingCallState = in.readInt(); @@ -102,59 +127,23 @@ public class PreciseCallState implements Parcelable { } /** - * Get precise ringing call state - * - * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID - * @see PreciseCallState#PRECISE_CALL_STATE_IDLE - * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE - * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING - * @see PreciseCallState#PRECISE_CALL_STATE_DIALING - * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING - * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING - * @see PreciseCallState#PRECISE_CALL_STATE_WAITING - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING + * Returns the precise ringing call state. */ - @UnsupportedAppUsage - public int getRingingCallState() { + public @State int getRingingCallState() { return mRingingCallState; } /** - * Get precise foreground call state - * - * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID - * @see PreciseCallState#PRECISE_CALL_STATE_IDLE - * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE - * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING - * @see PreciseCallState#PRECISE_CALL_STATE_DIALING - * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING - * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING - * @see PreciseCallState#PRECISE_CALL_STATE_WAITING - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING + * Returns the precise foreground call state. */ - @UnsupportedAppUsage - public int getForegroundCallState() { + public @State int getForegroundCallState() { return mForegroundCallState; } /** - * Get precise background call state - * - * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID - * @see PreciseCallState#PRECISE_CALL_STATE_IDLE - * @see PreciseCallState#PRECISE_CALL_STATE_ACTIVE - * @see PreciseCallState#PRECISE_CALL_STATE_HOLDING - * @see PreciseCallState#PRECISE_CALL_STATE_DIALING - * @see PreciseCallState#PRECISE_CALL_STATE_ALERTING - * @see PreciseCallState#PRECISE_CALL_STATE_INCOMING - * @see PreciseCallState#PRECISE_CALL_STATE_WAITING - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTED - * @see PreciseCallState#PRECISE_CALL_STATE_DISCONNECTING + * Returns the precise background call state. */ - @UnsupportedAppUsage - public int getBackgroundCallState() { + public @State int getBackgroundCallState() { return mBackgroundCallState; } @@ -199,6 +188,11 @@ public class PreciseCallState implements Parcelable { * @see DisconnectCause#CDMA_NOT_EMERGENCY * @see DisconnectCause#CDMA_ACCESS_BLOCKED * @see DisconnectCause#ERROR_UNSPECIFIED + * + * TODO: remove disconnect cause from preciseCallState as there is no link between random + * connection disconnect cause with foreground, background or ringing call. + * + * @hide */ @UnsupportedAppUsage public int getDisconnectCause() { @@ -238,6 +232,11 @@ public class PreciseCallState implements Parcelable { * @see PreciseDisconnectCause#CDMA_NOT_EMERGENCY * @see PreciseDisconnectCause#CDMA_ACCESS_BLOCKED * @see PreciseDisconnectCause#ERROR_UNSPECIFIED + * + * TODO: remove precise disconnect cause from preciseCallState as there is no link between + * random connection disconnect cause with foreground, background or ringing call. + * + * @hide */ @UnsupportedAppUsage public int getPreciseDisconnectCause() { @@ -272,14 +271,8 @@ public class PreciseCallState implements Parcelable { @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + mRingingCallState; - result = prime * result + mForegroundCallState; - result = prime * result + mBackgroundCallState; - result = prime * result + mDisconnectCause; - result = prime * result + mPreciseDisconnectCause; - return result; + return Objects.hash(mRingingCallState, mForegroundCallState, mForegroundCallState, + mDisconnectCause, mPreciseDisconnectCause); } @Override diff --git a/telephony/java/android/telephony/PreciseDisconnectCause.java b/telephony/java/android/telephony/PreciseDisconnectCause.java index 2acaf34dbb30..af88748af9e6 100644 --- a/telephony/java/android/telephony/PreciseDisconnectCause.java +++ b/telephony/java/android/telephony/PreciseDisconnectCause.java @@ -16,279 +16,329 @@ package android.telephony; +import android.annotation.SystemApi; + /** - * Contains precise disconnect call causes generated by the - * framework and the RIL. - * + * Contains precise disconnect call causes generated by the framework and the RIL. * @hide */ +@SystemApi public class PreciseDisconnectCause { - /** The disconnect cause is not valid (Not received a disconnect cause)*/ + /** The disconnect cause is not valid (Not received a disconnect cause).*/ public static final int NOT_VALID = -1; - /** No disconnect cause provided. Generally a local disconnect or an incoming missed call */ + /** No disconnect cause provided. Generally a local disconnect or an incoming missed call. */ public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0; /** * The destination cannot be reached because the number, although valid, - * is not currently assigned + * is not currently assigned. */ public static final int UNOBTAINABLE_NUMBER = 1; - /** The user cannot be reached because the network through which the call has been - * routed does not serve the destination desired + /** + * The user cannot be reached because the network through which the call has been routed does + * not serve the destination desired. */ public static final int NO_ROUTE_TO_DESTINATION = 3; - /** The channel most recently identified is not acceptable to the sending entity for - * use in this call + /** + * The channel most recently identified is not acceptable to the sending entity for use in this + * call. */ public static final int CHANNEL_UNACCEPTABLE = 6; - /** The MS has tried to access a service that the MS's network operator or service - * provider is not prepared to allow + /** + * The mobile station (MS) has tried to access a service that the MS's network operator or + * service provider is not prepared to allow. */ public static final int OPERATOR_DETERMINED_BARRING = 8; - /** One of the users involved in the call has requested that the call is cleared */ + /** One of the users involved in the call has requested that the call is cleared. */ public static final int NORMAL = 16; - /** The called user is unable to accept another call */ + /** The called user is unable to accept another call. */ public static final int BUSY = 17; - /** The user does not respond to a call establishment message with either an alerting - * or connect indication within the prescribed period of time allocated + /** + * The user does not respond to a call establishment message with either an alerting or connect + * indication within the prescribed period of time allocated. */ public static final int NO_USER_RESPONDING = 18; - /** The user has provided an alerting indication but has not provided a connect - * indication within a prescribed period of time + /** + * The user has provided an alerting indication but has not provided a connect indication + * within a prescribed period of time. */ public static final int NO_ANSWER_FROM_USER = 19; - /** The equipment sending this cause does not wish to accept this call */ + /** The equipment sending this cause does not wish to accept this call. */ public static final int CALL_REJECTED = 21; - /** The called number is no longer assigned */ + /** The called number is no longer assigned. */ public static final int NUMBER_CHANGED = 22; - /** This cause is returned to the network when a mobile station clears an active - * call which is being pre-empted by another call with higher precedence + /** + * This cause is returned to the network when a mobile station clears an active call which is + * being pre-empted by another call with higher precedence. */ public static final int PREEMPTION = 25; - /** The destination indicated by the mobile station cannot be reached because - * the interface to the destination is not functioning correctly + /** + * The destination indicated by the mobile station cannot be reached because the interface to + * the destination is not functioning correctly. */ public static final int DESTINATION_OUT_OF_ORDER = 27; - /** The called party number is not a valid format or is not complete */ + /** The called party number is not a valid format or is not complete. */ public static final int INVALID_NUMBER_FORMAT = 28; - /** The facility requested by user can not be provided by the network */ + /** The facility requested by user can not be provided by the network. */ public static final int FACILITY_REJECTED = 29; - /** Provided in response to a STATUS ENQUIRY message */ + /** Provided in response to a STATUS ENQUIRY message. */ public static final int STATUS_ENQUIRY = 30; - /** Reports a normal disconnect only when no other normal cause applies */ + /** Reports a normal disconnect only when no other normal cause applies. */ public static final int NORMAL_UNSPECIFIED = 31; - /** There is no channel presently available to handle the call */ + /** There is no channel presently available to handle the call. */ public static final int NO_CIRCUIT_AVAIL = 34; - /** The network is not functioning correctly and that the condition is likely - * to last a relatively long period of time + /** + * The network is not functioning correctly and that the condition is likely to last a + * relatively long period of time. */ public static final int NETWORK_OUT_OF_ORDER = 38; /** - * The network is not functioning correctly and the condition is not likely to last - * a long period of time + * The network is not functioning correctly and the condition is not likely to last a long + * period of time. */ public static final int TEMPORARY_FAILURE = 41; - /** The switching equipment is experiencing a period of high traffic */ + /** The switching equipment is experiencing a period of high traffic. */ public static final int SWITCHING_CONGESTION = 42; - /** The network could not deliver access information to the remote user as requested */ + /** The network could not deliver access information to the remote user as requested. */ public static final int ACCESS_INFORMATION_DISCARDED = 43; - /** The channel cannot be provided */ + /** The channel cannot be provided. */ public static final int CHANNEL_NOT_AVAIL = 44; - /** This cause is used to report a resource unavailable event only when no other - * cause in the resource unavailable class applies + /** + * This cause is used to report a resource unavailable event only when no other cause in the + * resource unavailable class applies. */ public static final int RESOURCES_UNAVAILABLE_OR_UNSPECIFIED = 47; - /** The requested quality of service (ITU-T X.213) cannot be provided */ + /** The requested quality of service (ITU-T X.213) cannot be provided. */ public static final int QOS_NOT_AVAIL = 49; - /** The facility could not be provided by the network because the user has no - * complete subscription + /** + * The facility could not be provided by the network because the user has no complete + * subscription. */ public static final int REQUESTED_FACILITY_NOT_SUBSCRIBED = 50; - /** Incoming calls are not allowed within this CUG */ + /** Incoming calls are not allowed within this calling user group (CUG). */ public static final int INCOMING_CALLS_BARRED_WITHIN_CUG = 55; - /** The mobile station is not authorized to use bearer capability requested */ + /** The mobile station is not authorized to use bearer capability requested. */ public static final int BEARER_CAPABILITY_NOT_AUTHORIZED = 57; - /** The requested bearer capability is not available at this time */ + /** The requested bearer capability is not available at this time. */ public static final int BEARER_NOT_AVAIL = 58; - /** The service option is not availble at this time */ + /** The service option is not availble at this time. */ public static final int SERVICE_OPTION_NOT_AVAILABLE = 63; - /** The equipment sending this cause does not support the bearer capability requested */ + /** The equipment sending this cause does not support the bearer capability requested. */ public static final int BEARER_SERVICE_NOT_IMPLEMENTED = 65; - /** The call clearing is due to ACM being greater than or equal to ACMmax */ + /** The call clearing is due to ACM being greater than or equal to ACMmax. */ public static final int ACM_LIMIT_EXCEEDED = 68; - /** The equipment sending this cause does not support the requested facility */ + /** The equipment sending this cause does not support the requested facility. */ public static final int REQUESTED_FACILITY_NOT_IMPLEMENTED = 69; - /** The equipment sending this cause only supports the restricted version of - * the requested bearer capability + /** + * The equipment sending this cause only supports the restricted version of the requested bearer + * capability. */ public static final int ONLY_DIGITAL_INFORMATION_BEARER_AVAILABLE = 70; - /** The service requested is not implemented at network */ + /** The service requested is not implemented at network. */ public static final int SERVICE_OR_OPTION_NOT_IMPLEMENTED = 79; - /** The equipment sending this cause has received a message with a transaction identifier - * which is not currently in use on the MS-network interface + /** + * The equipment sending this cause has received a message with a transaction identifier + * which is not currently in use on the mobile station network interface. */ public static final int INVALID_TRANSACTION_IDENTIFIER = 81; - /** The called user for the incoming CUG call is not a member of the specified CUG */ + /** + * The called user for the incoming CUG call is not a member of the specified calling user + * group (CUG). + */ public static final int USER_NOT_MEMBER_OF_CUG = 87; - /** The equipment sending this cause has received a request which can't be accomodated */ + /** The equipment sending this cause has received a request which can't be accomodated. */ public static final int INCOMPATIBLE_DESTINATION = 88; - /** This cause is used to report receipt of a message with semantically incorrect contents */ + /** This cause is used to report receipt of a message with semantically incorrect contents. */ public static final int SEMANTICALLY_INCORRECT_MESSAGE = 95; - /** The equipment sending this cause has received a message with a non-semantical - * mandatory IE error + /** + * The equipment sending this cause has received a message with a non-semantical mandatory + * information element (IE) error. */ public static final int INVALID_MANDATORY_INFORMATION = 96; - /** This is sent in response to a message which is not defined, or defined but not - * implemented by the equipment sending this cause + /** + * This is sent in response to a message which is not defined, or defined but not implemented + * by the equipment sending this cause. */ public static final int MESSAGE_TYPE_NON_IMPLEMENTED = 97; - /** The equipment sending this cause has received a message not compatible with the - * protocol state + /** + * The equipment sending this cause has received a message not compatible with the protocol + * state. */ public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98; - /** The equipment sending this cause has received a message which includes information - * elements not recognized because its identifier is not defined or it is defined but not - * implemented by the equipment sending the cause + /** + * The equipment sending this cause has received a message which includes information + * elements not recognized because its identifier is not defined or it is defined but not + * implemented by the equipment sending the cause. */ public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; - /** The equipment sending this cause has received a message with conditional IE errors */ + /** The equipment sending this cause has received a message with conditional IE errors. */ public static final int CONDITIONAL_IE_ERROR = 100; - /** The message has been received which is incompatible with the protocol state */ + /** The message has been received which is incompatible with the protocol state. */ public static final int MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101; - /** The procedure has been initiated by the expiry of a timer in association with - * 3GPP TS 24.008 error handling procedures + /** + * The procedure has been initiated by the expiry of a timer in association with + * 3GPP TS 24.008 error handling procedures. */ public static final int RECOVERY_ON_TIMER_EXPIRED = 102; - /** This protocol error event is reported only when no other cause in the protocol - * error class applies + /** + * This protocol error event is reported only when no other cause in the protocol error class + * applies. */ public static final int PROTOCOL_ERROR_UNSPECIFIED = 111; - /** interworking with a network which does not provide causes for actions it takes - * thus, the precise cause for a message which is being sent cannot be ascertained + /** + * Interworking with a network which does not provide causes for actions it takes thus, the + * precise cause for a message which is being sent cannot be ascertained. */ public static final int INTERWORKING_UNSPECIFIED = 127; - /** The call is restricted */ + /** The call is restricted. */ public static final int CALL_BARRED = 240; - /** The call is blocked by the Fixed Dialing Number list */ + /** The call is blocked by the Fixed Dialing Number list. */ public static final int FDN_BLOCKED = 241; - /** The given IMSI is not known at the VLR */ - /** TS 24.008 cause 4 */ + /** The given IMSI is not known at the Visitor Location Register (VLR) TS 24.008 cause . */ public static final int IMSI_UNKNOWN_IN_VLR = 242; /** * The network does not accept emergency call establishment using an IMEI or not accept attach - * procedure for emergency services using an IMEI + * procedure for emergency services using an IMEI. */ public static final int IMEI_NOT_ACCEPTED = 243; - /** The call cannot be established because RADIO is OFF */ + /** The call cannot be established because RADIO is OFF. */ public static final int RADIO_OFF = 247; - /** The call cannot be established because of no cell coverage */ + /** The call cannot be established because of no cell coverage. */ public static final int OUT_OF_SRV = 248; - /** The call cannot be established because of no valid SIM */ + /** The call cannot be established because of no valid SIM. */ public static final int NO_VALID_SIM = 249; - /** The call is dropped or failed internally by modem */ + /** The call is dropped or failed internally by modem. */ public static final int RADIO_INTERNAL_ERROR = 250; - /** Call failed because of UE timer expired while waiting for a response from network */ + /** Call failed because of UE timer expired while waiting for a response from network. */ public static final int NETWORK_RESP_TIMEOUT = 251; - /** Call failed because of a network reject */ + /** Call failed because of a network reject. */ public static final int NETWORK_REJECT = 252; - /** Call failed because of radio access failure. ex. RACH failure */ + /** Call failed because of radio access failure. ex. RACH failure. */ public static final int RADIO_ACCESS_FAILURE = 253; - /** Call failed/dropped because of a RLF */ + /** Call failed/dropped because of a Radio Link Failure (RLF). */ public static final int RADIO_LINK_FAILURE = 254; - /** Call failed/dropped because of radio link lost */ + /** Call failed/dropped because of radio link lost. */ public static final int RADIO_LINK_LOST = 255; - /** Call failed because of a radio uplink issue */ + /** Call failed because of a radio uplink issue. */ public static final int RADIO_UPLINK_FAILURE = 256; - /** Call failed because of a RRC connection setup failure */ + /** Call failed because of a RRC (Radio Resource Control) connection setup failure. */ public static final int RADIO_SETUP_FAILURE = 257; - /** Call failed/dropped because of RRC connection release from NW */ + /** Call failed/dropped because of RRC (Radio Resource Control) connection release from NW. */ public static final int RADIO_RELEASE_NORMAL = 258; - /** Call failed/dropped because of RRC abnormally released by modem/network */ + /** + * Call failed/dropped because of RRC (Radio Resource Control) abnormally released by + * modem/network. + */ public static final int RADIO_RELEASE_ABNORMAL = 259; - /** Call setup failed because of access class barring */ + /** Call setup failed because of access class barring. */ public static final int ACCESS_CLASS_BLOCKED = 260; - /** Call failed/dropped because of a network detach */ + /** Call failed/dropped because of a network detach. */ public static final int NETWORK_DETACH = 261; - /** MS is locked until next power cycle */ + /** Mobile station (MS) is locked until next power cycle. */ public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000; - /** Drop call*/ + /** Drop call. */ public static final int CDMA_DROP = 1001; - /** INTERCEPT order received, MS state idle entered */ + /** INTERCEPT order received, Mobile station (MS) state idle entered. */ public static final int CDMA_INTERCEPT = 1002; - /** MS has been redirected, call is cancelled */ + /** Mobile station (MS) has been redirected, call is cancelled. */ public static final int CDMA_REORDER = 1003; - /** Service option rejection */ + /** Service option rejection. */ public static final int CDMA_SO_REJECT = 1004; - /** Requested service is rejected, retry delay is set */ + /** Requested service is rejected, retry delay is set. */ public static final int CDMA_RETRY_ORDER = 1005; - /** Unable to obtain access to the CDMA system */ + /** Unable to obtain access to the CDMA system. */ public static final int CDMA_ACCESS_FAILURE = 1006; - /** Not a preempted call */ + /** Not a preempted call. */ public static final int CDMA_PREEMPTED = 1007; - /** Not an emergency call */ + /** Not an emergency call. */ public static final int CDMA_NOT_EMERGENCY = 1008; - /** Access Blocked by CDMA network */ + /** Access Blocked by CDMA network. */ public static final int CDMA_ACCESS_BLOCKED = 1009; /** Mapped from ImsReasonInfo */ + // TODO: remove ImsReasonInfo from preciseDisconnectCause /* The passed argument is an invalid */ + /** @hide */ public static final int LOCAL_ILLEGAL_ARGUMENT = 1200; // The operation is invoked in invalid call state + /** @hide */ public static final int LOCAL_ILLEGAL_STATE = 1201; // IMS service internal error + /** @hide */ public static final int LOCAL_INTERNAL_ERROR = 1202; // IMS service goes down (service connection is lost) + /** @hide */ public static final int LOCAL_IMS_SERVICE_DOWN = 1203; // No pending incoming call exists + /** @hide */ public static final int LOCAL_NO_PENDING_CALL = 1204; // Service unavailable; by power off + /** @hide */ public static final int LOCAL_POWER_OFF = 1205; // Service unavailable; by low battery + /** @hide */ public static final int LOCAL_LOW_BATTERY = 1206; // Service unavailable; by out of service (data service state) + /** @hide */ public static final int LOCAL_NETWORK_NO_SERVICE = 1207; /* Service unavailable; by no LTE coverage * (VoLTE is not supported even though IMS is registered) */ + /** @hide */ public static final int LOCAL_NETWORK_NO_LTE_COVERAGE = 1208; /** Service unavailable; by located in roaming area */ + /** @hide */ public static final int LOCAL_NETWORK_ROAMING = 1209; /** Service unavailable; by IP changed */ + /** @hide */ public static final int LOCAL_NETWORK_IP_CHANGED = 1210; /** Service unavailable; other */ + /** @hide */ public static final int LOCAL_SERVICE_UNAVAILABLE = 1211; /* Service unavailable; IMS connection is lost (IMS is not registered) */ + /** @hide */ public static final int LOCAL_NOT_REGISTERED = 1212; /** Max call exceeded */ + /** @hide */ public static final int LOCAL_MAX_CALL_EXCEEDED = 1213; /** Call decline */ + /** @hide */ public static final int LOCAL_CALL_DECLINE = 1214; /** SRVCC is in progress */ + /** @hide */ public static final int LOCAL_CALL_VCC_ON_PROGRESSING = 1215; /** Resource reservation is failed (QoS precondition) */ + /** @hide */ public static final int LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 1216; /** 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 + * @hide */ public static final int LOCAL_CALL_CS_RETRY_REQUIRED = 1217; /** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */ + /** @hide */ public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED = 1218; /** IMS call is already terminated (in TERMINATED state) */ + /** @hide */ public static final int LOCAL_CALL_TERMINATED = 1219; /** Handover not feasible */ + /** @hide */ public static final int LOCAL_HO_NOT_FEASIBLE = 1220; /** 1xx waiting timer is expired after sending INVITE request (MO only) */ + /** @hide */ public static final int TIMEOUT_1XX_WAITING = 1221; /** 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 + * @hide */ public static final int TIMEOUT_NO_ANSWER = 1222; /** 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 + * @hide */ public static final int TIMEOUT_NO_ANSWER_CALL_UPDATE = 1223; @@ -296,102 +346,142 @@ public class PreciseDisconnectCause { * STATUSCODE (SIP response code) (IMS -> Telephony) */ /** SIP request is redirected */ + /** @hide */ public static final int SIP_REDIRECTED = 1300; /** 4xx responses */ /** 400 : Bad Request */ + /** @hide */ public static final int SIP_BAD_REQUEST = 1310; /** 403 : Forbidden */ + /** @hide */ public static final int SIP_FORBIDDEN = 1311; /** 404 : Not Found */ + /** @hide */ public static final int SIP_NOT_FOUND = 1312; /** 415 : Unsupported Media Type * 416 : Unsupported URI Scheme * 420 : Bad Extension */ + /** @hide */ public static final int SIP_NOT_SUPPORTED = 1313; /** 408 : Request Timeout */ + /** @hide */ public static final int SIP_REQUEST_TIMEOUT = 1314; /** 480 : Temporarily Unavailable */ + /** @hide */ public static final int SIP_TEMPRARILY_UNAVAILABLE = 1315; /** 484 : Address Incomplete */ + /** @hide */ public static final int SIP_BAD_ADDRESS = 1316; /** 486 : Busy Here * 600 : Busy Everywhere */ + /** @hide */ public static final int SIP_BUSY = 1317; /** 487 : Request Terminated */ + /** @hide */ public static final int SIP_REQUEST_CANCELLED = 1318; /** 406 : Not Acceptable * 488 : Not Acceptable Here * 606 : Not Acceptable */ + /** @hide */ public static final int SIP_NOT_ACCEPTABLE = 1319; /** 410 : Gone * 604 : Does Not Exist Anywhere */ + /** @hide */ public static final int SIP_NOT_REACHABLE = 1320; /** Others */ + /** @hide */ public static final int SIP_CLIENT_ERROR = 1321; /** 481 : Transaction Does Not Exist */ + /** @hide */ public static final int SIP_TRANSACTION_DOES_NOT_EXIST = 1322; /** 5xx responses * 501 : Server Internal Error */ + /** @hide */ public static final int SIP_SERVER_INTERNAL_ERROR = 1330; /** 503 : Service Unavailable */ + /** @hide */ public static final int SIP_SERVICE_UNAVAILABLE = 1331; /** 504 : Server Time-out */ + /** @hide */ public static final int SIP_SERVER_TIMEOUT = 1332; /** Others */ + /** @hide */ public static final int SIP_SERVER_ERROR = 1333; /** 6xx responses * 603 : Decline */ + /** @hide */ public static final int SIP_USER_REJECTED = 1340; /** Others */ + /** @hide */ public static final int SIP_GLOBAL_ERROR = 1341; /** Emergency failure */ + /** @hide */ public static final int EMERGENCY_TEMP_FAILURE = 1342; + /** @hide */ public static final int EMERGENCY_PERM_FAILURE = 1343; /** Media resource initialization failed */ + /** @hide */ public static final int MEDIA_INIT_FAILED = 1400; /** RTP timeout (no audio / video traffic in the session) */ + /** @hide */ public static final int MEDIA_NO_DATA = 1401; /** Media is not supported; so dropped the call */ + /** @hide */ public static final int MEDIA_NOT_ACCEPTABLE = 1402; /** Unknown media related errors */ + /** @hide */ public static final int MEDIA_UNSPECIFIED = 1403; /** User triggers the call end */ + /** @hide */ public static final int USER_TERMINATED = 1500; /** No action while an incoming call is ringing */ + /** @hide */ public static final int USER_NOANSWER = 1501; /** User ignores an incoming call */ + /** @hide */ public static final int USER_IGNORE = 1502; /** User declines an incoming call */ + /** @hide */ public static final int USER_DECLINE = 1503; /** Device declines/ends a call due to low battery */ + /** @hide */ public static final int LOW_BATTERY = 1504; /** Device declines call due to blacklisted call ID */ + /** @hide */ public static final int BLACKLISTED_CALL_ID = 1505; /** The call is terminated by the network or remote user */ + /** @hide */ public static final int USER_TERMINATED_BY_REMOTE = 1510; /** * UT */ + /** @hide */ public static final int UT_NOT_SUPPORTED = 1800; + /** @hide */ public static final int UT_SERVICE_UNAVAILABLE = 1801; + /** @hide */ public static final int UT_OPERATION_NOT_ALLOWED = 1802; + /** @hide */ public static final int UT_NETWORK_ERROR = 1803; + /** @hide */ public static final int UT_CB_PASSWORD_MISMATCH = 1804; /** * ECBM + * @hide */ public static final int ECBM_NOT_SUPPORTED = 1900; /** * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework. + * @hide */ public static final int MULTIENDPOINT_NOT_SUPPORTED = 1901; @@ -405,56 +495,68 @@ public class PreciseDisconnectCause { * active wifi call and at the edge of coverage and there is no qualified LTE network available * to handover the call to. We get a handover NOT_TRIGERRED message from the modem. This error * code is received as part of the handover message. + * @hide */ public static final int CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 2000; /** * MT call has ended due to a release from the network * because the call was answered elsewhere + * @hide */ public static final int ANSWERED_ELSEWHERE = 2100; /** * For MultiEndpoint - Call Pull request has failed + * @hide */ public static final int CALL_PULL_OUT_OF_SYNC = 2101; /** * For MultiEndpoint - Call has been pulled from primary to secondary + * @hide */ public static final int CALL_PULLED = 2102; /** * Supplementary services (HOLD/RESUME) failure error codes. * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision. + * @hide */ public static final int SUPP_SVC_FAILED = 2300; + /** @hide */ public static final int SUPP_SVC_CANCELLED = 2301; + /** @hide */ public static final int SUPP_SVC_REINVITE_COLLISION = 2302; /** * DPD Procedure received no response or send failed + * @hide */ public static final int IWLAN_DPD_FAILURE = 2400; /** * Establishment of the ePDG Tunnel Failed + * @hide */ public static final int EPDG_TUNNEL_ESTABLISH_FAILURE = 2500; /** * Re-keying of the ePDG Tunnel Failed; may not always result in teardown + * @hide */ public static final int EPDG_TUNNEL_REKEY_FAILURE = 2501; /** * Connection to the packet gateway is lost + * @hide */ public static final int EPDG_TUNNEL_LOST_CONNECTION = 2502; /** * The maximum number of calls allowed has been reached. Used in a multi-endpoint scenario * where the number of calls across all connected devices has reached the maximum. + * @hide */ public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 2503; @@ -462,21 +564,25 @@ public class PreciseDisconnectCause { * Similar to {@link #CODE_LOCAL_CALL_DECLINE}, except indicates that a remote device has * declined the call. Used in a multi-endpoint scenario where a remote device declined an * incoming call. + * @hide */ public static final int REMOTE_CALL_DECLINE = 2504; /** * Indicates the call was disconnected due to the user reaching their data limit. + * @hide */ public static final int DATA_LIMIT_REACHED = 2505; /** * Indicates the call was disconnected due to the user disabling cellular data. + * @hide */ public static final int DATA_DISABLED = 2506; /** * Indicates a call was disconnected due to loss of wifi signal. + * @hide */ public static final int WIFI_LOST = 2507; @@ -499,7 +605,7 @@ public class PreciseDisconnectCause { public static final int OEM_CAUSE_14 = 0xf00e; public static final int OEM_CAUSE_15 = 0xf00f; - /** Disconnected due to unspecified reasons */ + /** Disconnected due to unspecified reasons. */ public static final int ERROR_UNSPECIFIED = 0xffff; /** Private constructor to avoid class instantiation. */ diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index e0632b1e0392..c7df36b62a79 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -625,8 +625,6 @@ public class TelephonyManager { * The {@link #EXTRA_RINGING_CALL_STATE} extra indicates the ringing call state. * The {@link #EXTRA_FOREGROUND_CALL_STATE} extra indicates the foreground call state. * The {@link #EXTRA_BACKGROUND_CALL_STATE} extra indicates the background call state. - * The {@link #EXTRA_DISCONNECT_CAUSE} extra indicates the disconnect cause. - * The {@link #EXTRA_PRECISE_DISCONNECT_CAUSE} extra indicates the precise disconnect cause. * * <p class="note"> * Requires the READ_PRECISE_PHONE_STATE permission. @@ -634,12 +632,10 @@ public class TelephonyManager { * @see #EXTRA_RINGING_CALL_STATE * @see #EXTRA_FOREGROUND_CALL_STATE * @see #EXTRA_BACKGROUND_CALL_STATE - * @see #EXTRA_DISCONNECT_CAUSE - * @see #EXTRA_PRECISE_DISCONNECT_CAUSE * * <p class="note"> * Requires the READ_PRECISE_PHONE_STATE permission. - * + * @deprecated use {@link PhoneStateListener#LISTEN_PRECISE_CALL_STATE} instead * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) @@ -647,8 +643,28 @@ public class TelephonyManager { "android.intent.action.PRECISE_CALL_STATE"; /** - * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast - * for an integer containing the state of the current ringing call. + * Broadcast intent action indicating that call disconnect cause has changed. + * + * <p> + * The {@link #EXTRA_DISCONNECT_CAUSE} extra indicates the disconnect cause. + * The {@link #EXTRA_PRECISE_DISCONNECT_CAUSE} extra indicates the precise disconnect cause. + * + * <p class="note"> + * Requires the READ_PRECISE_PHONE_STATE permission. + * + * @see #EXTRA_DISCONNECT_CAUSE + * @see #EXTRA_PRECISE_DISCONNECT_CAUSE + * + * @hide + */ + @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_CALL_DISCONNECT_CAUSE_CHANGED = + "android.intent.action.CALL_DISCONNECT_CAUSE"; + + /** + * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and + * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer + * containing the state of the current ringing call. * * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID * @see PreciseCallState#PRECISE_CALL_STATE_IDLE @@ -670,8 +686,9 @@ public class TelephonyManager { public static final String EXTRA_RINGING_CALL_STATE = "ringing_state"; /** - * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast - * for an integer containing the state of the current foreground call. + * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and + * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer + * containing the state of the current foreground call. * * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID * @see PreciseCallState#PRECISE_CALL_STATE_IDLE @@ -693,8 +710,9 @@ public class TelephonyManager { public static final String EXTRA_FOREGROUND_CALL_STATE = "foreground_state"; /** - * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast - * for an integer containing the state of the current background call. + * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and + * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer + * containing the state of the current background call. * * @see PreciseCallState#PRECISE_CALL_STATE_NOT_VALID * @see PreciseCallState#PRECISE_CALL_STATE_IDLE @@ -716,8 +734,9 @@ public class TelephonyManager { public static final String EXTRA_BACKGROUND_CALL_STATE = "background_state"; /** - * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast - * for an integer containing the disconnect cause. + * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and + * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer + * containing the disconnect cause. * * @see DisconnectCause * @@ -730,8 +749,9 @@ public class TelephonyManager { public static final String EXTRA_DISCONNECT_CAUSE = "disconnect_cause"; /** - * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast - * for an integer containing the disconnect cause provided by the RIL. + * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and + * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer + * containing the disconnect cause provided by the RIL. * * @see PreciseDisconnectCause * diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl index 78fc0bc487bf..00cf9c3577ec 100644 --- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl +++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl @@ -55,5 +55,6 @@ oneway interface IPhoneStateListener { void onPreferredDataSubIdChanged(in int subId); void onRadioPowerStateChanged(in int state); void onEmergencyNumberListChanged(in Map emergencyNumberList); + void onCallDisconnectCauseChanged(in int disconnectCause, in int preciseDisconnectCause); } |