diff options
author | 2019-09-24 14:53:23 -0700 | |
---|---|---|
committer | 2019-12-02 13:59:17 -0800 | |
commit | d57d76c371889830cf3456cf98fe45cf8d54c1cb (patch) | |
tree | 80b9be4bd94ee3b62f4ecabe600bb1932a86a1a6 | |
parent | 49af39e751a777f5bb05b4c9e5491e8762f2fc9a (diff) |
Add Verstat fields to Telecom call/connection classes.
Test: Added new CTS tests to verify operation.
Bug: 135929421
Change-Id: I42360dad677060e03ecec865f31145b1760cf46a
-rw-r--r-- | api/current.txt | 6 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Call.java | 25 | ||||
-rw-r--r-- | telecomm/java/android/telecom/Connection.java | 57 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ConnectionService.java | 6 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ParcelableCall.java | 20 | ||||
-rw-r--r-- | telecomm/java/android/telecom/ParcelableConnection.java | 19 |
6 files changed, 119 insertions, 14 deletions
diff --git a/api/current.txt b/api/current.txt index 5404e1a633bd..693830367d3a 100644 --- a/api/current.txt +++ b/api/current.txt @@ -43109,6 +43109,7 @@ package android.telecom { method public int getCallProperties(); method public String getCallerDisplayName(); method public int getCallerDisplayNamePresentation(); + method public int getCallerNumberVerificationStatus(); method public final long getConnectTimeMillis(); method public long getCreationTimeMillis(); method public android.telecom.DisconnectCause getDisconnectCause(); @@ -43290,6 +43291,7 @@ package android.telecom { method public final android.telecom.CallAudioState getCallAudioState(); method public final String getCallerDisplayName(); method public final int getCallerDisplayNamePresentation(); + method public int getCallerNumberVerificationStatus(); method public final android.telecom.Conference getConference(); method public final java.util.List<android.telecom.Conferenceable> getConferenceables(); method public final int getConnectionCapabilities(); @@ -43341,6 +43343,7 @@ package android.telecom { method public final void setAudioModeIsVoip(boolean); method public final void setAudioRoute(int); method public final void setCallerDisplayName(String, int); + method public void setCallerNumberVerificationStatus(int); method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>); method public final void setConferenceables(java.util.List<android.telecom.Conferenceable>); method public final void setConnectionCapabilities(int); @@ -43414,6 +43417,9 @@ package android.telecom { field public static final int STATE_NEW = 1; // 0x1 field public static final int STATE_PULLING_CALL = 7; // 0x7 field public static final int STATE_RINGING = 2; // 0x2 + field public static final int VERIFICATION_STATUS_FAILED = 2; // 0x2 + field public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; // 0x0 + field public static final int VERIFICATION_STATUS_PASSED = 1; // 0x1 } public static final class Connection.RttModifyStatus { diff --git a/telecomm/java/android/telecom/Call.java b/telecomm/java/android/telecom/Call.java index 3ecf8d73d0a6..38ec2b6e9c39 100644 --- a/telecomm/java/android/telecom/Call.java +++ b/telecomm/java/android/telecom/Call.java @@ -291,7 +291,6 @@ public final class Call { */ public static final int DIRECTION_OUTGOING = 1; - /** Call can currently be put on hold or unheld. */ public static final int CAPABILITY_HOLD = 0x00000001; @@ -571,6 +570,7 @@ public final class Call { private final Bundle mIntentExtras; private final long mCreationTimeMillis; private final @CallDirection int mCallDirection; + private final @Connection.VerificationStatus int mCallerNumberVerificationStatus; /** * Whether the supplied capabilities supports the specified capability. @@ -880,6 +880,15 @@ public final class Call { return mCallDirection; } + /** + * Gets the verification status for the phone number of an incoming call as identified in + * ATIS-1000082. + * @return the verification status. + */ + public @Connection.VerificationStatus int getCallerNumberVerificationStatus() { + return mCallerNumberVerificationStatus; + } + @Override public boolean equals(Object o) { if (o instanceof Details) { @@ -901,7 +910,9 @@ public final class Call { areBundlesEqual(mExtras, d.mExtras) && areBundlesEqual(mIntentExtras, d.mIntentExtras) && Objects.equals(mCreationTimeMillis, d.mCreationTimeMillis) && - Objects.equals(mCallDirection, d.mCallDirection); + Objects.equals(mCallDirection, d.mCallDirection) && + Objects.equals(mCallerNumberVerificationStatus, + d.mCallerNumberVerificationStatus); } return false; } @@ -923,7 +934,8 @@ public final class Call { mExtras, mIntentExtras, mCreationTimeMillis, - mCallDirection); + mCallDirection, + mCallerNumberVerificationStatus); } /** {@hide} */ @@ -944,7 +956,8 @@ public final class Call { Bundle extras, Bundle intentExtras, long creationTimeMillis, - int callDirection) { + int callDirection, + int callerNumberVerificationStatus) { mTelecomCallId = telecomCallId; mHandle = handle; mHandlePresentation = handlePresentation; @@ -962,6 +975,7 @@ public final class Call { mIntentExtras = intentExtras; mCreationTimeMillis = creationTimeMillis; mCallDirection = callDirection; + mCallerNumberVerificationStatus = callerNumberVerificationStatus; } /** {@hide} */ @@ -983,7 +997,8 @@ public final class Call { parcelableCall.getExtras(), parcelableCall.getIntentExtras(), parcelableCall.getCreationTimeMillis(), - parcelableCall.getCallDirection()); + parcelableCall.getCallDirection(), + parcelableCall.getCallerNumberVerificationStatus()); } @Override diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index 4c22ba9715b0..727c66af9e72 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -16,6 +16,7 @@ package android.telecom; +import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; @@ -50,6 +51,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.nio.channels.Channels; import java.util.ArrayList; import java.util.Arrays; @@ -153,6 +156,32 @@ public abstract class Connection extends Conferenceable { public static final int STATE_PULLING_CALL = 7; /** + * Indicates that the network could not perform verification. + */ + public static final int VERIFICATION_STATUS_NOT_VERIFIED = 0; + + /** + * Indicates that verification by the network passed. This indicates there is a high likelihood + * that the call originated from a valid source. + */ + public static final int VERIFICATION_STATUS_PASSED = 1; + + /** + * Indicates that verification by the network failed. This indicates there is a high likelihood + * that the call did not originate from a valid source. + */ + public static final int VERIFICATION_STATUS_FAILED = 2; + + /**@hide*/ + @Retention(RetentionPolicy.SOURCE) + @IntDef(prefix = "VERIFICATION_STATUS_", value = { + VERIFICATION_STATUS_NOT_VERIFIED, + VERIFICATION_STATUS_PASSED, + VERIFICATION_STATUS_FAILED + }) + public @interface VerificationStatus {} + + /** * Connection can currently be put on hold or unheld. This is distinct from * {@link #CAPABILITY_SUPPORT_HOLD} in that although a connection may support 'hold' most times, * it does not at the moment support the function. This can be true while the call is in the @@ -1803,6 +1832,12 @@ public abstract class Connection extends Conferenceable { private Set<String> mPreviousExtraKeys; /** + * The verification status for an incoming call's phone number. + */ + private @VerificationStatus int mCallerNumberVerificationStatus; + + + /** * Create a new Connection. */ public Connection() {} @@ -3304,4 +3339,26 @@ public abstract class Connection extends Conferenceable { public void setCallDirection(@Call.Details.CallDirection int callDirection) { mCallDirection = callDirection; } + + /** + * Gets the verification status for the phone number of an incoming call as identified in + * ATIS-1000082. + * @return the verification status. + */ + public @VerificationStatus int getCallerNumberVerificationStatus() { + return mCallerNumberVerificationStatus; + } + + /** + * Sets the verification status for the phone number of an incoming call as identified in + * ATIS-1000082. + * <p> + * This property can only be set at the time of creation of a {@link Connection} being returned + * by + * {@link ConnectionService#onCreateIncomingConnection(PhoneAccountHandle, ConnectionRequest)}. + */ + public void setCallerNumberVerificationStatus( + @VerificationStatus int callerNumberVerificationStatus) { + mCallerNumberVerificationStatus = callerNumberVerificationStatus; + } } diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index 812b805675e5..3a0494e17db9 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -1621,7 +1621,8 @@ public abstract class ConnectionService extends Service { connection.getStatusHints(), connection.getDisconnectCause(), createIdList(connection.getConferenceables()), - connection.getExtras())); + connection.getExtras(), + connection.getCallerNumberVerificationStatus())); if (isIncoming && request.shouldShowIncomingCallUi() && isSelfManaged) { // Tell ConnectionService to show its incoming call UX. @@ -2156,7 +2157,8 @@ public abstract class ConnectionService extends Service { emptyList, connection.getExtras(), conferenceId, - connection.getCallDirection()); + connection.getCallDirection(), + Connection.VERIFICATION_STATUS_NOT_VERIFIED); mAdapter.addExistingConnection(id, parcelableConnection); } } diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java index fdc324308d7a..a234bb0af8fa 100644 --- a/telecomm/java/android/telecom/ParcelableCall.java +++ b/telecomm/java/android/telecom/ParcelableCall.java @@ -16,7 +16,6 @@ package android.telecom; -import android.annotation.Nullable; import android.annotation.UnsupportedAppUsage; import android.net.Uri; import android.os.Build; @@ -66,6 +65,7 @@ public final class ParcelableCall implements Parcelable { private final Bundle mExtras; private final long mCreationTimeMillis; private final int mCallDirection; + private final int mCallerNumberVerificationStatus; public ParcelableCall( String id, @@ -94,7 +94,8 @@ public final class ParcelableCall implements Parcelable { Bundle intentExtras, Bundle extras, long creationTimeMillis, - int callDirection) { + int callDirection, + int callerNumberVerificationStatus) { mId = id; mState = state; mDisconnectCause = disconnectCause; @@ -122,6 +123,7 @@ public final class ParcelableCall implements Parcelable { mExtras = extras; mCreationTimeMillis = creationTimeMillis; mCallDirection = callDirection; + mCallerNumberVerificationStatus = callerNumberVerificationStatus; } /** The unique ID of the call. */ @@ -322,6 +324,15 @@ public final class ParcelableCall implements Parcelable { return mCallDirection; } + /** + * Gets the verification status for the phone number of an incoming call as identified in + * ATIS-1000082. + * @return the verification status. + */ + public @Connection.VerificationStatus int getCallerNumberVerificationStatus() { + return mCallerNumberVerificationStatus; + } + /** Responsible for creating ParcelableCall objects for deserialized Parcels. */ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public static final @android.annotation.NonNull Parcelable.Creator<ParcelableCall> CREATOR = @@ -360,6 +371,7 @@ public final class ParcelableCall implements Parcelable { ParcelableRttCall rttCall = source.readParcelable(classLoader); long creationTimeMillis = source.readLong(); int callDirection = source.readInt(); + int callerNumberVerificationStatus = source.readInt(); return new ParcelableCall( id, state, @@ -387,7 +399,8 @@ public final class ParcelableCall implements Parcelable { intentExtras, extras, creationTimeMillis, - callDirection); + callDirection, + callerNumberVerificationStatus); } @Override @@ -433,6 +446,7 @@ public final class ParcelableCall implements Parcelable { destination.writeParcelable(mRttCall, 0); destination.writeLong(mCreationTimeMillis); destination.writeInt(mCallDirection); + destination.writeInt(mCallerNumberVerificationStatus); } @Override diff --git a/telecomm/java/android/telecom/ParcelableConnection.java b/telecomm/java/android/telecom/ParcelableConnection.java index 4734af6371d4..2b9ce9b46ad7 100644 --- a/telecomm/java/android/telecom/ParcelableConnection.java +++ b/telecomm/java/android/telecom/ParcelableConnection.java @@ -54,6 +54,7 @@ public final class ParcelableConnection implements Parcelable { private final Bundle mExtras; private String mParentCallId; private @Call.Details.CallDirection int mCallDirection; + private @Connection.VerificationStatus int mCallerNumberVerificationStatus; /** @hide */ public ParcelableConnection( @@ -77,12 +78,13 @@ public final class ParcelableConnection implements Parcelable { List<String> conferenceableConnectionIds, Bundle extras, String parentCallId, - @Call.Details.CallDirection int callDirection) { + @Call.Details.CallDirection int callDirection, + @Connection.VerificationStatus int callerNumberVerificationStatus) { this(phoneAccount, state, capabilities, properties, supportedAudioRoutes, address, addressPresentation, callerDisplayName, callerDisplayNamePresentation, videoProvider, videoState, ringbackRequested, isVoipAudioMode, connectTimeMillis, connectElapsedTimeMillis, statusHints, disconnectCause, conferenceableConnectionIds, - extras); + extras, callerNumberVerificationStatus); mParentCallId = parentCallId; mCallDirection = callDirection; } @@ -107,7 +109,8 @@ public final class ParcelableConnection implements Parcelable { StatusHints statusHints, DisconnectCause disconnectCause, List<String> conferenceableConnectionIds, - Bundle extras) { + Bundle extras, + @Connection.VerificationStatus int callerNumberVerificationStatus) { mPhoneAccount = phoneAccount; mState = state; mConnectionCapabilities = capabilities; @@ -129,6 +132,7 @@ public final class ParcelableConnection implements Parcelable { mExtras = extras; mParentCallId = null; mCallDirection = Call.Details.DIRECTION_UNKNOWN; + mCallerNumberVerificationStatus = callerNumberVerificationStatus; } public PhoneAccountHandle getPhoneAccount() { @@ -227,6 +231,10 @@ public final class ParcelableConnection implements Parcelable { return mCallDirection; } + public @Connection.VerificationStatus int getCallerNumberVerificationStatus() { + return mCallerNumberVerificationStatus; + } + @Override public String toString() { return new StringBuilder() @@ -276,6 +284,7 @@ public final class ParcelableConnection implements Parcelable { String parentCallId = source.readString(); long connectElapsedTimeMillis = source.readLong(); int callDirection = source.readInt(); + int callerNumberVerificationStatus = source.readInt(); return new ParcelableConnection( phoneAccount, @@ -298,7 +307,8 @@ public final class ParcelableConnection implements Parcelable { conferenceableConnectionIds, extras, parentCallId, - callDirection); + callDirection, + callerNumberVerificationStatus); } @Override @@ -338,5 +348,6 @@ public final class ParcelableConnection implements Parcelable { destination.writeString(mParentCallId); destination.writeLong(mConnectElapsedTimeMillis); destination.writeInt(mCallDirection); + destination.writeInt(mCallerNumberVerificationStatus); } } |