anotherim/src/eu/siacs/conversations/entities/Contact.java

316 lines
7.9 KiB
Java
Raw Normal View History

2014-02-28 17:46:01 +00:00
package eu.siacs.conversations.entities;
2014-01-24 01:04:05 +00:00
2014-02-16 15:32:15 +00:00
import java.util.HashSet;
import java.util.Set;
2014-05-22 12:33:17 +00:00
2014-02-16 15:32:15 +00:00
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
2014-05-22 12:33:17 +00:00
2014-02-28 17:46:01 +00:00
import eu.siacs.conversations.xml.Element;
import android.content.ContentValues;
import android.database.Cursor;
2014-01-24 01:04:05 +00:00
public class Contact {
public static final String TABLENAME = "contacts";
public static final String SYSTEMNAME = "systemname";
public static final String SERVERNAME = "servername";
public static final String JID = "jid";
public static final String OPTIONS = "options";
public static final String SYSTEMACCOUNT = "systemaccount";
public static final String PHOTOURI = "photouri";
2014-02-16 15:32:15 +00:00
public static final String KEYS = "pgpkey";
public static final String ACCOUNT = "accountUuid";
protected String accountUuid;
protected String systemName;
protected String serverName;
2014-01-24 01:04:05 +00:00
protected String jid;
2014-02-21 20:35:23 +00:00
protected int subscription = 0;
2014-02-10 02:34:00 +00:00
protected String systemAccount;
protected String photoUri;
protected JSONObject keys = new JSONObject();
protected Presences presences = new Presences();
protected Account account;
protected boolean inRoster = true;
public Lastseen lastseen = new Lastseen();
2014-05-22 12:33:17 +00:00
public Contact(String account, String systemName, String serverName,
String jid, int subscription, String photoUri,
String systemAccount, String keys) {
this.accountUuid = account;
this.systemName = systemName;
this.serverName = serverName;
2014-01-24 01:04:05 +00:00
this.jid = jid;
this.subscription = subscription;
this.photoUri = photoUri;
this.systemAccount = systemAccount;
2014-02-16 15:32:15 +00:00
if (keys == null) {
keys = "";
}
try {
this.keys = new JSONObject(keys);
} catch (JSONException e) {
this.keys = new JSONObject();
}
}
public Contact(String jid) {
this.jid = jid;
2014-01-24 01:04:05 +00:00
}
public String getDisplayName() {
if (this.systemName != null) {
return this.systemName;
} else if (this.serverName != null) {
return this.serverName;
} else {
return this.jid.split("@")[0];
}
2014-01-24 01:04:05 +00:00
}
public String getProfilePhoto() {
return this.photoUri;
2014-01-24 01:04:05 +00:00
}
2014-01-24 01:04:05 +00:00
public String getJid() {
return this.jid;
}
2014-01-24 01:04:05 +00:00
public boolean match(String needle) {
return (jid.toLowerCase().contains(needle.toLowerCase()) || (getDisplayName()
.toLowerCase().contains(needle.toLowerCase())));
}
public ContentValues getContentValues() {
ContentValues values = new ContentValues();
values.put(ACCOUNT, accountUuid);
values.put(SYSTEMNAME, systemName);
values.put(SERVERNAME, serverName);
values.put(JID, jid);
values.put(OPTIONS, subscription);
values.put(SYSTEMACCOUNT, systemAccount);
values.put(PHOTOURI, photoUri);
2014-02-16 15:32:15 +00:00
values.put(KEYS, keys.toString());
return values;
}
public static Contact fromCursor(Cursor cursor) {
return new Contact(cursor.getString(cursor.getColumnIndex(ACCOUNT)),
cursor.getString(cursor.getColumnIndex(SYSTEMNAME)),
cursor.getString(cursor.getColumnIndex(SERVERNAME)),
cursor.getString(cursor.getColumnIndex(JID)),
cursor.getInt(cursor.getColumnIndex(OPTIONS)),
cursor.getString(cursor.getColumnIndex(PHOTOURI)),
2014-02-10 02:34:00 +00:00
cursor.getString(cursor.getColumnIndex(SYSTEMACCOUNT)),
cursor.getString(cursor.getColumnIndex(KEYS)));
2014-01-24 01:04:05 +00:00
}
2014-02-21 20:35:23 +00:00
public int getSubscription() {
return this.subscription;
}
2014-02-10 02:34:00 +00:00
public void setSystemAccount(String account) {
this.systemAccount = account;
}
public void setAccount(Account account) {
this.account = account;
this.accountUuid = account.getUuid();
}
public Account getAccount() {
return this.account;
}
public boolean couldBeMuc() {
String[] split = this.getJid().split("@");
if (split.length != 2) {
return false;
} else {
String[] domainParts = split[1].split("\\.");
if (domainParts.length < 3) {
return false;
} else {
return (domainParts[0].equals("conf")
|| domainParts[0].equals("conference")
|| domainParts[0].equals("room")
|| domainParts[0].equals("muc")
2014-06-14 12:27:03 +00:00
|| domainParts[0].equals("chat")
|| domainParts[0].equals("sala")
|| domainParts[0].equals("salas"));
}
}
}
2014-02-16 15:32:15 +00:00
2014-06-11 19:53:25 +00:00
public Presences getPresences() {
return this.presences;
}
2014-02-16 15:32:15 +00:00
public void updatePresence(String resource, int status) {
this.presences.updatePresence(resource, status);
}
public void removePresence(String resource) {
this.presences.removePresence(resource);
}
public void clearPresences() {
this.presences.clearPresences();
}
2014-02-16 15:32:15 +00:00
public int getMostAvailableStatus() {
return this.presences.getMostAvailableStatus();
}
2014-02-09 13:10:52 +00:00
public void setPresences(Presences pres) {
2014-02-16 15:32:15 +00:00
this.presences = pres;
2014-02-09 13:10:52 +00:00
}
2014-02-16 15:32:15 +00:00
2014-02-10 02:34:00 +00:00
public void setPhotoUri(String uri) {
this.photoUri = uri;
}
2014-02-16 15:32:15 +00:00
public void setServerName(String serverName) {
this.serverName = serverName;
}
public void setSystemName(String systemName) {
this.systemName = systemName;
2014-02-10 02:34:00 +00:00
}
public String getSystemAccount() {
return systemAccount;
}
2014-02-16 15:32:15 +00:00
public Set<String> getOtrFingerprints() {
Set<String> set = new HashSet<String>();
try {
if (this.keys.has("otr_fingerprints")) {
JSONArray fingerprints = this.keys
.getJSONArray("otr_fingerprints");
2014-02-16 15:32:15 +00:00
for (int i = 0; i < fingerprints.length(); ++i) {
set.add(fingerprints.getString(i));
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return set;
}
public void addOtrFingerprint(String print) {
try {
JSONArray fingerprints;
if (!this.keys.has("otr_fingerprints")) {
fingerprints = new JSONArray();
} else {
fingerprints = this.keys.getJSONArray("otr_fingerprints");
}
fingerprints.put(print);
this.keys.put("otr_fingerprints", fingerprints);
} catch (JSONException e) {
}
}
2014-02-27 23:22:56 +00:00
public void setPgpKeyId(long keyId) {
try {
this.keys.put("pgp_keyid", keyId);
} catch (JSONException e) {
2014-02-27 23:22:56 +00:00
}
}
2014-02-27 23:22:56 +00:00
public long getPgpKeyId() {
if (this.keys.has("pgp_keyid")) {
try {
return this.keys.getLong("pgp_keyid");
} catch (JSONException e) {
return 0;
}
} else {
return 0;
}
}
public void setOption(int option) {
2014-02-21 20:35:23 +00:00
this.subscription |= 1 << option;
}
public void resetOption(int option) {
2014-02-21 20:35:23 +00:00
this.subscription &= ~(1 << option);
}
public boolean getOption(int option) {
2014-02-21 20:35:23 +00:00
return ((this.subscription & (1 << option)) != 0);
}
2014-05-22 12:33:17 +00:00
public boolean showInRoster() {
return (this.getOption(Contact.Options.IN_ROSTER) && (!this
.getOption(Contact.Options.DIRTY_DELETE)))
|| (this.getOption(Contact.Options.DIRTY_PUSH));
}
2014-02-21 20:35:23 +00:00
public void parseSubscriptionFromElement(Element item) {
String ask = item.getAttribute("ask");
String subscription = item.getAttribute("subscription");
if (subscription != null) {
2014-02-21 20:35:23 +00:00
if (subscription.equals("to")) {
this.resetOption(Contact.Options.FROM);
this.setOption(Contact.Options.TO);
2014-02-21 20:35:23 +00:00
} else if (subscription.equals("from")) {
this.resetOption(Contact.Options.TO);
this.setOption(Contact.Options.FROM);
2014-02-21 20:35:23 +00:00
} else if (subscription.equals("both")) {
this.setOption(Contact.Options.TO);
this.setOption(Contact.Options.FROM);
2014-05-22 12:33:17 +00:00
} else if (subscription.equals("none")) {
this.resetOption(Contact.Options.FROM);
this.resetOption(Contact.Options.TO);
2014-02-21 20:35:23 +00:00
}
}
2014-05-22 12:33:17 +00:00
// do NOT override asking if pending push request
if (!this.getOption(Contact.Options.DIRTY_PUSH)) {
if ((ask != null) && (ask.equals("subscribe"))) {
this.setOption(Contact.Options.ASKING);
} else {
this.resetOption(Contact.Options.ASKING);
}
}
}
public Element asElement() {
Element item = new Element("item");
item.setAttribute("jid", this.jid);
if (this.serverName != null) {
item.setAttribute("name", this.serverName);
2014-02-21 20:35:23 +00:00
}
return item;
2014-02-21 20:35:23 +00:00
}
public class Options {
2014-02-21 20:35:23 +00:00
public static final int TO = 0;
public static final int FROM = 1;
public static final int ASKING = 2;
2014-05-22 12:33:17 +00:00
public static final int PREEMPTIVE_GRANT = 3;
public static final int IN_ROSTER = 4;
public static final int PENDING_SUBSCRIPTION_REQUEST = 5;
public static final int DIRTY_PUSH = 6;
public static final int DIRTY_DELETE = 7;
2014-03-05 14:41:14 +00:00
}
public class Lastseen {
public long time = 0;
public String presence = null;
}
2014-01-24 01:04:05 +00:00
}