diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/ReplyActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/ReplyActivity.kt index 55cb96ea..1802c2c0 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/activities/ReplyActivity.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/ReplyActivity.kt @@ -346,9 +346,9 @@ class ReplyActivity : BaseActivity(), View.OnClickListener, editText.mgr.disable() editText.setText( StringUtil.getEmoticonContent( - EmoticonUtil.EMOTICON_ALL_WEB_TYPE, editText, - content + content, + EmoticonUtil.EMOTICON_ALL_WEB_TYPE ) ) editText.mgr.enable() diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/MessageListAdapter.kt b/app/src/main/java/com/huanchengfly/tieba/post/adapters/MessageListAdapter.kt index f2ba9527..ebd9044e 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/MessageListAdapter.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/MessageListAdapter.kt @@ -10,7 +10,12 @@ import com.huanchengfly.tieba.post.api.models.MessageListBean import com.huanchengfly.tieba.post.api.models.MessageListBean.MessageInfoBean import com.huanchengfly.tieba.post.components.MyViewHolder import com.huanchengfly.tieba.post.fragments.MessageFragment -import com.huanchengfly.tieba.post.utils.* +import com.huanchengfly.tieba.post.utils.DateTimeUtils +import com.huanchengfly.tieba.post.utils.EmoticonUtil +import com.huanchengfly.tieba.post.utils.ImageUtil +import com.huanchengfly.tieba.post.utils.NavigationHelper +import com.huanchengfly.tieba.post.utils.StringUtil +import com.huanchengfly.tieba.post.utils.getItemBackgroundDrawable class MessageListAdapter( context: Context, private val type: Int @@ -73,13 +78,12 @@ class MessageListAdapter( ) val contentTextView = viewHolder.getView(R.id.message_list_item_content) contentTextView.text = StringUtil.getEmoticonContent( - EmoticonUtil.EMOTICON_ALL_TYPE, contentTextView, - item.content + item.content, + EmoticonUtil.EMOTICON_ALL_TYPE ) val textView = viewHolder.getView(R.id.message_list_item_quote) textView.text = StringUtil.getEmoticonContent( - EmoticonUtil.EMOTICON_ALL_TYPE, textView, if (type == MessageFragment.TYPE_REPLY_ME) { if ("1" == item.isFloor) { @@ -89,7 +93,8 @@ class MessageListAdapter( } } else { item.title - } + }, + EmoticonUtil.EMOTICON_ALL_TYPE ) textView.setOnClickListener { if ("1" == item.isFloor && item.quotePid != null) { diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java b/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java index 552e3409..08376389 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java +++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/RecyclerFloorAdapter.java @@ -257,7 +257,7 @@ public class RecyclerFloorAdapter extends BaseSingleTypeAdapter = mapOf( "呵呵" to "image_emoticon1", @@ -128,13 +137,8 @@ object EmoticonManager { PlaceholderVerticalAlign.TextCenter ), children = { - Image( - painter = rememberDrawablePainter( - drawable = getEmoticonDrawable( - LocalContext.current, - id - ) - ), + AsyncImage( + imageUri = rememberEmoticonUri(id = id), contentDescription = stringResource( id = R.string.emoticon, getEmoticonNameById(id) ?: "" @@ -212,6 +216,15 @@ object EmoticonManager { return File(getEmoticonCacheDir(), "$id.png") } + fun getAllEmoticon(): List { + return emoticonIds.map { id -> + Emoticon( + id = id, + name = getEmoticonNameById(id) ?: "" + ) + } + } + fun getEmoticonIdByName(name: String): String? { return emoticonMapping[name] } @@ -252,6 +265,32 @@ object EmoticonManager { ).also { drawableCache[id] = it } } + fun getEmoticonUri(context: Context, id: String?): String { + id ?: return "" + val resId = getEmoticonResId(context, id) + if (resId != 0) { + return newResourceUri(resId) + } + val emoticonFile = getEmoticonFile(id) + if (!emoticonFile.exists()) { + return "" + } + return newFileUri(emoticonFile) + } + + @Composable + fun rememberEmoticonPainter(id: String): Painter { + val context = LocalContext.current + val drawable = remember(id) { getEmoticonDrawable(context, id) } + return rememberDrawablePainter(drawable = drawable) + } + + @Composable + fun rememberEmoticonUri(id: String): String { + val context = LocalContext.current + return remember(id) { getEmoticonUri(context, id) } + } + private suspend fun fetchEmoticons(context: Context) { emoticonIds.forEach { val resId = getEmoticonResId(context, it) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/EmoticonUtil.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/EmoticonUtil.kt index d64e2a7c..b04525db 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/EmoticonUtil.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/EmoticonUtil.kt @@ -172,8 +172,8 @@ object EmoticonUtil { // 特殊文字处理,将表情等转换一下 mEditText!!.setText( getEmoticonContent( - emoticon_map_type, - mEditText!!, sb + mEditText!!, + sb, emoticon_map_type ) ) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/PostListAdapterHelper.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/PostListAdapterHelper.kt index a6aa1c57..5abf939c 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/PostListAdapterHelper.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/PostListAdapterHelper.kt @@ -133,7 +133,7 @@ class PostListAdapterHelper( private fun setText(textView: TextView, content: CharSequence?) { var text = content text = replaceVideoNumberSpan(context, text) - text = StringUtil.getEmoticonContent(EmoticonUtil.EMOTICON_ALL_TYPE, textView, text) + text = StringUtil.getEmoticonContent(textView, text, EmoticonUtil.EMOTICON_ALL_TYPE) textView.text = text } diff --git a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.kt b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.kt index bb5b2fdd..0a3a1bd1 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/utils/StringUtil.kt @@ -25,9 +25,9 @@ import kotlin.math.roundToInt object StringUtil { @JvmStatic fun getEmoticonContent( - emoticon_map_type: Int, tv: TextView, - source: CharSequence? + source: CharSequence?, + emoticonType: Int = EmoticonUtil.EMOTICON_ALL_TYPE ): SpannableString { return try { if (source == null) { @@ -38,7 +38,7 @@ object StringUtil { } else { SpannableString(source) } - val regexEmoticon = EmoticonUtil.getRegex(emoticon_map_type) + val regexEmoticon = EmoticonUtil.getRegex(emoticonType) val patternEmoticon = Pattern.compile(regexEmoticon) val matcherEmoticon = patternEmoticon.matcher(spannableString) while (matcherEmoticon.find()) {