blob: c242b4d7bc1edb5316a669aa12460ab9011f2a45 [file] [log] [blame]
alision907bde72013-06-20 14:40:37 -04001package com.savoirfairelinux.sflphone.model;
2
3import java.util.ArrayList;
alisioncd8fb912013-06-28 14:43:51 -04004import java.util.Collection;
5import java.util.Collections;
alision806e18e2013-06-21 15:30:17 -04006import java.util.HashMap;
alision907bde72013-06-20 14:40:37 -04007
alision806e18e2013-06-21 15:30:17 -04008import android.os.Parcel;
9import android.os.Parcelable;
10
11public class Conference implements Parcelable {
12
13 private String id;
alisiondf1dac92013-06-27 17:35:53 -040014 private String state = "";
alision907bde72013-06-20 14:40:37 -040015 private ArrayList<SipCall> participants;
alisiondf1dac92013-06-27 17:35:53 -040016 private boolean recording;
alision806e18e2013-06-21 15:30:17 -040017
18 public interface state {
19 int ACTIVE_ATTACHED = 0;
20 int ACTIVE_DETACHED = 1;
21 int ACTIVE_ATTACHED_REC = 2;
22 int ACTIVE_DETACHED_REC = 3;
23 int HOLD = 4;
24 int HOLD_REC = 5;
25 }
26
27 @Override
28 public int describeContents() {
29 return 0;
30 }
31
32 @Override
33 public void writeToParcel(Parcel out, int flags) {
34
35 out.writeString(id);
36 out.writeString(state);
37 out.writeTypedList(participants);
38
39 }
40
41 public static final Parcelable.Creator<Conference> CREATOR = new Parcelable.Creator<Conference>() {
42 public Conference createFromParcel(Parcel in) {
43 return new Conference(in);
44 }
45
46 public Conference[] newArray(int size) {
47 return new Conference[size];
48 }
49 };
50
51 private Conference(Parcel in) {
52
53 participants = new ArrayList<SipCall>();
54 id = in.readString();
55 state = in.readString();
56 in.readTypedList(participants, SipCall.CREATOR);
57
58 }
59
60 public Conference(String cID) {
61 id = cID;
62 participants = new ArrayList<SipCall>();
63 }
64
alisioncd8fb912013-06-28 14:43:51 -040065 public Conference(Conference c) {
66 id = c.id;
67 state = c.state;
68 participants = new ArrayList<SipCall>(c.participants);
69 recording = c.recording;
70 }
71
alision806e18e2013-06-21 15:30:17 -040072 public String getId() {
alision907bde72013-06-20 14:40:37 -040073 return id;
74 }
alision806e18e2013-06-21 15:30:17 -040075
76 public void setId(String id) {
alision907bde72013-06-20 14:40:37 -040077 this.id = id;
78 }
alision806e18e2013-06-21 15:30:17 -040079
alision907bde72013-06-20 14:40:37 -040080 public String getState() {
alisioncd8fb912013-06-28 14:43:51 -040081 if (participants.size() == 1) {
alisiondf1dac92013-06-27 17:35:53 -040082 return participants.get(0).getCallStateString();
83 }
alision907bde72013-06-20 14:40:37 -040084 return state;
85 }
alision806e18e2013-06-21 15:30:17 -040086
alision907bde72013-06-20 14:40:37 -040087 public void setState(String state) {
88 this.state = state;
89 }
alision806e18e2013-06-21 15:30:17 -040090
alision907bde72013-06-20 14:40:37 -040091 public ArrayList<SipCall> getParticipants() {
92 return participants;
93 }
alision806e18e2013-06-21 15:30:17 -040094
95 public boolean contains(String callID) {
alisioncd8fb912013-06-28 14:43:51 -040096 for (int i = 0; i < participants.size(); ++i) {
97 if (participants.get(i).getCallId().contentEquals(callID))
alision806e18e2013-06-21 15:30:17 -040098 return true;
99 }
100 return false;
101 }
102
103 public SipCall getCall(String callID) {
alisioncd8fb912013-06-28 14:43:51 -0400104 for (int i = 0; i < participants.size(); ++i) {
105 if (participants.get(i).getCallId().contentEquals(callID))
alision806e18e2013-06-21 15:30:17 -0400106 return participants.get(i);
107 }
108 return null;
alision907bde72013-06-20 14:40:37 -0400109 }
alision465ceba2013-07-04 09:24:30 -0400110
111 /**
112 * Compare conferences based on confID/participants
113 */
114 @Override
115 public boolean equals(Object c) {
116 if (c instanceof Conference) {
117 if(((Conference) c).id.contentEquals(id) && !id.contentEquals("-1")){
118 return true;
119 } else {
120 if(((Conference) c).id.contentEquals(id)){
121 for (int i = 0; i < participants.size(); ++i) {
122 if (!((Conference) c).contains(participants.get(i).getCallId()))
123 return false;
124 }
125 return true;
126 }
127 }
128 }
129 return false;
130
131 }
alision907bde72013-06-20 14:40:37 -0400132
alisiondf1dac92013-06-27 17:35:53 -0400133 public boolean hasMultipleParticipants() {
134 return participants.size() > 1;
135 }
136
137 public boolean isOnHold() {
alisioncd8fb912013-06-28 14:43:51 -0400138 if (participants.size() == 1 && participants.get(0).isOnHold())
alisiondf1dac92013-06-27 17:35:53 -0400139 return true;
140 return state.contentEquals("HOLD");
141 }
142
143 public void setRecording(boolean b) {
144 recording = b;
145 }
146
147 public boolean isRecording() {
148 return recording;
149 }
150
151 public boolean isOnGoing() {
alisioncd8fb912013-06-28 14:43:51 -0400152 if (participants.size() == 1 && participants.get(0).isOngoing())
alisiondf1dac92013-06-27 17:35:53 -0400153 return true;
alisioncd8fb912013-06-28 14:43:51 -0400154
alisiondf1dac92013-06-27 17:35:53 -0400155 if (participants.size() > 1)
156 return true;
alisioncd8fb912013-06-28 14:43:51 -0400157
alisiondf1dac92013-06-27 17:35:53 -0400158 return false;
159 }
160
alision907bde72013-06-20 14:40:37 -0400161}