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