| /* | |
| * Copyright 2014, The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package android.telecom; | |
| import android.annotation.Nullable; | |
| import android.compat.annotation.UnsupportedAppUsage; | |
| import android.net.Uri; | |
| import android.os.Build; | |
| import android.os.Bundle; | |
| import android.os.Parcel; | |
| import android.os.Parcelable; | |
| import android.os.RemoteException; | |
| import android.telecom.Call.Details.CallDirection; | |
| import com.android.internal.telecom.IVideoProvider; | |
| import java.util.ArrayList; | |
| import java.util.Collections; | |
| import java.util.List; | |
| /** | |
| * Information about a call that is used between InCallService and Telecom. | |
| * @hide | |
| */ | |
| public final class ParcelableCall implements Parcelable { | |
| public static class ParcelableCallBuilder { | |
| private String mId; | |
| private int mState; | |
| private DisconnectCause mDisconnectCause; | |
| private List<String> mCannedSmsResponses; | |
| private int mCapabilities; | |
| private int mProperties; | |
| private int mSupportedAudioRoutes; | |
| private long mConnectTimeMillis; | |
| private Uri mHandle; | |
| private int mHandlePresentation; | |
| private String mCallerDisplayName; | |
| private int mCallerDisplayNamePresentation; | |
| private GatewayInfo mGatewayInfo; | |
| private PhoneAccountHandle mAccountHandle; | |
| private boolean mIsVideoCallProviderChanged; | |
| private IVideoProvider mVideoCallProvider; | |
| private boolean mIsRttCallChanged; | |
| private ParcelableRttCall mRttCall; | |
| private String mParentCallId; | |
| private List<String> mChildCallIds; | |
| private StatusHints mStatusHints; | |
| private int mVideoState; | |
| private List<String> mConferenceableCallIds; | |
| private Bundle mIntentExtras; | |
| private Bundle mExtras; | |
| private long mCreationTimeMillis; | |
| private int mCallDirection; | |
| private int mCallerNumberVerificationStatus; | |
| private String mContactDisplayName; | |
| private String mActiveChildCallId; | |
| private Uri mContactPhotoUri; | |
| public ParcelableCallBuilder setId(String id) { | |
| mId = id; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setState(int state) { | |
| mState = state; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setDisconnectCause(DisconnectCause disconnectCause) { | |
| mDisconnectCause = disconnectCause; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCannedSmsResponses(List<String> cannedSmsResponses) { | |
| mCannedSmsResponses = cannedSmsResponses; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCapabilities(int capabilities) { | |
| mCapabilities = capabilities; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setProperties(int properties) { | |
| mProperties = properties; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setSupportedAudioRoutes(int supportedAudioRoutes) { | |
| mSupportedAudioRoutes = supportedAudioRoutes; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setConnectTimeMillis(long connectTimeMillis) { | |
| mConnectTimeMillis = connectTimeMillis; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setHandle(Uri handle) { | |
| mHandle = handle; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setHandlePresentation(int handlePresentation) { | |
| mHandlePresentation = handlePresentation; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCallerDisplayName(String callerDisplayName) { | |
| mCallerDisplayName = callerDisplayName; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCallerDisplayNamePresentation( | |
| int callerDisplayNamePresentation) { | |
| mCallerDisplayNamePresentation = callerDisplayNamePresentation; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setGatewayInfo(GatewayInfo gatewayInfo) { | |
| mGatewayInfo = gatewayInfo; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setAccountHandle(PhoneAccountHandle accountHandle) { | |
| mAccountHandle = accountHandle; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setIsVideoCallProviderChanged( | |
| boolean isVideoCallProviderChanged) { | |
| mIsVideoCallProviderChanged = isVideoCallProviderChanged; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setVideoCallProvider(IVideoProvider videoCallProvider) { | |
| mVideoCallProvider = videoCallProvider; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setIsRttCallChanged(boolean isRttCallChanged) { | |
| mIsRttCallChanged = isRttCallChanged; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setRttCall(ParcelableRttCall rttCall) { | |
| mRttCall = rttCall; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setParentCallId(String parentCallId) { | |
| mParentCallId = parentCallId; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setChildCallIds(List<String> childCallIds) { | |
| mChildCallIds = childCallIds; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setStatusHints(StatusHints statusHints) { | |
| mStatusHints = statusHints; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setVideoState(int videoState) { | |
| mVideoState = videoState; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setConferenceableCallIds( | |
| List<String> conferenceableCallIds) { | |
| mConferenceableCallIds = conferenceableCallIds; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setIntentExtras(Bundle intentExtras) { | |
| mIntentExtras = intentExtras; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setExtras(Bundle extras) { | |
| mExtras = extras; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCreationTimeMillis(long creationTimeMillis) { | |
| mCreationTimeMillis = creationTimeMillis; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCallDirection(int callDirection) { | |
| mCallDirection = callDirection; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setCallerNumberVerificationStatus( | |
| int callerNumberVerificationStatus) { | |
| mCallerNumberVerificationStatus = callerNumberVerificationStatus; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setContactDisplayName(String contactDisplayName) { | |
| mContactDisplayName = contactDisplayName; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setActiveChildCallId(String activeChildCallId) { | |
| mActiveChildCallId = activeChildCallId; | |
| return this; | |
| } | |
| public ParcelableCallBuilder setContactPhotoUri(Uri contactPhotoUri) { | |
| mContactPhotoUri = contactPhotoUri; | |
| return this; | |
| } | |
| public ParcelableCall createParcelableCall() { | |
| return new ParcelableCall( | |
| mId, | |
| mState, | |
| mDisconnectCause, | |
| mCannedSmsResponses, | |
| mCapabilities, | |
| mProperties, | |
| mSupportedAudioRoutes, | |
| mConnectTimeMillis, | |
| mHandle, | |
| mHandlePresentation, | |
| mCallerDisplayName, | |
| mCallerDisplayNamePresentation, | |
| mGatewayInfo, | |
| mAccountHandle, | |
| mIsVideoCallProviderChanged, | |
| mVideoCallProvider, | |
| mIsRttCallChanged, | |
| mRttCall, | |
| mParentCallId, | |
| mChildCallIds, | |
| mStatusHints, | |
| mVideoState, | |
| mConferenceableCallIds, | |
| mIntentExtras, | |
| mExtras, | |
| mCreationTimeMillis, | |
| mCallDirection, | |
| mCallerNumberVerificationStatus, | |
| mContactDisplayName, | |
| mActiveChildCallId, | |
| mContactPhotoUri); | |
| } | |
| public static ParcelableCallBuilder fromParcelableCall(ParcelableCall parcelableCall) { | |
| ParcelableCallBuilder newBuilder = new ParcelableCallBuilder(); | |
| newBuilder.mId = parcelableCall.mId; | |
| newBuilder.mState = parcelableCall.mState; | |
| newBuilder.mDisconnectCause = parcelableCall.mDisconnectCause; | |
| newBuilder.mCannedSmsResponses = parcelableCall.mCannedSmsResponses; | |
| newBuilder.mCapabilities = parcelableCall.mCapabilities; | |
| newBuilder.mProperties = parcelableCall.mProperties; | |
| newBuilder.mSupportedAudioRoutes = parcelableCall.mSupportedAudioRoutes; | |
| newBuilder.mConnectTimeMillis = parcelableCall.mConnectTimeMillis; | |
| newBuilder.mHandle = parcelableCall.mHandle; | |
| newBuilder.mHandlePresentation = parcelableCall.mHandlePresentation; | |
| newBuilder.mCallerDisplayName = parcelableCall.mCallerDisplayName; | |
| newBuilder.mCallerDisplayNamePresentation = | |
| parcelableCall.mCallerDisplayNamePresentation; | |
| newBuilder.mGatewayInfo = parcelableCall.mGatewayInfo; | |
| newBuilder.mAccountHandle = parcelableCall.mAccountHandle; | |
| newBuilder.mIsVideoCallProviderChanged = parcelableCall.mIsVideoCallProviderChanged; | |
| newBuilder.mVideoCallProvider = parcelableCall.mVideoCallProvider; | |
| newBuilder.mIsRttCallChanged = parcelableCall.mIsRttCallChanged; | |
| newBuilder.mRttCall = parcelableCall.mRttCall; | |
| newBuilder.mParentCallId = parcelableCall.mParentCallId; | |
| newBuilder.mChildCallIds = parcelableCall.mChildCallIds; | |
| newBuilder.mStatusHints = parcelableCall.mStatusHints; | |
| newBuilder.mVideoState = parcelableCall.mVideoState; | |
| newBuilder.mConferenceableCallIds = parcelableCall.mConferenceableCallIds; | |
| newBuilder.mIntentExtras = parcelableCall.mIntentExtras; | |
| newBuilder.mExtras = parcelableCall.mExtras; | |
| newBuilder.mCreationTimeMillis = parcelableCall.mCreationTimeMillis; | |
| newBuilder.mCallDirection = parcelableCall.mCallDirection; | |
| newBuilder.mCallerNumberVerificationStatus = | |
| parcelableCall.mCallerNumberVerificationStatus; | |
| newBuilder.mContactDisplayName = parcelableCall.mContactDisplayName; | |
| newBuilder.mActiveChildCallId = parcelableCall.mActiveChildCallId; | |
| newBuilder.mContactPhotoUri = parcelableCall.mContactPhotoUri; | |
| return newBuilder; | |
| } | |
| } | |
| private final String mId; | |
| private final int mState; | |
| private final DisconnectCause mDisconnectCause; | |
| private final List<String> mCannedSmsResponses; | |
| private final int mCapabilities; | |
| private final int mProperties; | |
| private final int mSupportedAudioRoutes; | |
| private final long mConnectTimeMillis; | |
| private final Uri mHandle; | |
| private final int mHandlePresentation; | |
| private final String mCallerDisplayName; | |
| private final int mCallerDisplayNamePresentation; | |
| private final GatewayInfo mGatewayInfo; | |
| private final PhoneAccountHandle mAccountHandle; | |
| private final boolean mIsVideoCallProviderChanged; | |
| private final IVideoProvider mVideoCallProvider; | |
| private VideoCallImpl mVideoCall; | |
| private final boolean mIsRttCallChanged; | |
| private final ParcelableRttCall mRttCall; | |
| private final String mParentCallId; | |
| private final List<String> mChildCallIds; | |
| private final StatusHints mStatusHints; | |
| private final int mVideoState; | |
| private final List<String> mConferenceableCallIds; | |
| private final Bundle mIntentExtras; | |
| private final Bundle mExtras; | |
| private final long mCreationTimeMillis; | |
| private final int mCallDirection; | |
| private final int mCallerNumberVerificationStatus; | |
| private final String mContactDisplayName; | |
| private final String mActiveChildCallId; // Only valid for CDMA conferences | |
| private final Uri mContactPhotoUri; | |
| public ParcelableCall( | |
| String id, | |
| int state, | |
| DisconnectCause disconnectCause, | |
| List<String> cannedSmsResponses, | |
| int capabilities, | |
| int properties, | |
| int supportedAudioRoutes, | |
| long connectTimeMillis, | |
| Uri handle, | |
| int handlePresentation, | |
| String callerDisplayName, | |
| int callerDisplayNamePresentation, | |
| GatewayInfo gatewayInfo, | |
| PhoneAccountHandle accountHandle, | |
| boolean isVideoCallProviderChanged, | |
| IVideoProvider videoCallProvider, | |
| boolean isRttCallChanged, | |
| ParcelableRttCall rttCall, | |
| String parentCallId, | |
| List<String> childCallIds, | |
| StatusHints statusHints, | |
| int videoState, | |
| List<String> conferenceableCallIds, | |
| Bundle intentExtras, | |
| Bundle extras, | |
| long creationTimeMillis, | |
| int callDirection, | |
| int callerNumberVerificationStatus, | |
| String contactDisplayName, | |
| String activeChildCallId, | |
| Uri contactPhotoUri | |
| ) { | |
| mId = id; | |
| mState = state; | |
| mDisconnectCause = disconnectCause; | |
| mCannedSmsResponses = cannedSmsResponses; | |
| mCapabilities = capabilities; | |
| mProperties = properties; | |
| mSupportedAudioRoutes = supportedAudioRoutes; | |
| mConnectTimeMillis = connectTimeMillis; | |
| mHandle = handle; | |
| mHandlePresentation = handlePresentation; | |
| mCallerDisplayName = callerDisplayName; | |
| mCallerDisplayNamePresentation = callerDisplayNamePresentation; | |
| mGatewayInfo = gatewayInfo; | |
| mAccountHandle = accountHandle; | |
| mIsVideoCallProviderChanged = isVideoCallProviderChanged; | |
| mVideoCallProvider = videoCallProvider; | |
| mIsRttCallChanged = isRttCallChanged; | |
| mRttCall = rttCall; | |
| mParentCallId = parentCallId; | |
| mChildCallIds = childCallIds; | |
| mStatusHints = statusHints; | |
| mVideoState = videoState; | |
| mConferenceableCallIds = Collections.unmodifiableList(conferenceableCallIds); | |
| mIntentExtras = intentExtras; | |
| mExtras = extras; | |
| mCreationTimeMillis = creationTimeMillis; | |
| mCallDirection = callDirection; | |
| mCallerNumberVerificationStatus = callerNumberVerificationStatus; | |
| mContactDisplayName = contactDisplayName; | |
| mActiveChildCallId = activeChildCallId; | |
| mContactPhotoUri = contactPhotoUri; | |
| } | |
| /** The unique ID of the call. */ | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) | |
| public String getId() { | |
| return mId; | |
| } | |
| /** The current state of the call. */ | |
| public @Call.CallState int getState() { | |
| return mState; | |
| } | |
| /** | |
| * Reason for disconnection, as described by {@link android.telecomm.DisconnectCause}. Valid | |
| * when call state is {@link CallState#DISCONNECTED}. | |
| */ | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) | |
| public DisconnectCause getDisconnectCause() { | |
| return mDisconnectCause; | |
| } | |
| /** | |
| * The set of possible text message responses when this call is incoming. | |
| */ | |
| public List<String> getCannedSmsResponses() { | |
| return mCannedSmsResponses; | |
| } | |
| // Bit mask of actions a call supports, values are defined in {@link CallCapabilities}. | |
| public int getCapabilities() { | |
| return mCapabilities; | |
| } | |
| /** Bitmask of properties of the call. */ | |
| public int getProperties() { return mProperties; } | |
| /** Bitmask of supported routes of the call */ | |
| public int getSupportedAudioRoutes() { | |
| return mSupportedAudioRoutes; | |
| } | |
| /** The time that the call switched to the active state. */ | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) | |
| public long getConnectTimeMillis() { | |
| return mConnectTimeMillis; | |
| } | |
| /** The endpoint to which the call is connected. */ | |
| @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) | |
| public Uri getHandle() { | |
| return mHandle; | |
| } | |
| /** | |
| * The presentation requirements for the handle. See {@link TelecomManager} for valid values. | |
| */ | |
| public int getHandlePresentation() { | |
| return mHandlePresentation; | |
| } | |
| /** The endpoint to which the call is connected. */ | |
| public String getCallerDisplayName() { | |
| return mCallerDisplayName; | |
| } | |
| /** | |
| * The presentation requirements for the caller display name. | |
| * See {@link TelecomManager} for valid values. | |
| */ | |
| public int getCallerDisplayNamePresentation() { | |
| return mCallerDisplayNamePresentation; | |
| } | |
| /** Gateway information for the call. */ | |
| public GatewayInfo getGatewayInfo() { | |
| return mGatewayInfo; | |
| } | |
| /** PhoneAccountHandle information for the call. */ | |
| public PhoneAccountHandle getAccountHandle() { | |
| return mAccountHandle; | |
| } | |
| /** | |
| * Returns an object for remotely communicating through the video call provider's binder. | |
| * | |
| * @param callingPackageName the package name of the calling InCallService. | |
| * @param targetSdkVersion the target SDK version of the calling InCallService. | |
| * @return The video call. | |
| */ | |
| public VideoCallImpl getVideoCallImpl(String callingPackageName, int targetSdkVersion) { | |
| if (mVideoCall == null && mVideoCallProvider != null) { | |
| try { | |
| mVideoCall = new VideoCallImpl(mVideoCallProvider, callingPackageName, | |
| targetSdkVersion); | |
| } catch (RemoteException ignored) { | |
| // Ignore RemoteException. | |
| } | |
| } | |
| return mVideoCall; | |
| } | |
| public IVideoProvider getVideoProvider() { | |
| return mVideoCallProvider; | |
| } | |
| public boolean getIsRttCallChanged() { | |
| return mIsRttCallChanged; | |
| } | |
| /** | |
| * RTT communication channel information | |
| * @return The ParcelableRttCall | |
| */ | |
| public ParcelableRttCall getParcelableRttCall() { | |
| return mRttCall; | |
| } | |
| /** | |
| * The conference call to which this call is conferenced. Null if not conferenced. | |
| */ | |
| public String getParentCallId() { | |
| return mParentCallId; | |
| } | |
| /** | |
| * The child call-IDs if this call is a conference call. Returns an empty list if this is not | |
| * a conference call or if the conference call contains no children. | |
| */ | |
| public List<String> getChildCallIds() { | |
| return mChildCallIds; | |
| } | |
| public List<String> getConferenceableCallIds() { | |
| return mConferenceableCallIds; | |
| } | |
| /** | |
| * The status label and icon. | |
| * | |
| * @return Status hints. | |
| */ | |
| public StatusHints getStatusHints() { | |
| return mStatusHints; | |
| } | |
| /** | |
| * The video state. | |
| * @return The video state of the call. | |
| */ | |
| public int getVideoState() { | |
| return mVideoState; | |
| } | |
| /** | |
| * Any extras associated with this call. | |
| * | |
| * @return a bundle of extras | |
| */ | |
| public Bundle getExtras() { | |
| return mExtras; | |
| } | |
| /** | |
| * Extras passed in as part of the original call intent. | |
| * | |
| * @return The intent extras. | |
| */ | |
| public Bundle getIntentExtras() { | |
| return mIntentExtras; | |
| } | |
| /** | |
| * Indicates to the receiver of the {@link ParcelableCall} whether a change has occurred in the | |
| * {@link android.telecom.InCallService.VideoCall} associated with this call. Since | |
| * {@link #getVideoCall()} creates a new {@link VideoCallImpl}, it is useful to know whether | |
| * the provider has changed (which can influence whether it is accessed). | |
| * | |
| * @return {@code true} if the video call changed, {@code false} otherwise. | |
| */ | |
| public boolean isVideoCallProviderChanged() { | |
| return mIsVideoCallProviderChanged; | |
| } | |
| /** | |
| * @return The time the call was created, in milliseconds since the epoch. | |
| */ | |
| public long getCreationTimeMillis() { | |
| return mCreationTimeMillis; | |
| } | |
| /** | |
| * Indicates whether the call is an incoming or outgoing call. | |
| */ | |
| public @CallDirection int getCallDirection() { | |
| 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; | |
| } | |
| /** | |
| * @return the name of the remote party as derived from a contacts DB lookup. | |
| */ | |
| public @Nullable String getContactDisplayName() { | |
| return mContactDisplayName; | |
| } | |
| /** | |
| * @return the caller photo URI. | |
| */ | |
| public @Nullable Uri getContactPhotoUri() { | |
| return mContactPhotoUri; | |
| } | |
| /** | |
| * @return On a CDMA conference with two participants, returns the ID of the child call that's | |
| * currently active. | |
| */ | |
| public @Nullable String getActiveChildCallId() { | |
| return mActiveChildCallId; | |
| } | |
| /** 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 = | |
| new Parcelable.Creator<ParcelableCall> () { | |
| @Override | |
| public ParcelableCall createFromParcel(Parcel source) { | |
| ClassLoader classLoader = ParcelableCall.class.getClassLoader(); | |
| String id = source.readString(); | |
| int state = source.readInt(); | |
| DisconnectCause disconnectCause = source.readParcelable(classLoader, android.telecom.DisconnectCause.class); | |
| List<String> cannedSmsResponses = new ArrayList<>(); | |
| source.readList(cannedSmsResponses, classLoader, java.lang.String.class); | |
| int capabilities = source.readInt(); | |
| int properties = source.readInt(); | |
| long connectTimeMillis = source.readLong(); | |
| Uri handle = Uri.CREATOR.createFromParcel(source); | |
| int handlePresentation = source.readInt(); | |
| String callerDisplayName = source.readString(); | |
| int callerDisplayNamePresentation = source.readInt(); | |
| GatewayInfo gatewayInfo = source.readParcelable(classLoader, android.telecom.GatewayInfo.class); | |
| PhoneAccountHandle accountHandle = source.readParcelable(classLoader, android.telecom.PhoneAccountHandle.class); | |
| boolean isVideoCallProviderChanged = source.readByte() == 1; | |
| IVideoProvider videoCallProvider = | |
| IVideoProvider.Stub.asInterface(source.readStrongBinder()); | |
| String parentCallId = source.readString(); | |
| List<String> childCallIds = new ArrayList<>(); | |
| source.readList(childCallIds, classLoader, java.lang.String.class); | |
| StatusHints statusHints = source.readParcelable(classLoader, android.telecom.StatusHints.class); | |
| int videoState = source.readInt(); | |
| List<String> conferenceableCallIds = new ArrayList<>(); | |
| source.readList(conferenceableCallIds, classLoader, java.lang.String.class); | |
| Bundle intentExtras = source.readBundle(classLoader); | |
| Bundle extras = source.readBundle(classLoader); | |
| int supportedAudioRoutes = source.readInt(); | |
| boolean isRttCallChanged = source.readByte() == 1; | |
| ParcelableRttCall rttCall = source.readParcelable(classLoader, android.telecom.ParcelableRttCall.class); | |
| long creationTimeMillis = source.readLong(); | |
| int callDirection = source.readInt(); | |
| int callerNumberVerificationStatus = source.readInt(); | |
| String contactDisplayName = source.readString(); | |
| String activeChildCallId = source.readString(); | |
| Uri contactPhotoUri = source.readParcelable(classLoader, Uri.class); | |
| return new ParcelableCallBuilder() | |
| .setId(id) | |
| .setState(state) | |
| .setDisconnectCause(disconnectCause) | |
| .setCannedSmsResponses(cannedSmsResponses) | |
| .setCapabilities(capabilities) | |
| .setProperties(properties) | |
| .setSupportedAudioRoutes(supportedAudioRoutes) | |
| .setConnectTimeMillis(connectTimeMillis) | |
| .setHandle(handle) | |
| .setHandlePresentation(handlePresentation) | |
| .setCallerDisplayName(callerDisplayName) | |
| .setCallerDisplayNamePresentation(callerDisplayNamePresentation) | |
| .setGatewayInfo(gatewayInfo) | |
| .setAccountHandle(accountHandle) | |
| .setIsVideoCallProviderChanged(isVideoCallProviderChanged) | |
| .setVideoCallProvider(videoCallProvider) | |
| .setIsRttCallChanged(isRttCallChanged) | |
| .setRttCall(rttCall) | |
| .setParentCallId(parentCallId) | |
| .setChildCallIds(childCallIds) | |
| .setStatusHints(statusHints) | |
| .setVideoState(videoState) | |
| .setConferenceableCallIds(conferenceableCallIds) | |
| .setIntentExtras(intentExtras) | |
| .setExtras(extras) | |
| .setCreationTimeMillis(creationTimeMillis) | |
| .setCallDirection(callDirection) | |
| .setCallerNumberVerificationStatus(callerNumberVerificationStatus) | |
| .setContactDisplayName(contactDisplayName) | |
| .setActiveChildCallId(activeChildCallId) | |
| .setContactPhotoUri(contactPhotoUri) | |
| .createParcelableCall(); | |
| } | |
| @Override | |
| public ParcelableCall[] newArray(int size) { | |
| return new ParcelableCall[size]; | |
| } | |
| }; | |
| /** {@inheritDoc} */ | |
| @Override | |
| public int describeContents() { | |
| return 0; | |
| } | |
| /** Writes ParcelableCall object into a Parcel. */ | |
| @Override | |
| public void writeToParcel(Parcel destination, int flags) { | |
| destination.writeString(mId); | |
| destination.writeInt(mState); | |
| destination.writeParcelable(mDisconnectCause, 0); | |
| destination.writeList(mCannedSmsResponses); | |
| destination.writeInt(mCapabilities); | |
| destination.writeInt(mProperties); | |
| destination.writeLong(mConnectTimeMillis); | |
| Uri.writeToParcel(destination, mHandle); | |
| destination.writeInt(mHandlePresentation); | |
| destination.writeString(mCallerDisplayName); | |
| destination.writeInt(mCallerDisplayNamePresentation); | |
| destination.writeParcelable(mGatewayInfo, 0); | |
| destination.writeParcelable(mAccountHandle, 0); | |
| destination.writeByte((byte) (mIsVideoCallProviderChanged ? 1 : 0)); | |
| destination.writeStrongBinder( | |
| mVideoCallProvider != null ? mVideoCallProvider.asBinder() : null); | |
| destination.writeString(mParentCallId); | |
| destination.writeList(mChildCallIds); | |
| destination.writeParcelable(mStatusHints, 0); | |
| destination.writeInt(mVideoState); | |
| destination.writeList(mConferenceableCallIds); | |
| destination.writeBundle(mIntentExtras); | |
| destination.writeBundle(mExtras); | |
| destination.writeInt(mSupportedAudioRoutes); | |
| destination.writeByte((byte) (mIsRttCallChanged ? 1 : 0)); | |
| destination.writeParcelable(mRttCall, 0); | |
| destination.writeLong(mCreationTimeMillis); | |
| destination.writeInt(mCallDirection); | |
| destination.writeInt(mCallerNumberVerificationStatus); | |
| destination.writeString(mContactDisplayName); | |
| destination.writeString(mActiveChildCallId); | |
| destination.writeParcelable(mContactPhotoUri, 0); | |
| } | |
| @Override | |
| public String toString() { | |
| return String.format("[%s, parent:%s, children:%s]", mId, mParentCallId, mChildCallIds); | |
| } | |
| } |