smooth transition between LiveStreamPlayerActivity opening

MoreHomeActivity creation

Blogs api integration
This commit is contained in:
2024-05-31 20:27:01 +05:30
parent 5bc2b44bc1
commit 78f3cd85e6
33 changed files with 483 additions and 13 deletions

View File

@@ -0,0 +1,21 @@
package com.woka.home
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.databinding.BlogViewHolderBinding
import com.woka.modules.blogs.Blog
class BlogsAdapter(config: AsyncDifferConfig<Blog>) :
ListAdapter<Blog, BlogsAdapter.BlogViewHolder>(config) {
inner class BlogViewHolder(binding: BlogViewHolderBinding): ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BlogViewHolder {
}
override fun onBindViewHolder(holder: BlogViewHolder, position: Int) {
}
}

View File

@@ -0,0 +1,45 @@
package com.woka.home
import android.graphics.Color
import android.os.Bundle
import android.view.WindowManager
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.modules.BlogsViewModel
import com.woka.utils.WokaBaseActivity
import com.woka.utils.lightStatusBar
class MoreHomeActivity : WokaBaseActivity() {
private lateinit var blogsViewModel: BlogsViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_more_home)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = getColor(R.color.more_bg)
window.lightStatusBar()
blogsViewModel = ViewModelProvider(this)[BlogsViewModel::class.java]
setObservers()
}
private fun setObservers() {
blogsViewModel.blogsLiveData.observe(this){
}
}
}

View File

@@ -22,6 +22,7 @@ import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentHome1Binding
import com.woka.home.HomeViewModel
import com.woka.home.MoreHomeActivity
import com.woka.home.TimePeriod
import com.woka.mvvm.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
@@ -58,22 +59,14 @@ class Home1Fragment : Fragment() {
player = ExoPlayer.Builder(it).build()
}
initViews()
initPlayerView()
handleScaleAnimations()
updateBackground()
minuteReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// this function is called every minute
if (intent?.action == ACTION_TIME_TICK) {
updateBackground()
}
}
}
activity?.registerReceiver(minuteReceiver, IntentFilter(ACTION_TIME_TICK))
setObservers()
clickEvents()
@@ -81,12 +74,22 @@ class Home1Fragment : Fragment() {
return binding.root
}
private fun initViews() {
if (viewModel.isHomeBackgroundBlurred){
binding.playerView.hide()
}else{
binding.playerView.show()
}
}
override fun onResume() {
super.onResume()
handleAnimations()
if (!player.isPlaying){
player.play()
}
binding.playerView.show()
}
override fun onPause() {
@@ -98,6 +101,10 @@ class Home1Fragment : Fragment() {
if (star2Animator?.isRunning == true) star2Animator?.pause()
if (player.isPlaying) player.pause()
if (viewModel.isHomeBackgroundBlurred){
binding.playerView.hide()
}
}
override fun onDestroy() {
@@ -140,6 +147,16 @@ class Home1Fragment : Fragment() {
moreTxt.text = getString(R.string.more)
}
}
minuteReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
// this function is called every minute
if (intent?.action == ACTION_TIME_TICK) {
updateBackground()
}
}
}
activity?.registerReceiver(minuteReceiver, IntentFilter(ACTION_TIME_TICK))
}
private fun clickEvents() {
@@ -149,6 +166,11 @@ class Home1Fragment : Fragment() {
startActivity(Intent(it, LiveStreamPlayerActivity::class.java))
}
}
more.setOnClickListener {
activity?.let {
startActivity(Intent(it, MoreHomeActivity::class.java))
} }
}
}

View File

@@ -1,10 +1,14 @@
package com.woka.home.fragments
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Canvas
import android.media.MediaMetadataRetriever
import android.net.Uri
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.TextureView
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
@@ -18,7 +22,8 @@ import com.woka.mvvm.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
import com.woka.players.LiveStreamPlayerActivity
import com.woka.utils.UserType
import com.woka.utils.toast
import com.woka.utils.hide
import com.woka.utils.show
class Home2Fragment : Fragment() {
@@ -39,6 +44,8 @@ class Home2Fragment : Fragment() {
player = ExoPlayer.Builder(it).build()
}
iniViews()
initPlayerView()
setObservers()
@@ -48,16 +55,32 @@ class Home2Fragment : Fragment() {
return binding.root
}
private fun iniViews() {
if (viewModel.isHomeBackgroundBlurred){
binding.playerView.hide()
}else{
binding.playerView.show()
}
}
override fun onResume() {
super.onResume()
if (!player.isPlaying){
player.play()
}
binding.playerView.show()
}
override fun onPause() {
super.onPause()
if (player.isPlaying) player.pause()
if (player.isPlaying) {
player.pause()
}
if (viewModel.isHomeBackgroundBlurred){
binding.playerView.hide()
}
}
override fun onDestroy() {

View File

@@ -0,0 +1,17 @@
package com.woka.modules
import com.woka.modules.blogs.BlogsResponse
import com.woka.networking.ApiResult
import com.woka.networking.RetrofitHelper
import com.woka.networking.RetrofitHelper.handleApiCall
class BlogsRepository {
private val apiService = RetrofitHelper.getRetrofit().create(ModuleApiService::class.java)
suspend fun getBlogs(): ApiResult<BlogsResponse>{
return handleApiCall{
apiService.getBlogs()
}
}
}

View File

@@ -0,0 +1,30 @@
package com.woka.modules
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.woka.modules.blogs.BlogsResponse
import com.woka.networking.ApiResult
import kotlinx.coroutines.launch
class BlogsViewModel: ViewModel() {
private val blogsRepository = BlogsRepository()
private val _blogsLiveData = MutableLiveData<ApiResult<BlogsResponse>>()
val blogsLiveData: LiveData<ApiResult<BlogsResponse>?>
get() = _blogsLiveData
init {
loadBlogs()
}
private fun loadBlogs(){
viewModelScope.launch {
_blogsLiveData.postValue(ApiResult.Loading())
_blogsLiveData.postValue(blogsRepository.getBlogs())
}
}
}

View File

@@ -0,0 +1,12 @@
package com.woka.modules
import com.woka.modules.blogs.BlogsResponse
import com.woka.networking.ApiResponse
import retrofit2.Response
import retrofit2.http.GET
interface ModuleApiService {
@GET("blogs")
suspend fun getBlogs(): Response<ApiResponse<BlogsResponse>>
}

View File

@@ -0,0 +1,12 @@
package com.woka.modules.blogs
data class Blog(
val article_url: Any?,
val category_master_id: String?,
val content_more_details: List<ContentMoreDetail?>?,
val description: String?,
val id: Int?,
val language_master_id: Int?,
val thumbnail_path: String?,
val title: String?
)

View File

@@ -0,0 +1,6 @@
package com.woka.modules.blogs
data class BlogsResponse(
val blogs: List<Blog?>?,
val total_records: Int?
)

View File

@@ -0,0 +1,11 @@
package com.woka.modules.blogs
data class ContentMoreDetail(
val article: String?,
val content_id: Int?,
val description: String?,
val id: Int?,
val language_master_id: Int?,
val post_type: Int?,
val title: String?
)

View File

@@ -90,7 +90,11 @@ class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
override fun onFullscreenExitRequested() {
player.stop()
onBackPressedDispatcher.onBackPressed()
val windowInsetsController =
WindowCompat.getInsetsController(window, window.decorView)
windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
finish()
}
override fun onAllowRotationChanged(allowRotation: Boolean) {}