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.List; 26 27 import com.android.internal.telecom.IVideoProvider; 28 29 /** 30 * A parcelable representation of a conference connection. 31 * @hide 32 */ 33 public final class ParcelableConference implements Parcelable { 34 35 private PhoneAccountHandle mPhoneAccount; 36 private int mState; 37 private int mConnectionCapabilities; 38 private int mConnectionProperties; 39 private List<String> mConnectionIds; 40 private long mConnectTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; 41 private final IVideoProvider mVideoProvider; 42 private final int mVideoState; 43 private StatusHints mStatusHints; 44 private Bundle mExtras; 45 private long mConnectElapsedTimeMillis = Conference.CONNECT_TIME_NOT_SPECIFIED; 46 private final Uri mAddress; 47 private final int mAddressPresentation; 48 private final String mCallerDisplayName; 49 private final int mCallerDisplayNamePresentation; 50 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)51 public ParcelableConference( 52 PhoneAccountHandle phoneAccount, 53 int state, 54 int connectionCapabilities, 55 int connectionProperties, 56 List<String> connectionIds, 57 IVideoProvider videoProvider, 58 int videoState, 59 long connectTimeMillis, 60 long connectElapsedTimeMillis, 61 StatusHints statusHints, 62 Bundle extras, 63 Uri address, 64 int addressPresentation, 65 String callerDisplayName, 66 int callerDisplayNamePresentation) { 67 mPhoneAccount = phoneAccount; 68 mState = state; 69 mConnectionCapabilities = connectionCapabilities; 70 mConnectionProperties = connectionProperties; 71 mConnectionIds = connectionIds; 72 mVideoProvider = videoProvider; 73 mVideoState = videoState; 74 mConnectTimeMillis = connectTimeMillis; 75 mStatusHints = statusHints; 76 mExtras = extras; 77 mConnectElapsedTimeMillis = connectElapsedTimeMillis; 78 mAddress = address; 79 mAddressPresentation = addressPresentation; 80 mCallerDisplayName = callerDisplayName; 81 mCallerDisplayNamePresentation = callerDisplayNamePresentation; 82 } 83 84 @Override toString()85 public String toString() { 86 return (new StringBuffer()) 87 .append("account: ") 88 .append(mPhoneAccount) 89 .append(", state: ") 90 .append(Connection.stateToString(mState)) 91 .append(", capabilities: ") 92 .append(Connection.capabilitiesToString(mConnectionCapabilities)) 93 .append(", properties: ") 94 .append(Connection.propertiesToString(mConnectionProperties)) 95 .append(", connectTime: ") 96 .append(mConnectTimeMillis) 97 .append(", children: ") 98 .append(mConnectionIds) 99 .append(", VideoState: ") 100 .append(mVideoState) 101 .append(", VideoProvider: ") 102 .append(mVideoProvider) 103 .toString(); 104 } 105 getPhoneAccount()106 public PhoneAccountHandle getPhoneAccount() { 107 return mPhoneAccount; 108 } 109 getState()110 public int getState() { 111 return mState; 112 } 113 getConnectionCapabilities()114 public int getConnectionCapabilities() { 115 return mConnectionCapabilities; 116 } 117 getConnectionProperties()118 public int getConnectionProperties() { 119 return mConnectionProperties; 120 } 121 getConnectionIds()122 public List<String> getConnectionIds() { 123 return mConnectionIds; 124 } 125 getConnectTimeMillis()126 public long getConnectTimeMillis() { 127 return mConnectTimeMillis; 128 } 129 getConnectElapsedTimeMillis()130 public long getConnectElapsedTimeMillis() { 131 return mConnectElapsedTimeMillis; 132 } 133 getVideoProvider()134 public IVideoProvider getVideoProvider() { 135 return mVideoProvider; 136 } 137 getVideoState()138 public int getVideoState() { 139 return mVideoState; 140 } 141 getStatusHints()142 public StatusHints getStatusHints() { 143 return mStatusHints; 144 } 145 getExtras()146 public Bundle getExtras() { 147 return mExtras; 148 } 149 getHandle()150 public Uri getHandle() { 151 return mAddress; 152 } 153 getHandlePresentation()154 public int getHandlePresentation() { 155 return mAddressPresentation; 156 } 157 158 public static final @android.annotation.NonNull Parcelable.Creator<ParcelableConference> CREATOR = 159 new Parcelable.Creator<ParcelableConference> () { 160 @Override 161 public ParcelableConference createFromParcel(Parcel source) { 162 ClassLoader classLoader = ParcelableConference.class.getClassLoader(); 163 PhoneAccountHandle phoneAccount = source.readParcelable(classLoader); 164 int state = source.readInt(); 165 int capabilities = source.readInt(); 166 List<String> connectionIds = new ArrayList<>(2); 167 source.readList(connectionIds, classLoader); 168 long connectTimeMillis = source.readLong(); 169 IVideoProvider videoCallProvider = 170 IVideoProvider.Stub.asInterface(source.readStrongBinder()); 171 int videoState = source.readInt(); 172 StatusHints statusHints = source.readParcelable(classLoader); 173 Bundle extras = source.readBundle(classLoader); 174 int properties = source.readInt(); 175 long connectElapsedTimeMillis = source.readLong(); 176 Uri address = source.readParcelable(classLoader); 177 int addressPresentation = source.readInt(); 178 String callerDisplayName = source.readString(); 179 int callerDisplayNamePresentation = source.readInt(); 180 181 return new ParcelableConference(phoneAccount, state, capabilities, properties, 182 connectionIds, videoCallProvider, videoState, connectTimeMillis, 183 connectElapsedTimeMillis, statusHints, extras, address, addressPresentation, 184 callerDisplayName, callerDisplayNamePresentation); 185 } 186 187 @Override 188 public ParcelableConference[] newArray(int size) { 189 return new ParcelableConference[size]; 190 } 191 }; 192 193 /** {@inheritDoc} */ 194 @Override describeContents()195 public int describeContents() { 196 return 0; 197 } 198 199 /** Writes ParcelableConference object into a Parcel. */ 200 @Override writeToParcel(Parcel destination, int flags)201 public void writeToParcel(Parcel destination, int flags) { 202 destination.writeParcelable(mPhoneAccount, 0); 203 destination.writeInt(mState); 204 destination.writeInt(mConnectionCapabilities); 205 destination.writeList(mConnectionIds); 206 destination.writeLong(mConnectTimeMillis); 207 destination.writeStrongBinder( 208 mVideoProvider != null ? mVideoProvider.asBinder() : null); 209 destination.writeInt(mVideoState); 210 destination.writeParcelable(mStatusHints, 0); 211 destination.writeBundle(mExtras); 212 destination.writeInt(mConnectionProperties); 213 destination.writeLong(mConnectElapsedTimeMillis); 214 destination.writeParcelable(mAddress, 0); 215 destination.writeInt(mAddressPresentation); 216 destination.writeString(mCallerDisplayName); 217 destination.writeInt(mCallerDisplayNamePresentation); 218 } 219 } 220