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:
2024-06-27 20:45:13 +05:30
parent 9db563e2cd
commit 9d38928884
13 changed files with 383 additions and 85 deletions

View File

@@ -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()
}

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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()){

View File

@@ -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()

View File

@@ -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)
}
}
}
}

View File

@@ -75,7 +75,7 @@ class EpisodeAdapter private constructor(val context: Context,
}
card.setOnClickListener {
onEpisodeClicked?.invoke(position, episode)
onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode)
}
}
}

View File

@@ -74,7 +74,7 @@ class TeaserAdapter private constructor(val context: Context,
}
card.setOnClickListener {
onEpisodeClicked?.invoke(position, episode)
onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode)
}
}

View File

@@ -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)
})
}

View File

@@ -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()
}
}
}
}

View File

@@ -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"

View 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>

View File

@@ -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>