| /* | 
 |  * 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 java.util.ArrayList; | 
 | import java.util.Collections; | 
 | import java.util.List; | 
 |  | 
 | import com.android.internal.telecom.IVideoProvider; | 
 |  | 
 | /** | 
 |  * A parcelable representation of a conference connection. | 
 |  * @hide | 
 |  */ | 
 | public final class ParcelableConference implements Parcelable { | 
 |  | 
 |     public static final class Builder { | 
 |         private final PhoneAccountHandle mPhoneAccount; | 
 |         private final int mState; | 
 |         private int mConnectionCapabilities; | 
 |         private int mConnectionProperties; | 
 |         private List<String> mConnectionIds = Collections.emptyList(); | 
 |         private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; | 
 |         private IVideoProvider mVideoProvider; | 
 |         private int mVideoState = VideoProfile.STATE_AUDIO_ONLY; | 
 |         private StatusHints mStatusHints; | 
 |         private Bundle mExtras; | 
 |         private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; | 
 |         private Uri mAddress; | 
 |         private int mAddressPresentation = TelecomManager.PRESENTATION_UNKNOWN; | 
 |         private String mCallerDisplayName; | 
 |         private int mCallerDisplayNamePresentation = TelecomManager.PRESENTATION_UNKNOWN;; | 
 |         private DisconnectCause mDisconnectCause; | 
 |         private boolean mRingbackRequested; | 
 |         private int mCallDirection = Call.Details.DIRECTION_UNKNOWN; | 
 |  | 
 |         public Builder( | 
 |                 PhoneAccountHandle phoneAccount, | 
 |                 int state) { | 
 |             mPhoneAccount = phoneAccount; | 
 |             mState = state; | 
 |         } | 
 |  | 
 |         public Builder setDisconnectCause(DisconnectCause cause) { | 
 |             mDisconnectCause = cause; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setRingbackRequested(boolean requested) { | 
 |             mRingbackRequested = requested; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setCallerDisplayName(String callerDisplayName, | 
 |                 @TelecomManager.Presentation int callerDisplayNamePresentation) { | 
 |             mCallerDisplayName = callerDisplayName; | 
 |             mCallerDisplayNamePresentation = callerDisplayNamePresentation; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setAddress(Uri address, | 
 |                 @TelecomManager.Presentation int addressPresentation) { | 
 |             mAddress = address; | 
 |             mAddressPresentation = addressPresentation; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setExtras(Bundle extras) { | 
 |             mExtras = extras; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setStatusHints(StatusHints hints) { | 
 |             mStatusHints = hints; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setConnectTimeMillis(long connectTimeMillis, long connectElapsedTimeMillis) { | 
 |             mConnectTimeMillis = connectTimeMillis; | 
 |             mConnectElapsedTimeMillis = connectElapsedTimeMillis; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setVideoAttributes(IVideoProvider provider, | 
 |                 @VideoProfile.VideoState int videoState) { | 
 |             mVideoProvider = provider; | 
 |             mVideoState = videoState; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setConnectionIds(List<String> connectionIds) { | 
 |             mConnectionIds = connectionIds; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setConnectionProperties(int properties) { | 
 |             mConnectionProperties = properties; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setConnectionCapabilities(int capabilities) { | 
 |             mConnectionCapabilities = capabilities; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public Builder setCallDirection(int callDirection) { | 
 |             mCallDirection = callDirection; | 
 |             return this; | 
 |         } | 
 |  | 
 |         public ParcelableConference build() { | 
 |             return new ParcelableConference(mPhoneAccount, mState, mConnectionCapabilities, | 
 |                     mConnectionProperties, mConnectionIds, mVideoProvider, mVideoState, | 
 |                     mConnectTimeMillis, mConnectElapsedTimeMillis, mStatusHints, mExtras, mAddress, | 
 |                     mAddressPresentation, mCallerDisplayName, mCallerDisplayNamePresentation, | 
 |                     mDisconnectCause, mRingbackRequested, mCallDirection); | 
 |         } | 
 |     } | 
 |  | 
 |  | 
 |     private final PhoneAccountHandle mPhoneAccount; | 
 |     private final int mState; | 
 |     private final int mConnectionCapabilities; | 
 |     private final int mConnectionProperties; | 
 |     private final List<String> mConnectionIds; | 
 |     private final long mConnectTimeMillis; | 
 |     private final IVideoProvider mVideoProvider; | 
 |     private final int mVideoState; | 
 |     private final StatusHints mStatusHints; | 
 |     private final Bundle mExtras; | 
 |     private final long mConnectElapsedTimeMillis; | 
 |     private final Uri mAddress; | 
 |     private final int mAddressPresentation; | 
 |     private final String mCallerDisplayName; | 
 |     private final int mCallerDisplayNamePresentation; | 
 |     private final DisconnectCause mDisconnectCause; | 
 |     private final boolean mRingbackRequested; | 
 |     private final int mCallDirection; | 
 |  | 
 |     private ParcelableConference( | 
 |             PhoneAccountHandle phoneAccount, | 
 |             int state, | 
 |             int connectionCapabilities, | 
 |             int connectionProperties, | 
 |             List<String> connectionIds, | 
 |             IVideoProvider videoProvider, | 
 |             int videoState, | 
 |             long connectTimeMillis, | 
 |             long connectElapsedTimeMillis, | 
 |             StatusHints statusHints, | 
 |             Bundle extras, | 
 |             Uri address, | 
 |             int addressPresentation, | 
 |             String callerDisplayName, | 
 |             int callerDisplayNamePresentation, | 
 |             DisconnectCause disconnectCause, | 
 |             boolean ringbackRequested, | 
 |             int callDirection) { | 
 |         mPhoneAccount = phoneAccount; | 
 |         mState = state; | 
 |         mConnectionCapabilities = connectionCapabilities; | 
 |         mConnectionProperties = connectionProperties; | 
 |         mConnectionIds = connectionIds; | 
 |         mVideoProvider = videoProvider; | 
 |         mVideoState = videoState; | 
 |         mConnectTimeMillis = connectTimeMillis; | 
 |         mStatusHints = statusHints; | 
 |         mExtras = extras; | 
 |         mConnectElapsedTimeMillis = connectElapsedTimeMillis; | 
 |         mAddress = address; | 
 |         mAddressPresentation = addressPresentation; | 
 |         mCallerDisplayName = callerDisplayName; | 
 |         mCallerDisplayNamePresentation = callerDisplayNamePresentation; | 
 |         mDisconnectCause = disconnectCause; | 
 |         mRingbackRequested = ringbackRequested; | 
 |         mCallDirection = callDirection; | 
 |     } | 
 |  | 
 |     @Override | 
 |     public String toString() { | 
 |         return (new StringBuffer()) | 
 |                 .append("account: ") | 
 |                 .append(mPhoneAccount) | 
 |                 .append(", state: ") | 
 |                 .append(Connection.stateToString(mState)) | 
 |                 .append(", capabilities: ") | 
 |                 .append(Connection.capabilitiesToString(mConnectionCapabilities)) | 
 |                 .append(", properties: ") | 
 |                 .append(Connection.propertiesToString(mConnectionProperties)) | 
 |                 .append(", connectTime: ") | 
 |                 .append(mConnectTimeMillis) | 
 |                 .append(", children: ") | 
 |                 .append(mConnectionIds) | 
 |                 .append(", VideoState: ") | 
 |                 .append(mVideoState) | 
 |                 .append(", VideoProvider: ") | 
 |                 .append(mVideoProvider) | 
 |                 .append(", isRingbackRequested: ") | 
 |                 .append(mRingbackRequested) | 
 |                 .append(", disconnectCause: ") | 
 |                 .append(mDisconnectCause) | 
 |                 .append(", callDirection: ") | 
 |                 .append(mCallDirection) | 
 |                 .toString(); | 
 |     } | 
 |  | 
 |     public PhoneAccountHandle getPhoneAccount() { | 
 |         return mPhoneAccount; | 
 |     } | 
 |  | 
 |     public int getState() { | 
 |         return mState; | 
 |     } | 
 |  | 
 |     public int getConnectionCapabilities() { | 
 |         return mConnectionCapabilities; | 
 |     } | 
 |  | 
 |     public int getConnectionProperties() { | 
 |         return mConnectionProperties; | 
 |     } | 
 |  | 
 |     public List<String> getConnectionIds() { | 
 |         return mConnectionIds; | 
 |     } | 
 |  | 
 |     public long getConnectTimeMillis() { | 
 |         return mConnectTimeMillis; | 
 |     } | 
 |  | 
 |     public long getConnectElapsedTimeMillis() { | 
 |         return mConnectElapsedTimeMillis; | 
 |     } | 
 |  | 
 |     public IVideoProvider getVideoProvider() { | 
 |         return mVideoProvider; | 
 |     } | 
 |  | 
 |     public int getVideoState() { | 
 |         return mVideoState; | 
 |     } | 
 |  | 
 |     public StatusHints getStatusHints() { | 
 |         return mStatusHints; | 
 |     } | 
 |  | 
 |     public Bundle getExtras() { | 
 |         return mExtras; | 
 |     } | 
 |  | 
 |     public Uri getHandle() { | 
 |         return mAddress; | 
 |     } | 
 |  | 
 |     public final DisconnectCause getDisconnectCause() { | 
 |         return mDisconnectCause; | 
 |     } | 
 |  | 
 |     public boolean isRingbackRequested() { | 
 |         return mRingbackRequested; | 
 |     } | 
 |  | 
 |     public int getHandlePresentation() { | 
 |         return mAddressPresentation; | 
 |     } | 
 |  | 
 |     public int getCallDirection() { | 
 |         return mCallDirection; | 
 |     } | 
 |  | 
 |     public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR = | 
 |             new Parcelable.Creator<ParcelableConference> () { | 
 |         @Override | 
 |         public ParcelableConference createFromParcel(Parcel source) { | 
 |             ClassLoader classLoader = ParcelableConference.class.getClassLoader(); | 
 |             PhoneAccountHandle phoneAccount = source.readParcelable(classLoader); | 
 |             int state = source.readInt(); | 
 |             int capabilities = source.readInt(); | 
 |             List<String> connectionIds = new ArrayList<>(2); | 
 |             source.readList(connectionIds, classLoader); | 
 |             long connectTimeMillis = source.readLong(); | 
 |             IVideoProvider videoCallProvider = | 
 |                     IVideoProvider.Stub.asInterface(source.readStrongBinder()); | 
 |             int videoState = source.readInt(); | 
 |             StatusHints statusHints = source.readParcelable(classLoader); | 
 |             Bundle extras = source.readBundle(classLoader); | 
 |             int properties = source.readInt(); | 
 |             long connectElapsedTimeMillis = source.readLong(); | 
 |             Uri address = source.readParcelable(classLoader); | 
 |             int addressPresentation = source.readInt(); | 
 |             String callerDisplayName = source.readString(); | 
 |             int callerDisplayNamePresentation = source.readInt(); | 
 |             DisconnectCause disconnectCause = source.readParcelable(classLoader); | 
 |             boolean isRingbackRequested = source.readInt() == 1; | 
 |             int callDirection = source.readInt(); | 
 |  | 
 |             return new ParcelableConference(phoneAccount, state, capabilities, properties, | 
 |                     connectionIds, videoCallProvider, videoState, connectTimeMillis, | 
 |                     connectElapsedTimeMillis, statusHints, extras, address, addressPresentation, | 
 |                     callerDisplayName, callerDisplayNamePresentation, disconnectCause, | 
 |                     isRingbackRequested, callDirection); | 
 |         } | 
 |  | 
 |         @Override | 
 |         public ParcelableConference[] newArray(int size) { | 
 |             return new ParcelableConference[size]; | 
 |         } | 
 |     }; | 
 |  | 
 |     /** {@inheritDoc} */ | 
 |     @Override | 
 |     public int describeContents() { | 
 |         return 0; | 
 |     } | 
 |  | 
 |     /** Writes ParcelableConference object into a Parcel. */ | 
 |     @Override | 
 |     public void writeToParcel(Parcel destination, int flags) { | 
 |         destination.writeParcelable(mPhoneAccount, 0); | 
 |         destination.writeInt(mState); | 
 |         destination.writeInt(mConnectionCapabilities); | 
 |         destination.writeList(mConnectionIds); | 
 |         destination.writeLong(mConnectTimeMillis); | 
 |         destination.writeStrongBinder( | 
 |                 mVideoProvider != null ? mVideoProvider.asBinder() : null); | 
 |         destination.writeInt(mVideoState); | 
 |         destination.writeParcelable(mStatusHints, 0); | 
 |         destination.writeBundle(mExtras); | 
 |         destination.writeInt(mConnectionProperties); | 
 |         destination.writeLong(mConnectElapsedTimeMillis); | 
 |         destination.writeParcelable(mAddress, 0); | 
 |         destination.writeInt(mAddressPresentation); | 
 |         destination.writeString(mCallerDisplayName); | 
 |         destination.writeInt(mCallerDisplayNamePresentation); | 
 |         destination.writeParcelable(mDisconnectCause, 0); | 
 |         destination.writeInt(mRingbackRequested ? 1 : 0); | 
 |         destination.writeInt(mCallDirection); | 
 |     } | 
 | } |