/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.android.util; import android.content.Context; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ImageSpan; import java.util.ArrayList; /** * Parses a text message typed by the user looking for smileys. */ public class SmileyParser extends AbstractMessageParser { private SmileyResources mRes; public SmileyParser(String text, SmileyResources res) { super(text, true, // smilies false, // acronyms false, // formatting false, // urls false, // music false // me text ); mRes = res; } @Override protected Resources getResources() { return mRes; } /** * Retrieves the parsed text as a spannable string object. * @param context the context for fetching smiley resources. * @return the spannable string as CharSequence. */ public CharSequence getSpannableString(Context context) { SpannableStringBuilder builder = new SpannableStringBuilder(); if (getPartCount() == 0) { return ""; } // should have only one part since we parse smiley only Part part = getPart(0); ArrayList tokens = part.getTokens(); int len = tokens.size(); for (int i = 0; i < len; i++) { Token token = tokens.get(i); int start = builder.length(); builder.append(token.getRawText()); if (token.getType() == AbstractMessageParser.Token.Type.SMILEY) { int resid = mRes.getSmileyRes(token.getRawText()); if (resid != -1) { builder.setSpan(new ImageSpan(context, resid), start, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } return builder; } }