smooth transition between LiveStreamPlayerActivity opening
MoreHomeActivity creation Blogs api integration
This commit is contained in:
21
app/src/main/java/com/woka/home/BlogsAdapter.kt
Normal file
21
app/src/main/java/com/woka/home/BlogsAdapter.kt
Normal 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) {
|
||||
}
|
||||
}
|
||||
45
app/src/main/java/com/woka/home/MoreHomeActivity.kt
Normal file
45
app/src/main/java/com/woka/home/MoreHomeActivity.kt
Normal 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){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
} }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
17
app/src/main/java/com/woka/modules/BlogsRepository.kt
Normal file
17
app/src/main/java/com/woka/modules/BlogsRepository.kt
Normal 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()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
30
app/src/main/java/com/woka/modules/BlogsViewModel.kt
Normal file
30
app/src/main/java/com/woka/modules/BlogsViewModel.kt
Normal 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())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
12
app/src/main/java/com/woka/modules/ModuleApiService.kt
Normal file
12
app/src/main/java/com/woka/modules/ModuleApiService.kt
Normal 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>>
|
||||
}
|
||||
12
app/src/main/java/com/woka/modules/blogs/Blog.kt
Normal file
12
app/src/main/java/com/woka/modules/blogs/Blog.kt
Normal 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?
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.woka.modules.blogs
|
||||
|
||||
data class BlogsResponse(
|
||||
val blogs: List<Blog?>?,
|
||||
val total_records: Int?
|
||||
)
|
||||
@@ -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?
|
||||
)
|
||||
@@ -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) {}
|
||||
|
||||
Reference in New Issue
Block a user