blob: 9ff5570bd3b1028b2147be28f202292d8faf8d5f [file] [log] [blame]
Alexandre Lision064e1e02013-10-01 16:18:42 -04001package org.sflphone.model;
alision907bde72013-06-20 14:40:37 -04002
3import java.util.ArrayList;
4
alision806e18e2013-06-21 15:30:17 -04005import android.os.Parcel;
6import android.os.Parcelable;
7
8public class Conference implements Parcelable {
9
10 private String id;
alisiondf1dac92013-06-27 17:35:53 -040011 private String state = "";
alision907bde72013-06-20 14:40:37 -040012 private ArrayList<SipCall> participants;
alisiondf1dac92013-06-27 17:35:53 -040013 private boolean recording;
Alexandre Lisiond5686032013-10-29 11:09:21 -040014 private ArrayList<SipMessage> messages;
alision806e18e2013-06-21 15:30:17 -040015
16 public interface state {
17 int ACTIVE_ATTACHED = 0;
18 int ACTIVE_DETACHED = 1;
19 int ACTIVE_ATTACHED_REC = 2;
20 int ACTIVE_DETACHED_REC = 3;
21 int HOLD = 4;
22 int HOLD_REC = 5;
23 }
24
25 @Override
26 public int describeContents() {
27 return 0;
28 }
29
30 @Override
31 public void writeToParcel(Parcel out, int flags) {
alision806e18e2013-06-21 15:30:17 -040032 out.writeString(id);
33 out.writeString(state);
34 out.writeTypedList(participants);
Alexandre Lisiond5686032013-10-29 11:09:21 -040035 out.writeByte((byte) (recording ? 1 : 0));
36 out.writeTypedList(messages);
alision806e18e2013-06-21 15:30:17 -040037 }
38
39 public static final Parcelable.Creator<Conference> CREATOR = new Parcelable.Creator<Conference>() {
40 public Conference createFromParcel(Parcel in) {
41 return new Conference(in);
42 }
43
44 public Conference[] newArray(int size) {
45 return new Conference[size];
46 }
47 };
48
49 private Conference(Parcel in) {
alision806e18e2013-06-21 15:30:17 -040050 participants = new ArrayList<SipCall>();
51 id = in.readString();
52 state = in.readString();
53 in.readTypedList(participants, SipCall.CREATOR);
Alexandre Lisiond5686032013-10-29 11:09:21 -040054 recording = in.readByte() == 1 ? true : false;
55 messages = new ArrayList<SipMessage>();
56 in.readTypedList(messages, SipMessage.CREATOR);
alision806e18e2013-06-21 15:30:17 -040057 }
58
59 public Conference(String cID) {
60 id = cID;
61 participants = new ArrayList<SipCall>();
Alexandre Lisiond5545232013-10-29 11:24:02 -040062 recording = false;
63 messages = new ArrayList<SipMessage>();
alision806e18e2013-06-21 15:30:17 -040064 }
65
alisioncd8fb912013-06-28 14:43:51 -040066 public Conference(Conference c) {
67 id = c.id;
68 state = c.state;
69 participants = new ArrayList<SipCall>(c.participants);
70 recording = c.recording;
Alexandre Lisiond5545232013-10-29 11:24:02 -040071 messages = new ArrayList<SipMessage>();
alisioncd8fb912013-06-28 14:43:51 -040072 }
73
alision806e18e2013-06-21 15:30:17 -040074 public String getId() {
Alexandre Lisiond5686032013-10-29 11:09:21 -040075 if(hasMultipleParticipants())
76 return id;
77 else
78 return participants.get(0).getCallId();
alision907bde72013-06-20 14:40:37 -040079 }
alision806e18e2013-06-21 15:30:17 -040080
alision907bde72013-06-20 14:40:37 -040081 public String getState() {
alisioncd8fb912013-06-28 14:43:51 -040082 if (participants.size() == 1) {
alisiondf1dac92013-06-27 17:35:53 -040083 return participants.get(0).getCallStateString();
84 }
alision907bde72013-06-20 14:40:37 -040085 return state;
86 }
alision806e18e2013-06-21 15:30:17 -040087
alision907bde72013-06-20 14:40:37 -040088 public void setState(String state) {
89 this.state = state;
90 }
alision806e18e2013-06-21 15:30:17 -040091
alision907bde72013-06-20 14:40:37 -040092 public ArrayList<SipCall> getParticipants() {
93 return participants;
94 }
alision806e18e2013-06-21 15:30:17 -040095
96 public boolean contains(String callID) {
alisioncd8fb912013-06-28 14:43:51 -040097 for (int i = 0; i < participants.size(); ++i) {
98 if (participants.get(i).getCallId().contentEquals(callID))
alision806e18e2013-06-21 15:30:17 -040099 return true;
100 }
101 return false;
102 }
103
104 public SipCall getCall(String callID) {
alisioncd8fb912013-06-28 14:43:51 -0400105 for (int i = 0; i < participants.size(); ++i) {
106 if (participants.get(i).getCallId().contentEquals(callID))
alision806e18e2013-06-21 15:30:17 -0400107 return participants.get(i);
108 }
109 return null;
alision907bde72013-06-20 14:40:37 -0400110 }
Alexandre Lisiond5686032013-10-29 11:09:21 -0400111
alision465ceba2013-07-04 09:24:30 -0400112 /**
113 * Compare conferences based on confID/participants
114 */
115 @Override
116 public boolean equals(Object c) {
117 if (c instanceof Conference) {
Alexandre Lisiond5686032013-10-29 11:09:21 -0400118 if (((Conference) c).id.contentEquals(id) && !id.contentEquals("-1")) {
alision465ceba2013-07-04 09:24:30 -0400119 return true;
120 } else {
Alexandre Lisiond5686032013-10-29 11:09:21 -0400121 if (((Conference) c).id.contentEquals(id)) {
alision465ceba2013-07-04 09:24:30 -0400122 for (int i = 0; i < participants.size(); ++i) {
123 if (!((Conference) c).contains(participants.get(i).getCallId()))
124 return false;
125 }
126 return true;
127 }
128 }
129 }
130 return false;
131
132 }
alision907bde72013-06-20 14:40:37 -0400133
alisiondf1dac92013-06-27 17:35:53 -0400134 public boolean hasMultipleParticipants() {
135 return participants.size() > 1;
136 }
137
138 public boolean isOnHold() {
alisioncd8fb912013-06-28 14:43:51 -0400139 if (participants.size() == 1 && participants.get(0).isOnHold())
alisiondf1dac92013-06-27 17:35:53 -0400140 return true;
141 return state.contentEquals("HOLD");
142 }
143
144 public void setRecording(boolean b) {
145 recording = b;
146 }
147
148 public boolean isRecording() {
149 return recording;
150 }
151
152 public boolean isOnGoing() {
alisioncd8fb912013-06-28 14:43:51 -0400153 if (participants.size() == 1 && participants.get(0).isOngoing())
alisiondf1dac92013-06-27 17:35:53 -0400154 return true;
alisioncd8fb912013-06-28 14:43:51 -0400155
alisiondf1dac92013-06-27 17:35:53 -0400156 if (participants.size() > 1)
157 return true;
alisioncd8fb912013-06-28 14:43:51 -0400158
alisiondf1dac92013-06-27 17:35:53 -0400159 return false;
160 }
161
Alexandre Lisiond5686032013-10-29 11:09:21 -0400162 public ArrayList<SipMessage> getMessages() {
163 if (hasMultipleParticipants())
164 return messages;
165 else
166 return participants.get(0).getMessages();
167
168 }
169
Alexandre Lisiond5545232013-10-29 11:24:02 -0400170 public void addSipMessage(SipMessage sipMessage) {
171 messages.add(sipMessage);
172 }
173
alision907bde72013-06-20 14:40:37 -0400174}