MyList all of the recycler views integrated and shown

offline data handling for my fav data in repository

like count and click api integration

remove from favorite api integration
This commit is contained in:
2024-06-14 20:58:19 +05:30
parent 27be75d831
commit 10d8f603d6
20 changed files with 908 additions and 54 deletions

View File

@@ -93,7 +93,6 @@ class HomeActivity : WokaBaseActivity(),
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = Color.WHITE
window.lightStatusBar()
viewModel = ViewModelProvider(this)[HomeViewModel::class.java]
progressView = ProgressView(this)
@@ -145,7 +144,11 @@ class HomeActivity : WokaBaseActivity(),
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(minuteReceiver)
try {
unregisterReceiver(minuteReceiver)
}catch (e: Exception){
// do nothing
}
}
private fun setObservers(){
@@ -450,20 +453,28 @@ class HomeActivity : WokaBaseActivity(),
override fun onBottomTabSelected(tab: Int) {
when (tab){
HOME -> {
binding.notifications.show()
if (userPrefs?.appTheme == Theme.THEME_TWO){
binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.color_primary))
supportFragmentManager.beginTransaction()
.replace(R.id.fc_home, Home2Fragment.newInstance())
.runOnCommit {
binding.notifications.show()
window.lightStatusBar()
binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.color_primary))
}
.commit()
}else{
binding.root.backgroundTintList = null
supportFragmentManager.beginTransaction()
.replace(R.id.fc_home, Home1Fragment.newInstance())
.runOnCommit {
binding.notifications.show()
window.lightStatusBar()
binding.root.backgroundTintList = null
}
.commit()
}
registerReceiver(minuteReceiver, IntentFilter(Intent.ACTION_TIME_TICK))
@@ -478,14 +489,17 @@ class HomeActivity : WokaBaseActivity(),
, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
}
MY_LIST -> {
binding.notifications.hide()
binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.orders_bg))
unregisterReceiver(minuteReceiver)
supportFragmentManager.beginTransaction()
.replace(R.id.fc_home, MyListFragment.newInstance())
.runOnCommit {
window.lightStatusBar(true)
binding.notifications.hide()
binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.orders_bg))
}
.commit()
updateBackground()
viewModel.selectedBottomTab = tab
}
}

View File

@@ -5,12 +5,19 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator
import com.woka.databinding.FragmentMyListBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.adapters.AudioBooksAdapter
import com.woka.home.mylist.adapters.GamesAdapter
import com.woka.home.mylist.adapters.KaraokeAdapter
import com.woka.home.mylist.adapters.WebSeriesAdapter
import com.woka.home.mylist.models.ShowData
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.show
import kotlinx.coroutines.launch
class MyListFragment : Fragment() {
@@ -18,6 +25,9 @@ class MyListFragment : Fragment() {
private lateinit var webSeriesEAdapter: WebSeriesAdapter
private lateinit var webSeriesHAdapter: WebSeriesAdapter
private lateinit var audioBooksAdapter: AudioBooksAdapter
private lateinit var karaokeAdapter: KaraokeAdapter
private lateinit var gamesAdapter: GamesAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
@@ -26,8 +36,11 @@ class MyListFragment : Fragment() {
binding = FragmentMyListBinding.inflate(inflater, container, false)
// adapters
webSeriesEAdapter = WebSeriesAdapter()
webSeriesHAdapter = WebSeriesAdapter()
webSeriesEAdapter = WebSeriesAdapter("1")
webSeriesHAdapter = WebSeriesAdapter("18")
audioBooksAdapter = AudioBooksAdapter()
karaokeAdapter = KaraokeAdapter()
gamesAdapter = GamesAdapter()
initViews()
@@ -35,15 +48,17 @@ class MyListFragment : Fragment() {
setObservers()
MyListRepository.loadMyFavList()
return binding.root
}
private fun initViews() {
binding.apply {
(rvWebSeriesEnglish.itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
rvWebSeriesEnglish.adapter = webSeriesEAdapter
rvWebSeriesHindi.adapter = webSeriesHAdapter
rvAudioBooks.adapter = audioBooksAdapter
rvKaraoke.adapter = karaokeAdapter
rvGames.adapter = gamesAdapter
}
}
@@ -58,18 +73,101 @@ class MyListFragment : Fragment() {
private fun setObservers(){
binding.apply {
MyListRepository.myFavListLiveData.observe(viewLifecycleOwner){
when (it){
is ApiResult.Error -> {
webSeriesEnglishView.hide()
webSeriesHindiView.hide()
}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
it.data?.result?.let { result ->
result.show_data?.let {showData ->
if (showData.isNotEmpty()){
webSeriesEnglishView.show()
webSeriesEAdapter.submitList(ArrayList(showData))
lifecycleScope.launch {
when (it){
is ApiResult.Error -> {
progressBar.hide()
noData.show()
}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
it.data?.result?.let { result ->
var dataLoaded = false
progressBar.hide()
result.show_data?.let {showData ->
if (showData.isNotEmpty()){
val engList = mutableListOf<ShowData>()
val hinList = mutableListOf<ShowData>()
for (show in showData){
val ids = show.bookmark_category_ids?.split(",")
ids?.let {bIds ->
if (bIds.isNotEmpty()) {
when (bIds.size) {
1 -> if (bIds[0] == "1") engList.add(show) else hinList.add(show)
else -> {
engList.add(show)
hinList.add(show)
}
}
}
}
}
if (engList.isNotEmpty()){
webSeriesEnglishView.show()
dataLoaded = true
webSeriesEAdapter.submitList(engList)
}else{
webSeriesEnglishView.hide()
}
if (hinList.isNotEmpty()){
webSeriesHindiView.show()
dataLoaded = true
webSeriesHAdapter.submitList(hinList)
}else{
webSeriesHindiView.hide()
}
}else{
webSeriesEnglishView.hide()
webSeriesHindiView.hide()
}
}
result.audio_data?.let { audioData ->
if (audioData.isNotEmpty()){
audioBooksView.show()
dataLoaded = true
audioBooksAdapter.submitList(audioData)
}else{
audioBooksView.hide()
}
}
result.sing_karaoke_data?.let { singKaraokeData ->
if (singKaraokeData.isNotEmpty()){
karaokeView.show()
dataLoaded = true
karaokeAdapter.submitList(singKaraokeData)
}else{
karaokeView.hide()
}
}
result.game_data?.let { gamesData ->
if (gamesData.isNotEmpty()){
gamesView.show()
dataLoaded = true
gamesAdapter.submitList(gamesData)
}else{
gamesView.hide()
}
}
if (!dataLoaded){
noData.show()
}else{
noData.hide()
}
}
}

View File

@@ -0,0 +1,22 @@
package com.woka.home.mylist
import com.woka.networking.ApiResponse
import okhttp3.FormBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.POST
interface MyFavApiService {
@POST("post_like")
suspend fun likePost(@Body body: FormBody): Response<ApiResponse<Any>>
@POST("post_unlike")
suspend fun unLikePost(@Body body: FormBody): Response<ApiResponse<Any>>
@POST("favourite_add")
suspend fun addToFav(@Body body: FormBody): Response<ApiResponse<Any>>
@POST("favourite_remove")
suspend fun removeFromFav(@Body body: FormBody): Response<ApiResponse<Any>>
}

View File

@@ -2,23 +2,301 @@ package com.woka.home.mylist
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.woka.home.mylist.models.AudioData
import com.woka.home.mylist.models.GameData
import com.woka.home.mylist.models.MyListResponse
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.ShowData
import com.woka.home.mylist.models.SingKaraokeData
import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper
import com.woka.userdata.UserRepository
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.FormBody
import kotlin.math.max
object MyListRepository {
private val myFavApiService = RetrofitHelper.getRetrofit().create(MyFavApiService::class.java)
private val _myFavListLiveData = MutableLiveData<ApiResult<MyListResponse>>()
val myFavListLiveData: LiveData<ApiResult<MyListResponse>>
get() = _myFavListLiveData
get() {
// also updating local changes
myFavData?.let { _myFavListLiveData.postValue(ApiResult.Success(it)) }
return _myFavListLiveData
}
fun loadMyFavList(){
private var myFavData: MyListResponse? = null
init {
loadMyFavList()
}
private fun loadMyFavList(){
CoroutineScope(Dispatchers.IO).launch {
_myFavListLiveData.postValue(ApiResult.Loading())
_myFavListLiveData.postValue(UserRepository.loadMyFavList())
val response = UserRepository.loadMyFavList()
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
myFavData = response.data
}
}
_myFavListLiveData.postValue(response)
}
}
fun likePost(postId: String, postType: PostType, categoryId: String = "0"){
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
myFavApiService.likePost(
FormBody.Builder()
.add("post_id", postId)
.add("post_type", postType.value)
.build()
)
}
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
changeLikeLocally(postId, postType, true)
}
}
}
}
fun unLikePost(postId: String, postType: PostType, categoryId: String = "0") {
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
myFavApiService.unLikePost(
FormBody.Builder()
.add("post_id", postId)
.add("post_type", postType.value)
.add("category", categoryId)
.build()
)
}
when (response) {
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
changeLikeLocally(postId, postType, false)
}
}
}
}
fun markAsFavShowLocally(showData: ShowData, addToFav: Boolean){
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
if (addToFav){
myFavApiService.addToFav(
FormBody.Builder()
.add("post_id", "${showData.id}")
.add("post_type", PostType.WEB_SERIES.value)
.build()
)
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${showData.id}")
.add("post_type", PostType.WEB_SERIES.value)
.build()
)
}
}
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
myFavData?.result?.show_data?.let {
if (addToFav){
it.add(showData)
}else{
it.remove(showData)
}
}
}
}
}
}
fun markAsFavAudioLocally(audioData: AudioData, addToFav: Boolean){
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
if (addToFav){
myFavApiService.addToFav(
FormBody.Builder()
.add("post_id", "${audioData.id}")
.add("post_type", PostType.AUDIO_BOOKS.value)
.build()
)
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${audioData.id}")
.add("post_type", PostType.AUDIO_BOOKS.value)
.build()
)
}
}
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
myFavData?.result?.audio_data?.let {
if (addToFav){
it.add(audioData)
}else{
it.remove(audioData)
}
}
}
}
}
}
fun markAsFavKaraokeLocally(karaokeData: SingKaraokeData, addToFav: Boolean){
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
if (addToFav){
myFavApiService.addToFav(
FormBody.Builder()
.add("post_id", "${karaokeData.id}")
.add("post_type", PostType.KARAOKE.value)
.build()
)
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${karaokeData.id}")
.add("post_type", PostType.KARAOKE.value)
.build()
)
}
}
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
myFavData?.result?.sing_karaoke_data?.let {
if (addToFav){
it.add(karaokeData)
}else{
it.remove(karaokeData)
}
}
}
}
}
}
fun markAsFavGameLocally(gameData: GameData, addToFav: Boolean){
CoroutineScope(Dispatchers.IO).launch {
val response = RetrofitHelper.handleApiCall {
if (addToFav){
myFavApiService.addToFav(
FormBody.Builder()
.add("post_id", "${gameData.id}")
.add("post_type", PostType.GAMES.value)
.build()
)
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${gameData.id}")
.add("post_type", PostType.GAMES.value)
.build()
)
}
}
when (response){
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
myFavData?.result?.game_data?.let {
if (addToFav){
it.add(gameData)
}else{
it.remove(gameData)
}
}
}
}
}
}
private fun changeLikeLocally(id: String, postType: PostType, isLiked: Boolean){
when(postType){
PostType.WEB_SERIES -> {
myFavData?.result?.show_data?.let {
for (show in it){
if ("${show.id}" == id){
show.is_liked = isLiked
show.likes_count?.let { count ->
show.likes_count = if (isLiked) count + 1
else max(0, count - 1)
}
break
}
}
}
}
PostType.AUDIO_BOOKS -> {
myFavData?.result?.audio_data?.let {
for (audio in it){
if ("${audio.id}" == id){
audio.is_liked = isLiked
audio.likes_count?.let { count ->
audio.likes_count = if (isLiked) count + 1
else max(0, count - 1)
}
break
}
}
}
}
PostType.KARAOKE -> {
myFavData?.result?.sing_karaoke_data?.let {
for (song in it){
if ("${song.id}" == id){
song.is_liked = isLiked
song.likes_count?.let { count ->
song.likes_count = if (isLiked) count + 1
else max(0, count - 1)
}
break
}
}
}
}
PostType.GAMES -> {
myFavData?.result?.game_data?.let {
for (game in it){
if ("${game.id}" == id){
game.is_liked = isLiked
game.likes_count?.let { count ->
game.likes_count = if (isLiked) count + 1
else max(0, count - 1)
}
break
}
}
}
}
}
}
}

View File

@@ -0,0 +1,93 @@
package com.woka.home.mylist.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.AudioData
import com.woka.home.mylist.models.PostType
import java.util.concurrent.Executors
import kotlin.math.max
class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<AudioData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<AudioData>(){
override fun areItemsTheSame(oldItem: AudioData, newItem: AudioData): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: AudioData, newItem: AudioData): Boolean {
return oldItem.title == newItem.title &&
oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count
}
}
private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL)
.setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
.build()
}
constructor(): this(DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
FavViewHolderBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val audioData = getItem(position)
holder.binding.apply {
audioData.thumbnail_path?.let {
Glide.with(root.context)
.load(it)
.into(image)
}
title.text = audioData.title
audioData.likes_count?.let {
likeCount.text = "$it"
}
audioData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (like.isSelected){
MyListRepository.unLikePost(
"${audioData.id}",
PostType.AUDIO_BOOKS
)
audioData.likes_count?.let {
likeCount.text = "${max(it - 1, 0)}"
}
}else{
MyListRepository.likePost(
"${audioData.id}",
PostType.AUDIO_BOOKS
)
audioData.likes_count?.let {
val value = it + 1
likeCount.text = "$value"
}
}
like.isSelected = !like.isSelected
}
fav.isSelected = true
}
}
}

View File

@@ -0,0 +1,93 @@
package com.woka.home.mylist.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.GameData
import com.woka.home.mylist.models.PostType
import java.util.concurrent.Executors
import kotlin.math.max
class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<GameData>(){
override fun areItemsTheSame(oldItem: GameData, newItem: GameData): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: GameData, newItem: GameData): Boolean {
return oldItem.title == newItem.title &&
oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count
}
}
private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL)
.setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
.build()
}
constructor(): this(DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
FavViewHolderBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val gameData = getItem(position)
holder.binding.apply {
gameData.thumbnail_path?.let {
Glide.with(root.context)
.load(it)
.into(image)
}
title.text = gameData.title
gameData.likes_count?.let {
likeCount.text = "$it"
}
gameData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (like.isSelected){
MyListRepository.unLikePost(
"${gameData.id}",
PostType.GAMES
)
gameData.likes_count?.let {
likeCount.text = "${max(it - 1, 0)}"
}
}else{
MyListRepository.likePost(
"${gameData.id}",
PostType.GAMES
)
gameData.likes_count?.let {
val value = it + 1
likeCount.text = "$value"
}
}
like.isSelected = !like.isSelected
}
fav.isSelected = true
}
}
}

View File

@@ -0,0 +1,93 @@
package com.woka.home.mylist.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.SingKaraokeData
import java.util.concurrent.Executors
import kotlin.math.max
class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<SingKaraokeData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<SingKaraokeData>(){
override fun areItemsTheSame(oldItem: SingKaraokeData, newItem: SingKaraokeData): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: SingKaraokeData, newItem: SingKaraokeData): Boolean {
return oldItem.title == newItem.title &&
oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count
}
}
private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL)
.setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
.build()
}
constructor(): this(DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
FavViewHolderBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val karaokeData = getItem(position)
holder.binding.apply {
karaokeData.thumbnail_path?.let {
Glide.with(root.context)
.load(it)
.into(image)
}
title.text = karaokeData.title
karaokeData.likes_count?.let {
likeCount.text = "$it"
}
karaokeData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (like.isSelected){
MyListRepository.unLikePost(
"${karaokeData.id}",
PostType.KARAOKE
)
karaokeData.likes_count?.let {
likeCount.text = "${max(it - 1, 0)}"
}
}else{
MyListRepository.likePost(
"${karaokeData.id}",
PostType.KARAOKE
)
karaokeData.likes_count?.let {
val value = it + 1
likeCount.text = "$value"
}
}
like.isSelected = !like.isSelected
}
fav.isSelected = true
}
}
}

View File

@@ -7,15 +7,22 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.ShowData
import java.util.concurrent.Executors
import kotlin.math.max
class WebSeriesAdapter(config: AsyncDifferConfig<ShowData>): ListAdapter<ShowData, FavoriteViewHolder>(config) {
class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig<ShowData>): ListAdapter<ShowData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<ShowData>(){
override fun areItemsTheSame(oldItem: ShowData, newItem: ShowData): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: ShowData, newItem: ShowData): Boolean = oldItem == newItem
override fun areContentsTheSame(oldItem: ShowData, newItem: ShowData): Boolean {
return oldItem.title == newItem.title &&
oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count
}
}
private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL)
@@ -23,7 +30,7 @@ class WebSeriesAdapter(config: AsyncDifferConfig<ShowData>): ListAdapter<ShowDat
.build()
}
constructor(): this(DIFF_CONFIG)
constructor(categoryId: String): this(categoryId, DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
@@ -47,7 +54,54 @@ class WebSeriesAdapter(config: AsyncDifferConfig<ShowData>): ListAdapter<ShowDat
title.text = showData.title
showData.likes_count?.let {
likeCount.text = "$it"
}
showData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (like.isSelected){
MyListRepository.unLikePost(
"${showData.id}",
PostType.WEB_SERIES,
categoryId
)
showData.likes_count?.let {
likeCount.text = "${max(it - 1, 0)}"
}
}else{
MyListRepository.likePost(
"${showData.id}",
PostType.WEB_SERIES,
categoryId
)
showData.likes_count?.let {
val value = it + 1
likeCount.text = "$value"
}
}
like.isSelected = !like.isSelected
}
fav.isSelected = true
fav.setOnClickListener {
if (fav.isSelected){
MyListRepository.markAsFavShowLocally(
showData,
false
)
currentList.removeAt(position)
notifyItemRemoved(position)
}
}
}
}
}

View File

@@ -11,9 +11,9 @@ data class AudioData(
val description: String?,
val gender_master_id: String?,
val id: Int?,
val is_liked: Boolean?,
var is_liked: Boolean?,
val language_master_id: Int?,
val likes_count: Int?,
var likes_count: Int?,
val mark_as_favourite: Boolean?,
val media_id: String?,
val release_date: String?,

View File

@@ -10,9 +10,9 @@ data class GameData(
val game_url: String?,
val gender_master_id: String?,
val id: Int?,
val is_liked: Boolean?,
var is_liked: Boolean?,
val language_master_id: Int?,
val likes_count: Int?,
var likes_count: Int?,
val mark_as_favourite: Boolean?,
val release_date: String?,
val screen_orientation: String?,

View File

@@ -0,0 +1,8 @@
package com.woka.home.mylist.models
enum class PostType(val value: String) {
WEB_SERIES("1"),
AUDIO_BOOKS("7"),
KARAOKE("8"),
GAMES("6");
}

View File

@@ -1,9 +1,9 @@
package com.woka.home.mylist.models
data class Result(
val audio_data: List<AudioData>?,
val game_data: List<GameData>?,
val show_data: List<ShowData>?,
val sing_karaoke_data: List<SingKaraokeData>?,
val video_data: List<Any>?
val audio_data: MutableList<AudioData>?,
val game_data: MutableList<GameData>?,
val show_data: MutableList<ShowData>?,
val sing_karaoke_data: MutableList<SingKaraokeData>?,
val video_data: MutableList<Any>?
)

View File

@@ -9,9 +9,9 @@ data class ShowData(
val description: String?,
val gender_master_id: String?,
val id: Int?,
val is_liked: Boolean?,
val likes_count: Int?,
val mark_as_favourite: Boolean?,
var is_liked: Boolean?,
var likes_count: Int?,
var mark_as_favourite: Boolean?,
val show_type: String?,
val thumbnail_path: String?,
val title: String?,

View File

@@ -10,9 +10,9 @@ data class SingKaraokeData(
val duration: String?,
val gender_master_id: String?,
val id: Int?,
val is_liked: Boolean?,
var is_liked: Boolean?,
val language_master_id: Int?,
val likes_count: Int?,
var likes_count: Int?,
val mark_as_favourite: Boolean?,
val release_date: String?,
val thumbnail_path: String?,