Fix displaying Contact IdentityKeys
Migrate ContactDetailsActivity to use new SQL IdentityKeys storage, remove dead code from Contact class.
This commit is contained in:
parent
0cf64857cf
commit
491f623708
|
@ -350,70 +350,6 @@ public class Contact implements ListItem, Blockable {
|
|||
}
|
||||
}
|
||||
|
||||
public List<IdentityKey> getAxolotlIdentityKeys() {
|
||||
synchronized (this.keys) {
|
||||
JSONArray serializedKeyItems = this.keys.optJSONArray("axolotl_identity_key");
|
||||
List<IdentityKey> identityKeys = new ArrayList<>();
|
||||
List<Integer> toDelete = new ArrayList<>();
|
||||
if(serializedKeyItems != null) {
|
||||
for(int i = 0; i<serializedKeyItems.length();++i) {
|
||||
try {
|
||||
String serializedKeyItem = serializedKeyItems.getString(i);
|
||||
IdentityKey identityKey = new IdentityKey(Base64.decode(serializedKeyItem, Base64.DEFAULT), 0);
|
||||
identityKeys.add(identityKey);
|
||||
} catch (InvalidKeyException e) {
|
||||
Log.e(Config.LOGTAG, "Invalid axolotl identity key encountered at contact" + this.getJid() + ": " + e.getMessage() + ", marking for deletion...");
|
||||
toDelete.add(i);
|
||||
} catch (JSONException e) {
|
||||
Log.e(Config.LOGTAG, "Error retrieving axolotl identity key at contact " + this.getJid() + ": " + e.getMessage());
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.e(Config.LOGTAG, "Encountered malformed identity key for contact" + this.getJid() + ": " + e.getMessage() + ", marking for deletion... ");
|
||||
toDelete.add(i);
|
||||
}
|
||||
}
|
||||
if(!toDelete.isEmpty()) {
|
||||
try {
|
||||
JSONArray filteredKeyItems = new JSONArray();
|
||||
for (int i = 0; i < serializedKeyItems.length(); ++i) {
|
||||
if (!toDelete.contains(i)) {
|
||||
filteredKeyItems.put(serializedKeyItems.get(i));
|
||||
}
|
||||
}
|
||||
this.keys.put("axolotl_identity_key", filteredKeyItems);
|
||||
} catch (JSONException e) {
|
||||
//should never happen
|
||||
}
|
||||
}
|
||||
}
|
||||
return identityKeys;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addAxolotlIdentityKey(IdentityKey identityKey) {
|
||||
synchronized (this.keys) {
|
||||
if(!getAxolotlIdentityKeys().contains(identityKey)) {
|
||||
JSONArray keysList;
|
||||
try {
|
||||
keysList = this.keys.getJSONArray("axolotl_identity_key");
|
||||
} catch (JSONException e) {
|
||||
keysList = new JSONArray();
|
||||
}
|
||||
|
||||
keysList.put(Base64.encodeToString(identityKey.serialize(), Base64.DEFAULT));
|
||||
try {
|
||||
this.keys.put("axolotl_identity_key", keysList);
|
||||
} catch (JSONException e) {
|
||||
Log.e(Config.LOGTAG, "Error adding Identity Key to Contact " + this.getJid() + ": " + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setOption(int option) {
|
||||
this.subscription |= 1 << option;
|
||||
}
|
||||
|
|
|
@ -377,7 +377,8 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
|
|||
}
|
||||
});
|
||||
}
|
||||
for(final IdentityKey identityKey:contact.getAxolotlIdentityKeys()) {
|
||||
for(final IdentityKey identityKey : xmppConnectionService.databaseBackend.loadIdentityKeys(
|
||||
contact.getAccount(), contact.getJid().toBareJid().toString())) {
|
||||
hasKeys = true;
|
||||
View view = inflater.inflate(R.layout.contact_key, keys, false);
|
||||
TextView key = (TextView) view.findViewById(R.id.key);
|
||||
|
|
Loading…
Reference in a new issue