aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlookshe <github@lookshe.org>2015-08-16 17:30:06 +0200
committerlookshe <github@lookshe.org>2015-08-16 17:30:06 +0200
commitea1debd8f72903bfbcc631713d803c27be433f20 (patch)
treef1846b8b9f450cda92e7baa6c6a2d233225998b6
parentb67060989302daf9850e84e2d4d4320e99bdfb83 (diff)
Fixes FS#12 - Move smiley replacement from UIHelper to Emojicon module
-rw-r--r--libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java101
-rw-r--r--libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconImageSpan.java14
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_angel.png (renamed from src/main/res/drawable/emo_im_angel.png)bin3592 -> 3592 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_cool.png (renamed from src/main/res/drawable/emo_im_cool.png)bin3466 -> 3466 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_crying.png (renamed from src/main/res/drawable/emo_im_crying.png)bin3558 -> 3558 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_embarrassed.png (renamed from src/main/res/drawable/emo_im_embarrassed.png)bin3619 -> 3619 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_foot_in_mouth.png (renamed from src/main/res/drawable/emo_im_foot_in_mouth.png)bin3603 -> 3603 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_happy.png (renamed from src/main/res/drawable/emo_im_happy.png)bin3591 -> 3591 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_heart.png (renamed from src/main/res/drawable/emo_im_heart.png)bin684 -> 684 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_kissing.png (renamed from src/main/res/drawable/emo_im_kissing.png)bin3492 -> 3492 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_laughing.png (renamed from src/main/res/drawable/emo_im_laughing.png)bin3624 -> 3624 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_lips_are_sealed.png (renamed from src/main/res/drawable/emo_im_lips_are_sealed.png)bin3670 -> 3670 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_money_mouth.png (renamed from src/main/res/drawable/emo_im_money_mouth.png)bin3649 -> 3649 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_sad.png (renamed from src/main/res/drawable/emo_im_sad.png)bin3572 -> 3572 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_surprised.png (renamed from src/main/res/drawable/emo_im_surprised.png)bin3490 -> 3490 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_tongue_sticking_out.png (renamed from src/main/res/drawable/emo_im_tongue_sticking_out.png)bin3653 -> 3653 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_undecided.png (renamed from src/main/res/drawable/emo_im_undecided.png)bin3552 -> 3552 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_winking.png (renamed from src/main/res/drawable/emo_im_winking.png)bin3568 -> 3568 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_wtf.png (renamed from src/main/res/drawable/emo_im_wtf.png)bin3591 -> 3591 bytes
-rw-r--r--libs/emojicon/src/main/res/drawable/emo_im_yelling.png (renamed from src/main/res/drawable/emo_im_yelling.png)bin3575 -> 3575 bytes
-rw-r--r--src/main/java/eu/siacs/conversations/ui/SettingsActivity.java8
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java3
-rw-r--r--src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java5
-rw-r--r--src/main/java/eu/siacs/conversations/utils/UIHelper.java129
24 files changed, 123 insertions, 137 deletions
diff --git a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java
index c84bebb8..0df62b57 100644
--- a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java
+++ b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconHandler.java
@@ -19,8 +19,14 @@ import github.ankushsachdeva.emojicon.R;
import android.content.Context;
import android.text.Spannable;
+import android.text.style.ImageSpan;
import android.util.SparseIntArray;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
@@ -28,6 +34,16 @@ public final class EmojiconHandler {
private EmojiconHandler() {
}
+ public static boolean isParseEmoticons() {
+ return bParseEmoticons;
+ }
+
+ public static void setParseEmoticons(boolean bParseEmoticons) {
+ EmojiconHandler.bParseEmoticons = bParseEmoticons;
+ }
+
+ private static boolean bParseEmoticons = true;
+
private static final SparseIntArray sEmojisMap = new SparseIntArray(846);
private static final SparseIntArray sSoftbanksMap = new SparseIntArray(471);
@@ -1384,6 +1400,88 @@ public final class EmojiconHandler {
addEmojis(context, text, emojiSize, 0, -1);
}
+ public static final Map<Pattern, Integer> ANDROID_EMOTICONS = new HashMap<Pattern, Integer>();
+
+ private static final Spannable.Factory spannableFactory = Spannable.Factory
+ .getInstance();
+
+ static {
+ addPattern(ANDROID_EMOTICONS, ":)", R.drawable.emo_im_happy);
+ addPattern(ANDROID_EMOTICONS, ":-)", R.drawable.emo_im_happy);
+ addPattern(ANDROID_EMOTICONS, ":(", R.drawable.emo_im_sad);
+ addPattern(ANDROID_EMOTICONS, ":-(", R.drawable.emo_im_sad);
+ addPattern(ANDROID_EMOTICONS, ";)", R.drawable.emo_im_winking);
+ addPattern(ANDROID_EMOTICONS, ";-)", R.drawable.emo_im_winking);
+ addPattern(ANDROID_EMOTICONS, ":P",
+ R.drawable.emo_im_tongue_sticking_out);
+ addPattern(ANDROID_EMOTICONS, ":-P",
+ R.drawable.emo_im_tongue_sticking_out);
+ addPattern(ANDROID_EMOTICONS, "=-O", R.drawable.emo_im_surprised);
+ addPattern(ANDROID_EMOTICONS, ":*", R.drawable.emo_im_kissing);
+ addPattern(ANDROID_EMOTICONS, ":-*", R.drawable.emo_im_kissing);
+ addPattern(ANDROID_EMOTICONS, ":O", R.drawable.emo_im_wtf);
+ addPattern(ANDROID_EMOTICONS, ":-O", R.drawable.emo_im_wtf);
+ addPattern(ANDROID_EMOTICONS, "B)", R.drawable.emo_im_cool);
+ addPattern(ANDROID_EMOTICONS, "B-)", R.drawable.emo_im_cool);
+ addPattern(ANDROID_EMOTICONS, "8)", R.drawable.emo_im_cool);
+ addPattern(ANDROID_EMOTICONS, "8-)", R.drawable.emo_im_cool);
+ addPattern(ANDROID_EMOTICONS, ":$", R.drawable.emo_im_money_mouth);
+ addPattern(ANDROID_EMOTICONS, ":-$", R.drawable.emo_im_money_mouth);
+ addPattern(ANDROID_EMOTICONS, ":-!", R.drawable.emo_im_foot_in_mouth);
+ addPattern(ANDROID_EMOTICONS, ":-[", R.drawable.emo_im_embarrassed);
+ addPattern(ANDROID_EMOTICONS, "O:)", R.drawable.emo_im_angel);
+ addPattern(ANDROID_EMOTICONS, "O:-)", R.drawable.emo_im_angel);
+ addPattern(ANDROID_EMOTICONS, ":\\", R.drawable.emo_im_undecided);
+ addPattern(ANDROID_EMOTICONS, ":-\\", R.drawable.emo_im_undecided);
+ addPattern(ANDROID_EMOTICONS, ":'(", R.drawable.emo_im_crying);
+ addPattern(ANDROID_EMOTICONS, ":D", R.drawable.emo_im_laughing);
+ addPattern(ANDROID_EMOTICONS, ":-D", R.drawable.emo_im_laughing);
+ addPattern(ANDROID_EMOTICONS, "O_o", R.drawable.emo_im_wtf);
+ addPattern(ANDROID_EMOTICONS, "o_O", R.drawable.emo_im_wtf);
+ addPattern(ANDROID_EMOTICONS, ">:O", R.drawable.emo_im_yelling);
+ addPattern(ANDROID_EMOTICONS, ">:0", R.drawable.emo_im_yelling);
+ addPattern(ANDROID_EMOTICONS, ":S", R.drawable.emo_im_lips_are_sealed);
+ addPattern(ANDROID_EMOTICONS, ":-S", R.drawable.emo_im_lips_are_sealed);
+ addPattern(ANDROID_EMOTICONS, "<3", R.drawable.emo_im_heart);
+ }
+
+ private static void addPattern(Map<Pattern, Integer> map, String smile,
+ int resource) {
+ map.put(Pattern.compile(Pattern.quote(smile)), resource);
+ }
+
+ private static boolean getSmiledText(Context context, Spannable spannable) {
+ // remove spans throughout all text
+ ImageSpan[] oldSpans = spannable.getSpans(0, spannable.length(), EmojiconImageSpan.class);
+ for (int i = 0; i < oldSpans.length; i++) {
+ spannable.removeSpan(oldSpans[i]);
+ }
+ boolean hasChanges = false;
+ Map<Pattern, Integer> emoticons = ANDROID_EMOTICONS;
+ for (Map.Entry<Pattern, Integer> entry : emoticons.entrySet()) {
+ Matcher matcher = entry.getKey().matcher(spannable);
+ while (matcher.find()) {
+ boolean set = true;
+ for (EmojiconImageSpan span : spannable.getSpans(matcher.start(),
+ matcher.end(), EmojiconImageSpan.class))
+ if (spannable.getSpanStart(span) >= matcher.start()
+ && spannable.getSpanEnd(span) <= matcher.end())
+ spannable.removeSpan(span);
+ else {
+ set = false;
+ break;
+ }
+ if (set) {
+ spannable.setSpan(new EmojiconImageSpan(context, entry.getValue()),
+ matcher.start(), matcher.end(),
+ Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ hasChanges = true;
+ }
+ }
+ }
+ return hasChanges;
+ }
+
/**
* Convert emoji characters of the given Spannable to the according emojicon.
*
@@ -1394,6 +1492,9 @@ public final class EmojiconHandler {
* @param length
*/
public static void addEmojis(Context context, Spannable text, int emojiSize, int index, int length) {
+ if (isParseEmoticons()) {
+ getSmiledText(context, text);
+ }
int textLength = text.length();
int textLengthToProcessMax = textLength - index;
int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length+index);
diff --git a/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconImageSpan.java b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconImageSpan.java
new file mode 100644
index 00000000..8ad8fbb5
--- /dev/null
+++ b/libs/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconImageSpan.java
@@ -0,0 +1,14 @@
+package github.ankushsachdeva.emojicon;
+
+import android.content.Context;
+import android.text.style.ImageSpan;
+
+/**
+ * Created by lookshe on 16.08.2015.
+ */
+public class EmojiconImageSpan extends ImageSpan {
+
+ EmojiconImageSpan(Context context, int resourceId) {
+ super(context, resourceId);
+ }
+}
diff --git a/src/main/res/drawable/emo_im_angel.png b/libs/emojicon/src/main/res/drawable/emo_im_angel.png
index c34dfa69..c34dfa69 100644
--- a/src/main/res/drawable/emo_im_angel.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_angel.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_cool.png b/libs/emojicon/src/main/res/drawable/emo_im_cool.png
index d8eeb34e..d8eeb34e 100644
--- a/src/main/res/drawable/emo_im_cool.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_cool.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_crying.png b/libs/emojicon/src/main/res/drawable/emo_im_crying.png
index 1cafdb32..1cafdb32 100644
--- a/src/main/res/drawable/emo_im_crying.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_crying.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_embarrassed.png b/libs/emojicon/src/main/res/drawable/emo_im_embarrassed.png
index e4db9634..e4db9634 100644
--- a/src/main/res/drawable/emo_im_embarrassed.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_embarrassed.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_foot_in_mouth.png b/libs/emojicon/src/main/res/drawable/emo_im_foot_in_mouth.png
index 09d1fba6..09d1fba6 100644
--- a/src/main/res/drawable/emo_im_foot_in_mouth.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_foot_in_mouth.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_happy.png b/libs/emojicon/src/main/res/drawable/emo_im_happy.png
index b86602ae..b86602ae 100644
--- a/src/main/res/drawable/emo_im_happy.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_happy.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_heart.png b/libs/emojicon/src/main/res/drawable/emo_im_heart.png
index d88bcccd..d88bcccd 100644
--- a/src/main/res/drawable/emo_im_heart.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_heart.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_kissing.png b/libs/emojicon/src/main/res/drawable/emo_im_kissing.png
index 56378f6a..56378f6a 100644
--- a/src/main/res/drawable/emo_im_kissing.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_kissing.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_laughing.png b/libs/emojicon/src/main/res/drawable/emo_im_laughing.png
index 980bf281..980bf281 100644
--- a/src/main/res/drawable/emo_im_laughing.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_laughing.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_lips_are_sealed.png b/libs/emojicon/src/main/res/drawable/emo_im_lips_are_sealed.png
index f2de993b..f2de993b 100644
--- a/src/main/res/drawable/emo_im_lips_are_sealed.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_lips_are_sealed.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_money_mouth.png b/libs/emojicon/src/main/res/drawable/emo_im_money_mouth.png
index 08c53fd6..08c53fd6 100644
--- a/src/main/res/drawable/emo_im_money_mouth.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_money_mouth.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_sad.png b/libs/emojicon/src/main/res/drawable/emo_im_sad.png
index 31c08d06..31c08d06 100644
--- a/src/main/res/drawable/emo_im_sad.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_sad.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_surprised.png b/libs/emojicon/src/main/res/drawable/emo_im_surprised.png
index abe8c7ad..abe8c7ad 100644
--- a/src/main/res/drawable/emo_im_surprised.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_surprised.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_tongue_sticking_out.png b/libs/emojicon/src/main/res/drawable/emo_im_tongue_sticking_out.png
index 6f0f47b0..6f0f47b0 100644
--- a/src/main/res/drawable/emo_im_tongue_sticking_out.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_tongue_sticking_out.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_undecided.png b/libs/emojicon/src/main/res/drawable/emo_im_undecided.png
index eb4f8c5b..eb4f8c5b 100644
--- a/src/main/res/drawable/emo_im_undecided.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_undecided.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_winking.png b/libs/emojicon/src/main/res/drawable/emo_im_winking.png
index 568562ad..568562ad 100644
--- a/src/main/res/drawable/emo_im_winking.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_winking.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_wtf.png b/libs/emojicon/src/main/res/drawable/emo_im_wtf.png
index 41dd47fc..41dd47fc 100644
--- a/src/main/res/drawable/emo_im_wtf.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_wtf.png
Binary files differ
diff --git a/src/main/res/drawable/emo_im_yelling.png b/libs/emojicon/src/main/res/drawable/emo_im_yelling.png
index c3c8612b..c3c8612b 100644
--- a/src/main/res/drawable/emo_im_yelling.png
+++ b/libs/emojicon/src/main/res/drawable/emo_im_yelling.png
Binary files differ
diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
index f3d5d8bd..df2933c9 100644
--- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
+++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
@@ -12,6 +12,7 @@ import de.duenndns.ssl.MemorizingTrustManager;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
import eu.siacs.conversations.xmpp.XmppConnection;
+import github.ankushsachdeva.emojicon.EmojiconHandler;
import android.app.AlertDialog;
import android.app.Fragment;
@@ -165,8 +166,11 @@ public class SettingsActivity extends XmppActivity implements
}
break;
case "dont_trust_system_cas":
- xmppConnectionService.updateMemorizingTrustmanager();
- reconnectAccounts();
+ xmppConnectionService.updateMemorizingTrustmanager();
+ reconnectAccounts();
+ break;
+ case "parse_emoticons":
+ EmojiconHandler.setParseEmoticons(Settings.PARSE_EMOTICONS);
break;
}
}
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
index c42dd305..7443c0cb 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
@@ -119,8 +119,7 @@ public class ConversationAdapter extends ArrayAdapter<Conversation> {
Pair<String,Boolean> preview = UIHelper.getMessagePreview(activity,message);
mLastMessage.setVisibility(View.VISIBLE);
imagePreview.setVisibility(View.GONE);
- boolean parseEmoticons = Settings.PARSE_EMOTICONS;
- CharSequence msgText = parseEmoticons ? UIHelper.transformAsciiEmoticons(getContext(), preview.first) : preview.first;
+ CharSequence msgText = preview.first;
mLastMessage.setText(msgText);
if (preview.second) {
if (conversation.isRead()) {
diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
index 9699f7d4..b6979cc6 100644
--- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
+++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
@@ -252,10 +252,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
viewHolder.messageBody.setText(span);
} else {
- boolean parseEmoticons = Settings.PARSE_EMOTICONS;
- viewHolder.messageBody.setText(parseEmoticons ? UIHelper
- .transformAsciiEmoticons(getContext(), message.getMergedBody())
- : formattedBody);
+ viewHolder.messageBody.setText(formattedBody);
}
} else {
String privateMarker;
diff --git a/src/main/java/eu/siacs/conversations/utils/UIHelper.java b/src/main/java/eu/siacs/conversations/utils/UIHelper.java
index 1e3d1caf..76f48037 100644
--- a/src/main/java/eu/siacs/conversations/utils/UIHelper.java
+++ b/src/main/java/eu/siacs/conversations/utils/UIHelper.java
@@ -142,135 +142,6 @@ public class UIHelper {
}
}
- public static final Map<Pattern, Integer> ANDROID_EMOTICONS = new HashMap<Pattern, Integer>();
-
- private static final Factory spannableFactory = Spannable.Factory
- .getInstance();
-
- static {
- addPattern(ANDROID_EMOTICONS, ":)", R.drawable.emo_im_happy);
- addPattern(ANDROID_EMOTICONS, ":-)", R.drawable.emo_im_happy);
- addPattern(ANDROID_EMOTICONS, ":(", R.drawable.emo_im_sad);
- addPattern(ANDROID_EMOTICONS, ":-(", R.drawable.emo_im_sad);
- addPattern(ANDROID_EMOTICONS, ";)", R.drawable.emo_im_winking);
- addPattern(ANDROID_EMOTICONS, ";-)", R.drawable.emo_im_winking);
- addPattern(ANDROID_EMOTICONS, ":P",
- R.drawable.emo_im_tongue_sticking_out);
- addPattern(ANDROID_EMOTICONS, ":-P",
- R.drawable.emo_im_tongue_sticking_out);
- addPattern(ANDROID_EMOTICONS, "=-O", R.drawable.emo_im_surprised);
- addPattern(ANDROID_EMOTICONS, ":*", R.drawable.emo_im_kissing);
- addPattern(ANDROID_EMOTICONS, ":-*", R.drawable.emo_im_kissing);
- addPattern(ANDROID_EMOTICONS, ":O", R.drawable.emo_im_wtf);
- addPattern(ANDROID_EMOTICONS, ":-O", R.drawable.emo_im_wtf);
- addPattern(ANDROID_EMOTICONS, "B)", R.drawable.emo_im_cool);
- addPattern(ANDROID_EMOTICONS, "B-)", R.drawable.emo_im_cool);
- addPattern(ANDROID_EMOTICONS, "8)", R.drawable.emo_im_cool);
- addPattern(ANDROID_EMOTICONS, "8-)", R.drawable.emo_im_cool);
- addPattern(ANDROID_EMOTICONS, ":$", R.drawable.emo_im_money_mouth);
- addPattern(ANDROID_EMOTICONS, ":-$", R.drawable.emo_im_money_mouth);
- addPattern(ANDROID_EMOTICONS, ":-!", R.drawable.emo_im_foot_in_mouth);
- addPattern(ANDROID_EMOTICONS, ":-[", R.drawable.emo_im_embarrassed);
- addPattern(ANDROID_EMOTICONS, "O:)", R.drawable.emo_im_angel);
- addPattern(ANDROID_EMOTICONS, "O:-)", R.drawable.emo_im_angel);
- addPattern(ANDROID_EMOTICONS, ":\\", R.drawable.emo_im_undecided);
- addPattern(ANDROID_EMOTICONS, ":-\\", R.drawable.emo_im_undecided);
- addPattern(ANDROID_EMOTICONS, ":'(", R.drawable.emo_im_crying);
- addPattern(ANDROID_EMOTICONS, ":D", R.drawable.emo_im_laughing);
- addPattern(ANDROID_EMOTICONS, ":-D", R.drawable.emo_im_laughing);
- addPattern(ANDROID_EMOTICONS, "O_o", R.drawable.emo_im_wtf);
- addPattern(ANDROID_EMOTICONS, "o_O", R.drawable.emo_im_wtf);
- addPattern(ANDROID_EMOTICONS, ">:O", R.drawable.emo_im_yelling);
- addPattern(ANDROID_EMOTICONS, ">:0", R.drawable.emo_im_yelling);
- addPattern(ANDROID_EMOTICONS, ":S", R.drawable.emo_im_lips_are_sealed);
- addPattern(ANDROID_EMOTICONS, ":-S", R.drawable.emo_im_lips_are_sealed);
- addPattern(ANDROID_EMOTICONS, "<3", R.drawable.emo_im_heart);
- }
-
- private static void addPattern(Map<Pattern, Integer> map, String smile,
- int resource) {
- map.put(Pattern.compile(Pattern.quote(smile)), resource);
- }
-
- private static boolean getSmiledText(Context context, Spannable spannable) {
- boolean hasChanges = false;
- Map<Pattern, Integer> emoticons = ANDROID_EMOTICONS;
- for (Entry<Pattern, Integer> entry : emoticons.entrySet()) {
- Matcher matcher = entry.getKey().matcher(spannable);
- while (matcher.find()) {
- boolean set = true;
- for (ImageSpan span : spannable.getSpans(matcher.start(),
- matcher.end(), ImageSpan.class))
- if (spannable.getSpanStart(span) >= matcher.start()
- && spannable.getSpanEnd(span) <= matcher.end())
- spannable.removeSpan(span);
- else {
- set = false;
- break;
- }
- if (set) {
- spannable.setSpan(new ImageSpan(context, entry.getValue()),
- matcher.start(), matcher.end(),
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- hasChanges = true;
- }
- }
- }
- return hasChanges;
- }
-
- private final static class EmoticonPattern {
- Pattern pattern;
- String replacement;
-
- EmoticonPattern(String ascii, int unicode) {
- this.pattern = Pattern.compile("(?<=(^|\\s))" + ascii
- + "(?=(\\s|$))");
- this.replacement = new String(new int[] { unicode, }, 0, 1);
- }
-
- String replaceAll(String body) {
- return pattern.matcher(body).replaceAll(replacement);
- }
- }
-
- private static final EmoticonPattern[] patterns = new EmoticonPattern[] {
- new EmoticonPattern(":-?D", 0x1f600),
- new EmoticonPattern("\\^\\^", 0x1f601),
- new EmoticonPattern(":'D", 0x1f602),
- new EmoticonPattern("\\]-?D", 0x1f608),
- new EmoticonPattern(";-?\\)", 0x1f609),
- new EmoticonPattern(":-?\\)", 0x1f60a),
- new EmoticonPattern("[B8]-?\\)", 0x1f60e),
- new EmoticonPattern(":-?\\|", 0x1f610),
- new EmoticonPattern(":-?[/\\\\]", 0x1f615),
- new EmoticonPattern(":-?\\*", 0x1f617),
- new EmoticonPattern(":-?[Ppb]", 0x1f61b),
- new EmoticonPattern(":-?\\(", 0x1f61e),
- new EmoticonPattern(":-?[0Oo]", 0x1f62e),
- new EmoticonPattern("\\\\o/", 0x1F631), };
-
- public static String transformAsciiEmoticonsToUtf8(String body) {
- if (body != null) {
- for (EmoticonPattern p : patterns) {
- body = p.replaceAll(body);
- }
- }
- return body;
- }
-
- public static Spannable transformAsciiEmoticons(Context context, String body) {
- Spannable spannable;
- if (Config.UTF8_EMOTICONS) {
- spannable = spannableFactory.newSpannable(transformAsciiEmoticonsToUtf8(body));
- }
- else {
- spannable = spannableFactory.newSpannable(body);
- getSmiledText(context, spannable);
- }
- return spannable;
- }
-
public static int getColorForName(String name) {
if (name.isEmpty()) {
return 0xFF202020;