Get signature from settings for compose.
Change-Id: Ie50c21e77ecf8a222b7be24910511d65b8cfea8b
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e37a7a2..da5f172 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -88,6 +88,8 @@
<string name="confirm_send_message">Send this message?</string>
<!-- Displayed for one second after discarding draft message [CHAR LIMIT=50]-->
<string name="message_discarded">Message discarded.</string>
+ <!-- Formatting string for the user's signaure. [CHAR LIMIT=10] -->
+ <string name="signature">\n\n<xliff:g id="signature">%s</xliff:g></string>
<!-- Menu item: send this message -->
<string name="send">Send</string>
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index cd478ef..6eae203 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -766,6 +766,7 @@
/* package for testing */
ArrayList<SendOrSaveTask> mActiveTasks = Lists.newArrayList();
private int mRequestId;
+ private String mSignature;
/*package*/ static class SendOrSaveMessage {
final Account mAccount;
@@ -891,16 +892,41 @@
}
/**
- * Check if the ComposeArea believes all fields are blank.
+ * Check if all fields are blank.
* @return boolean
*/
public boolean isBlank() {
return mSubject.getText().length() == 0
- && mBodyView.getText().length() == 0
- && mTo.length() == 0
- && mCc.length() == 0
- && mBcc.length() == 0
- && mAttachmentsView.getAttachments().size() == 0;
+ && (mBodyView.getText().length() == 0 || getSignatureStartPosition(mSignature,
+ mBodyView.getText().toString()) == 0)
+ && mTo.length() == 0
+ && mCc.length() == 0 && mBcc.length() == 0
+ && mAttachmentsView.getAttachments().size() == 0;
+ }
+
+ @VisibleForTesting
+ protected int getSignatureStartPosition(String signature, String bodyText) {
+ int startPos = -1;
+
+ if (TextUtils.isEmpty(signature) || TextUtils.isEmpty(bodyText)) {
+ return startPos;
+ }
+
+ int bodyLength = bodyText.length();
+ int signatureLength = signature.length();
+ String printableVersion = convertToPrintableSignature(signature);
+ int printableLength = printableVersion.length();
+
+ if (bodyLength >= printableLength
+ && bodyText.substring(bodyLength - printableLength)
+ .equals(printableVersion)) {
+ startPos = bodyLength - printableLength;
+ } else if (bodyLength >= signatureLength
+ && bodyText.substring(bodyLength - signatureLength)
+ .equals(signature)) {
+ startPos = bodyLength - signatureLength;
+ }
+ return startPos;
}
/**
@@ -1354,11 +1380,33 @@
/**
* Set the body of the message.
+ *
* @param text
* @param withSignature True to append a signature.
*/
public void setBody(CharSequence text, boolean withSignature) {
mBodyView.setText(text);
+ if (withSignature) {
+ appendSignature();
+ }
+ }
+
+ private void appendSignature() {
+ mSignature = mCachedSettings != null ? mCachedSettings.signature : null;
+ if (!TextUtils.isEmpty(mSignature)) {
+ // Appending a signature does not count as changing text.
+ mBodyView.removeTextChangedListener(this);
+ mBodyView.append(convertToPrintableSignature(mSignature));
+ mBodyView.addTextChangedListener(this);
+ }
+ }
+
+ private String convertToPrintableSignature(String signature) {
+ String signatureResource = getResources().getString(R.string.signature);
+ if (signature == null) {
+ signature = "";
+ }
+ return String.format(signatureResource, signature);
}
@Override
@@ -1610,6 +1658,7 @@
if (data != null) {
data.moveToFirst();
mCachedSettings = new Settings(data);
+ appendSignature();
}
}
}