diff --git a/res/drawable-hdpi/ic_action_remove.png b/res/drawable-hdpi/ic_action_remove.png new file mode 100644 index 000000000..58a56e457 Binary files /dev/null and b/res/drawable-hdpi/ic_action_remove.png differ diff --git a/res/drawable-mdpi/ic_action_remove.png b/res/drawable-mdpi/ic_action_remove.png new file mode 100644 index 000000000..342a79de6 Binary files /dev/null and b/res/drawable-mdpi/ic_action_remove.png differ diff --git a/res/drawable-xhdpi/ic_action_remove.png b/res/drawable-xhdpi/ic_action_remove.png new file mode 100644 index 000000000..58e2e3b4d Binary files /dev/null and b/res/drawable-xhdpi/ic_action_remove.png differ diff --git a/res/drawable-xxhdpi/ic_action_remove.png b/res/drawable-xxhdpi/ic_action_remove.png new file mode 100644 index 000000000..331c545b8 Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_remove.png differ diff --git a/res/layout/contact_key.xml b/res/layout/contact_key.xml index 0c457c25d..fdd1ddba0 100644 --- a/res/layout/contact_key.xml +++ b/res/layout/contact_key.xml @@ -1,22 +1,40 @@ - + + - + + + + + - - \ No newline at end of file + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:padding="8dp" + android:background="?android:selectableItemBackground" + android:src="@drawable/ic_action_remove" + android:visibility="invisible"/> + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 0d5a75d52..75e2ee3aa 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -245,5 +245,7 @@ Please request presence updates from your contact first.\n\nThis will be used to determine what client(s) your contact is using. Request now Unable to decrypt OTR message + Delete Fingerprint + Are you sure you would like to delete this fingerprint? \ No newline at end of file diff --git a/src/eu/siacs/conversations/entities/Contact.java b/src/eu/siacs/conversations/entities/Contact.java index 8a6fd99c7..dfd6c0592 100644 --- a/src/eu/siacs/conversations/entities/Contact.java +++ b/src/eu/siacs/conversations/entities/Contact.java @@ -351,4 +351,26 @@ public class Contact implements ListItem { return true; } } + + public boolean deleteOtrFingerprint(String fingerprint) { + boolean success = false; + try { + if (this.keys.has("otr_fingerprints")) { + JSONArray newPrints = new JSONArray(); + JSONArray oldPrints = this.keys + .getJSONArray("otr_fingerprints"); + for (int i = 0; i < oldPrints.length(); ++i) { + if (!oldPrints.getString(i).equals(fingerprint)) { + newPrints.put(oldPrints.getString(i)); + } else { + success = true; + } + } + this.keys.put("otr_fingerprints", newPrints); + } + return success; + } catch (JSONException e) { + return false; + } + } } diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java index a9153db1b..17ea5f98b 100644 --- a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -23,6 +23,7 @@ import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.QuickContactBadge; import android.widget.TextView; @@ -323,16 +324,25 @@ public class ContactDetailsActivity extends XmppActivity { LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (Iterator iterator = contact.getOtrFingerprints() .iterator(); iterator.hasNext();) { - String otrFingerprint = iterator.next(); - View view = (View) inflater.inflate(R.layout.contact_key, null); + final String otrFingerprint = iterator.next(); + View view = (View) inflater.inflate(R.layout.contact_key, keys,false); TextView key = (TextView) view.findViewById(R.id.key); TextView keyType = (TextView) view.findViewById(R.id.key_type); + ImageButton remove = (ImageButton) view.findViewById(R.id.button_remove); + remove.setVisibility(View.VISIBLE); keyType.setText("OTR Fingerprint"); key.setText(otrFingerprint); keys.addView(view); + remove.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + confirmToDeleteFingerprint(otrFingerprint); + } + }); } if (contact.getPgpKeyId() != 0) { - View view = (View) inflater.inflate(R.layout.contact_key, null); + View view = (View) inflater.inflate(R.layout.contact_key, keys,false); TextView key = (TextView) view.findViewById(R.id.key); TextView keyType = (TextView) view.findViewById(R.id.key_type); keyType.setText("PGP Key ID"); @@ -360,6 +370,25 @@ public class ContactDetailsActivity extends XmppActivity { keys.addView(view); } } + + protected void confirmToDeleteFingerprint(final String fingerprint) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.delete_fingerprint); + builder.setMessage(R.string.sure_delete_fingerprint); + builder.setNegativeButton(R.string.cancel, null); + builder.setPositiveButton(R.string.delete,new android.content.DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + if (contact.deleteOtrFingerprint(fingerprint)) { + populateView(); + xmppConnectionService.syncRosterToDisk(contact.getAccount()); + } + } + + }); + builder.create().show(); + } @Override public void onBackendConnected() {