diff options
-rw-r--r-- | res/drawable-hdpi/ic_action_remove.png | bin | 0 -> 448 bytes | |||
-rw-r--r-- | res/drawable-mdpi/ic_action_remove.png | bin | 0 -> 282 bytes | |||
-rw-r--r-- | res/drawable-xhdpi/ic_action_remove.png | bin | 0 -> 513 bytes | |||
-rw-r--r-- | res/drawable-xxhdpi/ic_action_remove.png | bin | 0 -> 681 bytes | |||
-rw-r--r-- | res/layout/contact_key.xml | 46 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/eu/siacs/conversations/entities/Contact.java | 22 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ContactDetailsActivity.java | 35 |
8 files changed, 88 insertions, 17 deletions
diff --git a/res/drawable-hdpi/ic_action_remove.png b/res/drawable-hdpi/ic_action_remove.png Binary files differnew file mode 100644 index 00000000..58a56e45 --- /dev/null +++ b/res/drawable-hdpi/ic_action_remove.png diff --git a/res/drawable-mdpi/ic_action_remove.png b/res/drawable-mdpi/ic_action_remove.png Binary files differnew file mode 100644 index 00000000..342a79de --- /dev/null +++ b/res/drawable-mdpi/ic_action_remove.png diff --git a/res/drawable-xhdpi/ic_action_remove.png b/res/drawable-xhdpi/ic_action_remove.png Binary files differnew file mode 100644 index 00000000..58e2e3b4 --- /dev/null +++ b/res/drawable-xhdpi/ic_action_remove.png diff --git a/res/drawable-xxhdpi/ic_action_remove.png b/res/drawable-xxhdpi/ic_action_remove.png Binary files differnew file mode 100644 index 00000000..331c545b --- /dev/null +++ b/res/drawable-xxhdpi/ic_action_remove.png diff --git a/res/layout/contact_key.xml b/res/layout/contact_key.xml index 0c457c25..fdd1ddba 100644 --- a/res/layout/contact_key.xml +++ b/res/layout/contact_key.xml @@ -1,22 +1,40 @@ <?xml version="1.0" encoding="utf-8"?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="match_parent" > + + <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_toLeftOf="@+id/button_remove" android:orientation="vertical" android:padding="8dp" > - <TextView - android:id="@+id/key" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textSize="18sp" - android:textColor="@color/primarytext" - android:typeface="monospace" - /> - <TextView - android:id="@+id/key_type" + <TextView + android:id="@+id/key" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/primarytext" + android:textSize="18sp" + android:typeface="monospace" /> + + <TextView + android:id="@+id/key_type" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/secondarytext" /> + </LinearLayout> + + <ImageButton + android:id="@+id/button_remove" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@color/secondarytext" - /> - </LinearLayout>
\ 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"/> + +</RelativeLayout>
\ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 2b14e74b..1486b9bc 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -241,5 +241,7 @@ <string name="request_presence_updates">Please request presence updates from your contact first.\n\n<small>This will be used to determine what client(s) your contact is using.</small></string> <string name="request_now">Request now</string> <string name="unable_to_decrypt_otr_message">Unable to decrypt OTR message</string> + <string name="delete_fingerprint">Delete Fingerprint</string> + <string name="sure_delete_fingerprint">Are you sure you would like to delete this fingerprint?</string> </resources>
\ 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 8a6fd99c..dfd6c059 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 a9153db1..17ea5f98 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<String> 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() { |