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
17package android.telecom;
18
19import android.net.Uri;
20import android.os.Parcel;
21import android.os.Parcelable;
22
23/**
24 * Parcelable representation of a participant's state in a conference call.
25 * @hide
26 */
27public class ConferenceParticipant implements Parcelable {
28
29    /**
30     * The conference participant's handle (e.g., phone number).
31     */
32    private final Uri mHandle;
33
34    /**
35     * The display name for the participant.
36     */
37    private final String mDisplayName;
38
39    /**
40     * The endpoint Uri which uniquely identifies this conference participant.  E.g. for an IMS
41     * conference call, this is the endpoint URI for the participant on the IMS conference server.
42     */
43    private final Uri mEndpoint;
44
45    /**
46     * The state of the participant in the conference.
47     *
48     * @see android.telecom.Connection
49     */
50    private final int mState;
51
52    /**
53     * Creates an instance of {@code ConferenceParticipant}.
54     *
55     * @param handle      The conference participant's handle (e.g., phone number).
56     * @param displayName The display name for the participant.
57     * @param endpoint    The enpoint Uri which uniquely identifies this conference participant.
58     * @param state       The state of the participant in the conference.
59     */
60    public ConferenceParticipant(Uri handle, String displayName, Uri endpoint, int state) {
61        mHandle = handle;
62        mDisplayName = displayName;
63        mEndpoint = endpoint;
64        mState = state;
65    }
66
67    /**
68     * Responsible for creating {@code ConferenceParticipant} objects for deserialized Parcels.
69     */
70    public static final Parcelable.Creator<ConferenceParticipant> CREATOR =
71            new Parcelable.Creator<ConferenceParticipant>() {
72
73                @Override
74                public ConferenceParticipant createFromParcel(Parcel source) {
75                    ClassLoader classLoader = ParcelableCall.class.getClassLoader();
76                    Uri handle = source.readParcelable(classLoader);
77                    String displayName = source.readString();
78                    Uri endpoint = source.readParcelable(classLoader);
79                    int state = source.readInt();
80                    return new ConferenceParticipant(handle, displayName, endpoint, state);
81                }
82
83                @Override
84                public ConferenceParticipant[] newArray(int size) {
85                    return new ConferenceParticipant[size];
86                }
87            };
88
89    @Override
90    public int describeContents() {
91        return 0;
92    }
93
94    /**
95     * Writes the {@code ConferenceParticipant} to a parcel.
96     *
97     * @param dest The Parcel in which the object should be written.
98     * @param flags Additional flags about how the object should be written.
99     */
100    @Override
101    public void writeToParcel(Parcel dest, int flags) {
102        dest.writeParcelable(mHandle, 0);
103        dest.writeString(mDisplayName);
104        dest.writeParcelable(mEndpoint, 0);
105        dest.writeInt(mState);
106    }
107
108    /**
109     * Builds a string representation of this instance.
110     *
111     * @return String representing the conference participant.
112     */
113    @Override
114    public String toString() {
115        StringBuilder sb = new StringBuilder();
116        sb.append("[ConferenceParticipant Handle: ");
117        sb.append(mHandle);
118        sb.append(" DisplayName: ");
119        sb.append(mDisplayName);
120        sb.append(" Endpoint: ");
121        sb.append(mEndpoint);
122        sb.append(" State: ");
123        sb.append(mState);
124        sb.append("]");
125        return sb.toString();
126    }
127
128    /**
129     * The conference participant's handle (e.g., phone number).
130     */
131    public Uri getHandle() {
132        return mHandle;
133    }
134
135    /**
136     * The display name for the participant.
137     */
138    public String getDisplayName() {
139        return mDisplayName;
140    }
141
142    /**
143     * The enpoint Uri which uniquely identifies this conference participant.  E.g. for an IMS
144     * conference call, this is the endpoint URI for the participant on the IMS conference server.
145     */
146    public Uri getEndpoint() {
147        return mEndpoint;
148    }
149
150    /**
151     * The state of the participant in the conference.
152     *
153     * @see android.telecom.Connection
154     */
155    public int getState() {
156        return mState;
157    }
158}
159