diff --git a/core/api/current.txt b/core/api/current.txt index 2b5196b3b5f7f..6ac38e5f21b13 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -39093,7 +39093,7 @@ package android.telecom { method public android.telecom.Call getParent(); method public String getRemainingPostDialSequence(); method @Nullable public android.telecom.Call.RttCall getRttCall(); - method public int getState(); + method @Deprecated public int getState(); method public android.telecom.InCallService.VideoCall getVideoCall(); method public void handoverTo(android.telecom.PhoneAccountHandle, int, android.os.Bundle); method public void hold(); @@ -39188,6 +39188,7 @@ package android.telecom { method public android.net.Uri getHandle(); method public int getHandlePresentation(); method public android.os.Bundle getIntentExtras(); + method public final int getState(); method public android.telecom.StatusHints getStatusHints(); method public int getVideoState(); method public static boolean hasProperty(int, int); diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 2a5ddfd891b1e..4e64838d99ce0 100755 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -137,6 +137,27 @@ public final class Call { */ public static final int STATE_SIMULATED_RINGING = 13; + /** + * @hide + */ + @IntDef(prefix = { "STATE_" }, + value = { + STATE_NEW, + STATE_DIALING, + STATE_RINGING, + STATE_HOLDING, + STATE_ACTIVE, + STATE_DISCONNECTED, + STATE_SELECT_PHONE_ACCOUNT, + STATE_CONNECTING, + STATE_DISCONNECTING, + STATE_PULLING_CALL, + STATE_AUDIO_PROCESSING, + STATE_SIMULATED_RINGING + }) + @Retention(RetentionPolicy.SOURCE) + public @interface CallState {}; + /** * The key to retrieve the optional {@code PhoneAccount}s Telecom can bundle with its Call * extras. Used to pass the phone accounts to display on the front end to the user in order to @@ -674,6 +695,7 @@ public final class Call { // Next PROPERTY value: 0x00004000 //****************************************************************************************** + private final @CallState int mState; private final String mTelecomCallId; private final Uri mHandle; private final int mHandlePresentation; @@ -868,6 +890,13 @@ public final class Call { return builder.toString(); } + /** + * @return the state of the {@link Call} represented by this {@link Call.Details}. + */ + public final @CallState int getState() { + return mState; + } + /** {@hide} */ @TestApi public String getTelecomCallId() { @@ -1069,6 +1098,7 @@ public final class Call { if (o instanceof Details) { Details d = (Details) o; return + Objects.equals(mState, d.mState) && Objects.equals(mHandle, d.mHandle) && Objects.equals(mHandlePresentation, d.mHandlePresentation) && Objects.equals(mCallerDisplayName, d.mCallerDisplayName) && @@ -1095,7 +1125,8 @@ public final class Call { @Override public int hashCode() { - return Objects.hash(mHandle, + return Objects.hash(mState, + mHandle, mHandlePresentation, mCallerDisplayName, mCallerDisplayNamePresentation, @@ -1117,6 +1148,7 @@ public final class Call { /** {@hide} */ public Details( + @CallState int state, String telecomCallId, Uri handle, int handlePresentation, @@ -1136,6 +1168,7 @@ public final class Call { String contactDisplayName, int callDirection, int callerNumberVerificationStatus) { + mState = state; mTelecomCallId = telecomCallId; mHandle = handle; mHandlePresentation = handlePresentation; @@ -1160,6 +1193,7 @@ public final class Call { /** {@hide} */ public static Details createFromParcelableCall(ParcelableCall parcelableCall) { return new Details( + parcelableCall.getState(), parcelableCall.getId(), parcelableCall.getHandle(), parcelableCall.getHandlePresentation(), @@ -1186,6 +1220,8 @@ public final class Call { StringBuilder sb = new StringBuilder(); sb.append("[id: "); sb.append(mTelecomCallId); + sb.append(", state: "); + sb.append(Call.stateToString(mState)); sb.append(", pa: "); sb.append(mAccountHandle); sb.append(", hdl: "); @@ -1302,7 +1338,7 @@ public final class Call { * @param call The {@code Call} invoking this method. * @param state The new state of the {@code Call}. */ - public void onStateChanged(Call call, int state) {} + public void onStateChanged(Call call, @CallState int state) {} /** * Invoked when the parent of this {@code Call} has changed. See {@link #getParent()}. @@ -2171,9 +2207,11 @@ public final class Call { /** * Obtains the state of this {@code Call}. * - * @return A state value, chosen from the {@code STATE_*} constants. + * @return The call state. + * @deprecated The call state is available via {@link Call.Details#getState()}. */ - public int getState() { + @Deprecated + public @CallState int getState() { return mState; } @@ -2551,6 +2589,30 @@ public final class Call { final void internalSetDisconnected() { if (mState != Call.STATE_DISCONNECTED) { mState = Call.STATE_DISCONNECTED; + if (mDetails != null) { + mDetails = new Details(mState, + mDetails.getTelecomCallId(), + mDetails.getHandle(), + mDetails.getHandlePresentation(), + mDetails.getCallerDisplayName(), + mDetails.getCallerDisplayNamePresentation(), + mDetails.getAccountHandle(), + mDetails.getCallCapabilities(), + mDetails.getCallProperties(), + mDetails.getDisconnectCause(), + mDetails.getConnectTimeMillis(), + mDetails.getGatewayInfo(), + mDetails.getVideoState(), + mDetails.getStatusHints(), + mDetails.getExtras(), + mDetails.getIntentExtras(), + mDetails.getCreationTimeMillis(), + mDetails.getContactDisplayName(), + mDetails.getCallDirection(), + mDetails.getCallerNumberVerificationStatus() + ); + fireDetailsChanged(mDetails); + } fireStateChanged(mState); fireCallDestroyed(); } diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java index 182dc8bb83250..320308c9e9267 100644 --- a/telecomm/java/android/telecom/ParcelableCall.java +++ b/telecomm/java/android/telecom/ParcelableCall.java @@ -399,7 +399,7 @@ public final class ParcelableCall implements Parcelable { } /** The current state of the call. */ - public int getState() { + public @Call.CallState int getState() { return mState; }