diff options
-rw-r--r-- | res/layout/otr_fingerprint.xml | 17 | ||||
-rw-r--r-- | res/menu/manageaccounts_context.xml | 34 | ||||
-rw-r--r-- | res/values/strings.xml | 2 | ||||
-rw-r--r-- | src/eu/siacs/conversations/crypto/OtrEngine.java | 3 | ||||
-rw-r--r-- | src/eu/siacs/conversations/entities/Account.java | 8 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ManageAccountActivity.java | 13 |
6 files changed, 61 insertions, 16 deletions
diff --git a/res/layout/otr_fingerprint.xml b/res/layout/otr_fingerprint.xml new file mode 100644 index 00000000..28b6a555 --- /dev/null +++ b/res/layout/otr_fingerprint.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="8dp"> + + <TextView + android:id="@+id/otr_fingerprint" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textSize="20sp" + android:textStyle="bold" + android:typeface="monospace" + android:text="@string/no_otr_fingerprint"/> + +</LinearLayout> diff --git a/res/menu/manageaccounts_context.xml b/res/menu/manageaccounts_context.xml index 765ed4e9..da8c8bf2 100644 --- a/res/menu/manageaccounts_context.xml +++ b/res/menu/manageaccounts_context.xml @@ -1,34 +1,36 @@ <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > + <item android:id="@+id/mgmt_account_edit" android:icon="@drawable/ic_action_edit" - android:title="Edit Account" - android:showAsAction="always" /> + android:showAsAction="always" + android:title="Edit Account"/> <item android:id="@+id/mgmt_account_delete" android:icon="@drawable/ic_action_delete" - android:title="Delete" android:showAsAction="always" - /> + android:title="Delete"/> <item android:id="@+id/mgmt_account_disable" - android:title="Temporarily disable" - android:showAsAction="never"/> + android:showAsAction="never" + android:title="Temporarily disable"/> <item android:id="@+id/mgmt_account_enable" - android:title="Enable" android:showAsAction="never" + android:title="Enable" android:visible="false"/> - - <item + <item android:id="@+id/mgmt_account_announce_pgp" android:showAsAction="never" - android:title="@string/announce_pgp" /> - <item - android:id="@+id/mgmt_account_info" - android:title="@string/account_info" - android:showAsAction="never" - /> + android:title="@string/announce_pgp"/> + <item + android:id="@+id/mgmt_otr_key" + android:showAsAction="never" + android:title="@string/show_otr_key"/> + <item + android:id="@+id/mgmt_account_info" + android:showAsAction="never" + android:title="@string/account_info"/> -</menu> +</menu>
\ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index aa53d081..062b2b0d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -27,4 +27,6 @@ <string name="register_account">Register new account on server</string> <string name="share_with">Share with</string> <string name="ask_again"><u>Click to ask again</u></string> + <string name="show_otr_key">OTR fingerprint</string> + <string name="no_otr_fingerprint">No OTR Fingerprint generated. Just go ahead an start an encrypted conversation</string> </resources> diff --git a/src/eu/siacs/conversations/crypto/OtrEngine.java b/src/eu/siacs/conversations/crypto/OtrEngine.java index ca6230e1..32cd26b6 100644 --- a/src/eu/siacs/conversations/crypto/OtrEngine.java +++ b/src/eu/siacs/conversations/crypto/OtrEngine.java @@ -119,6 +119,9 @@ public class OtrEngine implements OtrEngineHost { } public PublicKey getPublicKey() { + if (this.keyPair == null) { + return null; + } return this.keyPair.getPublic(); } diff --git a/src/eu/siacs/conversations/entities/Account.java b/src/eu/siacs/conversations/entities/Account.java index d9a3ef03..41d94fee 100644 --- a/src/eu/siacs/conversations/entities/Account.java +++ b/src/eu/siacs/conversations/entities/Account.java @@ -217,6 +217,9 @@ public class Account extends AbstractEntity{ if (this.otrFingerprint == null) { try { DSAPublicKey pubkey = (DSAPublicKey) this.otrEngine.getPublicKey(); + if (pubkey == null) { + return null; + } StringBuilder builder = new StringBuilder(new OtrCryptoEngineImpl().getFingerprint(pubkey)); builder.insert(8, " "); builder.insert(17, " "); @@ -241,4 +244,9 @@ public class Account extends AbstractEntity{ public void setRosterVersion(String version) { this.rosterVersion = version; } + + public String getOtrFingerprint(Context applicationContext) { + this.getOtrEngine(applicationContext); + return this.getOtrFingerprint(); + } } diff --git a/src/eu/siacs/conversations/ui/ManageAccountActivity.java b/src/eu/siacs/conversations/ui/ManageAccountActivity.java index 7cf39e78..8798a74c 100644 --- a/src/eu/siacs/conversations/ui/ManageAccountActivity.java +++ b/src/eu/siacs/conversations/ui/ManageAccountActivity.java @@ -12,6 +12,7 @@ import eu.siacs.conversations.xmpp.OnTLSExceptionReceived; import eu.siacs.conversations.xmpp.XmppConnection; import android.app.Activity; import android.app.AlertDialog; +import android.content.ClipData.Item; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; @@ -286,6 +287,18 @@ public class ManageAccountActivity extends XmppActivity { } } } + } else if (item.getItemId() == R.id.mgmt_otr_key) { + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + builder.setTitle("OTR Fingerprint"); + String fingerprintTxt = selectedAccountForActionMode.getOtrFingerprint(getApplicationContext()); + View view = (View) getLayoutInflater().inflate(R.layout.otr_fingerprint, null); + if (fingerprintTxt!=null) { + TextView fingerprint = (TextView) view.findViewById(R.id.otr_fingerprint); + fingerprint.setText(fingerprintTxt); + } + builder.setView(view); + builder.setPositiveButton("Done", null); + builder.create().show(); } else if (item.getItemId() == R.id.mgmt_account_info) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(getString(R.string.account_info)); |