From 9d389288847ba1f0a63639658ba2efa84081b534 Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Thu, 27 Jun 2024 20:45:13 +0530 Subject: [PATCH] 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 --- .../com/woka/home/fragments/MyListFragment.kt | 34 +++-- .../com/woka/home/mylist/MyListRepository.kt | 109 +++++++++------ .../home/mylist/adapters/WebSeriesAdapter.kt | 18 +-- .../home/mylist/models/BookmarkedShowData.kt | 10 ++ .../java/com/woka/players/PlayerActivity.kt | 4 +- .../adapters/ContinueEpisodeAdapter.kt | 8 ++ .../woka/webseries/adapters/EpisodeAdapter.kt | 2 +- .../woka/webseries/adapters/TeaserAdapter.kt | 2 +- .../woka/webseries/views/SeasonActivity.kt | 16 +-- .../woka/webseries/views/WebSeriesActivity.kt | 130 ++++++++++++++++++ .../res/layout/continue_show_view_holder.xml | 1 + .../res/layout/dialog_continue_episode.xml | 113 +++++++++++++++ app/src/main/res/layout/layout_bottom_nav.xml | 21 ++- 13 files changed, 383 insertions(+), 85 deletions(-) create mode 100644 app/src/main/res/layout/dialog_continue_episode.xml 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 3c97e50..b5a970e 100644 --- a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt +++ b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt @@ -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() } 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 61000c0..152909c 100644 --- a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt +++ b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt @@ -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 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 cb78d51..33b73cb 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 @@ -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) } } 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 cbcdbb4..cb601fd 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 @@ -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()){ diff --git a/app/src/main/java/com/woka/players/PlayerActivity.kt b/app/src/main/java/com/woka/players/PlayerActivity.kt index 0816861..a3639ab 100644 --- a/app/src/main/java/com/woka/players/PlayerActivity.kt +++ b/app/src/main/java/com/woka/players/PlayerActivity.kt @@ -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() diff --git a/app/src/main/java/com/woka/webseries/adapters/ContinueEpisodeAdapter.kt b/app/src/main/java/com/woka/webseries/adapters/ContinueEpisodeAdapter.kt index fd1226e..9aff2b7 100644 --- a/app/src/main/java/com/woka/webseries/adapters/ContinueEpisodeAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/ContinueEpisodeAdapter.kt @@ -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) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt b/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt index a21b9c2..3afb3d0 100644 --- a/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt @@ -75,7 +75,7 @@ class EpisodeAdapter private constructor(val context: Context, } card.setOnClickListener { - onEpisodeClicked?.invoke(position, episode) + onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode) } } } diff --git a/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt b/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt index 75f64e9..bbc5834 100644 --- a/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt @@ -74,7 +74,7 @@ class TeaserAdapter private constructor(val context: Context, } card.setOnClickListener { - onEpisodeClicked?.invoke(position, episode) + onEpisodeClicked?.invoke(holder.absoluteAdapterPosition, episode) } } 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 19c7314..f9b2001 100644 --- a/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt +++ b/app/src/main/java/com/woka/webseries/views/SeasonActivity.kt @@ -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) }) } 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 07461e1..5f143d5 100644 --- a/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt +++ b/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt @@ -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? = 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 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 + + 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( + "
", + " " + ), Html.FROM_HTML_MODE_LEGACY + ) + } + }else{ + moreDetailsList[0].let {data -> + title.text = data.title + description.text = Html.fromHtml( + data.description?.replace( + "
", + " " + ), Html.FROM_HTML_MODE_LEGACY + ) + } + } + }else{ + title.text = episodeData.episode_title + description.text = Html.fromHtml( + episodeData.episode_description?.replace( + "
", + " " + ), Html.FROM_HTML_MODE_LEGACY + ) + } + + watchCard.setOnClickListener { + episodeData.content_more_details.let {moreDetailsList-> + val playlist = ArrayList() + 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() + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/continue_show_view_holder.xml b/app/src/main/res/layout/continue_show_view_holder.xml index 13cc014..0c01b77 100644 --- a/app/src/main/res/layout/continue_show_view_holder.xml +++ b/app/src/main/res/layout/continue_show_view_holder.xml @@ -1,5 +1,6 @@ + + + + + + + + + + + + + + + + + + + + +