Removing as favorite from my fav list.

updating properly the local fav data

use of adapter position to update the list

internet connectivity check code and use before making the api calls

dialog to show blog. Hindi and english language changes.

Language update for woka songs.

toolbar for WebViewActivity
This commit is contained in:
2024-06-17 19:30:13 +05:30
parent 10d8f603d6
commit b83e99f6d4
25 changed files with 487 additions and 44 deletions

View File

@@ -1,5 +1,6 @@
package com.woka.home
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.transition.Fade
@@ -10,6 +11,7 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.woka.R
import com.woka.databinding.ActivityExploreWokaBinding
import com.woka.players.LiveStreamPlayerActivity
import com.woka.utils.WokaBaseActivity
import com.woka.utils.lightStatusBar
import com.woka.utils.toast
@@ -52,9 +54,14 @@ class ExploreWokaActivity : WokaBaseActivity() {
finish()
}
liveTv.setOnClickListener {
startActivity(Intent(this@ExploreWokaActivity, LiveStreamPlayerActivity::class.java))
}
wokaFm.setOnClickListener {
startActivity(Intent(this@ExploreWokaActivity, FMActivity::class.java))
}
}
}
}
}

View File

@@ -42,6 +42,7 @@ import com.woka.home.sidebar.profile.UserProfileActivity
import com.woka.home.sidebar.support.SupportActivity
import com.woka.modules.disclaimer.DisclaimerActivity
import com.woka.modules.webview.WebViewActivity
import com.woka.modules.webview.WebViewActivity.Companion.WEB_VIEW_TITLE
import com.woka.modules.webview.WebViewActivity.Companion.WEB_VIEW_URL
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
@@ -358,6 +359,7 @@ class HomeActivity : WokaBaseActivity(),
startActivity(
Intent(this@HomeActivity, WebViewActivity::class.java).apply {
putExtra(WEB_VIEW_URL, TERMS_N_CONDITIONS_URL)
putExtra(WEB_VIEW_TITLE, getString(R.string.terms_conditions))
}
)
}
@@ -366,6 +368,7 @@ class HomeActivity : WokaBaseActivity(),
startActivity(
Intent(this@HomeActivity, WebViewActivity::class.java).apply {
putExtra(WEB_VIEW_URL, PRIVACY_N_POLICY_URL)
putExtra(WEB_VIEW_TITLE, getString(R.string.privacy_policy))
}
)
}

View File

@@ -1,7 +1,11 @@
package com.woka.home
import android.app.Dialog
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.InsetDrawable
import android.os.Bundle
import android.text.Html
import android.transition.Fade
import android.view.WindowManager
import androidx.activity.enableEdgeToEdge
@@ -9,11 +13,16 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.SimpleItemAnimator
import com.bumptech.glide.Glide
import com.google.android.exoplayer2.MediaItem
import com.woka.R
import com.woka.WokaApp
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.ActivityMoreHomeBinding
import com.woka.databinding.DialogBlogsBinding
import com.woka.modules.blogs.BlogsAdapter
import com.woka.modules.blogs.BlogsRepository
import com.woka.modules.blogs.models.Blog
import com.woka.modules.wokasongs.WokaSongsAdapter
import com.woka.modules.wokasongs.WokaSongsRepository
import com.woka.networking.ApiResult
@@ -33,6 +42,9 @@ class MoreHomeActivity : WokaBaseActivity() {
private lateinit var songsAdapter: WokaSongsAdapter
private lateinit var blogBinding: DialogBlogsBinding
private lateinit var blogDialog: Dialog
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
with(window) {
@@ -56,9 +68,11 @@ class MoreHomeActivity : WokaBaseActivity() {
viewModel = ViewModelProvider(this)[MoreViewModel::class.java]
blogsAdapter = BlogsAdapter()
blogsAdapter = BlogsAdapter(::obBlogClicked)
songsAdapter = WokaSongsAdapter(this)
initBlogDialog()
initViews()
clickEvents()
@@ -71,6 +85,32 @@ class MoreHomeActivity : WokaBaseActivity() {
songsAdapter.releasePlayer()
}
private fun initBlogDialog(){
blogBinding = DialogBlogsBinding.inflate(layoutInflater)
blogDialog = Dialog(this)
blogDialog.setContentView(blogBinding.root)
try {
val back = ColorDrawable(Color.TRANSPARENT)
val inset = InsetDrawable(back, 50)
blogDialog.window!!.setBackgroundDrawable(inset)
} catch (e: Exception) {
// do nothing
}
try {
val layoutParams = blogDialog.window!!.attributes
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT
blogDialog.window!!.setAttributes(layoutParams)
} catch (e: Exception) {
// do nothing
}
blogBinding.close.setOnClickListener { blogDialog.dismiss() }
}
private fun clickEvents() {
binding.apply {
more.setOnClickListener {
@@ -134,9 +174,21 @@ class MoreHomeActivity : WokaBaseActivity() {
val mediaItems = mutableListOf<MediaItem>()
for (song in songList) {
song?.content_more_details?.get(0)?.url?.let { url ->
song?.content_more_details?.let { contentMoreDetails ->
if (contentMoreDetails.isNotEmpty()){
if (contentMoreDetails.size > 1 && userPrefs?.appLanguage == "hi"){
contentMoreDetails[1]?.url?.let { url ->
mediaItems.add(MediaItem.fromUri(url))
}
}else{
contentMoreDetails[0]?.url?.let { url ->
mediaItems.add(MediaItem.fromUri(url))
}
}
}
}
}
songsAdapter.submitSongList(songList, mediaItems)
@@ -146,4 +198,40 @@ class MoreHomeActivity : WokaBaseActivity() {
}
}
}
private fun obBlogClicked(blog: Blog){
blogBinding.apply {
scrollView.smoothScrollTo(0, 0)
blog.thumbnail_path?.let {
Glide.with(this@MoreHomeActivity)
.load(it)
.placeholder(android.R.color.darker_gray)
.error(android.R.color.darker_gray)
.into(blogImage)
}
var titleTxt = blog.title
var descriptionTxt = blog.description
blog.content_more_details?.let {
if (it.isNotEmpty()){
titleTxt = it[0]?.title
descriptionTxt = it[0]?.article
if (it.size > 1 && WokaApp.userPrefs?.appLanguage == "hi"){
titleTxt = it[1]?.title
descriptionTxt = it[1]?.article
}
}
}
blogTitle.text = titleTxt
blogDescription.text = Html.fromHtml(descriptionTxt, Html.FROM_HTML_MODE_LEGACY)
}
blogDialog.show()
}
}

View File

@@ -164,6 +164,12 @@ class Home1Fragment : Fragment() {
startActivity(Intent(it, FMActivity::class.java))
}
}
liveTv.setOnClickListener {
activity?.let {
startActivity(Intent(it, LiveStreamPlayerActivity::class.java))
}
}
}
}

View File

@@ -10,6 +10,7 @@ import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.WokaApp
import com.woka.databinding.FragmentHome2Binding
import com.woka.home.FMActivity
import com.woka.home.HomeViewModel
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
@@ -79,7 +80,21 @@ class Home2Fragment : Fragment() {
private fun clickEvents(){
binding.apply {
playerCard.setOnClickListener {
startActivity(Intent(activity, LiveStreamPlayerActivity::class.java))
activity?.let {
startActivity(Intent(it, LiveStreamPlayerActivity::class.java))
}
}
liveTv.setOnClickListener {
activity?.let {
startActivity(Intent(it, LiveStreamPlayerActivity::class.java))
}
}
wokaFm.setOnClickListener {
activity?.let {
startActivity(Intent(it, FMActivity::class.java))
}
}
}
}
@@ -106,6 +121,8 @@ class Home2Fragment : Fragment() {
exploreWokaTxt.text = getString(R.string.explore_woka)
comingSoonTxt.text = getString(R.string.coming_soonn_on_woka)
playTrailer.text = getString(R.string.play_trailer)
masila.text = getString(R.string.masila)
}
}

View File

@@ -5,6 +5,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator
import com.woka.databinding.FragmentMyListBinding
@@ -13,6 +14,7 @@ import com.woka.home.mylist.adapters.AudioBooksAdapter
import com.woka.home.mylist.adapters.GamesAdapter
import com.woka.home.mylist.adapters.KaraokeAdapter
import com.woka.home.mylist.adapters.WebSeriesAdapter
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.ShowData
import com.woka.networking.ApiResult
import com.woka.utils.hide
@@ -36,11 +38,11 @@ class MyListFragment : Fragment() {
binding = FragmentMyListBinding.inflate(inflater, container, false)
// adapters
webSeriesEAdapter = WebSeriesAdapter("1")
webSeriesHAdapter = WebSeriesAdapter("18")
audioBooksAdapter = AudioBooksAdapter()
karaokeAdapter = KaraokeAdapter()
gamesAdapter = GamesAdapter()
webSeriesEAdapter = WebSeriesAdapter(requireContext(),"1", ::onListGotEmpty)
webSeriesHAdapter = WebSeriesAdapter(requireContext(),"18", ::onListGotEmpty)
audioBooksAdapter = AudioBooksAdapter(requireContext(), ::onListGotEmpty)
karaokeAdapter = KaraokeAdapter(requireContext(), ::onListGotEmpty)
gamesAdapter = GamesAdapter(requireContext(), ::onListGotEmpty)
initViews()
@@ -177,6 +179,31 @@ class MyListFragment : Fragment() {
}
}
private fun onListGotEmpty(postType: PostType, isEng: Boolean = true){
binding.apply {
when (postType){
PostType.WEB_SERIES -> {
if (isEng){
webSeriesEnglishView.hide()
}else{
webSeriesHindiView.hide()
}
}
PostType.AUDIO_BOOKS -> audioBooksView.hide()
PostType.KARAOKE -> karaokeView.hide()
PostType.GAMES -> gamesView.hide()
}
if (!webSeriesEnglishView.isVisible &&
!webSeriesHindiView.isVisible &&
!audioBooksView.isVisible &&
!karaokeView.isVisible &&
!gamesView.isVisible){
noData.show()
}
}
}
companion object {
fun newInstance() = MyListFragment()
}

View File

@@ -1,5 +1,6 @@
package com.woka.home.mylist
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.woka.home.mylist.models.AudioData
@@ -11,6 +12,7 @@ import com.woka.home.mylist.models.SingKaraokeData
import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper
import com.woka.userdata.UserRepository
import com.woka.utils.TAG
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -109,7 +111,7 @@ object MyListRepository {
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${showData.id}")
.add("id", "${showData.id}")
.add("post_type", PostType.WEB_SERIES.value)
.build()
)
@@ -145,7 +147,7 @@ object MyListRepository {
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${audioData.id}")
.add("id", "${audioData.id}")
.add("post_type", PostType.AUDIO_BOOKS.value)
.build()
)
@@ -181,7 +183,7 @@ object MyListRepository {
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${karaokeData.id}")
.add("id", "${karaokeData.id}")
.add("post_type", PostType.KARAOKE.value)
.build()
)
@@ -216,7 +218,7 @@ object MyListRepository {
}else{
myFavApiService.removeFromFav(
FormBody.Builder()
.add("post_id", "${gameData.id}")
.add("id", "${gameData.id}")
.add("post_type", PostType.GAMES.value)
.build()
)

View File

@@ -1,19 +1,25 @@
package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.R
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.AudioData
import com.woka.home.mylist.models.PostType
import com.woka.utils.isNetworkConnected
import com.woka.utils.toast
import java.util.concurrent.Executors
import kotlin.math.max
class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<AudioData, FavoriteViewHolder>(config) {
class AudioBooksAdapter(private val context: Context,
config: AsyncDifferConfig<AudioData>,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): ListAdapter<AudioData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<AudioData>(){
@@ -30,7 +36,8 @@ class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<Audio
.build()
}
constructor(): this(DIFF_CONFIG)
constructor(context: Context,
onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): this(context, DIFF_CONFIG, onListEmptyListener)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
@@ -42,8 +49,8 @@ class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<Audio
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val audioData = getItem(position)
override fun onBindViewHolder(holder: FavoriteViewHolder, pos: Int) {
val audioData = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
audioData.thumbnail_path?.let {
@@ -63,6 +70,11 @@ class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<Audio
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (like.isSelected){
MyListRepository.unLikePost(
"${audioData.id}",
@@ -88,6 +100,28 @@ class AudioBooksAdapter(config: AsyncDifferConfig<AudioData>): ListAdapter<Audio
}
fav.isSelected = true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (fav.isSelected){
MyListRepository.markAsFavAudioLocally(
audioData,
false
)
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()){
onListEmptyListener(PostType.AUDIO_BOOKS, false)
}
}
}
}
}
}

View File

@@ -1,19 +1,25 @@
package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.R
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.GameData
import com.woka.home.mylist.models.PostType
import com.woka.utils.isNetworkConnected
import com.woka.utils.toast
import java.util.concurrent.Executors
import kotlin.math.max
class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, FavoriteViewHolder>(config) {
class GamesAdapter(private val context: Context,
config: AsyncDifferConfig<GameData>,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): ListAdapter<GameData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<GameData>(){
@@ -30,7 +36,8 @@ class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, F
.build()
}
constructor(): this(DIFF_CONFIG)
constructor(context: Context,
onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): this(context, DIFF_CONFIG, onListEmptyListener)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
@@ -42,8 +49,8 @@ class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, F
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val gameData = getItem(position)
override fun onBindViewHolder(holder: FavoriteViewHolder, pos: Int) {
val gameData = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
gameData.thumbnail_path?.let {
@@ -63,6 +70,11 @@ class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, F
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (like.isSelected){
MyListRepository.unLikePost(
"${gameData.id}",
@@ -88,6 +100,28 @@ class GamesAdapter(config: AsyncDifferConfig<GameData>): ListAdapter<GameData, F
}
fav.isSelected = true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (fav.isSelected){
MyListRepository.markAsFavGameLocally(
gameData,
false
)
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()){
onListEmptyListener(PostType.GAMES, false)
}
}
}
}
}
}

View File

@@ -1,19 +1,27 @@
package com.woka.home.mylist.adapters
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.R
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.SingKaraokeData
import com.woka.utils.TAG
import com.woka.utils.isNetworkConnected
import com.woka.utils.toast
import java.util.concurrent.Executors
import kotlin.math.max
class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<SingKaraokeData, FavoriteViewHolder>(config) {
class KaraokeAdapter(private val context: Context,
config: AsyncDifferConfig<SingKaraokeData>,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): ListAdapter<SingKaraokeData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<SingKaraokeData>(){
@@ -30,7 +38,7 @@ class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<Si
.build()
}
constructor(): this(DIFF_CONFIG)
constructor(context: Context, onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit)): this(context, DIFF_CONFIG, onListEmptyListener)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder {
return FavoriteViewHolder(
@@ -42,8 +50,8 @@ class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<Si
)
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val karaokeData = getItem(position)
override fun onBindViewHolder(holder: FavoriteViewHolder, pos: Int) {
val karaokeData = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
karaokeData.thumbnail_path?.let {
@@ -63,6 +71,11 @@ class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<Si
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (like.isSelected){
MyListRepository.unLikePost(
"${karaokeData.id}",
@@ -88,6 +101,28 @@ class KaraokeAdapter(config: AsyncDifferConfig<SingKaraokeData>): ListAdapter<Si
}
fav.isSelected = true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (fav.isSelected){
MyListRepository.markAsFavKaraokeLocally(
karaokeData,
false
)
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()){
onListEmptyListener(PostType.KARAOKE, false)
}
}
}
}
}
}

View File

@@ -1,19 +1,26 @@
package com.woka.home.mylist.adapters
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.bumptech.glide.Glide
import com.woka.R
import com.woka.databinding.FavViewHolderBinding
import com.woka.home.mylist.MyListRepository
import com.woka.home.mylist.models.PostType
import com.woka.home.mylist.models.ShowData
import com.woka.utils.isNetworkConnected
import com.woka.utils.toast
import java.util.concurrent.Executors
import kotlin.math.max
class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig<ShowData>): ListAdapter<ShowData, FavoriteViewHolder>(config) {
class WebSeriesAdapter(private val context: Context,
private val categoryId: String,
private val onListEmptyListener: ((postType: PostType, isEng: Boolean) -> Unit),
config: AsyncDifferConfig<ShowData>): ListAdapter<ShowData, FavoriteViewHolder>(config) {
companion object{
private val DIFF_UTIL = object : DiffUtil.ItemCallback<ShowData>(){
@@ -30,7 +37,9 @@ class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig
.build()
}
constructor(categoryId: String): this(categoryId, DIFF_CONFIG)
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(
@@ -43,7 +52,7 @@ class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig
}
override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) {
val showData = getItem(position)
val showData = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
showData.thumbnail_path?.let {
@@ -63,6 +72,11 @@ class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig
}
like.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (like.isSelected){
MyListRepository.unLikePost(
"${showData.id}",
@@ -92,14 +106,24 @@ class WebSeriesAdapter(private val categoryId: String, config: AsyncDifferConfig
fav.isSelected = true
fav.setOnClickListener {
if (!context.isNetworkConnected()){
context.toast(context.getString(R.string.no_internet))
return@setOnClickListener
}
if (fav.isSelected){
MyListRepository.markAsFavShowLocally(
showData,
false
)
currentList.removeAt(position)
notifyItemRemoved(position)
val currentList = currentList.toMutableList()
currentList.removeAt(holder.absoluteAdapterPosition)
submitList(currentList)
if (currentList.isEmpty()){
onListEmptyListener(PostType.WEB_SERIES, categoryId == "1")
}
}
}
}

View File

@@ -77,10 +77,11 @@ class NotificationsActivity : WokaBaseActivity() {
errorView.hide()
}
is ApiResult.Success -> {
it.data?.let { notifications ->
progressBar.hide()
errorView.hide()
it.data?.let { notifications ->
if (notifications.isEmpty()){
noData.show()
rvNotifications.hide()

View File

@@ -1,5 +1,6 @@
package com.woka.modules.blogs
import android.text.Html
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
@@ -8,11 +9,14 @@ import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
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
import kotlin.reflect.KFunction1
class BlogsAdapter(config: AsyncDifferConfig<Blog>) :
class BlogsAdapter(private val onBlogClicked: KFunction1<Blog, Unit>, config: AsyncDifferConfig<Blog>) :
ListAdapter<Blog, BlogsAdapter.BlogViewHolder>(config) {
inner class BlogViewHolder(val binding: BlogViewHolderBinding): ViewHolder(binding.root)
@@ -31,23 +35,42 @@ class BlogsAdapter(config: AsyncDifferConfig<Blog>) :
.build()
}
constructor(): this(ASYNC_DIFF_CONFIG)
constructor(onBlogClicked: KFunction1<Blog, Unit>): this(onBlogClicked, ASYNC_DIFF_CONFIG)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlogViewHolder {
return BlogViewHolder(BlogViewHolderBinding.inflate(LayoutInflater.from(parent.context), parent, false))
}
override fun onBindViewHolder(holder: BlogViewHolder, position: Int) {
with(getItem(position)){
thumbnail_path?.let {
val blog = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
blog.thumbnail_path?.let {
Glide.with(holder.binding.image)
.load(it)
.placeholder(android.R.color.darker_gray)
.error(R.drawable.woka_logo_half)
.into(holder.binding.image)
.into(image)
}
holder.binding.title.text = title
card.setOnClickListener {
onBlogClicked(blog)
}
var titleTxt = blog.title
blog.content_more_details?.let {
if (it.isNotEmpty()){
titleTxt = it[0]?.title
if (it.size > 1 && WokaApp.userPrefs?.appLanguage == "hi"){
titleTxt = it[1]?.title
}
}
}
title.text = titleTxt
}
}
}

View File

@@ -23,6 +23,7 @@ class WebViewActivity : WokaBaseActivity() {
companion object{
const val WEB_VIEW_URL = "web_view_url"
const val WEB_VIEW_TITLE = "web_view_title"
}
private lateinit var binding: ActivityWebViewBinding
@@ -39,7 +40,13 @@ class WebViewActivity : WokaBaseActivity() {
insets
}
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
intent.getStringExtra(WEB_VIEW_URL)?.let {
title = intent.getStringExtra(WEB_VIEW_TITLE)
val webSettings: WebSettings = binding.webView.getSettings()
webSettings.javaScriptEnabled = true
@@ -56,6 +63,11 @@ class WebViewActivity : WokaBaseActivity() {
}
}
override fun onSupportNavigateUp(): Boolean {
onBackPressedDispatcher.onBackPressed()
return true
}
private class SecureWebViewClient(val progressBar: ProgressBar) : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {

View File

@@ -5,6 +5,8 @@ import android.animation.ObjectAnimator
import android.app.Activity
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
@@ -87,3 +89,11 @@ fun Long.formatTime(): String {
String.format("%02d:%02d", minutes, seconds)
}
}
fun Context.isNetworkConnected(): Boolean {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = connectivityManager.activeNetwork ?: return false
val capabilities = connectivityManager.getNetworkCapabilities(network) ?: return false
return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) ||
capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
}

View File

@@ -1,5 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="#FFFFFF"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="@android:color/white" android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
<path
android:fillColor="@android:color/white"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z" />
</vector>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white"
/>
<corners android:radius="15dp"
/>
</shape>

View File

@@ -54,6 +54,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/live_tv"
android:layout_width="@dimen/_180sdp"
android:layout_height="wrap_content"
android:gravity="center_vertical"

View File

@@ -1,16 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_primary"
tools:context=".modules.webview.WebViewActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:titleTextColor="@color/white"
app:navigationIcon="@drawable/ic_arrow_back_full"
/>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
/>
<ProgressBar

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<com.woka.utils.PressableCard xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card"
android:layout_width="wrap_content"
android:layout_height="@dimen/_130sdp"
xmlns:app="http://schemas.android.com/apk/res-auto"

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/round_15"
android:orientation="vertical"
android:padding="15dp">
<com.woka.utils.PressableImageView
android:id="@+id/close"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/ic_close_filled"
android:tint="@color/color_primary"
android:contentDescription="@string/image"
android:layout_gravity="end"
/>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="15dp"
>
<ImageView
android:id="@+id/blog_image"
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:src="@android:color/darker_gray"
android:contentDescription="@string/image"
android:scaleType="fitXY"
/>
</androidx.cardview.widget.CardView>
<TextView
android:id="@+id/blog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="The title of the blog will be displayed here"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary"
android:textSize="@dimen/_14ssp"
android:layout_marginTop="15dp"
/>
<TextView
android:id="@+id/blog_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="The title of the blog will be displayed here"
android:fontFamily="@font/exo_2"
android:textColor="@color/color_primary"
android:textSize="@dimen/_12ssp"
android:layout_marginTop="10dp"
/>
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@@ -598,6 +598,7 @@
>
<TextView
android:id="@+id/play_trailer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -615,6 +616,7 @@
</RelativeLayout>
<TextView
android:id="@+id/masila"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -4,5 +4,6 @@
<!-- Customize your dark theme here. -->
<item name="colorPrimary">@color/color_primary</item>
<item name="android:textCursorDrawable">@drawable/cursor_drawable</item>
<item name="android:windowDisablePreview">true</item>
</style>
</resources>

View File

@@ -173,4 +173,5 @@
<string name="web_series_english">WEB SERIES (ENGLISH)</string>
<string name="no_favorites_added">No favorites added</string>
<string name="_0">0</string>
<string name="no_internet">No internet</string>
</resources>

View File

@@ -4,6 +4,7 @@
<!-- Customize your light theme here. -->
<item name="colorPrimary">@color/color_primary</item>
<item name="android:textCursorDrawable">@drawable/cursor_drawable</item>
<item name="android:windowDisablePreview">true</item>
</style>
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
@@ -34,6 +35,7 @@
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item>
<item name="android:windowDisablePreview">true</item>
</style>
<style name="Theme.Woka" parent="Base.Theme.Woka" />