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() {