Fix displaying Contact IdentityKeys

Migrate ContactDetailsActivity to use new SQL IdentityKeys storage,
remove dead code from Contact class.
This commit is contained in:
Andreas Straub 2015-07-07 19:27:12 +02:00
parent 0cf64857cf
commit 491f623708
2 changed files with 2 additions and 65 deletions

View File

@ -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) { public void setOption(int option) {
this.subscription |= 1 << option; this.subscription |= 1 << option;
} }

View File

@ -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; hasKeys = true;
View view = inflater.inflate(R.layout.contact_key, keys, false); View view = inflater.inflate(R.layout.contact_key, keys, false);
TextView key = (TextView) view.findViewById(R.id.key); TextView key = (TextView) view.findViewById(R.id.key);