diff --git a/res/layout/auto_initiate_activity.xml b/res/layout/auto_initiate_activity.xml
index 636a521abc..1c9c039bcf 100644
--- a/res/layout/auto_initiate_activity.xml
+++ b/res/layout/auto_initiate_activity.xml
@@ -9,12 +9,15 @@
<TextView android:id="@+id/description_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
+ android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
- android:text="@string/you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_key_exchange_so_you_can_communicate_securely"/>
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session"/>
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
+ android:layout_marginBottom="10dip"
android:orientation="horizontal">
<Button android:id="@+id/initiate_button"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4619c6478f..d9f0c093de 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -204,7 +204,7 @@
<string name="most_recent_from_s">Most recent from: %s</string>
<!-- auto_initiate_activity -->
- <string name="you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_key_exchange_so_you_can_communicate_securely">You have received a message from someone who supports TextSecure encrypted sessions. Would you like to initiate a key exchange so you can communicate securely?</string>
+ <string name="you_have_received_a_message_from_someone_who_supports_textsecure_encrypted_sessions_would_you_like_to_initiate_a_secure_session">You have received a message from someone who supports TextSecure encrypted sessions. Would you like to initiate a secure session?</string>
<string name="initiate_exchange">Initiate Exchange</string>
<!-- change_passphrase_activity -->
diff --git a/src/org/thoughtcrime/securesms/AutoInitiateActivity.java b/src/org/thoughtcrime/securesms/AutoInitiateActivity.java
index 7ad4bd14bc..95d3ad8ce5 100644
--- a/src/org/thoughtcrime/securesms/AutoInitiateActivity.java
+++ b/src/org/thoughtcrime/securesms/AutoInitiateActivity.java
@@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.crypto.KeyExchangeInitiator;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.LocalKeyRecord;
import org.thoughtcrime.securesms.database.RemoteKeyRecord;
+import org.thoughtcrime.securesms.protocol.Tag;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.MemoryCleaner;
@@ -98,13 +99,9 @@ public class AutoInitiateActivity extends SherlockActivity {
Recipient recipient, String message, long threadId)
{
return
- isMessageTagged(message) &&
- isThreadQualified(context, threadId) &&
- isExchangeQualified(context, masterSecret, recipient);
- }
-
- private static boolean isMessageTagged(String message) {
- return message.endsWith(" ");
+ Tag.isTagged(message) &&
+ isThreadQualified(context, threadId) &&
+ isExchangeQualified(context, masterSecret, recipient);
}
private static boolean isThreadQualified(Context context, long threadId) {
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index 6299fa6874..118b6b88a0 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -23,7 +23,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
@@ -59,6 +58,7 @@ import org.thoughtcrime.securesms.mms.AttachmentManager;
import org.thoughtcrime.securesms.mms.AttachmentTypeSelectorAdapter;
import org.thoughtcrime.securesms.mms.MediaTooLargeException;
import org.thoughtcrime.securesms.mms.SlideDeck;
+import org.thoughtcrime.securesms.protocol.Tag;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -542,14 +542,13 @@ public class ConversationActivity extends SherlockFragmentActivity
}
private String getMessage() throws InvalidMessageException {
- SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
- String rawText = composeText.getText().toString();
+ String rawText = composeText.getText().toString();
if (rawText.length() < 1 && !attachmentManager.isAttachmentPresent())
throw new InvalidMessageException(getString(R.string.message_is_empty_exclamation));
- if (!sendEncrypted && sp.getBoolean(ApplicationPreferencesActivity.WHITESPACE_PREF, true) && rawText.length() <= 145)
- rawText = rawText + " ";
+ if (!sendEncrypted && Tag.isTaggable(this, rawText))
+ rawText = Tag.getTaggedMessage(rawText);
return rawText;
}
diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java
index ffbfa456da..edf7487697 100644
--- a/src/org/thoughtcrime/securesms/ConversationItem.java
+++ b/src/org/thoughtcrime/securesms/ConversationItem.java
@@ -47,6 +47,7 @@ import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.MmsMessageRecord;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
+import org.thoughtcrime.securesms.protocol.Tag;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientFactory;
import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
@@ -211,10 +212,11 @@ public class ConversationItem extends LinearLayout {
private void setBodyText(MessageRecord messageRecord) {
String body = messageRecord.getBody();
- if (messageRecord.isKeyExchange() && messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.key_exchange_message2);
- else if (messageRecord.isProcessedKeyExchange() && !messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.received_and_processed_key_exchange_message);
- else if (messageRecord.isStaleKeyExchange()) body = "\n" + getContext().getString(R.string.error_received_stale_key_exchange_message);
- else if (messageRecord.isKeyExchange() && !messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.received_key_exchange_message_click_to_process);
+ if (messageRecord.isKeyExchange() && messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.key_exchange_message2);
+ else if (messageRecord.isProcessedKeyExchange() && !messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.received_and_processed_key_exchange_message);
+ else if (messageRecord.isStaleKeyExchange()) body = "\n" + getContext().getString(R.string.error_received_stale_key_exchange_message);
+ else if (messageRecord.isKeyExchange() && !messageRecord.isOutgoing()) body = "\n" + getContext().getString(R.string.received_key_exchange_message_click_to_process);
+ else if (messageRecord.isOutgoing() && Tag.isTagged(body)) body = Tag.stripTag(body);
bodyText.setText(body, TextView.BufferType.SPANNABLE);
diff --git a/src/org/thoughtcrime/securesms/protocol/Tag.java b/src/org/thoughtcrime/securesms/protocol/Tag.java
new file mode 100644
index 0000000000..849d4f48e9
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/protocol/Tag.java
@@ -0,0 +1,36 @@
+package org.thoughtcrime.securesms.protocol;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
+
+public class Tag {
+
+ public static final String WHITESPACE_TAG = " ";
+
+ public static boolean isTaggable(Context context, String message) {
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
+
+ return sp.getBoolean(ApplicationPreferencesActivity.WHITESPACE_PREF, true) &&
+ message.matches(".*[^\\s].*") &&
+ message.replaceAll("\\s+$", "").length() + WHITESPACE_TAG.length() <= 158;
+ }
+
+ public static boolean isTagged(String message) {
+ return message.matches(".*[^\\s]" + WHITESPACE_TAG + "$");
+ }
+
+ public static String getTaggedMessage(String message) {
+ return message.replaceAll("\\s+$", "") + WHITESPACE_TAG;
+ }
+
+ public static String stripTag(String message) {
+ if (isTagged(message))
+ return message.substring(0, message.length() - WHITESPACE_TAG.length());
+
+ return message;
+ }
+
+}