1 /* 2 * Copyright (C) 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.annotation.SystemApi; 20 import android.net.Uri; 21 import android.os.Bundle; 22 import android.os.Parcel; 23 import android.os.Parcelable; 24 25 /** 26 * Simple data container encapsulating a request to some entity to 27 * create a new {@link Connection}. 28 * @hide 29 */ 30 @SystemApi 31 public final class ConnectionRequest implements Parcelable { 32 33 // TODO: Token to limit recursive invocations 34 private final PhoneAccountHandle mAccountHandle; 35 private final Uri mAddress; 36 private final Bundle mExtras; 37 private final int mVideoState; 38 39 /** 40 * @param accountHandle The accountHandle which should be used to place the call. 41 * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect. 42 * @param extras Application-specific extra data. 43 */ ConnectionRequest( PhoneAccountHandle accountHandle, Uri handle, Bundle extras)44 public ConnectionRequest( 45 PhoneAccountHandle accountHandle, 46 Uri handle, 47 Bundle extras) { 48 this(accountHandle, handle, extras, VideoProfile.VideoState.AUDIO_ONLY); 49 } 50 51 /** 52 * @param accountHandle The accountHandle which should be used to place the call. 53 * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect. 54 * @param extras Application-specific extra data. 55 * @param videoState Determines the video state for the connection. 56 * @hide 57 */ ConnectionRequest( PhoneAccountHandle accountHandle, Uri handle, Bundle extras, int videoState)58 public ConnectionRequest( 59 PhoneAccountHandle accountHandle, 60 Uri handle, 61 Bundle extras, 62 int videoState) { 63 mAccountHandle = accountHandle; 64 mAddress = handle; 65 mExtras = extras; 66 mVideoState = videoState; 67 } 68 ConnectionRequest(Parcel in)69 private ConnectionRequest(Parcel in) { 70 mAccountHandle = in.readParcelable(getClass().getClassLoader()); 71 mAddress = in.readParcelable(getClass().getClassLoader()); 72 mExtras = in.readParcelable(getClass().getClassLoader()); 73 mVideoState = in.readInt(); 74 } 75 76 /** 77 * The account which should be used to place the call. 78 */ getAccountHandle()79 public PhoneAccountHandle getAccountHandle() { return mAccountHandle; } 80 81 /** 82 * The handle (e.g., phone number) to which the {@link Connection} is to connect. 83 */ getAddress()84 public Uri getAddress() { return mAddress; } 85 86 /** 87 * Application-specific extra data. Used for passing back information from an incoming 88 * call {@code Intent}, and for any proprietary extensions arranged between a client 89 * and servant {@code ConnectionService} which agree on a vocabulary for such data. 90 */ getExtras()91 public Bundle getExtras() { return mExtras; } 92 93 /** 94 * Describes the video states supported by the client requesting the connection. 95 * Valid values: {@link VideoProfile.VideoState#AUDIO_ONLY}, 96 * {@link VideoProfile.VideoState#BIDIRECTIONAL}, 97 * {@link VideoProfile.VideoState#TX_ENABLED}, 98 * {@link VideoProfile.VideoState#RX_ENABLED}. 99 * 100 * @return The video state for the connection. 101 * @hide 102 */ getVideoState()103 public int getVideoState() { 104 return mVideoState; 105 } 106 107 @Override toString()108 public String toString() { 109 return String.format("ConnectionRequest %s %s", 110 mAddress == null 111 ? Uri.EMPTY 112 : Connection.toLogSafePhoneNumber(mAddress.toString()), 113 mExtras == null ? "" : mExtras); 114 } 115 116 public static final Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () { 117 @Override 118 public ConnectionRequest createFromParcel(Parcel source) { 119 return new ConnectionRequest(source); 120 } 121 122 @Override 123 public ConnectionRequest[] newArray(int size) { 124 return new ConnectionRequest[size]; 125 } 126 }; 127 128 /** 129 * {@inheritDoc} 130 */ 131 @Override describeContents()132 public int describeContents() { 133 return 0; 134 } 135 136 @Override writeToParcel(Parcel destination, int flags)137 public void writeToParcel(Parcel destination, int flags) { 138 destination.writeParcelable(mAccountHandle, 0); 139 destination.writeParcelable(mAddress, 0); 140 destination.writeParcelable(mExtras, 0); 141 destination.writeInt(mVideoState); 142 } 143 } 144