Fix displaying Contact IdentityKeys
Migrate ContactDetailsActivity to use new SQL IdentityKeys storage, remove dead code from Contact class.
This commit is contained in:
parent
3b8dfafecd
commit
4b0279a6ef
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue