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:
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
48
app/src/main/java/com/woka/database/dao/VideoViewDao.kt
Normal file
48
app/src/main/java/com/woka/database/dao/VideoViewDao.kt
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
66
app/src/main/java/com/woka/database/helpers/RemoteSync.kt
Normal file
66
app/src/main/java/com/woka/database/helpers/RemoteSync.kt
Normal 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")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.woka.database.models.clicks
|
||||
package com.woka.database.models
|
||||
|
||||
enum class ContentType(val id: Int) {
|
||||
SERIES(1),
|
||||
@@ -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
|
||||
)
|
||||
@@ -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>>
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_16ssp"
|
||||
android:textAlignment="center"
|
||||
|
||||
/>
|
||||
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_16ssp"
|
||||
android:textAlignment="center"
|
||||
|
||||
/>
|
||||
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_16ssp"
|
||||
android:textAlignment="center"
|
||||
|
||||
/>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user