From d76b0a3104f0bf259472c54d253fc214c3238765 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 22 Nov 2016 12:03:21 +0100 Subject: offer verification directly from the trust keys screen --- .../services/XmppConnectionService.java | 8 ++- .../siacs/conversations/ui/TrustKeysActivity.java | 73 ++++++++++++++++++++- src/main/res/drawable-hdpi/ic_action_camera.png | Bin 0 -> 601 bytes .../res/drawable-hdpi/ic_camera_alt_white_24dp.png | Bin 0 -> 364 bytes src/main/res/drawable-mdpi/ic_action_camera.png | Bin 0 -> 420 bytes .../res/drawable-mdpi/ic_camera_alt_white_24dp.png | Bin 0 -> 240 bytes src/main/res/drawable-xhdpi/ic_action_camera.png | Bin 0 -> 760 bytes .../drawable-xhdpi/ic_camera_alt_white_24dp.png | Bin 0 -> 446 bytes src/main/res/drawable-xxhdpi/ic_action_camera.png | Bin 0 -> 1015 bytes .../drawable-xxhdpi/ic_camera_alt_white_24dp.png | Bin 0 -> 666 bytes .../drawable-xxxhdpi/ic_camera_alt_white_24dp.png | Bin 0 -> 894 bytes src/main/res/menu/trust_keys.xml | 9 +++ src/main/res/values-v21/themes.xml | 2 + src/main/res/values/attrs.xml | 1 + src/main/res/values/strings.xml | 4 ++ src/main/res/values/themes.xml | 2 + 16 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/main/res/drawable-hdpi/ic_action_camera.png create mode 100644 src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png create mode 100644 src/main/res/drawable-mdpi/ic_action_camera.png create mode 100644 src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png create mode 100644 src/main/res/drawable-xhdpi/ic_action_camera.png create mode 100644 src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png create mode 100644 src/main/res/drawable-xxhdpi/ic_action_camera.png create mode 100644 src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png create mode 100644 src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png create mode 100644 src/main/res/menu/trust_keys.xml diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index c8a19019..c69dd2db 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -3617,17 +3617,20 @@ public class XmppConnectionService extends Service { }); } - public void verifyFingerprints(Contact contact, List fingerprints) { + public boolean verifyFingerprints(Contact contact, List fingerprints) { boolean needsRosterWrite = false; + boolean performedVerification = false; final AxolotlService axolotlService = contact.getAccount().getAxolotlService(); for(XmppUri.Fingerprint fp : fingerprints) { if (fp.type == XmppUri.FingerprintType.OTR) { - needsRosterWrite |= contact.addOtrFingerprint(fp.fingerprint); + performedVerification |= contact.addOtrFingerprint(fp.fingerprint); + needsRosterWrite |= performedVerification; } else if (fp.type == XmppUri.FingerprintType.OMEMO) { String fingerprint = "05"+fp.fingerprint.replaceAll("\\s",""); FingerprintStatus fingerprintStatus = axolotlService.getFingerprintTrust(fingerprint); if (fingerprintStatus != null) { if (!fingerprintStatus.isVerified()) { + performedVerification = true; axolotlService.setFingerprintTrust(fingerprint,fingerprintStatus.toVerified()); } } else { @@ -3638,6 +3641,7 @@ public class XmppConnectionService extends Service { if (needsRosterWrite) { syncRosterToDisk(contact.getAccount()); } + return performedVerification; } public boolean verifyFingerprints(Account account, List fingerprints) { diff --git a/src/main/java/eu/siacs/conversations/ui/TrustKeysActivity.java b/src/main/java/eu/siacs/conversations/ui/TrustKeysActivity.java index 26836395..9af0d075 100644 --- a/src/main/java/eu/siacs/conversations/ui/TrustKeysActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/TrustKeysActivity.java @@ -1,7 +1,12 @@ package eu.siacs.conversations.ui; +import android.app.ActionBar; import android.content.Intent; import android.os.Bundle; +import android.util.Log; +import android.view.Gravity; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; @@ -10,6 +15,9 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; + import org.whispersystems.libaxolotl.IdentityKey; import java.util.ArrayList; @@ -23,9 +31,9 @@ import eu.siacs.conversations.OmemoActivity; import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.crypto.axolotl.FingerprintStatus; -import eu.siacs.conversations.crypto.axolotl.XmppAxolotlSession; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Conversation; +import eu.siacs.conversations.utils.XmppUri; import eu.siacs.conversations.xmpp.OnKeyStatusUpdated; import eu.siacs.conversations.xmpp.jid.InvalidJidException; import eu.siacs.conversations.xmpp.jid.Jid; @@ -64,6 +72,7 @@ public class TrustKeysActivity extends OmemoActivity implements OnKeyStatusUpdat finish(); } }; + private XmppUri mPendingFingerprintVerificationUri = null; @Override protected void refreshUiReal() { @@ -102,6 +111,64 @@ public class TrustKeysActivity extends OmemoActivity implements OnKeyStatusUpdat } } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.trust_keys, menu); + Toast toast = Toast.makeText(this,R.string.use_camera_icon_to_scan_barcode,Toast.LENGTH_LONG); + ActionBar actionBar = getActionBar(); + toast.setGravity(Gravity.TOP | Gravity.END, 0 ,actionBar == null ? 0 : actionBar.getHeight()); + toast.show(); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_scan_qr_code: + if (hasPendingKeyFetches()) { + Toast.makeText(this, R.string.please_wait_for_keys_to_be_fetched, Toast.LENGTH_SHORT).show(); + } else { + new IntentIntegrator(this).initiateScan(); + return true; + } + } + return super.onOptionsItemSelected(item); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent intent) { + IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); + if (scanResult != null && scanResult.getFormatName() != null) { + String data = scanResult.getContents(); + XmppUri uri = new XmppUri(data); + if (xmppConnectionServiceBound) { + processFingerprintVerification(uri); + populateView(); + } else { + this.mPendingFingerprintVerificationUri =uri; + } + } + } + + private void processFingerprintVerification(XmppUri uri) { + if (mConversation != null + && mAccount != null + && uri.hasFingerprints() + && mAccount.getAxolotlService().getCryptoTargets(mConversation).contains(uri.getJid())) { + boolean performedVerification = xmppConnectionService.verifyFingerprints(mAccount.getRoster().getContact(uri.getJid()),uri.getFingerprints()); + boolean keys = reloadFingerprints(); + if (performedVerification && !keys && !hasNoOtherTrustedKeys() && !hasPendingKeyFetches()) { + Toast.makeText(this,R.string.all_omemo_keys_have_been_verified, Toast.LENGTH_SHORT).show(); + finishOk(); + } else if (performedVerification) { + Toast.makeText(this,R.string.verified_fingerprints,Toast.LENGTH_SHORT).show(); + } + } else { + Log.d(Config.LOGTAG,"xmpp uri was: "+uri.getJid()+" has Fingerprints: "+Boolean.toString(uri.hasFingerprints())); + Toast.makeText(this,R.string.barcode_does_not_contain_fingerprints_for_this_conversation,Toast.LENGTH_SHORT).show(); + } + } + private void populateView() { setTitle(getString(R.string.trust_omemo_fingerprints)); ownKeys.removeAllViews(); @@ -216,6 +283,10 @@ public class TrustKeysActivity extends OmemoActivity implements OnKeyStatusUpdat if (this.mAccount != null && intent != null) { String uuid = intent.getStringExtra("conversation"); this.mConversation = xmppConnectionService.findConversationByUuid(uuid); + if (this.mPendingFingerprintVerificationUri != null) { + processFingerprintVerification(this.mPendingFingerprintVerificationUri); + this.mPendingFingerprintVerificationUri = null; + } reloadFingerprints(); populateView(); } diff --git a/src/main/res/drawable-hdpi/ic_action_camera.png b/src/main/res/drawable-hdpi/ic_action_camera.png new file mode 100644 index 00000000..60f9f100 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_action_camera.png differ diff --git a/src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png new file mode 100644 index 00000000..497c88ca Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_action_camera.png b/src/main/res/drawable-mdpi/ic_action_camera.png new file mode 100644 index 00000000..75d6b8c2 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_action_camera.png differ diff --git a/src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png new file mode 100644 index 00000000..e8305220 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_action_camera.png b/src/main/res/drawable-xhdpi/ic_action_camera.png new file mode 100644 index 00000000..31b4b221 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_action_camera.png differ diff --git a/src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png new file mode 100644 index 00000000..be9fb226 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_action_camera.png b/src/main/res/drawable-xxhdpi/ic_action_camera.png new file mode 100644 index 00000000..e7b99102 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_action_camera.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png new file mode 100644 index 00000000..c8e69dce Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png new file mode 100644 index 00000000..777658e9 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png differ diff --git a/src/main/res/menu/trust_keys.xml b/src/main/res/menu/trust_keys.xml new file mode 100644 index 00000000..90304767 --- /dev/null +++ b/src/main/res/menu/trust_keys.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/src/main/res/values-v21/themes.xml b/src/main/res/values-v21/themes.xml index d6612552..aa5e825b 100644 --- a/src/main/res/values-v21/themes.xml +++ b/src/main/res/values-v21/themes.xml @@ -60,6 +60,7 @@ @drawable/ic_settings_black_24dp @drawable/ic_import_export_white_24dp @drawable/ic_share_white_24dp + @drawable/ic_camera_alt_white_24dp @drawable/ic_notifications_black54_24dp @drawable/ic_notifications_off_black54_24dp @@ -126,6 +127,7 @@ @drawable/ic_settings_white_24dp @drawable/ic_import_export_white_24dp @drawable/ic_share_white_24dp + @drawable/ic_camera_alt_white_24dp @drawable/ic_notifications_white_24dp @drawable/ic_notifications_off_white_24dp diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index 82f9db89..7b7d2c5a 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -47,6 +47,7 @@ + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 416ee252..591d3dbc 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -703,4 +703,8 @@ This device has been verified Copy fingerprint All OMEMO keys have been verified + Barcode does not contain fingerprints for this conversation. + Verified fingerprints + Use the camera to scan a contacts barcode + Please wait for keys to be fetched diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index f15822c9..69d4d39f 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -57,6 +57,7 @@ @drawable/ic_action_settings @drawable/ic_stat_communication_import_export @drawable/ic_action_share + @drawable/ic_action_camera @drawable/ic_notifications_black54_24dp @drawable/ic_notifications_off_black54_24dp @@ -120,6 +121,7 @@ @drawable/ic_action_settings_white @drawable/ic_stat_communication_import_export @drawable/ic_action_share + @drawable/ic_action_camera @drawable/ic_notifications_white80 @drawable/ic_notifications_off_white80 -- cgit v1.2.3