Skip to content

Instantly share code, notes, and snippets.

@VIkash2601
Last active November 16, 2023 07:41
Show Gist options
  • Save VIkash2601/ffea545edbd40fc4d6ba258c0b9b698b to your computer and use it in GitHub Desktop.
Save VIkash2601/ffea545edbd40fc4d6ba258c0b9b698b to your computer and use it in GitHub Desktop.
FragProfileVideos Gist
package com.app.spinnr.frag.profile
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.text.InputFilter
import android.text.Spanned
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.View.*
import android.view.ViewGroup
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.ItemTouchHelper.*
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.app.spinnr.App
import com.app.spinnr.App.Companion.getStr
import com.app.spinnr.R
import com.app.spinnr.act.ActHome
import com.app.spinnr.adapter.ProfileVideoAdapter
import com.app.spinnr.adapter.ViewPagerAdapter
import com.app.spinnr.databinding.DialogRenameVideoBinding
import com.app.spinnr.databinding.FragProfileVideosBinding
import com.app.spinnr.databinding.ItemIntroVideoBinding
import com.app.spinnr.frag.BottomSheetDialog
import com.app.spinnr.frag.FragVideoPreview
import com.app.spinnr.frag.chat.ChatRepo
import com.app.spinnr.frag.chat.FragChat
import com.app.spinnr.frag.FragImageVideo
import com.app.spinnr.frag.video.FragDailyVideo
import com.app.spinnr.frag.video.FragImportVideo
import com.app.spinnr.helper.Constant
import com.app.spinnr.listener.ActionSelectListener
import com.app.spinnr.model.*
import com.app.spinnr.model.CoinModelImpl.Companion.CREATE_INTRO
import com.app.spinnr.model.CoinModelImpl.Companion.PROFILE_VIDEO
import com.app.spinnr.model.CoinModelImpl.Companion.earnLimitReach
import com.app.spinnr.model.CoinModelImpl.Companion.todayEarned
import com.app.spinnr.model.ProfileModel.Companion.profileData
import com.app.spinnr.service.ApiClient
import com.app.spinnr.service.ApiClient.Companion.getClient
import com.app.spinnr.service.ApiClient.Companion.getMediaClient
import com.app.spinnr.service.ApiInterface
import com.app.spinnr.service.ResponseBean
import com.app.spinnr.service.ResponseListBean
import com.app.spinnr.service.ResponseListBean.Companion.saveUserData
import com.app.spinnr.util.*
import com.app.spinnr.util.Preference.Companion.GUID
import com.app.spinnr.util.Preference.Companion.USERNAME
import com.app.spinnr.util.Preference.Companion.preferenceInstance
import com.appsflyer.AppsFlyerLib
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.google.gson.JsonElement
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.util.*
import java.util.Locale.Category
class FragProfileVideos : Fragment() {
private lateinit var ctx: Context
private lateinit var binding: FragProfileVideosBinding
private lateinit var adapter: ProfileVideoAdapter
private lateinit var data: ProfileModel
private val videos = mutableListOf<VideoModel>()
private var loaded = false
private var loader: Loader? = null
private var category: String = ""
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
if (loaded) return binding.root
loaded = true
ctx = requireContext()
binding = FragProfileVideosBinding.inflate(inflater, container, false)
(ctx as ActHome).changeUi(this)
postDelayed({ setup() }, 300)
return binding.root
}
private fun setup() {
setupPager()
binding.add.setOnClickListener(clickListener)
binding.back.setOnClickListener(clickListener)
binding.instructionIv.setOnClickListener(clickListener)
binding.instructionTv.setOnClickListener(clickListener)
data = profileData()
getProfile()
binding.instructionTv.text = String.format(" - %s:", getString(R.string.start))
binding.instructionIv.setImageResource(R.mipmap.img_new_reoder)
category = Char(80).toString()
data.video?.filter { it.category == category }?.also {
videos.addAll(it)
}
binding.noCollection.load(Constant.NO_COLLECTION_PICTURE, enableCache = true)
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
adapter = ProfileVideoAdapter(layoutInflater, videos, videosListener)
itemTouchHelper.attachToRecyclerView(binding.rv)
binding.rv.adapter = adapter
}
private var introTabSelected = 0
private var tabSelected = 0
private fun setupPager() {
val names = mutableListOf(
getString(R.string.videos),
getString(R.string.spins),
getString(R.string.intros),
)
val pager = ViewPager2(ctx).apply {
adapter = ViewPagerAdapter(activity, mutableListOf(Fragment(), Fragment(), Fragment()))
isUserInputEnabled = false
}
TabLayoutMediator(binding.tabs, pager) { tab, position -> tab.text = names[position] }.attach()
val pager2 = ViewPager2(ctx).apply {
adapter = ViewPagerAdapter(activity, mutableListOf(Fragment(), Fragment(), Fragment()))
isUserInputEnabled = false
}
TabLayoutMediator(binding.tabsIntro, pager2) { tab, position -> tab.text = when (position) {0 -> "Saved";1 -> "Sent";else -> "Received"; } }.attach()
binding.tabsIntro.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
introTabSelected = tab?.position ?: 0
binding.instruction.visibility = if (introTabSelected == 0) VISIBLE else GONE
if (introTabSelected == 0) {
videos.clear()
data.video?.filter { it.category == category }?.also { videos.addAll(it) }
adapter = ProfileVideoAdapter(LayoutInflater.from(ctx), videos, videosListener)
binding.rv.adapter = adapter
binding.noDataMsg.text = if (category == "I") "This is where you can upload or record intro videos to send to members on the app to introduce yourself. Just click on the video icon on someone's profile to send one!" else if (category == "D") "You don’t have any Daily Spins videos" else getString(R.string.you_don_t_have_videos)
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
} else if (introTabSelected == 1) {
binding.noDataMsg.text = getString(R.string.you_don_t_have_videos)
videoIntroMessage("sent")
binding.rv.adapter = IntroVideoAdapter(sentIntroVideo, "sent")
} else if (introTabSelected == 2) {
binding.noDataMsg.text = getString(R.string.you_don_t_have_videos)
videoIntroMessage("received")
binding.rv.adapter = IntroVideoAdapter(receivedIntroVideo, "received")
}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabReselected(tab: TabLayout.Tab?) {}
})
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab?) {
tabSelected = tab?.position ?: 0
binding.instruction.visibility = if (tabSelected == 0 || (tabSelected == 2 && introTabSelected == 0)) VISIBLE else GONE
binding.tabsIntro.visibility = if (tabSelected == 2) VISIBLE else GONE
adapter.dragEnable = false
if (tabSelected == 0) binding.instructionTv2.text = "Reorder top 5 videos for your profile"
else binding.instructionTv2.text = "Reorder your intro videos"
binding.instructionTv.text = String.format(" - %s:", getString(R.string.start))
binding.instructionIv.setImageResource(R.mipmap.img_new_reoder)
category = when (tabSelected) {
0 -> "${Char(80)}"
1 -> "${Char(68)}"
2 -> "${Char(73)}"
else -> ""
}
videos.clear()
data.video?.filter { it.category == category }?.also {
videos.addAll(it)
}
if (tabSelected == 2) {
if (introTabSelected == 0) {
adapter = ProfileVideoAdapter(LayoutInflater.from(ctx), videos, videosListener)
binding.rv.adapter = adapter
binding.noDataMsg.text = if (category == "I") "This is where you can upload or record intro videos to send to members on the app to introduce yourself. Just click on the video icon on someone's profile to send one!" else if (category == "D") "You don’t have any Daily Spins videos" else getString(R.string.you_don_t_have_videos)
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
} else if (introTabSelected == 1) {
binding.noDataMsg.text = getString(R.string.you_don_t_have_videos)
videoIntroMessage("sent")
binding.rv.adapter = IntroVideoAdapter(sentIntroVideo, "sent")
} else if (introTabSelected == 2) {
binding.noDataMsg.text = getString(R.string.you_don_t_have_videos)
videoIntroMessage("received")
binding.rv.adapter = IntroVideoAdapter(receivedIntroVideo, "received")
}
} else {
adapter = ProfileVideoAdapter(LayoutInflater.from(ctx), videos, videosListener)
binding.rv.adapter = adapter
binding.noDataMsg.text = if (category == "I") "This is where you can upload or record intro videos to send to members on the app to introduce yourself. Just click on the video icon on someone's profile to send one!" else if (category == "D") "You don’t have any Daily Spins videos" else getString(R.string.you_don_t_have_videos)
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
}
}
override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabReselected(tab: TabLayout.Tab?) {}
})
}
private val clickListener = OnClickListener {
when (it) {
binding.back -> (ctx as ActHome).backPress()
binding.add -> {
if (category == "D") {
if (CoinModelImpl.recentlyEarnCoin(CoinModelImpl.DAILY_SPIN)) {
showSnackBar("You've already recorded today's video. Come back tomorrow.")
return@OnClickListener
}
(ctx as ActHome).navigateTo(FragDailyVideo {
getProfile()
}, true)
return@OnClickListener
}
BottomSheetDialog(
getString(R.string.post_a_video),
mutableListOf(
if (category == "I")
BottomSheetModel(
getString(R.string.create_intro_video),
R.mipmap.img_add_intro_video
) else
BottomSheetModel(
getString(R.string.create_profile_video),
R.mipmap.img_add_profile_video
),
BottomSheetModel(
getString(R.string.choose_from_camera_roll),
R.mipmap.img_video_upload
),
)
) { a0 ->
App.appsFlyerEvent(when(category){
"P" -> "My_Videos_Create_Profile_Video"
"D" -> "My_Videos_Record_Daily_Spin"
else -> "My_Videos_Create_Intro_Video"
})
val frag = if (a0 == 0)
FragImageVideo { _, a ->
App.appsFlyerEvent(when(a){
"P" -> "My_Videos_Upload_Profile_Video"
"D" -> "My_Videos_Record_Daily_Spin"
else -> "My_Videos_Upload_Intro_Video"
})
getProfile(a)
}
else
FragImportVideo { _, a ->
App.appsFlyerEvent(when(a){
"P" -> "My_Videos_Upload_Profile_Video"
"D" -> "My_Videos_Record_Daily_Spin"
else -> "My_Videos_Upload_Intro_Video"
})
getProfile(a)
}
frag.arguments = Bundle().apply {
putString("category", category)
}
(ctx as ActHome).navigateTo(frag, true)
}.show(childFragmentManager, BottomSheetDialog::class.java.simpleName)
}
binding.instructionIv,
binding.instructionTv -> {
if (netNotConnected()) {
showSnackBar(getString(R.string.no_internet))
return@OnClickListener
}
if (adapter.dragEnable) {
adapter.dragEnable = false
binding.instructionTv.text = String.format(" - %s:", getString(R.string.start))
binding.instructionIv.setImageResource(R.mipmap.img_new_reoder)
if (isMoved) {
loader = showLoader()
isMoved = false
updateVideoSequence(category)
}
} else {
adapter.dragEnable = true
binding.instructionTv.text = String.format(" - %s:", getString(R.string.done))
binding.instructionIv.setImageResource(R.mipmap.img_fill_check)
}
}
}
}
private val videosListener = ActionSelectListener {
a0, a1 ->
when(a0) {
0 -> {
val frag = FragVideoPreview()
frag.arguments = Bundle().apply {
putString("path", videos[a1].vidlink)
putString("title", videos[a1].name)
}
(ctx as ActHome).navigateTo(frag, true)
}
1 -> {
if (netNotConnected()) {
showSnackBar(getString(R.string.no_internet))
return@ActionSelectListener
}
renameVideo(a1)
}
2 -> {
if (netNotConnected()) {
showSnackBar(getString(R.string.no_internet))
return@ActionSelectListener
}
if (videos.size == 1 && category == "P") {
showMessage(getString(R.string.you_must_have_at_least_one_video_to_use_spinnr), narrowPadding = true)
return@ActionSelectListener
}
else {
showOptionMessage(
getString(R.string.delete_video_desc),
getString(R.string.no),
getString(R.string.yes),
) {
if (netNotConnected()) {
showSnackBar(getString(R.string.no_internet))
return@showOptionMessage
}
videos.removeAt(a1)
adapter.notifyItemRemoved(a1)
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
App.appsFlyerEvent(
when (category) {
"P" -> "My_Videos_Delete_Profile_Video"
"D" -> "My_Videos_Delete_Daily_Spin"
else -> "My_Videos_Delete_Intro_Video"
}
)
updateVideoSequence(category)
}
}
}
}
}
/**
*
* Video
*
* */
// region
private var isMoved = false
private val itemTouchHelper by lazy {
val touchCallback = object : SimpleCallback(UP or DOWN, 0) {
override fun isLongPressDragEnabled() = adapter.dragEnable
override fun onMove(
recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder,
target: RecyclerView.ViewHolder
): Boolean {
adapter.move(viewHolder.absoluteAdapterPosition, target.absoluteAdapterPosition)
isMoved = true
return true
}
override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {}
override fun onSelectedChanged(viewHolder: RecyclerView.ViewHolder?, actionState: Int) {
super.onSelectedChanged(viewHolder, actionState)
if (viewHolder == null) return
viewHolder.itemView.elevation = 15f
viewHolder.itemView.scaleX = 1.08f
viewHolder.itemView.scaleY = 1.08f
}
override fun clearView(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder) {
super.clearView(recyclerView, viewHolder)
viewHolder.itemView.elevation = 0f
viewHolder.itemView.scaleX = 1f
viewHolder.itemView.scaleY = 1f
}
}
ItemTouchHelper(touchCallback)
}
private fun renameVideo(a1: Int) {
videoRenameDialog(videos[a1].name) {
_, a ->
if (a.length < 3 || a.length > 18 || !a.contains(Regex("^[a-zA-Z0-9 ]+$"))) {
showMessage(
getString(R.string.name_video_validation),
narrowPadding = true,
expanded = true
) { renameVideo(a1) }
return@videoRenameDialog
}
var duplicateName = false
for (video in videos)
if (video.name == a) {
duplicateName = true
break
}
if (duplicateName) {
showOptionMessage(getString(R.string.name_already_used_please_enter_a_new_name)) {
renameVideo(a1)
}
return@videoRenameDialog
}
if (netNotConnected()) {
showSnackBar(getString(R.string.no_internet))
return@videoRenameDialog
}
if (isOffendWord(a)) {
showOptionDialog("Blocked Words", "Sorry, but you used blocked words that we do not allow on our platform. Please clean it up and try again.", "Cancel", "Try Again"){
if (it == 1) renameVideo(a1)
}
return@videoRenameDialog
}
videos[a1].name = a
adapter.notifyItemChanged(a1)
App.appsFlyerEvent(
when (category) {
"P" -> "My_Videos_Edit_Profile_Video"
"D" -> "My_Videos_Edit_Daily_Spin"
else -> "My_Videos_Edit_Intro_Video"
}
)
updateVideoSequence(category)
}
}
private fun updateVideoSequence(category: String) {
if (category == "P" || category == "I")
for (a in 0 until videos.size)
videos[a].vidsequence = "${a + 1}"
val request = UpdateMediaRequest(
preferenceInstance.readString(GUID),
preferenceInstance.readString(USERNAME),
category, videos
)
getClient()
.updateUserMedia(request)
.enqueue(object : Callback<ResponseBean<JsonElement>>{
override fun onResponse(
call: Call<ResponseBean<JsonElement>>,
response: Response<ResponseBean<JsonElement>>
) {
getProfile()
if (category == "P") concatMedia()
else postDelayed({ loader?.dismiss() }, 2500)
}
override fun onFailure(call: Call<ResponseBean<JsonElement>>, t: Throwable) {
loader?.dismiss()
showMessage("${t.message}")
}
})
}
private fun concatMedia(input: MutableList<VideoModel> = mutableListOf()) {
val concatFiles = mutableListOf<MediaConcatPath>()
if (input.isEmpty())
input.addAll(videos)
for(a in 0 until input.size) {
val link = input[a].vidlink
val name = link.substring(link.lastIndexOf("/") + 1)
concatFiles.add(MediaConcatPath(name))
if (concatFiles.size >= 5)
break
}
val request = MediaConcatModel(
preferenceInstance.readString(GUID),
preferenceInstance.readString(USERNAME),
"ffmpeg-enc",
concatFiles
)
getMediaClient()
.concatMedia(request)
.enqueue(object : Callback<ResponseBean<JsonElement>>{
override fun onResponse(call: Call<ResponseBean<JsonElement>>, response: Response<ResponseBean<JsonElement>>) {
loader?.dismiss()
}
override fun onFailure(call: Call<ResponseBean<JsonElement>>, t: Throwable) {
loader?.dismiss()
}
})
}
override fun onDestroy() {
Log.e("vi26", "onDestroy: FragmentDestroyed")
super.onDestroy()
}
private fun getProfile(category: String = "", xcv: MutableList<VideoModel> = mutableListOf()) {
if (category == "I") {
val eventValues = HashMap<String, Any>()
eventValues["customer_user_id"] = Preference.preferenceInstance.readString(Preference.USERNAME)
eventValues["datetime"] = Calendar.getInstance().time.toString()
AppsFlyerLib.getInstance().logEvent(ctx, "My_Videos_Upload_Intro_Video", eventValues)
}
if (category == "D") {
val eventValues = HashMap<String, Any>()
eventValues["customer_user_id"] = Preference.preferenceInstance.readString(Preference.USERNAME)
eventValues["datetime"] = Calendar.getInstance().time.toString()
AppsFlyerLib.getInstance().logEvent(ctx, "My_Videos_Upload_Profile_Video", eventValues)
}
earnCoin(category)
getClient().getProfileDetail(
preferenceInstance.readString(GUID),
preferenceInstance.readString(USERNAME),
).enqueue(object : Callback<ResponseListBean<ProfileModel>>{
override fun onResponse(
call: Call<ResponseListBean<ProfileModel>>,
response: Response<ResponseListBean<ProfileModel>>
) {
if (response.body()?.code == 0) {
response.body()?.saveUserData()
if (context == null) return
data = profileData()
videos.clear()
data.video?.filter { it.category == this@FragProfileVideos.category }?.let { videos.addAll(it) }
adapter = ProfileVideoAdapter(layoutInflater, videos, videosListener)
binding.rv.adapter = adapter
binding.noData.visibility = if (videos.isEmpty()) VISIBLE else GONE
if (category == "P")
concatMedia(xcv)
} else {
if (context == null) return
showMessage("${response.body()?.code}") { ctx.logout() }
}
}
override fun onFailure(call: Call<ResponseListBean<ProfileModel>>, t: Throwable) {}
})
}
private fun earnCoin(category: String) {
if (category.isEmpty() || !(category == "P" || category == "I")) return
if (category == "P" && earnLimitReach(PROFILE_VIDEO, 5)) return
if (category == "I" && todayEarned(CREATE_INTRO)) return
getClient()
.updateCoin(
preferenceInstance.readString(USERNAME),
preferenceInstance.readString(GUID),
"1",
if (category == "I") "2" else "0",
if (category == "I") CREATE_INTRO else PROFILE_VIDEO,
if (category == "I") "Create intro video" else "Profile questions",
"earned"
).enqueue(object : Callback<ResponseBean<ProfileModel>>{
override fun onResponse(
call: Call<ResponseBean<ProfileModel>>,
response: Response<ResponseBean<ProfileModel>>
) {
if (response.body()?.code == 0) {
showEarnCoin("1")
(ctx as ActHome).getCredApi()
}
}
override fun onFailure(call: Call<ResponseBean<ProfileModel>>, t: Throwable) {}
})
}
//endregion
private val sentIntroVideo = mutableListOf<ApiInterface.VideoIntroMessage>()
private val receivedIntroVideo = mutableListOf<ApiInterface.VideoIntroMessage>()
private fun videoIntroMessage(introStatus: String) {
if (netNotConnected()) {
showSnackBar(getStr(R.string.no_internet))
return
}
binding.noData.visibility = GONE
getClient().videoIntroMessage(preferenceInstance.readString(USERNAME), preferenceInstance.readString(GUID), introStatus).enqueue(object : Callback<ApiInterface.VideoIntroMessageResponse>{
override fun onResponse(call: Call<ApiInterface.VideoIntroMessageResponse>, response: Response<ApiInterface.VideoIntroMessageResponse>) {
if (response.body()?.code == "1") {
if (introStatus == "sent" && response.body()?.intros != sentIntroVideo) {
sentIntroVideo.clear()
sentIntroVideo.addAll(response.body()?.intros ?: mutableListOf())
if (introTabSelected == 1 && tabSelected == 2)
binding.rv.adapter = IntroVideoAdapter(sentIntroVideo, introStatus)
} else if (introStatus == "received" && response.body()?.intros != receivedIntroVideo) {
receivedIntroVideo.clear()
receivedIntroVideo.addAll(response.body()?.intros ?: mutableListOf())
if (introTabSelected == 2 && tabSelected == 2)
binding.rv.adapter = IntroVideoAdapter(receivedIntroVideo, introStatus)
}
if (introStatus == "sent" && introTabSelected == 1 && tabSelected == 2) {
binding.noData.visibility = if (sentIntroVideo.isEmpty()) VISIBLE else GONE
} else if (introStatus == "received" && introTabSelected == 2 && tabSelected == 2) {
binding.noData.visibility = if (receivedIntroVideo.isEmpty()) VISIBLE else GONE
}
} else if (response.body()?.code == "0") {
if ((introStatus == "sent" && introTabSelected == 1 && tabSelected == 2) || (introStatus == "received" && introTabSelected == 2 && tabSelected == 2)) {
binding.rv.adapter = IntroVideoAdapter(mutableListOf(), introStatus)
binding.noData.visibility = VISIBLE
}
} else {
response.body()?.msg?.let {
showSnackBar(it)
}
}
}
override fun onFailure(call: Call<ApiInterface.VideoIntroMessageResponse>, t: Throwable) {}
})
}
inner class IntroVideoAdapter(private val data: MutableList<ApiInterface.VideoIntroMessage>, private val introStatus: String): RecyclerView.Adapter<IntroVideoAdapter.MyViewHolder>() {
inner class MyViewHolder(val binding: ItemIntroVideoBinding): RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = MyViewHolder(ItemIntroVideoBinding.inflate(LayoutInflater.from(ctx), parent, false))
override fun getItemCount() = data.size
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = data[holder.absoluteAdapterPosition]
holder.binding.thumbnail.load(item.value, 15f)
holder.binding.title.text = if (introStatus == "sent") item.username else item.fromusername
holder.binding.reply1.visibility = if (introStatus == "received" && item.status == "S") View.VISIBLE else View.GONE
holder.binding.chat1.visibility = if (introStatus == "received" && item.status == "S") View.VISIBLE else View.GONE
holder.binding.delete1.visibility = if (introStatus == "received" && item.status == "S") View.VISIBLE else View.GONE
holder.binding.thumbnail.setOnClickListener {
val frag = FragVideoPreview()
frag.arguments = Bundle().apply {
putString("path", item.value)
putString("title", "")
}
(ctx as ActHome).navigateTo(frag, true)
}
holder.binding.reply1.setOnClickListener {
val frag = FragVideoPreview()
frag.arguments = Bundle().apply {
putString("title", getString(R.string.intro))
putString("path", item.value)
}
(ctx as ActHome).navigateTo(frag, true)
}
holder.binding.chat1.setOnClickListener {
data[holder.absoluteAdapterPosition].status = "V"
notifyItemChanged(holder.absoluteAdapterPosition)
updateUserFav(item.fromguid, item.fromusername)
markRead(item.fromguid, item.fromusername, false)
}
holder.binding.delete1.setOnClickListener {
showOptionDialog(
getString(R.string.delete),
getString(R.string.intro_delete_desc)) {
if (it == 1) {
data[holder.absoluteAdapterPosition].status = "V"
notifyItemChanged(holder.absoluteAdapterPosition)
markRead(item.fromguid, item.fromusername, true)
}
}
}
}
}
private fun markRead(guid: String?,username: String?, delete: Boolean = false) {
App.appsFlyerEvent(if (delete) "Intro_Delete" else "Intro_Reply")
if (!delete)
loader = showLoader()
getClient().getIntroMessages(preferenceInstance.readString(Preference.GUID), preferenceInstance.readString(Preference.USERNAME), guid, true)
.enqueue(object : Callback<ResponseListBean<ResponseListBean.IntroMessage>>{
override fun onResponse(call: Call<ResponseListBean<ResponseListBean.IntroMessage>>, response: Response<ResponseListBean<ResponseListBean.IntroMessage>>) {
loader?.dismiss()
response.body()?.intros?.let { items ->
if (!delete) {
loader = showLoader()
ChatRepo.startChatWith(username!!, guid!!, items)
val frag = FragChat()
frag.arguments = Bundle().apply {
putString("guid", guid)
putString("username", username)
}
postDelayed({
loader?.dismiss()
(ctx as ActHome).navigateTo(frag, true)
postDelayed({ binding.root.visibility = View.VISIBLE }, 1000)
}, 1000)
}
}
}
override fun onFailure(call: Call<ResponseListBean<ResponseListBean.IntroMessage>>, t: Throwable) { loader?.dismiss() }
})
}
private fun updateUserFav(guid: String, username: String) {
getClient().setUserFavRequest(FavUpdateRequestModel(preferenceInstance.readString(Preference.GUID), guid, "L"))
.enqueue(object : Callback<ResponseBean<JsonElement>>{
override fun onResponse(call: Call<ResponseBean<JsonElement>>, response: Response<ResponseBean<JsonElement>>) {}
override fun onFailure(call: Call<ResponseBean<JsonElement>>, t: Throwable) {}
})
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment