diff --git a/app/src/main/java/com/woka/home/HomeActivity.kt b/app/src/main/java/com/woka/home/HomeActivity.kt index 48b59c7..62e7045 100644 --- a/app/src/main/java/com/woka/home/HomeActivity.kt +++ b/app/src/main/java/com/woka/home/HomeActivity.kt @@ -58,7 +58,7 @@ import com.woka.utils.PRIVACY_N_POLICY_URL import com.woka.utils.ProgressView import com.woka.utils.TAG import com.woka.utils.TERMS_N_CONDITIONS_URL -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.WokaBaseActivity import com.woka.utils.changeLocale import com.woka.utils.hide diff --git a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt index fc91a4c..9f36555 100644 --- a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt @@ -26,7 +26,7 @@ import com.woka.home.TimePeriod import com.woka.userdata.userDataModels.UserDataResponse import com.woka.networking.ApiResult import com.woka.players.LiveStreamPlayerActivity -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.hide import com.woka.utils.scaleAnimate import com.woka.utils.show diff --git a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt index f459980..26030bc 100644 --- a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt @@ -15,7 +15,7 @@ import com.woka.home.HomeViewModel import com.woka.userdata.userDataModels.UserDataResponse import com.woka.networking.ApiResult import com.woka.players.LiveStreamPlayerActivity -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.hide import com.woka.utils.show diff --git a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt index 3c6be66..7b2a338 100644 --- a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt +++ b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt @@ -95,6 +95,8 @@ class MyListFragment : Fragment() { val hinList = mutableListOf() for (show in showData){ + if (show.bookmark_category_ids?.isEmpty() == true) continue + val ids = show.bookmark_category_ids?.split(",") ids?.let {bIds -> if (bIds.isNotEmpty()) { diff --git a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt index 532a830..1fcfb67 100644 --- a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt +++ b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt @@ -38,7 +38,7 @@ object MyListRepository { return _myFavListLiveData } - private var myFavData: MyListResponse? = null + var myFavData: MyListResponse? = null /* flag to load a new data whenever necessary @@ -147,11 +147,13 @@ object MyListRepository { loadMyFavList() }else{ myFavData?.result?.show_data?.let { - if (addToFav){ - it.add(showData) - }else{ - it.removeIf { bShow -> - bShow.id == showData.id + for (show in it){ + if (showData.id == show.id){ + if (addToFav){ + show.addAsBookMark(categoryId) + }else{ + show.removeAsBookMark(categoryId) + } } } } @@ -287,21 +289,10 @@ object MyListRepository { } } } - private fun changeLikeLocally(id: String, postType: PostType, isLiked: Boolean){ + fun changeLikeLocally(id: String, postType: PostType, isLiked: Boolean){ when(postType){ PostType.WEB_SERIES -> { - myFavData?.result?.show_data?.let { - for (show in it){ - if ("${show.id}" == id){ - show.is_liked = isLiked - show.likes_count?.let { count -> - show.likes_count = if (isLiked) count + 1 - else max(0, count - 1) - } - break - } - } - } + WebSeriesRepository.changeLikeLocally(id, isLiked) } PostType.AUDIO_BOOKS -> { diff --git a/app/src/main/java/com/woka/home/mylist/adapters/AudioBooksAdapter.kt b/app/src/main/java/com/woka/home/mylist/adapters/AudioBooksAdapter.kt index aa08347..da7f22f 100644 --- a/app/src/main/java/com/woka/home/mylist/adapters/AudioBooksAdapter.kt +++ b/app/src/main/java/com/woka/home/mylist/adapters/AudioBooksAdapter.kt @@ -54,9 +54,7 @@ class AudioBooksAdapter(private val context: Context, holder.binding.apply { audioData.thumbnail_path?.let { - Glide.with(root.context) - .load(it) - .into(image) + image.loadImage(it) } title.text = audioData.title diff --git a/app/src/main/java/com/woka/home/mylist/adapters/GamesAdapter.kt b/app/src/main/java/com/woka/home/mylist/adapters/GamesAdapter.kt index 54124ea..ac34132 100644 --- a/app/src/main/java/com/woka/home/mylist/adapters/GamesAdapter.kt +++ b/app/src/main/java/com/woka/home/mylist/adapters/GamesAdapter.kt @@ -54,9 +54,7 @@ class GamesAdapter(private val context: Context, holder.binding.apply { gameData.thumbnail_path?.let { - Glide.with(root.context) - .load(it) - .into(image) + image.loadImage(it) } title.text = gameData.title diff --git a/app/src/main/java/com/woka/home/mylist/adapters/KaraokeAdapter.kt b/app/src/main/java/com/woka/home/mylist/adapters/KaraokeAdapter.kt index 5cb37e8..4c428df 100644 --- a/app/src/main/java/com/woka/home/mylist/adapters/KaraokeAdapter.kt +++ b/app/src/main/java/com/woka/home/mylist/adapters/KaraokeAdapter.kt @@ -55,9 +55,7 @@ class KaraokeAdapter(private val context: Context, holder.binding.apply { karaokeData.thumbnail_path?.let { - Glide.with(root.context) - .load(it) - .into(image) + image.loadImage(it) } title.text = karaokeData.title diff --git a/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt b/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt index 61ff746..b2977af 100644 --- a/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt +++ b/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt @@ -57,9 +57,7 @@ class WebSeriesAdapter(private val context: Context, holder.binding.apply { showData.thumbnail_path?.let { - Glide.with(root.context) - .load(it) - .into(image) + image.loadImage(it) } title.text = showData.title diff --git a/app/src/main/java/com/woka/home/mylist/models/BookmarkedShowData.kt b/app/src/main/java/com/woka/home/mylist/models/BookmarkedShowData.kt index 79a7d33..d4df164 100644 --- a/app/src/main/java/com/woka/home/mylist/models/BookmarkedShowData.kt +++ b/app/src/main/java/com/woka/home/mylist/models/BookmarkedShowData.kt @@ -5,7 +5,7 @@ import com.woka.webseries.models.ShowData data class BookmarkedShowData( val age_range_master_id: String?, - val bookmark_category_ids: String?, + var bookmark_category_ids: String?, val bookmark_count: Int?, val category_master_id: String?, val content_more_details: List?, @@ -41,4 +41,17 @@ data class BookmarkedShowData( showData.total_seasons, showData.views_count ) + + fun addAsBookMark(categoryId: String){ + val categories = bookmark_category_ids?.split(",")?.toMutableList()?: mutableListOf() + categories.add(categoryId) + bookmark_category_ids = categories.joinToString(",") + } + + fun removeAsBookMark(categoryId: String){ + bookmark_category_ids?.split(",")?.toMutableList()?.let { + it.remove(categoryId) + bookmark_category_ids = it.joinToString(",") + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt index bcd443b..bba4eb8 100644 --- a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt +++ b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt @@ -2,10 +2,7 @@ package com.woka.home.sidebar.profile import android.graphics.Color import android.os.Bundle -import android.transition.Slide -import android.view.Gravity.END import androidx.activity.enableEdgeToEdge -import androidx.core.content.res.ResourcesCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.core.widget.addTextChangedListener @@ -18,7 +15,7 @@ import com.woka.userdata.userDataModels.UserData import com.woka.networking.ApiResult import com.woka.utils.Gender import com.woka.utils.ProgressView -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.toast diff --git a/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt b/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt index a563263..2f6cd18 100644 --- a/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt +++ b/app/src/main/java/com/woka/home/sidebar/support/SupportActivity.kt @@ -16,7 +16,7 @@ import com.woka.WokaApp.Companion.userPrefs import com.woka.databinding.ActivitySupportBinding import com.woka.networking.ApiResult import com.woka.utils.ProgressView -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.toast diff --git a/app/src/main/java/com/woka/modules/blogs/BlogsAdapter.kt b/app/src/main/java/com/woka/modules/blogs/BlogsAdapter.kt index f15dd83..cc40090 100644 --- a/app/src/main/java/com/woka/modules/blogs/BlogsAdapter.kt +++ b/app/src/main/java/com/woka/modules/blogs/BlogsAdapter.kt @@ -8,6 +8,7 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.bumptech.glide.Glide +import com.jwplayer.pub.api.JWPlayer import com.woka.R import com.woka.WokaApp import com.woka.WokaApp.Companion.userPrefs @@ -47,11 +48,7 @@ class BlogsAdapter(private val onBlogClicked: KFunction1, config: As holder.binding.apply { blog.thumbnail_path?.let { - Glide.with(holder.binding.image) - .load(it) - .placeholder(android.R.color.darker_gray) - .error(R.drawable.woka_logo_half) - .into(image) + image.loadImage(it) } card.setOnClickListener { diff --git a/app/src/main/java/com/woka/networking/RetrofitHelper.kt b/app/src/main/java/com/woka/networking/RetrofitHelper.kt index 78eb7c3..d4beb36 100644 --- a/app/src/main/java/com/woka/networking/RetrofitHelper.kt +++ b/app/src/main/java/com/woka/networking/RetrofitHelper.kt @@ -1,15 +1,11 @@ package com.woka.networking import android.annotation.SuppressLint -import android.content.Context -import android.provider.Settings import com.woka.BuildConfig import com.woka.WokaApp.Companion.userPrefs -import com.woka.onboard.models.LoginResponse import com.woka.utils.NO_INTERNET_MESSAGE import com.woka.utils.UNKNOWN_ERROR_MESSAGE -import com.woka.utils.UserType -import kotlinx.coroutines.delay +import com.woka.userPreference.UserType import okhttp3.Credentials import okhttp3.Interceptor import okhttp3.OkHttpClient diff --git a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt index fddd847..ec7771f 100644 --- a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt @@ -20,7 +20,7 @@ import com.woka.networking.ApiResult import com.woka.onboard.OnboardingAdapter import com.woka.onboard.mvvm.OnboardViewModel import com.woka.utils.ProgressView -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.toast class OnboardFragment : Fragment() { diff --git a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt index 1fc3b6b..01d8a7f 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt @@ -2,12 +2,10 @@ package com.woka.onboard.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 import android.view.ViewGroup -import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.woka.R @@ -15,19 +13,15 @@ import com.woka.WokaApp.Companion.userPrefs import com.woka.databinding.FragmentSelectAvatarBinding import com.woka.home.HomeActivity import com.woka.networking.ApiResult -import com.woka.networking.RetrofitHelper import com.woka.onboard.AvatarAdapter import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16 -import com.woka.onboard.models.Avatar import com.woka.onboard.models.RegisterRequestData import com.woka.onboard.mvvm.OnboardViewModel import com.woka.userdata.UserRepository import com.woka.utils.Gender import com.woka.utils.ProgressView -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.toast -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.Locale diff --git a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt index 67979a5..6a7c8f8 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt @@ -8,7 +8,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager -import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R @@ -20,7 +19,7 @@ import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_I import com.woka.onboard.mvvm.OnboardViewModel import com.woka.utils.DecisionDialog import com.woka.utils.ProgressView -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.toast class SignInFragment : Fragment() { diff --git a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt index 1781681..9224d53 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt @@ -18,7 +18,7 @@ import com.woka.databinding.FragmentSplashBinding import com.woka.home.HomeActivity import com.woka.userdata.userDataModels.UserDataResponse import com.woka.networking.ApiResult -import com.woka.utils.UserType +import com.woka.userPreference.UserType import com.woka.utils.toast import kotlinx.coroutines.delay import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/woka/userPreference/UserPreference.kt b/app/src/main/java/com/woka/userPreference/UserPreference.kt index 1df9896..ddef051 100644 --- a/app/src/main/java/com/woka/userPreference/UserPreference.kt +++ b/app/src/main/java/com/woka/userPreference/UserPreference.kt @@ -15,7 +15,6 @@ import com.woka.onboard.OnboardActivity import com.woka.userdata.UserRepository import com.woka.userdata.userDataModels.UserData import com.woka.userdata.userDataModels.UserDataResponse -import com.woka.utils.UserType import com.woka.webseries.WebSeriesRepository import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/com/woka/utils/UserType.kt b/app/src/main/java/com/woka/userPreference/UserType.kt similarity index 77% rename from app/src/main/java/com/woka/utils/UserType.kt rename to app/src/main/java/com/woka/userPreference/UserType.kt index 06d8956..2c9ae4f 100644 --- a/app/src/main/java/com/woka/utils/UserType.kt +++ b/app/src/main/java/com/woka/userPreference/UserType.kt @@ -1,4 +1,4 @@ -package com.woka.utils +package com.woka.userPreference enum class UserType(val id: Int) { CHILD(1), @@ -7,7 +7,7 @@ enum class UserType(val id: Int) { NONE(-1); companion object{ - fun createUserType(id: Int?): UserType{ + fun createUserType(id: Int?): UserType { return when(id){ 1 -> CHILD 2 -> GUARDIAN diff --git a/app/src/main/java/com/woka/utils/AdiImageView.kt b/app/src/main/java/com/woka/utils/AdiImageView.kt new file mode 100644 index 0000000..2569950 --- /dev/null +++ b/app/src/main/java/com/woka/utils/AdiImageView.kt @@ -0,0 +1,103 @@ +package com.woka.utils + +import android.content.Context +import android.content.res.ColorStateList +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import android.widget.FrameLayout +import android.widget.ImageView +import android.widget.ProgressBar +import androidx.appcompat.content.res.AppCompatResources +import androidx.cardview.widget.CardView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.woka.R + +class AdiImageView: FrameLayout { + + // attributes + private var cornerRadius: Int = 0 + private var loadingColor: Int = android.R.color.darker_gray + private var errorSrc: Drawable? = AppCompatResources.getDrawable(context, R.drawable.img_error_src) + private var progressTintMode: Int = context.getColor(android.R.color.white) + + // views + private var imageView: ImageView? = null + private var progressView: ProgressBar? = null + private var cardView: CardView? = null + + constructor(context: Context?) : super(context!!) + constructor(context: Context?, attrs: AttributeSet?) : super( + context!!, attrs + ){ + setAttributes(attrs) + inflateView() + } + + constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super( + context!!, attrs, defStyle + ) { + setAttributes(attrs) + inflateView() + } + + private fun setAttributes(attrs: AttributeSet?){ + val attributes = context.obtainStyledAttributes(attrs, R.styleable.AdiImageView) + + cornerRadius = attributes.getDimensionPixelSize(R.styleable.AdiImageView_imageCornerRadius, 0) + errorSrc = attributes.getDrawable(R.styleable.AdiImageView_errorSrc) + progressTintMode = attributes.getColor(R.styleable.AdiImageView_android_progressTintMode, progressTintMode) + + attributes.recycle() + } + + private fun inflateView() { + val view = inflate(context, R.layout.layout_adi_imageview, this) + + imageView = view.findViewById(R.id.adi_image) + progressView = view.findViewById(R.id.adi_progress) + cardView = view.findViewById(R.id.adi_card) + + progressView?.indeterminateTintList = ColorStateList.valueOf(progressTintMode) + cardView?.radius = cornerRadius.toFloat() + + } + + fun loadImage(url: String?) { + imageView?.let { + + progressView?.show() + + Glide.with(context.applicationContext) + .load(url) + .addListener(object: RequestListener{ + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target, + isFirstResource: Boolean + ): Boolean { + progressView?.hide() + imageView?.setImageDrawable(errorSrc) + return false + } + + override fun onResourceReady( + resource: Drawable, + model: Any, + target: Target?, + dataSource: DataSource, + isFirstResource: Boolean + ): Boolean { + progressView?.hide() + return false + } + }) + .placeholder(loadingColor) + .into(it) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/WebSeriesApiService.kt b/app/src/main/java/com/woka/webseries/WebSeriesApiService.kt index 33fbae2..ba4cb92 100644 --- a/app/src/main/java/com/woka/webseries/WebSeriesApiService.kt +++ b/app/src/main/java/com/woka/webseries/WebSeriesApiService.kt @@ -2,6 +2,7 @@ package com.woka.webseries import com.woka.networking.ApiResponse import com.woka.webseries.models.WebSeriesResponse +import com.woka.webseries.models.seasondata.SeasonDataResponse import okhttp3.FormBody import retrofit2.Response import retrofit2.http.Body @@ -11,4 +12,7 @@ interface WebSeriesApiService { @POST("watch_show_listing") suspend fun getWebSeries(@Body formBody: FormBody): Response> + + @POST("season_listing") + suspend fun seasonListing(@Body formBody: FormBody): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/WebSeriesRepository.kt b/app/src/main/java/com/woka/webseries/WebSeriesRepository.kt index a483973..9178dd0 100644 --- a/app/src/main/java/com/woka/webseries/WebSeriesRepository.kt +++ b/app/src/main/java/com/woka/webseries/WebSeriesRepository.kt @@ -12,6 +12,8 @@ import com.woka.networking.RetrofitHelper import com.woka.webseries.models.ContinueEpisodeResponse import com.woka.webseries.models.ShowData import com.woka.webseries.models.WebSeriesResponse +import com.woka.webseries.models.seasondata.SeasonData +import com.woka.webseries.models.seasondata.SeasonDataResponse import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -58,10 +60,47 @@ object WebSeriesRepository { */ private var shallLoadNewContinueWatchData: Boolean = false + // seasonListing data + private val _seasonDataLiveData = MutableLiveData>() + val seasonDataLiveData: LiveData> + get() = _seasonDataLiveData + + private var seasonDataMap = HashMap() + init { loadContinueWatchData() } + fun loadSeasonListing(showId: Int, categoryId: String){ + if (seasonDataMap.containsKey(showId)){ + _seasonDataLiveData.postValue(ApiResult.Success(data = seasonDataMap[showId])) + return + } + CoroutineScope(Dispatchers.IO).launch { + _seasonDataLiveData.postValue(ApiResult.Loading()) + val response = RetrofitHelper.handleApiCall { + apiService.seasonListing( + FormBody.Builder() + .add("watch_show_id", "$showId") + .add("category_id", categoryId) + .build() + ) + } + + when (response){ + is ApiResult.Error -> {} + is ApiResult.Loading -> {} + is ApiResult.Success -> { + response.data?.let {seasonList -> + seasonDataMap[showId] = seasonList + } + + _seasonDataLiveData.postValue(ApiResult.Success(response.data)) + } + } + } + } + private fun loadContinueWatchData(){ CoroutineScope(Dispatchers.IO).launch { _continueWatchLiveData.postValue(ApiResult.Loading()) @@ -151,7 +190,8 @@ object WebSeriesRepository { } } - private fun changeLikeLocally(id: String, isLiked: Boolean){ + fun changeLikeLocally(id: String, isLiked: Boolean){ + // changing in web series locally for (showDataResponse in webSeriesData.values){ showDataResponse.show_data?.let {shows -> for (show in shows){ @@ -173,6 +213,20 @@ object WebSeriesRepository { } } } + + // changing in fav list locally + MyListRepository.myFavData?.result?.show_data?.let { + for (show in it){ + if ("${show.id}" == id){ + show.is_liked = isLiked + show.likes_count?.let { count -> + show.likes_count = if (isLiked) count + 1 + else max(0, count - 1) + } + break + } + } + } } fun updateFavShow(showData: ShowData, addToBookmark: Boolean, categoryId: String){ diff --git a/app/src/main/java/com/woka/webseries/models/ShowData.kt b/app/src/main/java/com/woka/webseries/models/ShowData.kt index c9e0cbd..a22fc16 100644 --- a/app/src/main/java/com/woka/webseries/models/ShowData.kt +++ b/app/src/main/java/com/woka/webseries/models/ShowData.kt @@ -16,7 +16,6 @@ data class ShowData( val liked_category_ids: String?, var likes_count: Int?, var mark_as_favourite: Boolean?, - val season_data: List?, val show_type: String?, val thumbnail_path: String?, val title: String?, diff --git a/app/src/main/java/com/woka/webseries/models/SeasonData.kt b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonData.kt similarity index 80% rename from app/src/main/java/com/woka/webseries/models/SeasonData.kt rename to app/src/main/java/com/woka/webseries/models/seasondata/SeasonData.kt index 95d830c..ae40805 100644 --- a/app/src/main/java/com/woka/webseries/models/SeasonData.kt +++ b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonData.kt @@ -1,7 +1,9 @@ -package com.woka.webseries.models +package com.woka.webseries.models.seasondata data class SeasonData( + val category_master_id: String?, val id: Int?, + val media_type: String?, val no_of_episodes: Int?, val release_date: String?, val release_year: Int?, diff --git a/app/src/main/java/com/woka/webseries/models/seasondata/SeasonDataResponse.kt b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonDataResponse.kt new file mode 100644 index 0000000..d04c0ec --- /dev/null +++ b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonDataResponse.kt @@ -0,0 +1,6 @@ +package com.woka.webseries.models.seasondata + +data class SeasonDataResponse( + val result: List?, + val total_records: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/models/seasondata/SeasonMoreDetail.kt b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonMoreDetail.kt new file mode 100644 index 0000000..5567c47 --- /dev/null +++ b/app/src/main/java/com/woka/webseries/models/seasondata/SeasonMoreDetail.kt @@ -0,0 +1,13 @@ +package com.woka.webseries.models.seasondata + +data class SeasonMoreDetail( + val content_id: Int?, + val description: String?, + val id: Int?, + val language_master_id: Int?, + val post_type: Int?, + val tags_keywords: String?, + val title: String?, + val trailer_hd_url: String?, + val trailer_sd_url: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt b/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt index 6b79898..e47253a 100644 --- a/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt +++ b/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt @@ -1,5 +1,6 @@ package com.woka.webseries.views +import android.content.Intent import android.graphics.Color import android.os.Bundle import androidx.activity.enableEdgeToEdge @@ -7,17 +8,24 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.bumptech.glide.Glide +import com.google.android.material.tabs.TabLayout +import com.google.android.material.tabs.TabLayout.OnTabSelectedListener import com.woka.R import com.woka.databinding.ActivitySeasonBinding +import com.woka.networking.ApiResult +import com.woka.utils.isNetworkConnected import com.woka.utils.lightStatusBar +import com.woka.utils.toast import com.woka.webseries.WebSeriesRepository import com.woka.webseries.models.ShowData +import kotlin.math.max -class SeasonActivity : AppCompatActivity() { +class SeasonActivity : AppCompatActivity(), OnTabSelectedListener { companion object{ const val EXTRA_SHOW_ID = "extra_show_id_data" const val EXTRA_SHOW_CATEGORY_DATA = "extra_show_category_data" + const val EXTRA_SHOW_POSITION = "extra_show_position" } private lateinit var binding: ActivitySeasonBinding @@ -26,6 +34,8 @@ class SeasonActivity : AppCompatActivity() { private var showData: ShowData? = null + private var showPosition: Int = -1 + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -44,6 +54,7 @@ class SeasonActivity : AppCompatActivity() { showId = intent.getIntExtra(EXTRA_SHOW_ID, -1) categoryId = intent.getStringExtra(EXTRA_SHOW_CATEGORY_DATA) + showPosition = intent.getIntExtra(EXTRA_SHOW_POSITION, -1) if (showId == -1 || categoryId == null){ finish() @@ -61,6 +72,12 @@ class SeasonActivity : AppCompatActivity() { initViews() + clickEvents() + + setObservers() + + WebSeriesRepository.loadSeasonListing(showId, categoryId!!) + } private fun initViews() { @@ -81,4 +98,87 @@ class SeasonActivity : AppCompatActivity() { } } } + + private fun clickEvents(){ + binding.apply { + backBtn.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + + likeSeason.setOnClickListener { + if (!isNetworkConnected()){ + toast(getString(R.string.no_internet)) + return@setOnClickListener + } + + categoryId?.let { + if (likeSeason.isSelected){ + WebSeriesRepository.likeUnLikeShow("${showData?.id}", false, it) + + showData?.likes_count?.let {likeCountInt -> + likeCount.text = "${max(likeCountInt - 1, 0)}" + } + }else{ + WebSeriesRepository.likeUnLikeShow("${showData?.id}", true, it) + + showData?.likes_count?.let {likeCountInt -> + val value = likeCountInt + 1 + likeCount.text = "$value" + } + } + + likeSeason.isSelected = !likeSeason.isSelected + setResult(RESULT_OK, Intent().apply { + putExtra(EXTRA_SHOW_POSITION, showPosition) + }) + } + } + + favSeason.setOnClickListener { + if (!isNetworkConnected()){ + toast(getString(R.string.no_internet)) + return@setOnClickListener + } + + if (showData == null) return@setOnClickListener + + categoryId?.let { + WebSeriesRepository.updateFavShow( + showData!!, + !favSeason.isSelected, + it + ) + + favSeason.isSelected = !favSeason.isSelected + + setResult(RESULT_OK, Intent().apply { + putExtra(EXTRA_SHOW_POSITION, showPosition) + }) + } + } + } + } + + private fun setObservers(){ + WebSeriesRepository.seasonDataLiveData.observe(this){ + when(it){ + is ApiResult.Error -> {} + is ApiResult.Loading -> {} + is ApiResult.Success -> { + it.data?.result?.let {seasonList -> + for (season in seasonList){ + if (season == null) continue + binding.seasonsTab.addTab(binding.seasonsTab.newTab().setText("${season.season_number}")) + } + } + } + } + } + } + + override fun onTabSelected(p0: TabLayout.Tab?) {} + + override fun onTabUnselected(p0: TabLayout.Tab?) {} + + override fun onTabReselected(p0: TabLayout.Tab?) {} } \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt b/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt index 803915e..981656f 100644 --- a/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt +++ b/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt @@ -1,14 +1,15 @@ package com.woka.webseries.views +import android.content.Intent import android.os.Bundle import android.view.View import android.widget.AdapterView import android.widget.AdapterView.OnItemSelectedListener -import android.widget.ArrayAdapter import androidx.activity.enableEdgeToEdge +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat -import androidx.lifecycle.LiveData import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.SimpleItemAnimator @@ -24,6 +25,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.ShowData import com.woka.webseries.models.WebSeriesResponse import com.woka.webseries.viewmodel.WebSeriesViewModel @@ -39,6 +41,8 @@ class WebSeriesActivity : WokaBaseActivity(), Observer? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -60,6 +64,8 @@ class WebSeriesActivity : WokaBaseActivity(), Observer + if (position > -1){ + showAdapter.notifyItemChanged(position) + } + } + } + } + } + private fun setObservers(){ viewmodel.webSeriesLiveData.observe(this, this) @@ -215,4 +233,12 @@ class WebSeriesActivity : WokaBaseActivity(), Observer + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_season.xml b/app/src/main/res/layout/activity_season.xml index bc39c6c..20a146c 100644 --- a/app/src/main/res/layout/activity_season.xml +++ b/app/src/main/res/layout/activity_season.xml @@ -172,8 +172,8 @@ > @@ -181,11 +181,12 @@ @@ -383,6 +384,33 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_web_series.xml b/app/src/main/res/layout/activity_web_series.xml index 58f6ae5..0616573 100644 --- a/app/src/main/res/layout/activity_web_series.xml +++ b/app/src/main/res/layout/activity_web_series.xml @@ -205,6 +205,7 @@ - - - - - + android:layout_marginTop="10dp"/> - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/show_view_holder.xml b/app/src/main/res/layout/show_view_holder.xml index 575eac9..f78ee1e 100644 --- a/app/src/main/res/layout/show_view_holder.xml +++ b/app/src/main/res/layout/show_view_holder.xml @@ -18,13 +18,12 @@ android:layout_marginVertical="10dp" > - + + + + + + + \ No newline at end of file