Change summary
res/layout/otr_fingerprint.xml | 17 +++++
res/menu/manageaccounts_context.xml | 34 +++++----
res/values/strings.xml | 2
src/eu/siacs/conversations/crypto/OtrEngine.java | 3
src/eu/siacs/conversations/entities/Account.java | 8 ++
src/eu/siacs/conversations/ui/ManageAccountActivity.java | 13 +++
6 files changed, 61 insertions(+), 16 deletions(-)
Detailed changes
@@ -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>
@@ -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>
@@ -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>
@@ -119,6 +119,9 @@ public class OtrEngine implements OtrEngineHost {
}
public PublicKey getPublicKey() {
+ if (this.keyPair == null) {
+ return null;
+ }
return this.keyPair.getPublic();
}
@@ -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();
+ }
}
@@ -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));