From 0521ee8415283e8a75b05cb38a1c9edec302c956 Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Tue, 13 Aug 2024 21:06:45 +0530 Subject: [PATCH] Making gender not required and sending 0 as default gender for registering user. implemented GamePlayerActivity clicks onn webview. Implemented clicks events for common PlayerActivity.kt Implemented clicks for mylist and view all fragments of all modules. Integrated Firebase analytics. Tested by enabling debugger view. Integrated Firebase performance monitoring. Integrated Onesignal, initiated and tested. Sent onesignal id to backend from endpoints: guest_login, login, login_proceed and guest_login. Integrated v2/favorite_listing api with new data structure of show_data with split data for english and hindi category. Made the changes according at all places in mylist module. Started implementing flow for item being from fav view all activity for web shows: 1. reloading the whole list by resetting the pagination. 2. removing locally when user has loaded all the data already. --- app/build.gradle | 8 + app/google-services.json | 30 ++++ app/src/main/AndroidManifest.xml | 6 +- app/src/main/java/com/woka/WokaApp.kt | 23 ++- .../audiobooks/views/AudioBooksActivity.kt | 14 +- .../java/com/woka/database/dao/ClicksDao.kt | 11 +- .../com/woka/database/helpers/ClicksHelper.kt | 4 +- .../com/woka/home/fragments/Home2Fragment.kt | 6 +- .../com/woka/home/fragments/MyListFragment.kt | 158 +++++++++++------- .../com/woka/home/mylist/MyListRepository.kt | 20 ++- .../com/woka/home/mylist/models/Result.kt | 2 +- .../home/mylist/models/ShowDataResponse.kt | 6 + .../home/mylist/view/FavoritesActivity.kt | 9 + .../mylist/view/fragments/FavAudioFragment.kt | 42 +++-- .../mylist/view/fragments/FavGameFragment.kt | 9 +- .../view/fragments/FavKaraokeFragment.kt | 15 +- .../view/fragments/FavSeriesFragment.kt | 36 +++- .../mylist/viewmodel/FavoriteViewModel.kt | 46 +++-- .../home/sidebar/aboutwoka/AboutActivity.kt | 1 + .../com/woka/home/sidebar/faqs/FaqActivity.kt | 1 + .../com/woka/home/sidebar/faqs/FaqsAdapter.kt | 3 + .../sidebar/profile/UserProfileActivity.kt | 1 + .../home/sidebar/support/SupportActivity.kt | 1 + .../java/com/woka/home/views/HomeActivity.kt | 2 + .../com/woka/home/views/MoreHomeActivity.kt | 8 +- .../com/woka/karaoke/views/KaraokeActivity.kt | 8 +- .../modules/disclaimer/DisclaimerActivity.kt | 1 + .../woka/modules/webview/WebViewActivity.kt | 1 + .../onboard/fragments/GetMoreInfoFragment.kt | 4 - .../woka/onboard/fragments/OnboardFragment.kt | 11 +- .../onboard/fragments/SelectAvatarFragment.kt | 17 +- .../woka/onboard/fragments/SignInFragment.kt | 15 +- .../onboard/models/RegisterRequestData.kt | 3 +- .../woka/onboard/mvvm/OnboardRepository.kt | 5 +- .../com/woka/onboard/views/OnboardActivity.kt | 9 + .../com/woka/players/models/VideoPlayList.kt | 2 +- .../players/models/VideoViewRequestData.kt | 9 +- .../com/woka/players/views/PlayerActivity.kt | 53 ++++++ .../com/woka/shop/views/AddressActivity.kt | 1 + .../java/com/woka/shop/views/CartActivity.kt | 2 + .../com/woka/shop/views/MyOrdersActivity.kt | 1 + .../java/com/woka/shop/views/ShopActivity.kt | 1 + .../java/com/woka/userdata/UserApiService.kt | 2 +- app/src/main/java/com/woka/utils/Constants.kt | 12 +- .../webseries/viewmodel/WebSeriesViewModel.kt | 30 ++++ .../views/fragments/WebSeriesFragment.kt | 21 ++- .../views/fragments/WebShowFragment.kt | 11 +- .../wokagames/playerr/GamePlayerActivity.kt | 15 ++ .../woka/wokagames/playerr/GamePlayerData.kt | 1 + .../com/woka/wokagames/views/GamesActivity.kt | 11 +- build.gradle | 8 +- gradle/libs.versions.toml | 12 ++ 52 files changed, 572 insertions(+), 156 deletions(-) create mode 100644 app/google-services.json create mode 100644 app/src/main/java/com/woka/home/mylist/models/ShowDataResponse.kt diff --git a/app/build.gradle b/app/build.gradle index 39c598b..8c45dde 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,6 +4,8 @@ plugins { id("kotlin-parcelize") alias(libs.plugins.navigationSafeArgs) alias(libs.plugins.ksp) + id 'com.google.gms.google-services' + id 'com.google.firebase.firebase-perf' } android { @@ -115,6 +117,9 @@ dependencies { // audio mixer for karaoke implementation("com.github.ZeroOneZeroR:android_audio_mixer:v1.1") + // one-signal + implementation(libs.onesignal) + // room-database def room_version = "2.6.1" implementation(libs.androidx.room.runtime) @@ -123,6 +128,9 @@ dependencies { // optional - Kotlin Extensions and Coroutines support for Room implementation(libs.room.ktx) + implementation libs.firebase.analytics + implementation libs.firebase.perf + implementation libs.androidx.core.ktx implementation libs.androidx.appcompat implementation libs.material diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..030e018 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,30 @@ +{ + "project_info": { + "project_number": "15836861503", + "project_id": "wokaga-19312", + "storage_bucket": "wokaga-19312.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:15836861503:android:3bb57b5699be379466548a", + "android_client_info": { + "package_name": "com.woka" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyDZuTUtZCL7fDKAiUgVt6IjytuH9Zz48Hg" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + }, + "admob_app_id": "ca-app-pub-5699008063638916~5336678778" + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 51d6c5e..e09df64 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ android:screenOrientation="portrait" /> (EXTRA_SHOW_DATA)?.let { showData -> - val hPos = - webSeriesHAdapter.currentList.indexOfFirst { it.id == showData.id } + val hPos = webSeriesHAdapter.currentList.indexOfFirst { it.id == showData.id } if (hPos >= 0 && hPos < webSeriesHAdapter.currentList.size) { webSeriesHAdapter.currentList[hPos].likes_count = showData.likes_count webSeriesHAdapter.currentList[hPos].is_liked = showData.is_liked - webSeriesHAdapter.currentList[hPos].bookmark_category_ids = - showData.favourite_category_ids + webSeriesHAdapter.currentList[hPos].bookmark_category_ids = showData.favourite_category_ids } - val ePos = - webSeriesEAdapter.currentList.indexOfFirst { it.id == showData.id } + val ePos = webSeriesEAdapter.currentList.indexOfFirst { it.id == showData.id } if (ePos >= 0 && ePos < webSeriesEAdapter.currentList.size) { webSeriesEAdapter.currentList[ePos].likes_count = showData.likes_count webSeriesEAdapter.currentList[ePos].is_liked = showData.is_liked - webSeriesEAdapter.currentList[hPos].bookmark_category_ids = - showData.favourite_category_ids + webSeriesEAdapter.currentList[ePos].bookmark_category_ids = showData.favourite_category_ids } } } @@ -324,53 +331,29 @@ class MyListFragment : Fragment() { progressBar.hide() result.show_data?.let { showData -> - if (showData.isNotEmpty()) { - val engList = mutableListOf() - val hinList = mutableListOf() - - for (show in showData) { - if (show.bookmark_category_ids?.isEmpty() == true) continue - - val ids = show.bookmark_category_ids?.split(",") - ids?.let { bIds -> - if (bIds.isNotEmpty()) { - when (bIds.size) { - 1 -> if (bIds[0] == "1") engList.add(show) else hinList.add( - show - ) - - else -> { - engList.add(show) - hinList.add(show) - } - } - } - } - } - + showData.english?.let {engList -> if (engList.isNotEmpty()) { webSeriesEnglishView.show() dataLoaded = true - webSeriesEAdapter.submitList(engList) + webSeriesEAdapter.submitList(ArrayList(engList)) - webSeriesEngViewAll.setVisibility(showData.size >= 3) + webSeriesEngViewAll.setVisibility(engList.size >= 3) } else { onListGotEmpty(PostType.WEB_SERIES, true) } + } + + showData.hindi?.let {hinList -> if (hinList.isNotEmpty()) { webSeriesHindiView.show() dataLoaded = true - webSeriesHAdapter.submitList(hinList) + webSeriesHAdapter.submitList(ArrayList(hinList)) - webSeriesHinViewAll.setVisibility(showData.size >= 3) + webSeriesHinViewAll.setVisibility(hinList.size >= 3) } else { onListGotEmpty(PostType.WEB_SERIES, false) } - - } else { - webSeriesEnglishView.hide() - webSeriesHindiView.hide() } } @@ -542,31 +525,43 @@ class MyListFragment : Fragment() { onListGotEmpty(PostType.WEB_SERIES, false) } - MyListRepository.updateSeriesList(Collections.emptyList()) + MyListRepository.updateSeriesList(Collections.emptyList(), showCategory) } is ApiResult.Loading -> {} is ApiResult.Success -> { response.data?.result?.show_data?.let { - if (showCategory == "1") { - if (it.isNotEmpty()) { - webSeriesEAdapter.submitList(it) - } else { - onListGotEmpty(PostType.WEB_SERIES, true) + when (showCategory){ + "1" -> { + it.english?.let {engList -> + if (engList.isNotEmpty()) { + webSeriesEAdapter.submitList(engList) + } else { + onListGotEmpty(PostType.WEB_SERIES, true) + } + + binding.webSeriesEngViewAll.setVisibility(engList.size >= 3) + + MyListRepository.updateSeriesList(engList, showCategory) + } } - binding.webSeriesEngViewAll.setVisibility(it.size >= 3) - } else if (showCategory == "18") { - if (it.isNotEmpty()) { - webSeriesHAdapter.submitList(it) - } else { - onListGotEmpty(PostType.WEB_SERIES, false) + "18" -> { + it.hindi?.let {hinList -> + if (hinList.isNotEmpty()) { + webSeriesHAdapter.submitList(hinList) + } else { + onListGotEmpty(PostType.WEB_SERIES, false) + } + + binding.webSeriesHinViewAll.setVisibility(hinList.size >= 3) + + MyListRepository.updateSeriesList(hinList, showCategory) + } } - binding.webSeriesHinViewAll.setVisibility(it.size >= 3) + else -> {} } - - MyListRepository.updateSeriesList(it) } } } @@ -657,6 +652,8 @@ class MyListFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${audioBookData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } fav.setOnClickListener { @@ -672,6 +669,8 @@ class MyListFragment : Fragment() { fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } close.setOnClickListener { @@ -686,6 +685,8 @@ class MyListFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } itemRemovedFromDialog = false @@ -761,7 +762,12 @@ class MyListFragment : Fragment() { .build() ) }, - null + mutableListOf( + VideoViewRequestData( + audioBookData.id, + ContentType.AUDIO + ) + ) ) ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0) @@ -842,7 +848,11 @@ class MyListFragment : Fragment() { startActivity(Intent(activity, GamePlayerActivity::class.java).apply { putExtra( GamePlayerActivity.EXTRA_GAME_PLAYER_DATA, - GamePlayerData(it, gameData.screen_orientation == "Landscape") + GamePlayerData( + gameData.id, + it, + gameData.screen_orientation == "Landscape" + ) ) }) @@ -867,6 +877,8 @@ class MyListFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${gameData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } fav.setOnClickListener { @@ -882,6 +894,8 @@ class MyListFragment : Fragment() { fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } close.setOnClickListener { @@ -896,6 +910,8 @@ class MyListFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } itemRemovedFromDialog = false @@ -984,12 +1000,19 @@ class MyListFragment : Fragment() { ).apply { putExtra( KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) + KaraokePlayerData( + it, + karaokeData.title, + karaokeData.id + ) ) }) } } - clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + clickHelper.upsertClickEvent( + ContentType.KARAOKE_VIDEO, + karaokeData.id + ) } } } else { @@ -1012,12 +1035,19 @@ class MyListFragment : Fragment() { ).apply { putExtra( KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) + KaraokePlayerData( + it, + karaokeData.title, + karaokeData.id + ) ) }) } } - clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) + clickHelper.upsertClickEvent( + ContentType.KARAOKE_VIDEO, + karaokeData.id + ) } } } @@ -1054,6 +1084,8 @@ class MyListFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${karaokeData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } fav.setOnClickListener { @@ -1069,6 +1101,8 @@ class MyListFragment : Fragment() { fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } close.setOnClickListener { @@ -1083,6 +1117,8 @@ class MyListFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } itemRemovedFromDialog = false diff --git a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt index d6a7f8f..d0e059a 100644 --- a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt +++ b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt @@ -6,6 +6,7 @@ import com.woka.home.mylist.models.FavGameData import com.woka.home.mylist.models.FavKaraokeData import com.woka.home.mylist.models.MyListResponse import com.woka.home.mylist.models.Result +import com.woka.home.mylist.models.ShowDataResponse import com.woka.networking.ApiResult import com.woka.userdata.UserRepository @@ -14,7 +15,7 @@ object MyListRepository { private var myFavData: MyListResponse = MyListResponse(Result( ArrayList(), ArrayList(), - ArrayList(), + ShowDataResponse(ArrayList(), ArrayList()), ArrayList(), ArrayList(), 0 @@ -34,7 +35,8 @@ object MyListRepository { fun clearData(){ shallLoadNewData = true myFavData.result?.let { - it.show_data?.clear() + it.show_data?.hindi?.clear() + it.show_data?.english?.clear() it.game_data?.clear() it.audio_data?.clear() it.sing_karaoke_data?.clear() @@ -64,9 +66,17 @@ object MyListRepository { } } - fun updateSeriesList(bookmarkedShowData: MutableList) { - myFavData.result?.show_data?.clear() - myFavData.result?.show_data?.addAll(bookmarkedShowData) + fun updateSeriesList(bookmarkedShowData: MutableList, categoryId: String) { + when (categoryId){ + "1" -> { + myFavData.result?.show_data?.english?.clear() + myFavData.result?.show_data?.english?.addAll(bookmarkedShowData) + } + "18" -> { + myFavData.result?.show_data?.hindi?.clear() + myFavData.result?.show_data?.hindi?.addAll(bookmarkedShowData) + } + } shallLoadNewData = false } diff --git a/app/src/main/java/com/woka/home/mylist/models/Result.kt b/app/src/main/java/com/woka/home/mylist/models/Result.kt index 47eddac..74d9af8 100644 --- a/app/src/main/java/com/woka/home/mylist/models/Result.kt +++ b/app/src/main/java/com/woka/home/mylist/models/Result.kt @@ -3,7 +3,7 @@ package com.woka.home.mylist.models data class Result( val audio_data: ArrayList?, val game_data: ArrayList?, - val show_data: ArrayList?, + val show_data: ShowDataResponse?, val sing_karaoke_data: ArrayList?, val video_data: ArrayList?, val total_records: Int? diff --git a/app/src/main/java/com/woka/home/mylist/models/ShowDataResponse.kt b/app/src/main/java/com/woka/home/mylist/models/ShowDataResponse.kt new file mode 100644 index 0000000..2f14f0c --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/ShowDataResponse.kt @@ -0,0 +1,6 @@ +package com.woka.home.mylist.models + +data class ShowDataResponse( + val english: ArrayList?, + val hindi: ArrayList? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/view/FavoritesActivity.kt b/app/src/main/java/com/woka/home/mylist/view/FavoritesActivity.kt index 9cf30f2..4e511ee 100644 --- a/app/src/main/java/com/woka/home/mylist/view/FavoritesActivity.kt +++ b/app/src/main/java/com/woka/home/mylist/view/FavoritesActivity.kt @@ -9,6 +9,7 @@ import androidx.core.view.WindowInsetsCompat 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.ActivityFavoritesBinding import com.woka.home.mylist.view.fragments.FavAudioFragment @@ -60,6 +61,13 @@ class FavoritesActivity : AppCompatActivity() { initFragment() } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + private fun initViews(){ binding.apply { title.text = favTitle @@ -70,6 +78,7 @@ class FavoritesActivity : AppCompatActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 425d7e4..c5ff4cc 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 @@ -28,6 +28,7 @@ import com.woka.home.mylist.MyListRepository import com.woka.home.mylist.viewmodel.FavoriteViewModel import com.woka.networking.ApiResult import com.woka.players.models.VideoPlayList +import com.woka.players.models.VideoViewRequestData import com.woka.players.views.PlayerActivity import com.woka.utils.hide import com.woka.utils.isNetworkConnected @@ -59,7 +60,8 @@ class FavAudioFragment : Fragment() { ): View { binding = FragmentFavoritesBinding.inflate(inflater, container, false) viewModel = ViewModelProvider(requireActivity())[FavoriteViewModel::class.java] - adapter = AudioBooksAdapter(requireContext(), ::onAudioBookClicked, ::onBookChanged, false){} + adapter = + AudioBooksAdapter(requireContext(), ::onAudioBookClicked, ::onBookChanged, false) {} return binding.root } @@ -79,22 +81,23 @@ class FavAudioFragment : Fragment() { setObservers() - if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success){ + if (!viewModel.favoritesLiveData.isInitialized || viewModel.favoritesLiveData.value !is ApiResult.Success) { viewModel.loadFavorites(ContentType.AUDIO) } } - private fun initViews(){ + private fun initViews() { binding.apply { rvFavorites.adapter = adapter } } - private fun clickEvents(){ + private fun clickEvents() { binding.apply { loadMoreBtn.setOnClickListener { viewModel.loadFavorites(ContentType.AUDIO) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -129,16 +132,16 @@ class FavAudioFragment : Fragment() { } } - private fun setObservers(){ - viewModel.favoritesLiveData.observe(viewLifecycleOwner){ + private fun setObservers() { + viewModel.favoritesLiveData.observe(viewLifecycleOwner) { binding.apply { - when (it){ + when (it) { is ApiResult.Error -> { - if (adapter.itemCount == 0){ + if (adapter.itemCount == 0) { // no orders at all dataView.hide() noData.show() - }else{ + } else { // load more orders failed dataView.show() shimmer.hide() @@ -147,6 +150,7 @@ class FavAudioFragment : Fragment() { loadMoreBtn.show() } } + is ApiResult.Loading -> { noData.hide() @@ -155,8 +159,9 @@ class FavAudioFragment : Fragment() { loadMoreBtn.hide() } + is ApiResult.Success -> { - it.data?.result?.audio_data?.let {audioList -> + it.data?.result?.audio_data?.let { audioList -> noData.hide() dataView.show() @@ -173,9 +178,7 @@ class FavAudioFragment : Fragment() { } } - private fun onBookChanged(i: Int, audioBookData: AudioBookData) { - - } + private fun onBookChanged(i: Int, audioBookData: AudioBookData) {} private fun onAudioBookClicked(audioBookData: AudioBookData) { dialogBinding.apply { @@ -260,6 +263,8 @@ class FavAudioFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${audioBookData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } fav.setOnClickListener { @@ -276,6 +281,8 @@ class FavAudioFragment : Fragment() { audioBookData.mark_as_favourite = !fav.isSelected fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } close.setOnClickListener { @@ -290,6 +297,8 @@ class FavAudioFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id) } itemRemovedFromDialog = false @@ -336,7 +345,12 @@ class FavAudioFragment : Fragment() { .build() ) }, - null + mutableListOf( + VideoViewRequestData( + audioBookData.id, + ContentType.AUDIO + ) + ) ) ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0) 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 eea7822..99ee7ba 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 @@ -125,6 +125,7 @@ class FavGameFragment : Fragment() { binding.apply { loadMoreBtn.setOnClickListener { viewModel.loadFavorites(ContentType.GAME) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -242,7 +243,7 @@ class FavGameFragment : Fragment() { startActivity(Intent(activity, GamePlayerActivity::class.java).apply { putExtra( GamePlayerActivity.EXTRA_GAME_PLAYER_DATA, - GamePlayerData(it, gameData.screen_orientation == "Landscape") + GamePlayerData(gameData.id, it, gameData.screen_orientation == "Landscape") ) }) @@ -267,6 +268,8 @@ class FavGameFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${gameData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } fav.setOnClickListener { @@ -283,6 +286,8 @@ class FavGameFragment : Fragment() { gameData.mark_as_favourite = !fav.isSelected fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } close.setOnClickListener { @@ -297,6 +302,8 @@ class FavGameFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.GAME, gameData.id) } itemRemovedFromDialog = false 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 bf77025..5e3a652 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 @@ -124,6 +124,7 @@ class FavKaraokeFragment : Fragment() { binding.apply { loadMoreBtn.setOnClickListener { viewModel.loadFavorites(ContentType.KARAOKE_VIDEO) + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -172,9 +173,7 @@ class FavKaraokeFragment : Fragment() { } } - private fun onKaraokeChanged(i: Int, b: Boolean, karaokeData: KaraokeData) { - - } + private fun onKaraokeChanged(i: Int, b: Boolean, karaokeData: KaraokeData) {} private fun onKaraokeClicked(karaokeData: KaraokeData) { dialogBinding.apply { @@ -223,7 +222,7 @@ class FavKaraokeFragment : Fragment() { ).apply { putExtra( KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) + KaraokePlayerData(it, karaokeData.title, karaokeData.id) ) }) } @@ -251,7 +250,7 @@ class FavKaraokeFragment : Fragment() { ).apply { putExtra( KaraokePlayerActivity.EXTRA_KARAOKE_DATA, - KaraokePlayerData(it, karaokeData.title) + KaraokePlayerData(it, karaokeData.title, karaokeData.id) ) }) } @@ -293,6 +292,8 @@ class FavKaraokeFragment : Fragment() { like.isSelected = !like.isSelected likeCount.text = "${karaokeData.likes_count}" + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } fav.setOnClickListener { @@ -309,6 +310,8 @@ class FavKaraokeFragment : Fragment() { karaokeData.mark_as_favourite = !fav.isSelected fav.isSelected = !fav.isSelected itemRemovedFromDialog = !fav.isSelected + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } close.setOnClickListener { @@ -323,6 +326,8 @@ class FavKaraokeFragment : Fragment() { // item was not at last removed MyListRepository.setLoadNewDataFlag(false) } + + clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id) } itemRemovedFromDialog = false diff --git a/app/src/main/java/com/woka/home/mylist/view/fragments/FavSeriesFragment.kt b/app/src/main/java/com/woka/home/mylist/view/fragments/FavSeriesFragment.kt index 1f3f1a2..5b40430 100644 --- a/app/src/main/java/com/woka/home/mylist/view/fragments/FavSeriesFragment.kt +++ b/app/src/main/java/com/woka/home/mylist/view/fragments/FavSeriesFragment.kt @@ -73,6 +73,7 @@ class FavSeriesFragment : Fragment() { binding.apply { loadMoreBtn.setOnClickListener { viewModel.loadFavorites(ContentType.SERIES, if (viewModel.webSeriesIsEnglish) "1" else "18") + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -104,7 +105,7 @@ class FavSeriesFragment : Fragment() { loadMoreBtn.hide() } is ApiResult.Success -> { - it.data?.result?.show_data?.let {showList -> + it.data?.result?.show_data?.let {showData -> noData.hide() dataView.show() @@ -113,7 +114,15 @@ class FavSeriesFragment : Fragment() { loadMoreBtn.text = getString(R.string.load_more) loadMoreBtn.setVisibility(!viewModel.lastPage) - adapter.submitListShowList(showList.map { ShowData(it) }, if (viewModel.webSeriesIsEnglish) "1" else "18") + if (viewModel.webSeriesIsEnglish){ + showData.english?.let {engList -> + adapter.submitListShowList(engList.map { ShowData(it) }, "1") + } + }else{ + showData.hindi?.let {hinList -> + adapter.submitListShowList(hinList.map { ShowData(it) }, "18") + } + } } } } @@ -132,16 +141,37 @@ class FavSeriesFragment : Fragment() { adapter.showList[hPos].likes_count = showData.likes_count adapter.showList[hPos].is_liked = showData.is_liked adapter.showList[hPos].favourite_category_ids = showData.favourite_category_ids + + result.data?.getStringExtra(EXTRA_SHOW_CATEGORY)?.let { showCategory -> + onWebShowItemChanged(hPos, showCategory) + } } } } } } - private fun onShowCommonDataChanged(showData: ShowData, categoryId: String) { + private fun onWebShowItemChanged(position: Int, showCategory: String) { + if (viewModel.lastPage){ + if (position >= 0 && position < adapter.showList.size){ + val list = adapter.showList.toMutableList() + list.removeAt(position) + if (list.isNotEmpty()){ + adapter.submitListShowList(list, showCategory) + }else{ + binding.noData.show() + binding.rvFavorites.hide() + } + } + }else{ + viewModel.resetPagination() + viewModel.loadFavorites(ContentType.SERIES, showCategory) + } } + private fun onShowCommonDataChanged(showData: ShowData, categoryId: String) {} + // web show private fun onWebShowClicked(showData: ShowData, categoryId: String) { webShowIntentLauncher?.launch(Intent(context, WebSeriesActivity::class.java).apply { diff --git a/app/src/main/java/com/woka/home/mylist/viewmodel/FavoriteViewModel.kt b/app/src/main/java/com/woka/home/mylist/viewmodel/FavoriteViewModel.kt index 4f911a7..e33604b 100644 --- a/app/src/main/java/com/woka/home/mylist/viewmodel/FavoriteViewModel.kt +++ b/app/src/main/java/com/woka/home/mylist/viewmodel/FavoriteViewModel.kt @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import com.woka.database.models.clicks.ContentType import com.woka.home.mylist.models.MyListResponse import com.woka.home.mylist.models.Result +import com.woka.home.mylist.models.ShowDataResponse import com.woka.networking.ApiResult import com.woka.userdata.UserRepository import kotlinx.coroutines.launch @@ -24,7 +25,7 @@ class FavoriteViewModel : ViewModel() { private val myListResponse = MyListResponse( Result( - ArrayList(), ArrayList(), ArrayList(), ArrayList(), ArrayList(), 0 + ArrayList(), ArrayList(), ShowDataResponse(ArrayList(), ArrayList()), ArrayList(), ArrayList(), 0 ) ) @@ -50,18 +51,38 @@ class FavoriteViewModel : ViewModel() { value.data?.let { when (contentType) { ContentType.SERIES -> { - it.result?.show_data?.let { newList -> + it.result?.show_data?.let { showData -> + when (categoryId){ + "1" -> { + showData.english?.let {newList -> + myListResponse.result?.show_data?.english?.addAll(newList) - myListResponse.result?.show_data?.addAll(newList) + lastPage = myListResponse.result?.show_data?.english?.size == it.result.total_records - lastPage = myListResponse.result?.show_data?.size == it.result.total_records + _favoritesLiveData.postValue( + ApiResult.Success( + myListResponse + ) + ) + nextPageToLoad++ + } + } + "18" -> { + showData.hindi?.let {newList -> + myListResponse.result?.show_data?.hindi?.addAll(newList) - _favoritesLiveData.postValue( - ApiResult.Success( - myListResponse - ) - ) - nextPageToLoad++ + lastPage = myListResponse.result?.show_data?.hindi?.size == it.result.total_records + + _favoritesLiveData.postValue( + ApiResult.Success( + myListResponse + ) + ) + nextPageToLoad++ + } + } + else -> {} + } } } @@ -122,4 +143,9 @@ class FavoriteViewModel : ViewModel() { } } } + + fun resetPagination() { + nextPageToLoad = 0 + lastPage = false + } } \ No newline at end of file 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 4a670f3..84ae70d 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 @@ -49,6 +49,7 @@ class AboutActivity : WokaBaseActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 d14c3d2..7cbf63f 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 @@ -83,6 +83,7 @@ class FaqActivity : AppCompatActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } diff --git a/app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt b/app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt index a81b51e..c4de68c 100644 --- a/app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt +++ b/app/src/main/java/com/woka/home/sidebar/faqs/FaqsAdapter.kt @@ -9,6 +9,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.FaqViewHolderBinding import com.woka.modules.faqs.models.Faq import com.woka.utils.hide @@ -84,6 +86,7 @@ class FaqsAdapter(config: AsyncDifferConfig) : openedFaq = position } + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 b9c2ca9..3dfceb3 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 @@ -85,6 +85,7 @@ class UserProfileActivity : WokaBaseActivity() { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } update.setOnClickListener { 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 0c319af..cadd073 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 @@ -153,6 +153,7 @@ class SupportActivity : WokaBaseActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } submit.setOnClickListener { diff --git a/app/src/main/java/com/woka/home/views/HomeActivity.kt b/app/src/main/java/com/woka/home/views/HomeActivity.kt index 73e1bc4..e0d9600 100644 --- a/app/src/main/java/com/woka/home/views/HomeActivity.kt +++ b/app/src/main/java/com/woka/home/views/HomeActivity.kt @@ -145,6 +145,8 @@ class HomeActivity : WokaBaseActivity(), decisionDialog.show() } + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } override fun onDestroy() { 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 1e2550e..5077984 100644 --- a/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt +++ b/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt @@ -28,6 +28,7 @@ import com.woka.modules.wokasongs.WokaSongsAdapter import com.woka.modules.wokasongs.WokaSongsRepository import com.woka.networking.ApiResult import com.woka.players.models.VideoPlayList +import com.woka.players.models.VideoViewRequestData import com.woka.players.views.PlayerActivity import com.woka.utils.WokaBaseActivity import com.woka.utils.hide @@ -138,7 +139,12 @@ class MoreHomeActivity : WokaBaseActivity() { .build() ) }, - null + mutableListOf( + VideoViewRequestData( + 0, + ContentType.TEASER + ) + ) ) ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0) 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 87673e0..07538d3 100644 --- a/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt +++ b/app/src/main/java/com/woka/karaoke/views/KaraokeActivity.kt @@ -102,9 +102,10 @@ class KaraokeActivity : WokaBaseActivity() { } } - override fun onDestroy() { - super.onDestroy() - + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() ClicksHelper.upsertClickEvent(ContentType.OTHERS) } @@ -158,6 +159,7 @@ class KaraokeActivity : WokaBaseActivity() { binding.apply { toolbar.backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } retryBtn.setOnClickListener { 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 994b08a..8b6b5f5 100644 --- a/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt +++ b/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt @@ -27,6 +27,7 @@ class DisclaimerActivity : WokaBaseActivity() { binding.backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } 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 fdcda19..a287c20 100644 --- a/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt +++ b/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt @@ -74,6 +74,7 @@ class WebViewActivity : WokaBaseActivity() { override fun onSupportNavigateUp(): Boolean { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) return true } 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 7803804..36efb14 100644 --- a/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt @@ -99,10 +99,6 @@ class GetMoreInfoFragment : Fragment() { } next.setOnClickListener { - if (viewModel.selectedGender == Gender.NONE) { - toast(getString(R.string.select_a_gender)) - return@setOnClickListener - } if (isUnder16 && viewModel.interestTopics.isEmpty()){ toast(getString(R.string.please_select_your_interests)) return@setOnClickListener 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 2979f7e..5fe8e31 100644 --- a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt @@ -12,6 +12,8 @@ import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController import com.google.android.material.tabs.TabLayoutMediator +import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.ktx.Firebase import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.database.helpers.ClicksHelper @@ -21,8 +23,10 @@ import com.woka.home.views.HomeActivity import com.woka.networking.ApiResult import com.woka.onboard.adapters.OnboardingAdapter import com.woka.onboard.mvvm.OnboardViewModel -import com.woka.utils.ProgressView import com.woka.userPreference.UserType +import com.woka.utils.ANALYTICS_GUEST_LOGIN +import com.woka.utils.ANALYTICS_NEW_USER +import com.woka.utils.ProgressView import com.woka.utils.toast class OnboardFragment : Fragment() { @@ -77,6 +81,11 @@ class OnboardFragment : Fragment() { userPrefs?.userType = UserType.GUEST userPrefs?.guestUserName = data.fullname + if (data.new_guest == true){ + Firebase.analytics.logEvent(ANALYTICS_GUEST_LOGIN, null) + Firebase.analytics.logEvent(ANALYTICS_NEW_USER, null) + } + activity?.let { activity-> startActivity(Intent(activity, HomeActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) 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 0d3e3a0..93de522 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt @@ -2,12 +2,15 @@ package com.woka.onboard.fragments import android.content.Intent import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.ktx.Firebase +import com.onesignal.OneSignal import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.database.helpers.ClicksHelper @@ -19,10 +22,12 @@ import com.woka.onboard.adapters.AvatarAdapter import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16 import com.woka.onboard.models.RegisterRequestData import com.woka.onboard.mvvm.OnboardViewModel +import com.woka.userPreference.UserType import com.woka.userdata.UserRepository +import com.woka.utils.ANALYTICS_NEW_USER +import com.woka.utils.ANALYTICS_USER_SIGN_UP import com.woka.utils.Gender import com.woka.utils.ProgressView -import com.woka.userPreference.UserType import com.woka.utils.toast import kotlinx.coroutines.launch import java.text.SimpleDateFormat @@ -86,13 +91,14 @@ class SelectAvatarFragment : Fragment() { birthdate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(selectedDOB.time), email = email, full_name = name, - gender = if (selectedGender == Gender.MALE) "2" else "1", + gender = if (selectedGender == Gender.MALE) "2" else if (selectedGender == Gender.FEMALE)"1" else "0", guardian_email = if (isUnder16) email else null, language_id = if (userPrefs?.appLanguage == "en") "1" else "2", password = password, user_type = if (isUnder16) "1" else "2", username = userName, - interest_topic_id = if (isUnder16) interestTopics.toList() else null + interest_topic_id = if (isUnder16) interestTopics.toList() else null, + one_signal_player_id = OneSignal.User.onesignalId ) } @@ -158,6 +164,9 @@ class SelectAvatarFragment : Fragment() { UserRepository.logout() } + Firebase.analytics.logEvent(ANALYTICS_USER_SIGN_UP, null) + Firebase.analytics.logEvent(ANALYTICS_NEW_USER, null) + // saving to user prefs userPrefs?.accessToken = result.remember_token?:"no_token_received" userPrefs?.userType = UserType.createUserType(result.user_type) 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 b76203c..aa6fc06 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt @@ -3,13 +3,15 @@ package com.woka.onboard.fragments import android.content.Intent import android.graphics.Color import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.WindowManager +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.navigation.fragment.findNavController +import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.ktx.Firebase import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.database.helpers.ClicksHelper @@ -19,9 +21,11 @@ import com.woka.home.views.HomeActivity import com.woka.networking.ApiResult import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_INTENT import com.woka.onboard.mvvm.OnboardViewModel +import com.woka.userPreference.UserType +import com.woka.utils.ANALYTICS_GUEST_LOGIN +import com.woka.utils.ANALYTICS_NEW_USER import com.woka.utils.DecisionDialog import com.woka.utils.ProgressView -import com.woka.userPreference.UserType import com.woka.utils.toast class SignInFragment : Fragment() { @@ -86,7 +90,7 @@ class SignInFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - viewModel.loginLiveData.observe(viewLifecycleOwner){ it -> + viewModel.loginLiveData.observe(viewLifecycleOwner){ when(it){ is ApiResult.Error -> { progressView.hide() @@ -160,6 +164,11 @@ class SignInFragment : Fragment() { userPrefs?.userType = UserType.GUEST userPrefs?.guestUserName = data.fullname + if (data.new_guest == true){ + Firebase.analytics.logEvent(ANALYTICS_GUEST_LOGIN, null) + Firebase.analytics.logEvent(ANALYTICS_NEW_USER, null) + } + activity?.let { activity-> startActivity(Intent(activity, HomeActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) diff --git a/app/src/main/java/com/woka/onboard/models/RegisterRequestData.kt b/app/src/main/java/com/woka/onboard/models/RegisterRequestData.kt index d038b12..06ed22e 100644 --- a/app/src/main/java/com/woka/onboard/models/RegisterRequestData.kt +++ b/app/src/main/java/com/woka/onboard/models/RegisterRequestData.kt @@ -12,5 +12,6 @@ data class RegisterRequestData( val password: String?, val user_type: String?, val username: String?, - val interest_topic_id: List? + val interest_topic_id: List?, + val one_signal_player_id: String? ) \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt index 03ce903..1935568 100644 --- a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt +++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt @@ -1,5 +1,6 @@ package com.woka.onboard.mvvm +import com.onesignal.OneSignal import com.woka.WokaApp import com.woka.networking.ApiResult import com.woka.networking.RetrofitHelper.handleApiCall @@ -22,6 +23,7 @@ class OnboardRepository(private val apiService: OnboardApiService) { FormBody.Builder() .add("username", userName) .add("password", password) + .add("one_signal_player_id", OneSignal.User.onesignalId) .build() ) } @@ -33,6 +35,7 @@ class OnboardRepository(private val apiService: OnboardApiService) { FormBody.Builder() .add("username", userName) .add("password", password) + .add("one_signal_player_id", OneSignal.User.onesignalId) .add("is_activate", if (isActivate) "1" else "0") .build() ) @@ -151,7 +154,7 @@ class OnboardRepository(private val apiService: OnboardApiService) { FormBody.Builder() .add("language_id", if (WokaApp.userPrefs?.appLanguage == "hi") "2" else "1") .add("user_type", "3") - .add("one_signal_player_id", "test") + .add("one_signal_player_id", OneSignal.User.onesignalId) .add("device_type", "1") .build() ) diff --git a/app/src/main/java/com/woka/onboard/views/OnboardActivity.kt b/app/src/main/java/com/woka/onboard/views/OnboardActivity.kt index 45e4fc0..e7491cb 100644 --- a/app/src/main/java/com/woka/onboard/views/OnboardActivity.kt +++ b/app/src/main/java/com/woka/onboard/views/OnboardActivity.kt @@ -9,6 +9,8 @@ import androidx.navigation.NavOptions import androidx.navigation.fragment.NavHostFragment 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.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16 import com.woka.onboard.fragments.SignUpFragment.Companion.ADD_CHILD_EVENT @@ -66,6 +68,13 @@ class OnboardActivity : WokaBaseActivity() { } } + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) + } + override fun onStart() { super.onStart() player?.start() diff --git a/app/src/main/java/com/woka/players/models/VideoPlayList.kt b/app/src/main/java/com/woka/players/models/VideoPlayList.kt index e98e3bc..fa923f2 100644 --- a/app/src/main/java/com/woka/players/models/VideoPlayList.kt +++ b/app/src/main/java/com/woka/players/models/VideoPlayList.kt @@ -7,5 +7,5 @@ import kotlinx.parcelize.Parcelize @Parcelize data class VideoPlayList( val playlist: ArrayList, - val videoViewRequestDataList: ArrayList? = null + val videoViewRequestDataList: MutableList ): Parcelable \ 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 edba067..e98a561 100644 --- a/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt +++ b/app/src/main/java/com/woka/players/models/VideoViewRequestData.kt @@ -1,12 +1,13 @@ package com.woka.players.models import android.os.Parcelable +import com.woka.database.models.clicks.ContentType import kotlinx.parcelize.Parcelize @Parcelize data class VideoViewRequestData( - val post_id: Int?, - val post_type: String, - var total_watched_duration: String? = null, - val category_id: String? = null + val id: Int?, + val contentType: ContentType, + val categoryId: String? = null, + var watchedDuration: String? = null ) : Parcelable diff --git a/app/src/main/java/com/woka/players/views/PlayerActivity.kt b/app/src/main/java/com/woka/players/views/PlayerActivity.kt index 15cadfc..85ae60c 100644 --- a/app/src/main/java/com/woka/players/views/PlayerActivity.kt +++ b/app/src/main/java/com/woka/players/views/PlayerActivity.kt @@ -4,6 +4,7 @@ import android.net.ConnectivityManager import android.net.Network import android.net.NetworkRequest import android.os.Bundle +import android.util.Log import android.view.ViewGroup import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity @@ -11,14 +12,19 @@ import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import com.jwplayer.pub.api.JWPlayer +import com.jwplayer.pub.api.PauseReason +import com.jwplayer.pub.api.PlayReason import com.jwplayer.pub.api.configuration.PlayerConfig import com.jwplayer.pub.api.events.EventType import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents import com.jwplayer.pub.api.fullscreen.FullscreenHandler +import com.woka.database.helpers.ClicksHelper +import com.woka.database.models.clicks.ContentType import com.woka.databinding.ActivityPlayerBinding import com.woka.players.KeepScreenOnHandler import com.woka.players.models.PlayBackState import com.woka.players.models.VideoPlayList +import com.woka.utils.TAG import com.woka.utils.hide import com.woka.utils.show @@ -96,10 +102,12 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler { binding.playerView.show() binding.errorView.hide() configAndPlay() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } closeBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } @@ -133,9 +141,37 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler { playbackState = PlayBackState.PLAY binding.playerView.show() binding.errorView.hide() + + if (it.playReason == PlayReason.INTERACTION){ + videoPlayList?.videoViewRequestDataList?.let {playlistData -> + if (playingIndex >= 0 && playingIndex < playlistData.size){ + with(playlistData[playingIndex]){ + ClicksHelper.upsertClickEvent( + contentType, + id, + categoryId + ) + } + } + } + } }) player.addListener(EventType.PAUSE, VideoPlayerEvents.OnPauseListener { playbackState = PlayBackState.PAUSED + + if (it.pauseReason == PauseReason.INTERACTION){ + videoPlayList?.videoViewRequestDataList?.let {playlistData -> + if (playingIndex >= 0 && playingIndex < playlistData.size){ + with(playlistData[playingIndex]){ + ClicksHelper.upsertClickEvent( + contentType, + id, + categoryId + ) + } + } + } + } }) player.addListener(EventType.ERROR, VideoPlayerEvents.OnErrorListener { if (player.position != 0.0){ @@ -148,6 +184,22 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler { player.addListener(EventType.PLAYLIST_ITEM, VideoPlayerEvents.OnPlaylistItemListener { playingIndex = it.index + + videoPlayList?.videoViewRequestDataList?.let {playlistData -> + if (playingIndex >= 0 && playingIndex < playlistData.size){ + with(playlistData[playingIndex]){ + ClicksHelper.upsertClickEvent( + contentType, + id, + categoryId + ) + } + } + } + }) + + player.addListener(EventType.SEEK, VideoPlayerEvents.OnSeekListener { + Log.d(TAG, "addListeners: ") }) (getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager).registerNetworkCallback( @@ -165,6 +217,7 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler { windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } override fun onAllowRotationChanged(allowRotation: Boolean) {} 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 863b6e1..0701557 100644 --- a/app/src/main/java/com/woka/shop/views/AddressActivity.kt +++ b/app/src/main/java/com/woka/shop/views/AddressActivity.kt @@ -51,6 +51,7 @@ class AddressActivity : WokaBaseActivity() { binding.apply { toolbar.backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 49e1720..fdd0547 100644 --- a/app/src/main/java/com/woka/shop/views/CartActivity.kt +++ b/app/src/main/java/com/woka/shop/views/CartActivity.kt @@ -39,6 +39,7 @@ class CartActivity : WokaBaseActivity() { setObservers() } + @Suppress("DEPRECATION") @Deprecated("Deprecated in Java") override fun onBackPressed() { super.onBackPressed() @@ -49,6 +50,7 @@ class CartActivity : WokaBaseActivity() { binding.apply { toolbar.backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } } } 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 b1ac3c7..2acc397 100644 --- a/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt +++ b/app/src/main/java/com/woka/shop/views/MyOrdersActivity.kt @@ -99,6 +99,7 @@ class MyOrdersActivity : WokaBaseActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } cart.setOnClickListener { 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 d94f285..77ab57a 100644 --- a/app/src/main/java/com/woka/shop/views/ShopActivity.kt +++ b/app/src/main/java/com/woka/shop/views/ShopActivity.kt @@ -74,6 +74,7 @@ class ShopActivity : WokaBaseActivity() { binding.apply { backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } cart.setOnClickListener { diff --git a/app/src/main/java/com/woka/userdata/UserApiService.kt b/app/src/main/java/com/woka/userdata/UserApiService.kt index b940d2f..408f9f7 100644 --- a/app/src/main/java/com/woka/userdata/UserApiService.kt +++ b/app/src/main/java/com/woka/userdata/UserApiService.kt @@ -27,6 +27,6 @@ interface UserApiService { @GET("get_user_notifications") suspend fun getNotifications(): Response>> - @POST("favourite_listing") + @POST("v2/favourite_listing") suspend fun getMyFavList(@Body formBody: FormBody): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/Constants.kt b/app/src/main/java/com/woka/utils/Constants.kt index d866c39..654f725 100644 --- a/app/src/main/java/com/woka/utils/Constants.kt +++ b/app/src/main/java/com/woka/utils/Constants.kt @@ -19,5 +19,15 @@ const val TERMS_N_CONDITIONS_URL = "https://www.wokaland.com/terms/" 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" -const val PLAY_STORE_URL = "https://play.google.com/store/apps/details?id=com.woka" \ No newline at end of file +// JW Player +const val JW_PLAYER_LICENSE = "LkYoNusv+gSIVJIrXa5Bf59iBNlUMxeg82PM/l8JWk+cD4BE" + +// one signal +const val ONESIGNAL_APP_ID = "f9674e6f-75fb-49e8-8379-4f2ed2a880b8" + +// analytics constants +const val ANALYTICS_GUEST_LOGIN = "guest_login_android" +const val ANALYTICS_USER_SIGN_UP = "user_signup_android" +const val ANALYTICS_NEW_USER = "new_user_android" \ No newline at end of file diff --git a/app/src/main/java/com/woka/webseries/viewmodel/WebSeriesViewModel.kt b/app/src/main/java/com/woka/webseries/viewmodel/WebSeriesViewModel.kt index a3afedb..f6ee583 100644 --- a/app/src/main/java/com/woka/webseries/viewmodel/WebSeriesViewModel.kt +++ b/app/src/main/java/com/woka/webseries/viewmodel/WebSeriesViewModel.kt @@ -5,9 +5,11 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.jwplayer.pub.api.media.playlists.PlaylistItem +import com.woka.database.models.clicks.ContentType import com.woka.modules.categorymodels.CategoriesResponse import com.woka.networking.ApiResult import com.woka.players.models.VideoPlayList +import com.woka.players.models.VideoViewRequestData import com.woka.utils.PagingData import com.woka.webseries.WebSeriesRepository import com.woka.webseries.models.ContinueEpisodeResponse @@ -265,6 +267,13 @@ class WebSeriesViewModel : ViewModel() { .image(episode.thumbnail_path) .build() ) + + currentPlayListHin.videoViewRequestDataList.add( + VideoViewRequestData( + episode.id, + ContentType.EPISODE + ) + ) } } @@ -276,6 +285,13 @@ class WebSeriesViewModel : ViewModel() { .image(episode.thumbnail_path) .build() ) + + currentPlayListEng.videoViewRequestDataList.add( + VideoViewRequestData( + episode.id, + ContentType.EPISODE + ) + ) } } } @@ -358,6 +374,13 @@ class WebSeriesViewModel : ViewModel() { .image(teaser.thumbnail_path) .build() ) + + currentPlayListHin.videoViewRequestDataList.add( + VideoViewRequestData( + teaser.id, + ContentType.TEASER + ) + ) } } @@ -369,6 +392,13 @@ class WebSeriesViewModel : ViewModel() { .image(teaser.thumbnail_path) .build() ) + + currentPlayListEng.videoViewRequestDataList.add( + VideoViewRequestData( + teaser.id, + ContentType.TEASER + ) + ) } } } 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 6c169fc..7ee9a6f 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 @@ -106,6 +106,8 @@ class WebSeriesFragment : Fragment() { binding.apply { toolbar.backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } retryBtn.setOnClickListener { @@ -141,7 +143,12 @@ class WebSeriesFragment : Fragment() { .build() ) }, - null + mutableListOf( + VideoViewRequestData( + 0, + ContentType.TEASER + ) + ) ) ) putExtra(EXTRA_PLAY_INDEX, 0) @@ -442,12 +449,11 @@ class WebSeriesFragment : Fragment() { .build() ) - videoPlayList.videoViewRequestDataList?.add( + videoPlayList.videoViewRequestDataList.add( VideoViewRequestData( episodeData.id, - "3", - null, - category_id = "18" + ContentType.EPISODE, + "18" ) ) @@ -461,11 +467,10 @@ class WebSeriesFragment : Fragment() { .build() ) - videoPlayList.videoViewRequestDataList?.add( + videoPlayList.videoViewRequestDataList.add( VideoViewRequestData( episodeData.id, - "3", - null, + ContentType.EPISODE, "1" ) ) 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 786df40..07c3e18 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 @@ -27,6 +27,7 @@ import com.woka.databinding.DialogEpisodeBinding import com.woka.databinding.FragmentWebShowBinding import com.woka.networking.ApiResult import com.woka.players.models.VideoPlayList +import com.woka.players.models.VideoViewRequestData import com.woka.players.views.PlayerActivity import com.woka.userPreference.UserType import com.woka.utils.NoSignInDialog @@ -160,6 +161,8 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { binding.apply { backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() + + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } watchCard.setOnClickListener { @@ -265,8 +268,6 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { seasonData.season_more_details?.let { moreDetailsList -> if (moreDetailsList.isNotEmpty()) { - val videoPlayList = VideoPlayList(ArrayList()) - val playlistItem = PlaylistItem.Builder() if (categoryId == "18" && moreDetailsList.size > 1) { @@ -283,6 +284,12 @@ class WebShowFragment : Fragment(), TabLayout.OnTabSelectedListener { } } + val videoPlayList = VideoPlayList(ArrayList(), mutableListOf( + VideoViewRequestData( + seasonData.id, + ContentType.SEASON + ) + )) videoPlayList.playlist.add(playlistItem.build()) activity?.let { diff --git a/app/src/main/java/com/woka/wokagames/playerr/GamePlayerActivity.kt b/app/src/main/java/com/woka/wokagames/playerr/GamePlayerActivity.kt index a7be596..7140692 100644 --- a/app/src/main/java/com/woka/wokagames/playerr/GamePlayerActivity.kt +++ b/app/src/main/java/com/woka/wokagames/playerr/GamePlayerActivity.kt @@ -4,12 +4,15 @@ import android.annotation.SuppressLint import android.content.pm.ActivityInfo import android.os.Build import android.os.Bundle +import android.view.MotionEvent import android.view.WindowManager import android.webkit.WebSettings import android.webkit.WebViewClient import androidx.core.view.WindowCompat 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.ActivityGamePlayerBinding import com.woka.utils.DecisionDialog import com.woka.utils.WokaBaseActivity @@ -25,6 +28,9 @@ class GamePlayerActivity : WokaBaseActivity() { private var gamePlayerData: GamePlayerData? = null + private var clicksCount = 0 + + @SuppressLint("ClickableViewAccessibility") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityGamePlayerBinding.inflate(layoutInflater) @@ -49,6 +55,13 @@ class GamePlayerActivity : WokaBaseActivity() { } initWebView(it.gameUrl) } + + binding.webView.setOnTouchListener { _, event -> + if (event.action == MotionEvent.ACTION_DOWN){ + clicksCount++ + } + return@setOnTouchListener false + } } override fun onStart() { @@ -74,6 +87,8 @@ class GamePlayerActivity : WokaBaseActivity() { override fun onDestroy() { super.onDestroy() binding.webView.destroy() + + ClicksHelper.upsertClickEvent(ContentType.GAME, gamePlayerData?.id, null, clicksCount) } @SuppressLint("SetJavaScriptEnabled") diff --git a/app/src/main/java/com/woka/wokagames/playerr/GamePlayerData.kt b/app/src/main/java/com/woka/wokagames/playerr/GamePlayerData.kt index db3b917..d9b15cf 100644 --- a/app/src/main/java/com/woka/wokagames/playerr/GamePlayerData.kt +++ b/app/src/main/java/com/woka/wokagames/playerr/GamePlayerData.kt @@ -5,6 +5,7 @@ import kotlinx.parcelize.Parcelize @Parcelize data class GamePlayerData( + val id: Int?, val gameUrl: String, val landscape: Boolean = false ): Parcelable \ No newline at end of file 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 49cd176..90fa153 100644 --- a/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt +++ b/app/src/main/java/com/woka/wokagames/views/GamesActivity.kt @@ -95,8 +95,10 @@ class GamesActivity : WokaBaseActivity() { } } - override fun onDestroy() { - super.onDestroy() + @Suppress("DEPRECATION") + @Deprecated("Deprecated in Java") + override fun onBackPressed() { + super.onBackPressed() ClicksHelper.upsertClickEvent(ContentType.OTHERS) } @@ -143,6 +145,7 @@ class GamesActivity : WokaBaseActivity() { binding.apply { toolbar.backBtn.setOnClickListener { onBackPressedDispatcher.onBackPressed() + ClicksHelper.upsertClickEvent(ContentType.OTHERS) } retryBtn.setOnClickListener { @@ -190,7 +193,7 @@ class GamesActivity : WokaBaseActivity() { trailerBtn.setOnClickListener { gameData.game_url?.let { startActivity(Intent(this@GamesActivity, GamePlayerActivity::class.java).apply { - putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(it, gameData.screen_orientation == "Landscape")) + putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(gameData.id, it, gameData.screen_orientation == "Landscape")) }) } @@ -271,7 +274,7 @@ class GamesActivity : WokaBaseActivity() { watchCard.setOnClickListener { gameData.game_url?.let { startActivity(Intent(this@GamesActivity, GamePlayerActivity::class.java).apply { - putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(it, gameData.screen_orientation == "Landscape")) + putExtra(EXTRA_GAME_PLAYER_DATA, GamePlayerData(gameData.id, it, gameData.screen_orientation == "Landscape")) }) } diff --git a/build.gradle b/build.gradle index 7c27f8a..404b025 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,10 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + dependencies { + classpath libs.google.services + classpath libs.gradle + classpath libs.perf.plugin + } +}// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.androidApplication) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1e539ae..7ba78cf 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,9 +12,15 @@ constraintlayout = "2.1.4" navigationFragmentKtx = "2.7.7" navigationUiKtx = "2.7.7" navigationSafeArgs = "2.7.7" +onesignal = "5.1.20" roomKtx = "2.6.1" roomRuntime = "2.6.1" ksp = "2.0.0-1.0.24" +googleServices = "4.4.2" +firebaseAnalytics = "22.0.2" +firebasePerf = "21.0.1" +gradle = "8.1.0" +perfPlugin = "1.4.2" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -28,7 +34,13 @@ androidx-activity = { group = "androidx.activity", name = "activity", version.re androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" } androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" } +onesignal = { module = "com.onesignal:OneSignal", version.ref = "onesignal" } room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" } +google-services = { group = "com.google.gms", name = "google-services", version.ref = "googleServices" } +firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics", version.ref = "firebaseAnalytics" } +firebase-perf = { group = "com.google.firebase", name = "firebase-perf", version.ref = "firebasePerf" } +gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" } +perf-plugin = { group = "com.google.firebase", name = "perf-plugin", version.ref = "perfPlugin" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }