Add key trust toggle to ContactDetailsActivity

Andreas Straub created

Can now toggle IdentityKey trust

Change summary

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java | 49 
src/main/res/drawable-hdpi/ic_action_done.png                       |  0 
src/main/res/drawable-hdpi/ic_done_black_24dp.png                   |  0 
src/main/res/drawable-mdpi/ic_action_done.png                       |  0 
src/main/res/drawable-mdpi/ic_done_black_24dp.png                   |  0 
src/main/res/drawable-xhdpi/ic_action_done.png                      |  0 
src/main/res/drawable-xhdpi/ic_done_black_24dp.png                  |  0 
src/main/res/drawable-xxhdpi/ic_done_black_24dp.png                 |  0 
src/main/res/drawable-xxxhdpi/ic_done_black_24dp.png                |  0 
src/main/res/layout/contact_key.xml                                 | 10 
src/main/res/values-v21/themes.xml                                  |  1 
src/main/res/values/attrs.xml                                       |  1 
src/main/res/values/themes.xml                                      |  1 
13 files changed, 52 insertions(+), 10 deletions(-)

Detailed changes

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

@@ -35,6 +35,7 @@ import java.util.List;
 
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.crypto.PgpEngine;
+import eu.siacs.conversations.crypto.axolotl.AxolotlService;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.entities.Contact;
 import eu.siacs.conversations.entities.ListItem;
@@ -363,13 +364,13 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 			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
+			ImageButton removeButton = (ImageButton) view
 				.findViewById(R.id.button_remove);
-			remove.setVisibility(View.VISIBLE);
+			removeButton.setVisibility(View.VISIBLE);
 			keyType.setText("OTR Fingerprint");
 			key.setText(CryptoHelper.prettifyFingerprint(otrFingerprint));
 			keys.addView(view);
-			remove.setOnClickListener(new OnClickListener() {
+			removeButton.setOnClickListener(new OnClickListener() {
 
 				@Override
 				public void onClick(View v) {
@@ -384,19 +385,47 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 			TextView key = (TextView) view.findViewById(R.id.key);
 			TextView keyType = (TextView) view.findViewById(R.id.key_type);
 			TextView keyTrust = (TextView) view.findViewById(R.id.key_trust);
-			ImageButton remove = (ImageButton) view
+			ImageButton removeButton = (ImageButton) view
 					.findViewById(R.id.button_remove);
-			remove.setVisibility(View.VISIBLE);
-			keyTrust.setVisibility(View.VISIBLE);
+			ImageButton trustButton = (ImageButton) view
+					.findViewById(R.id.button_trust);
+			final AxolotlService axolotlService = contact.getAccount().getAxolotlService();
+			final String fingerprint = identityKey.getFingerprint().replaceAll("\\s", "");
+			final Jid bareJid = contactJid.toBareJid();
+			AxolotlService.SQLiteAxolotlStore.Trust trust = contact.getAccount().getAxolotlService()
+					.getFingerprintTrust(bareJid.toString(), fingerprint);
+			switch (trust) {
+				case TRUSTED:
+					removeButton.setVisibility(View.VISIBLE);
+					//Log.d(Config.LOGTAG, AxolotlService.getLogprefix(contact.getAccount()) + "Setting remove button visible!");
+					break;
+				case UNDECIDED:
+				case UNTRUSTED:
+					//Log.d(Config.LOGTAG, AxolotlService.getLogprefix(contact.getAccount()) + "Setting trust button visible!");
+					trustButton.setVisibility(View.VISIBLE);
+					break;
+			}
 			keyType.setText("Axolotl Fingerprint");
 			key.setText(CryptoHelper.prettifyFingerprint(identityKey.getFingerprint()));
-			keyTrust.setText(contact.getAccount().getAxolotlService().getFingerprintTrust(contact.getJid().toBareJid().toString(), identityKey.getFingerprint().replaceAll("\\s","")).toString());
+			keyTrust.setText(trust.toString());
+			keyTrust.setVisibility(View.VISIBLE);
 			keys.addView(view);
-			remove.setOnClickListener(new OnClickListener() {
-
+			removeButton.setOnClickListener(new OnClickListener() {
+				@Override
+				public void onClick(View v) {
+					axolotlService.setFingerprintTrust(bareJid.toString(), fingerprint,
+							AxolotlService.SQLiteAxolotlStore.Trust.UNTRUSTED);
+					refreshUi();
+					xmppConnectionService.updateConversationUi();
+				}
+			});
+			trustButton.setOnClickListener(new OnClickListener() {
 				@Override
 				public void onClick(View v) {
-					//confirmToDeleteFingerprint(otrFingerprint);
+					axolotlService.setFingerprintTrust(bareJid.toString(), fingerprint,
+							AxolotlService.SQLiteAxolotlStore.Trust.TRUSTED);
+					refreshUi();
+					xmppConnectionService.updateConversationUi();
 				}
 			});
 		}

src/main/res/layout/contact_key.xml 🔗

@@ -50,4 +50,14 @@
         android:src="?attr/icon_remove"
         android:visibility="invisible" />
 
+    <ImageButton
+        android:id="@+id/button_trust"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_alignParentRight="true"
+        android:layout_centerVertical="true"
+        android:background="?android:selectableItemBackground"
+        android:padding="@dimen/image_button_padding"
+        android:src="?attr/icon_done"
+        android:visibility="invisible" />
 </RelativeLayout>

src/main/res/values-v21/themes.xml 🔗

@@ -18,6 +18,7 @@
         <item name="attr/icon_download">@drawable/ic_file_download_white_24dp</item>
         <item name="attr/icon_edit">@drawable/ic_edit_white_24dp</item>
         <item name="attr/icon_edit_dark">@drawable/ic_edit_grey600_24dp</item>
+        <item name="attr/icon_done">@drawable/ic_done_black_24dp</item>
         <item name="attr/icon_group">@drawable/ic_group_white_24dp</item>
         <item name="attr/icon_new">@drawable/ic_add_white_24dp</item>
         <item name="attr/icon_new_attachment">@drawable/ic_attach_file_white_24dp</item>

src/main/res/values/attrs.xml 🔗

@@ -14,6 +14,7 @@
     <attr name="icon_download" format="reference"/>
     <attr name="icon_edit" format="reference"/>
     <attr name="icon_edit_dark" format="reference"/>
+    <attr name="icon_done" format="reference"/>
     <attr name="icon_group" format="reference"/>
     <attr name="icon_new" format="reference"/>
     <attr name="icon_new_attachment" format="reference"/>

src/main/res/values/themes.xml 🔗

@@ -18,6 +18,7 @@
         <item name="attr/icon_download">@drawable/ic_action_download</item>
         <item name="attr/icon_edit">@drawable/ic_action_edit</item>
         <item name="attr/icon_edit_dark">@drawable/ic_action_edit_dark</item>
+        <item name="attr/icon_done">@drawable/ic_action_done</item>
 
         <item name="attr/icon_group">@drawable/ic_action_group</item>
         <item name="attr/icon_new">@drawable/ic_action_new</item>