summaryrefslogtreecommitdiffstats
path: root/telecomm/java/android/telecom/ParcelableCall.java
diff options
context:
space:
mode:
Diffstat (limited to 'telecomm/java/android/telecom/ParcelableCall.java')
-rw-r--r--telecomm/java/android/telecom/ParcelableCall.java330
1 files changed, 330 insertions, 0 deletions
diff --git a/telecomm/java/android/telecom/ParcelableCall.java b/telecomm/java/android/telecom/ParcelableCall.java
new file mode 100644
index 0000000..c5c3d11
--- /dev/null
+++ b/telecomm/java/android/telecom/ParcelableCall.java
@@ -0,0 +1,330 @@
+/*
+ * 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.net.Uri;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.RemoteException;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.android.internal.telecom.IVideoProvider;
+
+/**
+ * Information about a call that is used between InCallService and Telecom.
+ * @hide
+ */
+public final class ParcelableCall implements Parcelable {
+ 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 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 IVideoProvider mVideoCallProvider;
+ private InCallService.VideoCall mVideoCall;
+ 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 mExtras;
+
+ public ParcelableCall(
+ String id,
+ int state,
+ DisconnectCause disconnectCause,
+ List<String> cannedSmsResponses,
+ int capabilities,
+ int properties,
+ long connectTimeMillis,
+ Uri handle,
+ int handlePresentation,
+ String callerDisplayName,
+ int callerDisplayNamePresentation,
+ GatewayInfo gatewayInfo,
+ PhoneAccountHandle accountHandle,
+ IVideoProvider videoCallProvider,
+ String parentCallId,
+ List<String> childCallIds,
+ StatusHints statusHints,
+ int videoState,
+ List<String> conferenceableCallIds,
+ Bundle extras) {
+ mId = id;
+ mState = state;
+ mDisconnectCause = disconnectCause;
+ mCannedSmsResponses = cannedSmsResponses;
+ mCapabilities = capabilities;
+ mProperties = properties;
+ mConnectTimeMillis = connectTimeMillis;
+ mHandle = handle;
+ mHandlePresentation = handlePresentation;
+ mCallerDisplayName = callerDisplayName;
+ mCallerDisplayNamePresentation = callerDisplayNamePresentation;
+ mGatewayInfo = gatewayInfo;
+ mAccountHandle = accountHandle;
+ mVideoCallProvider = videoCallProvider;
+ mParentCallId = parentCallId;
+ mChildCallIds = childCallIds;
+ mStatusHints = statusHints;
+ mVideoState = videoState;
+ mConferenceableCallIds = Collections.unmodifiableList(conferenceableCallIds);
+ mExtras = extras;
+ }
+
+ /** The unique ID of the call. */
+ public String getId() {
+ return mId;
+ }
+
+ /** The current state of the call. */
+ public int getState() {
+ return mState;
+ }
+
+ /**
+ * Reason for disconnection, as described by {@link android.telecomm.DisconnectCause}. Valid
+ * when call state is {@link CallState#DISCONNECTED}.
+ */
+ 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; }
+
+ /** The time that the call switched to the active state. */
+ public long getConnectTimeMillis() {
+ return mConnectTimeMillis;
+ }
+
+ /** The endpoint to which the call is connected. */
+ 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.
+ * @return The video call.
+ */
+ public InCallService.VideoCall getVideoCall() {
+ if (mVideoCall == null && mVideoCallProvider != null) {
+ try {
+ mVideoCall = new VideoCallImpl(mVideoCallProvider);
+ } catch (RemoteException ignored) {
+ // Ignore RemoteException.
+ }
+ }
+
+ return mVideoCall;
+ }
+
+ /**
+ * 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 to pass with the call
+ *
+ * @return a bundle of extras
+ */
+ public Bundle getExtras() {
+ return mExtras;
+ }
+
+ /** Responsible for creating ParcelableCall objects for deserialized Parcels. */
+ public static final 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);
+ List<String> cannedSmsResponses = new ArrayList<>();
+ source.readList(cannedSmsResponses, classLoader);
+ int capabilities = source.readInt();
+ int properties = source.readInt();
+ long connectTimeMillis = source.readLong();
+ Uri handle = source.readParcelable(classLoader);
+ int handlePresentation = source.readInt();
+ String callerDisplayName = source.readString();
+ int callerDisplayNamePresentation = source.readInt();
+ GatewayInfo gatewayInfo = source.readParcelable(classLoader);
+ PhoneAccountHandle accountHandle = source.readParcelable(classLoader);
+ IVideoProvider videoCallProvider =
+ IVideoProvider.Stub.asInterface(source.readStrongBinder());
+ String parentCallId = source.readString();
+ List<String> childCallIds = new ArrayList<>();
+ source.readList(childCallIds, classLoader);
+ StatusHints statusHints = source.readParcelable(classLoader);
+ int videoState = source.readInt();
+ List<String> conferenceableCallIds = new ArrayList<>();
+ source.readList(conferenceableCallIds, classLoader);
+ Bundle extras = source.readParcelable(classLoader);
+ return new ParcelableCall(
+ id,
+ state,
+ disconnectCause,
+ cannedSmsResponses,
+ capabilities,
+ properties,
+ connectTimeMillis,
+ handle,
+ handlePresentation,
+ callerDisplayName,
+ callerDisplayNamePresentation,
+ gatewayInfo,
+ accountHandle,
+ videoCallProvider,
+ parentCallId,
+ childCallIds,
+ statusHints,
+ videoState,
+ conferenceableCallIds,
+ extras);
+ }
+
+ @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);
+ destination.writeParcelable(mHandle, 0);
+ destination.writeInt(mHandlePresentation);
+ destination.writeString(mCallerDisplayName);
+ destination.writeInt(mCallerDisplayNamePresentation);
+ destination.writeParcelable(mGatewayInfo, 0);
+ destination.writeParcelable(mAccountHandle, 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.writeParcelable(mExtras, 0);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("[%s, parent:%s, children:%s]", mId, mParentCallId, mChildCallIds);
+ }
+}