like and favorite data syncing in my fav list and show data
syncing between SeasonActivity.kt and MyListFragment error handling for removing fav data from my fav list = default my fav list - empty Home bottom nav ui corrections Continue Episode Dialog and watch button handling
This commit is contained in:
@@ -2,6 +2,7 @@ package com.woka.home.fragments
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@@ -21,6 +22,7 @@ import com.woka.home.mylist.adapters.WebSeriesAdapter
|
||||
import com.woka.home.mylist.models.PostType
|
||||
import com.woka.home.mylist.models.BookmarkedShowData
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.utils.TAG
|
||||
import com.woka.utils.hide
|
||||
import com.woka.utils.show
|
||||
import com.woka.webseries.models.ShowData
|
||||
@@ -71,7 +73,10 @@ class MyListFragment : Fragment() {
|
||||
rvWebSeriesHindi.adapter = webSeriesHAdapter
|
||||
|
||||
webSeriesHAdapter.onShowClickListener = ::onWebShowClicked
|
||||
webSeriesHAdapter.onLikeChanged = ::onWebShowItemChanged
|
||||
|
||||
webSeriesEAdapter.onShowClickListener = ::onWebShowClicked
|
||||
webSeriesEAdapter.onLikeChanged = ::onWebShowItemChanged
|
||||
|
||||
rvAudioBooks.adapter = audioBooksAdapter
|
||||
rvKaraoke.adapter = karaokeAdapter
|
||||
@@ -90,20 +95,8 @@ class MyListFragment : Fragment() {
|
||||
private fun registerIntentLaunchers(){
|
||||
webShowIntentLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
|
||||
if (it.resultCode == AppCompatActivity.RESULT_OK){
|
||||
it.data?.getIntExtra(SeasonActivity.EXTRA_SHOW_POSITION, -1)?.let { position ->
|
||||
it.data?.getStringExtra(SeasonActivity.EXTRA_SHOW_CATEGORY_DATA)?.let {categoryId ->
|
||||
if (categoryId == "1"){
|
||||
// english
|
||||
if (position > -1 && position < webSeriesEAdapter.itemCount){
|
||||
webSeriesEAdapter.notifyItemChanged(position)
|
||||
}
|
||||
}else if (categoryId == "18"){
|
||||
// hindi
|
||||
if (position > -1 && position < webSeriesHAdapter.itemCount){
|
||||
webSeriesHAdapter.notifyItemChanged(position)
|
||||
}
|
||||
}
|
||||
}
|
||||
it.data?.getIntExtra(SeasonActivity.EXTRA_SHOW_ID, -1)?.let { showId ->
|
||||
onWebShowItemChanged(showId)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -251,6 +244,19 @@ class MyListFragment : Fragment() {
|
||||
})
|
||||
}
|
||||
|
||||
private fun onWebShowItemChanged(showId: Int){
|
||||
val englishPosition = webSeriesEAdapter.currentList.indexOfFirst { it.id == showId }
|
||||
if (englishPosition > -1 && englishPosition < webSeriesEAdapter.currentList.size){
|
||||
webSeriesEAdapter.notifyItemChanged(englishPosition)
|
||||
}
|
||||
|
||||
val hindiPosition = webSeriesHAdapter.currentList.indexOfFirst { it.id == showId }
|
||||
if (hindiPosition > -1 && hindiPosition < webSeriesHAdapter.currentList.size){
|
||||
webSeriesHAdapter.notifyItemChanged(hindiPosition)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun newInstance() = MyListFragment()
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ 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.BookmarkedShowData
|
||||
import com.woka.home.mylist.models.Result
|
||||
import com.woka.home.mylist.models.SingKaraokeData
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.networking.RetrofitHelper
|
||||
@@ -28,17 +29,20 @@ object MyListRepository {
|
||||
if (shallLoadNewData){
|
||||
// load new data
|
||||
loadMyFavList()
|
||||
shallLoadNewData = false
|
||||
}else{
|
||||
// also updating local changes
|
||||
myFavData?.let {
|
||||
_myFavListLiveData.postValue(ApiResult.Success(it))
|
||||
}
|
||||
_myFavListLiveData.postValue(ApiResult.Success(myFavData))
|
||||
}
|
||||
return _myFavListLiveData
|
||||
}
|
||||
|
||||
var myFavData: MyListResponse? = null
|
||||
var myFavData: MyListResponse = MyListResponse(Result(
|
||||
mutableListOf(),
|
||||
mutableListOf(),
|
||||
mutableListOf(),
|
||||
mutableListOf(),
|
||||
mutableListOf()
|
||||
))
|
||||
|
||||
/*
|
||||
flag to load a new data whenever necessary
|
||||
@@ -52,7 +56,13 @@ object MyListRepository {
|
||||
|
||||
fun clearData(){
|
||||
shallLoadNewData = true
|
||||
myFavData = null
|
||||
myFavData.result?.let {
|
||||
it.show_data?.clear()
|
||||
it.game_data?.clear()
|
||||
it.audio_data?.clear()
|
||||
it.sing_karaoke_data?.clear()
|
||||
it.video_data?.clear()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadMyFavList(){
|
||||
@@ -64,7 +74,10 @@ object MyListRepository {
|
||||
is ApiResult.Error -> {}
|
||||
is ApiResult.Loading -> {}
|
||||
is ApiResult.Success -> {
|
||||
myFavData = response.data
|
||||
response.data?.let {
|
||||
myFavData = it
|
||||
shallLoadNewData = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,9 +95,9 @@ object MyListRepository {
|
||||
.build()
|
||||
)
|
||||
}
|
||||
|
||||
changeLikeLocally(postId, postType, true)
|
||||
}
|
||||
|
||||
changeLikeLocally(postId, postType, true)
|
||||
}
|
||||
|
||||
fun unLikePost(postId: String, postType: PostType) {
|
||||
@@ -97,9 +110,9 @@ object MyListRepository {
|
||||
.build()
|
||||
)
|
||||
}
|
||||
|
||||
changeLikeLocally(postId, postType, false)
|
||||
}
|
||||
|
||||
changeLikeLocally(postId, postType, false)
|
||||
}
|
||||
|
||||
fun markAsFavShowLocally(showData: BookmarkedShowData,
|
||||
@@ -126,41 +139,57 @@ object MyListRepository {
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (myFavData == null && myFavListLiveData.isInitialized){
|
||||
loadMyFavList()
|
||||
}else{
|
||||
myFavData?.result?.show_data?.let {
|
||||
for (show in it){
|
||||
if (showData.id == show.id){
|
||||
if (addToFav){
|
||||
show.addAsBookMark(categoryId)
|
||||
}else{
|
||||
show.removeAsBookMark(categoryId)
|
||||
}
|
||||
}
|
||||
myFavData.result?.show_data?.let {
|
||||
var found = false
|
||||
var showFound: BookmarkedShowData? = null
|
||||
|
||||
for (show in it){
|
||||
if (showData.id == show.id){
|
||||
|
||||
if (addToFav){
|
||||
show.addAsBookMark(categoryId)
|
||||
}else{
|
||||
show.removeAsBookMark(categoryId)
|
||||
}
|
||||
|
||||
showFound = show
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
WebSeriesRepository.webSeriesData[categoryId]?.show_data?.let {
|
||||
for (show in it){
|
||||
var found = false
|
||||
if (!found && addToFav){
|
||||
myFavData.result?.show_data?.add(showData)
|
||||
}
|
||||
|
||||
show?.let {data ->
|
||||
if (showData.id == data.id){
|
||||
found = true
|
||||
if (found){
|
||||
showFound?.let {bookMarkShowData ->
|
||||
if (!bookMarkShowData.isBookMarked()){
|
||||
it.remove(bookMarkShowData)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (addToFav){
|
||||
show.addAsBookMark(categoryId)
|
||||
}else{
|
||||
show.removeAsBookMark(categoryId)
|
||||
}
|
||||
WebSeriesRepository.webSeriesData[categoryId]?.show_data?.let {
|
||||
for (show in it){
|
||||
var found = false
|
||||
|
||||
show?.let {data ->
|
||||
if (showData.id == data.id){
|
||||
found = true
|
||||
|
||||
if (addToFav){
|
||||
show.addAsBookMark(categoryId)
|
||||
}else{
|
||||
show.removeAsBookMark(categoryId)
|
||||
}
|
||||
}
|
||||
|
||||
if (found) break
|
||||
}
|
||||
|
||||
if (found) break
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -271,14 +300,14 @@ object MyListRepository {
|
||||
}
|
||||
}
|
||||
}
|
||||
fun changeLikeLocally(id: String, postType: PostType, isLiked: Boolean){
|
||||
private fun changeLikeLocally(id: String, postType: PostType, isLiked: Boolean){
|
||||
when(postType){
|
||||
PostType.WEB_SERIES -> {
|
||||
WebSeriesRepository.changeLikeLocally(id, isLiked)
|
||||
}
|
||||
|
||||
PostType.AUDIO_BOOKS -> {
|
||||
myFavData?.result?.audio_data?.let {
|
||||
myFavData.result?.audio_data?.let {
|
||||
for (audio in it){
|
||||
if ("${audio.id}" == id){
|
||||
audio.is_liked = isLiked
|
||||
@@ -292,7 +321,7 @@ object MyListRepository {
|
||||
}
|
||||
}
|
||||
PostType.KARAOKE -> {
|
||||
myFavData?.result?.sing_karaoke_data?.let {
|
||||
myFavData.result?.sing_karaoke_data?.let {
|
||||
for (song in it){
|
||||
if ("${song.id}" == id){
|
||||
song.is_liked = isLiked
|
||||
@@ -306,7 +335,7 @@ object MyListRepository {
|
||||
}
|
||||
}
|
||||
PostType.GAMES -> {
|
||||
myFavData?.result?.game_data?.let {
|
||||
myFavData.result?.game_data?.let {
|
||||
for (game in it){
|
||||
if ("${game.id}" == id){
|
||||
game.is_liked = isLiked
|
||||
|
||||
@@ -39,6 +39,7 @@ class WebSeriesAdapter(private val context: Context,
|
||||
}
|
||||
|
||||
var onShowClickListener: ((BookmarkedShowData, Int, String) -> Unit)? = null
|
||||
var onLikeChanged: ((Int) -> Unit)? = null
|
||||
|
||||
constructor(context: Context,
|
||||
categoryId: String,
|
||||
@@ -54,7 +55,7 @@ class WebSeriesAdapter(private val context: Context,
|
||||
)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
|
||||
override fun onBindViewHolder(holder: FavoriteViewHolder, pos: Int) {
|
||||
val showData = getItem(holder.absoluteAdapterPosition)
|
||||
|
||||
holder.binding.apply {
|
||||
@@ -96,23 +97,18 @@ class WebSeriesAdapter(private val context: Context,
|
||||
"${showData.id}",
|
||||
PostType.WEB_SERIES
|
||||
)
|
||||
|
||||
showData.likes_count?.let {
|
||||
likeCount.text = "${max(it - 1, 0)}"
|
||||
}
|
||||
}else{
|
||||
MyListRepository.likePost(
|
||||
"${showData.id}",
|
||||
PostType.WEB_SERIES
|
||||
)
|
||||
|
||||
showData.likes_count?.let {
|
||||
val value = it + 1
|
||||
likeCount.text = "$value"
|
||||
}
|
||||
}
|
||||
|
||||
like.isSelected = !like.isSelected
|
||||
likeCount.text = "${showData.likes_count}"
|
||||
showData.id?.let {
|
||||
onLikeChanged?.invoke(it)
|
||||
}
|
||||
}
|
||||
|
||||
fav.show()
|
||||
@@ -152,7 +148,7 @@ class WebSeriesAdapter(private val context: Context,
|
||||
}
|
||||
|
||||
card.setOnClickListener {
|
||||
onShowClickListener?.invoke(showData, position, categoryId)
|
||||
onShowClickListener?.invoke(showData, holder.absoluteAdapterPosition, categoryId)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,6 +50,16 @@ data class BookmarkedShowData(
|
||||
return false
|
||||
}
|
||||
|
||||
fun isBookMarked(): Boolean{
|
||||
val categories = bookmark_category_ids?.split(",")?.toMutableList()
|
||||
categories?.filter {
|
||||
return it.trim().isNotEmpty()
|
||||
}
|
||||
|
||||
categories?.remove("0")
|
||||
return categories?.isEmpty() == false
|
||||
}
|
||||
|
||||
fun addAsBookMark(categoryId: String) {
|
||||
val categories = bookmark_category_ids?.let {
|
||||
if (it.isEmpty()){
|
||||
|
||||
@@ -17,7 +17,7 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler {
|
||||
|
||||
companion object{
|
||||
const val EXTRA_PLAY_LIST = "episode_key"
|
||||
const val EXTRA_EPISODE_INDEX = "episode_index"
|
||||
const val EXTRA_PLAY_INDEX = "episode_index"
|
||||
}
|
||||
|
||||
private lateinit var binding: ActivityPlayerBinding
|
||||
@@ -42,7 +42,7 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler {
|
||||
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
|
||||
|
||||
playList = intent.getParcelableArrayListExtra(EXTRA_PLAY_LIST)
|
||||
playIndex = intent.getIntExtra(EXTRA_EPISODE_INDEX, 0)
|
||||
playIndex = intent.getIntExtra(EXTRA_PLAY_INDEX, 0)
|
||||
|
||||
setUpPlayer()
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.bumptech.glide.Glide
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.ContinueShowViewHolderBinding
|
||||
import com.woka.webseries.models.ContinueEpisodeData
|
||||
import com.woka.webseries.models.ShowData
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
class ContinueEpisodeAdapter(val context: Context,
|
||||
@@ -32,6 +33,8 @@ class ContinueEpisodeAdapter(val context: Context,
|
||||
.build()
|
||||
}
|
||||
|
||||
var onEpisodeClicked: ((ContinueEpisodeData) -> Unit)? = null
|
||||
|
||||
constructor(context: Context): this(context, DIFF_CONFIG)
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContinueEpisodeViewHolder {
|
||||
@@ -65,6 +68,11 @@ class ContinueEpisodeAdapter(val context: Context,
|
||||
}
|
||||
val detail = "S${episode.season_number}-E${episode.episode_number}"
|
||||
details.text = detail
|
||||
|
||||
card.setOnClickListener {
|
||||
onEpisodeClicked?.invoke(episode)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ class EpisodeAdapter private constructor(val context: Context,
|
||||
}
|
||||
|
||||
card.setOnClickListener {
|
||||
onEpisodeClicked?.invoke(position, episode)
|
||||
onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ class TeaserAdapter private constructor(val context: Context,
|
||||
}
|
||||
|
||||
card.setOnClickListener {
|
||||
onEpisodeClicked?.invoke(position, episode)
|
||||
onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import android.os.Parcelable
|
||||
import android.text.Html
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
@@ -21,10 +20,9 @@ import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.ActivitySeasonBinding
|
||||
import com.woka.databinding.DialogEpisodeBinding
|
||||
import com.woka.home.mylist.MyListRepository
|
||||
import com.woka.home.mylist.models.BookmarkedShowData
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.players.PlayerActivity
|
||||
import com.woka.players.PlayerActivity.Companion.EXTRA_EPISODE_INDEX
|
||||
import com.woka.players.PlayerActivity.Companion.EXTRA_PLAY_INDEX
|
||||
import com.woka.players.PlayerActivity.Companion.EXTRA_PLAY_LIST
|
||||
import com.woka.utils.ProgressView
|
||||
import com.woka.utils.WokaBaseActivity
|
||||
@@ -108,7 +106,7 @@ class SeasonActivity : WokaBaseActivity(), OnTabSelectedListener {
|
||||
}
|
||||
|
||||
if (showData == null){
|
||||
MyListRepository.myFavData?.result?.show_data?.let {
|
||||
MyListRepository.myFavData.result?.show_data?.let {
|
||||
for (show in it){
|
||||
if (showId == show.id){
|
||||
showData = ShowData(show)
|
||||
@@ -222,8 +220,7 @@ class SeasonActivity : WokaBaseActivity(), OnTabSelectedListener {
|
||||
|
||||
likeSeason.isSelected = !likeSeason.isSelected
|
||||
setResult(RESULT_OK, Intent().apply {
|
||||
putExtra(EXTRA_SHOW_POSITION, showPosition)
|
||||
putExtra(EXTRA_SHOW_CATEGORY_DATA, categoryId)
|
||||
putExtra(EXTRA_SHOW_ID, showId)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -246,8 +243,7 @@ class SeasonActivity : WokaBaseActivity(), OnTabSelectedListener {
|
||||
favSeason.isSelected = !favSeason.isSelected
|
||||
|
||||
setResult(RESULT_OK, Intent().apply {
|
||||
putExtra(EXTRA_SHOW_POSITION, showPosition)
|
||||
putExtra(EXTRA_SHOW_CATEGORY_DATA, categoryId)
|
||||
putExtra(EXTRA_SHOW_ID, showId)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -509,7 +505,7 @@ class SeasonActivity : WokaBaseActivity(), OnTabSelectedListener {
|
||||
EXTRA_PLAY_LIST,
|
||||
WebSeriesRepository.episodesPlaylistMap["${showId}_${selectedSeasonId}_$categoryId"]
|
||||
)
|
||||
putExtra(EXTRA_EPISODE_INDEX, position)
|
||||
putExtra(EXTRA_PLAY_INDEX, position)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -582,7 +578,7 @@ class SeasonActivity : WokaBaseActivity(), OnTabSelectedListener {
|
||||
EXTRA_PLAY_LIST,
|
||||
WebSeriesRepository.teasersPlaylistMap["${showId}_${selectedSeasonId}_$categoryId"]
|
||||
)
|
||||
putExtra(EXTRA_EPISODE_INDEX, position)
|
||||
putExtra(EXTRA_PLAY_INDEX, position)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.graphics.drawable.InsetDrawable
|
||||
import android.os.Bundle
|
||||
import android.text.Html
|
||||
import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.AdapterView
|
||||
@@ -19,12 +20,19 @@ import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import com.google.android.material.appbar.CollapsingToolbarLayout
|
||||
import com.jwplayer.pub.api.media.playlists.PlaylistItem
|
||||
import com.woka.R
|
||||
import com.woka.WokaApp
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.ActivityWebSeriesBinding
|
||||
import com.woka.databinding.DialogBlogsBinding
|
||||
import com.woka.databinding.DialogContinueEpisodeBinding
|
||||
import com.woka.databinding.DialogEpisodeBinding
|
||||
import com.woka.modules.ModuleRepository
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.players.PlayerActivity
|
||||
import com.woka.players.PlayerActivity.Companion.EXTRA_PLAY_INDEX
|
||||
import com.woka.players.PlayerActivity.Companion.EXTRA_PLAY_LIST
|
||||
import com.woka.utils.WokaBaseActivity
|
||||
import com.woka.utils.hide
|
||||
import com.woka.utils.show
|
||||
@@ -32,6 +40,7 @@ import com.woka.webseries.WebSeriesRepository
|
||||
import com.woka.webseries.adapters.ContinueEpisodeAdapter
|
||||
import com.woka.webseries.adapters.SpinnerAdapter
|
||||
import com.woka.webseries.adapters.WebSeriesShowAdapter
|
||||
import com.woka.webseries.models.ContinueEpisodeData
|
||||
import com.woka.webseries.models.ShowData
|
||||
import com.woka.webseries.models.WebSeriesResponse
|
||||
import com.woka.webseries.viewmodel.WebSeriesViewModel
|
||||
@@ -50,6 +59,9 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
|
||||
private var showIntentLauncher: ActivityResultLauncher<Intent>? = null
|
||||
|
||||
private lateinit var episodeDialogBinding: DialogContinueEpisodeBinding
|
||||
private lateinit var episodeDialog: Dialog
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
@@ -67,6 +79,8 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
|
||||
initViews()
|
||||
|
||||
initEpisodeDialog()
|
||||
|
||||
clickEvents()
|
||||
|
||||
setObservers()
|
||||
@@ -110,6 +124,7 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
|
||||
rvWebSeries.adapter = showAdapter
|
||||
rvContinueWatch.adapter = continueWatchAdapter
|
||||
continueWatchAdapter.onEpisodeClicked = ::onContinueEpisodeClicked
|
||||
|
||||
((rvWebSeries.itemAnimator) as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
((rvContinueWatch.itemAnimator) as SimpleItemAnimator).supportsChangeAnimations = false
|
||||
@@ -117,6 +132,34 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
|
||||
}
|
||||
|
||||
private fun initEpisodeDialog(){
|
||||
episodeDialogBinding = DialogContinueEpisodeBinding.inflate(layoutInflater)
|
||||
episodeDialog = Dialog(this)
|
||||
|
||||
episodeDialog.setContentView(episodeDialogBinding.root)
|
||||
|
||||
try {
|
||||
val back = ColorDrawable(Color.TRANSPARENT)
|
||||
val inset = InsetDrawable(back, 50)
|
||||
episodeDialog.window!!.setBackgroundDrawable(inset)
|
||||
} catch (e: Exception) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
try {
|
||||
val layoutParams = episodeDialog.window!!.attributes
|
||||
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT
|
||||
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT
|
||||
layoutParams.horizontalMargin = 0F
|
||||
episodeDialog.window!!.setAttributes(layoutParams)
|
||||
} catch (e: Exception) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
episodeDialogBinding.close.setOnClickListener { episodeDialog.dismiss() }
|
||||
}
|
||||
|
||||
|
||||
private fun resultLaunchers(){
|
||||
showIntentLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
|
||||
if (it.resultCode == RESULT_OK){
|
||||
@@ -144,9 +187,11 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
it.data?.result?.let {continueWatchList ->
|
||||
if (continueWatchList.isNotEmpty()){
|
||||
binding.rvContinueWatch.show()
|
||||
binding.continueWatchTxt.show()
|
||||
continueWatchAdapter.submitList(continueWatchList.asReversed())
|
||||
}else{
|
||||
binding.rvContinueWatch.hide()
|
||||
binding.continueWatchTxt.hide()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -252,4 +297,89 @@ class WebSeriesActivity : WokaBaseActivity(), Observer<ApiResult<HashMap<String,
|
||||
putExtra(SeasonActivity.EXTRA_SHOW_POSITION, position)
|
||||
})
|
||||
}
|
||||
|
||||
private fun onContinueEpisodeClicked(episodeData: ContinueEpisodeData){
|
||||
episodeDialogBinding.apply {
|
||||
episodeData.content_more_details?.let {moreDetailsList ->
|
||||
|
||||
episodeData.thumbnail_path?.let {
|
||||
image.loadImage(it)
|
||||
}
|
||||
|
||||
if (moreDetailsList.isNotEmpty()){
|
||||
|
||||
if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){
|
||||
moreDetailsList[1].let {data ->
|
||||
title.text = data.title
|
||||
description.text = Html.fromHtml(
|
||||
data.description?.replace(
|
||||
"<br>",
|
||||
" "
|
||||
), Html.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
}
|
||||
}else{
|
||||
moreDetailsList[0].let {data ->
|
||||
title.text = data.title
|
||||
description.text = Html.fromHtml(
|
||||
data.description?.replace(
|
||||
"<br>",
|
||||
" "
|
||||
), Html.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
}
|
||||
}
|
||||
}else{
|
||||
title.text = episodeData.episode_title
|
||||
description.text = Html.fromHtml(
|
||||
episodeData.episode_description?.replace(
|
||||
"<br>",
|
||||
" "
|
||||
), Html.FROM_HTML_MODE_LEGACY
|
||||
)
|
||||
}
|
||||
|
||||
watchCard.setOnClickListener {
|
||||
episodeData.content_more_details.let {moreDetailsList->
|
||||
val playlist = ArrayList<PlaylistItem>()
|
||||
playlist.add(
|
||||
if (moreDetailsList.isNotEmpty()){
|
||||
if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){
|
||||
PlaylistItem.Builder()
|
||||
.file(moreDetailsList[1].content_hd_url)
|
||||
.title(moreDetailsList[1].title)
|
||||
.image(moreDetailsList[1].content_hd_url)
|
||||
.build()
|
||||
}else{
|
||||
PlaylistItem.Builder()
|
||||
.file(moreDetailsList[0].content_hd_url)
|
||||
.title(moreDetailsList[0].title)
|
||||
.image(moreDetailsList[0].content_hd_url)
|
||||
.build()
|
||||
}
|
||||
}else{
|
||||
PlaylistItem.Builder()
|
||||
.file(episodeData.episode_url)
|
||||
.title(episodeData.episode_title)
|
||||
.image(episodeData.episode_url)
|
||||
.build()
|
||||
}
|
||||
)
|
||||
|
||||
startActivity(Intent(this@WebSeriesActivity, PlayerActivity::class.java)
|
||||
.apply {
|
||||
putParcelableArrayListExtra(EXTRA_PLAY_LIST, playlist)
|
||||
putExtra(EXTRA_PLAY_INDEX, 0)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
close.setOnClickListener {
|
||||
episodeDialog.dismiss()
|
||||
}
|
||||
|
||||
episodeDialog.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.woka.utils.PressableCard xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/card"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
|
||||
113
app/src/main/res/layout/dialog_continue_episode.xml
Normal file
113
app/src/main/res/layout/dialog_continue_episode.xml
Normal file
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="@drawable/img_season_bg"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="35dp"
|
||||
android:paddingTop="15dp">
|
||||
|
||||
<com.woka.utils.PressableImageView
|
||||
android:id="@+id/close"
|
||||
android:layout_width="25dp"
|
||||
android:layout_height="25dp"
|
||||
android:src="@drawable/ic_close_filled"
|
||||
android:tint="@color/color_primary"
|
||||
android:contentDescription="@string/image"
|
||||
android:layout_gravity="end"
|
||||
android:layout_marginEnd="15dp"
|
||||
/>
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
app:cardBackgroundColor="@color/white"
|
||||
app:cardElevation="3dp"
|
||||
app:cardCornerRadius="15dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
>
|
||||
|
||||
<com.woka.utils.AdiImageView
|
||||
android:id="@+id/image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/_120sdp"
|
||||
android:src="@android:color/darker_gray"
|
||||
android:contentDescription="@string/image"
|
||||
android:scaleType="fitXY"
|
||||
app:imageCornerRadius="15dp"
|
||||
android:layout_margin="10dp"
|
||||
/>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
tools:text="The title of the blog will be displayed here"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/color_primary"
|
||||
|
||||
android:layout_marginTop="15dp"
|
||||
android:layout_marginHorizontal="15dp"
|
||||
|
||||
android:maxLines="2"
|
||||
android:ellipsize="end"
|
||||
|
||||
/>
|
||||
|
||||
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/scrollView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="5dp"
|
||||
>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
tools:text="Description is here"
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:textColor="@color/color_primary"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
/>
|
||||
|
||||
</ScrollView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/watch_card"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:text="@string/watch"
|
||||
android:fontFamily="@font/exo_2_extrabold"
|
||||
android:textColor="@color/white"
|
||||
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/season_description"
|
||||
|
||||
android:background="@drawable/round_bg_25"
|
||||
android:backgroundTint="#007AC0"
|
||||
|
||||
android:drawableStart="@drawable/ic_play_filled"
|
||||
|
||||
android:drawablePadding="15dp"
|
||||
|
||||
android:paddingEnd="20dp"
|
||||
android:paddingStart="15dp"
|
||||
android:paddingVertical="10dp"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/home_img_bn"
|
||||
android:layout_width="@dimen/_15sdp"
|
||||
android:layout_height="@dimen/_15sdp"
|
||||
android:layout_width="22sp"
|
||||
android:layout_height="22sp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/ic_home_bn"
|
||||
app:tint="@android:color/darker_gray" />
|
||||
@@ -53,8 +53,11 @@
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textAlignment="center"
|
||||
android:maxLines="1"
|
||||
android:textSize="12sp"
|
||||
android:ellipsize="end"
|
||||
|
||||
android:layout_marginTop="5dp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -79,8 +82,8 @@
|
||||
android:gravity="center">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="@dimen/_25sdp"
|
||||
android:layout_height="@dimen/_15sdp"
|
||||
android:layout_width="36dp"
|
||||
android:layout_height="22sp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/img_woka_w"
|
||||
android:scaleType="fitXY"
|
||||
@@ -94,10 +97,13 @@
|
||||
android:text="@string/explore_woka"
|
||||
android:textColor="@color/color_primary"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textSize="12sp"
|
||||
android:textAlignment="center"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
|
||||
android:layout_marginTop="5dp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -123,8 +129,8 @@
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/my_list_img_bn"
|
||||
android:layout_width="@dimen/_15sdp"
|
||||
android:layout_height="@dimen/_15sdp"
|
||||
android:layout_width="22sp"
|
||||
android:layout_height="22sp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/ic_heart_filled"
|
||||
app:tint="@android:color/darker_gray"
|
||||
@@ -138,10 +144,13 @@
|
||||
android:text="@string/my_list"
|
||||
android:textColor="@android:color/darker_gray"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textSize="12sp"
|
||||
android:textAlignment="center"
|
||||
android:maxLines="1"
|
||||
android:ellipsize="end"
|
||||
|
||||
android:layout_marginTop="5dp"
|
||||
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
Reference in New Issue
Block a user