Loading core/java/android/content/res/StringBlock.java +53 −27 Original line number Original line Diff line number Diff line Loading @@ -87,21 +87,48 @@ final class StringBlock { if (style != null) { if (style != null) { if (mStyleIDs == null) { if (mStyleIDs == null) { mStyleIDs = new StyleIDs(); mStyleIDs = new StyleIDs(); mStyleIDs.boldId = nativeIndexOfString(mNative, "b"); } mStyleIDs.italicId = nativeIndexOfString(mNative, "i"); mStyleIDs.underlineId = nativeIndexOfString(mNative, "u"); // the style array is a flat array of <type, start, end> hence mStyleIDs.ttId = nativeIndexOfString(mNative, "tt"); // the magic constant 3. mStyleIDs.bigId = nativeIndexOfString(mNative, "big"); for (int styleIndex = 0; styleIndex < style.length; styleIndex += 3) { mStyleIDs.smallId = nativeIndexOfString(mNative, "small"); int styleId = style[styleIndex]; mStyleIDs.supId = nativeIndexOfString(mNative, "sup"); mStyleIDs.subId = nativeIndexOfString(mNative, "sub"); if (styleId == mStyleIDs.boldId || styleId == mStyleIDs.italicId mStyleIDs.strikeId = nativeIndexOfString(mNative, "strike"); || styleId == mStyleIDs.underlineId || styleId == mStyleIDs.ttId mStyleIDs.listItemId = nativeIndexOfString(mNative, "li"); || styleId == mStyleIDs.bigId || styleId == mStyleIDs.smallId mStyleIDs.marqueeId = nativeIndexOfString(mNative, "marquee"); || styleId == mStyleIDs.subId || styleId == mStyleIDs.supId || styleId == mStyleIDs.strikeId || styleId == mStyleIDs.listItemId if (localLOGV) Log.v(TAG, "BoldId=" + mStyleIDs.boldId || styleId == mStyleIDs.marqueeId) { + ", ItalicId=" + mStyleIDs.italicId // id already found skip to next style + ", UnderlineId=" + mStyleIDs.underlineId); continue; } String styleTag = nativeGetString(mNative, styleId); if (styleTag.equals("b")) { mStyleIDs.boldId = styleId; } else if (styleTag.equals("i")) { mStyleIDs.italicId = styleId; } else if (styleTag.equals("u")) { mStyleIDs.underlineId = styleId; } else if (styleTag.equals("tt")) { mStyleIDs.ttId = styleId; } else if (styleTag.equals("big")) { mStyleIDs.bigId = styleId; } else if (styleTag.equals("small")) { mStyleIDs.smallId = styleId; } else if (styleTag.equals("sup")) { mStyleIDs.supId = styleId; } else if (styleTag.equals("sub")) { mStyleIDs.subId = styleId; } else if (styleTag.equals("strike")) { mStyleIDs.strikeId = styleId; } else if (styleTag.equals("li")) { mStyleIDs.listItemId = styleId; } else if (styleTag.equals("marquee")) { mStyleIDs.marqueeId = styleId; } } } res = applyStyles(str, style, mStyleIDs); res = applyStyles(str, style, mStyleIDs); Loading @@ -119,17 +146,17 @@ final class StringBlock { } } static final class StyleIDs { static final class StyleIDs { private int boldId; private int boldId = -1; private int italicId; private int italicId = -1; private int underlineId; private int underlineId = -1; private int ttId; private int ttId = -1; private int bigId; private int bigId = -1; private int smallId; private int smallId = -1; private int subId; private int subId = -1; private int supId; private int supId = -1; private int strikeId; private int strikeId = -1; private int listItemId; private int listItemId = -1; private int marqueeId; private int marqueeId = -1; } } private CharSequence applyStyles(String str, int[] style, StyleIDs ids) { private CharSequence applyStyles(String str, int[] style, StyleIDs ids) { Loading Loading @@ -403,6 +430,5 @@ final class StringBlock { private static final native int nativeGetSize(int obj); private static final native int nativeGetSize(int obj); private static final native String nativeGetString(int obj, int idx); private static final native String nativeGetString(int obj, int idx); private static final native int[] nativeGetStyle(int obj, int idx); private static final native int[] nativeGetStyle(int obj, int idx); private static final native int nativeIndexOfString(int obj, String str); private static final native void nativeDestroy(int obj); private static final native void nativeDestroy(int obj); } } core/jni/android_util_StringBlock.cpp +0 −21 Original line number Original line Diff line number Diff line Loading @@ -147,25 +147,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject return array; return array; } } static jint android_content_StringBlock_nativeIndexOfString(JNIEnv* env, jobject clazz, jint token, jstring str) { ResStringPool* osb = (ResStringPool*)token; if (osb == NULL || str == NULL) { doThrow(env, "java/lang/NullPointerException"); return 0; } const char16_t* str16 = env->GetStringChars(str, NULL); jsize strLen = env->GetStringLength(str); ssize_t idx = osb->indexOfString(str16, strLen); env->ReleaseStringChars(str, str16); return idx; } static void android_content_StringBlock_nativeDestroy(JNIEnv* env, jobject clazz, static void android_content_StringBlock_nativeDestroy(JNIEnv* env, jobject clazz, jint token) jint token) { { Loading Loading @@ -193,8 +174,6 @@ static JNINativeMethod gStringBlockMethods[] = { (void*) android_content_StringBlock_nativeGetString }, (void*) android_content_StringBlock_nativeGetString }, { "nativeGetStyle", "(II)[I", { "nativeGetStyle", "(II)[I", (void*) android_content_StringBlock_nativeGetStyle }, (void*) android_content_StringBlock_nativeGetStyle }, { "nativeIndexOfString","(ILjava/lang/String;)I", (void*) android_content_StringBlock_nativeIndexOfString }, { "nativeDestroy", "(I)V", { "nativeDestroy", "(I)V", (void*) android_content_StringBlock_nativeDestroy }, (void*) android_content_StringBlock_nativeDestroy }, }; }; Loading Loading
core/java/android/content/res/StringBlock.java +53 −27 Original line number Original line Diff line number Diff line Loading @@ -87,21 +87,48 @@ final class StringBlock { if (style != null) { if (style != null) { if (mStyleIDs == null) { if (mStyleIDs == null) { mStyleIDs = new StyleIDs(); mStyleIDs = new StyleIDs(); mStyleIDs.boldId = nativeIndexOfString(mNative, "b"); } mStyleIDs.italicId = nativeIndexOfString(mNative, "i"); mStyleIDs.underlineId = nativeIndexOfString(mNative, "u"); // the style array is a flat array of <type, start, end> hence mStyleIDs.ttId = nativeIndexOfString(mNative, "tt"); // the magic constant 3. mStyleIDs.bigId = nativeIndexOfString(mNative, "big"); for (int styleIndex = 0; styleIndex < style.length; styleIndex += 3) { mStyleIDs.smallId = nativeIndexOfString(mNative, "small"); int styleId = style[styleIndex]; mStyleIDs.supId = nativeIndexOfString(mNative, "sup"); mStyleIDs.subId = nativeIndexOfString(mNative, "sub"); if (styleId == mStyleIDs.boldId || styleId == mStyleIDs.italicId mStyleIDs.strikeId = nativeIndexOfString(mNative, "strike"); || styleId == mStyleIDs.underlineId || styleId == mStyleIDs.ttId mStyleIDs.listItemId = nativeIndexOfString(mNative, "li"); || styleId == mStyleIDs.bigId || styleId == mStyleIDs.smallId mStyleIDs.marqueeId = nativeIndexOfString(mNative, "marquee"); || styleId == mStyleIDs.subId || styleId == mStyleIDs.supId || styleId == mStyleIDs.strikeId || styleId == mStyleIDs.listItemId if (localLOGV) Log.v(TAG, "BoldId=" + mStyleIDs.boldId || styleId == mStyleIDs.marqueeId) { + ", ItalicId=" + mStyleIDs.italicId // id already found skip to next style + ", UnderlineId=" + mStyleIDs.underlineId); continue; } String styleTag = nativeGetString(mNative, styleId); if (styleTag.equals("b")) { mStyleIDs.boldId = styleId; } else if (styleTag.equals("i")) { mStyleIDs.italicId = styleId; } else if (styleTag.equals("u")) { mStyleIDs.underlineId = styleId; } else if (styleTag.equals("tt")) { mStyleIDs.ttId = styleId; } else if (styleTag.equals("big")) { mStyleIDs.bigId = styleId; } else if (styleTag.equals("small")) { mStyleIDs.smallId = styleId; } else if (styleTag.equals("sup")) { mStyleIDs.supId = styleId; } else if (styleTag.equals("sub")) { mStyleIDs.subId = styleId; } else if (styleTag.equals("strike")) { mStyleIDs.strikeId = styleId; } else if (styleTag.equals("li")) { mStyleIDs.listItemId = styleId; } else if (styleTag.equals("marquee")) { mStyleIDs.marqueeId = styleId; } } } res = applyStyles(str, style, mStyleIDs); res = applyStyles(str, style, mStyleIDs); Loading @@ -119,17 +146,17 @@ final class StringBlock { } } static final class StyleIDs { static final class StyleIDs { private int boldId; private int boldId = -1; private int italicId; private int italicId = -1; private int underlineId; private int underlineId = -1; private int ttId; private int ttId = -1; private int bigId; private int bigId = -1; private int smallId; private int smallId = -1; private int subId; private int subId = -1; private int supId; private int supId = -1; private int strikeId; private int strikeId = -1; private int listItemId; private int listItemId = -1; private int marqueeId; private int marqueeId = -1; } } private CharSequence applyStyles(String str, int[] style, StyleIDs ids) { private CharSequence applyStyles(String str, int[] style, StyleIDs ids) { Loading Loading @@ -403,6 +430,5 @@ final class StringBlock { private static final native int nativeGetSize(int obj); private static final native int nativeGetSize(int obj); private static final native String nativeGetString(int obj, int idx); private static final native String nativeGetString(int obj, int idx); private static final native int[] nativeGetStyle(int obj, int idx); private static final native int[] nativeGetStyle(int obj, int idx); private static final native int nativeIndexOfString(int obj, String str); private static final native void nativeDestroy(int obj); private static final native void nativeDestroy(int obj); } }
core/jni/android_util_StringBlock.cpp +0 −21 Original line number Original line Diff line number Diff line Loading @@ -147,25 +147,6 @@ static jintArray android_content_StringBlock_nativeGetStyle(JNIEnv* env, jobject return array; return array; } } static jint android_content_StringBlock_nativeIndexOfString(JNIEnv* env, jobject clazz, jint token, jstring str) { ResStringPool* osb = (ResStringPool*)token; if (osb == NULL || str == NULL) { doThrow(env, "java/lang/NullPointerException"); return 0; } const char16_t* str16 = env->GetStringChars(str, NULL); jsize strLen = env->GetStringLength(str); ssize_t idx = osb->indexOfString(str16, strLen); env->ReleaseStringChars(str, str16); return idx; } static void android_content_StringBlock_nativeDestroy(JNIEnv* env, jobject clazz, static void android_content_StringBlock_nativeDestroy(JNIEnv* env, jobject clazz, jint token) jint token) { { Loading Loading @@ -193,8 +174,6 @@ static JNINativeMethod gStringBlockMethods[] = { (void*) android_content_StringBlock_nativeGetString }, (void*) android_content_StringBlock_nativeGetString }, { "nativeGetStyle", "(II)[I", { "nativeGetStyle", "(II)[I", (void*) android_content_StringBlock_nativeGetStyle }, (void*) android_content_StringBlock_nativeGetStyle }, { "nativeIndexOfString","(ILjava/lang/String;)I", (void*) android_content_StringBlock_nativeIndexOfString }, { "nativeDestroy", "(I)V", { "nativeDestroy", "(I)V", (void*) android_content_StringBlock_nativeDestroy }, (void*) android_content_StringBlock_nativeDestroy }, }; }; Loading