Search in sources :

Example 36 with SpannedString

use of android.text.SpannedString in project Anki-Android by Ramblurr.

the class Reviewer method updateCard.

private void updateCard(String content) {
    // Log.i(AnkiDroidApp.TAG, "updateCard");
    Lookup.initialize(this, mCurrentCard.getDid());
    if (mCurrentSimpleInterface) {
        fillFlashcard(mShowAnimations);
    } else {
        // Check whether there is a hard coded font-size in the content and apply the relative font size
        // Check needs to be done before CSS is applied to content;
        content = recalculateHardCodedFontSize(content, mDisplayFontSize);
        // Add CSS for font color and font size
        if (mCurrentCard == null) {
            mCard.getSettings().setDefaultFontSize(calculateDynamicFontSize(content));
        }
        // don't play question sound again when displaying answer
        String question = "";
        String answer = "";
        Sound.resetSounds();
        int qa = MetaDB.LANGUAGES_QA_QUESTION;
        if (sDisplayAnswer) {
            qa = MetaDB.LANGUAGES_QA_ANSWER;
        }
        answer = Sound.parseSounds(mBaseUrl, content, mSpeakText, qa);
        content = question + answer;
        // In order to display the bold style correctly, we have to change
        // font-weight to 700
        content = content.replace("font-weight:600;", "font-weight:700;");
        // CSS class for card-specific styling
        String cardClass = "card card" + (mCurrentCard.getOrd() + 1);
        if (mPrefCenterVertically) {
            cardClass += " vertically_centered";
        }
        // Log.i(AnkiDroidApp.TAG, "content card = \n" + content);
        StringBuilder style = new StringBuilder();
        style.append(mCustomFontStyle);
        // Scale images.
        if (mRelativeImageSize != 100) {
            style.append(String.format("img { zoom: %s }\n", mRelativeImageSize / 100.0));
        }
        if (mNightMode) {
            content = HtmlColors.invertColors(content);
            cardClass += " night_mode";
        }
        content = SmpToHtmlEntity(content);
        mCardContent = new SpannedString(mCardTemplate.replace("::content::", content).replace("::style::", style.toString()).replace("::class::", cardClass));
        if (SAVE_CARD_CONTENT) {
            try {
                FileOutputStream f = new FileOutputStream(new File(AnkiDroidApp.getCurrentAnkiDroidDirectory(), "card.html"));
                try {
                    f.write(mCardContent.toString().getBytes());
                } finally {
                    f.close();
                }
            } catch (IOException e) {
            // Log.d(AnkiDroidApp.TAG, "failed to save card", e);
            }
        }
        fillFlashcard(mShowAnimations);
    }
    if (!mConfigurationChanged) {
        playSounds();
    }
}
Also used : SpannedString(android.text.SpannedString) FileOutputStream(java.io.FileOutputStream) SpannedString(android.text.SpannedString) SpannableString(android.text.SpannableString) IOException(java.io.IOException) File(java.io.File)

Example 37 with SpannedString

use of android.text.SpannedString in project KeepScore by nolanlawson.

the class StringUtil method joinSpannables.

/**
 * Returns a CharSequence concatenating the specified CharSequences using the specified delimiter,
 * retaining their spans if any.
 *
 * This is mostly borrowed from TextUtils.concat();
 */
public static CharSequence joinSpannables(String delimiter, CharSequence... text) {
    if (text.length == 0) {
        return "";
    }
    if (text.length == 1) {
        return text[0];
    }
    boolean spanned = false;
    for (int i = 0; i < text.length; i++) {
        if (text[i] instanceof Spanned) {
            spanned = true;
            break;
        }
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < text.length; i++) {
        if (i > 0) {
            sb.append(delimiter);
        }
        sb.append(text[i]);
    }
    if (!spanned) {
        return sb.toString();
    }
    SpannableString ss = new SpannableString(sb);
    int off = 0;
    for (int i = 0; i < text.length; i++) {
        int len = text[i].length();
        if (text[i] instanceof Spanned) {
            TextUtils.copySpansFrom((Spanned) text[i], 0, len, Object.class, ss, off);
        }
        off += len + delimiter.length();
    }
    return new SpannedString(ss);
}
Also used : SpannableString(android.text.SpannableString) SpannedString(android.text.SpannedString) Spanned(android.text.Spanned)

Example 38 with SpannedString

use of android.text.SpannedString in project android_packages_inputmethods_LatinIME by CyanogenMod.

the class SpannableStringUtilsTests method testSplitCharSequencePreserveTrailingEmptySegmengs.

public void testSplitCharSequencePreserveTrailingEmptySegmengs() {
    assertEquals(1, SpannableStringUtils.split("", " ", false).length);
    assertEquals(1, SpannableStringUtils.split(new SpannedString(""), " ", false).length);
    assertEquals(1, SpannableStringUtils.split("", " ", true).length);
    assertEquals(1, SpannableStringUtils.split(new SpannedString(""), " ", true).length);
    assertEquals(0, SpannableStringUtils.split(" ", " ", false).length);
    assertEquals(0, SpannableStringUtils.split(new SpannedString(" "), " ", false).length);
    assertEquals(2, SpannableStringUtils.split(" ", " ", true).length);
    assertEquals(2, SpannableStringUtils.split(new SpannedString(" "), " ", true).length);
    assertEquals(3, SpannableStringUtils.split("a b c  ", " ", false).length);
    assertEquals(3, SpannableStringUtils.split(new SpannedString("a b c  "), " ", false).length);
    assertEquals(5, SpannableStringUtils.split("a b c  ", " ", true).length);
    assertEquals(5, SpannableStringUtils.split(new SpannedString("a b c  "), " ", true).length);
    assertEquals(6, SpannableStringUtils.split("a     b ", " ", false).length);
    assertEquals(6, SpannableStringUtils.split(new SpannedString("a     b "), " ", false).length);
    assertEquals(7, SpannableStringUtils.split("a     b ", " ", true).length);
    assertEquals(7, SpannableStringUtils.split(new SpannedString("a     b "), " ", true).length);
}
Also used : SpannedString(android.text.SpannedString)

Example 39 with SpannedString

use of android.text.SpannedString in project android_packages_apps_Settings by omnirom.

the class RecentConversationsPreferenceControllerTest method testSpans.

@Test
public void testSpans() {
    ShortcutInfo si = mock(ShortcutInfo.class);
    when(si.getLabel()).thenReturn(new SpannedString("hello"));
    ConversationChannel ccw = new ConversationChannel(si, 6, new NotificationChannel("hi", "hi", 4), null, 7, true);
    ShortcutInfo si2 = mock(ShortcutInfo.class);
    when(si2.getLabel()).thenReturn("hello");
    ConversationChannel ccw2 = new ConversationChannel(si2, 6, new NotificationChannel("hi2", "hi2", 4), null, 7, true);
    // no crash
    mController.mConversationComparator.compare(ccw, ccw2);
}
Also used : NotificationChannel(android.app.NotificationChannel) ShortcutInfo(android.content.pm.ShortcutInfo) ConversationChannel(android.app.people.ConversationChannel) SpannedString(android.text.SpannedString) Test(org.junit.Test)

Example 40 with SpannedString

use of android.text.SpannedString in project SuperSaiyanScrollView by nolanlawson.

the class StringUtil method joinSpannables.

/**
 * Returns a CharSequence concatenating the specified CharSequences using the specified delimiter,
 * retaining their spans if any.
 *
 * This is mostly borrowed from TextUtils.concat();
 */
public static CharSequence joinSpannables(String delimiter, CharSequence... text) {
    if (text.length == 0) {
        return "";
    }
    if (text.length == 1) {
        return text[0];
    }
    boolean spanned = false;
    for (int i = 0; i < text.length; i++) {
        if (text[i] instanceof Spanned) {
            spanned = true;
            break;
        }
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < text.length; i++) {
        if (i > 0) {
            sb.append(delimiter);
        }
        sb.append(text[i]);
    }
    if (!spanned) {
        return sb.toString();
    }
    SpannableString ss = new SpannableString(sb);
    int off = 0;
    for (int i = 0; i < text.length; i++) {
        int len = text[i].length();
        if (text[i] instanceof Spanned) {
            TextUtils.copySpansFrom((Spanned) text[i], 0, len, Object.class, ss, off);
        }
        off += len + delimiter.length();
    }
    return new SpannedString(ss);
}
Also used : SpannableString(android.text.SpannableString) SpannedString(android.text.SpannedString) Spanned(android.text.Spanned)

Aggregations

SpannedString (android.text.SpannedString)41 Test (org.junit.Test)15 Spanned (android.text.Spanned)12 Subtitle (com.google.android.exoplayer2.text.Subtitle)12 SpannableStringBuilder (android.text.SpannableStringBuilder)10 SpannableString (android.text.SpannableString)9 LocaleData (libcore.icu.LocaleData)6 AbsoluteSizeSpan (android.text.style.AbsoluteSizeSpan)4 TextPaint (android.text.TextPaint)2 ForegroundColorSpan (android.text.style.ForegroundColorSpan)2 ArrayList (java.util.ArrayList)2 SuppressLint (android.annotation.SuppressLint)1 NotificationChannel (android.app.NotificationChannel)1 ConversationChannel (android.app.people.ConversationChannel)1 ShortcutInfo (android.content.pm.ShortcutInfo)1 NonNull (android.support.annotation.NonNull)1 Spannable (android.text.Spannable)1 StaticLayout (android.text.StaticLayout)1 ImageSpan (android.text.style.ImageSpan)1 Pair (android.util.Pair)1