From 88e11a972dc9284ef943edb2f07f4cb4c367ed15 Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Mon, 12 Aug 2024 20:50:11 +0530 Subject: [PATCH] ModuleDialog in all view all sections of MyListFragment. Syncing data by reloading latest 3 favs of the currently viewed view all when returning back. Changed karaoke url to mp4 to download audio from it: api changes. handled this in module and mylist. Error handling for player in LiveStreamPlayerActivity by reloading for 10 times repeatedly until there is an error. Added share functionality in all modules. ADDED CLICKED CACHING IN ALL OVER THE APP. (Except the common Player) --- .../audiobooks/adapters/AudioBooksAdapter.kt | 6 ++ .../adapters/ContinueAudioAdapter.kt | 6 ++ .../audiobooks/views/AudioBooksActivity.kt | 87 +++++++++++++------ .../com/woka/home/fragments/Home2Fragment.kt | 9 ++ .../com/woka/home/fragments/MyListFragment.kt | 59 +++++++++---- .../home/mylist/adapters/WebSeriesAdapter.kt | 6 +- .../mylist/view/fragments/FavAudioFragment.kt | 6 ++ .../mylist/view/fragments/FavGameFragment.kt | 6 ++ .../view/fragments/FavKaraokeFragment.kt | 60 +++++++++---- .../notifications/NotificationsActivity.kt | 8 ++ .../home/sidebar/aboutwoka/AboutActivity.kt | 9 ++ .../com/woka/home/sidebar/faqs/FaqActivity.kt | 9 ++ .../sidebar/profile/UserProfileActivity.kt | 23 ++++- .../home/sidebar/support/SupportActivity.kt | 26 ++++++ .../com/woka/home/viewmodels/HomeViewModel.kt | 27 ++++++ .../com/woka/home/views/MoreHomeActivity.kt | 4 +- .../woka/karaoke/adapters/KaraokeAdapter.kt | 6 ++ .../models/listing/ContentMoreDetail.kt | 3 +- .../karaoke/player/KaraokePlayerActivity.kt | 14 +++ .../woka/karaoke/player/KaraokePlayerData.kt | 3 +- .../com/woka/karaoke/views/KaraokeActivity.kt | 77 ++++++++++++---- .../woka/modules/blogs/view/BlogsActivity.kt | 13 +++ .../modules/disclaimer/DisclaimerActivity.kt | 9 ++ .../woka/modules/webview/WebViewActivity.kt | 9 ++ .../onboard/fragments/AgeSelectionFragment.kt | 8 ++ .../onboard/fragments/ChildListFragment.kt | 8 +- .../woka/onboard/fragments/GetCodeFragment.kt | 8 ++ .../onboard/fragments/GetEmailFragment.kt | 6 ++ .../onboard/fragments/GetMoreInfoFragment.kt | 24 ++++- .../onboard/fragments/LanguageFragment.kt | 7 +- .../onboard/fragments/NewPasswordFragment.kt | 6 ++ .../woka/onboard/fragments/OnboardFragment.kt | 6 ++ .../onboard/fragments/SelectAvatarFragment.kt | 8 ++ .../woka/onboard/fragments/SignInFragment.kt | 10 +++ .../woka/onboard/fragments/SignUpFragment.kt | 6 ++ .../java/com/woka/onboard/models/Guest.kt | 3 +- .../players/models/VideoViewRequestData.kt | 2 +- .../players/views/LiveStreamPlayerActivity.kt | 15 +++- .../shop/adapters/ParentAddressAdapter.kt | 4 + .../com/woka/shop/views/AddressActivity.kt | 9 ++ .../java/com/woka/shop/views/CartActivity.kt | 9 ++ .../com/woka/shop/views/MyOrdersActivity.kt | 16 ++++ .../java/com/woka/shop/views/ShopActivity.kt | 12 +++ .../fragments/address/AddAddressFragment.kt | 4 + .../fragments/address/PinCodeFragment.kt | 4 + .../shop/views/fragments/cart/CartFragment.kt | 66 ++++++++------ .../fragments/cart/OrderSummaryFragment.kt | 10 +++ .../fragments/cart/ParentAddressFragment.kt | 6 ++ .../views/fragments/shop/ProductFragment.kt | 6 ++ .../views/fragments/shop/ShopFragment1.kt | 5 ++ .../views/fragments/shop/ShopFragment2.kt | 6 ++ .../views/fragments/shop/ShopFragment3.kt | 10 +++ app/src/main/java/com/woka/utils/Constants.kt | 6 +- .../main/java/com/woka/utils/Extensions.kt | 12 +++ .../woka/webseries/adapters/EpisodeAdapter.kt | 4 +- .../woka/webseries/adapters/TeaserAdapter.kt | 4 +- .../adapters/WebSeriesShowAdapter.kt | 6 ++ .../woka/webseries/views/WebSeriesActivity.kt | 9 ++ .../views/fragments/WebSeriesFragment.kt | 27 ++++-- .../views/fragments/WebShowFragment.kt | 39 ++++++++- .../woka/wokagames/adapters/GamesAdapter.kt | 6 ++ .../com/woka/wokagames/views/GamesActivity.kt | 33 ++++++- app/src/main/res/values-hi/strings.xml | 2 +- app/src/main/res/values/strings.xml | 4 +- 64 files changed, 781 insertions(+), 140 deletions(-) diff --git a/app/src/main/java/com/woka/audiobooks/adapters/AudioBooksAdapter.kt b/app/src/main/java/com/woka/audiobooks/adapters/AudioBooksAdapter.kt index aa33ed6..64e5205 100644 --- a/app/src/main/java/com/woka/audiobooks/adapters/AudioBooksAdapter.kt +++ b/app/src/main/java/com/woka/audiobooks/adapters/AudioBooksAdapter.kt @@ -11,6 +11,8 @@ import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.audiobooks.AudioBookRepository import com.woka.audiobooks.models.audiodata.AudioBookData +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ShowViewHolderBinding import com.woka.userPreference.UserType import com.woka.utils.isNetworkConnected @@ -123,6 +125,8 @@ class AudioBooksAdapter( audioBook.id?.let{ onBookChanged(it, audioBook) } + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBook.id) } fav.isSelected = audioBook.mark_as_favourite == true @@ -149,6 +153,8 @@ class AudioBooksAdapter( audioBook.id?.let{ onBookChanged(it, audioBook) } + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBook.id) } root.setOnClickListener { diff --git a/app/src/main/java/com/woka/audiobooks/adapters/ContinueAudioAdapter.kt b/app/src/main/java/com/woka/audiobooks/adapters/ContinueAudioAdapter.kt index d381cc2..929f06d 100644 --- a/app/src/main/java/com/woka/audiobooks/adapters/ContinueAudioAdapter.kt +++ b/app/src/main/java/com/woka/audiobooks/adapters/ContinueAudioAdapter.kt @@ -11,6 +11,8 @@ import com.woka.WokaApp import com.woka.audiobooks.AudioBookRepository import com.woka.audiobooks.models.audiodata.AudioBookData import com.woka.audiobooks.models.continuedata.ContinueAudioData +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FavViewHolderBinding import com.woka.home.mylist.adapters.FavoriteViewHolder import com.woka.utils.isNetworkConnected @@ -108,6 +110,8 @@ class ContinueAudioAdapter(private val context: Context, likeCount.text = "${audioBook.likes_count}" audioBook?.id?.let{onContinueBookChanged(it, AudioBookData(audioBook))} + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBook.id) } fav.isSelected = audioBook.mark_as_favourite == true @@ -128,6 +132,8 @@ class ContinueAudioAdapter(private val context: Context, fav.isSelected = audioBook.mark_as_favourite == true audioBook?.id?.let{onContinueBookChanged(it, AudioBookData(audioBook))} + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBook.id) } root.setOnClickListener { diff --git a/app/src/main/java/com/woka/audiobooks/views/AudioBooksActivity.kt b/app/src/main/java/com/woka/audiobooks/views/AudioBooksActivity.kt index e08d95c..79d279e 100644 --- a/app/src/main/java/com/woka/audiobooks/views/AudioBooksActivity.kt +++ b/app/src/main/java/com/woka/audiobooks/views/AudioBooksActivity.kt @@ -23,6 +23,8 @@ import com.woka.audiobooks.adapters.ContinueAudioAdapter import com.woka.audiobooks.models.audiodata.AudioBookData import com.woka.audiobooks.models.continuedata.ContinueAudioData import com.woka.audiobooks.viewmodels.AudioBookViewModel +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityAudioBooksBinding import com.woka.databinding.DialogModuleShowerBinding import com.woka.networking.ApiResult @@ -34,6 +36,7 @@ import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import java.text.SimpleDateFormat @@ -71,7 +74,7 @@ class AudioBooksActivity : WokaBaseActivity() { viewModel = ViewModelProvider(this)[AudioBookViewModel::class.java] - audioBookAdapter = AudioBooksAdapter(this, ::onBookClicked, ::onBookChanged){ + audioBookAdapter = AudioBooksAdapter(this, ::onBookClicked, ::onBookChanged) { noSignInDialog.show() } continueAudioAdapter = @@ -91,11 +94,17 @@ class AudioBooksActivity : WokaBaseActivity() { setObservers() - if (!viewModel.audioBookLiveData.isInitialized){ + if (!viewModel.audioBookLiveData.isInitialized) { viewModel.loadAudioSongs() } } + override fun onDestroy() { + super.onDestroy() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { adjustTrailerImage() @@ -129,6 +138,10 @@ class AudioBooksActivity : WokaBaseActivity() { } dialogBinding.close.setOnClickListener { audioDialog.dismiss() } + + audioDialog.setOnDismissListener { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } private fun clickEvents() { @@ -139,17 +152,21 @@ class AudioBooksActivity : WokaBaseActivity() { retryBtn.setOnClickListener { viewModel.loadAudioSongs() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } loadMoreBtn.setOnClickListener { viewModel.loadAudioSongs() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } private fun setObservers() { - viewModel.audioBookLiveData.observe(this){ - when(it){ + viewModel.audioBookLiveData.observe(this) { + when (it) { is ApiResult.Error -> { binding.shimmer.hide() if (audioBookAdapter.currentList.size == 0) { @@ -166,6 +183,7 @@ class AudioBooksActivity : WokaBaseActivity() { binding.loadMoreBtn.show() } } + is ApiResult.Loading -> { if (audioBookAdapter.currentList.size == 0) { // loading first data @@ -177,9 +195,10 @@ class AudioBooksActivity : WokaBaseActivity() { binding.loadMoreBtn.hide() } } + is ApiResult.Success -> { - it.data?.let {newList -> - if (newList.isNotEmpty()){ + it.data?.let { newList -> + if (newList.isNotEmpty()) { binding.rvAudioBooks.show() binding.listenTxt.show() binding.trailerView.show() @@ -191,15 +210,15 @@ class AudioBooksActivity : WokaBaseActivity() { binding.loadMoreBtn.text = getString(R.string.load_more) binding.loadMoreBtn.setVisibility(!viewModel.lastPage) - if (audioBookAdapter.currentList.isEmpty()){ + if (audioBookAdapter.currentList.isEmpty()) { // first data load - if (userPrefs?.userType != UserType.GUEST && !viewModel.audioContinueLiveData.isInitialized){ + if (userPrefs?.userType != UserType.GUEST && !viewModel.audioContinueLiveData.isInitialized) { viewModel.loadContinueData() } loadTrailerData(newList[0]) audioBookAdapter.submitList(newList) - }else{ + } else { // loaded more data audioBookAdapter.notifyItemRangeInserted( audioBookAdapter.currentList.size, @@ -260,6 +279,8 @@ class AudioBooksActivity : WokaBaseActivity() { trailerBtn.setOnClickListener { onListenClicked(audioBookData) + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } } } @@ -278,11 +299,15 @@ class AudioBooksActivity : WokaBaseActivity() { private fun onBookClicked(audioBookData: AudioBookData) { loadTrailerData(audioBookData) showAudioDialog(audioBookData) + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } private fun onContinueBookClicked(audioBookData: ContinueAudioData) { loadTrailerData(AudioBookData(audioBookData)) showAudioDialog(AudioBookData(audioBookData)) + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } private fun onBookChanged(id: Int, audioBookData: AudioBookData) { @@ -320,18 +345,18 @@ class AudioBooksActivity : WokaBaseActivity() { var url: String? = null var title = "" - audioBookData.content_more_details?.let {moreDetails -> - if (moreDetails.isNotEmpty()){ - if (userPrefs?.appLanguage == "hi" && moreDetails.size > 1){ + audioBookData.content_more_details?.let { moreDetails -> + if (moreDetails.isNotEmpty()) { + if (userPrefs?.appLanguage == "hi" && moreDetails.size > 1) { url = moreDetails[1]?.url - title = moreDetails[1]?.title?:"" - }else{ + title = moreDetails[1]?.title ?: "" + } else { url = moreDetails[0]?.url - title = moreDetails[0]?.title?:"" + title = moreDetails[0]?.title ?: "" } - }else{ + } else { url = audioBookData.audio_url - title = audioBookData.title?:"" + title = audioBookData.title ?: "" } } @@ -417,15 +442,23 @@ class AudioBooksActivity : WokaBaseActivity() { watchCard.setOnClickListener { onListenClicked(audioBookData) + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) + } + + share.setOnClickListener { + shareWokaApp() + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } like.setOnClickListener { - if (!isNetworkConnected()){ + if (!isNetworkConnected()) { toast(getString(R.string.no_internet)) return@setOnClickListener } - if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ + if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) { noSignInDialog.show() return@setOnClickListener } @@ -436,10 +469,10 @@ class AudioBooksActivity : WokaBaseActivity() { ) audioBookData.likes_count?.let { - audioBookData.likes_count = if (like.isSelected){ + audioBookData.likes_count = if (like.isSelected) { // unlike max(0, it - 1) - }else{ + } else { // like it + 1 } @@ -453,19 +486,21 @@ class AudioBooksActivity : WokaBaseActivity() { } like.isSelected = !like.isSelected likeCount.text = "${audioBookData.likes_count}" + + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } fav.setOnClickListener { - if (!isNetworkConnected()){ + if (!isNetworkConnected()) { toast(getString(R.string.no_internet)) return@setOnClickListener } - if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ + if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) { noSignInDialog.show() return@setOnClickListener } - + AudioBookRepository.updateFavShow( audioBookData, !fav.isSelected @@ -479,10 +514,8 @@ class AudioBooksActivity : WokaBaseActivity() { } fav.isSelected = !fav.isSelected - } - close.setOnClickListener { - audioDialog.dismiss() + ClicksHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } audioDialog.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 364f82c..5d76dfe 100644 --- a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt @@ -22,6 +22,7 @@ import com.woka.networking.ApiResult import com.woka.players.models.VideoPlayList import com.woka.players.views.LiveStreamPlayerActivity import com.woka.players.views.PlayerActivity +import com.woka.shop.views.ShopActivity import com.woka.streamingurls.StreamingUrlRepository import com.woka.userPreference.UserType import com.woka.userdata.userDataModels.UserDataResponse @@ -130,6 +131,14 @@ class Home2Fragment : Fragment() { } } + shop.setOnClickListener { + activity?.let { + startActivity(Intent(it, ShopActivity::class.java)) + + clickHelper.upsertClickEvent(ContentType.OTHERS) + } + } + playTrailer.setOnClickListener { activity?.let { it.startActivity(Intent(it, PlayerActivity::class.java).apply { 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 f6a74e4..33055c0 100644 --- a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt +++ b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt @@ -57,6 +57,7 @@ import com.woka.userdata.UserRepository import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import com.woka.webseries.models.ShowData @@ -484,6 +485,11 @@ class MyListFragment : Fragment() { clickHelper.upsertClickEvent(ContentType.OTHERS) } + + dialogBinding.share.setOnClickListener { + clickHelper.upsertClickEvent(ContentType.OTHERS) + activity?.shareWokaApp() + } } private fun onListGotEmpty(postType: PostType, isEng: Boolean = true) { @@ -967,6 +973,24 @@ class MyListFragment : Fragment() { " " ), Html.FROM_HTML_MODE_LEGACY ) + + watchCard.setOnClickListener { + activity?.let { activity -> + data.video_url_hd?.let { + startActivity( + Intent( + activity, + KaraokePlayerActivity::class.java + ).apply { + putExtra( + KaraokePlayerActivity.EXTRA_KARAOKE_DATA, + KaraokePlayerData(it, karaokeData.title) + ) + }) + } + } + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + } } } else { moreDetailsList[0]?.let { data -> @@ -977,6 +1001,24 @@ class MyListFragment : Fragment() { " " ), Html.FROM_HTML_MODE_LEGACY ) + + watchCard.setOnClickListener { + activity?.let { activity -> + data.video_url_hd?.let { + startActivity( + Intent( + activity, + KaraokePlayerActivity::class.java + ).apply { + putExtra( + KaraokePlayerActivity.EXTRA_KARAOKE_DATA, + KaraokePlayerData(it, karaokeData.title) + ) + }) + } + } + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + } } } } else { @@ -995,23 +1037,6 @@ class MyListFragment : Fragment() { } watchCard.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_mic, 0, 0, 0) watchCard.text = getString(R.string.sing_now) - watchCard.setOnClickListener { - activity?.let { activity -> - karaokeData.video_url?.let { - startActivity( - Intent( - activity, - KaraokePlayerActivity::class.java - ).apply { - putExtra( - KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) - ) - }) - } - } - clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) - } like.setOnClickListener { KaraokeRepository.likeUnLikeSong( 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 45cd288..eb7a80d 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 @@ -25,7 +25,11 @@ class WebSeriesAdapter( oldItem: BookmarkedShowData, newItem: BookmarkedShowData ): Boolean { - return oldItem.title == newItem.title + return oldItem.thumbnail_path == newItem.thumbnail_path && + oldItem.title == newItem.title && + oldItem.is_liked == newItem.is_liked && + oldItem.mark_as_favourite == newItem.mark_as_favourite && + oldItem.likes_count == newItem.likes_count } } diff --git a/app/src/main/java/com/woka/home/mylist/view/fragments/FavAudioFragment.kt b/app/src/main/java/com/woka/home/mylist/view/fragments/FavAudioFragment.kt index 3d02199..425d7e4 100644 --- a/app/src/main/java/com/woka/home/mylist/view/fragments/FavAudioFragment.kt +++ b/app/src/main/java/com/woka/home/mylist/view/fragments/FavAudioFragment.kt @@ -32,6 +32,7 @@ import com.woka.players.views.PlayerActivity import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import java.text.SimpleDateFormat @@ -121,6 +122,11 @@ class FavAudioFragment : Fragment() { clickHelper.upsertClickEvent(ContentType.OTHERS) } + + dialogBinding.share.setOnClickListener { + clickHelper.upsertClickEvent(ContentType.OTHERS) + activity?.shareWokaApp() + } } private fun setObservers(){ diff --git a/app/src/main/java/com/woka/home/mylist/view/fragments/FavGameFragment.kt b/app/src/main/java/com/woka/home/mylist/view/fragments/FavGameFragment.kt index 791fc48..eea7822 100644 --- a/app/src/main/java/com/woka/home/mylist/view/fragments/FavGameFragment.kt +++ b/app/src/main/java/com/woka/home/mylist/view/fragments/FavGameFragment.kt @@ -27,6 +27,7 @@ import com.woka.networking.ApiResult import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import com.woka.wokagames.GamesRepository @@ -107,6 +108,11 @@ class FavGameFragment : Fragment() { clickHelper.upsertClickEvent(ContentType.OTHERS) } + + dialogBinding.share.setOnClickListener { + clickHelper.upsertClickEvent(ContentType.OTHERS) + activity?.shareWokaApp() + } } private fun initViews(){ diff --git a/app/src/main/java/com/woka/home/mylist/view/fragments/FavKaraokeFragment.kt b/app/src/main/java/com/woka/home/mylist/view/fragments/FavKaraokeFragment.kt index 40b50ea..bf77025 100644 --- a/app/src/main/java/com/woka/home/mylist/view/fragments/FavKaraokeFragment.kt +++ b/app/src/main/java/com/woka/home/mylist/view/fragments/FavKaraokeFragment.kt @@ -21,7 +21,6 @@ import com.woka.database.models.clicks.ContentType import com.woka.databinding.DialogModuleShowerBinding import com.woka.databinding.FragmentFavoritesBinding import com.woka.home.mylist.MyListRepository -import com.woka.home.mylist.models.FavKaraokeData import com.woka.home.mylist.viewmodel.FavoriteViewModel import com.woka.karaoke.KaraokeRepository import com.woka.karaoke.adapters.KaraokeAdapter @@ -32,6 +31,7 @@ import com.woka.networking.ApiResult import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import java.text.SimpleDateFormat @@ -107,6 +107,11 @@ class FavKaraokeFragment : Fragment() { clickHelper.upsertClickEvent(ContentType.OTHERS) } + + dialogBinding.share.setOnClickListener { + clickHelper.upsertClickEvent(ContentType.OTHERS) + activity?.shareWokaApp() + } } private fun initViews(){ @@ -207,6 +212,24 @@ class FavKaraokeFragment : Fragment() { " " ), Html.FROM_HTML_MODE_LEGACY ) + + watchCard.setOnClickListener { + activity?.let { activity -> + data.video_url_hd?.let { + startActivity( + Intent( + activity, + KaraokePlayerActivity::class.java + ).apply { + putExtra( + KaraokePlayerActivity.EXTRA_KARAOKE_DATA, + KaraokePlayerData(it, karaokeData.title) + ) + }) + } + } + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + } } } else { moreDetailsList[0]?.let { data -> @@ -217,6 +240,24 @@ class FavKaraokeFragment : Fragment() { " " ), Html.FROM_HTML_MODE_LEGACY ) + + watchCard.setOnClickListener { + activity?.let { activity -> + data.video_url_hd?.let { + startActivity( + Intent( + activity, + KaraokePlayerActivity::class.java + ).apply { + putExtra( + KaraokePlayerActivity.EXTRA_KARAOKE_DATA, + KaraokePlayerData(it, karaokeData.title) + ) + }) + } + } + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + } } } } else { @@ -235,23 +276,6 @@ class FavKaraokeFragment : Fragment() { } watchCard.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_mic, 0, 0, 0) watchCard.text = getString(R.string.sing_now) - watchCard.setOnClickListener { - activity?.let { activity -> - karaokeData.video_url?.let { - startActivity( - Intent( - activity, - KaraokePlayerActivity::class.java - ).apply { - putExtra( - KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) - ) - }) - } - } - clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) - } like.setOnClickListener { KaraokeRepository.likeUnLikeSong( diff --git a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt index 66fbe32..89c720d 100644 --- a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt +++ b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt @@ -7,6 +7,8 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R import com.woka.audiobooks.views.AudioBooksActivity +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityNotificationsBinding import com.woka.karaoke.views.KaraokeActivity import com.woka.networking.ApiResult @@ -56,10 +58,14 @@ class NotificationsActivity : WokaBaseActivity() { binding.apply { retry.setOnClickListener { NotificationRepository.loadNotifications() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } adapter.clickListener = { @@ -77,6 +83,8 @@ class NotificationsActivity : WokaBaseActivity() { this@NotificationsActivity, destination )) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/home/sidebar/aboutwoka/AboutActivity.kt b/app/src/main/java/com/woka/home/sidebar/aboutwoka/AboutActivity.kt index db54884..4a670f3 100644 --- a/app/src/main/java/com/woka/home/sidebar/aboutwoka/AboutActivity.kt +++ b/app/src/main/java/com/woka/home/sidebar/aboutwoka/AboutActivity.kt @@ -7,6 +7,8 @@ import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityAboutBinding import com.woka.utils.WokaBaseActivity import com.woka.utils.lightStatusBar @@ -36,6 +38,13 @@ class AboutActivity : WokaBaseActivity() { clickEvents() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun clickEvents() { binding.apply { backBtn.setOnClickListener { diff --git a/app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt b/app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt index e3f3599..d14c3d2 100644 --- a/app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt +++ b/app/src/main/java/com/woka/home/sidebar/faqs/FaqActivity.kt @@ -8,6 +8,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityFaqBinding import com.woka.modules.faqs.FAQsRepository import com.woka.networking.ApiResult @@ -44,6 +46,13 @@ class FaqActivity : AppCompatActivity() { setObservers() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun setObservers() { FAQsRepository.faqLiveData.observe(this){ when(it){ 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 59729d3..b9c2ca9 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 @@ -10,6 +10,8 @@ import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityUserProfileBinding import com.woka.networking.ApiResult import com.woka.userPreference.UserType @@ -51,6 +53,13 @@ class UserProfileActivity : WokaBaseActivity() { setObservers() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { genderMTxt.text = if (userPrefs?.userType == UserType.GUARDIAN) getString(R.string.male) @@ -63,8 +72,16 @@ class UserProfileActivity : WokaBaseActivity() { private fun clickEvents() { binding.apply { - genderM.setOnClickListener { selectGender(Gender.MALE) } - genderF.setOnClickListener { selectGender(Gender.FEMALE) } + genderM.setOnClickListener { + selectGender(Gender.MALE) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + genderF.setOnClickListener { + selectGender(Gender.FEMALE) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() @@ -82,6 +99,8 @@ class UserProfileActivity : WokaBaseActivity() { } ) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 0f9e3e0..0c319af 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 @@ -6,6 +6,8 @@ import android.transition.Slide import android.util.Patterns import android.view.Gravity import android.view.MotionEvent +import android.view.View +import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat @@ -13,6 +15,8 @@ import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.ViewModelProvider import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivitySupportBinding import com.woka.networking.ApiResult import com.woka.utils.ProgressView @@ -59,6 +63,13 @@ class SupportActivity : WokaBaseActivity() { setObservers() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun setObservers() { viewModel.supportLiveData.observe(this){ when(it){ @@ -108,6 +119,19 @@ class SupportActivity : WokaBaseActivity() { android.R.layout.simple_spinner_dropdown_item ) + subjectSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{ + override fun onItemSelected( + parent: AdapterView<*>?, + view: View?, + position: Int, + id: Long + ) { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + + override fun onNothingSelected(parent: AdapterView<*>?) {} + } + subjectSpinner.setAdapter(adapter) message.setOnTouchListener { v, event -> @@ -150,6 +174,8 @@ class SupportActivity : WokaBaseActivity() { } } } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/home/viewmodels/HomeViewModel.kt b/app/src/main/java/com/woka/home/viewmodels/HomeViewModel.kt index 0c46b0f..0f25523 100644 --- a/app/src/main/java/com/woka/home/viewmodels/HomeViewModel.kt +++ b/app/src/main/java/com/woka/home/viewmodels/HomeViewModel.kt @@ -1,21 +1,28 @@ package com.woka.home.viewmodels import android.content.Context +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.media3.common.MediaItem +import androidx.media3.common.PlaybackException import androidx.media3.common.Player import androidx.media3.common.Player.Listener import androidx.media3.exoplayer.ExoPlayer import com.woka.home.views.BottomNavigation.Companion.HOME import com.woka.networking.ApiResult import com.woka.userdata.UserRepository +import com.woka.utils.TAG import kotlinx.coroutines.launch class HomeViewModel : ViewModel() { + companion object{ + private const val ERROR_RETRY_COUNT = 10 + } + var selectedBottomTab: Int = HOME var isHomeBackgroundBlurred: Boolean = false @@ -34,6 +41,7 @@ class HomeViewModel : ViewModel() { var playerReadyCallback: (() -> Unit)? = null var player: Player? = null + private var errorRetryCount = ERROR_RETRY_COUNT fun initPlayer(context: Context, liveUrl: String) { player = ExoPlayer.Builder(context).build() @@ -56,6 +64,25 @@ class HomeViewModel : ViewModel() { } } } + + override fun onIsPlayingChanged(isPlaying: Boolean) { + super.onIsPlayingChanged(isPlaying) + if (isPlaying){ + errorRetryCount = ERROR_RETRY_COUNT + } + } + + override fun onPlayerError(error: PlaybackException) { + super.onPlayerError(error) + Log.d(TAG, "onPlayerError: $errorRetryCount") + if (errorRetryCount > 0){ + errorRetryCount-- + + player?.setMediaItem(MediaItem.fromUri(liveUrl)) + player?.playWhenReady = true + player?.prepare() + } + } }) player?.setMediaItem(MediaItem.fromUri(liveUrl)) diff --git a/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt b/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt index 5a0fa00..1e2550e 100644 --- a/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt +++ b/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt @@ -113,8 +113,6 @@ class MoreHomeActivity : WokaBaseActivity() { blogBinding.close.setOnClickListener { blogDialog.dismiss() - - clickHelper.upsertClickEvent(ContentType.OTHERS) } } @@ -122,6 +120,8 @@ class MoreHomeActivity : WokaBaseActivity() { binding.apply { more.setOnClickListener { onBackPressedDispatcher.onBackPressed() + + clickHelper.upsertClickEvent(ContentType.OTHERS) } playTrailer.setOnClickListener { diff --git a/app/src/main/java/com/woka/karaoke/adapters/KaraokeAdapter.kt b/app/src/main/java/com/woka/karaoke/adapters/KaraokeAdapter.kt index 26978ea..f74a55c 100644 --- a/app/src/main/java/com/woka/karaoke/adapters/KaraokeAdapter.kt +++ b/app/src/main/java/com/woka/karaoke/adapters/KaraokeAdapter.kt @@ -9,6 +9,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ShowViewHolderBinding import com.woka.karaoke.KaraokeRepository import com.woka.karaoke.models.listing.KaraokeData @@ -126,6 +128,8 @@ class KaraokeAdapter( } karaokeData.id?.let{onKaraokeChanged(it, false, karaokeData)} + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } fav.isSelected = karaokeData.mark_as_favourite == true @@ -151,6 +155,8 @@ class KaraokeAdapter( fav.isSelected = karaokeData.mark_as_favourite == true karaokeData.id?.let{onKaraokeChanged(it, false, karaokeData)} + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } root.setOnClickListener { diff --git a/app/src/main/java/com/woka/karaoke/models/listing/ContentMoreDetail.kt b/app/src/main/java/com/woka/karaoke/models/listing/ContentMoreDetail.kt index 264ee53..6a81638 100644 --- a/app/src/main/java/com/woka/karaoke/models/listing/ContentMoreDetail.kt +++ b/app/src/main/java/com/woka/karaoke/models/listing/ContentMoreDetail.kt @@ -8,5 +8,6 @@ data class ContentMoreDetail( val post_type: Int?, val tags_keywords: String?, val title: String?, - val url: String? + val url: String?, + val video_url_hd: String? ) \ No newline at end of file diff --git a/app/src/main/java/com/woka/karaoke/player/KaraokePlayerActivity.kt b/app/src/main/java/com/woka/karaoke/player/KaraokePlayerActivity.kt index 2805fce..67f7871 100644 --- a/app/src/main/java/com/woka/karaoke/player/KaraokePlayerActivity.kt +++ b/app/src/main/java/com/woka/karaoke/player/KaraokePlayerActivity.kt @@ -31,6 +31,8 @@ import androidx.media3.common.Player import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityKaraokePlayerrBinding import com.woka.players.models.PlayBackState import com.woka.utils.TAG @@ -167,6 +169,8 @@ class KaraokePlayerActivity : WokaBaseActivity() { File(recordingOutputPath).deleteOnExit() File(karaokeFinalPath).deleteOnExit() File(karaokeMusicPath).deleteOnExit() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } private fun initViews() { @@ -188,6 +192,8 @@ class KaraokePlayerActivity : WokaBaseActivity() { binding.mainView.show() binding.errorView.hide() playVideo() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } closeBtn.setOnClickListener { @@ -196,12 +202,16 @@ class KaraokePlayerActivity : WokaBaseActivity() { recordBtn.setOnClickListener { startStopRecording() + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokePlayerData?.id) } audioBtn.setOnClickListener { if (audioBtn.isEnabled){ playStopPlayingAudio() } + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokePlayerData?.id) } downloadBtn.setOnClickListener { @@ -219,6 +229,8 @@ class KaraokePlayerActivity : WokaBaseActivity() { Log.d(TAG, "clickEvents: $e") toast(getString(R.string.something_went_wrong)) } + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokePlayerData?.id) } } } @@ -335,6 +347,8 @@ class KaraokePlayerActivity : WokaBaseActivity() { } else { PlayBackState.PAUSED } + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokePlayerData?.id) } override fun onPlayerError(error: PlaybackException) { diff --git a/app/src/main/java/com/woka/karaoke/player/KaraokePlayerData.kt b/app/src/main/java/com/woka/karaoke/player/KaraokePlayerData.kt index 523685c..43e5731 100644 --- a/app/src/main/java/com/woka/karaoke/player/KaraokePlayerData.kt +++ b/app/src/main/java/com/woka/karaoke/player/KaraokePlayerData.kt @@ -6,5 +6,6 @@ import kotlinx.parcelize.Parcelize @Parcelize data class KaraokePlayerData( val karaokeVideoUrl: String, - val title: String? + val title: String?, + val id: Int? ): Parcelable \ No newline at end of file diff --git a/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt b/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt index 169229d..87673e0 100644 --- a/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt +++ b/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt @@ -17,6 +17,8 @@ import androidx.recyclerview.widget.SimpleItemAnimator import com.google.android.material.appbar.CollapsingToolbarLayout import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityKaraokeBinding import com.woka.databinding.DialogModuleShowerBinding import com.woka.karaoke.KaraokeRepository @@ -34,6 +36,7 @@ import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import java.text.SimpleDateFormat @@ -75,9 +78,10 @@ class KaraokeActivity : WokaBaseActivity() { karaokeAdapter = KaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) { noSignInDialog.show() } - continueKaraokeAdapter = ContinueKaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) { - noSignInDialog.show() - } + continueKaraokeAdapter = + ContinueKaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) { + noSignInDialog.show() + } dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater) karaokeDialog = Dialog(this) @@ -98,6 +102,12 @@ class KaraokeActivity : WokaBaseActivity() { } } + override fun onDestroy() { + super.onDestroy() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { adjustTrailerImage() @@ -130,7 +140,13 @@ class KaraokeActivity : WokaBaseActivity() { // do nothing } - dialogBinding.close.setOnClickListener { karaokeDialog.dismiss() } + dialogBinding.close.setOnClickListener { + karaokeDialog.dismiss() + } + + karaokeDialog.setOnDismissListener { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } dialogBinding.watchCard.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_mic, 0, 0, 0) dialogBinding.watchCard.backgroundTintList = @@ -146,10 +162,14 @@ class KaraokeActivity : WokaBaseActivity() { retryBtn.setOnClickListener { viewModel.loadKaraokeSongs() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } loadMoreBtn.setOnClickListener { viewModel.loadKaraokeSongs() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -177,15 +197,33 @@ class KaraokeActivity : WokaBaseActivity() { trailerBtn.setOnClickListener { onSingClicked(karaokeData) + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, it.id) } } } private fun onSingClicked(karaokeData: KaraokeData) { - karaokeData.video_url?.let { - startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply { - putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title)) - }) + karaokeData.content_more_details?.let { moreDetailsList -> + if (moreDetailsList.isNotEmpty()){ + if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){ + moreDetailsList[1]?.let {data -> + data.video_url_hd?.let { + startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply { + putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id)) + }) + } + } + }else{ + moreDetailsList[0]?.let {data -> + data.video_url_hd?.let { + startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply { + putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id)) + }) + } + } + } + } } } @@ -258,17 +296,24 @@ class KaraokeActivity : WokaBaseActivity() { ) } + share.setOnClickListener { + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + shareWokaApp() + } + watchCard.setOnClickListener { onSingClicked(karaokeData) + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } like.setOnClickListener { - if (!isNetworkConnected()){ + if (!isNetworkConnected()) { toast(getString(R.string.no_internet)) return@setOnClickListener } - if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ + if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) { noSignInDialog.show() return@setOnClickListener } @@ -296,15 +341,17 @@ class KaraokeActivity : WokaBaseActivity() { } like.isSelected = !like.isSelected likeCount.text = "${karaokeData.likes_count}" + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } fav.setOnClickListener { - if (!isNetworkConnected()){ + if (!isNetworkConnected()) { toast(getString(R.string.no_internet)) return@setOnClickListener } - if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){ + if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) { noSignInDialog.show() return@setOnClickListener } @@ -322,10 +369,8 @@ class KaraokeActivity : WokaBaseActivity() { } fav.isSelected = !fav.isSelected - } - close.setOnClickListener { - karaokeDialog.dismiss() + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } karaokeDialog.show() @@ -366,6 +411,8 @@ class KaraokeActivity : WokaBaseActivity() { private fun onKaraokeClicked(karaokeData: KaraokeData) { loadTrailerData(karaokeData) showKaraokeDialog(karaokeData) + + ClicksHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } private fun setObservers() { diff --git a/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt b/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt index 4e57042..9e9b227 100644 --- a/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt +++ b/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt @@ -13,6 +13,8 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R import com.woka.WokaApp +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityBlogsBinding import com.woka.databinding.DialogBlogsBinding import com.woka.modules.blogs.BlogsGridAdapter @@ -54,6 +56,13 @@ class BlogsActivity : AppCompatActivity() { setObservers() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews(){ binding.apply { toolbar.title.text = getString(R.string.blogs) @@ -65,6 +74,8 @@ class BlogsActivity : AppCompatActivity() { binding.apply { retryBtn.setOnClickListener { BlogsRepository.loadBlogs() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } toolbar.backBtn.setOnClickListener { @@ -129,6 +140,8 @@ class BlogsActivity : AppCompatActivity() { } blogDialog.show() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } private fun setObservers(){ diff --git a/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt b/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt index 0b393b8..994b08a 100644 --- a/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt +++ b/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt @@ -5,6 +5,8 @@ import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityDisclaimerBinding import com.woka.utils.WokaBaseActivity @@ -27,4 +29,11 @@ class DisclaimerActivity : WokaBaseActivity() { onBackPressedDispatcher.onBackPressed() } } + + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt b/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt index 0e9858b..fdcda19 100644 --- a/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt +++ b/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt @@ -13,6 +13,8 @@ import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityWebViewBinding import com.woka.utils.WEBSITE_BASE_URL import com.woka.utils.WokaBaseActivity @@ -63,6 +65,13 @@ class WebViewActivity : WokaBaseActivity() { } } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + override fun onSupportNavigateUp(): Boolean { onBackPressedDispatcher.onBackPressed() return true diff --git a/app/src/main/java/com/woka/onboard/fragments/AgeSelectionFragment.kt b/app/src/main/java/com/woka/onboard/fragments/AgeSelectionFragment.kt index 29fc231..f73c9dc 100644 --- a/app/src/main/java/com/woka/onboard/fragments/AgeSelectionFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/AgeSelectionFragment.kt @@ -9,6 +9,8 @@ import android.view.WindowManager import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentAgeSelectBinding import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16 @@ -34,16 +36,22 @@ class AgeSelectionFragment : Fragment() { val args = Bundle() args.putBoolean(IS_UNDER_16, true) findNavController().navigate(R.id.action_age_select_fragment_to_getEmailFragment, args) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } binding.above16.setOnClickListener { val args = Bundle() args.putBoolean(IS_UNDER_16, false) findNavController().navigate(R.id.action_age_select_fragment_to_getEmailFragment, args) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } binding.backBtn.setOnClickListener{ activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/fragments/ChildListFragment.kt b/app/src/main/java/com/woka/onboard/fragments/ChildListFragment.kt index 3297660..9dda642 100644 --- a/app/src/main/java/com/woka/onboard/fragments/ChildListFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/ChildListFragment.kt @@ -8,6 +8,8 @@ import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentChildListBinding import com.woka.onboard.adapters.ChildAdapter import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG @@ -45,7 +47,11 @@ class ChildListFragment : Fragment() { private fun clickEvents() { binding.apply { - next.setOnClickListener { gotoSignUpFragment() } + next.setOnClickListener { + gotoSignUpFragment() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } } diff --git a/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt index 416a571..de06de0 100644 --- a/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt @@ -13,6 +13,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentGetCodeBinding import com.woka.networking.ApiResult import com.woka.networking.NoSuccessError @@ -291,6 +293,8 @@ class GetCodeFragment : Fragment() { binding.apply { backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } next.setOnClickListener { @@ -301,6 +305,8 @@ class GetCodeFragment : Fragment() { } else { viewModel.validateOTP(uniqueString, otp) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } resend.setOnClickListener { @@ -311,6 +317,8 @@ class GetCodeFragment : Fragment() { } else { viewModel.sendOTP(email, CHILD_TYPE) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt index 2173831..a89d466 100644 --- a/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt @@ -10,6 +10,8 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentGetEmailBinding import com.woka.networking.ApiResult import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG @@ -211,10 +213,14 @@ class GetEmailFragment : Fragment() { // child viewModel.sendOTP(binding.email.text.toString(), CHILD_TYPE) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } binding.backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt index e944862..7803804 100644 --- a/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt @@ -10,6 +10,8 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentGetMoreInfoBinding import com.woka.networking.ApiResult import com.woka.onboard.views.InterestTopicView @@ -67,6 +69,8 @@ class GetMoreInfoFragment : Fragment() { // topic select callback if (selected) viewModel.interestTopics.add(id) else viewModel.interestTopics.remove(id) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } ) } @@ -77,10 +81,22 @@ class GetMoreInfoFragment : Fragment() { private fun clickEvents() { binding.apply { - genderM.setOnClickListener { selectGender(Gender.MALE) } - genderF.setOnClickListener { selectGender(Gender.FEMALE) } + genderM.setOnClickListener { + selectGender(Gender.MALE) - backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() } + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + genderF.setOnClickListener { + selectGender(Gender.FEMALE) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + + backBtn.setOnClickListener { + activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } next.setOnClickListener { if (viewModel.selectedGender == Gender.NONE) { @@ -97,6 +113,8 @@ class GetMoreInfoFragment : Fragment() { { putBoolean(IS_UNDER_16, isUnder16) }) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/onboard/fragments/LanguageFragment.kt b/app/src/main/java/com/woka/onboard/fragments/LanguageFragment.kt index f8ce67b..a21c97d 100644 --- a/app/src/main/java/com/woka/onboard/fragments/LanguageFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/LanguageFragment.kt @@ -8,6 +8,9 @@ import android.view.View import android.view.ViewGroup import androidx.core.app.ActivityOptionsCompat import androidx.fragment.app.Fragment +import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentLanguageBinding import com.woka.onboard.views.OnboardActivity import com.woka.utils.LOCALE_ENGLISH @@ -30,7 +33,7 @@ class LanguageFragment : Fragment() { savedInstanceState: Bundle? ): View { binding = FragmentLanguageBinding.inflate(inflater, container, false) - progressView = ProgressView(requireContext(), "please wait...") + progressView = ProgressView(requireContext(), getString(R.string.please_wait)) return binding.root } @@ -43,11 +46,13 @@ class LanguageFragment : Fragment() { binding.english.setOnClickListener { requireActivity().changeLocale(LOCALE_ENGLISH) gotoOnboardActivity() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } binding.hindi.setOnClickListener { requireActivity().changeLocale(LOCALE_HINDI) gotoOnboardActivity() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } diff --git a/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt b/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt index bdfeaca..e490097 100644 --- a/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt @@ -9,6 +9,8 @@ import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentNewPasswordBinding import com.woka.networking.ApiResult import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG @@ -77,6 +79,8 @@ class NewPasswordFragment : Fragment() { binding.apply { backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } next.setOnClickListener { @@ -87,6 +91,8 @@ class NewPasswordFragment : Fragment() { } } } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 a2e130d..2979f7e 100644 --- a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt @@ -14,6 +14,8 @@ import androidx.navigation.fragment.findNavController import com.google.android.material.tabs.TabLayoutMediator import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentOnboardBinding import com.woka.home.views.HomeActivity import com.woka.networking.ApiResult @@ -105,18 +107,22 @@ class OnboardFragment : Fragment() { binding.apply { backBtn.setOnClickListener{ activity?.onBackPressedDispatcher?.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } createAccount.setOnClickListener { findNavController().navigate(R.id.action_onboardFragment_to_age_select_fragment) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } login.setOnClickListener { findNavController().navigate(R.id.action_onboardFragment_to_signInFragment) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } guest.setOnClickListener { viewModel.guestLogin() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 44658d8..0d3e3a0 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt @@ -10,6 +10,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentSelectAvatarBinding import com.woka.home.views.HomeActivity import com.woka.networking.ApiResult @@ -67,6 +69,8 @@ class SelectAvatarFragment : Fragment() { binding.apply { backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } next.setOnClickListener { @@ -93,6 +97,8 @@ class SelectAvatarFragment : Fragment() { } viewModel.registerUser(registerRequestData) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -115,6 +121,8 @@ class SelectAvatarFragment : Fragment() { it.data?.result?.let { avatarList -> adapter = AvatarAdapter(avatarList, viewModel.selectedAvatarPos) { pos -> viewModel.selectedAvatarPos = pos + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } binding.rvAvatar.adapter = adapter } 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 07e5142..b76203c 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt @@ -12,6 +12,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentSignInBinding import com.woka.home.views.HomeActivity import com.woka.networking.ApiResult @@ -185,10 +187,13 @@ class SignInFragment : Fragment() { Bundle().apply { putBoolean(IS_RESET_PASSWORD_INTENT, true) }) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } continueAsGuest.setOnClickListener { @@ -201,10 +206,13 @@ class SignInFragment : Fragment() { }) activity?.finish() } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } createAccount.setOnClickListener { findNavController().navigate(R.id.action_signInFragment_to_age_select_fragment) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } login.setOnClickListener { @@ -221,6 +229,8 @@ class SignInFragment : Fragment() { viewModel.login(username.text.toString(), password.toString()) }?:toast(getString(R.string.something_went_wrong)) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt index 23aff7e..a97d6bc 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt @@ -11,6 +11,8 @@ import android.widget.Toast import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentSignUpBinding import com.woka.networking.ApiResult import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG @@ -141,6 +143,8 @@ class SignUpFragment : Fragment() { binding.apply { backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } next.setOnClickListener { @@ -150,6 +154,8 @@ class SignUpFragment : Fragment() { viewModel.checkUserNameExist(it, username.text.toString(), userType) } ?: toast(getString(R.string.something_went_wrong)) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/onboard/models/Guest.kt b/app/src/main/java/com/woka/onboard/models/Guest.kt index b98199c..2ebe6b8 100644 --- a/app/src/main/java/com/woka/onboard/models/Guest.kt +++ b/app/src/main/java/com/woka/onboard/models/Guest.kt @@ -2,5 +2,6 @@ package com.woka.onboard.models data class Guest( val fullname: String?, - val username: String? + val username: String?, + val new_guest: Boolean? ) \ No newline at end of file diff --git a/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt b/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt index acd55f8..edba067 100644 --- a/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt +++ b/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt @@ -5,7 +5,7 @@ import kotlinx.parcelize.Parcelize @Parcelize data class VideoViewRequestData( - val post_id: String, + val post_id: Int?, val post_type: String, var total_watched_duration: String? = null, val category_id: String? = null diff --git a/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt b/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt index 7004449..ea9a161 100644 --- a/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt +++ b/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt @@ -30,6 +30,8 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler { companion object{ const val EXTRA_LIVE_STREAM_URL = "extra_live_stream_url" const val EXTRA_LIVE_STREAM_ID = "extra_live_stream_id" + + private const val ERROR_RETRY_COUNT = 10 } private lateinit var binding: ActivityLiveStreamPlayerBinding @@ -47,6 +49,8 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler { private var liveStreamUrl: String = "" private var liveTvId: Int = -1 + private var errorRetryCount = ERROR_RETRY_COUNT + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -125,6 +129,8 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler { binding.errorView.hide() upsertClickEvent() + + errorRetryCount = ERROR_RETRY_COUNT }) player.addListener(EventType.PAUSE, VideoPlayerEvents.OnPauseListener { playbackState = PlayBackState.PAUSED @@ -133,8 +139,13 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler { }) player.addListener(EventType.ERROR, VideoPlayerEvents.OnErrorListener { playbackState = PlayBackState.STOPPED - binding.playerView.hide() - binding.errorView.show() + if (errorRetryCount > 0){ + errorRetryCount-- + configureAndPlay() + }else{ + binding.playerView.hide() + binding.errorView.show() + } }) (getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager).registerNetworkCallback( diff --git a/app/src/main/java/com/woka/shop/adapters/ParentAddressAdapter.kt b/app/src/main/java/com/woka/shop/adapters/ParentAddressAdapter.kt index 954950b..4467e1f 100644 --- a/app/src/main/java/com/woka/shop/adapters/ParentAddressAdapter.kt +++ b/app/src/main/java/com/woka/shop/adapters/ParentAddressAdapter.kt @@ -8,6 +8,8 @@ import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.CartAddressViewHolderBinding import com.woka.shop.models.addresslisting.ParentAddressData import com.woka.shop.viewmodels.CartViewModel @@ -124,6 +126,8 @@ class ParentAddressAdapter(private val viewModel: CartViewModel) : addressSelectListener?.invoke(address.id) holder.loadEDD(address) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/AddressActivity.kt b/app/src/main/java/com/woka/shop/views/AddressActivity.kt index bd2c19d..863b6e1 100644 --- a/app/src/main/java/com/woka/shop/views/AddressActivity.kt +++ b/app/src/main/java/com/woka/shop/views/AddressActivity.kt @@ -5,6 +5,8 @@ import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityAddressBinding import com.woka.utils.WokaBaseActivity @@ -32,6 +34,13 @@ class AddressActivity : WokaBaseActivity() { clickEvents() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { toolbar.title.text = getString(R.string.address_details) diff --git a/app/src/main/java/com/woka/shop/views/CartActivity.kt b/app/src/main/java/com/woka/shop/views/CartActivity.kt index 0654d77..49e1720 100644 --- a/app/src/main/java/com/woka/shop/views/CartActivity.kt +++ b/app/src/main/java/com/woka/shop/views/CartActivity.kt @@ -1,10 +1,13 @@ package com.woka.shop.views import android.os.Bundle +import android.window.OnBackInvokedDispatcher import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.ViewModelProvider +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityCartBinding import com.woka.shop.viewmodels.CartViewModel import com.woka.utils.WokaBaseActivity @@ -36,6 +39,12 @@ class CartActivity : WokaBaseActivity() { setObservers() } + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun clickEvents() { binding.apply { toolbar.backBtn.setOnClickListener { diff --git a/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt b/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt index f41092d..b1ac3c7 100644 --- a/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt +++ b/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt @@ -2,6 +2,7 @@ package com.woka.shop.views import android.content.Intent import android.os.Bundle +import android.window.OnBackInvokedDispatcher import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat @@ -10,6 +11,8 @@ import androidx.lifecycle.lifecycleScope import com.google.android.material.bottomsheet.BottomSheetDialog import com.woka.R import com.woka.WokaApp +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityMyOrdersBinding import com.woka.databinding.BsOrderTrackingBinding import com.woka.networking.ApiResult @@ -78,6 +81,13 @@ class MyOrdersActivity : WokaBaseActivity() { } } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews(){ binding.apply { rvOrders.adapter = adapter @@ -97,14 +107,20 @@ class MyOrdersActivity : WokaBaseActivity() { }else{ startActivity(Intent(this@MyOrdersActivity, CartActivity::class.java)) } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } loadMoreBtn.setOnClickListener { viewModel.loadOrders() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } adapter.orderTrackClickListener = { showOrderTrackingDialog(it) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/ShopActivity.kt b/app/src/main/java/com/woka/shop/views/ShopActivity.kt index 9197c7b..d94f285 100644 --- a/app/src/main/java/com/woka/shop/views/ShopActivity.kt +++ b/app/src/main/java/com/woka/shop/views/ShopActivity.kt @@ -2,6 +2,7 @@ package com.woka.shop.views import android.content.Intent import android.os.Bundle +import android.window.OnBackInvokedDispatcher import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts @@ -10,6 +11,8 @@ import androidx.core.view.WindowInsetsCompat import androidx.lifecycle.ViewModelProvider import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityShopBinding import com.woka.shop.viewmodels.ShopViewModel import com.woka.shop.views.CartActivity.Companion.EXTRA_CURRENT_PRODUCT @@ -54,6 +57,13 @@ class ShopActivity : WokaBaseActivity() { registerLaunchers() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { title.text = getString(R.string.shop) @@ -74,6 +84,8 @@ class ShopActivity : WokaBaseActivity() { putExtra(EXTRA_CURRENT_PRODUCT, viewModel.currentProductId) }) } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/address/AddAddressFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/address/AddAddressFragment.kt index 1863db3..374839d 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/address/AddAddressFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/address/AddAddressFragment.kt @@ -11,6 +11,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.navArgs import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentAddAddressBinding import com.woka.networking.ApiResult import com.woka.shop.models.addaddress.AddAddressRequestData @@ -62,6 +64,8 @@ class AddAddressFragment : Fragment() { if (allOkay()){ addAddress() } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/address/PinCodeFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/address/PinCodeFragment.kt index b0ecf7d..db3d306 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/address/PinCodeFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/address/PinCodeFragment.kt @@ -10,6 +10,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentPinCodeBinding import com.woka.networking.ApiResult import com.woka.shop.viewmodels.AddressViewModel @@ -46,6 +48,8 @@ class PinCodeFragment :Fragment() { private fun clickEvents() { binding.apply { btn.setOnClickListener { + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) + if (selectedPinCode.length == 6){ findNavController().navigate(PinCodeFragmentDirections.actionPinCodeFragmentToAddAddressFragment( diff --git a/app/src/main/java/com/woka/shop/views/fragments/cart/CartFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/cart/CartFragment.kt index 806eda8..96c3232 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/cart/CartFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/cart/CartFragment.kt @@ -13,6 +13,8 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentCartBinding import com.woka.networking.ApiResult import com.woka.shop.adapters.CartAdapter @@ -80,44 +82,52 @@ class CartFragment: Fragment() { binding.apply { adapter.onCartItemDeleteListener = {cartItem, position -> - lifecycleScope.launch { - progressDialog.show(getString(R.string.removing_item)) + decisionDialog.setPositiveButton(getString(R.string.yes)){ + lifecycleScope.launch { + progressDialog.show(getString(R.string.removing_item)) - cartItem.id?.let { - when (val response = viewModel.removeItem(it)){ - is ApiResult.Error -> { - progressDialog.hide() - toast(response.errorMessage) - } - is ApiResult.Loading -> {} - is ApiResult.Success -> { - progressDialog.hide() - toast(response.message) + cartItem.id?.let { + when (val response = viewModel.removeItem(it)){ + is ApiResult.Error -> { + progressDialog.hide() + toast(response.errorMessage) + } + is ApiResult.Loading -> {} + is ApiResult.Success -> { + progressDialog.hide() + toast(response.message) - try { - adapter.notifyItemRemoved(position) - } finally { - response.data?.let {cartValue -> - if (cartValue > 0){ - val finalAmount = "₹ $cartValue" - totalAmount.text = finalAmount - }else{ - rvCart.hide() - progressView.hide() - checkoutView.hide() + try { + adapter.notifyItemRemoved(position) + } finally { + response.data?.let {cartValue -> + if (cartValue > 0){ + val finalAmount = "₹ $cartValue" + totalAmount.text = finalAmount + }else{ + rvCart.hide() + progressView.hide() + checkoutView.hide() - noDataView.show() + noDataView.show() + } } } - } - if (cartItem.id == currentProductId){ - activity?.setResult(AppCompatActivity.RESULT_OK, Intent()) + if (cartItem.id == currentProductId){ + activity?.setResult(AppCompatActivity.RESULT_OK, Intent()) + } } } } } } + decisionDialog.setNegativeButton(getString(R.string.no)) + + decisionDialog.show(getString(R.string.alert), + getString(R.string.are_you_sure_you_want_to_remove_item_from_cart)) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, cartItem.id) } binding.checkout.setOnClickListener { @@ -129,6 +139,8 @@ class CartFragment: Fragment() { viewModel.clearAppliedCoupon() findNavController().navigate(R.id.action_cartFragment_to_orderSummaryFragment) } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/cart/OrderSummaryFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/cart/OrderSummaryFragment.kt index 3da70f8..8ef7983 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/cart/OrderSummaryFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/cart/OrderSummaryFragment.kt @@ -10,6 +10,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentOrderSummaryBinding import com.woka.networking.ApiResult import com.woka.shop.adapters.CouponAdapter @@ -81,6 +83,8 @@ class OrderSummaryFragment : Fragment() { couponsView.show() showCouponIndicator.setImageResource(R.drawable.ic_half_arrow_up) } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } applyBtn.setOnClickListener { @@ -95,11 +99,15 @@ class OrderSummaryFragment : Fragment() { } viewModel.applyCoupon(couponCode.text.toString(), "$cartTotalAmount") + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } confirm.setOnClickListener { viewModel.clearAddressSelection() findNavController().navigate(R.id.action_orderSummaryFragment_to_parentAddressFragment) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } @@ -133,6 +141,8 @@ class OrderSummaryFragment : Fragment() { binding.couponCode.setText(it.coupon_code) viewModel.selectedCouponCode = it.coupon_code viewModel.selectedCouponId = it.id + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } viewModel.applyCouponLiveData.observe(viewLifecycleOwner) { diff --git a/app/src/main/java/com/woka/shop/views/fragments/cart/ParentAddressFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/cart/ParentAddressFragment.kt index e616ee9..aca7e3e 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/cart/ParentAddressFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/cart/ParentAddressFragment.kt @@ -11,6 +11,8 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentParentAddressBinding import com.woka.networking.ApiResult import com.woka.shop.adapters.ParentAddressAdapter @@ -89,6 +91,8 @@ class ParentAddressFragment : Fragment() { } viewModel.createOrder(productIds, viewModel.appliedCoupon, "${viewModel.selectedAddressId}") + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } addNewAddress.setOnClickListener { @@ -100,6 +104,8 @@ class ParentAddressFragment : Fragment() { ) ) } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/shop/ProductFragment.kt b/app/src/main/java/com/woka/shop/views/fragments/shop/ProductFragment.kt index 3cc171b..e781e2c 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/shop/ProductFragment.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/shop/ProductFragment.kt @@ -12,6 +12,8 @@ import androidx.navigation.fragment.navArgs import com.google.android.material.tabs.TabLayoutMediator import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentProductBinding import com.woka.networking.ApiResult import com.woka.shop.adapters.ProductImagesAdapter @@ -87,6 +89,8 @@ class ProductFragment : Fragment() { binding.apply { retryBtn.setOnClickListener { loadProductData() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -196,6 +200,8 @@ class ProductFragment : Fragment() { } } } + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, shopProduct.id) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment1.kt b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment1.kt index ddf11ad..4f57582 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment1.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment1.kt @@ -8,6 +8,8 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentShop1Binding import com.woka.networking.ApiResult import com.woka.shop.adapters.CategoryAdapter @@ -61,10 +63,13 @@ class ShopFragment1 : Fragment() { binding.apply { retryButton.setOnClickListener { viewModel.loadSuperCategories() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } adapter.onCategoryClickListener = {id, _ -> findNavController().navigate(ShopFragment1Directions.actionShopFragment1ToShopFragment2(id)) + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, id) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment2.kt b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment2.kt index 85b8c73..6d13b61 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment2.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment2.kt @@ -9,6 +9,8 @@ import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentShop2Binding import com.woka.networking.ApiResult import com.woka.shop.adapters.CategoryAdapter @@ -68,6 +70,8 @@ class ShopFragment2 : Fragment() { binding.apply { retryButton.setOnClickListener { viewModel.loadCategories(superCategoryId) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } adapter.onCategoryClickListener = {id, title -> @@ -78,6 +82,8 @@ class ShopFragment2 : Fragment() { title ) ) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, id) } } } diff --git a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment3.kt b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment3.kt index 58941b8..80e0e29 100644 --- a/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment3.kt +++ b/app/src/main/java/com/woka/shop/views/fragments/shop/ShopFragment3.kt @@ -10,6 +10,8 @@ import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import com.google.android.material.tabs.TabLayout import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.FragmentShop3Binding import com.woka.networking.ApiResult import com.woka.shop.adapters.ShopProductAdapter @@ -75,16 +77,22 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener { binding.apply { retryButton.setOnClickListener { viewModel.loadSubCategories(superCategoryId, categoryId) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } prodLoadMoreBtn.setOnClickListener { loadMoreProducts = true val subCategoryId = categoryTabs.getTabAt(categoryTabs.selectedTabPosition)?.tag?.toString() viewModel.loadMoreProducts(superCategoryId, categoryId, subCategoryId) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } productAdapter.onProductClicked = { findNavController().navigate(ShopFragment3Directions.actionShopFragment3ToProductFragment(it)) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, it) } } } @@ -96,6 +104,8 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener { if (selectedTabPos < subCategories.size) { loadMoreProducts = false viewModel.loadProducts(superCategoryId, categoryId, subCategories[selectedTabPos].id?.toString()) + + ClicksHelper.upsertClickEvent(ContentType.SHOP_PRODUCT, subCategories[selectedTabPos].id) } } } diff --git a/app/src/main/java/com/woka/utils/Constants.kt b/app/src/main/java/com/woka/utils/Constants.kt index 3526bdd..d866c39 100644 --- a/app/src/main/java/com/woka/utils/Constants.kt +++ b/app/src/main/java/com/woka/utils/Constants.kt @@ -16,4 +16,8 @@ const val LOCALE_ENGLISH = "en" // website urls const val WEBSITE_BASE_URL = "https://www.wokaland.com/" const val TERMS_N_CONDITIONS_URL = "https://www.wokaland.com/terms/" -const val PRIVACY_N_POLICY_URL = "https://www.wokaland.com/privacy-policy/" \ No newline at end of file +const val PRIVACY_N_POLICY_URL = "https://www.wokaland.com/privacy-policy/" + +// other urls + +const val PLAY_STORE_URL = "https://play.google.com/store/apps/details?id=com.woka" \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/Extensions.kt b/app/src/main/java/com/woka/utils/Extensions.kt index 1aacc6b..c227bb1 100644 --- a/app/src/main/java/com/woka/utils/Extensions.kt +++ b/app/src/main/java/com/woka/utils/Extensions.kt @@ -4,6 +4,7 @@ import android.animation.AnimatorSet import android.animation.ObjectAnimator import android.app.Activity import android.content.Context +import android.content.Intent import android.content.res.Configuration import android.net.ConnectivityManager import android.net.NetworkCapabilities @@ -79,6 +80,17 @@ fun Activity.closeKeyboard(){ } } +fun Activity.shareWokaApp(){ + val sendIntent: Intent = Intent().apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_TEXT, PLAY_STORE_URL) + type = "text/plain" + } + + val shareIntent = Intent.createChooser(sendIntent, null) + startActivity(shareIntent) +} + fun Context.toast(text: String?, length: Int = Toast.LENGTH_SHORT){ Toast.makeText(this, "$text", length).show() } 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 578add1..ad1ab72 100644 --- a/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/EpisodeAdapter.kt @@ -36,7 +36,7 @@ class EpisodeAdapter private constructor(val context: Context, constructor(context: Context): this(context, DIFF_CONFIG) var onEpisodeClicked: ((position: Int, episodeData: EpisodeData) -> Unit)? = null - var onEpisodePlayClicked: ((position: Int) -> Unit)? = null + var onEpisodePlayClicked: ((position: Int, EpisodeData) -> Unit)? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EpisodeViewHolder { return EpisodeViewHolder( @@ -71,7 +71,7 @@ class EpisodeAdapter private constructor(val context: Context, } playBtn.setOnClickListener { - onEpisodePlayClicked?.invoke(holder.absoluteAdapterPosition) + onEpisodePlayClicked?.invoke(holder.absoluteAdapterPosition, episode) } card.setOnClickListener { 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 d3deb42..3e499af 100644 --- a/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/TeaserAdapter.kt @@ -35,7 +35,7 @@ class TeaserAdapter private constructor(val context: Context, constructor(context: Context): this(context, DIFF_CONFIG) var onEpisodeClicked: ((position: Int, teaserData: TeaserData) -> Unit)? = null - var onEpisodePlayClicked: ((position: Int) -> Unit)? = null + var onEpisodePlayClicked: ((position: Int, TeaserData) -> Unit)? = null override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EpisodeViewHolder { return EpisodeViewHolder( @@ -70,7 +70,7 @@ class TeaserAdapter private constructor(val context: Context, } playBtn.setOnClickListener { - onEpisodePlayClicked?.invoke(holder.absoluteAdapterPosition) + onEpisodePlayClicked?.invoke(holder.absoluteAdapterPosition, episode) } card.setOnClickListener { diff --git a/app/src/main/java/com/woka/webseries/adapters/WebSeriesShowAdapter.kt b/app/src/main/java/com/woka/webseries/adapters/WebSeriesShowAdapter.kt index b4634a6..1b3f124 100644 --- a/app/src/main/java/com/woka/webseries/adapters/WebSeriesShowAdapter.kt +++ b/app/src/main/java/com/woka/webseries/adapters/WebSeriesShowAdapter.kt @@ -8,6 +8,8 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ShowViewHolderBinding import com.woka.userPreference.UserType import com.woka.utils.isNetworkConnected @@ -115,6 +117,8 @@ class WebSeriesShowAdapter( categoryId?.let { onShowCommonDataChange?.invoke(showData, it) } + + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } categoryId?.let { fav.isSelected = showData.isBookMarked(it) } @@ -147,6 +151,8 @@ class WebSeriesShowAdapter( fav.isSelected = !fav.isSelected } + + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } root.setOnClickListener { 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 cb2dc39..648d6a6 100644 --- a/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt +++ b/app/src/main/java/com/woka/webseries/views/WebSeriesActivity.kt @@ -7,6 +7,8 @@ import androidx.core.view.WindowInsetsCompat import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment import com.woka.R +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityWebSeriesBinding import com.woka.utils.WokaBaseActivity import com.woka.webseries.models.ShowData @@ -45,4 +47,11 @@ class WebSeriesActivity : WokaBaseActivity() { ), NavOptions.Builder().setPopUpTo(R.id.webSeriesFragment2, true).build()) } } + + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/views/fragments/WebSeriesFragment.kt b/app/src/main/java/com/woka/webseries/views/fragments/WebSeriesFragment.kt index 8f75d75..6c169fc 100644 --- a/app/src/main/java/com/woka/webseries/views/fragments/WebSeriesFragment.kt +++ b/app/src/main/java/com/woka/webseries/views/fragments/WebSeriesFragment.kt @@ -21,6 +21,8 @@ import com.google.android.material.appbar.CollapsingToolbarLayout import com.jwplayer.pub.api.media.playlists.PlaylistItem import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.DialogContinueEpisodeBinding import com.woka.databinding.FragmentWebSeriesBinding import com.woka.networking.ApiResult @@ -111,6 +113,8 @@ class WebSeriesFragment : Fragment() { binding.errorView.hide() viewModel.loadCategories() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } loadMoreBtn.setOnClickListener { @@ -118,6 +122,8 @@ class WebSeriesFragment : Fragment() { loadingMore = true viewModel.loadMoreWebSeries(it) } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } trailerBtn.setOnClickListener { @@ -140,6 +146,8 @@ class WebSeriesFragment : Fragment() { ) putExtra(EXTRA_PLAY_INDEX, 0) }) + + ClicksHelper.upsertClickEvent(ContentType.TEASER) } } } @@ -203,6 +211,10 @@ class WebSeriesFragment : Fragment() { } episodeDialogBinding.close.setOnClickListener { episodeDialog.dismiss() } + + episodeDialog.setOnDismissListener { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } private fun loadShowData() { @@ -334,6 +346,7 @@ class WebSeriesFragment : Fragment() { } viewModel.selectedCategoryPos = position + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } override fun onNothingSelected(parent: AdapterView<*>?) {} @@ -350,6 +363,8 @@ class WebSeriesFragment : Fragment() { showData, categoryId ) ) + + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } // updating common data of shows across all category show list @@ -429,12 +444,14 @@ class WebSeriesFragment : Fragment() { videoPlayList.videoViewRequestDataList?.add( VideoViewRequestData( - "${episodeData.id}", + episodeData.id, "3", null, category_id = "18" ) ) + + ClicksHelper.upsertClickEvent(ContentType.EPISODE, episodeData.id, "18") } else { videoPlayList.playlist.add( PlaylistItem.Builder() @@ -446,12 +463,14 @@ class WebSeriesFragment : Fragment() { videoPlayList.videoViewRequestDataList?.add( VideoViewRequestData( - "${episodeData.id}", + episodeData.id, "3", null, "1" ) ) + + ClicksHelper.upsertClickEvent(ContentType.EPISODE, episodeData.id, "1") } } @@ -463,10 +482,6 @@ class WebSeriesFragment : Fragment() { } } - close.setOnClickListener { - episodeDialog.dismiss() - } - episodeDialog.show() } } diff --git a/app/src/main/java/com/woka/webseries/views/fragments/WebShowFragment.kt b/app/src/main/java/com/woka/webseries/views/fragments/WebShowFragment.kt index 1426eaa..786df40 100644 --- a/app/src/main/java/com/woka/webseries/views/fragments/WebShowFragment.kt +++ b/app/src/main/java/com/woka/webseries/views/fragments/WebShowFragment.kt @@ -21,6 +21,8 @@ import com.google.android.material.tabs.TabLayout import com.jwplayer.pub.api.media.playlists.PlaylistItem import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.DialogEpisodeBinding import com.woka.databinding.FragmentWebShowBinding import com.woka.networking.ApiResult @@ -32,6 +34,7 @@ import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.lightStatusBar import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import com.woka.webseries.WebSeriesRepository @@ -161,11 +164,20 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { watchCard.setOnClickListener { playTrailer.performClick() + + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) + } + + shareSeason.setOnClickListener { + activity?.shareWokaApp() + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } epLoadMoreBtn.setOnClickListener { loadMoreEpisodes = true viewModel.loadMoreEpisodes("${showData.id}", selectedSeasonId) + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } likeSeason.setOnClickListener { @@ -202,6 +214,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { }) showDataChanged = true + + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } favSeason.setOnClickListener { @@ -239,6 +253,7 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { }) showDataChanged = true + ClicksHelper.upsertClickEvent(ContentType.SERIES, showData.id, categoryId) } playTrailer.setOnClickListener { @@ -283,6 +298,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } } } + + ClicksHelper.upsertClickEvent(ContentType.SEASON, seasonData.id, categoryId) } } } @@ -314,6 +331,10 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } episodeDialogBinding.close.setOnClickListener { episodeDialog.dismiss() } + + episodeDialog.setOnDismissListener { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } } // callbacks @@ -473,7 +494,7 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } watchCard.setOnClickListener { - onEpisodePlayClicked(position) + onEpisodePlayClicked(position, episodeData) } close.setOnClickListener { @@ -483,9 +504,11 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { episodeDialog.show() } } + + ClicksHelper.upsertClickEvent(ContentType.EPISODE, episodeData.id, categoryId) } - private fun onEpisodePlayClicked(position: Int) { + private fun onEpisodePlayClicked(position: Int, episodeData: EpisodeData) { activity?.let { startActivity(Intent(it, PlayerActivity::class.java).apply { putExtra( @@ -494,6 +517,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, position) }) + + ClicksHelper.upsertClickEvent(ContentType.EPISODE, episodeData.id, categoryId) } } @@ -550,7 +575,7 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } watchCard.setOnClickListener { - onTeaserPlayClicked(position) + onTeaserPlayClicked(position, teaserData) } close.setOnClickListener { @@ -560,6 +585,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { episodeDialog.show() } } + + ClicksHelper.upsertClickEvent(ContentType.TEASER, teaserData.id, categoryId) } private fun loadSeasonData() { @@ -570,6 +597,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { if (seasonsTab.selectedTabPosition < seasonList.size) { seasonList[seasonsTab.selectedTabPosition].let { seasonData -> + ClicksHelper.upsertClickEvent(ContentType.SEASON, seasonData.id, categoryId) + playTrailer.show() detailsProgressiveView.hide() detailsView.show() @@ -626,7 +655,7 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } } - private fun onTeaserPlayClicked(position: Int) { + private fun onTeaserPlayClicked(position: Int, teaserData: TeaserData) { activity?.let { startActivity(Intent(it, PlayerActivity::class.java).apply { putExtra( @@ -635,6 +664,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, position) }) + + ClicksHelper.upsertClickEvent(ContentType.TEASER, teaserData.id, categoryId) } } diff --git a/app/src/main/java/com/woka/wokagames/adapters/GamesAdapter.kt b/app/src/main/java/com/woka/wokagames/adapters/GamesAdapter.kt index 50ffe3b..c2262d6 100644 --- a/app/src/main/java/com/woka/wokagames/adapters/GamesAdapter.kt +++ b/app/src/main/java/com/woka/wokagames/adapters/GamesAdapter.kt @@ -9,6 +9,8 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ShowViewHolderBinding import com.woka.userPreference.UserType import com.woka.utils.isNetworkConnected @@ -120,6 +122,8 @@ class GamesAdapter( like.isSelected = !like.isSelected likeCount.text = "${gameData.likes_count}" + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } fav.isSelected = gameData.mark_as_favourite == true @@ -143,6 +147,8 @@ class GamesAdapter( gameData.mark_as_favourite = !fav.isSelected fav.isSelected = gameData.mark_as_favourite == true + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } root.setOnClickListener { diff --git a/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt b/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt index e9bcdfe..49cd176 100644 --- a/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt +++ b/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt @@ -17,6 +17,8 @@ import androidx.recyclerview.widget.SimpleItemAnimator import com.google.android.material.appbar.CollapsingToolbarLayout import com.woka.R import com.woka.WokaApp.Companion.userPrefs +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityGamesBinding import com.woka.databinding.DialogModuleShowerBinding import com.woka.networking.ApiResult @@ -26,6 +28,7 @@ import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.isNetworkConnected import com.woka.utils.setVisibility +import com.woka.utils.shareWokaApp import com.woka.utils.show import com.woka.utils.toast import com.woka.wokagames.GamesRepository @@ -92,6 +95,11 @@ class GamesActivity : WokaBaseActivity() { } } + override fun onDestroy() { + super.onDestroy() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews() { binding.apply { adjustTrailerImage() @@ -123,6 +131,10 @@ class GamesActivity : WokaBaseActivity() { dialogBinding.close.setOnClickListener { gameDialog.dismiss() } + gameDialog.setOnDismissListener { + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + dialogBinding.watchCard.backgroundTintList = ColorStateList.valueOf(getColor(R.color.game_grad_one)) dialogBinding.watchCard.text = getString(R.string.play_now) } @@ -135,10 +147,14 @@ class GamesActivity : WokaBaseActivity() { retryBtn.setOnClickListener { viewModel.loadGames() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } loadMoreBtn.setOnClickListener { viewModel.loadGames() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -146,6 +162,8 @@ class GamesActivity : WokaBaseActivity() { private fun onGameClicked(gameData: GameData) { loadTrailerData(gameData) showGameDialog(gameData) + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } private fun loadTrailerData(gameData: GameData) { @@ -175,6 +193,8 @@ class GamesActivity : WokaBaseActivity() { putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(it, gameData.screen_orientation == "Landscape")) }) } + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } } } @@ -254,6 +274,13 @@ class GamesActivity : WokaBaseActivity() { putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(it, gameData.screen_orientation == "Landscape")) }) } + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) + } + + dialogBinding.share.setOnClickListener { + shareWokaApp() + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } like.setOnClickListener { @@ -289,6 +316,8 @@ class GamesActivity : WokaBaseActivity() { } like.isSelected = !like.isSelected likeCount.text = "${gameData.likes_count}" + + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } fav.setOnClickListener { @@ -314,10 +343,8 @@ class GamesActivity : WokaBaseActivity() { } fav.isSelected = !fav.isSelected - } - close.setOnClickListener { - gameDialog.dismiss() + ClicksHelper.upsertClickEvent(ContentType.GAME, gameData.id) } gameDialog.show() diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 44fe464..05b42ef 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -58,7 +58,7 @@ पासवर्ड भूल गए? अपना पासवर्ड भूल गए? कृपया हमें अपना उपयोगकर्ता नाम दें - हम आपके माता-पिता के ईमेल पर एक रीसेट कोड भेजेंगे + हम आपके ईमेल पर एक रीसेट कोड भेजेंगे अपना पासवर्ड रीसेट करने के लिए उनसे कोड के लिए अनुरोध करें नया पासवर्ड चुनें नया पासवर्ड दर्ज करें diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc63afa..fc90af9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -60,7 +60,7 @@ Forgot Password? Forgot your Password? PLEASE GIVE US YOUR USERNAME - We will send a reset code to your parent’s email + We will send a reset code to your email Request them for the code to reset your password Great! Select New Password Enter a new password @@ -297,4 +297,6 @@ Status: Expected Date: VIEW ALL + Alert! + Are you sure you want to remove item from cart? \ No newline at end of file