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