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
import android.annotation.SuppressLint
import android.app.Application
import com.woka.userPreference.UserPreference
class WokaApp: Application() {
companion object{
@SuppressLint("StaticFieldLeak")
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.models.audiodata.AudioBookData
import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected
import com.woka.utils.show
import com.woka.utils.toast
@@ -21,7 +22,8 @@ import kotlin.math.max
class AudioBooksAdapter(
private val context: Context,
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) {
inner class AudioBookViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root)
@@ -92,6 +94,11 @@ class AudioBooksAdapter(
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
AudioBookRepository.likeUnLikeAudioBook(
"${audioBook.id}",
!like.isSelected
@@ -125,6 +132,11 @@ class AudioBooksAdapter(
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
AudioBookRepository.updateFavShow(
audioBook,
!fav.isSelected

View File

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

View File

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

View File

@@ -2,25 +2,22 @@ package com.woka.home.fragments
import android.content.Intent
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.WokaApp
import com.woka.databinding.FragmentHome2Binding
import com.woka.home.views.FMActivity
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.players.views.LiveStreamPlayerActivity
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.show
import com.woka.utils.toast
class Home2Fragment : Fragment() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -127,6 +127,7 @@ class HomeActivity : WokaBaseActivity(),
}
}
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
if (binding.homeDrawer.isDrawerOpen(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.setPositiveButton(getString(R.string.yes)){
@Suppress("DEPRECATION")
super.onBackPressed()
}
@@ -228,7 +230,6 @@ class HomeActivity : WokaBaseActivity(),
getString(R.string.login_register)
}else{
// showing menu options
val type = userPrefs?.userType
if (userPrefs?.userType == UserType.GUARDIAN){
sbAddChild.show()
}

View File

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

View File

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

View File

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

View File

@@ -108,6 +108,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
WindowCompat.getInsetsController(window, window.decorView)
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
@Suppress("DEPRECATION")
karaokePlayerData = intent.getParcelableExtra(EXTRA_KARAOKE_DATA)
networkCallback = object : ConnectivityManager.NetworkCallback() {
@@ -486,6 +487,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
}
}
@Suppress("DEPRECATION")
private fun startRecording() {
recorder = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
@@ -658,7 +660,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
AlertDialog.Builder(this@KaraokePlayerActivity)
.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()
}
.create()
@@ -668,7 +670,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
AlertDialog.Builder(this@KaraokePlayerActivity)
.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()
}
.create()

View File

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

View File

@@ -1,13 +1,7 @@
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.RetrofitHelper
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import okhttp3.FormBody
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
import android.text.Html
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
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.Companion.userPrefs
import com.woka.databinding.BlogViewHolderBinding
import com.woka.modules.blogs.models.Blog
import java.util.concurrent.Executors

View File

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

View File

@@ -1,5 +1,6 @@
package com.woka.modules.wokasongs
import android.annotation.SuppressLint
import android.content.Context
import android.os.Handler
import android.os.Looper
@@ -146,12 +147,14 @@ class WokaSongsAdapter(context: Context): RecyclerView.Adapter<WokaSongsAdapter.
}else{
playBtn.show()
playBtn.setImageResource(R.drawable.ic_play)
currentTime.text = root.context.getString(R.string._00_00)
progressBar.hide()
}
}
else -> {
playBtn.show()
playBtn.setImageResource(R.drawable.ic_play)
currentTime.text = root.context.getString(R.string._00_00)
progressBar.hide()
}
}
@@ -160,7 +163,9 @@ class WokaSongsAdapter(context: Context): RecyclerView.Adapter<WokaSongsAdapter.
}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
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>) {
songList.clear()
for (song in list){

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,8 @@
package com.woka.onboard.mvvm
import com.woka.WokaApp
import com.woka.networking.ApiResponse
import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper.handleApiCall
import com.woka.networking.RetrofitHelper.handleApiResponse
import com.woka.onboard.models.AvatarList
import com.woka.onboard.models.ChildListResponse
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.RegisterResponse
import com.woka.onboard.models.VerifyEmail
import com.woka.utils.NO_INTERNET_MESSAGE
import com.woka.utils.UNKNOWN_ERROR_MESSAGE
import okhttp3.FormBody
import retrofit2.Response
import java.net.UnknownHostException
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.utils.Gender
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.util.Calendar
@@ -238,7 +237,7 @@ class OnboardViewModel: ViewModel(){
}
// 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 _otpResendTimeLiveData = MutableLiveData<Long>()
@@ -247,7 +246,7 @@ class OnboardViewModel: ViewModel(){
fun startOTPTimeCountDown(){
countDownTimer?.cancel()
countDownTimer = object : CountDownTimer(OTP_RESEND_COUNT_DOWN_TIME, 1000){
countDownTimer = object : CountDownTimer(otpCountDownTime, 1000){
override fun onTick(millisUntilFinished: Long) {
_otpResendTimeLiveData.postValue(millisUntilFinished)
}

View File

@@ -60,10 +60,10 @@ class OnboardActivity : WokaBaseActivity() {
.setPopUpTo(R.id.onboardFragment, true)
.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() {

View File

@@ -5,9 +5,6 @@ import android.net.ConnectivityManager.NetworkCallback
import android.net.Network
import android.net.NetworkRequest
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.ViewGroup
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
@@ -15,7 +12,6 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import com.jwplayer.pub.api.JWPlayer
import com.jwplayer.pub.api.PlayReason
import com.jwplayer.pub.api.configuration.PlayerConfig
import com.jwplayer.pub.api.events.EventType
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.players.KeepScreenOnHandler
import com.woka.players.models.PlayBackState
import com.woka.utils.TAG
import com.woka.utils.hide
import com.woka.utils.show

View File

@@ -55,6 +55,7 @@ class PlayerActivity : AppCompatActivity(), FullscreenHandler {
WindowCompat.getInsetsController(window, window.decorView)
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
@Suppress("DEPRECATION")
videoPlayList = intent.getParcelableExtra(EXTRA_PLAY_LIST)
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.userDataModels.UserData
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.webseries.WebSeriesRepository
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

View File

@@ -1,11 +1,9 @@
package com.woka.userdata
import com.woka.audiobooks.models.continuedata.ContinueAudioResponse
import com.woka.home.mylist.models.MyListResponse
import com.woka.home.notifications.models.NotificationData
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResponse
import com.woka.webseries.models.ContinueEpisodeResponse
import com.woka.userdata.userDataModels.UserDataResponse
import okhttp3.FormBody
import retrofit2.Response
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.target.Target
import com.woka.R
import kotlin.reflect.KFunction
class AdiImageView: FrameLayout {

View File

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

View File

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

View File

@@ -15,8 +15,8 @@ import com.woka.R
class PressableCard : FrameLayout {
enum class PressableType(value: Int){
SCALE(0), FADE(1);
enum class PressableType {
SCALE, FADE;
}
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.res.Configuration
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import com.woka.WokaApp.Companion.userPrefs
import kotlin.math.min

View File

@@ -7,11 +7,9 @@ import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ContinueShowViewHolderBinding
import com.woka.webseries.models.ContinueEpisodeData
import com.woka.webseries.models.ShowData
import java.util.concurrent.Executors
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

View File

@@ -12,7 +12,7 @@ import com.woka.modules.categorymodels.Category
import com.woka.utils.hide
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

View File

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

View File

@@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ShowViewHolderBinding
import com.woka.userPreference.UserType
import com.woka.utils.isNetworkConnected
import com.woka.utils.show
import com.woka.utils.toast
@@ -19,7 +20,8 @@ import kotlin.math.max
class WebSeriesShowAdapter(
private val context: Context,
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>() {
inner class ShowViewHolder(val binding: ShowViewHolderBinding): ViewHolder(binding.root)
@@ -85,6 +87,11 @@ class WebSeriesShowAdapter(
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
WebSeriesRepository.likeUnLikeShow("${showData.id}", !like.isSelected)
showData.likes_count?.let {
@@ -117,6 +124,11 @@ class WebSeriesShowAdapter(
return@setOnClickListener
}
if (userPrefs?.userType == UserType.GUEST || userPrefs?.userType == UserType.NONE){
noSignInListener()
return@setOnClickListener
}
categoryId?.let {
WebSeriesRepository.updateFavShow(
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_LIST
import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog
import com.woka.utils.hide
import com.woka.utils.lightStatusBar
import com.woka.utils.setVisibility
@@ -56,6 +57,8 @@ class WebSeriesFragment private constructor(): Fragment() {
private var loadingMore = false
private lateinit var noSignInDialog: NoSignInDialog
companion object {
fun newInstance() = WebSeriesFragment()
}
@@ -77,6 +80,8 @@ class WebSeriesFragment private constructor(): Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
noSignInDialog = NoSignInDialog(requireContext())
initViews()
initEpisodeDialog()
@@ -115,7 +120,9 @@ class WebSeriesFragment private constructor(): Fragment() {
// adapters
activity?.let {
showAdapter = WebSeriesShowAdapter(it, ::onShowClicked, ::onShowCommonDataChange)
showAdapter = WebSeriesShowAdapter(it, ::onShowClicked, ::onShowCommonDataChange){
noSignInDialog.show()
}
continueWatchAdapter = ContinueEpisodeAdapter(it)
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -36,7 +36,6 @@
android:layout_width="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:textColor="@color/color_primary"
android:textSize="12sp"

View File

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