make avatars persisent / available even without internet
This commit is contained in:
parent
301477c764
commit
4875b52f09
|
@ -31,6 +31,7 @@ public class Account extends AbstractEntity {
|
||||||
public static final String OPTIONS = "options";
|
public static final String OPTIONS = "options";
|
||||||
public static final String ROSTERVERSION = "rosterversion";
|
public static final String ROSTERVERSION = "rosterversion";
|
||||||
public static final String KEYS = "keys";
|
public static final String KEYS = "keys";
|
||||||
|
public static final String AVATAR = "avatar";
|
||||||
|
|
||||||
public static final int OPTION_USETLS = 0;
|
public static final int OPTION_USETLS = 0;
|
||||||
public static final int OPTION_DISABLED = 1;
|
public static final int OPTION_DISABLED = 1;
|
||||||
|
@ -81,11 +82,11 @@ public class Account extends AbstractEntity {
|
||||||
|
|
||||||
public Account(String username, String server, String password) {
|
public Account(String username, String server, String password) {
|
||||||
this(java.util.UUID.randomUUID().toString(), username, server,
|
this(java.util.UUID.randomUUID().toString(), username, server,
|
||||||
password, 0, null, "");
|
password, 0, null, "",null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Account(String uuid, String username, String server,
|
public Account(String uuid, String username, String server,
|
||||||
String password, int options, String rosterVersion, String keys) {
|
String password, int options, String rosterVersion, String keys, String avatar) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
@ -97,6 +98,7 @@ public class Account extends AbstractEntity {
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
this.avatar = avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOptionSet(int option) {
|
public boolean isOptionSet(int option) {
|
||||||
|
@ -209,6 +211,7 @@ public class Account extends AbstractEntity {
|
||||||
values.put(OPTIONS, options);
|
values.put(OPTIONS, options);
|
||||||
values.put(KEYS, this.keys.toString());
|
values.put(KEYS, this.keys.toString());
|
||||||
values.put(ROSTERVERSION, rosterVersion);
|
values.put(ROSTERVERSION, rosterVersion);
|
||||||
|
values.put(AVATAR, avatar);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +222,8 @@ public class Account extends AbstractEntity {
|
||||||
cursor.getString(cursor.getColumnIndex(PASSWORD)),
|
cursor.getString(cursor.getColumnIndex(PASSWORD)),
|
||||||
cursor.getInt(cursor.getColumnIndex(OPTIONS)),
|
cursor.getInt(cursor.getColumnIndex(OPTIONS)),
|
||||||
cursor.getString(cursor.getColumnIndex(ROSTERVERSION)),
|
cursor.getString(cursor.getColumnIndex(ROSTERVERSION)),
|
||||||
cursor.getString(cursor.getColumnIndex(KEYS)));
|
cursor.getString(cursor.getColumnIndex(KEYS)),
|
||||||
|
cursor.getString(cursor.getColumnIndex(AVATAR)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public OtrEngine getOtrEngine(Context context) {
|
public OtrEngine getOtrEngine(Context context) {
|
||||||
|
@ -346,8 +350,13 @@ public class Account extends AbstractEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAvatar(String filename) {
|
public boolean setAvatar(String filename) {
|
||||||
this.avatar = filename;
|
if (this.avatar != null && this.avatar.equals(filename)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
this.avatar = filename;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAvatar() {
|
public String getAvatar() {
|
||||||
|
|
|
@ -15,7 +15,6 @@ import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
|
|
||||||
public class Contact implements ListItem {
|
public class Contact implements ListItem {
|
||||||
public static final String TABLENAME = "contacts";
|
public static final String TABLENAME = "contacts";
|
||||||
|
@ -28,6 +27,7 @@ public class Contact implements ListItem {
|
||||||
public static final String PHOTOURI = "photouri";
|
public static final String PHOTOURI = "photouri";
|
||||||
public static final String KEYS = "pgpkey";
|
public static final String KEYS = "pgpkey";
|
||||||
public static final String ACCOUNT = "accountUuid";
|
public static final String ACCOUNT = "accountUuid";
|
||||||
|
public static final String AVATAR = "avatar";
|
||||||
|
|
||||||
protected String accountUuid;
|
protected String accountUuid;
|
||||||
protected String systemName;
|
protected String systemName;
|
||||||
|
@ -48,7 +48,7 @@ public class Contact implements ListItem {
|
||||||
|
|
||||||
public Contact(String account, String systemName, String serverName,
|
public Contact(String account, String systemName, String serverName,
|
||||||
String jid, int subscription, String photoUri,
|
String jid, int subscription, String photoUri,
|
||||||
String systemAccount, String keys) {
|
String systemAccount, String keys, String avatar) {
|
||||||
this.accountUuid = account;
|
this.accountUuid = account;
|
||||||
this.systemName = systemName;
|
this.systemName = systemName;
|
||||||
this.serverName = serverName;
|
this.serverName = serverName;
|
||||||
|
@ -64,6 +64,7 @@ public class Contact implements ListItem {
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
this.keys = new JSONObject();
|
this.keys = new JSONObject();
|
||||||
}
|
}
|
||||||
|
this.avatar = avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Contact(String jid) {
|
public Contact(String jid) {
|
||||||
|
@ -105,6 +106,7 @@ public class Contact implements ListItem {
|
||||||
values.put(SYSTEMACCOUNT, systemAccount);
|
values.put(SYSTEMACCOUNT, systemAccount);
|
||||||
values.put(PHOTOURI, photoUri);
|
values.put(PHOTOURI, photoUri);
|
||||||
values.put(KEYS, keys.toString());
|
values.put(KEYS, keys.toString());
|
||||||
|
values.put(AVATAR,avatar);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +118,8 @@ public class Contact implements ListItem {
|
||||||
cursor.getInt(cursor.getColumnIndex(OPTIONS)),
|
cursor.getInt(cursor.getColumnIndex(OPTIONS)),
|
||||||
cursor.getString(cursor.getColumnIndex(PHOTOURI)),
|
cursor.getString(cursor.getColumnIndex(PHOTOURI)),
|
||||||
cursor.getString(cursor.getColumnIndex(SYSTEMACCOUNT)),
|
cursor.getString(cursor.getColumnIndex(SYSTEMACCOUNT)),
|
||||||
cursor.getString(cursor.getColumnIndex(KEYS)));
|
cursor.getString(cursor.getColumnIndex(KEYS)),
|
||||||
|
cursor.getString(cursor.getColumnIndex(AVATAR)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSubscription() {
|
public int getSubscription() {
|
||||||
|
@ -332,7 +335,12 @@ public class Contact implements ListItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAvatar(String filename) {
|
public boolean setAvatar(String filename) {
|
||||||
this.avatar = filename;
|
if (this.avatar != null && this.avatar.equals(filename)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
this.avatar = filename;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ public class Message extends AbstractEntity {
|
||||||
public static String ENCRYPTION = "encryption";
|
public static String ENCRYPTION = "encryption";
|
||||||
public static String STATUS = "status";
|
public static String STATUS = "status";
|
||||||
public static String TYPE = "type";
|
public static String TYPE = "type";
|
||||||
|
public static String REMOTE_MSG_ID = "remoteMsgId";
|
||||||
|
|
||||||
protected String conversationUuid;
|
protected String conversationUuid;
|
||||||
protected String counterpart;
|
protected String counterpart;
|
||||||
|
@ -54,6 +55,7 @@ public class Message extends AbstractEntity {
|
||||||
protected int status;
|
protected int status;
|
||||||
protected int type;
|
protected int type;
|
||||||
protected boolean read = true;
|
protected boolean read = true;
|
||||||
|
protected String remoteMsgId = null;
|
||||||
|
|
||||||
protected transient Conversation conversation = null;
|
protected transient Conversation conversation = null;
|
||||||
|
|
||||||
|
@ -66,17 +68,17 @@ public class Message extends AbstractEntity {
|
||||||
public Message(Conversation conversation, String body, int encryption) {
|
public Message(Conversation conversation, String body, int encryption) {
|
||||||
this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),
|
this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),
|
||||||
conversation.getContactJid(), null, body, System.currentTimeMillis(), encryption,
|
conversation.getContactJid(), null, body, System.currentTimeMillis(), encryption,
|
||||||
Message.STATUS_UNSEND,TYPE_TEXT);
|
Message.STATUS_UNSEND,TYPE_TEXT,null);
|
||||||
this.conversation = conversation;
|
this.conversation = conversation;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message(Conversation conversation, String counterpart, String body, int encryption, int status) {
|
public Message(Conversation conversation, String counterpart, String body, int encryption, int status) {
|
||||||
this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),counterpart, null, body, System.currentTimeMillis(), encryption,status,TYPE_TEXT);
|
this(java.util.UUID.randomUUID().toString(), conversation.getUuid(),counterpart, null, body, System.currentTimeMillis(), encryption,status,TYPE_TEXT,null);
|
||||||
this.conversation = conversation;
|
this.conversation = conversation;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Message(String uuid, String conversationUUid, String counterpart, String trueCounterpart,
|
public Message(String uuid, String conversationUUid, String counterpart, String trueCounterpart,
|
||||||
String body, long timeSent, int encryption, int status, int type) {
|
String body, long timeSent, int encryption, int status, int type, String remoteMsgId) {
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.conversationUuid = conversationUUid;
|
this.conversationUuid = conversationUUid;
|
||||||
this.counterpart = counterpart;
|
this.counterpart = counterpart;
|
||||||
|
@ -86,6 +88,7 @@ public class Message extends AbstractEntity {
|
||||||
this.encryption = encryption;
|
this.encryption = encryption;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
this.remoteMsgId = remoteMsgId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -100,6 +103,7 @@ public class Message extends AbstractEntity {
|
||||||
values.put(ENCRYPTION, encryption);
|
values.put(ENCRYPTION, encryption);
|
||||||
values.put(STATUS, status);
|
values.put(STATUS, status);
|
||||||
values.put(TYPE, type);
|
values.put(TYPE, type);
|
||||||
|
values.put(REMOTE_MSG_ID,remoteMsgId);
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,6 +167,14 @@ public class Message extends AbstractEntity {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getRemoteMsgId() {
|
||||||
|
return this.remoteMsgId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteMsgId(String id) {
|
||||||
|
this.remoteMsgId = id;
|
||||||
|
}
|
||||||
|
|
||||||
public static Message fromCursor(Cursor cursor) {
|
public static Message fromCursor(Cursor cursor) {
|
||||||
return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
|
return new Message(cursor.getString(cursor.getColumnIndex(UUID)),
|
||||||
cursor.getString(cursor.getColumnIndex(CONVERSATION)),
|
cursor.getString(cursor.getColumnIndex(CONVERSATION)),
|
||||||
|
@ -172,7 +184,8 @@ public class Message extends AbstractEntity {
|
||||||
cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
|
cursor.getLong(cursor.getColumnIndex(TIME_SENT)),
|
||||||
cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
|
cursor.getInt(cursor.getColumnIndex(ENCRYPTION)),
|
||||||
cursor.getInt(cursor.getColumnIndex(STATUS)),
|
cursor.getInt(cursor.getColumnIndex(STATUS)),
|
||||||
cursor.getInt(cursor.getColumnIndex(TYPE)));
|
cursor.getInt(cursor.getColumnIndex(TYPE)),
|
||||||
|
cursor.getString(cursor.getColumnIndex(REMOTE_MSG_ID)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConversation(Conversation conv) {
|
public void setConversation(Conversation conv) {
|
||||||
|
|
|
@ -301,7 +301,9 @@ public class MessageParser extends AbstractParser implements
|
||||||
if (mXmppConnectionService.getFileBackend().isAvatarCached(
|
if (mXmppConnectionService.getFileBackend().isAvatarCached(
|
||||||
avatar)) {
|
avatar)) {
|
||||||
if (account.getJid().equals(from)) {
|
if (account.getJid().equals(from)) {
|
||||||
account.setAvatar(avatar.getFilename());
|
if (account.setAvatar(avatar.getFilename())) {
|
||||||
|
mXmppConnectionService.databaseBackend.updateAccount(account);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Contact contact = account.getRoster().getContact(from);
|
Contact contact = account.getRoster().getContact(from);
|
||||||
contact.setAvatar(avatar.getFilename());
|
contact.setAvatar(avatar.getFilename());
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
||||||
private static DatabaseBackend instance = null;
|
private static DatabaseBackend instance = null;
|
||||||
|
|
||||||
private static final String DATABASE_NAME = "history";
|
private static final String DATABASE_NAME = "history";
|
||||||
private static final int DATABASE_VERSION = 6;
|
private static final int DATABASE_VERSION = 7;
|
||||||
|
|
||||||
private static String CREATE_CONTATCS_STATEMENT = "create table "
|
private static String CREATE_CONTATCS_STATEMENT = "create table "
|
||||||
+ Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, "
|
+ Contact.TABLENAME + "(" + Contact.ACCOUNT + " TEXT, "
|
||||||
|
@ -86,6 +86,14 @@ public class DatabaseBackend extends SQLiteOpenHelper {
|
||||||
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN "
|
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN "
|
||||||
+ Message.TRUE_COUNTERPART + " TEXT");
|
+ Message.TRUE_COUNTERPART + " TEXT");
|
||||||
}
|
}
|
||||||
|
if (oldVersion < 7 && newVersion >= 7) {
|
||||||
|
db.execSQL("ALTER TABLE " + Message.TABLENAME + " ADD COLUMN "
|
||||||
|
+ Message.REMOTE_MSG_ID + " TEXT");
|
||||||
|
db.execSQL("ALTER TABLE " + Contact.TABLENAME + " ADD COLUMN "
|
||||||
|
+ Contact.AVATAR + " TEXT");
|
||||||
|
db.execSQL("ALTER TABLE " + Account.TABLENAME + " ADD COLUMN "
|
||||||
|
+ Account.AVATAR + " TEXT");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized DatabaseBackend getInstance(Context context) {
|
public static synchronized DatabaseBackend getInstance(Context context) {
|
||||||
|
|
|
@ -1218,7 +1218,9 @@ public class XmppConnectionService extends Service {
|
||||||
@Override
|
@Override
|
||||||
public void onIqPacketReceived(Account account, IqPacket result) {
|
public void onIqPacketReceived(Account account, IqPacket result) {
|
||||||
if (result.getType() == IqPacket.TYPE_RESULT) {
|
if (result.getType() == IqPacket.TYPE_RESULT) {
|
||||||
account.setAvatar(avatar.getFilename());
|
if (account.setAvatar(avatar.getFilename())) {
|
||||||
|
databaseBackend.updateAccount(account);
|
||||||
|
}
|
||||||
callback.success(avatar);
|
callback.success(avatar);
|
||||||
} else {
|
} else {
|
||||||
callback.error(R.string.error_publish_avatar_server_reject, avatar);
|
callback.error(R.string.error_publish_avatar_server_reject, avatar);
|
||||||
|
@ -1250,7 +1252,9 @@ public class XmppConnectionService extends Service {
|
||||||
if (avatar.image!=null) {
|
if (avatar.image!=null) {
|
||||||
if (getFileBackend().save(avatar)) {
|
if (getFileBackend().save(avatar)) {
|
||||||
if (account.getJid().equals(avatar.owner)) {
|
if (account.getJid().equals(avatar.owner)) {
|
||||||
account.setAvatar(avatar.getFilename());
|
if (account.setAvatar(avatar.getFilename())) {
|
||||||
|
databaseBackend.updateAccount(account);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Contact contact = account.getRoster().getContact(avatar.owner);
|
Contact contact = account.getRoster().getContact(avatar.owner);
|
||||||
contact.setAvatar(avatar.getFilename());
|
contact.setAvatar(avatar.getFilename());
|
||||||
|
@ -1283,7 +1287,9 @@ public class XmppConnectionService extends Service {
|
||||||
if (avatar!=null) {
|
if (avatar!=null) {
|
||||||
avatar.owner = account.getJid();
|
avatar.owner = account.getJid();
|
||||||
if (fileBackend.isAvatarCached(avatar)) {
|
if (fileBackend.isAvatarCached(avatar)) {
|
||||||
account.setAvatar(avatar.getFilename());
|
if (account.setAvatar(avatar.getFilename())) {
|
||||||
|
databaseBackend.updateAccount(account);
|
||||||
|
}
|
||||||
callback.success(avatar);
|
callback.success(avatar);
|
||||||
} else {
|
} else {
|
||||||
fetchAvatar(account, avatar,callback);
|
fetchAvatar(account, avatar,callback);
|
||||||
|
|
Loading…
Reference in a new issue