class ReportMessageHandler {
private var flagReasons: List<FlagReason?> = emptyList()
// Load flag reasons (call this on app init or when needed)
fun loadFlagReasons(callback: (List<FlagReason?>) -> Unit) {
CometChat.getFlagReasons(object : CometChat.CallbackListener<MutableList<FlagReason?>>() {
override fun onSuccess(reasons: MutableList<FlagReason?>?) {
flagReasons = reasons ?: emptyList()
callback(flagReasons)
}
override fun onError(e: CometChatException) {
Log.e(TAG, "Failed to load flag reasons: ${e.message}")
callback(emptyList())
}
})
}
// Get reasons for UI display
fun getReasons(): List<FlagReason?> = flagReasons
// Flag a message with selected reason
fun flagMessage(
messageId: Long,
reasonId: String,
remark: String? = null,
callback: (Boolean, String?) -> Unit
) {
val flagDetail = FlagDetail().apply {
this.reasonId = reasonId
remark?.let { this.remark = it }
}
CometChat.flagMessage(messageId, flagDetail, object : CometChat.CallbackListener<String?>() {
override fun onSuccess(response: String?) {
callback(true, response)
}
override fun onError(e: CometChatException?) {
callback(false, e?.message)
}
})
}
}
// Usage
val reportHandler = ReportMessageHandler()
// Load reasons when app initializes
reportHandler.loadFlagReasons { reasons ->
// Display reasons in UI for user to select
}
// When user submits the report
reportHandler.flagMessage(123L, "spam", "User is sending promotional links") { success, message ->
if (success) {
showToast("Message reported successfully")
}
}