Home1Fragment night theme animations handling

Added shimmers in HomeMoreActivity

Integrated NoSignInDialog into all modules
for handling guest user click for like and add to fav

Cleaned all code from the start
This commit is contained in:
2024-07-19 16:55:36 +05:30
parent 8a3ca80f09
commit 720331bc22
60 changed files with 453 additions and 293 deletions

View File

@@ -1,11 +1,13 @@
package com.woka package com.woka
import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import com.woka.userPreference.UserPreference import com.woka.userPreference.UserPreference
class WokaApp: Application() { class WokaApp: Application() {
companion object{ companion object{
@SuppressLint("StaticFieldLeak")
var userPrefs: UserPreference? = null var userPrefs: UserPreference? = null
} }

View File

@@ -12,6 +12,7 @@ import com.woka.WokaApp.Companion.userPrefs
import com.woka.audiobooks.AudioBookRepository import com.woka.audiobooks.AudioBookRepository
import com.woka.audiobooks.models.audiodata.AudioBookData import com.woka.audiobooks.models.audiodata.AudioBookData
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast import com.woka.utils.toast
@@ -21,7 +22,8 @@ import kotlin.math.max
class AudioBooksAdapter( class AudioBooksAdapter(
private val context: Context, private val context: Context,
private var onBookClicked: (AudioBookData) -> Unit, private var onBookClicked: (AudioBookData) -> Unit,
private var onBookChanged: (id: Int, AudioBookData) -> Unit private var onBookChanged: (id: Int, AudioBookData) -> Unit,
private val noSignInListener: () -> Unit
): ListAdapter<AudioBookData, AudioBooksAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) { ): ListAdapter<AudioBookData, AudioBooksAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) {
inner class AudioBookViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root) inner class AudioBookViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root)
@@ -92,6 +94,11 @@ class AudioBooksAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
AudioBookRepository.likeUnLikeAudioBook( AudioBookRepository.likeUnLikeAudioBook(
"${audioBook.id}", "${audioBook.id}",
!like.isSelected !like.isSelected
@@ -125,6 +132,11 @@ class AudioBooksAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
AudioBookRepository.updateFavShow( AudioBookRepository.updateFavShow(
audioBook, audioBook,
!fav.isSelected !fav.isSelected

View File

@@ -29,10 +29,13 @@ import com.woka.networking.ApiResult
import com.woka.players.models.VideoPlayList import com.woka.players.models.VideoPlayList
import com.woka.players.views.PlayerActivity import com.woka.players.views.PlayerActivity
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.WokaBaseActivity import com.woka.utils.WokaBaseActivity
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.isNetworkConnected
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Calendar import java.util.Calendar
import java.util.Locale import java.util.Locale
@@ -49,6 +52,8 @@ class AudioBooksActivity : WokaBaseActivity() {
private lateinit var dialogBinding: DialogModuleShowerBinding private lateinit var dialogBinding: DialogModuleShowerBinding
private lateinit var audioDialog: Dialog private lateinit var audioDialog: Dialog
private lateinit var noSignInDialog: NoSignInDialog
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
@@ -66,7 +71,9 @@ class AudioBooksActivity : WokaBaseActivity() {
viewModel = ViewModelProvider(this)[AudioBookViewModel::class.java] viewModel = ViewModelProvider(this)[AudioBookViewModel::class.java]
audioBookAdapter = AudioBooksAdapter(this, ::onBookClicked, ::onBookChanged) audioBookAdapter = AudioBooksAdapter(this, ::onBookClicked, ::onBookChanged){
noSignInDialog.show()
}
continueAudioAdapter = continueAudioAdapter =
ContinueAudioAdapter(this, ::onContinueBookClicked, ::onContinueBookChanged) ContinueAudioAdapter(this, ::onContinueBookClicked, ::onContinueBookChanged)
@@ -74,6 +81,8 @@ class AudioBooksActivity : WokaBaseActivity() {
audioDialog = Dialog(this) audioDialog = Dialog(this)
audioDialog.setContentView(dialogBinding.root) audioDialog.setContentView(dialogBinding.root)
noSignInDialog = NoSignInDialog(this)
initViews() initViews()
initAudioDialog() initAudioDialog()
@@ -411,6 +420,16 @@ class AudioBooksActivity : WokaBaseActivity() {
} }
like.setOnClickListener { like.setOnClickListener {
if (!isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
AudioBookRepository.likeUnLikeAudioBook( AudioBookRepository.likeUnLikeAudioBook(
"${audioBookData.id}", "${audioBookData.id}",
!like.isSelected !like.isSelected
@@ -437,6 +456,16 @@ class AudioBooksActivity : WokaBaseActivity() {
} }
fav.setOnClickListener { fav.setOnClickListener {
if (!isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
AudioBookRepository.updateFavShow( AudioBookRepository.updateFavShow(
audioBookData, audioBookData,
!fav.isSelected !fav.isSelected

View File

@@ -60,8 +60,6 @@ class Home1Fragment : Fragment(), Listener {
viewModel = ViewModelProvider(it)[HomeViewModel::class.java] viewModel = ViewModelProvider(it)[HomeViewModel::class.java]
} }
currentBackground = null
initViews() initViews()
initPlayerView() initPlayerView()
@@ -442,16 +440,6 @@ class Home1Fragment : Fragment(), Listener {
} }
companion object { companion object {
private var instance: Home1Fragment? = null fun getInstance() = Home1Fragment()
private val any = Any()
fun getInstance(): Home1Fragment{
return synchronized(any){
if (instance == null){
instance = Home1Fragment()
}
return@synchronized instance!!
}
}
} }
} }

View File

@@ -2,25 +2,22 @@ package com.woka.home.fragments
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.woka.R import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp
import com.woka.databinding.FragmentHome2Binding import com.woka.databinding.FragmentHome2Binding
import com.woka.home.views.FMActivity
import com.woka.home.viewmodels.HomeViewModel import com.woka.home.viewmodels.HomeViewModel
import com.woka.userdata.userDataModels.UserDataResponse import com.woka.home.views.FMActivity
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.players.views.LiveStreamPlayerActivity import com.woka.players.views.LiveStreamPlayerActivity
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.TAG import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
class Home2Fragment : Fragment() { class Home2Fragment : Fragment() {

View File

@@ -7,7 +7,7 @@ import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import com.woka.R import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FavViewHolderBinding import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.models.BookmarkedShowData import com.woka.home.mylist.models.BookmarkedShowData
import com.woka.home.mylist.models.PostType import com.woka.home.mylist.models.PostType
@@ -18,15 +18,23 @@ import com.woka.webseries.WebSeriesRepository
import com.woka.webseries.models.ShowData import com.woka.webseries.models.ShowData
import java.util.concurrent.Executors import java.util.concurrent.Executors
class WebSeriesAdapter(private val context: Context, class WebSeriesAdapter(
private val categoryId: String, private val context: Context,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit), private val categoryId: String,
config: AsyncDifferConfig<BookmarkedShowData>): ListAdapter<BookmarkedShowData, FavoriteViewHolder>(config) { private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)
) : ListAdapter<BookmarkedShowData, FavoriteViewHolder>(DIFF_CONFIG) {
companion object{ companion object {
private val DIFF_UTIL = object : DiffUtil.ItemCallback<BookmarkedShowData>(){ private val DIFF_UTIL = object : DiffUtil.ItemCallback<BookmarkedShowData>() {
override fun areItemsTheSame(oldItem: BookmarkedShowData, newItem: BookmarkedShowData): Boolean = oldItem.id == newItem.id override fun areItemsTheSame(
override fun areContentsTheSame(oldItem: BookmarkedShowData, newItem: BookmarkedShowData): Boolean { oldItem: BookmarkedShowData,
newItem: BookmarkedShowData
): Boolean = oldItem.id == newItem.id
override fun areContentsTheSame(
oldItem: BookmarkedShowData,
newItem: BookmarkedShowData
): Boolean {
return oldItem.title == newItem.title && return oldItem.title == newItem.title &&
oldItem.is_liked == newItem.is_liked && oldItem.is_liked == newItem.is_liked &&
oldItem.likes_count == newItem.likes_count oldItem.likes_count == newItem.likes_count
@@ -41,10 +49,6 @@ class WebSeriesAdapter(private val context: Context,
var onShowClickListener: ((BookmarkedShowData, String) -> Unit)? = null var onShowClickListener: ((BookmarkedShowData, String) -> Unit)? = null
var onLikeChanged: ((Int) -> Unit)? = null var onLikeChanged: ((Int) -> Unit)? = null
constructor(context: Context,
categoryId: String,
onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): this(context, categoryId, onListEmptyListener, DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder( return FavoriteViewHolder(
FavViewHolderBinding.inflate( FavViewHolderBinding.inflate(
@@ -63,14 +67,14 @@ class WebSeriesAdapter(private val context: Context,
image.loadImage(it) image.loadImage(it)
} }
showData.content_more_details?.let {moreDetailsList -> showData.content_more_details?.let { moreDetailsList ->
title.text = if (moreDetailsList.isNotEmpty()){ title.text = if (moreDetailsList.isNotEmpty()) {
if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){ if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
moreDetailsList[1]?.title moreDetailsList[1]?.title
}else{ } else {
moreDetailsList[0]?.title moreDetailsList[0]?.title
} }
}else{ } else {
showData.title showData.title
} }
} }
@@ -87,22 +91,15 @@ class WebSeriesAdapter(private val context: Context,
} }
like.setOnClickListener { like.setOnClickListener {
if (!context.isNetworkConnected()){ if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet)) context.toast(context.getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
if (like.isSelected){ WebSeriesRepository.likeUnLikeShow(
WebSeriesRepository.likeUnLikeShow( "${showData.id}",
"${showData.id}", !like.isSelected
false )
)
}else{
WebSeriesRepository.likeUnLikeShow(
"${showData.id}",
true
)
}
like.isSelected = !like.isSelected like.isSelected = !like.isSelected
likeCount.text = "${showData.likes_count}" likeCount.text = "${showData.likes_count}"
@@ -115,36 +112,36 @@ class WebSeriesAdapter(private val context: Context,
} }
fav.show() fav.show()
if (showData.isBookMarked(categoryId)){ if (showData.isBookMarked(categoryId)) {
fav.isSelected = true fav.isSelected = true
}else{ } else {
val currentList = currentList.toMutableList() val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition) currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList) submitList(currentList)
if (currentList.isEmpty()){ if (currentList.isEmpty()) {
onListEmptyListener(PostType.WEB_SERIES, categoryId == "1") onListEmptyListener(PostType.WEB_SERIES, categoryId == "1")
} }
} }
fav.setOnClickListener { fav.setOnClickListener {
if (!context.isNetworkConnected()){ if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet)) context.toast(context.getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
if (fav.isSelected){ if (fav.isSelected) {
WebSeriesRepository.updateFavShow( WebSeriesRepository.updateFavShow(
ShowData(showData), ShowData(showData),
false, false,
categoryId categoryId
) )
val currentList = currentList.toMutableList() val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition) currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList) submitList(currentList)
if (currentList.isEmpty()){ if (currentList.isEmpty()) {
onListEmptyListener(PostType.WEB_SERIES, categoryId == "1") onListEmptyListener(PostType.WEB_SERIES, categoryId == "1")
} }
} }

View File

@@ -1,6 +1,5 @@
package com.woka.home.notifications package com.woka.home.notifications
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
@@ -9,10 +8,7 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.databinding.NotificationViewHolderBinding import com.woka.databinding.NotificationViewHolderBinding
import com.woka.home.notifications.models.NotificationData import com.woka.home.notifications.models.NotificationData
import com.woka.utils.TAG
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.time.LocalDate
import java.time.temporal.ChronoUnit
import java.util.Calendar import java.util.Calendar
import java.util.Locale import java.util.Locale
import java.util.concurrent.Executors import java.util.concurrent.Executors
@@ -50,6 +46,7 @@ class NotificationAdapter(config: AsyncDifferConfig<NotificationData>): ListAdap
) )
} }
@Suppress("DEPRECATION")
override fun onBindViewHolder(holder: NotificationViewHolder, position: Int) { override fun onBindViewHolder(holder: NotificationViewHolder, position: Int) {
val notification = getItem(position) val notification = getItem(position)
notification.created_at?.let { notification.created_at?.let {

View File

@@ -1,18 +1,15 @@
package com.woka.home.notifications package com.woka.home.notifications
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.woka.R import com.woka.R
import com.woka.databinding.ActivityNotificationsBinding import com.woka.databinding.ActivityNotificationsBinding
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.utils.TAG
import com.woka.utils.WokaBaseActivity import com.woka.utils.WokaBaseActivity
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
class NotificationsActivity : WokaBaseActivity() { class NotificationsActivity : WokaBaseActivity() {

View File

@@ -178,7 +178,7 @@ class UserProfileActivity : WokaBaseActivity() {
genderM.setCardBackgroundColor(Color.WHITE) genderM.setCardBackgroundColor(Color.WHITE)
genderM.cardElevation = 5f genderM.cardElevation = 5f
genderF.setCardBackgroundColor(resources.getColor(R.color.white_50)) genderF.setCardBackgroundColor(getColor(R.color.white_50))
genderF.cardElevation = 0f genderF.cardElevation = 0f
} }
@@ -186,15 +186,15 @@ class UserProfileActivity : WokaBaseActivity() {
genderF.setCardBackgroundColor(Color.WHITE) genderF.setCardBackgroundColor(Color.WHITE)
genderF.cardElevation = 5f genderF.cardElevation = 5f
genderM.setCardBackgroundColor(resources.getColor(R.color.white_50)) genderM.setCardBackgroundColor(getColor(R.color.white_50))
genderM.cardElevation = 0f genderM.cardElevation = 0f
} }
Gender.NONE -> { Gender.NONE -> {
genderM.setCardBackgroundColor(resources.getColor(R.color.white_50)) genderM.setCardBackgroundColor(getColor(R.color.white_50))
genderM.cardElevation = 0f genderM.cardElevation = 0f
genderF.setCardBackgroundColor(resources.getColor(R.color.white_50)) genderF.setCardBackgroundColor(getColor(R.color.white_50))
genderF.cardElevation = 0f genderF.cardElevation = 0f
} }
} }

View File

@@ -1,21 +1,16 @@
package com.woka.home.viewmodels package com.woka.home.viewmodels
import android.content.Context import android.content.Context
import android.net.Uri
import android.util.Log
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.media3.common.MediaItem import androidx.media3.common.MediaItem
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.Player.Listener
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import com.woka.home.views.BottomNavigation.Companion.HOME import com.woka.home.views.BottomNavigation.Companion.HOME
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.userdata.UserRepository import com.woka.userdata.UserRepository
import com.woka.utils.TAG
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
class HomeViewModel : ViewModel() { class HomeViewModel : ViewModel() {

View File

@@ -38,12 +38,12 @@ class FMActivity : WokaBaseActivity() {
val webSettings: WebSettings = binding.webView.getSettings() val webSettings: WebSettings = binding.webView.getSettings()
webSettings.javaScriptEnabled = true webSettings.javaScriptEnabled = true
webSettings.allowFileAccess = false; webSettings.allowFileAccess = false
webSettings.allowContentAccess = false; webSettings.allowContentAccess = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
webSettings.safeBrowsingEnabled = true webSettings.safeBrowsingEnabled = true
}; }
binding.webView.setWebViewClient(WebViewClient()) binding.webView.setWebViewClient(WebViewClient())

View File

@@ -127,6 +127,7 @@ class HomeActivity : WokaBaseActivity(),
} }
} }
@Deprecated("Deprecated in Java")
override fun onBackPressed() { override fun onBackPressed() {
if (binding.homeDrawer.isDrawerOpen(GravityCompat.END)){ if (binding.homeDrawer.isDrawerOpen(GravityCompat.END)){
binding.homeDrawer.closeDrawer(GravityCompat.END) binding.homeDrawer.closeDrawer(GravityCompat.END)
@@ -137,6 +138,7 @@ class HomeActivity : WokaBaseActivity(),
decisionDialog.message = getString(R.string.do_you_want_to_exit_from_the_woka_app) decisionDialog.message = getString(R.string.do_you_want_to_exit_from_the_woka_app)
decisionDialog.setPositiveButton(getString(R.string.yes)){ decisionDialog.setPositiveButton(getString(R.string.yes)){
@Suppress("DEPRECATION")
super.onBackPressed() super.onBackPressed()
} }
@@ -228,7 +230,6 @@ class HomeActivity : WokaBaseActivity(),
getString(R.string.login_register) getString(R.string.login_register)
}else{ }else{
// showing menu options // showing menu options
val type = userPrefs?.userType
if (userPrefs?.userType == UserType.GUARDIAN){ if (userPrefs?.userType == UserType.GUARDIAN){
sbAddChild.show() sbAddChild.show()
} }

View File

@@ -15,7 +15,6 @@ import androidx.media3.common.MediaItem
import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.SimpleItemAnimator
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.woka.R import com.woka.R
import com.woka.WokaApp
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ActivityMoreHomeBinding import com.woka.databinding.ActivityMoreHomeBinding
import com.woka.databinding.DialogBlogsBinding import com.woka.databinding.DialogBlogsBinding
@@ -128,19 +127,27 @@ class MoreHomeActivity : WokaBaseActivity() {
is ApiResult.Error -> { is ApiResult.Error -> {
binding.blogsTxt.hide() binding.blogsTxt.hide()
binding.rvBlogs.hide() binding.rvBlogs.hide()
binding.blogsShimmer.hide()
} }
is ApiResult.Loading -> { is ApiResult.Loading -> {
binding.blogsTxt.hide() binding.blogsTxt.show()
binding.blogsShimmer.show()
binding.rvBlogs.hide() binding.rvBlogs.hide()
} }
is ApiResult.Success -> { is ApiResult.Success -> {
it.data?.blogs?.let { blogList -> it.data?.blogs?.let { blogList ->
binding.blogsTxt.show() blogsAdapter.submitList(blogList){
binding.rvBlogs.show() binding.blogsShimmer.hide()
binding.blogsTxt.show()
blogsAdapter.submitList(blogList) binding.rvBlogs.show()
}
}?:{
binding.blogsTxt.hide()
binding.rvBlogs.hide()
binding.blogsShimmer.hide()
} }
} }
@@ -153,18 +160,19 @@ class MoreHomeActivity : WokaBaseActivity() {
is ApiResult.Error -> { is ApiResult.Error -> {
binding.wokaSongsTxt.hide() binding.wokaSongsTxt.hide()
binding.rvWokaSongs.hide() binding.rvWokaSongs.hide()
binding.songsShimmer.hide()
} }
is ApiResult.Loading -> { is ApiResult.Loading -> {
binding.wokaSongsTxt.hide() binding.wokaSongsTxt.show()
binding.songsShimmer.show()
binding.rvWokaSongs.hide() binding.rvWokaSongs.hide()
} }
is ApiResult.Success -> { is ApiResult.Success -> {
it.data?.paint_data?.let { songList -> it.data?.paint_data?.let { songList ->
binding.wokaSongsTxt.show()
binding.rvWokaSongs.show()
val mediaItems = mutableListOf<MediaItem>() val mediaItems = mutableListOf<MediaItem>()
@@ -188,6 +196,14 @@ class MoreHomeActivity : WokaBaseActivity() {
songsAdapter.submitSongList(songList, mediaItems) songsAdapter.submitSongList(songList, mediaItems)
binding.wokaSongsTxt.show()
binding.rvWokaSongs.show()
binding.songsShimmer.hide()
}?:{
binding.wokaSongsTxt.hide()
binding.rvWokaSongs.hide()
binding.songsShimmer.hide()
} }
} }
} }
@@ -215,7 +231,7 @@ class MoreHomeActivity : WokaBaseActivity() {
titleTxt = it[0]?.title titleTxt = it[0]?.title
descriptionTxt = it[0]?.article descriptionTxt = it[0]?.article
if (it.size > 1 && WokaApp.userPrefs?.appLanguage == "hi"){ if (it.size > 1 && userPrefs?.appLanguage == "hi"){
titleTxt = it[1]?.title titleTxt = it[1]?.title
descriptionTxt = it[1]?.article descriptionTxt = it[1]?.article
} }

View File

@@ -13,6 +13,7 @@ import com.woka.databinding.FavViewHolderBinding
import com.woka.karaoke.KaraokeRepository import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.models.continuesing.ContinueKaraokeData import com.woka.karaoke.models.continuesing.ContinueKaraokeData
import com.woka.karaoke.models.listing.KaraokeData import com.woka.karaoke.models.listing.KaraokeData
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast import com.woka.utils.toast
@@ -22,7 +23,8 @@ import kotlin.math.max
class ContinueKaraokeAdapter( class ContinueKaraokeAdapter(
private val context: Context, private val context: Context,
private var onKaraokeClicked: (KaraokeData) -> Unit, private var onKaraokeClicked: (KaraokeData) -> Unit,
private var onKaraokeChanged: (id: Int, isFromContinue: Boolean, KaraokeData) -> Unit private var onKaraokeChanged: (id: Int, isFromContinue: Boolean, KaraokeData) -> Unit,
private val noSignInListener: () -> Unit
): ListAdapter<ContinueKaraokeData, ContinueKaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) { ): ListAdapter<ContinueKaraokeData, ContinueKaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) {
inner class AudioBookViewHolder(val binding: FavViewHolderBinding): ViewHolder(binding.root) inner class AudioBookViewHolder(val binding: FavViewHolderBinding): ViewHolder(binding.root)
@@ -93,6 +95,11 @@ class ContinueKaraokeAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
KaraokeRepository.likeUnLikeSong( KaraokeRepository.likeUnLikeSong(
"${karaokeData.id}", "${karaokeData.id}",
!like.isSelected !like.isSelected
@@ -129,6 +136,11 @@ class ContinueKaraokeAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
KaraokeRepository.updateFavShow( KaraokeRepository.updateFavShow(
KaraokeData(karaokeData), KaraokeData(karaokeData),
!fav.isSelected !fav.isSelected

View File

@@ -12,6 +12,7 @@ import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.karaoke.KaraokeRepository import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.models.listing.KaraokeData import com.woka.karaoke.models.listing.KaraokeData
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast import com.woka.utils.toast
@@ -21,7 +22,8 @@ import kotlin.math.max
class KaraokeAdapter( class KaraokeAdapter(
private val context: Context, private val context: Context,
private var onKaraokeClicked: (KaraokeData) -> Unit, private var onKaraokeClicked: (KaraokeData) -> Unit,
private var onKaraokeChanged: (id: Int, isContinue: Boolean, KaraokeData) -> Unit private var onKaraokeChanged: (id: Int, isContinue: Boolean, KaraokeData) -> Unit,
private val noSignInListener: () -> Unit
): ListAdapter<KaraokeData, KaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) { ): ListAdapter<KaraokeData, KaraokeAdapter.AudioBookViewHolder>(ASYNC_DIFF_UTIL) {
inner class AudioBookViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root) inner class AudioBookViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root)
@@ -92,6 +94,11 @@ class KaraokeAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
KaraokeRepository.likeUnLikeSong( KaraokeRepository.likeUnLikeSong(
"${karaokeData.id}", "${karaokeData.id}",
!like.isSelected !like.isSelected
@@ -128,6 +135,11 @@ class KaraokeAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
KaraokeRepository.updateFavShow( KaraokeRepository.updateFavShow(
karaokeData, karaokeData,
!fav.isSelected !fav.isSelected

View File

@@ -108,6 +108,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
WindowCompat.getInsetsController(window, window.decorView) WindowCompat.getInsetsController(window, window.decorView)
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
@Suppress("DEPRECATION")
karaokePlayerData = intent.getParcelableExtra(EXTRA_KARAOKE_DATA) karaokePlayerData = intent.getParcelableExtra(EXTRA_KARAOKE_DATA)
networkCallback = object : ConnectivityManager.NetworkCallback() { networkCallback = object : ConnectivityManager.NetworkCallback() {
@@ -486,6 +487,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
} }
} }
@Suppress("DEPRECATION")
private fun startRecording() { private fun startRecording() {
recorder = MediaRecorder().apply { recorder = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC) setAudioSource(MediaRecorder.AudioSource.MIC)
@@ -658,7 +660,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
AlertDialog.Builder(this@KaraokePlayerActivity) AlertDialog.Builder(this@KaraokePlayerActivity)
.setMessage(getString(R.string.file_saved_to_your_music_folder)) .setMessage(getString(R.string.file_saved_to_your_music_folder))
.setPositiveButton(getString(R.string.ok_caps)) { dialog, which -> .setPositiveButton(getString(R.string.ok_caps)) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
} }
.create() .create()
@@ -668,7 +670,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
AlertDialog.Builder(this@KaraokePlayerActivity) AlertDialog.Builder(this@KaraokePlayerActivity)
.setMessage(getString(R.string.file_saved_to_your_music_folder)) .setMessage(getString(R.string.file_saved_to_your_music_folder))
.setPositiveButton(getString(R.string.ok_caps)) { dialog, which -> .setPositiveButton(getString(R.string.ok_caps)) { dialog, _ ->
dialog.dismiss() dialog.dismiss()
} }
.create() .create()

View File

@@ -29,10 +29,13 @@ import com.woka.karaoke.player.KaraokePlayerData
import com.woka.karaoke.viewmodels.KaraokeViewModel import com.woka.karaoke.viewmodels.KaraokeViewModel
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.WokaBaseActivity import com.woka.utils.WokaBaseActivity
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.isNetworkConnected
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Calendar import java.util.Calendar
import java.util.Locale import java.util.Locale
@@ -50,6 +53,7 @@ class KaraokeActivity : WokaBaseActivity() {
private lateinit var dialogBinding: DialogModuleShowerBinding private lateinit var dialogBinding: DialogModuleShowerBinding
private lateinit var karaokeDialog: Dialog private lateinit var karaokeDialog: Dialog
private lateinit var noSignInDialog: NoSignInDialog
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -68,14 +72,19 @@ class KaraokeActivity : WokaBaseActivity() {
viewModel = ViewModelProvider(this)[KaraokeViewModel::class.java] viewModel = ViewModelProvider(this)[KaraokeViewModel::class.java]
karaokeAdapter = KaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) karaokeAdapter = KaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) {
continueKaraokeAdapter = noSignInDialog.show()
ContinueKaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) }
continueKaraokeAdapter = ContinueKaraokeAdapter(this, ::onKaraokeClicked, ::onKaraokeChanged) {
noSignInDialog.show()
}
dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater) dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater)
karaokeDialog = Dialog(this) karaokeDialog = Dialog(this)
karaokeDialog.setContentView(dialogBinding.root) karaokeDialog.setContentView(dialogBinding.root)
noSignInDialog = NoSignInDialog(this)
initViews() initViews()
initKaraokeDialog() initKaraokeDialog()
@@ -84,7 +93,7 @@ class KaraokeActivity : WokaBaseActivity() {
setObservers() setObservers()
if (!viewModel.karaokeLiveData.isInitialized){ if (!viewModel.karaokeLiveData.isInitialized) {
viewModel.loadKaraokeSongs() viewModel.loadKaraokeSongs()
} }
} }
@@ -254,16 +263,26 @@ class KaraokeActivity : WokaBaseActivity() {
} }
like.setOnClickListener { like.setOnClickListener {
if (isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
KaraokeRepository.likeUnLikeSong( KaraokeRepository.likeUnLikeSong(
"${karaokeData.id}", "${karaokeData.id}",
!like.isSelected !like.isSelected
) )
karaokeData.likes_count?.let { karaokeData.likes_count?.let {
karaokeData.likes_count = if (like.isSelected){ karaokeData.likes_count = if (like.isSelected) {
// unlike // unlike
max(0, it - 1) max(0, it - 1)
}else{ } else {
// like // like
it + 1 it + 1
} }
@@ -280,6 +299,16 @@ class KaraokeActivity : WokaBaseActivity() {
} }
fav.setOnClickListener { fav.setOnClickListener {
if (isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
KaraokeRepository.updateFavShow( KaraokeRepository.updateFavShow(
karaokeData, karaokeData,
!fav.isSelected !fav.isSelected
@@ -340,8 +369,8 @@ class KaraokeActivity : WokaBaseActivity() {
} }
private fun setObservers() { private fun setObservers() {
viewModel.karaokeLiveData.observe(this){ viewModel.karaokeLiveData.observe(this) {
when(it){ when (it) {
is ApiResult.Error -> { is ApiResult.Error -> {
binding.shimmer.hide() binding.shimmer.hide()
if (karaokeAdapter.currentList.size == 0) { if (karaokeAdapter.currentList.size == 0) {
@@ -358,6 +387,7 @@ class KaraokeActivity : WokaBaseActivity() {
binding.loadMoreBtn.show() binding.loadMoreBtn.show()
} }
} }
is ApiResult.Loading -> { is ApiResult.Loading -> {
if (karaokeAdapter.currentList.size == 0) { if (karaokeAdapter.currentList.size == 0) {
// loading first data // loading first data
@@ -369,9 +399,10 @@ class KaraokeActivity : WokaBaseActivity() {
binding.loadMoreBtn.hide() binding.loadMoreBtn.hide()
} }
} }
is ApiResult.Success -> { is ApiResult.Success -> {
it.data?.let {newList -> it.data?.let { newList ->
if (newList.isNotEmpty()){ if (newList.isNotEmpty()) {
binding.rvKaraoke.show() binding.rvKaraoke.show()
binding.singTxt.show() binding.singTxt.show()
binding.trailerView.show() binding.trailerView.show()
@@ -383,15 +414,15 @@ class KaraokeActivity : WokaBaseActivity() {
binding.loadMoreBtn.text = getString(R.string.load_more) binding.loadMoreBtn.text = getString(R.string.load_more)
binding.loadMoreBtn.setVisibility(!viewModel.lastPage) binding.loadMoreBtn.setVisibility(!viewModel.lastPage)
if (karaokeAdapter.currentList.isEmpty()){ if (karaokeAdapter.currentList.isEmpty()) {
// first data load // first data load
if (userPrefs?.userType != UserType.GUEST && !viewModel.karaokeContinueLiveData.isInitialized){ if (userPrefs?.userType != UserType.GUEST && !viewModel.karaokeContinueLiveData.isInitialized) {
viewModel.loadContinueData() viewModel.loadContinueData()
} }
loadTrailerData(newList[0]) loadTrailerData(newList[0])
karaokeAdapter.submitList(newList) karaokeAdapter.submitList(newList)
}else{ } else {
// loaded more data // loaded more data
karaokeAdapter.notifyItemRangeInserted( karaokeAdapter.notifyItemRangeInserted(
karaokeAdapter.currentList.size, karaokeAdapter.currentList.size,

View File

@@ -1,13 +1,7 @@
package com.woka.modules package com.woka.modules
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.woka.modules.categorymodels.CategoriesResponse
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper import com.woka.networking.RetrofitHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.FormBody import okhttp3.FormBody
object ModuleRepository { object ModuleRepository {
@@ -39,24 +33,4 @@ object ModuleRepository {
} }
} }
// categories listing
private val _showCategoryLiveData = MutableLiveData<ApiResult<CategoriesResponse>>()
val showCategoryLiveData: LiveData<ApiResult<CategoriesResponse>>
get() = _showCategoryLiveData
fun showCategories(){
CoroutineScope(Dispatchers.IO).launch {
_showCategoryLiveData.postValue(ApiResult.Loading())
_showCategoryLiveData.postValue(
RetrofitHelper.handleApiCall {
moduleApiService.categoryListing(
FormBody.Builder()
.add("module_id", "7")
.build()
)
}
)
}
}
} }

View File

@@ -1,17 +1,12 @@
package com.woka.modules.blogs package com.woka.modules.blogs
import android.text.Html
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import com.jwplayer.pub.api.JWPlayer
import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.BlogViewHolderBinding import com.woka.databinding.BlogViewHolderBinding
import com.woka.modules.blogs.models.Blog import com.woka.modules.blogs.models.Blog
import java.util.concurrent.Executors import java.util.concurrent.Executors

View File

@@ -50,12 +50,12 @@ class WebViewActivity : WokaBaseActivity() {
val webSettings: WebSettings = binding.webView.getSettings() val webSettings: WebSettings = binding.webView.getSettings()
webSettings.javaScriptEnabled = true webSettings.javaScriptEnabled = true
webSettings.allowFileAccess = false; webSettings.allowFileAccess = false
webSettings.allowContentAccess = false; webSettings.allowContentAccess = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
webSettings.safeBrowsingEnabled = true webSettings.safeBrowsingEnabled = true
}; }
binding.webView.setWebViewClient(SecureWebViewClient(binding.progressBar)) binding.webView.setWebViewClient(SecureWebViewClient(binding.progressBar))

View File

@@ -1,5 +1,6 @@
package com.woka.modules.wokasongs package com.woka.modules.wokasongs
import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
@@ -146,12 +147,14 @@ class WokaSongsAdapter(context: Context): RecyclerView.Adapter<WokaSongsAdapter.
}else{ }else{
playBtn.show() playBtn.show()
playBtn.setImageResource(R.drawable.ic_play) playBtn.setImageResource(R.drawable.ic_play)
currentTime.text = root.context.getString(R.string._00_00)
progressBar.hide() progressBar.hide()
} }
} }
else -> { else -> {
playBtn.show() playBtn.show()
playBtn.setImageResource(R.drawable.ic_play) playBtn.setImageResource(R.drawable.ic_play)
currentTime.text = root.context.getString(R.string._00_00)
progressBar.hide() progressBar.hide()
} }
} }
@@ -160,7 +163,9 @@ class WokaSongsAdapter(context: Context): RecyclerView.Adapter<WokaSongsAdapter.
}else super.onBindViewHolder(holder, position, payloads) }else super.onBindViewHolder(holder, position, payloads)
} }
override fun onBindViewHolder(holder: SongViewHolder, position: Int) { override fun onBindViewHolder(holder: SongViewHolder, pos: Int) {
val position = holder.absoluteAdapterPosition
if (position >= songList.size) return if (position >= songList.size) return
val songData = songList[position] val songData = songList[position]
@@ -226,6 +231,7 @@ class WokaSongsAdapter(context: Context): RecyclerView.Adapter<WokaSongsAdapter.
} }
} }
@SuppressLint("NotifyDataSetChanged")
fun submitSongList(list: List<SongData?>, mediaItems: MutableList<MediaItem>) { fun submitSongList(list: List<SongData?>, mediaItems: MutableList<MediaItem>) {
songList.clear() songList.clear()
for (song in list){ for (song in list){

View File

@@ -19,7 +19,7 @@ class AgeSelectionFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentAgeSelectBinding.inflate(inflater, container, false) binding = FragmentAgeSelectBinding.inflate(inflater, container, false)
activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
activity?.window?.statusBarColor = Color.parseColor("#6ed5fe") activity?.window?.statusBarColor = Color.parseColor("#6ed5fe")

View File

@@ -33,7 +33,7 @@ class ChildListFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentChildListBinding.inflate(inflater, container, false) binding = FragmentChildListBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java] viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]

View File

@@ -1,16 +1,14 @@
package com.woka.onboard.fragments package com.woka.onboard.fragments
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer
import android.util.Log import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.core.widget.addTextChangedListener import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
@@ -66,7 +64,7 @@ class GetCodeFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentGetCodeBinding.inflate(inflater, container, false) binding = FragmentGetCodeBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java] viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]

View File

@@ -2,12 +2,11 @@ package com.woka.onboard.fragments
import android.os.Bundle import android.os.Bundle
import android.util.Patterns import android.util.Patterns
import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.woka.R import com.woka.R
@@ -54,7 +53,7 @@ class GetEmailFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentGetEmailBinding.inflate(inflater, container, false) binding = FragmentGetEmailBinding.inflate(inflater, container, false)
activity?.let { activity?.let {

View File

@@ -37,7 +37,7 @@ class GetMoreInfoFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentGetMoreInfoBinding.inflate(inflater, container, false) binding = FragmentGetMoreInfoBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
@@ -136,7 +136,7 @@ class GetMoreInfoFragment : Fragment() {
viewModel.selectedDOB.get(Calendar.YEAR), viewModel.selectedDOB.get(Calendar.YEAR),
viewModel.selectedDOB.get(Calendar.MONTH), viewModel.selectedDOB.get(Calendar.MONTH),
viewModel.selectedDOB.get(Calendar.DAY_OF_MONTH) viewModel.selectedDOB.get(Calendar.DAY_OF_MONTH)
) { v, year, monthOfYear, dayOfMonth -> ) { _, year, monthOfYear, dayOfMonth ->
val cal = Calendar.getInstance() val cal = Calendar.getInstance()
cal.set(Calendar.YEAR, year) cal.set(Calendar.YEAR, year)
cal.set(Calendar.MONTH, monthOfYear) cal.set(Calendar.MONTH, monthOfYear)
@@ -148,6 +148,7 @@ class GetMoreInfoFragment : Fragment() {
} }
@Suppress("DEPRECATION")
private fun selectGender(gender: Gender) { private fun selectGender(gender: Gender) {
binding.apply { binding.apply {
when (gender) { when (gender) {

View File

@@ -28,7 +28,7 @@ class LanguageFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentLanguageBinding.inflate(inflater, container, false) binding = FragmentLanguageBinding.inflate(inflater, container, false)
progressView = ProgressView(requireContext(), "please wait...") progressView = ProgressView(requireContext(), "please wait...")
return binding.root return binding.root

View File

@@ -36,7 +36,7 @@ class NewPasswordFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentNewPasswordBinding.inflate(inflater, container, false) binding = FragmentNewPasswordBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java] viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]

View File

@@ -39,7 +39,7 @@ class OnboardFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentOnboardBinding.inflate(inflater, container, false) binding = FragmentOnboardBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
it.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) it.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)

View File

@@ -58,6 +58,11 @@ class SelectAvatarFragment : Fragment() {
return binding.root return binding.root
} }
override fun onDestroyView() {
super.onDestroyView()
viewModel.clearRegisterUserData()
}
private fun clickEvents() { private fun clickEvents() {
binding.apply { binding.apply {
backBtn.setOnClickListener { backBtn.setOnClickListener {

View File

@@ -37,7 +37,7 @@ class SignInFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentSignInBinding.inflate(inflater, container, false) binding = FragmentSignInBinding.inflate(inflater, container, false)
activity?.let { activity?.let {
it.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) it.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
@@ -174,6 +174,7 @@ class SignInFragment : Fragment() {
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
viewModel.clearLoginLiveData() viewModel.clearLoginLiveData()
viewModel.clearLoginProceedLiveData()
viewModel.clearGuestLoginData() viewModel.clearGuestLoginData()
} }

View File

@@ -56,7 +56,7 @@ class SignUpFragment : Fragment() {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentSignUpBinding.inflate(inflater, container, false) binding = FragmentSignUpBinding.inflate(inflater, container, false)
activity?.let { activity?.let {

View File

@@ -37,7 +37,7 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View? { ): View {
binding = FragmentSplashBinding.inflate(inflater, container, false) binding = FragmentSplashBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }

View File

@@ -1,10 +1,8 @@
package com.woka.onboard.mvvm package com.woka.onboard.mvvm
import com.woka.WokaApp import com.woka.WokaApp
import com.woka.networking.ApiResponse
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper.handleApiCall import com.woka.networking.RetrofitHelper.handleApiCall
import com.woka.networking.RetrofitHelper.handleApiResponse
import com.woka.onboard.models.AvatarList import com.woka.onboard.models.AvatarList
import com.woka.onboard.models.ChildListResponse import com.woka.onboard.models.ChildListResponse
import com.woka.onboard.models.ForgotPasswrodOTPResponse import com.woka.onboard.models.ForgotPasswrodOTPResponse
@@ -14,11 +12,7 @@ import com.woka.onboard.models.LoginResponse
import com.woka.onboard.models.RegisterRequestData import com.woka.onboard.models.RegisterRequestData
import com.woka.onboard.models.RegisterResponse import com.woka.onboard.models.RegisterResponse
import com.woka.onboard.models.VerifyEmail import com.woka.onboard.models.VerifyEmail
import com.woka.utils.NO_INTERNET_MESSAGE
import com.woka.utils.UNKNOWN_ERROR_MESSAGE
import okhttp3.FormBody import okhttp3.FormBody
import retrofit2.Response
import java.net.UnknownHostException
class OnboardRepository(private val apiService: OnboardApiService) { class OnboardRepository(private val apiService: OnboardApiService) {

View File

@@ -19,7 +19,6 @@ import com.woka.onboard.models.RegisterResponse
import com.woka.onboard.models.VerifyEmail import com.woka.onboard.models.VerifyEmail
import com.woka.utils.Gender import com.woka.utils.Gender
import kotlinx.coroutines.async import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.util.Calendar import java.util.Calendar
@@ -238,7 +237,7 @@ class OnboardViewModel: ViewModel(){
} }
// otp count down timer // otp count down timer
private val OTP_RESEND_COUNT_DOWN_TIME = 10 * 60 * 1000L // 10 min private val otpCountDownTime = 10 * 60 * 1000L // 10 min
private var countDownTimer: CountDownTimer? = null private var countDownTimer: CountDownTimer? = null
private var _otpResendTimeLiveData = MutableLiveData<Long>() private var _otpResendTimeLiveData = MutableLiveData<Long>()
@@ -247,7 +246,7 @@ class OnboardViewModel: ViewModel(){
fun startOTPTimeCountDown(){ fun startOTPTimeCountDown(){
countDownTimer?.cancel() countDownTimer?.cancel()
countDownTimer = object : CountDownTimer(OTP_RESEND_COUNT_DOWN_TIME, 1000){ countDownTimer = object : CountDownTimer(otpCountDownTime, 1000){
override fun onTick(millisUntilFinished: Long) { override fun onTick(millisUntilFinished: Long) {
_otpResendTimeLiveData.postValue(millisUntilFinished) _otpResendTimeLiveData.postValue(millisUntilFinished)
} }

View File

@@ -60,10 +60,10 @@ class OnboardActivity : WokaBaseActivity() {
.setPopUpTo(R.id.onboardFragment, true) .setPopUpTo(R.id.onboardFragment, true)
.build() .build()
) )
}else{
player = MediaPlayer.create(this, R.raw.audiotwo)
player?.isLooping = true
} }
player = MediaPlayer.create(this, R.raw.audiotwo)
player?.isLooping = true
} }
override fun onStart() { override fun onStart() {

View File

@@ -5,9 +5,6 @@ import android.net.ConnectivityManager.NetworkCallback
import android.net.Network import android.net.Network
import android.net.NetworkRequest import android.net.NetworkRequest
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.ViewGroup import android.view.ViewGroup
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@@ -15,7 +12,6 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.jwplayer.pub.api.JWPlayer import com.jwplayer.pub.api.JWPlayer
import com.jwplayer.pub.api.PlayReason
import com.jwplayer.pub.api.configuration.PlayerConfig import com.jwplayer.pub.api.configuration.PlayerConfig
import com.jwplayer.pub.api.events.EventType import com.jwplayer.pub.api.events.EventType
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents
@@ -24,7 +20,6 @@ import com.jwplayer.pub.api.media.playlists.PlaylistItem
import com.woka.databinding.ActivityLiveStreamPlayerBinding import com.woka.databinding.ActivityLiveStreamPlayerBinding
import com.woka.players.KeepScreenOnHandler import com.woka.players.KeepScreenOnHandler
import com.woka.players.models.PlayBackState import com.woka.players.models.PlayBackState
import com.woka.utils.TAG
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.show import com.woka.utils.show

View File

@@ -55,6 +55,7 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler {
WindowCompat.getInsetsController(window, window.decorView) WindowCompat.getInsetsController(window, window.decorView)
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars()) windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
@Suppress("DEPRECATION")
videoPlayList = intent.getParcelableExtra(EXTRA_PLAY_LIST) videoPlayList = intent.getParcelableExtra(EXTRA_PLAY_LIST)
playingIndex = intent.getIntExtra(EXTRA_PLAY_INDEX, 0) playingIndex = intent.getIntExtra(EXTRA_PLAY_INDEX, 0)

View File

@@ -15,7 +15,6 @@ import com.woka.onboard.views.OnboardActivity
import com.woka.userdata.UserRepository import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.UserData import com.woka.userdata.userDataModels.UserData
import com.woka.userdata.userDataModels.UserDataResponse import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.webseries.WebSeriesRepository
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch import kotlinx.coroutines.launch

View File

@@ -1,11 +1,9 @@
package com.woka.userdata package com.woka.userdata
import com.woka.audiobooks.models.continuedata.ContinueAudioResponse
import com.woka.home.mylist.models.MyListResponse import com.woka.home.mylist.models.MyListResponse
import com.woka.home.notifications.models.NotificationData import com.woka.home.notifications.models.NotificationData
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResponse import com.woka.networking.ApiResponse
import com.woka.webseries.models.ContinueEpisodeResponse import com.woka.userdata.userDataModels.UserDataResponse
import okhttp3.FormBody import okhttp3.FormBody
import retrofit2.Response import retrofit2.Response
import retrofit2.http.Body import retrofit2.http.Body

View File

@@ -15,7 +15,6 @@ import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import com.woka.R import com.woka.R
import kotlin.reflect.KFunction
class AdiImageView: FrameLayout { class AdiImageView: FrameLayout {

View File

@@ -7,7 +7,6 @@ import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.util.Log
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
@@ -19,8 +18,6 @@ import androidx.fragment.app.Fragment
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import java.util.Locale import java.util.Locale
import kotlin.math.ceil import kotlin.math.ceil
import kotlin.math.round
import kotlin.math.roundToLong
fun Window.lightStatusBar(lightStatus: Boolean = false){ fun Window.lightStatusBar(lightStatus: Boolean = false){
WindowCompat.getInsetsController(this, decorView).isAppearanceLightStatusBars = lightStatus WindowCompat.getInsetsController(this, decorView).isAppearanceLightStatusBars = lightStatus
@@ -52,6 +49,8 @@ fun View.setVisibility(show: Boolean){
else hide() else hide()
} }
@Suppress("DEPRECATION")
fun Context.changeLocale(language: String){ fun Context.changeLocale(language: String){
val locale = Locale(language) val locale = Locale(language)
Locale.setDefault(locale) Locale.setDefault(locale)

View File

@@ -24,7 +24,6 @@ class NoSignInDialog(context: Context) {
dialog = Dialog(context) dialog = Dialog(context)
dialog.setContentView(binding.getRoot()) dialog.setContentView(binding.getRoot())
dialog.setCancelable(false)
binding.signIm.setOnClickListener { binding.signIm.setOnClickListener {
dismiss() dismiss()
@@ -33,6 +32,8 @@ class NoSignInDialog(context: Context) {
}) })
} }
binding.closeBtn.setOnClickListener { dismiss() }
try { try {
val back = ColorDrawable(Color.TRANSPARENT) val back = ColorDrawable(Color.TRANSPARENT)
val inset = InsetDrawable(back, 50) val inset = InsetDrawable(back, 50)
@@ -61,12 +62,6 @@ class NoSignInDialog(context: Context) {
return this return this
} }
fun closeListener(click: () -> Unit){
binding.closeBtn.setOnClickListener {
click()
}
}
fun show() = dialog.show() fun show() = dialog.show()
fun dismiss() = dialog.dismiss() fun dismiss() = dialog.dismiss()

View File

@@ -15,8 +15,8 @@ import com.woka.R
class PressableCard : FrameLayout { class PressableCard : FrameLayout {
enum class PressableType(value: Int){ enum class PressableType {
SCALE(0), FADE(1); SCALE, FADE;
} }
constructor(context: Context?) : super(context!!) constructor(context: Context?) : super(context!!)

View File

@@ -1 +0,0 @@
package com.woka.utils

View File

@@ -2,9 +2,7 @@ package com.woka.utils
import android.content.Context import android.content.Context
import android.content.res.Configuration import android.content.res.Configuration
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import kotlin.math.min import kotlin.math.min

View File

@@ -7,11 +7,9 @@ import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ContinueShowViewHolderBinding import com.woka.databinding.ContinueShowViewHolderBinding
import com.woka.webseries.models.ContinueEpisodeData import com.woka.webseries.models.ContinueEpisodeData
import com.woka.webseries.models.ShowData
import java.util.concurrent.Executors import java.util.concurrent.Executors
class ContinueEpisodeAdapter(val context: Context, class ContinueEpisodeAdapter(val context: Context,

View File

@@ -1,4 +1,4 @@
package com.woka.webseries.adapters; package com.woka.webseries.adapters
import android.content.Context import android.content.Context

View File

@@ -12,7 +12,7 @@ import com.woka.modules.categorymodels.Category
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.show import com.woka.utils.show
class SpinnerAdapter(context: Context, private val list: List<Category>, ): ArrayAdapter<Category>(context, 0, list){ class SpinnerAdapter(context: Context, private val list: List<Category>): ArrayAdapter<Category>(context, 0, list){
var currentSelection: Int = 0 var currentSelection: Int = 0

View File

@@ -1,4 +1,4 @@
package com.woka.webseries.adapters; package com.woka.webseries.adapters
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater

View File

@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.R import com.woka.R
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast import com.woka.utils.toast
@@ -19,7 +20,8 @@ import kotlin.math.max
class WebSeriesShowAdapter( class WebSeriesShowAdapter(
private val context: Context, private val context: Context,
private var onShowClicked: (ShowData, String) -> Unit, private var onShowClicked: (ShowData, String) -> Unit,
private var onShowCommonDataChange: ((ShowData, String) -> Unit)? = null private var onShowCommonDataChange: ((ShowData, String) -> Unit)? = null,
private val noSignInListener: () -> Unit
): RecyclerView.Adapter<WebSeriesShowAdapter.ShowViewHolder>() { ): RecyclerView.Adapter<WebSeriesShowAdapter.ShowViewHolder>() {
inner class ShowViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root) inner class ShowViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root)
@@ -85,6 +87,11 @@ class WebSeriesShowAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
WebSeriesRepository.likeUnLikeShow("${showData.id}", !like.isSelected) WebSeriesRepository.likeUnLikeShow("${showData.id}", !like.isSelected)
showData.likes_count?.let { showData.likes_count?.let {
@@ -117,6 +124,11 @@ class WebSeriesShowAdapter(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
categoryId?.let { categoryId?.let {
WebSeriesRepository.updateFavShow( WebSeriesRepository.updateFavShow(
showData, showData,

View File

@@ -1,8 +0,0 @@
package com.woka.webseries.views.fragments
import com.woka.webseries.models.ShowData
import java.io.Serializable
interface ShowChangeInterface: Serializable {
fun onShowDataChanged(showData: ShowData, categoryId: String)
}

View File

@@ -29,6 +29,7 @@ import com.woka.players.views.PlayerActivity
import com.woka.players.views.PlayerActivity.Companion.EXTRA_PLAY_INDEX import com.woka.players.views.PlayerActivity.Companion.EXTRA_PLAY_INDEX
import com.woka.players.views.PlayerActivity.Companion.EXTRA_PLAY_LIST import com.woka.players.views.PlayerActivity.Companion.EXTRA_PLAY_LIST
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.lightStatusBar import com.woka.utils.lightStatusBar
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
@@ -56,6 +57,8 @@ class WebSeriesFragment private constructor(): Fragment() {
private var loadingMore = false private var loadingMore = false
private lateinit var noSignInDialog: NoSignInDialog
companion object { companion object {
fun newInstance() = WebSeriesFragment() fun newInstance() = WebSeriesFragment()
} }
@@ -77,6 +80,8 @@ class WebSeriesFragment private constructor(): Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
noSignInDialog = NoSignInDialog(requireContext())
initViews() initViews()
initEpisodeDialog() initEpisodeDialog()
@@ -115,7 +120,9 @@ class WebSeriesFragment private constructor(): Fragment() {
// adapters // adapters
activity?.let { activity?.let {
showAdapter = WebSeriesShowAdapter(it, ::onShowClicked, ::onShowCommonDataChange) showAdapter = WebSeriesShowAdapter(it, ::onShowClicked, ::onShowCommonDataChange){
noSignInDialog.show()
}
continueWatchAdapter = ContinueEpisodeAdapter(it) continueWatchAdapter = ContinueEpisodeAdapter(it)
} }

View File

@@ -25,6 +25,8 @@ import com.woka.databinding.FragmentWebShowBinding
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.players.models.VideoPlayList import com.woka.players.models.VideoPlayList
import com.woka.players.views.PlayerActivity import com.woka.players.views.PlayerActivity
import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.lightStatusBar import com.woka.utils.lightStatusBar
@@ -72,6 +74,8 @@ class WebShowFragment private constructor(
private var loadMoreEpisodes = false private var loadMoreEpisodes = false
private var showDataChanged: Boolean = false private var showDataChanged: Boolean = false
private lateinit var noSignInDialog: NoSignInDialog
override fun onAttach(context: Context) { override fun onAttach(context: Context) {
super.onAttach(context) super.onAttach(context)
episodeAdapter = EpisodeAdapter(context) episodeAdapter = EpisodeAdapter(context)
@@ -96,6 +100,9 @@ class WebShowFragment private constructor(
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
noSignInDialog = NoSignInDialog(requireContext())
initViews() initViews()
initEpisodeDialog() initEpisodeDialog()
@@ -173,6 +180,11 @@ class WebShowFragment private constructor(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
WebSeriesRepository.likeUnLikeShow("${showData.id}", showData.is_liked == false) WebSeriesRepository.likeUnLikeShow("${showData.id}", showData.is_liked == false)
showData.likes_count?.let { showData.likes_count?.let {
@@ -202,6 +214,11 @@ class WebShowFragment private constructor(
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
WebSeriesRepository.updateFavShow( WebSeriesRepository.updateFavShow(
showData, showData,
!showData.isBookMarked(categoryId), !showData.isBookMarked(categoryId),

View File

@@ -8,8 +8,9 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.R import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected import com.woka.utils.isNetworkConnected
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast import com.woka.utils.toast
@@ -18,14 +19,19 @@ import com.woka.wokagames.models.listing.GameData
import java.util.concurrent.Executors import java.util.concurrent.Executors
import kotlin.math.max import kotlin.math.max
class GamesAdapter(var context: Context, class GamesAdapter(
private var onGameClicked: (GameData) -> Unit): ListAdapter<GameData, GamesAdapter.GameViewHolder>( var context: Context,
ASYNC_DIFF_UTIL) { private var onGameClicked: (GameData) -> Unit,
inner class GameViewHolder(var binding: ShowViewHolderBinding): ViewHolder(binding.root) private val noSignInListener: () -> Unit
) : ListAdapter<GameData, GamesAdapter.GameViewHolder>(
ASYNC_DIFF_UTIL
) {
inner class GameViewHolder(var binding: ShowViewHolderBinding) : ViewHolder(binding.root)
companion object{ companion object {
val DIFF_UTIL = object : DiffUtil.ItemCallback<GameData>(){ val DIFF_UTIL = object : DiffUtil.ItemCallback<GameData>() {
override fun areItemsTheSame(oldItem: GameData, newItem: GameData): Boolean = oldItem.id == newItem.id override fun areItemsTheSame(oldItem: GameData, newItem: GameData): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: GameData, newItem: GameData): Boolean { override fun areContentsTheSame(oldItem: GameData, newItem: GameData): Boolean {
return oldItem.thumbnail_path == newItem.thumbnail_path && return oldItem.thumbnail_path == newItem.thumbnail_path &&
@@ -59,14 +65,14 @@ class GamesAdapter(var context: Context,
image.loadImage(it) image.loadImage(it)
} }
gameData.content_more_details?.let {moreDetailsList -> gameData.content_more_details?.let { moreDetailsList ->
title.text = if (moreDetailsList.isNotEmpty()){ title.text = if (moreDetailsList.isNotEmpty()) {
if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){ if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
moreDetailsList[1]?.title moreDetailsList[1]?.title
}else{ } else {
moreDetailsList[0]?.title moreDetailsList[0]?.title
} }
}else{ } else {
gameData.title gameData.title
} }
} }
@@ -84,21 +90,26 @@ class GamesAdapter(var context: Context,
} }
like.setOnClickListener { like.setOnClickListener {
if (!context.isNetworkConnected()){ if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet)) context.toast(context.getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) {
noSignInListener()
return@setOnClickListener
}
GamesRepository.likeUnLikeGame( GamesRepository.likeUnLikeGame(
"${gameData.id}", "${gameData.id}",
!like.isSelected !like.isSelected
) )
gameData.likes_count?.let { gameData.likes_count?.let {
gameData.likes_count = if (like.isSelected){ gameData.likes_count = if (like.isSelected) {
// unlike // unlike
max(0, it - 1) max(0, it - 1)
}else{ } else {
// like // like
it + 1 it + 1
} }
@@ -113,11 +124,16 @@ class GamesAdapter(var context: Context,
fav.isSelected = gameData.mark_as_favourite == true fav.isSelected = gameData.mark_as_favourite == true
fav.setOnClickListener { fav.setOnClickListener {
if (!context.isNetworkConnected()){ if (!context.isNetworkConnected()) {
context.toast(context.getString(R.string.no_internet)) context.toast(context.getString(R.string.no_internet))
return@setOnClickListener return@setOnClickListener
} }
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE) {
noSignInListener()
return@setOnClickListener
}
GamesRepository.updateFavShow( GamesRepository.updateFavShow(
gameData, gameData,
!fav.isSelected !fav.isSelected

View File

@@ -2,7 +2,6 @@ package com.woka.wokagames.playerr
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.graphics.Color
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager import android.view.WindowManager
@@ -14,7 +13,6 @@ import com.woka.R
import com.woka.databinding.ActivityGamePlayerBinding import com.woka.databinding.ActivityGamePlayerBinding
import com.woka.utils.DecisionDialog import com.woka.utils.DecisionDialog
import com.woka.utils.WokaBaseActivity import com.woka.utils.WokaBaseActivity
import com.woka.utils.lightStatusBar
class GamePlayerActivity : WokaBaseActivity() { class GamePlayerActivity : WokaBaseActivity() {
@@ -41,6 +39,7 @@ class GamePlayerActivity : WokaBaseActivity() {
message = getString(R.string.back_warning_text) message = getString(R.string.back_warning_text)
} }
@Suppress("DEPRECATION")
intent.getParcelableExtra<GamePlayerData?>(EXTRA_GAME_PLAYER_DATA)?.let { intent.getParcelableExtra<GamePlayerData?>(EXTRA_GAME_PLAYER_DATA)?.let {
gamePlayerData = it gamePlayerData = it
requestedOrientation = if (it.landscape){ requestedOrientation = if (it.landscape){
@@ -82,12 +81,12 @@ class GamePlayerActivity : WokaBaseActivity() {
val webSettings: WebSettings = binding.webView.getSettings() val webSettings: WebSettings = binding.webView.getSettings()
webSettings.javaScriptEnabled = true webSettings.javaScriptEnabled = true
webSettings.allowFileAccess = false; webSettings.allowFileAccess = false
webSettings.allowContentAccess = false; webSettings.allowContentAccess = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
webSettings.safeBrowsingEnabled = true webSettings.safeBrowsingEnabled = true
}; }
binding.webView.setWebViewClient(WebViewClient()) binding.webView.setWebViewClient(WebViewClient())
@@ -97,6 +96,7 @@ class GamePlayerActivity : WokaBaseActivity() {
@Deprecated("Deprecated in Java") @Deprecated("Deprecated in Java")
override fun onBackPressed() { override fun onBackPressed() {
decisionDialog.setPositiveButton(getString(R.string.ok_caps)){ decisionDialog.setPositiveButton(getString(R.string.ok_caps)){
@Suppress("DEPRECATION")
super.onBackPressed() super.onBackPressed()
} }
decisionDialog.setNegativeButton(getString(R.string.cancel_caps)){ decisionDialog.setNegativeButton(getString(R.string.cancel_caps)){

View File

@@ -16,14 +16,18 @@ import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.appbar.CollapsingToolbarLayout
import com.woka.R import com.woka.R
import com.woka.WokaApp import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ActivityGamesBinding import com.woka.databinding.ActivityGamesBinding
import com.woka.databinding.DialogModuleShowerBinding import com.woka.databinding.DialogModuleShowerBinding
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.WokaBaseActivity import com.woka.utils.WokaBaseActivity
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.isNetworkConnected
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
import com.woka.wokagames.GamesRepository import com.woka.wokagames.GamesRepository
import com.woka.wokagames.adapters.GamesAdapter import com.woka.wokagames.adapters.GamesAdapter
import com.woka.wokagames.models.listing.GameData import com.woka.wokagames.models.listing.GameData
@@ -46,6 +50,8 @@ class GamesActivity : WokaBaseActivity() {
private lateinit var dialogBinding: DialogModuleShowerBinding private lateinit var dialogBinding: DialogModuleShowerBinding
private lateinit var gameDialog: Dialog private lateinit var gameDialog: Dialog
private lateinit var noSignInDialog: NoSignInDialog
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ActivityGamesBinding.inflate(layoutInflater) binding = ActivityGamesBinding.inflate(layoutInflater)
@@ -63,12 +69,16 @@ class GamesActivity : WokaBaseActivity() {
viewModel = ViewModelProvider(this)[GamesViewModel::class.java] viewModel = ViewModelProvider(this)[GamesViewModel::class.java]
gameAdapter = GamesAdapter(this, ::onGameClicked)
dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater) dialogBinding = DialogModuleShowerBinding.inflate(layoutInflater)
gameDialog = Dialog(this) gameDialog = Dialog(this)
gameDialog.setContentView(dialogBinding.root) gameDialog.setContentView(dialogBinding.root)
noSignInDialog = NoSignInDialog(this)
gameAdapter = GamesAdapter(this, ::onGameClicked){
noSignInDialog.show()
}
initViews() initViews()
initGameDialog() initGameDialog()
@@ -149,7 +159,7 @@ class GamesActivity : WokaBaseActivity() {
gameData.content_more_details?.let { moreDetailsList -> gameData.content_more_details?.let { moreDetailsList ->
trailerName.text = if (moreDetailsList.isNotEmpty()) { trailerName.text = if (moreDetailsList.isNotEmpty()) {
if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) { if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
moreDetailsList[1]?.title moreDetailsList[1]?.title
} else { } else {
moreDetailsList[0]?.title moreDetailsList[0]?.title
@@ -207,7 +217,7 @@ class GamesActivity : WokaBaseActivity() {
if (moreDetailsList.isNotEmpty()) { if (moreDetailsList.isNotEmpty()) {
if (WokaApp.userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) { if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
moreDetailsList[1]?.let { data -> moreDetailsList[1]?.let { data ->
title.text = data.title title.text = data.title
description.text = Html.fromHtml( description.text = Html.fromHtml(
@@ -247,6 +257,16 @@ class GamesActivity : WokaBaseActivity() {
} }
like.setOnClickListener { like.setOnClickListener {
if (!isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
GamesRepository.likeUnLikeGame( GamesRepository.likeUnLikeGame(
"${gameData.id}", "${gameData.id}",
!like.isSelected !like.isSelected
@@ -272,6 +292,16 @@ class GamesActivity : WokaBaseActivity() {
} }
fav.setOnClickListener { fav.setOnClickListener {
if (!isNetworkConnected()){
toast(getString(R.string.no_internet))
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInDialog.show()
return@setOnClickListener
}
GamesRepository.updateFavShow( GamesRepository.updateFavShow(
gameData, gameData,
!fav.isSelected !fav.isSelected

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main" android:id="@+id/main"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@@ -10,21 +10,20 @@
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:src="@drawable/img_more_bg"
android:contentDescription="@string/image" android:contentDescription="@string/image"
android:scaleType="fitXY" android:scaleType="fitXY"
/> android:src="@drawable/img_more_bg" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:translationZ="1dp"
android:layout_marginTop="@dimen/_30sdp" android:layout_marginTop="@dimen/_30sdp"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical">
android:orientation="vertical"
android:translationZ="1dp">
<com.woka.utils.PressableImageView <com.woka.utils.PressableImageView
android:id="@+id/more" android:id="@+id/more"
@@ -53,31 +52,30 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/coming_soonn_on_woka" android:layout_marginHorizontal="15dp"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:fontFamily="@font/exo_2_bold"
android:layout_marginHorizontal="15dp" android:text="@string/coming_soonn_on_woka"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
android:visibility="gone" android:visibility="gone"
/> />
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="5dp"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:visibility="gone"
android:layout_marginHorizontal="15dp" app:cardBackgroundColor="@color/white"
>
app:cardCornerRadius="5dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -88,35 +86,32 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/_100sdp" android:layout_height="@dimen/_100sdp"
android:layout_marginHorizontal="15dp" android:layout_marginHorizontal="15dp"
android:layout_marginTop="15dp" android:layout_marginTop="15dp">
>
<ImageView <ImageView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:src="@drawable/img_masila_tn_small"
android:contentDescription="@string/masila" android:contentDescription="@string/masila"
android:scaleType="fitXY" android:scaleType="fitXY"
/> android:src="@drawable/img_masila_tn_small" />
<com.woka.utils.PressableCard <com.woka.utils.PressableCard
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/round_25"
android:backgroundTint="@color/color_primary"
android:layout_centerInParent="true" android:layout_centerInParent="true"
> android:background="@drawable/round_25"
android:backgroundTint="@color/color_primary">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/play_trailer"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:layout_marginHorizontal="15dp" android:layout_marginHorizontal="15dp"
android:layout_marginVertical="10dp" android:layout_marginVertical="10dp"
android:fontFamily="@font/exo_2_bold"
android:text="@string/play_trailer"
android:textColor="@color/white"
/> />
@@ -128,14 +123,14 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/masila" android:layout_marginVertical="10dp"
android:layout_marginStart="15dp"
android:fontFamily="@font/exo_2_bold" android:fontFamily="@font/exo_2_bold"
android:text="@string/masila"
android:textColor="@color/color_primary" android:textColor="@color/color_primary"
android:textSize="@dimen/_12ssp" android:textSize="@dimen/_12ssp"
android:layout_marginStart="15dp"
android:layout_marginVertical="10dp"
/> />
</LinearLayout> </LinearLayout>
@@ -147,54 +142,106 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/blogs" android:layout_marginHorizontal="15dp"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:fontFamily="@font/exo_2_bold"
android:layout_marginHorizontal="15dp" android:text="@string/blogs"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
/> />
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/blogs_shimmer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:shimmer_auto_start="true"
app:shimmer_duration="1500"
app:shimmer_highlight_alpha="0.5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="5dp"
android:orientation="horizontal">
<include layout="@layout/blog_view_holder" />
<include layout="@layout/blog_view_holder" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_blogs" android:id="@+id/rv_blogs"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="horizontal"
tools:listitem="@layout/blog_view_holder"
android:layout_marginVertical="5dp" android:layout_marginVertical="5dp"
/> android:orientation="horizontal"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/blog_view_holder" />
<TextView <TextView
android:id="@+id/woka_songs_txt" android:id="@+id/woka_songs_txt"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/woka_songs" android:layout_marginHorizontal="15dp"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:layout_marginBottom="5dp" android:layout_marginBottom="5dp"
android:fontFamily="@font/exo_2_bold"
android:layout_marginHorizontal="15dp" android:text="@string/woka_songs"
android:textColor="@color/white"
android:textSize="@dimen/_13ssp"
/> />
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/songs_shimmer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:shimmer_auto_start="true"
app:shimmer_duration="1500"
app:shimmer_highlight_alpha="0.5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="5dp"
android:orientation="vertical">
<include layout="@layout/woka_song_view_holder" />
<include layout="@layout/woka_song_view_holder" />
<include layout="@layout/woka_song_view_holder" />
<include layout="@layout/woka_song_view_holder" />
<include layout="@layout/woka_song_view_holder" />
<include layout="@layout/woka_song_view_holder" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_woka_songs" android:id="@+id/rv_woka_songs"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
android:orientation="vertical"
tools:listitem="@layout/woka_song_view_holder"
android:layout_marginVertical="5dp" android:layout_marginVertical="5dp"
/> android:orientation="vertical"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/woka_song_view_holder" />
</LinearLayout> </LinearLayout>

View File

@@ -36,7 +36,6 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:text="Sabak Degi Naani: The Lessons of a Wise Grandmother and this is extr"
android:fontFamily="@font/exo_2_bold" android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary" android:textColor="@color/color_primary"
android:textSize="12sp" android:textSize="12sp"

View File

@@ -73,8 +73,7 @@
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textColor="@color/white" android:textColor="@color/white"/>
tools:text="AA ZARA" />
<LinearLayout <LinearLayout
android:id="@+id/ll" android:id="@+id/ll"