1 /* 2 * Copyright 2014, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.telecom; 18 19 import android.net.Uri; 20 import android.os.Bundle; 21 import android.os.Parcel; 22 import android.os.Parcelable; 23 24 import java.util.ArrayList; 25 import java.util.Collections; 26 import java.util.List; 27 28 import com.android.internal.telecom.IVideoProvider; 29 30 /** 31 * A parcelable representation of a conference connection. 32 * @hide 33 */ 34 public final class ParcelableConference implements Parcelable { 35 36 public static final class Builder { 37 private final PhoneAccountHandle mPhoneAccount; 38 private final int mState; 39 private int mConnectionCapabilities; 40 private int mConnectionProperties; 41 private List<String> mConnectionIds = Collections.emptyList(); 42 private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; 43 private IVideoProvider mVideoProvider; 44 private int mVideoState = VideoProfile.STATE_AUDIO_ONLY; 45 private StatusHints mStatusHints; 46 private Bundle mExtras; 47 private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; 48 private Uri mAddress; 49 private int mAddressPresentation = TelecomManager.PRESENTATION_UNKNOWN; 50 private String mCallerDisplayName; 51 private int mCallerDisplayNamePresentation = TelecomManager.PRESENTATION_UNKNOWN;; 52 private DisconnectCause mDisconnectCause; 53 private boolean mRingbackRequested; 54 private int mCallDirection = Call.Details.DIRECTION_UNKNOWN; 55 Builder( PhoneAccountHandle phoneAccount, int state)56 public Builder( 57 PhoneAccountHandle phoneAccount, 58 int state) { 59 mPhoneAccount = phoneAccount; 60 mState = state; 61 } 62 setDisconnectCause(DisconnectCause cause)63 public Builder setDisconnectCause(DisconnectCause cause) { 64 mDisconnectCause = cause; 65 return this; 66 } 67 setRingbackRequested(boolean requested)68 public Builder setRingbackRequested(boolean requested) { 69 mRingbackRequested = requested; 70 return this; 71 } 72 setCallerDisplayName(String callerDisplayName, @TelecomManager.Presentation int callerDisplayNamePresentation)73 public Builder setCallerDisplayName(String callerDisplayName, 74 @TelecomManager.Presentation int callerDisplayNamePresentation) { 75 mCallerDisplayName = callerDisplayName; 76 mCallerDisplayNamePresentation = callerDisplayNamePresentation; 77 return this; 78 } 79 setAddress(Uri address, @TelecomManager.Presentation int addressPresentation)80 public Builder setAddress(Uri address, 81 @TelecomManager.Presentation int addressPresentation) { 82 mAddress = address; 83 mAddressPresentation = addressPresentation; 84 return this; 85 } 86 setExtras(Bundle extras)87 public Builder setExtras(Bundle extras) { 88 mExtras = extras; 89 return this; 90 } 91 setStatusHints(StatusHints hints)92 public Builder setStatusHints(StatusHints hints) { 93 mStatusHints = hints; 94 return this; 95 } 96 setConnectTimeMillis(long connectTimeMillis, long connectElapsedTimeMillis)97 public Builder setConnectTimeMillis(long connectTimeMillis, long connectElapsedTimeMillis) { 98 mConnectTimeMillis = connectTimeMillis; 99 mConnectElapsedTimeMillis = connectElapsedTimeMillis; 100 return this; 101 } 102 setVideoAttributes(IVideoProvider provider, @VideoProfile.VideoState int videoState)103 public Builder setVideoAttributes(IVideoProvider provider, 104 @VideoProfile.VideoState int videoState) { 105 mVideoProvider = provider; 106 mVideoState = videoState; 107 return this; 108 } 109 setConnectionIds(List<String> connectionIds)110 public Builder setConnectionIds(List<String> connectionIds) { 111 mConnectionIds = connectionIds; 112 return this; 113 } 114 setConnectionProperties(int properties)115 public Builder setConnectionProperties(int properties) { 116 mConnectionProperties = properties; 117 return this; 118 } 119 setConnectionCapabilities(int capabilities)120 public Builder setConnectionCapabilities(int capabilities) { 121 mConnectionCapabilities = capabilities; 122 return this; 123 } 124 setCallDirection(int callDirection)125 public Builder setCallDirection(int callDirection) { 126 mCallDirection = callDirection; 127 return this; 128 } 129 build()130 public ParcelableConference build() { 131 return new ParcelableConference(mPhoneAccount, mState, mConnectionCapabilities, 132 mConnectionProperties, mConnectionIds, mVideoProvider, mVideoState, 133 mConnectTimeMillis, mConnectElapsedTimeMillis, mStatusHints, mExtras, mAddress, 134 mAddressPresentation, mCallerDisplayName, mCallerDisplayNamePresentation, 135 mDisconnectCause, mRingbackRequested, mCallDirection); 136 } 137 } 138 139 140 private final PhoneAccountHandle mPhoneAccount; 141 private final int mState; 142 private final int mConnectionCapabilities; 143 private final int mConnectionProperties; 144 private final List<String> mConnectionIds; 145 private final long mConnectTimeMillis; 146 private final IVideoProvider mVideoProvider; 147 private final int mVideoState; 148 private final StatusHints mStatusHints; 149 private final Bundle mExtras; 150 private final long mConnectElapsedTimeMillis; 151 private final Uri mAddress; 152 private final int mAddressPresentation; 153 private final String mCallerDisplayName; 154 private final int mCallerDisplayNamePresentation; 155 private final DisconnectCause mDisconnectCause; 156 private final boolean mRingbackRequested; 157 private final int mCallDirection; 158 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)159 private ParcelableConference( 160 PhoneAccountHandle phoneAccount, 161 int state, 162 int connectionCapabilities, 163 int connectionProperties, 164 List<String> connectionIds, 165 IVideoProvider videoProvider, 166 int videoState, 167 long connectTimeMillis, 168 long connectElapsedTimeMillis, 169 StatusHints statusHints, 170 Bundle extras, 171 Uri address, 172 int addressPresentation, 173 String callerDisplayName, 174 int callerDisplayNamePresentation, 175 DisconnectCause disconnectCause, 176 boolean ringbackRequested, 177 int callDirection) { 178 mPhoneAccount = phoneAccount; 179 mState = state; 180 mConnectionCapabilities = connectionCapabilities; 181 mConnectionProperties = connectionProperties; 182 mConnectionIds = connectionIds; 183 mVideoProvider = videoProvider; 184 mVideoState = videoState; 185 mConnectTimeMillis = connectTimeMillis; 186 mStatusHints = statusHints; 187 mExtras = extras; 188 mConnectElapsedTimeMillis = connectElapsedTimeMillis; 189 mAddress = address; 190 mAddressPresentation = addressPresentation; 191 mCallerDisplayName = callerDisplayName; 192 mCallerDisplayNamePresentation = callerDisplayNamePresentation; 193 mDisconnectCause = disconnectCause; 194 mRingbackRequested = ringbackRequested; 195 mCallDirection = callDirection; 196 } 197 198 @Override toString()199 public String toString() { 200 return (new StringBuffer()) 201 .append("account: ") 202 .append(mPhoneAccount) 203 .append(", state: ") 204 .append(Connection.stateToString(mState)) 205 .append(", capabilities: ") 206 .append(Connection.capabilitiesToString(mConnectionCapabilities)) 207 .append(", properties: ") 208 .append(Connection.propertiesToString(mConnectionProperties)) 209 .append(", connectTime: ") 210 .append(mConnectTimeMillis) 211 .append(", children: ") 212 .append(mConnectionIds) 213 .append(", VideoState: ") 214 .append(mVideoState) 215 .append(", VideoProvider: ") 216 .append(mVideoProvider) 217 .append(", isRingbackRequested: ") 218 .append(mRingbackRequested) 219 .append(", disconnectCause: ") 220 .append(mDisconnectCause) 221 .append(", callDirection: ") 222 .append(mCallDirection) 223 .toString(); 224 } 225 getPhoneAccount()226 public PhoneAccountHandle getPhoneAccount() { 227 return mPhoneAccount; 228 } 229 getState()230 public int getState() { 231 return mState; 232 } 233 getConnectionCapabilities()234 public int getConnectionCapabilities() { 235 return mConnectionCapabilities; 236 } 237 getConnectionProperties()238 public int getConnectionProperties() { 239 return mConnectionProperties; 240 } 241 getConnectionIds()242 public List<String> getConnectionIds() { 243 return mConnectionIds; 244 } 245 getConnectTimeMillis()246 public long getConnectTimeMillis() { 247 return mConnectTimeMillis; 248 } 249 getConnectElapsedTimeMillis()250 public long getConnectElapsedTimeMillis() { 251 return mConnectElapsedTimeMillis; 252 } 253 getVideoProvider()254 public IVideoProvider getVideoProvider() { 255 return mVideoProvider; 256 } 257 getVideoState()258 public int getVideoState() { 259 return mVideoState; 260 } 261 getStatusHints()262 public StatusHints getStatusHints() { 263 return mStatusHints; 264 } 265 getExtras()266 public Bundle getExtras() { 267 return mExtras; 268 } 269 getHandle()270 public Uri getHandle() { 271 return mAddress; 272 } 273 getDisconnectCause()274 public final DisconnectCause getDisconnectCause() { 275 return mDisconnectCause; 276 } 277 isRingbackRequested()278 public boolean isRingbackRequested() { 279 return mRingbackRequested; 280 } 281 getHandlePresentation()282 public int getHandlePresentation() { 283 return mAddressPresentation; 284 } 285 getCallDirection()286 public int getCallDirection() { 287 return mCallDirection; 288 } 289 290 public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR = 291 new Parcelable.Creator<ParcelableConference> () { 292 @Override 293 public ParcelableConference createFromParcel(Parcel source) { 294 ClassLoader classLoader = ParcelableConference.class.getClassLoader(); 295 PhoneAccountHandle phoneAccount = source.readParcelable(classLoader); 296 int state = source.readInt(); 297 int capabilities = source.readInt(); 298 List<String> connectionIds = new ArrayList<>(2); 299 source.readList(connectionIds, classLoader); 300 long connectTimeMillis = source.readLong(); 301 IVideoProvider videoCallProvider = 302 IVideoProvider.Stub.asInterface(source.readStrongBinder()); 303 int videoState = source.readInt(); 304 StatusHints statusHints = source.readParcelable(classLoader); 305 Bundle extras = source.readBundle(classLoader); 306 int properties = source.readInt(); 307 long connectElapsedTimeMillis = source.readLong(); 308 Uri address = source.readParcelable(classLoader); 309 int addressPresentation = source.readInt(); 310 String callerDisplayName = source.readString(); 311 int callerDisplayNamePresentation = source.readInt(); 312 DisconnectCause disconnectCause = source.readParcelable(classLoader); 313 boolean isRingbackRequested = source.readInt() == 1; 314 int callDirection = source.readInt(); 315 316 return new ParcelableConference(phoneAccount, state, capabilities, properties, 317 connectionIds, videoCallProvider, videoState, connectTimeMillis, 318 connectElapsedTimeMillis, statusHints, extras, address, addressPresentation, 319 callerDisplayName, callerDisplayNamePresentation, disconnectCause, 320 isRingbackRequested, callDirection); 321 } 322 323 @Override 324 public ParcelableConference[] newArray(int size) { 325 return new ParcelableConference[size]; 326 } 327 }; 328 329 /** {@inheritDoc} */ 330 @Override describeContents()331 public int describeContents() { 332 return 0; 333 } 334 335 /** Writes ParcelableConference object into a Parcel. */ 336 @Override writeToParcel(Parcel destination, int flags)337 public void writeToParcel(Parcel destination, int flags) { 338 destination.writeParcelable(mPhoneAccount, 0); 339 destination.writeInt(mState); 340 destination.writeInt(mConnectionCapabilities); 341 destination.writeList(mConnectionIds); 342 destination.writeLong(mConnectTimeMillis); 343 destination.writeStrongBinder( 344 mVideoProvider != null ? mVideoProvider.asBinder() : null); 345 destination.writeInt(mVideoState); 346 destination.writeParcelable(mStatusHints, 0); 347 destination.writeBundle(mExtras); 348 destination.writeInt(mConnectionProperties); 349 destination.writeLong(mConnectElapsedTimeMillis); 350 destination.writeParcelable(mAddress, 0); 351 destination.writeInt(mAddressPresentation); 352 destination.writeString(mCallerDisplayName); 353 destination.writeInt(mCallerDisplayNamePresentation); 354 destination.writeParcelable(mDisconnectCause, 0); 355 destination.writeInt(mRingbackRequested ? 1 : 0); 356 destination.writeInt(mCallDirection); 357 } 358 } 359