안녕하세요.
샌드버드를 잘 사용하고 있습니다.
최근에 REQUEST_INSTALL_PACKAGES 문제로 UIKit 버전을 v3 로 올렸습니다.
그런데 3.2.0 버전부터 OgtagView, AutoLinkTextView 가 inner 클래스로 변경되었더라구요.
저희 회사에서는 ogImage 를 클릭하거나 링크를 클릭하면, 아래처럼 내부에서 로직을 한번 체크하고 있었습니다.
오픈 소스로 변경되었기 때문에 다시 public 으로 변경해주시면 안될까요?
또는 OgTagView의 클릭을 중간에 캐치할 수 있는 형태로 고민해봐주시면 감사하겠습니다.
class AppMessageListAdapter(
private val appPref: AppPreference,
private val channel: GroupChannel?
): MessageListAdapter(channel) {
private val klass = getClassInstanceName()
override fun onBindViewHolder(holder: MessageViewHolder, position: Int) {
super.onBindViewHolder(holder, position)
// 텍스트에 있는 자동 링크 체크
holder.itemView.findViewById<AutoLinkTextView>(R.id.tvMessage)?.let { textView ->
// SBLinkMovementMethod 는 com.sendbird.uikit.widgets 에서 가져옴
textView.movementMethod = SBLinkMovementMethod.Builder()
.setOnLinkClickListener(object: SBLinkMovementMethod.OnLinkClickListener {
override fun onClick(textView: TextView?, link: String?): Boolean {
HLog.v(TAG, klass, link)
if (link != null) handClickedLink(holder.itemView.context, link)
return true
}
})
.create()
}
// OG 데이터 표시 부분 체크
val message = getItem(position)
// -- com.sendbird.uikit.widgets.OpenChannelUserMessageView
// val binding = SbViewOgtagBinding.bind(holder.itemView)
holder.itemView.findViewById<OgtagView>(R.id.ogTag)?.let { ogtagView ->
ogtagView.setOnClickListener {
message.ogMetaData?.url?.let { ogLink ->
HLog.v(TAG, klass, ogLink)
handClickedLink(holder.itemView.context, ogLink)
}
}
}
// -- com.sendbird.uikit.widgets.MyUserMessageView, OtherUserMessageView
holder.itemView.findViewById<ViewGroup>(R.id.ovOgtag)?.let { ogTagContainer ->
drawOgtag(ogTagContainer, message.ogMetaData)
}
}
private fun handClickedLink(context: Context, link: String) {
if (link.checkIfClassLink()) {
val token = appPref.accessToken
val userId = appPref.userId
context.startActivity(
WebToolbarActivity.newIntent(
context,
link,
cookies = WebViewUtil.createCookies(token, userId)
)
)
channel?.let { channel ->
val coachId = channel.getKeepfitCoachId() ?: return@let
FAReporter.getInstance().logEvent(FAEvent.UserChatClickClassLink(coachId, link))
}
} else {
openWebViewer(context, link)
}
}
private fun openWebViewer(context: Context, url: String) {
val intent = IntentUtils.getWebViewerIntent(url)
try {
context.startActivity(intent)
} catch (e: ActivityNotFoundException) {
HLog.e(TAG, klass, e)
}
}
private fun drawOgtag(parent: ViewGroup, ogMetaData: OGMetaData?) {
if (ogMetaData == null) {
return
}
parent.removeAllViews()
val ogtagView = OgtagView.inflate(parent.context, parent)
ogtagView.drawOgtag(ogMetaData)
parent.setOnClickListener {
if (ogMetaData.url == null) {
return@setOnClickListener
}
HLog.v(TAG, klass, ogMetaData.url)
ogMetaData.url?.let {
handClickedLink(parent.context, it)
}
}
}
}