Merge "new SystemAPI for preciseCallState and DisconnectCause"

This commit is contained in:
Chen Xu
2018-12-21 03:52:16 +00:00
committed by Gerrit Code Review
10 changed files with 582 additions and 225 deletions

View File

@@ -5044,6 +5044,83 @@ package android.telephony {
field public static final java.lang.String KEY_CARRIER_SETUP_APP_STRING = "carrier_setup_app_string"; 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 { public class MbmsDownloadSession implements java.lang.AutoCloseable {
field public static final java.lang.String MBMS_DOWNLOAD_SERVICE_ACTION = "android.telephony.action.EmbmsDownload"; field public static final java.lang.String MBMS_DOWNLOAD_SERVICE_ACTION = "android.telephony.action.EmbmsDownload";
} }
@@ -5132,14 +5209,134 @@ package android.telephony {
} }
public class PhoneStateListener { public class PhoneStateListener {
method public void onCallDisconnectCauseChanged(int, int);
method public void onPreciseCallStateChanged(android.telephony.PreciseCallState);
method public void onRadioPowerStateChanged(int); method public void onRadioPowerStateChanged(int);
method public void onSrvccStateChanged(int); method public void onSrvccStateChanged(int);
method public void onVoiceActivationStateChanged(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_RADIO_POWER_STATE_CHANGED = 8388608; // 0x800000
field public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000 field public static final int LISTEN_SRVCC_STATE_CHANGED = 16384; // 0x4000
field public static final int LISTEN_VOICE_ACTIVATION_STATE = 131072; // 0x20000 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 { public class ServiceState implements android.os.Parcelable {
method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int); method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int);
method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates(); method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates();

View File

@@ -315,6 +315,8 @@ applications that come with the platform
<permission name="android.permission.PACKAGE_USAGE_STATS" /> <permission name="android.permission.PACKAGE_USAGE_STATS" />
<permission name="android.permission.READ_FRAME_BUFFER"/> <permission name="android.permission.READ_FRAME_BUFFER"/>
<permission name="android.permission.READ_LOWPAN_CREDENTIAL"/> <permission name="android.permission.READ_LOWPAN_CREDENTIAL"/>
<!-- Needed for test only -->
<permission name="android.permission.READ_PRECISE_PHONE_STATE" />
<permission name="android.permission.REAL_GET_TASKS"/> <permission name="android.permission.REAL_GET_TASKS"/>
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/> <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
<permission name="android.permission.REGISTER_CALL_PROVIDER"/> <permission name="android.permission.REGISTER_CALL_PROVIDER"/>

View File

@@ -26,6 +26,7 @@
<uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <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_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" />

View File

@@ -210,6 +210,10 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
private PreciseCallState mPreciseCallState = new PreciseCallState(); private PreciseCallState mPreciseCallState = new PreciseCallState();
private int mCallDisconnectCause = DisconnectCause.NOT_VALID;
private int mCallPreciseDisconnectCause = PreciseDisconnectCause.NOT_VALID;
private boolean mCarrierNetworkChangeState = false; private boolean mCarrierNetworkChangeState = false;
private PhoneCapability mPhoneCapability = null; private PhoneCapability mPhoneCapability = null;
@@ -708,6 +712,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
remove(r.binder); 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) { if ((events & PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE) != 0) {
try { try {
r.callback.onPreciseDataConnectionStateChanged( r.callback.onPreciseDataConnectionStateChanged(
@@ -1478,9 +1490,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
handleRemoveListLocked(); handleRemoveListLocked();
} }
broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState, backgroundCallState, broadcastPreciseCallStateChanged(ringingCallState, foregroundCallState,
DisconnectCause.NOT_VALID, backgroundCallState);
PreciseDisconnectCause.NOT_VALID);
} }
public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause) { public void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause) {
@@ -1488,12 +1499,14 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
return; return;
} }
synchronized (mRecords) { synchronized (mRecords) {
mPreciseCallState = new PreciseCallState(mRingingCallState, mForegroundCallState, mCallDisconnectCause = disconnectCause;
mBackgroundCallState, disconnectCause, preciseDisconnectCause); mCallPreciseDisconnectCause = preciseDisconnectCause;
for (Record r : mRecords) { for (Record r : mRecords) {
if (r.matchPhoneStateListenerEvent(PhoneStateListener.LISTEN_PRECISE_CALL_STATE)) { if (r.matchPhoneStateListenerEvent(PhoneStateListener
.LISTEN_CALL_DISCONNECT_CAUSES)) {
try { try {
r.callback.onPreciseCallStateChanged(mPreciseCallState); r.callback.onCallDisconnectCauseChanged(mCallDisconnectCause,
mCallPreciseDisconnectCause);
} catch (RemoteException ex) { } catch (RemoteException ex) {
mRemoveList.add(r.binder); mRemoveList.add(r.binder);
} }
@@ -1501,8 +1514,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
handleRemoveListLocked(); handleRemoveListLocked();
} }
broadcastPreciseCallStateChanged(mRingingCallState, mForegroundCallState,
mBackgroundCallState, disconnectCause, preciseDisconnectCause);
} }
public void notifyPreciseDataConnectionFailed(String reason, String apnType, public void notifyPreciseDataConnectionFailed(String reason, String apnType,
@@ -1703,6 +1714,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState); pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState);
pw.println("mPreciseCallState=" + mPreciseCallState); pw.println("mPreciseCallState=" + mPreciseCallState);
pw.println("mCallDisconnectCause=" + mCallDisconnectCause);
pw.println("mCallPreciseDisconnectCause=" + mCallPreciseDisconnectCause);
pw.println("mCarrierNetworkChangeState=" + mCarrierNetworkChangeState); pw.println("mCarrierNetworkChangeState=" + mCarrierNetworkChangeState);
pw.println("mRingingCallState=" + mRingingCallState); pw.println("mRingingCallState=" + mRingingCallState);
pw.println("mForegroundCallState=" + mForegroundCallState); pw.println("mForegroundCallState=" + mForegroundCallState);
@@ -1877,13 +1890,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
private void broadcastPreciseCallStateChanged(int ringingCallState, int foregroundCallState, 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 intent = new Intent(TelephonyManager.ACTION_PRECISE_CALL_STATE_CHANGED);
intent.putExtra(TelephonyManager.EXTRA_RINGING_CALL_STATE, ringingCallState); intent.putExtra(TelephonyManager.EXTRA_RINGING_CALL_STATE, ringingCallState);
intent.putExtra(TelephonyManager.EXTRA_FOREGROUND_CALL_STATE, foregroundCallState); intent.putExtra(TelephonyManager.EXTRA_FOREGROUND_CALL_STATE, foregroundCallState);
intent.putExtra(TelephonyManager.EXTRA_BACKGROUND_CALL_STATE, backgroundCallState); 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, mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
android.Manifest.permission.READ_PRECISE_PHONE_STATE); android.Manifest.permission.READ_PRECISE_PHONE_STATE);
} }
@@ -1964,6 +1975,11 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
if ((events & PhoneStateListener.LISTEN_CALL_DISCONNECT_CAUSES) != 0) {
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.READ_PRECISE_PHONE_STATE, null);
}
return true; return true;
} }

View File

@@ -16,12 +16,16 @@
package android.telephony; package android.telephony;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage; 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 * @hide
*/ */
@SystemApi
public class DisconnectCause { public class DisconnectCause {
/** The disconnect cause is not valid (Not received a disconnect cause) */ /** The disconnect cause is not valid (Not received a disconnect cause) */
@@ -101,8 +105,8 @@ public class DisconnectCause {
/** Unknown error or not specified */ /** Unknown error or not specified */
public static final int ERROR_UNSPECIFIED = 36; public static final int ERROR_UNSPECIFIED = 36;
/** /**
* Only emergency numbers are allowed, but we tried to dial * Only emergency numbers are allowed, but we tried to dial a non-emergency number.
* a non-emergency number. * @hide
*/ */
// TODO: This should be the same as NOT_EMERGENCY // TODO: This should be the same as NOT_EMERGENCY
public static final int EMERGENCY_ONLY = 37; public static final int EMERGENCY_ONLY = 37;
@@ -115,8 +119,7 @@ public class DisconnectCause {
*/ */
public static final int DIALED_MMI = 39; public static final int DIALED_MMI = 39;
/** /**
* We tried to call a voicemail: URI but the device has no * We tried to call a voicemail: URI but the device has no voicemail number configured.
* voicemail number configured.
*/ */
public static final int VOICEMAIL_NUMBER_MISSING = 40; 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 * needs to be triggered by a *disconnect* event, rather than when
* the InCallScreen first comes to the foreground. For now we use * the InCallScreen first comes to the foreground. For now we use
* the needToShowCallLostDialog field for this (see below.) * the needToShowCallLostDialog field for this (see below.)
*
* @hide
*/ */
public static final int CDMA_CALL_LOST = 41; public static final int CDMA_CALL_LOST = 41;
/** /**
@@ -169,62 +174,52 @@ public class DisconnectCause {
/** /**
* Stk Call Control modified DIAL request to USSD request. * Stk Call Control modified DIAL request to USSD request.
* {@hide}
*/ */
public static final int DIAL_MODIFIED_TO_USSD = 46; public static final int DIAL_MODIFIED_TO_USSD = 46;
/** /**
* Stk Call Control modified DIAL request to SS request. * Stk Call Control modified DIAL request to SS request.
* {@hide}
*/ */
public static final int DIAL_MODIFIED_TO_SS = 47; public static final int DIAL_MODIFIED_TO_SS = 47;
/** /**
* Stk Call Control modified DIAL request to DIAL with modified data. * Stk Call Control modified DIAL request to DIAL with modified data.
* {@hide}
*/ */
public static final int DIAL_MODIFIED_TO_DIAL = 48; public static final int DIAL_MODIFIED_TO_DIAL = 48;
/** /**
* The call was terminated because CDMA phone service and roaming have already been activated. * The call was terminated because CDMA phone service and roaming have already been activated.
* {@hide}
*/ */
public static final int CDMA_ALREADY_ACTIVATED = 49; 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 * The call was terminated because it is not possible to place a video call while TTY is
* enabled. * enabled.
* {@hide}
*/ */
public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50; public static final int VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED = 50;
/** /**
* The call was terminated because it was pulled to another device. * The call was terminated because it was pulled to another device.
* {@hide}
*/ */
public static final int CALL_PULLED = 51; public static final int CALL_PULLED = 51;
/** /**
* The call was terminated because it was answered on another device. * The call was terminated because it was answered on another device.
* {@hide}
*/ */
public static final int ANSWERED_ELSEWHERE = 52; public static final int ANSWERED_ELSEWHERE = 52;
/** /**
* The call was terminated because the maximum allowable number of calls has been reached. * 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; public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53;
/** /**
* The call was terminated because cellular data has been disabled. * 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. * Used when in a video call and the user disables cellular data via the settings.
* {@hide}
*/ */
public static final int DATA_DISABLED = 54; public static final int DATA_DISABLED = 54;
/** /**
* The call was terminated because the data policy has disabled cellular data. * 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. * Used when in a video call and the user has exceeded the device data limit.
* {@hide}
*/ */
public static final int DATA_LIMIT_REACHED = 55; 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 * The network does not accept the emergency call request because IMEI was used as
* identification and this cability is not supported by the network. * identification and this cability is not supported by the network.
* {@hide}
*/ */
public static final int IMEI_NOT_ACCEPTED = 58; public static final int IMEI_NOT_ACCEPTED = 58;
@@ -249,7 +243,6 @@ public class DisconnectCause {
/** /**
* The call has failed because of access class barring. * The call has failed because of access class barring.
* {@hide}
*/ */
public static final int IMS_ACCESS_BLOCKED = 60; 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. * Emergency call failed with a temporary fail cause and can be redialed on this slot.
* {@hide}
*/ */
public static final int EMERGENCY_TEMP_FAILURE = 63; public static final int EMERGENCY_TEMP_FAILURE = 63;
/** /**
* Emergency call failed with a permanent fail cause and should not be redialed on this * Emergency call failed with a permanent fail cause and should not be redialed on this
* slot. * slot.
* {@hide}
*/ */
public static final int EMERGENCY_PERM_FAILURE = 64; 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 * This cause is used to report a normal event only when no other cause in the normal class
* applies. * applies.
* {@hide}
*/ */
public static final int NORMAL_UNSPECIFIED = 65; public static final int NORMAL_UNSPECIFIED = 65;
/** /**
* Stk Call Control modified DIAL request to video DIAL request. * Stk Call Control modified DIAL request to video DIAL request.
* {@hide}
*/ */
public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66; public static final int DIAL_MODIFIED_TO_DIAL_VIDEO = 66;
/** /**
* Stk Call Control modified Video DIAL request to SS request. * Stk Call Control modified Video DIAL request to SS request.
* {@hide}
*/ */
public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67; public static final int DIAL_VIDEO_MODIFIED_TO_SS = 67;
/** /**
* Stk Call Control modified Video DIAL request to USSD request. * Stk Call Control modified Video DIAL request to USSD request.
* {@hide}
*/ */
public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68; public static final int DIAL_VIDEO_MODIFIED_TO_USSD = 68;
/** /**
* Stk Call Control modified Video DIAL request to DIAL request. * Stk Call Control modified Video DIAL request to DIAL request.
* {@hide}
*/ */
public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69; public static final int DIAL_VIDEO_MODIFIED_TO_DIAL = 69;
/** /**
* Stk Call Control modified Video DIAL request to Video DIAL request. * Stk Call Control modified Video DIAL request to Video DIAL request.
* {@hide}
*/ */
public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70; public static final int DIAL_VIDEO_MODIFIED_TO_DIAL_VIDEO = 70;
@@ -359,7 +344,10 @@ public class DisconnectCause {
// Do nothing. // Do nothing.
} }
/** Returns descriptive string for the specified disconnect cause. */ /**
* Returns descriptive string for the specified disconnect cause.
* @hide
*/
@UnsupportedAppUsage @UnsupportedAppUsage
public static String toString(int cause) { public static String toString(int cause) {
switch (cause) { switch (cause) {

View File

@@ -171,14 +171,14 @@ public class PhoneStateListener {
public static final int LISTEN_CELL_INFO = 0x00000400; 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} * {@more}
* Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
* READ_PRECISE_PHONE_STATE} * READ_PRECISE_PHONE_STATE}
* *
* @hide * @hide
*/ */
@UnsupportedAppUsage @SystemApi
public static final int LISTEN_PRECISE_CALL_STATE = 0x00000800; public static final int LISTEN_PRECISE_CALL_STATE = 0x00000800;
/** /**
@@ -316,6 +316,18 @@ public class PhoneStateListener {
*/ */
public static final int LISTEN_EMERGENCY_NUMBER_LIST = 0x01000000; 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 * Subscription used to listen to the phone state changes
* @hide * @hide
@@ -526,11 +538,23 @@ public class PhoneStateListener {
/** /**
* Callback invoked when precise device call state changes. * Callback invoked when precise device call state changes.
* @param callState {@link PreciseCallState}
* @hide
*/
@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 * @hide
*/ */
@UnsupportedAppUsage @SystemApi
public void onPreciseCallStateChanged(PreciseCallState callState) { public void onCallDisconnectCauseChanged(int disconnectCause, int preciseDisconnectCause) {
// default implementation empty // default implementation empty
} }
@@ -780,6 +804,15 @@ public class PhoneStateListener {
() -> mExecutor.execute(() -> psl.onPreciseCallStateChanged(callState))); () -> 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( public void onPreciseDataConnectionStateChanged(
PreciseDataConnectionState dataConnectionState) { PreciseDataConnectionState dataConnectionState) {
PhoneStateListener psl = mPhoneStateListenerWeakRef.get(); PhoneStateListener psl = mPhoneStateListenerWeakRef.get();

View File

@@ -16,29 +16,51 @@
package android.telephony; package android.telephony;
import android.annotation.IntDef;
import android.annotation.SystemApi;
import android.annotation.UnsupportedAppUsage; import android.annotation.UnsupportedAppUsage;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.telephony.DisconnectCause; import android.telephony.DisconnectCause;
import android.telephony.PreciseDisconnectCause; 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 * Contains precise call states.
* framework and the RIL.
* *
* The following call information is included in returned PreciseCallState: * The following call information is included in returned PreciseCallState:
* *
* <ul> * <ul>
* <li>Ringing call state. * <li>Precise ringing call state.
* <li>Foreground call state. * <li>Precise foreground call state.
* <li>Background call state. * <li>Precise background call state.
* <li>Disconnect cause; generated by the framework.
* <li>Precise disconnect cause; generated by the RIL.
* </ul> * </ul>
* *
* @see android.telephony.TelephonyManager.CallState which contains generic call states.
*
* @hide * @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). */ /** Call state is not valid (Not received a call state). */
public static final int PRECISE_CALL_STATE_NOT_VALID = -1; public static final int PRECISE_CALL_STATE_NOT_VALID = -1;
@@ -61,9 +83,9 @@ public class PreciseCallState implements Parcelable {
/** Call state: Disconnecting. */ /** Call state: Disconnecting. */
public static final int PRECISE_CALL_STATE_DISCONNECTING = 8; public static final int PRECISE_CALL_STATE_DISCONNECTING = 8;
private int mRingingCallState = PRECISE_CALL_STATE_NOT_VALID; private @State int mRingingCallState = PRECISE_CALL_STATE_NOT_VALID;
private int mForegroundCallState = PRECISE_CALL_STATE_NOT_VALID; private @State int mForegroundCallState = PRECISE_CALL_STATE_NOT_VALID;
private int mBackgroundCallState = PRECISE_CALL_STATE_NOT_VALID; private @State int mBackgroundCallState = PRECISE_CALL_STATE_NOT_VALID;
private int mDisconnectCause = DisconnectCause.NOT_VALID; private int mDisconnectCause = DisconnectCause.NOT_VALID;
private int mPreciseDisconnectCause = PreciseDisconnectCause.NOT_VALID; private int mPreciseDisconnectCause = PreciseDisconnectCause.NOT_VALID;
@@ -73,8 +95,9 @@ public class PreciseCallState implements Parcelable {
* @hide * @hide
*/ */
@UnsupportedAppUsage @UnsupportedAppUsage
public PreciseCallState(int ringingCall, int foregroundCall, int backgroundCall, public PreciseCallState(@State int ringingCall, @State int foregroundCall,
int disconnectCause, int preciseDisconnectCause) { @State int backgroundCall, int disconnectCause,
int preciseDisconnectCause) {
mRingingCallState = ringingCall; mRingingCallState = ringingCall;
mForegroundCallState = foregroundCall; mForegroundCallState = foregroundCall;
mBackgroundCallState = backgroundCall; mBackgroundCallState = backgroundCall;
@@ -92,6 +115,8 @@ public class PreciseCallState implements Parcelable {
/** /**
* Construct a PreciseCallState object from the given parcel. * Construct a PreciseCallState object from the given parcel.
*
* @hide
*/ */
private PreciseCallState(Parcel in) { private PreciseCallState(Parcel in) {
mRingingCallState = in.readInt(); mRingingCallState = in.readInt();
@@ -102,59 +127,23 @@ public class PreciseCallState implements Parcelable {
} }
/** /**
* Get precise ringing call state * Returns the 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
*/ */
@UnsupportedAppUsage public @State int getRingingCallState() {
public int getRingingCallState() {
return mRingingCallState; return mRingingCallState;
} }
/** /**
* Get precise foreground call state * Returns the 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
*/ */
@UnsupportedAppUsage public @State int getForegroundCallState() {
public int getForegroundCallState() {
return mForegroundCallState; return mForegroundCallState;
} }
/** /**
* Get precise background call state * Returns the 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
*/ */
@UnsupportedAppUsage public @State int getBackgroundCallState() {
public int getBackgroundCallState() {
return mBackgroundCallState; return mBackgroundCallState;
} }
@@ -199,6 +188,11 @@ public class PreciseCallState implements Parcelable {
* @see DisconnectCause#CDMA_NOT_EMERGENCY * @see DisconnectCause#CDMA_NOT_EMERGENCY
* @see DisconnectCause#CDMA_ACCESS_BLOCKED * @see DisconnectCause#CDMA_ACCESS_BLOCKED
* @see DisconnectCause#ERROR_UNSPECIFIED * @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 @UnsupportedAppUsage
public int getDisconnectCause() { public int getDisconnectCause() {
@@ -238,6 +232,11 @@ public class PreciseCallState implements Parcelable {
* @see PreciseDisconnectCause#CDMA_NOT_EMERGENCY * @see PreciseDisconnectCause#CDMA_NOT_EMERGENCY
* @see PreciseDisconnectCause#CDMA_ACCESS_BLOCKED * @see PreciseDisconnectCause#CDMA_ACCESS_BLOCKED
* @see PreciseDisconnectCause#ERROR_UNSPECIFIED * @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 @UnsupportedAppUsage
public int getPreciseDisconnectCause() { public int getPreciseDisconnectCause() {
@@ -272,14 +271,8 @@ public class PreciseCallState implements Parcelable {
@Override @Override
public int hashCode() { public int hashCode() {
final int prime = 31; return Objects.hash(mRingingCallState, mForegroundCallState, mForegroundCallState,
int result = 1; mDisconnectCause, mPreciseDisconnectCause);
result = prime * result + mRingingCallState;
result = prime * result + mForegroundCallState;
result = prime * result + mBackgroundCallState;
result = prime * result + mDisconnectCause;
result = prime * result + mPreciseDisconnectCause;
return result;
} }
@Override @Override

View File

@@ -16,279 +16,329 @@
package android.telephony; package android.telephony;
import android.annotation.SystemApi;
/** /**
* Contains precise disconnect call causes generated by the * Contains precise disconnect call causes generated by the framework and the RIL.
* framework and the RIL.
*
* @hide * @hide
*/ */
@SystemApi
public class PreciseDisconnectCause { 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; 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; public static final int NO_DISCONNECT_CAUSE_AVAILABLE = 0;
/** /**
* The destination cannot be reached because the number, although valid, * 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; public static final int NETWORK_OUT_OF_ORDER = 38;
/** /**
* The network is not functioning correctly and the condition is not likely to last * The network is not functioning correctly and the condition is not likely to last a long
* a long period of time * period of time.
*/ */
public static final int TEMPORARY_FAILURE = 41; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; public static final int MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98;
/** The equipment sending this cause has received a message which includes information /**
* 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 * elements not recognized because its identifier is not defined or it is defined but not
* implemented by the equipment sending the cause * implemented by the equipment sending the cause.
*/ */
public static final int INFORMATION_ELEMENT_NON_EXISTENT = 99; 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; 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; 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; 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; 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; public static final int INTERWORKING_UNSPECIFIED = 127;
/** The call is restricted */ /** The call is restricted. */
public static final int CALL_BARRED = 240; 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; public static final int FDN_BLOCKED = 241;
/** The given IMSI is not known at the VLR */ /** The given IMSI is not known at the Visitor Location Register (VLR) TS 24.008 cause . */
/** TS 24.008 cause 4 */
public static final int IMSI_UNKNOWN_IN_VLR = 242; public static final int IMSI_UNKNOWN_IN_VLR = 242;
/** /**
* The network does not accept emergency call establishment using an IMEI or not accept attach * 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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; public static final int CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000;
/** Drop call*/ /** Drop call. */
public static final int CDMA_DROP = 1001; 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; 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; public static final int CDMA_REORDER = 1003;
/** Service option rejection */ /** Service option rejection. */
public static final int CDMA_SO_REJECT = 1004; 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; 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; public static final int CDMA_ACCESS_FAILURE = 1006;
/** Not a preempted call */ /** Not a preempted call. */
public static final int CDMA_PREEMPTED = 1007; public static final int CDMA_PREEMPTED = 1007;
/** Not an emergency call */ /** Not an emergency call. */
public static final int CDMA_NOT_EMERGENCY = 1008; 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; public static final int CDMA_ACCESS_BLOCKED = 1009;
/** Mapped from ImsReasonInfo */ /** Mapped from ImsReasonInfo */
// TODO: remove ImsReasonInfo from preciseDisconnectCause
/* The passed argument is an invalid */ /* The passed argument is an invalid */
/** @hide */
public static final int LOCAL_ILLEGAL_ARGUMENT = 1200; public static final int LOCAL_ILLEGAL_ARGUMENT = 1200;
// The operation is invoked in invalid call state // The operation is invoked in invalid call state
/** @hide */
public static final int LOCAL_ILLEGAL_STATE = 1201; public static final int LOCAL_ILLEGAL_STATE = 1201;
// IMS service internal error // IMS service internal error
/** @hide */
public static final int LOCAL_INTERNAL_ERROR = 1202; public static final int LOCAL_INTERNAL_ERROR = 1202;
// IMS service goes down (service connection is lost) // IMS service goes down (service connection is lost)
/** @hide */
public static final int LOCAL_IMS_SERVICE_DOWN = 1203; public static final int LOCAL_IMS_SERVICE_DOWN = 1203;
// No pending incoming call exists // No pending incoming call exists
/** @hide */
public static final int LOCAL_NO_PENDING_CALL = 1204; public static final int LOCAL_NO_PENDING_CALL = 1204;
// Service unavailable; by power off // Service unavailable; by power off
/** @hide */
public static final int LOCAL_POWER_OFF = 1205; public static final int LOCAL_POWER_OFF = 1205;
// Service unavailable; by low battery // Service unavailable; by low battery
/** @hide */
public static final int LOCAL_LOW_BATTERY = 1206; public static final int LOCAL_LOW_BATTERY = 1206;
// Service unavailable; by out of service (data service state) // Service unavailable; by out of service (data service state)
/** @hide */
public static final int LOCAL_NETWORK_NO_SERVICE = 1207; public static final int LOCAL_NETWORK_NO_SERVICE = 1207;
/* Service unavailable; by no LTE coverage /* Service unavailable; by no LTE coverage
* (VoLTE is not supported even though IMS is registered) * (VoLTE is not supported even though IMS is registered)
*/ */
/** @hide */
public static final int LOCAL_NETWORK_NO_LTE_COVERAGE = 1208; public static final int LOCAL_NETWORK_NO_LTE_COVERAGE = 1208;
/** Service unavailable; by located in roaming area */ /** Service unavailable; by located in roaming area */
/** @hide */
public static final int LOCAL_NETWORK_ROAMING = 1209; public static final int LOCAL_NETWORK_ROAMING = 1209;
/** Service unavailable; by IP changed */ /** Service unavailable; by IP changed */
/** @hide */
public static final int LOCAL_NETWORK_IP_CHANGED = 1210; public static final int LOCAL_NETWORK_IP_CHANGED = 1210;
/** Service unavailable; other */ /** Service unavailable; other */
/** @hide */
public static final int LOCAL_SERVICE_UNAVAILABLE = 1211; public static final int LOCAL_SERVICE_UNAVAILABLE = 1211;
/* Service unavailable; IMS connection is lost (IMS is not registered) */ /* Service unavailable; IMS connection is lost (IMS is not registered) */
/** @hide */
public static final int LOCAL_NOT_REGISTERED = 1212; public static final int LOCAL_NOT_REGISTERED = 1212;
/** Max call exceeded */ /** Max call exceeded */
/** @hide */
public static final int LOCAL_MAX_CALL_EXCEEDED = 1213; public static final int LOCAL_MAX_CALL_EXCEEDED = 1213;
/** Call decline */ /** Call decline */
/** @hide */
public static final int LOCAL_CALL_DECLINE = 1214; public static final int LOCAL_CALL_DECLINE = 1214;
/** SRVCC is in progress */ /** SRVCC is in progress */
/** @hide */
public static final int LOCAL_CALL_VCC_ON_PROGRESSING = 1215; public static final int LOCAL_CALL_VCC_ON_PROGRESSING = 1215;
/** Resource reservation is failed (QoS precondition) */ /** Resource reservation is failed (QoS precondition) */
/** @hide */
public static final int LOCAL_CALL_RESOURCE_RESERVATION_FAILED = 1216; 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 /** 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 * 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; public static final int LOCAL_CALL_CS_RETRY_REQUIRED = 1217;
/** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */ /** Retry VoLTE call; VoLTE service can't be provided by the network temporarily */
/** @hide */
public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED = 1218; public static final int LOCAL_CALL_VOLTE_RETRY_REQUIRED = 1218;
/** IMS call is already terminated (in TERMINATED state) */ /** IMS call is already terminated (in TERMINATED state) */
/** @hide */
public static final int LOCAL_CALL_TERMINATED = 1219; public static final int LOCAL_CALL_TERMINATED = 1219;
/** Handover not feasible */ /** Handover not feasible */
/** @hide */
public static final int LOCAL_HO_NOT_FEASIBLE = 1220; public static final int LOCAL_HO_NOT_FEASIBLE = 1220;
/** 1xx waiting timer is expired after sending INVITE request (MO only) */ /** 1xx waiting timer is expired after sending INVITE request (MO only) */
/** @hide */
public static final int TIMEOUT_1XX_WAITING = 1221; public static final int TIMEOUT_1XX_WAITING = 1221;
/** User no answer during call setup operation (MO/MT) /** User no answer during call setup operation (MO/MT)
* MO : 200 OK to INVITE request is not received, * MO : 200 OK to INVITE request is not received,
* MT : No action from user after alerting the call * MT : No action from user after alerting the call
* @hide
*/ */
public static final int TIMEOUT_NO_ANSWER = 1222; public static final int TIMEOUT_NO_ANSWER = 1222;
/** User no answer during call update operation (MO/MT) /** User no answer during call update operation (MO/MT)
* MO : 200 OK to re-INVITE request is not received, * MO : 200 OK to re-INVITE request is not received,
* MT : No action from user after alerting the call * MT : No action from user after alerting the call
* @hide
*/ */
public static final int TIMEOUT_NO_ANSWER_CALL_UPDATE = 1223; public static final int TIMEOUT_NO_ANSWER_CALL_UPDATE = 1223;
@@ -296,102 +346,142 @@ public class PreciseDisconnectCause {
* STATUSCODE (SIP response code) (IMS -> Telephony) * STATUSCODE (SIP response code) (IMS -> Telephony)
*/ */
/** SIP request is redirected */ /** SIP request is redirected */
/** @hide */
public static final int SIP_REDIRECTED = 1300; public static final int SIP_REDIRECTED = 1300;
/** 4xx responses */ /** 4xx responses */
/** 400 : Bad Request */ /** 400 : Bad Request */
/** @hide */
public static final int SIP_BAD_REQUEST = 1310; public static final int SIP_BAD_REQUEST = 1310;
/** 403 : Forbidden */ /** 403 : Forbidden */
/** @hide */
public static final int SIP_FORBIDDEN = 1311; public static final int SIP_FORBIDDEN = 1311;
/** 404 : Not Found */ /** 404 : Not Found */
/** @hide */
public static final int SIP_NOT_FOUND = 1312; public static final int SIP_NOT_FOUND = 1312;
/** 415 : Unsupported Media Type /** 415 : Unsupported Media Type
* 416 : Unsupported URI Scheme * 416 : Unsupported URI Scheme
* 420 : Bad Extension * 420 : Bad Extension
*/ */
/** @hide */
public static final int SIP_NOT_SUPPORTED = 1313; public static final int SIP_NOT_SUPPORTED = 1313;
/** 408 : Request Timeout */ /** 408 : Request Timeout */
/** @hide */
public static final int SIP_REQUEST_TIMEOUT = 1314; public static final int SIP_REQUEST_TIMEOUT = 1314;
/** 480 : Temporarily Unavailable */ /** 480 : Temporarily Unavailable */
/** @hide */
public static final int SIP_TEMPRARILY_UNAVAILABLE = 1315; public static final int SIP_TEMPRARILY_UNAVAILABLE = 1315;
/** 484 : Address Incomplete */ /** 484 : Address Incomplete */
/** @hide */
public static final int SIP_BAD_ADDRESS = 1316; public static final int SIP_BAD_ADDRESS = 1316;
/** 486 : Busy Here /** 486 : Busy Here
* 600 : Busy Everywhere * 600 : Busy Everywhere
*/ */
/** @hide */
public static final int SIP_BUSY = 1317; public static final int SIP_BUSY = 1317;
/** 487 : Request Terminated */ /** 487 : Request Terminated */
/** @hide */
public static final int SIP_REQUEST_CANCELLED = 1318; public static final int SIP_REQUEST_CANCELLED = 1318;
/** 406 : Not Acceptable /** 406 : Not Acceptable
* 488 : Not Acceptable Here * 488 : Not Acceptable Here
* 606 : Not Acceptable * 606 : Not Acceptable
*/ */
/** @hide */
public static final int SIP_NOT_ACCEPTABLE = 1319; public static final int SIP_NOT_ACCEPTABLE = 1319;
/** 410 : Gone /** 410 : Gone
* 604 : Does Not Exist Anywhere * 604 : Does Not Exist Anywhere
*/ */
/** @hide */
public static final int SIP_NOT_REACHABLE = 1320; public static final int SIP_NOT_REACHABLE = 1320;
/** Others */ /** Others */
/** @hide */
public static final int SIP_CLIENT_ERROR = 1321; public static final int SIP_CLIENT_ERROR = 1321;
/** 481 : Transaction Does Not Exist */ /** 481 : Transaction Does Not Exist */
/** @hide */
public static final int SIP_TRANSACTION_DOES_NOT_EXIST = 1322; public static final int SIP_TRANSACTION_DOES_NOT_EXIST = 1322;
/** 5xx responses /** 5xx responses
* 501 : Server Internal Error * 501 : Server Internal Error
*/ */
/** @hide */
public static final int SIP_SERVER_INTERNAL_ERROR = 1330; public static final int SIP_SERVER_INTERNAL_ERROR = 1330;
/** 503 : Service Unavailable */ /** 503 : Service Unavailable */
/** @hide */
public static final int SIP_SERVICE_UNAVAILABLE = 1331; public static final int SIP_SERVICE_UNAVAILABLE = 1331;
/** 504 : Server Time-out */ /** 504 : Server Time-out */
/** @hide */
public static final int SIP_SERVER_TIMEOUT = 1332; public static final int SIP_SERVER_TIMEOUT = 1332;
/** Others */ /** Others */
/** @hide */
public static final int SIP_SERVER_ERROR = 1333; public static final int SIP_SERVER_ERROR = 1333;
/** 6xx responses /** 6xx responses
* 603 : Decline * 603 : Decline
*/ */
/** @hide */
public static final int SIP_USER_REJECTED = 1340; public static final int SIP_USER_REJECTED = 1340;
/** Others */ /** Others */
/** @hide */
public static final int SIP_GLOBAL_ERROR = 1341; public static final int SIP_GLOBAL_ERROR = 1341;
/** Emergency failure */ /** Emergency failure */
/** @hide */
public static final int EMERGENCY_TEMP_FAILURE = 1342; public static final int EMERGENCY_TEMP_FAILURE = 1342;
/** @hide */
public static final int EMERGENCY_PERM_FAILURE = 1343; public static final int EMERGENCY_PERM_FAILURE = 1343;
/** Media resource initialization failed */ /** Media resource initialization failed */
/** @hide */
public static final int MEDIA_INIT_FAILED = 1400; public static final int MEDIA_INIT_FAILED = 1400;
/** RTP timeout (no audio / video traffic in the session) */ /** RTP timeout (no audio / video traffic in the session) */
/** @hide */
public static final int MEDIA_NO_DATA = 1401; public static final int MEDIA_NO_DATA = 1401;
/** Media is not supported; so dropped the call */ /** Media is not supported; so dropped the call */
/** @hide */
public static final int MEDIA_NOT_ACCEPTABLE = 1402; public static final int MEDIA_NOT_ACCEPTABLE = 1402;
/** Unknown media related errors */ /** Unknown media related errors */
/** @hide */
public static final int MEDIA_UNSPECIFIED = 1403; public static final int MEDIA_UNSPECIFIED = 1403;
/** User triggers the call end */ /** User triggers the call end */
/** @hide */
public static final int USER_TERMINATED = 1500; public static final int USER_TERMINATED = 1500;
/** No action while an incoming call is ringing */ /** No action while an incoming call is ringing */
/** @hide */
public static final int USER_NOANSWER = 1501; public static final int USER_NOANSWER = 1501;
/** User ignores an incoming call */ /** User ignores an incoming call */
/** @hide */
public static final int USER_IGNORE = 1502; public static final int USER_IGNORE = 1502;
/** User declines an incoming call */ /** User declines an incoming call */
/** @hide */
public static final int USER_DECLINE = 1503; public static final int USER_DECLINE = 1503;
/** Device declines/ends a call due to low battery */ /** Device declines/ends a call due to low battery */
/** @hide */
public static final int LOW_BATTERY = 1504; public static final int LOW_BATTERY = 1504;
/** Device declines call due to blacklisted call ID */ /** Device declines call due to blacklisted call ID */
/** @hide */
public static final int BLACKLISTED_CALL_ID = 1505; public static final int BLACKLISTED_CALL_ID = 1505;
/** The call is terminated by the network or remote user */ /** The call is terminated by the network or remote user */
/** @hide */
public static final int USER_TERMINATED_BY_REMOTE = 1510; public static final int USER_TERMINATED_BY_REMOTE = 1510;
/** /**
* UT * UT
*/ */
/** @hide */
public static final int UT_NOT_SUPPORTED = 1800; public static final int UT_NOT_SUPPORTED = 1800;
/** @hide */
public static final int UT_SERVICE_UNAVAILABLE = 1801; public static final int UT_SERVICE_UNAVAILABLE = 1801;
/** @hide */
public static final int UT_OPERATION_NOT_ALLOWED = 1802; public static final int UT_OPERATION_NOT_ALLOWED = 1802;
/** @hide */
public static final int UT_NETWORK_ERROR = 1803; public static final int UT_NETWORK_ERROR = 1803;
/** @hide */
public static final int UT_CB_PASSWORD_MISMATCH = 1804; public static final int UT_CB_PASSWORD_MISMATCH = 1804;
/** /**
* ECBM * ECBM
* @hide
*/ */
public static final int ECBM_NOT_SUPPORTED = 1900; public static final int ECBM_NOT_SUPPORTED = 1900;
/** /**
* Fail code used to indicate that Multi-endpoint is not supported by the Ims framework. * Fail code used to indicate that Multi-endpoint is not supported by the Ims framework.
* @hide
*/ */
public static final int MULTIENDPOINT_NOT_SUPPORTED = 1901; 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 * 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 * 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. * code is received as part of the handover message.
* @hide
*/ */
public static final int CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 2000; public static final int CALL_DROP_IWLAN_TO_LTE_UNAVAILABLE = 2000;
/** /**
* MT call has ended due to a release from the network * MT call has ended due to a release from the network
* because the call was answered elsewhere * because the call was answered elsewhere
* @hide
*/ */
public static final int ANSWERED_ELSEWHERE = 2100; public static final int ANSWERED_ELSEWHERE = 2100;
/** /**
* For MultiEndpoint - Call Pull request has failed * For MultiEndpoint - Call Pull request has failed
* @hide
*/ */
public static final int CALL_PULL_OUT_OF_SYNC = 2101; public static final int CALL_PULL_OUT_OF_SYNC = 2101;
/** /**
* For MultiEndpoint - Call has been pulled from primary to secondary * For MultiEndpoint - Call has been pulled from primary to secondary
* @hide
*/ */
public static final int CALL_PULLED = 2102; public static final int CALL_PULLED = 2102;
/** /**
* Supplementary services (HOLD/RESUME) failure error codes. * Supplementary services (HOLD/RESUME) failure error codes.
* Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision. * Values for Supplemetary services failure - Failed, Cancelled and Re-Invite collision.
* @hide
*/ */
public static final int SUPP_SVC_FAILED = 2300; public static final int SUPP_SVC_FAILED = 2300;
/** @hide */
public static final int SUPP_SVC_CANCELLED = 2301; public static final int SUPP_SVC_CANCELLED = 2301;
/** @hide */
public static final int SUPP_SVC_REINVITE_COLLISION = 2302; public static final int SUPP_SVC_REINVITE_COLLISION = 2302;
/** /**
* DPD Procedure received no response or send failed * DPD Procedure received no response or send failed
* @hide
*/ */
public static final int IWLAN_DPD_FAILURE = 2400; public static final int IWLAN_DPD_FAILURE = 2400;
/** /**
* Establishment of the ePDG Tunnel Failed * Establishment of the ePDG Tunnel Failed
* @hide
*/ */
public static final int EPDG_TUNNEL_ESTABLISH_FAILURE = 2500; public static final int EPDG_TUNNEL_ESTABLISH_FAILURE = 2500;
/** /**
* Re-keying of the ePDG Tunnel Failed; may not always result in teardown * Re-keying of the ePDG Tunnel Failed; may not always result in teardown
* @hide
*/ */
public static final int EPDG_TUNNEL_REKEY_FAILURE = 2501; public static final int EPDG_TUNNEL_REKEY_FAILURE = 2501;
/** /**
* Connection to the packet gateway is lost * Connection to the packet gateway is lost
* @hide
*/ */
public static final int EPDG_TUNNEL_LOST_CONNECTION = 2502; public static final int EPDG_TUNNEL_LOST_CONNECTION = 2502;
/** /**
* The maximum number of calls allowed has been reached. Used in a multi-endpoint scenario * 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. * where the number of calls across all connected devices has reached the maximum.
* @hide
*/ */
public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 2503; 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 * 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 * declined the call. Used in a multi-endpoint scenario where a remote device declined an
* incoming call. * incoming call.
* @hide
*/ */
public static final int REMOTE_CALL_DECLINE = 2504; public static final int REMOTE_CALL_DECLINE = 2504;
/** /**
* Indicates the call was disconnected due to the user reaching their data limit. * Indicates the call was disconnected due to the user reaching their data limit.
* @hide
*/ */
public static final int DATA_LIMIT_REACHED = 2505; public static final int DATA_LIMIT_REACHED = 2505;
/** /**
* Indicates the call was disconnected due to the user disabling cellular data. * Indicates the call was disconnected due to the user disabling cellular data.
* @hide
*/ */
public static final int DATA_DISABLED = 2506; public static final int DATA_DISABLED = 2506;
/** /**
* Indicates a call was disconnected due to loss of wifi signal. * Indicates a call was disconnected due to loss of wifi signal.
* @hide
*/ */
public static final int WIFI_LOST = 2507; 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_14 = 0xf00e;
public static final int OEM_CAUSE_15 = 0xf00f; 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; public static final int ERROR_UNSPECIFIED = 0xffff;
/** Private constructor to avoid class instantiation. */ /** Private constructor to avoid class instantiation. */

View File

@@ -625,8 +625,6 @@ public class TelephonyManager {
* The {@link #EXTRA_RINGING_CALL_STATE} extra indicates the ringing call state. * 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_FOREGROUND_CALL_STATE} extra indicates the foreground call state.
* The {@link #EXTRA_BACKGROUND_CALL_STATE} extra indicates the background 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"> * <p class="note">
* Requires the READ_PRECISE_PHONE_STATE permission. * Requires the READ_PRECISE_PHONE_STATE permission.
@@ -634,12 +632,10 @@ public class TelephonyManager {
* @see #EXTRA_RINGING_CALL_STATE * @see #EXTRA_RINGING_CALL_STATE
* @see #EXTRA_FOREGROUND_CALL_STATE * @see #EXTRA_FOREGROUND_CALL_STATE
* @see #EXTRA_BACKGROUND_CALL_STATE * @see #EXTRA_BACKGROUND_CALL_STATE
* @see #EXTRA_DISCONNECT_CAUSE
* @see #EXTRA_PRECISE_DISCONNECT_CAUSE
* *
* <p class="note"> * <p class="note">
* Requires the READ_PRECISE_PHONE_STATE permission. * Requires the READ_PRECISE_PHONE_STATE permission.
* * @deprecated use {@link PhoneStateListener#LISTEN_PRECISE_CALL_STATE} instead
* @hide * @hide
*/ */
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
@@ -647,8 +643,28 @@ public class TelephonyManager {
"android.intent.action.PRECISE_CALL_STATE"; "android.intent.action.PRECISE_CALL_STATE";
/** /**
* The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast * Broadcast intent action indicating that call disconnect cause has changed.
* for an integer containing the state of the current ringing call. *
* <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_NOT_VALID
* @see PreciseCallState#PRECISE_CALL_STATE_IDLE * @see PreciseCallState#PRECISE_CALL_STATE_IDLE
@@ -670,8 +686,9 @@ public class TelephonyManager {
public static final String EXTRA_RINGING_CALL_STATE = "ringing_state"; public static final String EXTRA_RINGING_CALL_STATE = "ringing_state";
/** /**
* The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and
* for an integer containing the state of the current foreground call. * {@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_NOT_VALID
* @see PreciseCallState#PRECISE_CALL_STATE_IDLE * @see PreciseCallState#PRECISE_CALL_STATE_IDLE
@@ -693,8 +710,9 @@ public class TelephonyManager {
public static final String EXTRA_FOREGROUND_CALL_STATE = "foreground_state"; public static final String EXTRA_FOREGROUND_CALL_STATE = "foreground_state";
/** /**
* The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and
* for an integer containing the state of the current background call. * {@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_NOT_VALID
* @see PreciseCallState#PRECISE_CALL_STATE_IDLE * @see PreciseCallState#PRECISE_CALL_STATE_IDLE
@@ -716,8 +734,9 @@ public class TelephonyManager {
public static final String EXTRA_BACKGROUND_CALL_STATE = "background_state"; public static final String EXTRA_BACKGROUND_CALL_STATE = "background_state";
/** /**
* The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and
* for an integer containing the disconnect cause. * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer
* containing the disconnect cause.
* *
* @see DisconnectCause * @see DisconnectCause
* *
@@ -730,8 +749,9 @@ public class TelephonyManager {
public static final String EXTRA_DISCONNECT_CAUSE = "disconnect_cause"; public static final String EXTRA_DISCONNECT_CAUSE = "disconnect_cause";
/** /**
* The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast * The lookup key used with the {@link #ACTION_PRECISE_CALL_STATE_CHANGED} broadcast and
* for an integer containing the disconnect cause provided by the RIL. * {@link PhoneStateListener#onPreciseCallStateChanged(PreciseCallState)} for an integer
* containing the disconnect cause provided by the RIL.
* *
* @see PreciseDisconnectCause * @see PreciseDisconnectCause
* *

View File

@@ -53,5 +53,6 @@ oneway interface IPhoneStateListener {
void onPhoneCapabilityChanged(in PhoneCapability capability); void onPhoneCapabilityChanged(in PhoneCapability capability);
void onRadioPowerStateChanged(in int state); void onRadioPowerStateChanged(in int state);
void onPreferredDataSubIdChanged(in int subId); void onPreferredDataSubIdChanged(in int subId);
void onCallDisconnectCauseChanged(in int disconnectCause, in int preciseDisconnectCause);
} }