aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-09-07 23:08:40 +0200
committeriNPUTmice <daniel@gultsch.de>2014-09-07 23:08:40 +0200
commit449c2a544b48a2b9adf0df094eb1ac0d49531ebe (patch)
tree958a9c6421028e08d7ae84059d0b26bc0ed39ed0
parent90947597e5a89e2adc6c75d52c8458ee153ee163 (diff)
fixed #321 - delete otr fingerprints
-rw-r--r--res/drawable-hdpi/ic_action_remove.pngbin0 -> 448 bytes
-rw-r--r--res/drawable-mdpi/ic_action_remove.pngbin0 -> 282 bytes
-rw-r--r--res/drawable-xhdpi/ic_action_remove.pngbin0 -> 513 bytes
-rw-r--r--res/drawable-xxhdpi/ic_action_remove.pngbin0 -> 681 bytes
-rw-r--r--res/layout/contact_key.xml46
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/eu/siacs/conversations/entities/Contact.java22
-rw-r--r--src/eu/siacs/conversations/ui/ContactDetailsActivity.java35
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
new file mode 100644
index 00000000..58a56e45
--- /dev/null
+++ b/res/drawable-hdpi/ic_action_remove.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_action_remove.png b/res/drawable-mdpi/ic_action_remove.png
new file mode 100644
index 00000000..342a79de
--- /dev/null
+++ b/res/drawable-mdpi/ic_action_remove.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_action_remove.png b/res/drawable-xhdpi/ic_action_remove.png
new file mode 100644
index 00000000..58e2e3b4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_action_remove.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_action_remove.png b/res/drawable-xxhdpi/ic_action_remove.png
new file mode 100644
index 00000000..331c545b
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_action_remove.png
Binary files differ
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 0d5a75d5..75e2ee3a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -245,5 +245,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() {