Integrated api for user_clicks.

Done some RnD and made RemoteSync.kt to sync clicks data from local room database to remote server with api call in batches.
Completed implementation and tested data with backend.

Integrated api for user_video_view api.

Done some RnD to calculated the duration of video viewed overall in LiveStreamPlayerActivity. - successful.

Created Database for VideoViewEvent, Dao, and VideoViewHelper to upsert data into local database.

MyListRepository changes to load only specific data in favorite listing when that particular module is changed. - successful and tested.

Created build to be shared with client.
This commit is contained in:
2024-08-14 20:48:39 +05:30
parent 0521ee8415
commit e4de3182c0
88 changed files with 460 additions and 127 deletions

View File

@@ -68,7 +68,7 @@ object AudioBookRepository {
private fun changeLikeLocally(id: String, isLiked: Boolean){
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadAudio = true
}
fun updateFavShow(audioBookData: AudioBookData, addToBookmark: Boolean){
@@ -92,6 +92,6 @@ object AudioBookRepository {
}
}
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadAudio = true
}
}

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.adapters.FavoriteViewHolder
import com.woka.utils.isNetworkConnected

View File

@@ -24,7 +24,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityAudioBooksBinding
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.networking.ApiResult

View File

@@ -5,11 +5,13 @@ import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.woka.database.dao.ClicksDao
import com.woka.database.dao.VideoViewDao
import com.woka.database.models.clicks.ClickEvent
import com.woka.database.models.videoview.VideoViewEvent
private const val DATABASE_NAME = "woka_local_db"
@Database(entities = [ClickEvent::class], version = 1)
@Database(entities = [ClickEvent::class, VideoViewEvent::class], version = 1)
abstract class AppDatabase : RoomDatabase(){
companion object{
@@ -31,4 +33,6 @@ abstract class AppDatabase : RoomDatabase(){
}
abstract fun clicksDao(): ClicksDao
abstract fun videoViewDao(): VideoViewDao
}

View File

@@ -1,14 +1,13 @@
package com.woka.database.dao
import android.util.Log
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import com.woka.database.models.clicks.ClickEvent
import com.woka.database.models.clicks.ContentType
import com.woka.utils.TAG
import com.woka.database.models.ContentType
/*
clickId will always in the following format
@@ -41,4 +40,10 @@ interface ClicksDao {
)
}
}
@Query("select * from click_events limit :batchSize")
suspend fun getClickEventBatch(batchSize: Int): List<ClickEvent>
@Delete
suspend fun deleteClickEvents(clickEvent: List<ClickEvent>): Int
}

View File

@@ -0,0 +1,48 @@
package com.woka.database.dao
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import com.woka.database.models.ContentType
import com.woka.database.models.videoview.VideoViewEvent
/*
viewId will always in the following format
${post_type}_${post_id}_${category_id}
*/
@Dao
interface VideoViewDao {
@Query("UPDATE video_view SET total_watch_duration = total_watch_duration + :watchDuration WHERE id = :viewId")
suspend fun updateAndGetRowCount(viewId: String, watchDuration: Long): Int
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(vararg videoViewEvent: VideoViewEvent)
@Transaction
suspend fun upsertVideoView(contentType: ContentType, watchDuration: Long, postId: Int, categoryId: Int = 0){
val viewId = "${contentType.id}_${postId}_${categoryId}"
val count = updateAndGetRowCount(viewId, watchDuration)
if (count == 0){
insert(
VideoViewEvent(
viewId,
postId,
contentType.id,
categoryId,
watchDuration
)
)
}
}
@Query("select * from video_view limit :batchSize")
suspend fun getVideoViewEventBatch(batchSize: Int = 10): List<VideoViewEvent>
@Delete
suspend fun deleteVideoViewEvents(videoViews: List<VideoViewEvent>): Int
}

View File

@@ -2,7 +2,7 @@ package com.woka.database.helpers
import com.woka.WokaApp.Companion.appDatabase
import com.woka.database.dao.ClicksDao
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

View File

@@ -0,0 +1,66 @@
package com.woka.database.helpers
import android.util.Log
import com.woka.WokaApp.Companion.appDatabase
import com.woka.database.remote.RemoteApiService
import com.woka.database.remote.models.RemoteClickEvent
import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper
import com.woka.networking.RetrofitHelper.handleApiCall
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
private const val SYNC_BATCH_COUNT = 10
object RemoteSync {
private const val TAG = "aditya_RemoteSync"
private val clicksDao = appDatabase?.clicksDao()
private val apiService = RetrofitHelper.getRetrofit().create(RemoteApiService::class.java)
fun syncClickEvents(){
CoroutineScope(Dispatchers.IO).launch {
Log.d(TAG, "syncClickEvents: CLICK EVENTS SYNC CALLED")
var roundCount = 0
while (true){
val clicksBatch = clicksDao?.getClickEventBatch(SYNC_BATCH_COUNT)
if (clicksDao == null || clicksBatch.isNullOrEmpty()){
Log.d(TAG, "syncClickEvents: RECEIVED BATCH IS EMPTY")
break
}
Log.d(TAG, "syncClickEvents: BATCH COUNT FROM DATABASE ${clicksBatch.size}")
when (val response = handleApiCall{ apiService.sendClickEvents(clicksBatch.map { RemoteClickEvent(it) })}){
is ApiResult.Error -> {
Log.e(TAG, "syncClickEvents: BATCH SYNC FAILED due to ${response.errorMessage}", response.error)
break
}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
Log.d(TAG, "syncClickEvents: BATCH SYNC IS SUCCESSFUL")
Log.d(TAG, "syncClickEvents: DELETING SYNCED DATA FROM LOCAL DATABASE")
val deleteCount = clicksDao.deleteClickEvents(clicksBatch)
Log.d(TAG, "syncClickEvents: $deleteCount ENTRIES ARE DELETED FROM LOCAL DATABASE")
if (deleteCount <= 0){
Log.e(TAG, "syncClickEvents: NO ENTRIES WERE DELETED FROM LOCAL DATABASE")
}
roundCount++
}
}
Log.d(TAG, "syncClickEvents: \n")
}
Log.d(TAG, "syncClickEvents: NUMBER OF ROUND : $roundCount")
}
}
}

View File

@@ -0,0 +1,22 @@
package com.woka.database.helpers
import com.woka.WokaApp.Companion.appDatabase
import com.woka.database.dao.VideoViewDao
import com.woka.database.models.ContentType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
object VideoViewHelper {
private val videoViewDao: VideoViewDao? = appDatabase?.videoViewDao()
fun upsertVideoView(contentType: ContentType, watchDuration: Long, postId: Int, categoryId: String? = null){
CoroutineScope(Dispatchers.IO).launch {
val categoryInt = try {
categoryId?.toIntOrNull()?:0
}catch (e: Exception){
0
}
videoViewDao?.upsertVideoView(contentType, watchDuration, postId, categoryInt)
}
}
}

View File

@@ -1,4 +1,4 @@
package com.woka.database.models.clicks
package com.woka.database.models
enum class ContentType(val id: Int) {
SERIES(1),

View File

@@ -0,0 +1,17 @@
package com.woka.database.models.videoview
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
private const val DB_TABLE_NAME = "video_view"
@Entity(tableName = DB_TABLE_NAME)
data class VideoViewEvent(
@PrimaryKey
@ColumnInfo(name = "id") val viewId: String,
@ColumnInfo(name = "post_id") val postId: Int,
@ColumnInfo(name = "post_type") val postType: Int,
@ColumnInfo(name = "categoryId") val categoryId: Int,
@ColumnInfo(name = "total_watch_duration") val watchDuration: Long
)

View File

@@ -0,0 +1,13 @@
package com.woka.database.remote
import com.woka.database.remote.models.RemoteClickEvent
import com.woka.networking.ApiResponse
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.POST
interface RemoteApiService {
@POST("v2/user_clicks")
suspend fun sendClickEvents(@Body clickEventList: List<RemoteClickEvent>): Response<ApiResponse<Any>>
}

View File

@@ -0,0 +1,18 @@
package com.woka.database.remote.models
import com.woka.database.models.clicks.ClickEvent
data class RemoteClickEvent(
val number_of_clicks: Int?,
val post_id: Int?,
val post_type: Int?,
val category_id: Int? = null,
val device_type: Int = 1
){
constructor(clickEvent: ClickEvent): this(
clickEvent.clickCount,
clickEvent.postId,
clickEvent.postType,
clickEvent.categoryId
)
}

View File

@@ -21,7 +21,7 @@ import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.audiobooks.views.AudioBooksActivity
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.FragmentHome1Binding
import com.woka.home.models.TimePeriod
import com.woka.home.viewmodels.HomeViewModel

View File

@@ -13,7 +13,7 @@ import com.woka.R
import com.woka.WokaApp
import com.woka.audiobooks.views.AudioBooksActivity
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.FragmentHome2Binding
import com.woka.home.viewmodels.HomeViewModel
import com.woka.home.views.FMActivity

View File

@@ -26,7 +26,7 @@ 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.database.models.ContentType
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.databinding.FragmentMyListBinding
import com.woka.home.mylist.MyListRepository
@@ -134,6 +134,8 @@ class MyListFragment : Fragment() {
binding.noSignInView.show()
}
updateListData()
return binding.root
}
@@ -411,6 +413,30 @@ class MyListFragment : Fragment() {
}
}
private fun updateListData(){
with(MyListRepository){
if (shallLoadSeriesEng){
onWebShowItemChanged("1")
}
if (shallLoadSeriesHin){
onWebShowItemChanged("18")
}
if (shallLoadKaraoke){
onKaraokeChanged()
}
if (shallLoadGames){
onGameChanged()
}
if (shallLoadAudio){
onAudioItemChanged()
}
}
}
private fun setObservers() {
binding.apply {
viewModel.localeChangeLiveData.observe(viewLifecycleOwner) {
@@ -535,6 +561,8 @@ class MyListFragment : Fragment() {
"1" -> {
it.english?.let {engList ->
if (engList.isNotEmpty()) {
binding.webSeriesEnglishView.show()
binding.noData.hide()
webSeriesEAdapter.submitList(engList)
} else {
onListGotEmpty(PostType.WEB_SERIES, true)
@@ -549,6 +577,8 @@ class MyListFragment : Fragment() {
"18" -> {
it.hindi?.let {hinList ->
if (hinList.isNotEmpty()) {
binding.webSeriesHindiView.show()
binding.noData.hide()
webSeriesHAdapter.submitList(hinList)
} else {
onListGotEmpty(PostType.WEB_SERIES, false)
@@ -683,7 +713,7 @@ class MyListFragment : Fragment() {
onAudioItemChanged()
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadAudio = false
}
clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id)
@@ -713,6 +743,8 @@ class MyListFragment : Fragment() {
is ApiResult.Success -> {
response.data?.result?.audio_data?.let {
if (it.isNotEmpty()) {
binding.audioBooksView.show()
binding.noData.hide()
audioBooksAdapter.submitList(it)
} else {
onListGotEmpty(PostType.AUDIO_BOOKS)
@@ -908,7 +940,7 @@ class MyListFragment : Fragment() {
onGameChanged()
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadGames = false
}
clickHelper.upsertClickEvent(ContentType.GAME, gameData.id)
@@ -938,6 +970,8 @@ class MyListFragment : Fragment() {
is ApiResult.Success -> {
response.data?.result?.game_data?.let {
if (it.isNotEmpty()) {
binding.gamesView.show()
binding.noData.hide()
gamesAdapter.submitList(it)
} else {
onListGotEmpty(PostType.GAMES)
@@ -1115,7 +1149,7 @@ class MyListFragment : Fragment() {
onKaraokeChanged()
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadKaraoke = false
}
clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id)
@@ -1145,6 +1179,8 @@ class MyListFragment : Fragment() {
is ApiResult.Success -> {
response.data?.result?.sing_karaoke_data?.let {
if (it.isNotEmpty()) {
binding.karaokeView.show()
binding.noData.hide()
karaokeAdapter.submitList(it)
} else {
onListGotEmpty(PostType.KARAOKE)

View File

@@ -66,39 +66,46 @@ object MyListRepository {
}
}
var shallLoadSeriesHin = false
var shallLoadSeriesEng = false
fun updateSeriesList(bookmarkedShowData: MutableList<BookmarkedShowData>, categoryId: String) {
when (categoryId){
"1" -> {
myFavData.result?.show_data?.english?.clear()
myFavData.result?.show_data?.english?.addAll(bookmarkedShowData)
shallLoadSeriesEng = false
}
"18" -> {
myFavData.result?.show_data?.hindi?.clear()
myFavData.result?.show_data?.hindi?.addAll(bookmarkedShowData)
shallLoadSeriesHin = false
}
}
shallLoadNewData = false
}
var shallLoadAudio = false
fun updateAudioList(bookmarkedShowData: MutableList<FavAudioBookData>) {
myFavData.result?.audio_data?.clear()
myFavData.result?.audio_data?.addAll(bookmarkedShowData)
shallLoadNewData = false
shallLoadAudio = false
}
var shallLoadGames = false
fun updateGameList(it: MutableList<FavGameData>) {
myFavData.result?.game_data?.clear()
myFavData.result?.game_data?.addAll(it)
shallLoadNewData = false
shallLoadGames = false
}
var shallLoadKaraoke = false
fun updateKaraokeList(it: MutableList<FavKaraokeData>) {
myFavData.result?.sing_karaoke_data?.clear()
myFavData.result?.sing_karaoke_data?.addAll(it)
shallLoadNewData = false
shallLoadKaraoke = false
}
}

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityFavoritesBinding
import com.woka.home.mylist.view.fragments.FavAudioFragment
import com.woka.home.mylist.view.fragments.FavGameFragment

View File

@@ -21,7 +21,7 @@ import com.woka.audiobooks.AudioBookRepository
import com.woka.audiobooks.adapters.AudioBooksAdapter
import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.MyListRepository
@@ -292,10 +292,10 @@ class FavAudioFragment : Fragment() {
moduleShowerDialog.setOnDismissListener {
if (itemRemovedFromDialog) {
// item was removed at last
// onAudioItemChanged()
onAudioItemChanged(audioBookData)
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadAudio = false
}
clickHelper.upsertClickEvent(ContentType.AUDIO, audioBookData.id)
@@ -361,4 +361,24 @@ class FavAudioFragment : Fragment() {
}
}
private fun onAudioItemChanged(audioBookData: AudioBookData) {
if (viewModel.lastPage){
val position = adapter.currentList.indexOfFirst { it.id == audioBookData.id }
if (position >= 0 && position < adapter.currentList.size){
val list = adapter.currentList.toMutableList()
list.removeAt(position)
if (list.isNotEmpty()){
adapter.submitList(list)
}else{
binding.noData.show()
binding.rvFavorites.hide()
}
}
}else{
viewModel.resetPagination()
viewModel.loadFavorites(ContentType.AUDIO)
}
}
}

View File

@@ -17,11 +17,10 @@ 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.database.models.ContentType
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.FavGameData
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult
import com.woka.utils.hide
@@ -297,10 +296,10 @@ class FavGameFragment : Fragment() {
moduleShowerDialog.setOnDismissListener {
if (itemRemovedFromDialog) {
// item was removed at last
// onGameChanged()
onGameChanged(gameData)
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadGames = false
}
clickHelper.upsertClickEvent(ContentType.GAME, gameData.id)
@@ -315,4 +314,24 @@ class FavGameFragment : Fragment() {
clickHelper.upsertClickEvent(ContentType.GAME, gameData.id)
}
private fun onGameChanged(gameData: GameData) {
if (viewModel.lastPage){
val position = adapter.currentList.indexOfFirst { it.id == gameData.id }
if (position >= 0 && position < adapter.currentList.size){
val list = adapter.currentList.toMutableList()
list.removeAt(position)
if (list.isNotEmpty()){
adapter.submitList(list)
}else{
binding.noData.show()
binding.rvFavorites.hide()
}
}
}else{
viewModel.resetPagination()
viewModel.loadFavorites(ContentType.GAME)
}
}
}

View File

@@ -17,7 +17,7 @@ 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.database.models.ContentType
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.MyListRepository
@@ -321,10 +321,10 @@ class FavKaraokeFragment : Fragment() {
moduleShowerDialog.setOnDismissListener {
if (itemRemovedFromDialog) {
// item was removed at last
// onKaraokeChanged()
onKaraokeChanged(karaokeData)
} else {
// item was not at last removed
MyListRepository.setLoadNewDataFlag(false)
MyListRepository.shallLoadKaraoke = false
}
clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id)
@@ -339,5 +339,24 @@ class FavKaraokeFragment : Fragment() {
clickHelper.upsertClickEvent(ContentType.KARAOKE_VIDEO, karaokeData.id)
}
private fun onKaraokeChanged(karaokeData: KaraokeData) {
if (viewModel.lastPage){
val position = adapter.currentList.indexOfFirst { it.id == karaokeData.id }
if (position >= 0 && position < adapter.currentList.size){
val list = adapter.currentList.toMutableList()
list.removeAt(position)
if (list.isNotEmpty()){
adapter.submitList(list)
}else{
binding.noData.show()
binding.rvFavorites.hide()
}
}
}else{
viewModel.resetPagination()
viewModel.loadFavorites(ContentType.KARAOKE_VIDEO)
}
}
}

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentFavoritesBinding
import com.woka.home.mylist.viewmodel.FavoriteViewModel
import com.woka.networking.ApiResult

View File

@@ -4,7 +4,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.home.mylist.models.MyListResponse
import com.woka.home.mylist.models.Result
import com.woka.home.mylist.models.ShowDataResponse
@@ -147,5 +147,12 @@ class FavoriteViewModel : ViewModel() {
fun resetPagination() {
nextPageToLoad = 0
lastPage = false
myListResponse.result?.show_data?.english?.clear()
myListResponse.result?.show_data?.hindi?.clear()
myListResponse.result?.audio_data?.clear()
myListResponse.result?.game_data?.clear()
myListResponse.result?.sing_karaoke_data?.clear()
}
}

View File

@@ -8,7 +8,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityNotificationsBinding
import com.woka.karaoke.views.KaraokeActivity
import com.woka.networking.ApiResult

View File

@@ -8,7 +8,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityAboutBinding
import com.woka.utils.WokaBaseActivity
import com.woka.utils.lightStatusBar

View File

@@ -9,7 +9,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityFaqBinding
import com.woka.modules.faqs.FAQsRepository
import com.woka.networking.ApiResult

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.FaqViewHolderBinding
import com.woka.modules.faqs.models.Faq
import com.woka.utils.hide

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityUserProfileBinding
import com.woka.networking.ApiResult
import com.woka.userPreference.UserType

View File

@@ -16,7 +16,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivitySupportBinding
import com.woka.networking.ApiResult
import com.woka.utils.ProgressView

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityExploreWokaBinding
import com.woka.karaoke.views.KaraokeActivity
import com.woka.modules.blogs.view.BlogsActivity

View File

@@ -13,7 +13,7 @@ import androidx.media3.common.Player
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.database.models.ContentType
import com.woka.databinding.ActivityFmactivityBinding
import com.woka.utils.TAG
import com.woka.utils.WokaBaseActivity

View File

@@ -27,7 +27,7 @@ import com.woka.BuildConfig
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.database.models.ContentType
import com.woka.databinding.ActivityHomeBinding
import com.woka.home.fragments.Home1Fragment
import com.woka.home.fragments.Home2Fragment

View File

@@ -18,7 +18,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityMoreHomeBinding
import com.woka.databinding.DialogBlogsBinding
import com.woka.modules.blogs.BlogsAdapter

View File

@@ -70,7 +70,7 @@ object KaraokeRepository {
private fun changeLikeLocally(id: String, isLiked: Boolean){
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadKaraoke = true
}
fun updateFavShow(karaoke: KaraokeData, addToBookmark: Boolean){
@@ -94,7 +94,7 @@ object KaraokeRepository {
}
}
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadKaraoke = true
}
}

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.ShowViewHolderBinding
import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.models.listing.KaraokeData

View File

@@ -32,7 +32,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityKaraokePlayerrBinding
import com.woka.players.models.PlayBackState
import com.woka.utils.TAG

View File

@@ -18,7 +18,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityKaraokeBinding
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.karaoke.KaraokeRepository

View File

@@ -14,7 +14,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityBlogsBinding
import com.woka.databinding.DialogBlogsBinding
import com.woka.modules.blogs.BlogsGridAdapter

View File

@@ -6,7 +6,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityDisclaimerBinding
import com.woka.utils.WokaBaseActivity

View File

@@ -14,7 +14,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityWebViewBinding
import com.woka.utils.WEBSITE_BASE_URL
import com.woka.utils.WokaBaseActivity

View File

@@ -14,7 +14,7 @@ import androidx.recyclerview.widget.RecyclerView
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.database.models.ContentType
import com.woka.databinding.WokaSongViewHolderBinding
import com.woka.modules.wokasongs.models.SongData
import com.woka.utils.formatTime

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentAgeSelectBinding
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16

View File

@@ -9,7 +9,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentChildListBinding
import com.woka.onboard.adapters.ChildAdapter
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG

View File

@@ -14,7 +14,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentGetCodeBinding
import com.woka.networking.ApiResult
import com.woka.networking.NoSuccessError

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentGetEmailBinding
import com.woka.networking.ApiResult
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentGetMoreInfoBinding
import com.woka.networking.ApiResult
import com.woka.onboard.views.InterestTopicView

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentLanguageBinding
import com.woka.onboard.views.OnboardActivity
import com.woka.utils.LOCALE_ENGLISH

View File

@@ -5,12 +5,11 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController
import com.woka.R
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.FragmentNewPasswordBinding
import com.woka.networking.ApiResult
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG

View File

@@ -17,7 +17,7 @@ import com.google.firebase.ktx.Firebase
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.database.models.ContentType
import com.woka.databinding.FragmentOnboardBinding
import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult

View File

@@ -14,7 +14,7 @@ import com.onesignal.OneSignal
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.database.models.ContentType
import com.woka.databinding.FragmentSelectAvatarBinding
import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult

View File

@@ -15,7 +15,7 @@ import com.google.firebase.ktx.Firebase
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.database.models.ContentType
import com.woka.databinding.FragmentSignInBinding
import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult

View File

@@ -7,12 +7,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.View.VISIBLE
import android.view.ViewGroup
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.database.models.ContentType
import com.woka.databinding.FragmentSignUpBinding
import com.woka.networking.ApiResult
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG

View File

@@ -10,7 +10,7 @@ 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.database.models.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

View File

@@ -1,7 +1,7 @@
package com.woka.players.models
import android.os.Parcelable
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import kotlinx.parcelize.Parcelize
@Parcelize

View File

@@ -18,7 +18,7 @@ import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents
import com.jwplayer.pub.api.fullscreen.FullscreenHandler
import com.jwplayer.pub.api.media.playlists.PlaylistItem
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.ActivityLiveStreamPlayerBinding
import com.woka.players.KeepScreenOnHandler
import com.woka.players.models.PlayBackState
@@ -51,6 +51,9 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
private var errorRetryCount = ERROR_RETRY_COUNT
private var playbackStartTime: Long = 0
private var totalPlaybackDuration: Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
@@ -95,6 +98,16 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
}
override fun onPause() {
super.onPause()
player.pause()
}
override fun onResume() {
super.onResume()
player.pause()
}
override fun onDestroy() {
super.onDestroy()
player.stop()
@@ -128,13 +141,20 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
binding.playerView.show()
binding.errorView.hide()
upsertClickEvent()
errorRetryCount = ERROR_RETRY_COUNT
playbackStartTime = System.currentTimeMillis()
upsertClickEvent()
})
player.addListener(EventType.PAUSE, VideoPlayerEvents.OnPauseListener {
playbackState = PlayBackState.PAUSED
if (playbackStartTime > 0) {
val elapsed = System.currentTimeMillis() - playbackStartTime
totalPlaybackDuration += elapsed
playbackStartTime = 0
}
upsertClickEvent()
})
player.addListener(EventType.ERROR, VideoPlayerEvents.OnErrorListener {
@@ -146,6 +166,12 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
binding.playerView.hide()
binding.errorView.show()
}
if (playbackStartTime > 0) {
val elapsed = System.currentTimeMillis() - playbackStartTime
totalPlaybackDuration += elapsed
playbackStartTime = 0
}
})
(getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager).registerNetworkCallback(

View File

@@ -19,7 +19,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityPlayerBinding
import com.woka.players.KeepScreenOnHandler
import com.woka.players.models.PlayBackState

View File

@@ -9,7 +9,7 @@ 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.database.models.ContentType
import com.woka.databinding.CartAddressViewHolderBinding
import com.woka.shop.models.addresslisting.ParentAddressData
import com.woka.shop.viewmodels.CartViewModel

View File

@@ -107,14 +107,14 @@ class ShopViewModel: ViewModel() {
}
// product listing
private val _productListingLiveData = MutableLiveData<ApiResult<HashSet<ShopProduct>>>()
val productListingLiveData: LiveData<ApiResult<HashSet<ShopProduct>>>
private val _productListingLiveData = MutableLiveData<ApiResult<ArrayList<ShopProduct>>>()
val productListingLiveData: LiveData<ApiResult<ArrayList<ShopProduct>>>
get() = _productListingLiveData
var productPagingData = HashMap<String, PagingData>()
// product data for every super-category, category and sub-category
private var productDataMap = HashMap<String, HashSet<ShopProduct>>()
private var productDataMap = HashMap<String, ArrayList<ShopProduct>>()
fun loadProducts(superCategoryId: String, categoryId: String, subCategoryId: String?) {
val key = "${superCategoryId}_${categoryId}_$subCategoryId"
@@ -161,7 +161,7 @@ class ShopViewModel: ViewModel() {
is ApiResult.Success -> {
response.data?.let { data ->
data.result?.filterNotNull()?.let { newList ->
val currentList = productDataMap.getOrDefault(key, HashSet())
val currentList = productDataMap.getOrDefault(key, ArrayList())
currentList.addAll(newList)
productDataMap[key] = currentList

View File

@@ -6,7 +6,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityAddressBinding
import com.woka.utils.WokaBaseActivity

View File

@@ -1,13 +1,12 @@
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.database.models.ContentType
import com.woka.databinding.ActivityCartBinding
import com.woka.shop.viewmodels.CartViewModel
import com.woka.utils.WokaBaseActivity

View File

@@ -2,7 +2,6 @@ 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
@@ -12,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityMyOrdersBinding
import com.woka.databinding.BsOrderTrackingBinding
import com.woka.networking.ApiResult

View File

@@ -2,7 +2,6 @@ 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
@@ -12,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityShopBinding
import com.woka.shop.viewmodels.ShopViewModel
import com.woka.shop.views.CartActivity.Companion.EXTRA_CURRENT_PRODUCT

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentAddAddressBinding
import com.woka.networking.ApiResult
import com.woka.shop.models.addaddress.AddAddressRequestData

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentPinCodeBinding
import com.woka.networking.ApiResult
import com.woka.shop.viewmodels.AddressViewModel

View File

@@ -2,7 +2,6 @@ package com.woka.shop.views.fragments.cart
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -14,7 +13,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentCartBinding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CartAdapter
@@ -23,7 +22,6 @@ import com.woka.shop.views.CartActivity.Companion.EXTRA_CURRENT_PRODUCT
import com.woka.userPreference.UserType
import com.woka.utils.DecisionDialog
import com.woka.utils.ProgressView
import com.woka.utils.TAG
import com.woka.utils.hide
import com.woka.utils.show
import com.woka.utils.toast

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentOrderSummaryBinding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CouponAdapter

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentParentAddressBinding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.ParentAddressAdapter
@@ -121,6 +121,9 @@ class ParentAddressFragment : Fragment() {
binding.rvAddresses.smoothScrollToPosition(adapter.currentList.size)
} finally {
viewModel.addNewAddress(parentAddressData)
binding.noDataView.hide()
binding.rvAddresses.show()
}
}
}

View File

@@ -13,7 +13,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentProductBinding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.ProductImagesAdapter

View File

@@ -9,7 +9,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentShop1Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CategoryAdapter

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentShop2Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CategoryAdapter

View File

@@ -11,7 +11,7 @@ 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.database.models.ContentType
import com.woka.databinding.FragmentShop3Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.ShopProductAdapter
@@ -167,7 +167,7 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener {
}
is ApiResult.Success -> {
it.data?.toMutableList()?.let { productList ->
it.data?.let { productList ->
binding.rvProducts.show()
binding.productShimmer.hide()

View File

@@ -9,7 +9,7 @@ import android.view.LayoutInflater
import android.view.View.VISIBLE
import android.view.WindowManager
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.LayoutDecisionDialogBinding
class DecisionDialog(context: Context) {

View File

@@ -9,7 +9,7 @@ import android.graphics.drawable.InsetDrawable
import android.view.LayoutInflater
import android.view.WindowManager
import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.clicks.ContentType
import com.woka.database.models.ContentType
import com.woka.databinding.LayoutNoSignInDialogBinding
import com.woka.onboard.views.OnboardActivity

View File

@@ -125,7 +125,8 @@ object WebSeriesRepository {
private fun changeLikeLocally(id: String, isLiked: Boolean){
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadSeriesEng = true
MyListRepository.shallLoadSeriesHin = true
}
fun updateFavShow(showData: ShowData, addToBookmark: Boolean, categoryId: String){
@@ -152,6 +153,7 @@ object WebSeriesRepository {
}
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
if (categoryId == "1") MyListRepository.shallLoadSeriesEng = true
else MyListRepository.shallLoadSeriesHin = true
}
}

View File

@@ -9,7 +9,7 @@ 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.database.models.ContentType
import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected

View File

@@ -5,7 +5,7 @@ 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.database.models.ContentType
import com.woka.modules.categorymodels.CategoriesResponse
import com.woka.networking.ApiResult
import com.woka.players.models.VideoPlayList

View File

@@ -8,7 +8,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityWebSeriesBinding
import com.woka.utils.WokaBaseActivity
import com.woka.webseries.models.ShowData

View File

@@ -22,7 +22,7 @@ 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.database.models.ContentType
import com.woka.databinding.DialogContinueEpisodeBinding
import com.woka.databinding.FragmentWebSeriesBinding
import com.woka.networking.ApiResult

View File

@@ -22,7 +22,7 @@ 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.database.models.ContentType
import com.woka.databinding.DialogEpisodeBinding
import com.woka.databinding.FragmentWebShowBinding
import com.woka.networking.ApiResult

View File

@@ -58,7 +58,7 @@ object GamesRepository {
private fun changeLikeLocally(id: String, isLiked: Boolean){
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadGames = true
}
fun updateFavShow(gameData: GameData, addToBookmark: Boolean){
@@ -83,6 +83,6 @@ object GamesRepository {
}
// now, not handling data locally but setting flag to load the favorite list
MyListRepository.setLoadNewDataFlag(true)
MyListRepository.shallLoadGames = true
}
}

View File

@@ -10,7 +10,7 @@ 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.database.models.ContentType
import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected

View File

@@ -12,7 +12,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityGamePlayerBinding
import com.woka.utils.DecisionDialog
import com.woka.utils.WokaBaseActivity

View File

@@ -18,7 +18,7 @@ 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.database.models.ContentType
import com.woka.databinding.ActivityGamesBinding
import com.woka.databinding.DialogModuleShowerBinding
import com.woka.networking.ApiResult

View File

@@ -181,6 +181,7 @@
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_16ssp"
android:textAlignment="center"
/>

View File

@@ -181,6 +181,7 @@
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_16ssp"
android:textAlignment="center"
/>

View File

@@ -181,6 +181,7 @@
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_16ssp"
android:textAlignment="center"
/>

View File

@@ -25,48 +25,53 @@
android:layout_height="@dimen/_60sdp"
/>
<LinearLayout
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="10"
android:layout_marginTop="5dp"
android:orientation="horizontal">
android:weightSum="10">
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="6.5"
tools:text="Hello there"
android:layout_marginEnd="5dp"
android:ellipsize="end"
android:fontFamily="@font/exo_2_semibold"
android:textColor="@color/color_primary"
android:textSize="@dimen/_9ssp"
android:maxLines="3"
android:ellipsize="end"
android:textColor="@color/color_primary"
android:textSize="@dimen/_9ssp"
tools:text="Hello there"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/price"
/>
<TextView
android:id="@+id/price"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3.5"
tools:text="$ 200"
android:ellipsize="end"
android:fontFamily="@font/exo_2_semibold"
android:maxLines="3"
android:textAlignment="textEnd"
android:textColor="@color/color_primary"
android:textSize="@dimen/_9ssp"
android:textAlignment="textEnd"
tools:text="$ 200"
android:maxLines="3"
android:ellipsize="end"
android:layout_marginStart="3dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/title"
app:layout_constraintBottom_toBottomOf="@id/title"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>