1542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad/* 2542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * Copyright (C) 2014 The Android Open Source Project 3542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * 4542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * Licensed under the Apache License, Version 2.0 (the "License"); 5542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * you may not use this file except in compliance with the License. 6542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * You may obtain a copy of the License at 7542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * 8542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * http://www.apache.org/licenses/LICENSE-2.0 9542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * 10542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * Unless required by applicable law or agreed to in writing, software 11542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * distributed under the License is distributed on an "AS IS" BASIS, 12542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * See the License for the specific language governing permissions and 14542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * limitations under the License. 15542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad */ 16542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 17ef9f6f957d897ea0ed82114185b8fa3fefd4917bTyler Gunnpackage android.telecom; 18542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 19542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awadimport android.net.Uri; 20612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepalimport android.os.Bundle; 21fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awadimport android.os.Parcel; 22fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awadimport android.os.Parcelable; 23542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 24542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad/** 25542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * Simple data container encapsulating a request to some entity to 26542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * create a new {@link Connection}. 27542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad */ 28fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awadpublic final class ConnectionRequest implements Parcelable { 29542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 30542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad // TODO: Token to limit recursive invocations 318c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton private final PhoneAccountHandle mAccountHandle; 32ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen private final Uri mAddress; 33542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad private final Bundle mExtras; 3412013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn private final int mVideoState; 35f0500bd63571c667df7865d7484c89f671382711Tyler Gunn private final String mTelecomCallId; 36542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 37612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** 388c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton * @param accountHandle The accountHandle which should be used to place the call. 39612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect. 40612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @param extras Application-specific extra data. 41be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn */ 42be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn public ConnectionRequest( 43be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn PhoneAccountHandle accountHandle, 44be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn Uri handle, 45be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn Bundle extras) { 46f0500bd63571c667df7865d7484c89f671382711Tyler Gunn this(accountHandle, handle, extras, VideoProfile.STATE_AUDIO_ONLY, null); 47be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn } 48be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn 49be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn /** 50be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @param accountHandle The accountHandle which should be used to place the call. 51be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect. 52be74de0978a7eaa577f6b61902b550a3161aff8bTyler Gunn * @param extras Application-specific extra data. 53612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal * @param videoState Determines the video state for the connection. 54612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal */ 55612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal public ConnectionRequest( 568c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton PhoneAccountHandle accountHandle, 57612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal Uri handle, 58612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal Bundle extras, 5912013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn int videoState) { 60f0500bd63571c667df7865d7484c89f671382711Tyler Gunn this(accountHandle, handle, extras, videoState, null); 61f0500bd63571c667df7865d7484c89f671382711Tyler Gunn } 62f0500bd63571c667df7865d7484c89f671382711Tyler Gunn 63f0500bd63571c667df7865d7484c89f671382711Tyler Gunn /** 64f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @param accountHandle The accountHandle which should be used to place the call. 65f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @param handle The handle (e.g., phone number) to which the {@link Connection} is to connect. 66f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @param extras Application-specific extra data. 67f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @param videoState Determines the video state for the connection. 68f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @param telecomCallId The telecom call ID. 69f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @hide 70f0500bd63571c667df7865d7484c89f671382711Tyler Gunn */ 71f0500bd63571c667df7865d7484c89f671382711Tyler Gunn public ConnectionRequest( 72f0500bd63571c667df7865d7484c89f671382711Tyler Gunn PhoneAccountHandle accountHandle, 73f0500bd63571c667df7865d7484c89f671382711Tyler Gunn Uri handle, 74f0500bd63571c667df7865d7484c89f671382711Tyler Gunn Bundle extras, 75f0500bd63571c667df7865d7484c89f671382711Tyler Gunn int videoState, 76f0500bd63571c667df7865d7484c89f671382711Tyler Gunn String telecomCallId) { 778c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton mAccountHandle = accountHandle; 78ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen mAddress = handle; 79fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad mExtras = extras; 8012013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn mVideoState = videoState; 81f0500bd63571c667df7865d7484c89f671382711Tyler Gunn mTelecomCallId = telecomCallId; 82fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad } 83fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad 84c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal private ConnectionRequest(Parcel in) { 858c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton mAccountHandle = in.readParcelable(getClass().getClassLoader()); 86ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen mAddress = in.readParcelable(getClass().getClassLoader()); 87c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal mExtras = in.readParcelable(getClass().getClassLoader()); 88c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal mVideoState = in.readInt(); 89f0500bd63571c667df7865d7484c89f671382711Tyler Gunn mTelecomCallId = in.readString(); 90c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal } 91c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal 92fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad /** 939c3f18846aaa9340cc222f825c9c32ec42f9d0c9Ihab Awad * The account which should be used to place the call. 9452d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon */ 958c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton public PhoneAccountHandle getAccountHandle() { return mAccountHandle; } 9652d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon 9752d8a15e146e682319380322f94ceb6d93fa1a97Santos Cordon /** 98542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * The handle (e.g., phone number) to which the {@link Connection} is to connect. 99542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad */ 100ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen public Uri getAddress() { return mAddress; } 101612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal 102612038642fa9cf1545dbcc8274d313192ce928b5Sailesh Nepal /** 103542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * Application-specific extra data. Used for passing back information from an incoming 104542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * call {@code Intent}, and for any proprietary extensions arranged between a client 105542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad * and servant {@code ConnectionService} which agree on a vocabulary for such data. 106542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad */ 107542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad public Bundle getExtras() { return mExtras; } 108542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad 10912013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn /** 110b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad * Describes the video states supported by the client requesting the connection. 11132f24731604fd81289a39619bbc925b65184b505Yorke Lee * Valid values: {@link VideoProfile#STATE_AUDIO_ONLY}, 11232f24731604fd81289a39619bbc925b65184b505Yorke Lee * {@link VideoProfile#STATE_BIDIRECTIONAL}, 11332f24731604fd81289a39619bbc925b65184b505Yorke Lee * {@link VideoProfile#STATE_TX_ENABLED}, 11432f24731604fd81289a39619bbc925b65184b505Yorke Lee * {@link VideoProfile#STATE_RX_ENABLED}. 11512013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn * 11612013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn * @return The video state for the connection. 11712013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn */ 11812013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn public int getVideoState() { 11912013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn return mVideoState; 12012013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn } 12112013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn 122f0500bd63571c667df7865d7484c89f671382711Tyler Gunn /** 123f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * Returns the internal Telecom ID associated with the connection request. 124f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * 125f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @return The Telecom ID. 126f0500bd63571c667df7865d7484c89f671382711Tyler Gunn * @hide 127f0500bd63571c667df7865d7484c89f671382711Tyler Gunn */ 128f0500bd63571c667df7865d7484c89f671382711Tyler Gunn public String getTelecomCallId() { 129f0500bd63571c667df7865d7484c89f671382711Tyler Gunn return mTelecomCallId; 130f0500bd63571c667df7865d7484c89f671382711Tyler Gunn } 131f0500bd63571c667df7865d7484c89f671382711Tyler Gunn 132bf11f98deb09ef54ff4161fba75d22b1a0a458eeEvan Charlton @Override 133542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad public String toString() { 134b19a0bcdd8a5020c61a0d697f600fdc943c86f59Ihab Awad return String.format("ConnectionRequest %s %s", 135ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen mAddress == null 136542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad ? Uri.EMPTY 137ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen : Connection.toLogSafePhoneNumber(mAddress.toString()), 138542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad mExtras == null ? "" : mExtras); 139542e0ea8bfa60f09c33e4be366adf8681c25d0bfIhab Awad } 140fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad 141c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal public static final Creator<ConnectionRequest> CREATOR = new Creator<ConnectionRequest> () { 142c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal @Override 143c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal public ConnectionRequest createFromParcel(Parcel source) { 144c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal return new ConnectionRequest(source); 145c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal } 146c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal 147c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal @Override 148c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal public ConnectionRequest[] newArray(int size) { 149c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal return new ConnectionRequest[size]; 150c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal } 151c5b01573a0918db20af1a827d1bbec9d2e57d069Sailesh Nepal }; 152fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad 153fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad /** 154fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad * {@inheritDoc} 155fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad */ 156fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad @Override 157fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad public int describeContents() { 158fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad return 0; 159fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad } 160fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad 161fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad @Override 162fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad public void writeToParcel(Parcel destination, int flags) { 1638c8a062f521d39ceecc99e8fc6cef9c60b773da5Evan Charlton destination.writeParcelable(mAccountHandle, 0); 164ea38cca14964a5ee658899b0bafbc48017d556cdNancy Chen destination.writeParcelable(mAddress, 0); 165fbb092f26e796fe638fb8bb4a91de2d4525bcaccIhab Awad destination.writeParcelable(mExtras, 0); 16612013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn destination.writeInt(mVideoState); 167f0500bd63571c667df7865d7484c89f671382711Tyler Gunn destination.writeString(mTelecomCallId); 16812013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn } 16912013ad193135a07b9b8e8656391acff5f971a90Tyler Gunn} 170