Fix displaying Contact IdentityKeys

Andreas Straub created

Migrate ContactDetailsActivity to use new SQL IdentityKeys storage,
remove dead code from Contact class.

Change summary

src/main/java/eu/siacs/conversations/entities/Contact.java          | 64 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java |  3 
2 files changed, 2 insertions(+), 65 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/entities/Contact.java 🔗

@@ -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;
 	}

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -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);