Created FavAudioFragment, FavGameFragment, FavKaraokeFragment for view all of every module.

Integrated lazy loading in all of above.

Category wise data loading of web series.

Updating latest data of 3 when removed item from mylist in web series (both)
This commit is contained in:
2024-08-09 20:59:57 +05:30
parent a10f0a06bb
commit 72e7531e68
27 changed files with 813 additions and 551 deletions

View File

@@ -14,7 +14,7 @@ import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.setVisibility
import com.woka.utils.toast import com.woka.utils.toast
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.math.max import kotlin.math.max
@@ -23,6 +23,7 @@ class AudioBooksAdapter(
private val context: Context, private val context: Context,
private var onBookClicked: (AudioBookData) -> Unit, private var onBookClicked: (AudioBookData) -> Unit,
private var onBookChanged: (id: Int, AudioBookData) -> Unit, private var onBookChanged: (id: Int, AudioBookData) -> Unit,
private val showLikeAndFav: Boolean = true,
private val noSignInListener: () -> Unit private val noSignInListener: () -> Unit
): ListAdapter<AudioBookData, AudioBooksAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) { ): ListAdapter<AudioBookData, AudioBooksAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) {
@@ -76,9 +77,9 @@ class AudioBooksAdapter(
} }
} }
like.show() like.setVisibility(showLikeAndFav)
likeCount.show() likeCount.setVisibility(showLikeAndFav)
fav.show() fav.setVisibility(showLikeAndFav)
audioBook.likes_count?.let { audioBook.likes_count?.let {
likeCount.text = "$it" likeCount.text = "$it"

View File

@@ -53,6 +53,7 @@ import com.woka.onboard.views.OnboardActivity
import com.woka.players.models.VideoPlayList import com.woka.players.models.VideoPlayList
import com.woka.players.views.PlayerActivity import com.woka.players.views.PlayerActivity
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.userdata.UserRepository
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
@@ -62,7 +63,6 @@ import com.woka.webseries.models.ShowData
import com.woka.webseries.views.WebSeriesActivity import com.woka.webseries.views.WebSeriesActivity
import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_CATEGORY import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_CATEGORY
import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_DATA import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_DATA
import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_ID
import com.woka.wokagames.GamesRepository import com.woka.wokagames.GamesRepository
import com.woka.wokagames.models.listing.GameData import com.woka.wokagames.models.listing.GameData
import com.woka.wokagames.playerr.GamePlayerActivity import com.woka.wokagames.playerr.GamePlayerActivity
@@ -87,6 +87,7 @@ class MyListFragment : Fragment() {
private lateinit var dialogBinding: DialogModuleShowerBinding private lateinit var dialogBinding: DialogModuleShowerBinding
private lateinit var moduleShowerDialog: Dialog private lateinit var moduleShowerDialog: Dialog
private var itemRemovedFromDialog = false
private val clickHelper = ClicksHelper private val clickHelper = ClicksHelper
@@ -98,11 +99,11 @@ class MyListFragment : Fragment() {
viewModel = ViewModelProvider(requireActivity())[HomeViewModel::class.java] viewModel = ViewModelProvider(requireActivity())[HomeViewModel::class.java]
// adapters // adapters
webSeriesEAdapter = WebSeriesAdapter(requireContext(),"1", ::onListGotEmpty) webSeriesEAdapter = WebSeriesAdapter("1")
webSeriesHAdapter = WebSeriesAdapter(requireContext(),"18", ::onListGotEmpty) webSeriesHAdapter = WebSeriesAdapter("18")
audioBooksAdapter = FavAudioAdapter(requireContext(), ::onListGotEmpty, ::onAudioBookClicked) audioBooksAdapter = FavAudioAdapter()
karaokeAdapter = FavKaraokeAdapter(requireContext(), ::onListGotEmpty, ::onKaraokeClicked) karaokeAdapter = FavKaraokeAdapter()
gamesAdapter = FavGamesAdapter(requireContext(), ::onListGotEmpty, ::onGameClicked) gamesAdapter = FavGamesAdapter()
// dialogs // dialogs
dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater) dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater)
@@ -121,7 +122,7 @@ class MyListFragment : Fragment() {
if (userPrefs?.userType != UserType.GUEST) { if (userPrefs?.userType != UserType.GUEST) {
loadFavoriteList() loadFavoriteList()
}else{ } else {
binding.noSignInView.show() binding.noSignInView.show()
} }
@@ -137,19 +138,13 @@ class MyListFragment : Fragment() {
rvWebSeriesEnglish.adapter = webSeriesEAdapter rvWebSeriesEnglish.adapter = webSeriesEAdapter
rvWebSeriesHindi.adapter = webSeriesHAdapter rvWebSeriesHindi.adapter = webSeriesHAdapter
webSeriesHAdapter.onShowClickListener = ::onWebShowClicked
webSeriesHAdapter.onLikeChanged = ::onWebShowItemChanged
webSeriesEAdapter.onShowClickListener = ::onWebShowClicked
webSeriesEAdapter.onLikeChanged = ::onWebShowItemChanged
rvAudioBooks.adapter = audioBooksAdapter rvAudioBooks.adapter = audioBooksAdapter
rvKaraoke.adapter = karaokeAdapter rvKaraoke.adapter = karaokeAdapter
rvGames.adapter = gamesAdapter rvGames.adapter = gamesAdapter
} }
} }
private fun clickEvents(){ private fun clickEvents() {
binding.apply { binding.apply {
backBtn.setOnClickListener { backBtn.setOnClickListener {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
@@ -169,8 +164,15 @@ class MyListFragment : Fragment() {
clickHelper.upsertClickEvent(ContentType.OTHERS) clickHelper.upsertClickEvent(ContentType.OTHERS)
} }
webSeriesHAdapter.onShowClickListener = ::onWebShowClicked
webSeriesEAdapter.onShowClickListener = ::onWebShowClicked
audioBooksAdapter.onBookClicked = ::onAudioBookClicked
karaokeAdapter.onKaraokeClicked = ::onKaraokeClicked
gamesAdapter.onGameClicked = ::onGameClicked
webSeriesEngViewAll.setOnClickListener { webSeriesEngViewAll.setOnClickListener {
activity?.let {activity -> activity?.let { activity ->
startActivity(Intent(activity, FavoritesActivity::class.java).apply { startActivity(Intent(activity, FavoritesActivity::class.java).apply {
putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.web_series_english)) putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.web_series_english))
putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.SERIES.id) putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.SERIES.id)
@@ -178,32 +180,69 @@ class MyListFragment : Fragment() {
}) })
} }
} }
}
}
private fun registerIntentLaunchers(){ webSeriesHinViewAll.setOnClickListener {
webShowIntentLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ activity?.let { activity ->
if (it.resultCode == AppCompatActivity.RESULT_OK){ startActivity(Intent(activity, FavoritesActivity::class.java).apply {
it.data?.getIntExtra(EXTRA_SHOW_ID, -1)?.let { showId -> putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.web_series_hindi))
if (showId != -1){ putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.SERIES.id)
onWebShowItemChanged(showId) putExtra(EXTRA_FAVORITE_WEB_SERIES_IS_ENGLISH, false)
} })
}
}
audioBooksViewAll.setOnClickListener {
activity?.let { activity ->
startActivity(Intent(activity, FavoritesActivity::class.java).apply {
putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.audio_books))
putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.AUDIO.id)
})
}
}
gamesViewAll.setOnClickListener {
activity?.let { activity ->
startActivity(Intent(activity, FavoritesActivity::class.java).apply {
putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.games))
putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.GAME.id)
})
}
}
karaokeViewAll.setOnClickListener {
activity?.let { activity ->
startActivity(Intent(activity, FavoritesActivity::class.java).apply {
putExtra(EXTRA_FAVORITE_TITLE, getString(R.string.karaoke))
putExtra(EXTRA_FAVORITE_CONTENT_TYPE, ContentType.KARAOKE_VIDEO.id)
})
} }
} }
} }
} }
private fun loadFavoriteList(){ private fun registerIntentLaunchers() {
webShowIntentLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == AppCompatActivity.RESULT_OK) {
it.data?.getStringExtra(EXTRA_SHOW_CATEGORY)?.let { showCategory ->
onWebShowItemChanged(showCategory)
}
}
}
}
private fun loadFavoriteList() {
lifecycleScope.launch { lifecycleScope.launch {
binding.apply { binding.apply {
progressBar.show() progressBar.show()
noData.hide() noData.hide()
when (val it = MyListRepository.loadMyFavList()){ when (val it = MyListRepository.loadMyFavList()) {
is ApiResult.Error -> { is ApiResult.Error -> {
progressBar.hide() progressBar.hide()
noData.show() noData.show()
} }
is ApiResult.Loading -> {} is ApiResult.Loading -> {}
is ApiResult.Success -> { is ApiResult.Success -> {
it.data?.result?.let { result -> it.data?.result?.let { result ->
@@ -212,19 +251,22 @@ class MyListFragment : Fragment() {
progressBar.hide() progressBar.hide()
result.show_data?.let {showData -> result.show_data?.let { showData ->
if (showData.isNotEmpty()){ if (showData.isNotEmpty()) {
val engList = mutableListOf<BookmarkedShowData>() val engList = mutableListOf<BookmarkedShowData>()
val hinList = mutableListOf<BookmarkedShowData>() val hinList = mutableListOf<BookmarkedShowData>()
for (show in showData){ for (show in showData) {
if (show.bookmark_category_ids?.isEmpty() == true) continue if (show.bookmark_category_ids?.isEmpty() == true) continue
val ids = show.bookmark_category_ids?.split(",") val ids = show.bookmark_category_ids?.split(",")
ids?.let {bIds -> ids?.let { bIds ->
if (bIds.isNotEmpty()) { if (bIds.isNotEmpty()) {
when (bIds.size) { when (bIds.size) {
1 -> if (bIds[0] == "1") engList.add(show) else hinList.add(show) 1 -> if (bIds[0] == "1") engList.add(show) else hinList.add(
show
)
else -> { else -> {
engList.add(show) engList.add(show)
hinList.add(show) hinList.add(show)
@@ -234,27 +276,27 @@ class MyListFragment : Fragment() {
} }
} }
if (engList.isNotEmpty()){ if (engList.isNotEmpty()) {
webSeriesEnglishView.show() webSeriesEnglishView.show()
dataLoaded = true dataLoaded = true
webSeriesEAdapter.submitList(engList.reversed()) webSeriesEAdapter.submitList(engList)
webSeriesEngViewAll.setVisibility(engList.size >= 3) webSeriesEngViewAll.setVisibility(showData.size >= 3)
}else{ } else {
webSeriesEnglishView.hide() webSeriesEnglishView.hide()
} }
if (hinList.isNotEmpty()){ if (hinList.isNotEmpty()) {
webSeriesHindiView.show() webSeriesHindiView.show()
dataLoaded = true dataLoaded = true
webSeriesHAdapter.submitList(hinList.reversed()) webSeriesHAdapter.submitList(hinList)
webSeriesHinViewAll.setVisibility(hinList.size >= 3) webSeriesHinViewAll.setVisibility(showData.size >= 3)
}else{ } else {
webSeriesHindiView.hide() webSeriesHindiView.hide()
} }
}else{ } else {
webSeriesEnglishView.hide() webSeriesEnglishView.hide()
webSeriesHindiView.hide() webSeriesHindiView.hide()
} }
@@ -262,46 +304,46 @@ class MyListFragment : Fragment() {
result.audio_data?.let { audioData -> result.audio_data?.let { audioData ->
if (audioData.isNotEmpty()){ if (audioData.isNotEmpty()) {
audioBooksView.show() audioBooksView.show()
dataLoaded = true dataLoaded = true
audioBooksAdapter.submitList(audioData.reversed()) audioBooksAdapter.submitList(audioData)
audioBooksViewAll.setVisibility(audioData.size >= 3) audioBooksViewAll.setVisibility(audioData.size >= 3)
}else{ } else {
audioBooksView.hide() audioBooksView.hide()
} }
} }
result.sing_karaoke_data?.let { singKaraokeData -> result.sing_karaoke_data?.let { singKaraokeData ->
if (singKaraokeData.isNotEmpty()){ if (singKaraokeData.isNotEmpty()) {
karaokeView.show() karaokeView.show()
dataLoaded = true dataLoaded = true
karaokeAdapter.submitList(singKaraokeData.reversed()) karaokeAdapter.submitList(singKaraokeData)
karaokeViewAll.setVisibility(singKaraokeData.size >= 3) karaokeViewAll.setVisibility(singKaraokeData.size >= 3)
}else{ } else {
karaokeView.hide() karaokeView.hide()
} }
} }
result.game_data?.let { gamesData -> result.game_data?.let { gamesData ->
if (gamesData.isNotEmpty()){ if (gamesData.isNotEmpty()) {
gamesView.show() gamesView.show()
dataLoaded = true dataLoaded = true
gamesAdapter.submitList(gamesData.reversed()) gamesAdapter.submitList(gamesData)
gamesViewAll.setVisibility(gamesData.size >= 3) gamesViewAll.setVisibility(gamesData.size >= 3)
}else{ } else {
gamesView.hide() gamesView.hide()
} }
} }
if (!dataLoaded){ if (!dataLoaded) {
noData.show() noData.show()
}else{ } else {
noData.hide() noData.hide()
} }
} }
@@ -311,10 +353,9 @@ class MyListFragment : Fragment() {
} }
} }
private fun setObservers(){ private fun setObservers() {
binding.apply { binding.apply {
viewModel.localeChangeLiveData.observe(viewLifecycleOwner) {
viewModel.localeChangeLiveData.observe(viewLifecycleOwner){
webSeriesEngTxt.text = getString(R.string.web_series_english) webSeriesEngTxt.text = getString(R.string.web_series_english)
webSeriesHinTxt.text = getString(R.string.web_series_hindi) webSeriesHinTxt.text = getString(R.string.web_series_hindi)
audioBooksTxt.text = getString(R.string.audio_books) audioBooksTxt.text = getString(R.string.audio_books)
@@ -323,23 +364,23 @@ class MyListFragment : Fragment() {
noDataTxt.text = getString(R.string.no_favorites_added) noDataTxt.text = getString(R.string.no_favorites_added)
if (webSeriesEAdapter.currentList.isNotEmpty()){ if (webSeriesEAdapter.currentList.isNotEmpty()) {
webSeriesEAdapter.notifyItemRangeChanged(0, webSeriesEAdapter.currentList.size) webSeriesEAdapter.notifyItemRangeChanged(0, webSeriesEAdapter.currentList.size)
} }
if (webSeriesHAdapter.currentList.isNotEmpty()){ if (webSeriesHAdapter.currentList.isNotEmpty()) {
webSeriesHAdapter.notifyItemRangeChanged(0, webSeriesHAdapter.currentList.size) webSeriesHAdapter.notifyItemRangeChanged(0, webSeriesHAdapter.currentList.size)
} }
if (audioBooksAdapter.currentList.isNotEmpty()){ if (audioBooksAdapter.currentList.isNotEmpty()) {
audioBooksAdapter.notifyItemRangeChanged(0, audioBooksAdapter.currentList.size) audioBooksAdapter.notifyItemRangeChanged(0, audioBooksAdapter.currentList.size)
} }
if (karaokeAdapter.currentList.isNotEmpty()){ if (karaokeAdapter.currentList.isNotEmpty()) {
karaokeAdapter.notifyItemRangeChanged(0, karaokeAdapter.currentList.size) karaokeAdapter.notifyItemRangeChanged(0, karaokeAdapter.currentList.size)
} }
if (gamesAdapter.currentList.isNotEmpty()){ if (gamesAdapter.currentList.isNotEmpty()) {
gamesAdapter.notifyItemRangeChanged(0, gamesAdapter.currentList.size) gamesAdapter.notifyItemRangeChanged(0, gamesAdapter.currentList.size)
} }
} }
@@ -371,16 +412,17 @@ class MyListFragment : Fragment() {
} }
} }
private fun onListGotEmpty(postType: PostType, isEng: Boolean = true){ private fun onListGotEmpty(postType: PostType, isEng: Boolean = true) {
binding.apply { binding.apply {
when (postType){ when (postType) {
PostType.WEB_SERIES -> { PostType.WEB_SERIES -> {
if (isEng){ if (isEng) {
webSeriesEnglishView.hide() webSeriesEnglishView.hide()
}else{ } else {
webSeriesHindiView.hide() webSeriesHindiView.hide()
} }
} }
PostType.AUDIO_BOOKS -> audioBooksView.hide() PostType.AUDIO_BOOKS -> audioBooksView.hide()
PostType.KARAOKE -> karaokeView.hide() PostType.KARAOKE -> karaokeView.hide()
PostType.GAMES -> gamesView.hide() PostType.GAMES -> gamesView.hide()
@@ -390,14 +432,15 @@ class MyListFragment : Fragment() {
!webSeriesHindiView.isVisible && !webSeriesHindiView.isVisible &&
!audioBooksView.isVisible && !audioBooksView.isVisible &&
!karaokeView.isVisible && !karaokeView.isVisible &&
!gamesView.isVisible){ !gamesView.isVisible
) {
noData.show() noData.show()
} }
} }
} }
// web show // web show
private fun onWebShowClicked(showData: BookmarkedShowData, categoryId: String){ private fun onWebShowClicked(showData: BookmarkedShowData, categoryId: String) {
webShowIntentLauncher?.launch(Intent(context, WebSeriesActivity::class.java).apply { webShowIntentLauncher?.launch(Intent(context, WebSeriesActivity::class.java).apply {
putExtra(EXTRA_SHOW_DATA, ShowData(showData)) putExtra(EXTRA_SHOW_DATA, ShowData(showData))
putExtra(EXTRA_SHOW_CATEGORY, categoryId) putExtra(EXTRA_SHOW_CATEGORY, categoryId)
@@ -406,20 +449,31 @@ class MyListFragment : Fragment() {
clickHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) clickHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId)
} }
private fun onWebShowItemChanged(showId: Int){ private fun onWebShowItemChanged(showCategory: String) {
val englishPosition = webSeriesEAdapter.currentList.indexOfFirst { it.id == showId } lifecycleScope.launch {
if (englishPosition > -1 && englishPosition < webSeriesEAdapter.currentList.size){ when (val response = UserRepository.loadMyFavList(
webSeriesEAdapter.notifyItemChanged(englishPosition) ContentType.SERIES.id,
} 0, 3, showCategory
)) {
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
response.data?.result?.show_data?.let {
if (showCategory == "1"){
webSeriesEAdapter.submitList(it)
}else if (showCategory == "18"){
webSeriesHAdapter.submitList(it)
}
val hindiPosition = webSeriesHAdapter.currentList.indexOfFirst { it.id == showId } MyListRepository.updateSeriesList(it)
if (hindiPosition > -1 && hindiPosition < webSeriesHAdapter.currentList.size){ }
webSeriesHAdapter.notifyItemChanged(hindiPosition) }
}
} }
} }
// audio books // audio books
private fun onAudioBookClicked(audioBookData: FavAudioBookData, position: Int){ private fun onAudioBookClicked(audioBookData: FavAudioBookData, pos: Int) {
dialogBinding.apply { dialogBinding.apply {
audioBookData.content_more_details?.let { moreDetailsList -> audioBookData.content_more_details?.let { moreDetailsList ->
@@ -478,7 +532,8 @@ class MyListFragment : Fragment() {
} }
activity?.let { activity?.let {
watchCard.backgroundTintList = ColorStateList.valueOf(it.getColor(R.color.audio_grad_one)) watchCard.backgroundTintList =
ColorStateList.valueOf(it.getColor(R.color.audio_grad_one))
} }
watchCard.text = getString(R.string.listen_now) watchCard.text = getString(R.string.listen_now)
watchCard.setOnClickListener { watchCard.setOnClickListener {
@@ -491,15 +546,12 @@ class MyListFragment : Fragment() {
!like.isSelected !like.isSelected
) )
audioBookData.id?.let {
onAudioItemChanged(it)
}
like.isSelected = !like.isSelected like.isSelected = !like.isSelected
likeCount.text = "${audioBookData.likes_count}" likeCount.text = "${audioBookData.likes_count}"
} }
fav.setOnClickListener { fav.setOnClickListener {
if (context?.isNetworkConnected() == false){ if (context?.isNetworkConnected() == false) {
toast(getString(R.string.no_internet)) toast(getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
@@ -509,23 +561,27 @@ class MyListFragment : Fragment() {
!fav.isSelected !fav.isSelected
) )
try { fav.isSelected = !fav.isSelected
audioBooksAdapter.notifyItemRemoved(position)
} catch (e: Exception) {
// do nothing
}
if (audioBooksAdapter.currentList.isEmpty()){ itemRemovedFromDialog = !fav.isSelected
onListGotEmpty(PostType.AUDIO_BOOKS, true)
}
moduleShowerDialog.dismiss()
} }
close.setOnClickListener { close.setOnClickListener {
moduleShowerDialog.dismiss() moduleShowerDialog.dismiss()
} }
moduleShowerDialog.setOnDismissListener {
if (itemRemovedFromDialog){
// item was removed at last
onAudioItemChanged()
}else{
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
}
}
itemRemovedFromDialog = false
moduleShowerDialog.show() moduleShowerDialog.show()
} }
} }
@@ -533,11 +589,22 @@ class MyListFragment : Fragment() {
clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id)
} }
private fun onAudioItemChanged(id: Int) { private fun onAudioItemChanged() {
// updating book list lifecycleScope.launch {
val position = audioBooksAdapter.currentList.indexOfFirst { it.id == id } when (val response = UserRepository.loadMyFavList(
if (position >= 0 && position < audioBooksAdapter.currentList.size) { ContentType.AUDIO.id,
audioBooksAdapter.notifyItemChanged(position) 0, 3
)) {
is ApiResult.Error -> {}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
response.data?.result?.audio_data?.let {
audioBooksAdapter.submitList(it)
MyListRepository.updateAudioList(it)
}
}
}
} }
} }
@@ -546,22 +613,22 @@ class MyListFragment : Fragment() {
var url: String? = null var url: String? = null
var title = "" var title = ""
audioBookData.content_more_details?.let {moreDetails -> audioBookData.content_more_details?.let { moreDetails ->
if (moreDetails.isNotEmpty()){ if (moreDetails.isNotEmpty()) {
if (userPrefs?.appLanguage == "hi" && moreDetails.size > 1){ if (userPrefs?.appLanguage == "hi" && moreDetails.size > 1) {
url = moreDetails[1]?.url url = moreDetails[1]?.url
title = moreDetails[1]?.title?:"" title = moreDetails[1]?.title ?: ""
}else{ } else {
url = moreDetails[0]?.url url = moreDetails[0]?.url
title = moreDetails[0]?.title?:"" title = moreDetails[0]?.title ?: ""
} }
}else{ } else {
url = audioBookData.audio_url url = audioBookData.audio_url
title = audioBookData.title?:"" title = audioBookData.title ?: ""
} }
} }
activity?.let {activity -> activity?.let { activity ->
url?.let { url?.let {
startActivity(Intent(activity, PlayerActivity::class.java).apply { startActivity(Intent(activity, PlayerActivity::class.java).apply {
putExtra( putExtra(
@@ -588,7 +655,7 @@ class MyListFragment : Fragment() {
} }
// woka games // woka games
private fun onGameClicked(gameData: FavGameData, position: Int){ private fun onGameClicked(gameData: FavGameData, position: Int) {
dialogBinding.apply { dialogBinding.apply {
gameData.content_more_details?.let { moreDetailsList -> gameData.content_more_details?.let { moreDetailsList ->
@@ -647,14 +714,18 @@ class MyListFragment : Fragment() {
} }
activity?.let { activity?.let {
watchCard.backgroundTintList = ColorStateList.valueOf(it.getColor(R.color.game_grad_one)) watchCard.backgroundTintList =
ColorStateList.valueOf(it.getColor(R.color.game_grad_one))
} }
watchCard.text = getString(R.string.play_now) watchCard.text = getString(R.string.play_now)
watchCard.setOnClickListener { watchCard.setOnClickListener {
activity?.let {activity -> activity?.let { activity ->
gameData.game_url?.let { gameData.game_url?.let {
startActivity(Intent(activity, GamePlayerActivity::class.java).apply { startActivity(Intent(activity, GamePlayerActivity::class.java).apply {
putExtra(GamePlayerActivity.EXTRA_GAME_PLAYER_DATA, GamePlayerData(it, gameData.screen_orientation == "Landscape")) putExtra(
GamePlayerActivity.EXTRA_GAME_PLAYER_DATA,
GamePlayerData(it, gameData.screen_orientation == "Landscape")
)
}) })
clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) clickHelper.upsertClickEvent(ContentType.GAME, gameData.id)
@@ -676,7 +747,7 @@ class MyListFragment : Fragment() {
} }
fav.setOnClickListener { fav.setOnClickListener {
if (context?.isNetworkConnected() == false){ if (context?.isNetworkConnected() == false) {
toast(getString(R.string.no_internet)) toast(getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
@@ -692,8 +763,8 @@ class MyListFragment : Fragment() {
// do nothing // do nothing
} }
if (gamesAdapter.currentList.isEmpty()){ if (gamesAdapter.currentList.isEmpty()) {
onListGotEmpty(PostType.GAMES, true) onListGotEmpty(PostType.GAMES)
} }
moduleShowerDialog.dismiss() moduleShowerDialog.dismiss()
@@ -778,16 +849,24 @@ class MyListFragment : Fragment() {
} }
activity?.let { activity?.let {
watchCard.backgroundTintList = ColorStateList.valueOf(it.getColor(R.color.game_grad_one)) watchCard.backgroundTintList =
ColorStateList.valueOf(it.getColor(R.color.game_grad_one))
} }
watchCard.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_mic, 0, 0, 0) watchCard.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_mic, 0, 0, 0)
watchCard.text = getString(R.string.sing_now) watchCard.text = getString(R.string.sing_now)
watchCard.setOnClickListener { watchCard.setOnClickListener {
activity?.let {activity -> activity?.let { activity ->
karaokeData.video_url?.let { karaokeData.video_url?.let {
startActivity(Intent(activity, KaraokePlayerActivity::class.java).apply { startActivity(
putExtra(KaraokePlayerActivity.EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title)) Intent(
}) activity,
KaraokePlayerActivity::class.java
).apply {
putExtra(
KaraokePlayerActivity.EXTRA_KARAOKE_DATA,
KaraokePlayerData(it, karaokeData.title)
)
})
} }
} }
clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id)
@@ -807,7 +886,7 @@ class MyListFragment : Fragment() {
} }
fav.setOnClickListener { fav.setOnClickListener {
if (context?.isNetworkConnected() == false){ if (context?.isNetworkConnected() == false) {
toast(getString(R.string.no_internet)) toast(getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
@@ -823,8 +902,8 @@ class MyListFragment : Fragment() {
// do nothing // do nothing
} }
if (karaokeAdapter.currentList.isEmpty()){ if (karaokeAdapter.currentList.isEmpty()) {
onListGotEmpty(PostType.KARAOKE, true) onListGotEmpty(PostType.KARAOKE)
} }
moduleShowerDialog.dismiss() moduleShowerDialog.dismiss()
@@ -852,9 +931,9 @@ class MyListFragment : Fragment() {
companion object { companion object {
private var instance: MyListFragment? = null private var instance: MyListFragment? = null
private val any = Any() private val any = Any()
fun getInstance(): MyListFragment{ fun getInstance(): MyListFragment {
return synchronized(any){ return synchronized(any) {
if (instance == null){ if (instance == null) {
instance = MyListFragment() instance = MyListFragment()
} }

View File

@@ -1,5 +1,7 @@
package com.woka.home.mylist package com.woka.home.mylist
import com.woka.home.mylist.models.BookmarkedShowData
import com.woka.home.mylist.models.FavAudioBookData
import com.woka.home.mylist.models.MyListResponse import com.woka.home.mylist.models.MyListResponse
import com.woka.home.mylist.models.Result import com.woka.home.mylist.models.Result
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
@@ -12,7 +14,8 @@ object MyListRepository {
mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(),
mutableListOf(), mutableListOf(),
mutableListOf() mutableListOf(),
0
)) ))
/* /*
@@ -26,6 +29,20 @@ object MyListRepository {
this.shallLoadNewData = loadNew this.shallLoadNewData = loadNew
} }
fun updateSeriesList(bookmarkedShowData: MutableList<BookmarkedShowData>) {
myFavData.result?.show_data?.clear()
myFavData.result?.show_data?.addAll(bookmarkedShowData)
shallLoadNewData = false
}
fun updateAudioList(bookmarkedShowData: MutableList<FavAudioBookData>) {
myFavData.result?.audio_data?.clear()
myFavData.result?.audio_data?.addAll(bookmarkedShowData)
shallLoadNewData = false
}
fun clearData(){ fun clearData(){
shallLoadNewData = true shallLoadNewData = true
myFavData.result?.let { myFavData.result?.let {

View File

@@ -1,36 +1,22 @@
package com.woka.home.mylist.adapters package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp
import com.woka.audiobooks.AudioBookRepository
import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.databinding.FavViewHolderBinding import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.models.FavAudioBookData import com.woka.home.mylist.models.FavAudioBookData
import com.woka.home.mylist.models.PostType
import com.woka.utils.isNetworkConnected
import com.woka.utils.show
import com.woka.utils.toast
import java.util.concurrent.Executors import java.util.concurrent.Executors
class FavAudioAdapter(private val context: Context, class FavAudioAdapter: ListAdapter<FavAudioBookData, FavoriteViewHolder>(DIFF_CONFIG) {
config: AsyncDifferConfig<FavAudioBookData>,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
private var onBookClicked: (FavAudioBookData, Int) -> Unit): ListAdapter<FavAudioBookData, FavoriteViewHolder>(config) {
companion object{ companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavAudioBookData>(){ private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavAudioBookData>(){
override fun areItemsTheSame(oldItem: FavAudioBookData, newItem: FavAudioBookData): Boolean = oldItem.id == newItem.id override fun areItemsTheSame(oldItem: FavAudioBookData, newItem: FavAudioBookData): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: FavAudioBookData, newItem: FavAudioBookData): Boolean { override fun areContentsTheSame(oldItem: FavAudioBookData, newItem: FavAudioBookData): Boolean {
return oldItem.title == newItem.title && return oldItem.title == newItem.title
oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count &&
oldItem.mark_as_favourite == newItem.mark_as_favourite
} }
} }
@@ -39,9 +25,7 @@ class FavAudioAdapter(private val context: Context,
.build() .build()
} }
constructor(context: Context, var onBookClicked: ((FavAudioBookData, Int) -> Unit)? = null
onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
onBookClicked: (FavAudioBookData, Int) -> Unit): this(context, DIFF_CONFIG, onListEmptyListener, onBookClicked)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder( return FavoriteViewHolder(
@@ -73,55 +57,8 @@ class FavAudioAdapter(private val context: Context,
} }
} }
like.show()
likeCount.show()
fav.show()
audioBook.likes_count?.let {
likeCount.text = "$it"
}
audioBook.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
AudioBookRepository.likeUnLikeAudioBook(
"${audioBook.id}",
!like.isSelected
)
like.isSelected = !like.isSelected
likeCount.text = "${audioBook.likes_count}"
}
fav.isSelected = audioBook.mark_as_favourite == true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
AudioBookRepository.updateFavShow(
AudioBookData(audioBook),
!fav.isSelected
)
notifyItemRemoved(holder.absoluteAdapterPosition)
if (currentList.isEmpty()){
onListEmptyListener(PostType.AUDIO_BOOKS, true)
}
}
root.setOnClickListener { root.setOnClickListener {
onBookClicked(audioBook, holder.absoluteAdapterPosition) onBookClicked?.invoke(audioBook, holder.absoluteAdapterPosition)
} }
} }
} }

View File

@@ -1,28 +1,16 @@
package com.woka.home.mylist.adapters package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp
import com.woka.databinding.FavViewHolderBinding import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.models.FavGameData import com.woka.home.mylist.models.FavGameData
import com.woka.home.mylist.models.PostType
import com.woka.utils.isNetworkConnected
import com.woka.utils.show
import com.woka.utils.toast
import com.woka.wokagames.GamesRepository
import com.woka.wokagames.models.listing.GameData
import java.util.concurrent.Executors import java.util.concurrent.Executors
class FavGamesAdapter(private val context: Context, class FavGamesAdapter: ListAdapter<FavGameData, FavoriteViewHolder>(DIFF_CONFIG) {
config: AsyncDifferConfig<FavGameData>,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
private val onGameClicked: ((FavGameData, Int) -> Unit)):
ListAdapter<FavGameData, FavoriteViewHolder>(config) {
companion object{ companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavGameData>(){ private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavGameData>(){
@@ -39,9 +27,7 @@ class FavGamesAdapter(private val context: Context,
.build() .build()
} }
constructor(context: Context, var onGameClicked: ((FavGameData, Int) -> Unit)? = null
onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
onGameClicked: ((gameData: FavGameData, pos: Int) -> Unit)): this(context, DIFF_CONFIG, onListEmptyListener, onGameClicked)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder( return FavoriteViewHolder(
@@ -73,55 +59,8 @@ class FavGamesAdapter(private val context: Context,
} }
} }
like.show()
likeCount.show()
fav.show()
gameData.likes_count?.let {
likeCount.text = "$it"
}
gameData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
GamesRepository.likeUnLikeGame(
"${gameData.id}",
!like.isSelected
)
like.isSelected = !like.isSelected
likeCount.text = "${gameData.likes_count}"
}
fav.isSelected = gameData.mark_as_favourite == true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
GamesRepository.updateFavShow(
GameData(gameData),
!fav.isSelected
)
notifyItemRemoved(holder.absoluteAdapterPosition)
if (currentList.isEmpty()){
onListEmptyListener(PostType.GAMES, true)
}
}
root.setOnClickListener { root.setOnClickListener {
onGameClicked(gameData, holder.absoluteAdapterPosition) onGameClicked?.invoke(gameData, holder.absoluteAdapterPosition)
} }
} }
} }

View File

@@ -1,25 +1,16 @@
package com.woka.home.mylist.adapters package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import com.woka.R import com.woka.WokaApp
import com.woka.databinding.FavViewHolderBinding import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.models.FavKaraokeData import com.woka.home.mylist.models.FavKaraokeData
import com.woka.home.mylist.models.PostType
import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.models.listing.KaraokeData
import com.woka.utils.isNetworkConnected
import com.woka.utils.toast
import java.util.concurrent.Executors import java.util.concurrent.Executors
class FavKaraokeAdapter(private val context: Context, class FavKaraokeAdapter : ListAdapter<FavKaraokeData, FavoriteViewHolder>(DIFF_CONFIG) {
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
private var onKaraokeClicked: (FavKaraokeData, Int) -> Unit)
: ListAdapter<FavKaraokeData, FavoriteViewHolder>(DIFF_CONFIG) {
companion object{ companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavKaraokeData>(){ private val DIFF_UTIL = object : DiffUtil.ItemCallback<FavKaraokeData>(){
@@ -38,6 +29,8 @@ class FavKaraokeAdapter(private val context: Context,
.build() .build()
} }
var onKaraokeClicked: ((FavKaraokeData, Int) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder( return FavoriteViewHolder(
FavViewHolderBinding.inflate( FavViewHolderBinding.inflate(
@@ -56,53 +49,20 @@ class FavKaraokeAdapter(private val context: Context,
image.loadImage(it) image.loadImage(it)
} }
title.text = karaokeData.title karaokeData.content_more_details?.let {moreDetailsList ->
title.text = if (moreDetailsList.isNotEmpty()){
karaokeData.likes_count?.let { if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){
likeCount.text = "$it" moreDetailsList[1]?.title
} }else{
moreDetailsList[0]?.title
karaokeData.is_liked?.let { }
like.isSelected = it }else{
} karaokeData.title
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
KaraokeRepository.likeUnLikeSong(
"${karaokeData.id}",
!like.isSelected
)
like.isSelected = !like.isSelected
likeCount.text = "${karaokeData.likes_count}"
}
fav.isSelected = true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
KaraokeRepository.updateFavShow(
KaraokeData(karaokeData),
!fav.isSelected
)
notifyItemRemoved(holder.absoluteAdapterPosition)
if (currentList.isEmpty()){
onListEmptyListener(PostType.KARAOKE, true)
} }
} }
root.setOnClickListener { root.setOnClickListener {
onKaraokeClicked(karaokeData, holder.absoluteAdapterPosition) onKaraokeClicked?.invoke(karaokeData, holder.absoluteAdapterPosition)
} }
} }
} }

View File

@@ -1,27 +1,17 @@
package com.woka.home.mylist.adapters package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FavViewHolderBinding import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.models.BookmarkedShowData import com.woka.home.mylist.models.BookmarkedShowData
import com.woka.home.mylist.models.PostType
import com.woka.utils.isNetworkConnected
import com.woka.utils.show
import com.woka.utils.toast
import com.woka.webseries.WebSeriesRepository
import com.woka.webseries.models.ShowData
import java.util.concurrent.Executors import java.util.concurrent.Executors
class WebSeriesAdapter( class WebSeriesAdapter(
private val context: Context, private val categoryId: String
private val categoryId: String,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)
) : ListAdapter<BookmarkedShowData, FavoriteViewHolder>(DIFF_CONFIG) { ) : ListAdapter<BookmarkedShowData, FavoriteViewHolder>(DIFF_CONFIG) {
companion object { companion object {
@@ -47,7 +37,6 @@ class WebSeriesAdapter(
} }
var onShowClickListener: ((BookmarkedShowData, String) -> Unit)? = null var onShowClickListener: ((BookmarkedShowData, String) -> Unit)? = null
var onLikeChanged: ((Int) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder( return FavoriteViewHolder(
@@ -79,74 +68,6 @@ class WebSeriesAdapter(
} }
} }
likeCount.show()
like.show()
showData.likes_count?.let {
likeCount.text = "$it"
}
showData.is_liked?.let {
like.isSelected = it
}
like.setOnClickListener {
if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
WebSeriesRepository.likeUnLikeShow(
"${showData.id}",
!like.isSelected
)
like.isSelected = !like.isSelected
likeCount.text = "${showData.likes_count}"
showData.likes_count?.let {
likeCount.text = "$it"
}
showData?.id?.let {
onLikeChanged?.invoke(it)
}
}
fav.show()
if (showData.isBookMarked(categoryId)) {
fav.isSelected = true
} else {
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()) {
onListEmptyListener(PostType.WEB_SERIES, categoryId == "1")
}
}
fav.setOnClickListener {
if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (fav.isSelected) {
WebSeriesRepository.updateFavShow(
ShowData(showData),
false,
categoryId
)
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()) {
onListEmptyListener(PostType.WEB_SERIES, categoryId == "1")
}
}
}
card.setOnClickListener { card.setOnClickListener {
onShowClickListener?.invoke(showData, categoryId) onShowClickListener?.invoke(showData, categoryId)
} }

View File

@@ -5,5 +5,6 @@ data class Result(
val game_data: MutableList<FavGameData>?, val game_data: MutableList<FavGameData>?,
val show_data: MutableList<BookmarkedShowData>?, val show_data: MutableList<BookmarkedShowData>?,
val sing_karaoke_data: MutableList<FavKaraokeData>?, val sing_karaoke_data: MutableList<FavKaraokeData>?,
val video_data: MutableList<Any>? val video_data: MutableList<Any>?,
val total_records: Int?
) )

View File

@@ -11,15 +11,12 @@ import androidx.lifecycle.ViewModelProvider
import com.woka.R import com.woka.R
import com.woka.database.models.clicks.ContentType import com.woka.database.models.clicks.ContentType
import com.woka.databinding.ActivityFavoritesBinding import com.woka.databinding.ActivityFavoritesBinding
import com.woka.home.mylist.adapters.WebSeriesAdapter import com.woka.home.mylist.view.fragments.FavAudioFragment
import com.woka.home.mylist.models.PostType import com.woka.home.mylist.view.fragments.FavGameFragment
import com.woka.home.mylist.view.fragments.WebSeriesEngFragment import com.woka.home.mylist.view.fragments.FavKaraokeFragment
import com.woka.home.mylist.view.fragments.FavSeriesFragment
import com.woka.home.mylist.viewmodel.FavoriteViewModel import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.lightStatusBar import com.woka.utils.lightStatusBar
import com.woka.utils.setVisibility
import com.woka.utils.show
class FavoritesActivity : AppCompatActivity() { class FavoritesActivity : AppCompatActivity() {
@@ -32,8 +29,6 @@ class FavoritesActivity : AppCompatActivity() {
private lateinit var binding: ActivityFavoritesBinding private lateinit var binding: ActivityFavoritesBinding
private lateinit var viewModel: FavoriteViewModel private lateinit var viewModel: FavoriteViewModel
private lateinit var adapter: WebSeriesAdapter
private var favTitle: String = "" private var favTitle: String = ""
private var contentType: ContentType? = null private var contentType: ContentType? = null
private var webSeriesIsEnglish = false private var webSeriesIsEnglish = false
@@ -49,13 +44,11 @@ class FavoritesActivity : AppCompatActivity() {
insets insets
} }
window.lightStatusBar(false) window.lightStatusBar(true)
window.navigationBarColor = Color.BLACK window.navigationBarColor = Color.BLACK
viewModel = ViewModelProvider(this)[FavoriteViewModel::class.java] viewModel = ViewModelProvider(this)[FavoriteViewModel::class.java]
adapter = WebSeriesAdapter(this, "1", ::onListEmptyListener)
favTitle = intent.getStringExtra(EXTRA_FAVORITE_TITLE)?:"" favTitle = intent.getStringExtra(EXTRA_FAVORITE_TITLE)?:""
contentType = ContentType.create(intent.getIntExtra(EXTRA_FAVORITE_CONTENT_TYPE, -1)) contentType = ContentType.create(intent.getIntExtra(EXTRA_FAVORITE_CONTENT_TYPE, -1))
webSeriesIsEnglish = intent.getBooleanExtra(EXTRA_FAVORITE_WEB_SERIES_IS_ENGLISH, false) webSeriesIsEnglish = intent.getBooleanExtra(EXTRA_FAVORITE_WEB_SERIES_IS_ENGLISH, false)
@@ -65,12 +58,6 @@ class FavoritesActivity : AppCompatActivity() {
clickEvents() clickEvents()
initFragment() initFragment()
setObservers()
}
private fun onListEmptyListener(postType: PostType, b: Boolean) {
} }
private fun initViews(){ private fun initViews(){
@@ -94,15 +81,27 @@ class FavoritesActivity : AppCompatActivity() {
viewModel.contentType = contentType viewModel.contentType = contentType
viewModel.webSeriesIsEnglish = webSeriesIsEnglish viewModel.webSeriesIsEnglish = webSeriesIsEnglish
fragment = WebSeriesEngFragment() fragment = FavSeriesFragment()
} }
ContentType.SEASON -> {} ContentType.SEASON -> {}
ContentType.EPISODE -> {} ContentType.EPISODE -> {}
ContentType.VIDEO -> {} ContentType.VIDEO -> {}
ContentType.PAINT -> {} ContentType.PAINT -> {}
ContentType.GAME -> {} ContentType.GAME -> {
ContentType.AUDIO -> {} viewModel.contentType = contentType
ContentType.KARAOKE_VIDEO -> {}
fragment = FavGameFragment()
}
ContentType.AUDIO -> {
viewModel.contentType = contentType
fragment = FavAudioFragment()
}
ContentType.KARAOKE_VIDEO -> {
viewModel.contentType = contentType
fragment = FavKaraokeFragment()
}
ContentType.SHOP_PRODUCT -> {} ContentType.SHOP_PRODUCT -> {}
ContentType.PARENTAL_VIDEO -> {} ContentType.PARENTAL_VIDEO -> {}
ContentType.ARTICLE -> {} ContentType.ARTICLE -> {}
@@ -120,55 +119,4 @@ class FavoritesActivity : AppCompatActivity() {
.commit() .commit()
} }
} }
private fun setObservers(){
viewModel.favoritesLiveData.observe(this){
binding.apply {
when (it){
is ApiResult.Error -> {
if (adapter.currentList.isEmpty()){
// no orders at all
dataView.hide()
noData.show()
}else{
// load more orders failed
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.retry)
loadMoreBtn.show()
}
}
is ApiResult.Loading -> {
noData.hide()
dataView.show()
shimmer.show()
loadMoreBtn.hide()
}
is ApiResult.Success -> {
it.data?.let {ordersList ->
noData.hide()
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.load_more)
loadMoreBtn.setVisibility(!viewModel.lastPage)
if (adapter.currentList.isEmpty()){
adapter.submitList(ordersList)
}else{
adapter.notifyItemRangeInserted(
adapter.currentList.size,
ordersList.size
)
}
}
}
}
}
}
}
} }

View File

@@ -0,0 +1,119 @@
package com.woka.home.mylist.view.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.audiobooks.adapters.AudioBooksAdapter
import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.database.models.clicks.ContentType
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.setVisibility
import com.woka.utils.show
class FavAudioFragment : Fragment() {
private lateinit var binding: FragmentFavoritesBinding
private lateinit var viewModel: FavoriteViewModel
private lateinit var adapter: AudioBooksAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentFavoritesBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java]
adapter = AudioBooksAdapter(requireContext(), ::onBookClicked, ::onBookChanged, false){}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success){
viewModel.loadFavorites(ContentType.AUDIO)
}
}
private fun initViews(){
binding.apply {
rvFavorites.adapter = adapter
}
}
private fun clickEvents(){
binding.apply {
loadMoreBtn.setOnClickListener {
viewModel.loadFavorites(ContentType.AUDIO)
}
}
}
private fun setObservers(){
viewModel.favoritesLiveData.observe(viewLifecycleOwner){
binding.apply {
when (it){
is ApiResult.Error -> {
if (adapter.itemCount == 0){
// no orders at all
dataView.hide()
noData.show()
}else{
// load more orders failed
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.retry)
loadMoreBtn.show()
}
}
is ApiResult.Loading -> {
noData.hide()
dataView.show()
shimmer.show()
loadMoreBtn.hide()
}
is ApiResult.Success -> {
it.data?.result?.audio_data?.let {audioList ->
noData.hide()
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.load_more)
loadMoreBtn.setVisibility(!viewModel.lastPage)
adapter.submitList(audioList.map { AudioBookData(it) })
}
}
}
}
}
}
private fun onBookChanged(i: Int, audioBookData: AudioBookData) {
}
private fun onBookClicked(audioBookData: AudioBookData) {
}
}

View File

@@ -0,0 +1,114 @@
package com.woka.home.mylist.view.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.database.models.clicks.ContentType
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.setVisibility
import com.woka.utils.show
import com.woka.wokagames.adapters.GamesAdapter
import com.woka.wokagames.models.listing.GameData
class FavGameFragment : Fragment() {
private lateinit var binding: FragmentFavoritesBinding
private lateinit var viewModel: FavoriteViewModel
private lateinit var adapter: GamesAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentFavoritesBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java]
adapter = GamesAdapter(requireContext(), ::onGameClicked, false){}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success){
viewModel.loadFavorites(ContentType.GAME)
}
}
private fun initViews(){
binding.apply {
rvFavorites.adapter = adapter
}
}
private fun clickEvents(){
binding.apply {
loadMoreBtn.setOnClickListener {
viewModel.loadFavorites(ContentType.GAME)
}
}
}
private fun setObservers(){
viewModel.favoritesLiveData.observe(viewLifecycleOwner){
binding.apply {
when (it){
is ApiResult.Error -> {
if (adapter.itemCount == 0){
// no orders at all
dataView.hide()
noData.show()
}else{
// load more orders failed
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.retry)
loadMoreBtn.show()
}
}
is ApiResult.Loading -> {
noData.hide()
dataView.show()
shimmer.show()
loadMoreBtn.hide()
}
is ApiResult.Success -> {
it.data?.result?.game_data?.let {gameList ->
noData.hide()
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.load_more)
loadMoreBtn.setVisibility(!viewModel.lastPage)
adapter.submitList(gameList.map { GameData(it) })
}
}
}
}
}
}
private fun onGameClicked(gameData: GameData) {
}
}

View File

@@ -0,0 +1,118 @@
package com.woka.home.mylist.view.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.database.models.clicks.ContentType
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.karaoke.adapters.KaraokeAdapter
import com.woka.karaoke.models.listing.KaraokeData
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.setVisibility
import com.woka.utils.show
class FavKaraokeFragment : Fragment() {
private lateinit var binding: FragmentFavoritesBinding
private lateinit var viewModel: FavoriteViewModel
private lateinit var adapter: KaraokeAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentFavoritesBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java]
adapter = KaraokeAdapter(requireContext(), ::onKaraokeClicked, ::onKaraokeChanged, false){}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success){
viewModel.loadFavorites(ContentType.KARAOKE_VIDEO)
}
}
private fun initViews(){
binding.apply {
rvFavorites.adapter = adapter
}
}
private fun clickEvents(){
binding.apply {
loadMoreBtn.setOnClickListener {
viewModel.loadFavorites(ContentType.KARAOKE_VIDEO)
}
}
}
private fun setObservers(){
viewModel.favoritesLiveData.observe(viewLifecycleOwner){
binding.apply {
when (it){
is ApiResult.Error -> {
if (adapter.itemCount == 0){
// no orders at all
dataView.hide()
noData.show()
}else{
// load more orders failed
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.retry)
loadMoreBtn.show()
}
}
is ApiResult.Loading -> {
noData.hide()
dataView.show()
shimmer.show()
loadMoreBtn.hide()
}
is ApiResult.Success -> {
it.data?.result?.sing_karaoke_data?.let {karaokeList ->
noData.hide()
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.load_more)
loadMoreBtn.setVisibility(!viewModel.lastPage)
adapter.submitList(karaokeList.map { KaraokeData(it) })
}
}
}
}
}
}
private fun onKaraokeChanged(i: Int, b: Boolean, karaokeData: KaraokeData) {
}
private fun onKaraokeClicked(karaokeData: KaraokeData) {
}
}

View File

@@ -0,0 +1,118 @@
package com.woka.home.mylist.view.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.database.models.clicks.ContentType
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult
import com.woka.utils.hide
import com.woka.utils.setVisibility
import com.woka.utils.show
import com.woka.webseries.adapters.WebSeriesShowAdapter
import com.woka.webseries.models.ShowData
class FavSeriesFragment : Fragment() {
private lateinit var binding: FragmentFavoritesBinding
private lateinit var viewModel: FavoriteViewModel
private lateinit var adapter: WebSeriesShowAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentFavoritesBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java]
adapter = WebSeriesShowAdapter(requireContext(), ::onShowClicked, ::onShowCommonDataChanged, false){}
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success){
viewModel.loadFavorites(ContentType.SERIES, if (viewModel.webSeriesIsEnglish) "1" else "18")
}
}
private fun initViews(){
binding.apply {
rvFavorites.adapter = adapter
}
}
private fun clickEvents(){
binding.apply {
loadMoreBtn.setOnClickListener {
viewModel.loadFavorites(ContentType.SERIES, if (viewModel.webSeriesIsEnglish) "1" else "18")
}
}
}
private fun setObservers(){
viewModel.favoritesLiveData.observe(viewLifecycleOwner){
binding.apply {
when (it){
is ApiResult.Error -> {
if (adapter.itemCount == 0){
// no orders at all
dataView.hide()
noData.show()
}else{
// load more orders failed
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.retry)
loadMoreBtn.show()
}
}
is ApiResult.Loading -> {
noData.hide()
dataView.show()
shimmer.show()
loadMoreBtn.hide()
}
is ApiResult.Success -> {
it.data?.result?.show_data?.let {showList ->
noData.hide()
dataView.show()
shimmer.hide()
loadMoreBtn.text = getString(R.string.load_more)
loadMoreBtn.setVisibility(!viewModel.lastPage)
adapter.submitListShowList(showList.map { ShowData(it) }, if (viewModel.webSeriesIsEnglish) "1" else "18")
}
}
}
}
}
}
private fun onShowCommonDataChanged(showData: ShowData, categoryId: String) {
}
private fun onShowClicked(showData: ShowData, categoryId: String) {
}
}

View File

@@ -1,31 +0,0 @@
package com.woka.home.mylist.view.fragments
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.databinding.FragmentWebSeriesEngBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
class WebSeriesEngFragment : Fragment() {
private lateinit var binding: FragmentWebSeriesEngBinding
private lateinit var viewModel: FavoriteViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentWebSeriesEngBinding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java]
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}

View File

@@ -5,13 +5,15 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import com.woka.database.models.clicks.ContentType import com.woka.database.models.clicks.ContentType
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.MyListResponse import com.woka.home.mylist.models.MyListResponse
import com.woka.home.mylist.models.Result import com.woka.home.mylist.models.Result
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.userdata.UserRepository
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class FavoriteViewModel: ViewModel() { class FavoriteViewModel : ViewModel() {
private val userRepository = UserRepository
var contentType: ContentType? = null var contentType: ContentType? = null
var webSeriesIsEnglish = false var webSeriesIsEnglish = false
@@ -20,45 +22,49 @@ class FavoriteViewModel: ViewModel() {
val favoritesLiveData: LiveData<ApiResult<MyListResponse>> val favoritesLiveData: LiveData<ApiResult<MyListResponse>>
get() = _favoritesLiveData get() = _favoritesLiveData
private val myListResponse = MyListResponse(Result( private val myListResponse = MyListResponse(
mutableListOf(), Result(
mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), mutableListOf(), 0
mutableListOf(), )
mutableListOf(), )
mutableListOf()
))
private var nextPageToLoad: Int = 0 private var nextPageToLoad: Int = 0
private var quantityPerPage: Int = 6 private var quantityPerPage: Int = 6
var lastPage = false var lastPage = false
fun loadAudioSongs(contentType: ContentType) { fun loadFavorites(contentType: ContentType, categoryId: String? = null) {
viewModelScope.launch { viewModelScope.launch {
_favoritesLiveData.postValue(ApiResult.Loading()) _favoritesLiveData.postValue(ApiResult.Loading())
when (val value = MyListRepository.loadMyFavList()) { when (val value = userRepository.loadMyFavList(
contentType.id, nextPageToLoad, quantityPerPage, categoryId
)) {
is ApiResult.Error -> _favoritesLiveData.postValue( is ApiResult.Error -> _favoritesLiveData.postValue(
ApiResult.Error( ApiResult.Error(
value.errorMessage, value.errorMessage, value.error
value.error
) )
) )
is ApiResult.Loading -> _favoritesLiveData.postValue(ApiResult.Loading()) is ApiResult.Loading -> _favoritesLiveData.postValue(ApiResult.Loading())
is ApiResult.Success -> { is ApiResult.Success -> {
value.data?.let { value.data?.let {
when (contentType){ when (contentType) {
ContentType.SERIES -> { ContentType.SERIES -> {
it.result?.show_data?.let { newList -> it.result?.show_data?.let { newList ->
myListResponse.result?.show_data?.addAll(newList) myListResponse.result?.show_data?.addAll(newList)
lastPage = newList.size < quantityPerPage lastPage = myListResponse.result?.show_data?.size == it.result.total_records
_favoritesLiveData.postValue(ApiResult.Success(myListResponse)) _favoritesLiveData.postValue(
ApiResult.Success(
myListResponse
)
)
nextPageToLoad++ nextPageToLoad++
} }
} }
ContentType.SEASON -> {} ContentType.SEASON -> {}
ContentType.EPISODE -> {} ContentType.EPISODE -> {}
ContentType.VIDEO -> {} ContentType.VIDEO -> {}
@@ -68,34 +74,40 @@ class FavoriteViewModel: ViewModel() {
myListResponse.result?.game_data?.addAll(newList) myListResponse.result?.game_data?.addAll(newList)
lastPage = newList.size < quantityPerPage lastPage =
myListResponse.result?.game_data?.size == it.result.total_records
_favoritesLiveData.postValue(ApiResult.Success(myListResponse)) _favoritesLiveData.postValue(ApiResult.Success(myListResponse))
nextPageToLoad++ nextPageToLoad++
} }
} }
ContentType.AUDIO -> { ContentType.AUDIO -> {
it.result?.audio_data?.let { newList -> it.result?.audio_data?.let { newList ->
myListResponse.result?.audio_data?.addAll(newList) myListResponse.result?.audio_data?.addAll(newList)
lastPage = newList.size < quantityPerPage lastPage =
myListResponse.result?.audio_data?.size == it.result.total_records
_favoritesLiveData.postValue(ApiResult.Success(myListResponse)) _favoritesLiveData.postValue(ApiResult.Success(myListResponse))
nextPageToLoad++ nextPageToLoad++
} }
} }
ContentType.KARAOKE_VIDEO -> { ContentType.KARAOKE_VIDEO -> {
it.result?.sing_karaoke_data?.let { newList -> it.result?.sing_karaoke_data?.let { newList ->
myListResponse.result?.sing_karaoke_data?.addAll(newList) myListResponse.result?.sing_karaoke_data?.addAll(newList)
lastPage = newList.size < quantityPerPage lastPage =
myListResponse.result?.sing_karaoke_data?.size == it.result.total_records
_favoritesLiveData.postValue(ApiResult.Success(myListResponse)) _favoritesLiveData.postValue(ApiResult.Success(myListResponse))
nextPageToLoad++ nextPageToLoad++
} }
} }
ContentType.SHOP_PRODUCT -> {} ContentType.SHOP_PRODUCT -> {}
ContentType.PARENTAL_VIDEO -> {} ContentType.PARENTAL_VIDEO -> {}
ContentType.ARTICLE -> {} ContentType.ARTICLE -> {}

View File

@@ -14,7 +14,7 @@ import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.models.listing.KaraokeData import com.woka.karaoke.models.listing.KaraokeData
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.setVisibility
import com.woka.utils.toast import com.woka.utils.toast
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.math.max import kotlin.math.max
@@ -23,6 +23,7 @@ class KaraokeAdapter(
private val context: Context, private val context: Context,
private var onKaraokeClicked: (KaraokeData) -> Unit, private var onKaraokeClicked: (KaraokeData) -> Unit,
private var onKaraokeChanged: (id: Int, isContinue: Boolean, KaraokeData) -> Unit, private var onKaraokeChanged: (id: Int, isContinue: Boolean, KaraokeData) -> Unit,
private val showLikeAndFav: Boolean = true,
private val noSignInListener: () -> Unit private val noSignInListener: () -> Unit
): ListAdapter<KaraokeData, KaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) { ): ListAdapter<KaraokeData, KaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) {
@@ -76,9 +77,9 @@ class KaraokeAdapter(
} }
} }
like.show() like.setVisibility(showLikeAndFav)
likeCount.show() likeCount.setVisibility(showLikeAndFav)
fav.show() fav.setVisibility(showLikeAndFav)
karaokeData.likes_count?.let { karaokeData.likes_count?.let {
likeCount.text = "$it" likeCount.text = "$it"

View File

@@ -73,7 +73,7 @@ class MyOrdersActivity : WokaBaseActivity() {
setObservers() setObservers()
if (!viewModel.ordersLiveData.isInitialized){ if (!viewModel.ordersLiveData.isInitialized || viewModel.ordersLiveData.value !is ApiResult.Success){
viewModel.loadOrders() viewModel.loadOrders()
} }
} }

View File

@@ -48,12 +48,16 @@ object UserRepository {
} }
} }
suspend fun loadMyFavList(): ApiResult<MyListResponse>{ suspend fun loadMyFavList(postType: Int? = null, pageNo: Int? = null, limit: Int? = null, categoryId: String? = null): ApiResult<MyListResponse>{
return handleApiCall { return handleApiCall {
val formBuilder = FormBody.Builder()
formBuilder.add("api_version", "v2")
pageNo?.let { formBuilder.add("start", "$pageNo") }
limit?.let { formBuilder.add("limit", "$limit") }
postType?.let { formBuilder.add("post_type", "$postType") }
categoryId?.let { formBuilder.add("category_id", "$categoryId") }
userApiService.getMyFavList( userApiService.getMyFavList(
FormBody.Builder() formBuilder.build()
.add("api_version", "v2")
.build()
) )
} }
} }

View File

@@ -12,9 +12,7 @@ import com.woka.modules.categorymodels.Category
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.show import com.woka.utils.show
class SpinnerAdapter(context: Context, private val list: List<Category>): ArrayAdapter<Category>(context, 0, list){ class SpinnerAdapter(context: Context, private val list: List<Category>, var currentSelection: Int = 0): ArrayAdapter<Category>(context, 0, list){
var currentSelection: Int = 0
var selectedCategoryType: String? = null var selectedCategoryType: String? = null
get() { get() {

View File

@@ -11,7 +11,7 @@ import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.setVisibility
import com.woka.utils.toast import com.woka.utils.toast
import com.woka.webseries.WebSeriesRepository import com.woka.webseries.WebSeriesRepository
import com.woka.webseries.models.ShowData import com.woka.webseries.models.ShowData
@@ -21,6 +21,7 @@ class WebSeriesShowAdapter(
private val context: Context, private val context: Context,
private var onShowClicked: (ShowData, String) -> Unit, private var onShowClicked: (ShowData, String) -> Unit,
private var onShowCommonDataChange: ((ShowData, String) -> Unit)? = null, private var onShowCommonDataChange: ((ShowData, String) -> Unit)? = null,
private val showLikeAndFav: Boolean = true,
private val noSignInListener: () -> Unit private val noSignInListener: () -> Unit
): RecyclerView.Adapter<WebSeriesShowAdapter.ShowViewHolder>() { ): RecyclerView.Adapter<WebSeriesShowAdapter.ShowViewHolder>() {
@@ -69,9 +70,9 @@ class WebSeriesShowAdapter(
} }
} }
like.show() like.setVisibility(showLikeAndFav)
likeCount.show() likeCount.setVisibility(showLikeAndFav)
fav.show() fav.setVisibility(showLikeAndFav)
showData.likes_count?.let { showData.likes_count?.let {
likeCount.text = "$it" likeCount.text = "$it"

View File

@@ -232,7 +232,7 @@ class WebSeriesFragment : Fragment() {
binding.spinnerCard.show() binding.spinnerCard.show()
binding.selectLangTxt.show() binding.selectLangTxt.show()
catSpinnerAdapter = SpinnerAdapter(requireContext(), catList.filterNotNull()) catSpinnerAdapter = SpinnerAdapter(requireContext(), catList.filterNotNull(), viewModel.selectedCategoryPos)
binding.categorySpinner.setAdapter(catSpinnerAdapter) binding.categorySpinner.setAdapter(catSpinnerAdapter)
binding.categorySpinner.setSelection(viewModel.selectedCategoryPos) binding.categorySpinner.setSelection(viewModel.selectedCategoryPos)

View File

@@ -41,10 +41,10 @@ import com.woka.webseries.models.ShowData
import com.woka.webseries.models.episodedata.EpisodeData import com.woka.webseries.models.episodedata.EpisodeData
import com.woka.webseries.models.teaserdata.TeaserData import com.woka.webseries.models.teaserdata.TeaserData
import com.woka.webseries.viewmodel.WebSeriesViewModel import com.woka.webseries.viewmodel.WebSeriesViewModel
import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_ID import com.woka.webseries.views.WebSeriesActivity.Companion.EXTRA_SHOW_CATEGORY
import kotlin.math.max import kotlin.math.max
class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener { class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener {
private lateinit var binding: FragmentWebShowBinding private lateinit var binding: FragmentWebShowBinding
private lateinit var viewModel: WebSeriesViewModel private lateinit var viewModel: WebSeriesViewModel
@@ -173,7 +173,7 @@ class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener {
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) {
noSignInDialog.show() noSignInDialog.show()
return@setOnClickListener return@setOnClickListener
} }
@@ -181,10 +181,10 @@ class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener {
WebSeriesRepository.likeUnLikeShow("${showData.id}", showData.is_liked == false) WebSeriesRepository.likeUnLikeShow("${showData.id}", showData.is_liked == false)
showData.likes_count?.let { showData.likes_count?.let {
showData.likes_count = if (likeSeason.isSelected){ showData.likes_count = if (likeSeason.isSelected) {
// unlike // unlike
max(0, it - 1) max(0, it - 1)
}else{ } else {
// like // like
it + 1 it + 1
} }
@@ -196,9 +196,6 @@ class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener {
likeCount.text = "${showData.likes_count}" likeCount.text = "${showData.likes_count}"
showDataChanged = true showDataChanged = true
activity?.setResult(RESULT_OK, Intent().apply {
putExtra(EXTRA_SHOW_ID, showData.id?:-1)
})
} }
favSeason.setOnClickListener { favSeason.setOnClickListener {
@@ -207,7 +204,7 @@ class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener {
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) {
noSignInDialog.show() noSignInDialog.show()
return@setOnClickListener return@setOnClickListener
} }
@@ -218,20 +215,21 @@ class WebShowFragment: Fragment(), TabLayout.OnTabSelectedListener {
categoryId categoryId
) )
if (showData.isBookMarked(categoryId)){ if (showData.isBookMarked(categoryId)) {
// remove from fav // remove from fav
showData.removeAsBookMark(categoryId) showData.removeAsBookMark(categoryId)
}else{ } else {
// add to fav // add to fav
showData.addAsBookMark(categoryId) showData.addAsBookMark(categoryId)
} }
favSeason.isSelected = !favSeason.isSelected favSeason.isSelected = !favSeason.isSelected
showDataChanged = true
activity?.setResult(RESULT_OK, Intent().apply { activity?.setResult(RESULT_OK, Intent().apply {
putExtra(EXTRA_SHOW_ID, showData.id?:-1) putExtra(EXTRA_SHOW_CATEGORY, if (!favSeason.isSelected) categoryId else null)
}) })
showDataChanged = true
} }
playTrailer.setOnClickListener { playTrailer.setOnClickListener {

View File

@@ -12,7 +12,7 @@ import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.setVisibility
import com.woka.utils.toast import com.woka.utils.toast
import com.woka.wokagames.GamesRepository import com.woka.wokagames.GamesRepository
import com.woka.wokagames.models.listing.GameData import com.woka.wokagames.models.listing.GameData
@@ -22,6 +22,7 @@ import kotlin.math.max
class GamesAdapter( class GamesAdapter(
var context: Context, var context: Context,
private var onGameClicked: (GameData) -> Unit, private var onGameClicked: (GameData) -> Unit,
private val showLikeAndLike: Boolean = true,
private val noSignInListener: () -> Unit private val noSignInListener: () -> Unit
) : ListAdapter<GameData, GamesAdapter.GameViewHolder>( ) : ListAdapter<GameData, GamesAdapter.GameViewHolder>(
ASYNC_DIFF_UTIL ASYNC_DIFF_UTIL
@@ -77,9 +78,9 @@ class GamesAdapter(
} }
} }
like.show() like.setVisibility(showLikeAndLike)
likeCount.show() likeCount.setVisibility(showLikeAndLike)
fav.show() fav.setVisibility(showLikeAndLike)
gameData.likes_count?.let { gameData.likes_count?.let {
likeCount.text = "$it" likeCount.text = "$it"

View File

@@ -53,6 +53,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:translationZ="1dp"
app:layout_constraintTop_toBottomOf="@id/toolbar_view" app:layout_constraintTop_toBottomOf="@id/toolbar_view"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
/> />

View File

@@ -57,6 +57,7 @@
<com.woka.utils.PressableImageView <com.woka.utils.PressableImageView
android:id="@+id/like" android:id="@+id/like"
android:visibility="gone"
android:layout_width="25dp" android:layout_width="25dp"
android:layout_height="24dp" android:layout_height="24dp"
android:contentDescription="@string/image" android:contentDescription="@string/image"
@@ -74,6 +75,7 @@
<TextView <TextView
android:id="@+id/like_count" android:id="@+id/like_count"
android:visibility="gone"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -94,6 +96,7 @@
<com.woka.utils.PressableImageView <com.woka.utils.PressableImageView
android:id="@+id/fav" android:id="@+id/fav"
android:visibility="gone"
android:layout_width="20dp" android:layout_width="20dp"
android:layout_height="19dp" android:layout_height="19dp"
android:contentDescription="@string/image" android:contentDescription="@string/image"

View File

@@ -59,7 +59,7 @@
android:orientation="vertical"> android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_web_series" android:id="@+id/rv_favorites"
android:visibility="visible" android:visibility="visible"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -443,7 +443,7 @@
<com.google.android.material.tabs.TabLayout <com.google.android.material.tabs.TabLayout
android:id="@+id/seasons_tab" android:id="@+id/seasons_tab"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="50dp"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
app:tabBackground="@drawable/season_tab_bg" app:tabBackground="@drawable/season_tab_bg"
@@ -505,6 +505,7 @@
android:id="@+id/ep_shimmer" android:id="@+id/ep_shimmer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:visibility="gone" android:visibility="gone"
app:shimmer_auto_start="true" app:shimmer_auto_start="true"
app:shimmer_base_alpha="0.6" app:shimmer_base_alpha="0.6"