blob: 3278c188cb7a962802bd1b9444742cfcf3b84363 [file] [log] [blame]
alision907bde72013-06-20 14:40:37 -04001package com.savoirfairelinux.sflphone.model;
2
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;
alision806e18e2013-06-21 15:30:17 -040014
15 public interface state {
16 int ACTIVE_ATTACHED = 0;
17 int ACTIVE_DETACHED = 1;
18 int ACTIVE_ATTACHED_REC = 2;
19 int ACTIVE_DETACHED_REC = 3;
20 int HOLD = 4;
21 int HOLD_REC = 5;
22 }
23
24 @Override
25 public int describeContents() {
26 return 0;
27 }
28
29 @Override
30 public void writeToParcel(Parcel out, int flags) {
alision806e18e2013-06-21 15:30:17 -040031 out.writeString(id);
32 out.writeString(state);
33 out.writeTypedList(participants);
alision806e18e2013-06-21 15:30:17 -040034 }
35
36 public static final Parcelable.Creator<Conference> CREATOR = new Parcelable.Creator<Conference>() {
37 public Conference createFromParcel(Parcel in) {
38 return new Conference(in);
39 }
40
41 public Conference[] newArray(int size) {
42 return new Conference[size];
43 }
44 };
45
46 private Conference(Parcel in) {
alision806e18e2013-06-21 15:30:17 -040047 participants = new ArrayList<SipCall>();
48 id = in.readString();
49 state = in.readString();
50 in.readTypedList(participants, SipCall.CREATOR);
alision806e18e2013-06-21 15:30:17 -040051 }
52
53 public Conference(String cID) {
54 id = cID;
55 participants = new ArrayList<SipCall>();
56 }
57
alisioncd8fb912013-06-28 14:43:51 -040058 public Conference(Conference c) {
59 id = c.id;
60 state = c.state;
61 participants = new ArrayList<SipCall>(c.participants);
62 recording = c.recording;
63 }
64
alision806e18e2013-06-21 15:30:17 -040065 public String getId() {
alision907bde72013-06-20 14:40:37 -040066 return id;
67 }
alision806e18e2013-06-21 15:30:17 -040068
69 public void setId(String id) {
alision907bde72013-06-20 14:40:37 -040070 this.id = id;
71 }
alision806e18e2013-06-21 15:30:17 -040072
alision907bde72013-06-20 14:40:37 -040073 public String getState() {
alisioncd8fb912013-06-28 14:43:51 -040074 if (participants.size() == 1) {
alisiondf1dac92013-06-27 17:35:53 -040075 return participants.get(0).getCallStateString();
76 }
alision907bde72013-06-20 14:40:37 -040077 return state;
78 }
alision806e18e2013-06-21 15:30:17 -040079
alision907bde72013-06-20 14:40:37 -040080 public void setState(String state) {
81 this.state = state;
82 }
alision806e18e2013-06-21 15:30:17 -040083
alision907bde72013-06-20 14:40:37 -040084 public ArrayList<SipCall> getParticipants() {
85 return participants;
86 }
alision806e18e2013-06-21 15:30:17 -040087
88 public boolean contains(String callID) {
alisioncd8fb912013-06-28 14:43:51 -040089 for (int i = 0; i < participants.size(); ++i) {
90 if (participants.get(i).getCallId().contentEquals(callID))
alision806e18e2013-06-21 15:30:17 -040091 return true;
92 }
93 return false;
94 }
95
96 public SipCall getCall(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 participants.get(i);
100 }
101 return null;
alision907bde72013-06-20 14:40:37 -0400102 }
alision465ceba2013-07-04 09:24:30 -0400103
104 /**
105 * Compare conferences based on confID/participants
106 */
107 @Override
108 public boolean equals(Object c) {
109 if (c instanceof Conference) {
110 if(((Conference) c).id.contentEquals(id) && !id.contentEquals("-1")){
111 return true;
112 } else {
113 if(((Conference) c).id.contentEquals(id)){
114 for (int i = 0; i < participants.size(); ++i) {
115 if (!((Conference) c).contains(participants.get(i).getCallId()))
116 return false;
117 }
118 return true;
119 }
120 }
121 }
122 return false;
123
124 }
alision907bde72013-06-20 14:40:37 -0400125
alisiondf1dac92013-06-27 17:35:53 -0400126 public boolean hasMultipleParticipants() {
127 return participants.size() > 1;
128 }
129
130 public boolean isOnHold() {
alisioncd8fb912013-06-28 14:43:51 -0400131 if (participants.size() == 1 && participants.get(0).isOnHold())
alisiondf1dac92013-06-27 17:35:53 -0400132 return true;
133 return state.contentEquals("HOLD");
134 }
135
136 public void setRecording(boolean b) {
137 recording = b;
138 }
139
140 public boolean isRecording() {
141 return recording;
142 }
143
144 public boolean isOnGoing() {
alisioncd8fb912013-06-28 14:43:51 -0400145 if (participants.size() == 1 && participants.get(0).isOngoing())
alisiondf1dac92013-06-27 17:35:53 -0400146 return true;
alisioncd8fb912013-06-28 14:43:51 -0400147
alisiondf1dac92013-06-27 17:35:53 -0400148 if (participants.size() > 1)
149 return true;
alisioncd8fb912013-06-28 14:43:51 -0400150
alisiondf1dac92013-06-27 17:35:53 -0400151 return false;
152 }
153
alision907bde72013-06-20 14:40:37 -0400154}