새로운 ASMR, 라이브 다시듣기 전체보기 페이지 추가
This commit is contained in:
		@@ -0,0 +1,108 @@
 | 
			
		||||
package kr.co.vividnext.sodalive.audio_content.main.v2.asmr
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.annotation.OptIn
 | 
			
		||||
import androidx.media3.common.util.UnstableApi
 | 
			
		||||
import androidx.recyclerview.widget.GridLayoutManager
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllAdapter
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllViewModel
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.base.BaseActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.common.Constants
 | 
			
		||||
import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration
 | 
			
		||||
import kr.co.vividnext.sodalive.common.LoadingDialog
 | 
			
		||||
import kr.co.vividnext.sodalive.databinding.ActivityAsmrNewContentAllBinding
 | 
			
		||||
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
 | 
			
		||||
import org.koin.android.ext.android.inject
 | 
			
		||||
 | 
			
		||||
@OptIn(UnstableApi::class)
 | 
			
		||||
class AsmrNewContentAllActivity : BaseActivity<ActivityAsmrNewContentAllBinding>(
 | 
			
		||||
    ActivityAsmrNewContentAllBinding::inflate
 | 
			
		||||
) {
 | 
			
		||||
    private val viewModel: AudioContentNewAllViewModel by inject()
 | 
			
		||||
 | 
			
		||||
    private lateinit var loadingDialog: LoadingDialog
 | 
			
		||||
 | 
			
		||||
    private lateinit var newContentAdapter: AudioContentNewAllAdapter
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        bindData()
 | 
			
		||||
        viewModel.selectTheme(theme = "ASMR", isFree = false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun setupView() {
 | 
			
		||||
        loadingDialog = LoadingDialog(this, layoutInflater)
 | 
			
		||||
        binding.toolbar.tvBack.text = "새로운 ASMR"
 | 
			
		||||
        binding.toolbar.tvBack.setOnClickListener { finish() }
 | 
			
		||||
 | 
			
		||||
        setupNewContent()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupNewContent() {
 | 
			
		||||
        val spanCount = 3
 | 
			
		||||
        val spacing = 40
 | 
			
		||||
        newContentAdapter = AudioContentNewAllAdapter(
 | 
			
		||||
            itemWidth = (screenWidth - (spacing * (spanCount + 1))) / 3,
 | 
			
		||||
            onClickItem = {
 | 
			
		||||
                startActivity(
 | 
			
		||||
                    Intent(this, AudioContentDetailActivity::class.java).apply {
 | 
			
		||||
                        putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, it)
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
            },
 | 
			
		||||
            onClickCreator = {
 | 
			
		||||
                startActivity(
 | 
			
		||||
                    Intent(this, UserProfileActivity::class.java).apply {
 | 
			
		||||
                        putExtra(Constants.EXTRA_USER_ID, it)
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.layoutManager = GridLayoutManager(this, spanCount)
 | 
			
		||||
        binding.rvContent.addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, true))
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.addOnScrollListener(object : RecyclerView.OnScrollListener() {
 | 
			
		||||
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
 | 
			
		||||
                super.onScrolled(recyclerView, dx, dy)
 | 
			
		||||
 | 
			
		||||
                val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager?)!!
 | 
			
		||||
                    .findLastCompletelyVisibleItemPosition()
 | 
			
		||||
                val itemTotalCount = recyclerView.adapter!!.itemCount - 1
 | 
			
		||||
 | 
			
		||||
                // 스크롤이 끝에 도달했는지 확인
 | 
			
		||||
                if (!recyclerView.canScrollVertically(1) &&
 | 
			
		||||
                    lastVisibleItemPosition == itemTotalCount
 | 
			
		||||
                ) {
 | 
			
		||||
                    viewModel.getNewContentList()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.adapter = newContentAdapter
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun bindData() {
 | 
			
		||||
        viewModel.isLoading.observe(this) {
 | 
			
		||||
            if (it) {
 | 
			
		||||
                loadingDialog.show(screenWidth)
 | 
			
		||||
            } else {
 | 
			
		||||
                loadingDialog.dismiss()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewModel.toastLiveData.observe(this) {
 | 
			
		||||
            it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewModel.newContentListLiveData.observe(this) {
 | 
			
		||||
            newContentAdapter.addItems(it)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -151,7 +151,11 @@ class AudioContentMainTabAsmrFragment : BaseFragment<FragmentAudioContentMainTab
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupNewContent() {
 | 
			
		||||
        binding.ivNewContentAll.setOnClickListener {}
 | 
			
		||||
        binding.ivNewContentAll.setOnClickListener {
 | 
			
		||||
            startActivity(
 | 
			
		||||
                Intent(requireContext(), AsmrNewContentAllActivity::class.java)
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        newContentAdapter = AudioContentMainContentAdapter(
 | 
			
		||||
            onClickItem = {
 | 
			
		||||
@@ -207,7 +211,12 @@ class AudioContentMainTabAsmrFragment : BaseFragment<FragmentAudioContentMainTab
 | 
			
		||||
        binding.rvNewContent.adapter = newContentAdapter
 | 
			
		||||
 | 
			
		||||
        viewModel.newContentListLiveData.observe(viewLifecycleOwner) {
 | 
			
		||||
            newContentAdapter.addItems(it)
 | 
			
		||||
            if (it.isNotEmpty()) {
 | 
			
		||||
                binding.llNewContent.visibility = View.VISIBLE
 | 
			
		||||
                newContentAdapter.addItems(it)
 | 
			
		||||
            } else {
 | 
			
		||||
                binding.llNewContent.visibility = View.GONE
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -150,7 +150,11 @@ class AudioContentMainTabReplayFragment : BaseFragment<FragmentAudioContentMainT
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupNewContent() {
 | 
			
		||||
        binding.ivNewContentAll.setOnClickListener {}
 | 
			
		||||
        binding.ivNewContentAll.setOnClickListener {
 | 
			
		||||
            startActivity(
 | 
			
		||||
                Intent(requireContext(), ReplayNewContentAllActivity::class.java)
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        newContentAdapter = AudioContentMainContentAdapter(
 | 
			
		||||
            onClickItem = {
 | 
			
		||||
@@ -206,7 +210,12 @@ class AudioContentMainTabReplayFragment : BaseFragment<FragmentAudioContentMainT
 | 
			
		||||
        binding.rvNewContent.adapter = newContentAdapter
 | 
			
		||||
 | 
			
		||||
        viewModel.newContentListLiveData.observe(viewLifecycleOwner) {
 | 
			
		||||
            newContentAdapter.addItems(it)
 | 
			
		||||
            if (it.isNotEmpty()) {
 | 
			
		||||
                binding.llNewContent.visibility = View.VISIBLE
 | 
			
		||||
                newContentAdapter.addItems(it)
 | 
			
		||||
            } else {
 | 
			
		||||
                binding.llNewContent.visibility = View.GONE
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,108 @@
 | 
			
		||||
package kr.co.vividnext.sodalive.audio_content.main.v2.replay
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import androidx.annotation.OptIn
 | 
			
		||||
import androidx.media3.common.util.UnstableApi
 | 
			
		||||
import androidx.recyclerview.widget.GridLayoutManager
 | 
			
		||||
import androidx.recyclerview.widget.LinearLayoutManager
 | 
			
		||||
import androidx.recyclerview.widget.RecyclerView
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllAdapter
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.all.AudioContentNewAllViewModel
 | 
			
		||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.base.BaseActivity
 | 
			
		||||
import kr.co.vividnext.sodalive.common.Constants
 | 
			
		||||
import kr.co.vividnext.sodalive.common.GridSpacingItemDecoration
 | 
			
		||||
import kr.co.vividnext.sodalive.common.LoadingDialog
 | 
			
		||||
import kr.co.vividnext.sodalive.databinding.ActivityAsmrNewContentAllBinding
 | 
			
		||||
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
 | 
			
		||||
import org.koin.android.ext.android.inject
 | 
			
		||||
 | 
			
		||||
@OptIn(UnstableApi::class)
 | 
			
		||||
class ReplayNewContentAllActivity : BaseActivity<ActivityAsmrNewContentAllBinding>(
 | 
			
		||||
    ActivityAsmrNewContentAllBinding::inflate
 | 
			
		||||
) {
 | 
			
		||||
    private val viewModel: AudioContentNewAllViewModel by inject()
 | 
			
		||||
 | 
			
		||||
    private lateinit var loadingDialog: LoadingDialog
 | 
			
		||||
 | 
			
		||||
    private lateinit var newContentAdapter: AudioContentNewAllAdapter
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedInstanceState: Bundle?) {
 | 
			
		||||
        super.onCreate(savedInstanceState)
 | 
			
		||||
 | 
			
		||||
        bindData()
 | 
			
		||||
        viewModel.selectTheme(theme = "다시듣기", isFree = false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun setupView() {
 | 
			
		||||
        loadingDialog = LoadingDialog(this, layoutInflater)
 | 
			
		||||
        binding.toolbar.tvBack.text = "새로운 라이브 다시듣기"
 | 
			
		||||
        binding.toolbar.tvBack.setOnClickListener { finish() }
 | 
			
		||||
 | 
			
		||||
        setupNewContent()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setupNewContent() {
 | 
			
		||||
        val spanCount = 3
 | 
			
		||||
        val spacing = 40
 | 
			
		||||
        newContentAdapter = AudioContentNewAllAdapter(
 | 
			
		||||
            itemWidth = (screenWidth - (spacing * (spanCount + 1))) / 3,
 | 
			
		||||
            onClickItem = {
 | 
			
		||||
                startActivity(
 | 
			
		||||
                    Intent(this, AudioContentDetailActivity::class.java).apply {
 | 
			
		||||
                        putExtra(Constants.EXTRA_AUDIO_CONTENT_ID, it)
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
            },
 | 
			
		||||
            onClickCreator = {
 | 
			
		||||
                startActivity(
 | 
			
		||||
                    Intent(this, UserProfileActivity::class.java).apply {
 | 
			
		||||
                        putExtra(Constants.EXTRA_USER_ID, it)
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.layoutManager = GridLayoutManager(this, spanCount)
 | 
			
		||||
        binding.rvContent.addItemDecoration(GridSpacingItemDecoration(spanCount, spacing, true))
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.addOnScrollListener(object : RecyclerView.OnScrollListener() {
 | 
			
		||||
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
 | 
			
		||||
                super.onScrolled(recyclerView, dx, dy)
 | 
			
		||||
 | 
			
		||||
                val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager?)!!
 | 
			
		||||
                    .findLastCompletelyVisibleItemPosition()
 | 
			
		||||
                val itemTotalCount = recyclerView.adapter!!.itemCount - 1
 | 
			
		||||
 | 
			
		||||
                // 스크롤이 끝에 도달했는지 확인
 | 
			
		||||
                if (!recyclerView.canScrollVertically(1) &&
 | 
			
		||||
                    lastVisibleItemPosition == itemTotalCount
 | 
			
		||||
                ) {
 | 
			
		||||
                    viewModel.getNewContentList()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
        binding.rvContent.adapter = newContentAdapter
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun bindData() {
 | 
			
		||||
        viewModel.isLoading.observe(this) {
 | 
			
		||||
            if (it) {
 | 
			
		||||
                loadingDialog.show(screenWidth)
 | 
			
		||||
            } else {
 | 
			
		||||
                loadingDialog.dismiss()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewModel.toastLiveData.observe(this) {
 | 
			
		||||
            it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewModel.newContentListLiveData.observe(this) {
 | 
			
		||||
            newContentAdapter.addItems(it)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user