Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
PruthiviRaj27 committed Feb 2, 2023
1 parent e4ee1c9 commit 2965a0d
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 130 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity
class RunningContentEntity(@PrimaryKey val id: Long):BaseContentEntity()
data class RunningContentEntity(@PrimaryKey val id: Long):BaseContentEntity()
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView

class ContentStateListAdapter() :
ListAdapter<DomainContent, ContentStateViewHolder>(DOMAIN_CONTENT_COMPARATOR) {
class BaseContentListAdapter:
ListAdapter<DomainContent, BaseContentListViewHolder>(DOMAIN_CONTENT_COMPARATOR) {

var contents: List<DomainContent> = listOf()

Expand Down Expand Up @@ -43,13 +43,13 @@ class ContentStateListAdapter() :
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): ContentStateViewHolder {
): BaseContentListViewHolder {
val binding = ContentStateListItemBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return ContentStateViewHolder(binding)
return BaseContentListViewHolder(binding)
}

private fun onItemClick(content: DomainContent, context: Context) {
Expand All @@ -67,15 +67,15 @@ class ContentStateListAdapter() :
return null
}

override fun onBindViewHolder(holder: ContentStateViewHolder, position: Int) {
override fun onBindViewHolder(holder: BaseContentListViewHolder, position: Int) {
val content = getItem(position)
if (content != null) {
holder.bind(content) { onItemClick(content, holder.itemView.context) }
}
}
}

class ContentStateViewHolder(binding: ContentStateListItemBinding) :
class BaseContentListViewHolder(binding: ContentStateListItemBinding) :
RecyclerView.ViewHolder(binding.root) {
private val title = binding.title
private val path = binding.path
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import com.facebook.shimmer.ShimmerFrameLayout

abstract class BaseContentListFragment: Fragment(), EmptyViewListener {

private lateinit var binding : BaseContentListLayoutBinding
protected lateinit var binding : BaseContentListLayoutBinding
private lateinit var loadingPlaceholder: ShimmerFrameLayout

// Protected properties are used in sub classes
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,26 +1,40 @@
package `in`.testpress.course.fragments

import `in`.testpress.course.R
import `in`.testpress.course.TestpressCourse
import `in`.testpress.course.adapter.BaseContentListAdapter
import `in`.testpress.course.domain.DomainContent
import `in`.testpress.course.repository.RunningContentsRepository
import `in`.testpress.course.viewmodels.RunningContentsListViewModel
import `in`.testpress.enums.Status
import `in`.testpress.fragments.EmptyViewListener
import android.os.Bundle
import android.view.View
import android.widget.ProgressBar
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class RunningContentsListFragment: BaseContentStateFragment(),EmptyViewListener {
class RunningContentsListFragment: BaseContentListFragment(),EmptyViewListener {

private var courseId: Long = -1
private lateinit var viewModel : RunningContentsListViewModel
private lateinit var adapter: BaseContentListAdapter
private lateinit var progressBar: ProgressBar

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
parseArguments()
initializeViewModel()
}

private fun parseArguments() {
courseId = arguments!!.getString(TestpressCourse.COURSE_ID)?.toLong()!!
}

private fun initializeViewModel() {
viewModel = ViewModelProvider(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
Expand All @@ -31,12 +45,35 @@ class RunningContentsListFragment: BaseContentStateFragment(),EmptyViewListener

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
bindView()
adapter = BaseContentListAdapter()
recyclerView.apply {
layoutManager = LinearLayoutManager(requireContext())
adapter = this@RunningContentsListFragment.adapter
addItemDecoration(DividerItemDecoration(context, DividerItemDecoration.VERTICAL))
}
setRecyclerViewScrollListener()
initializeObservers()
viewModel.fetchRunningContents()
swipeRefreshLayout.setOnRefreshListener { viewModel.fetchRunningContents() }
}

override fun fetchMore() {
private fun bindView(){
progressBar = binding.bottomProgressBar
}

private fun setRecyclerViewScrollListener(){
val layoutManager = recyclerView.layoutManager as LinearLayoutManager
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener(){
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (recyclerView.adapter?.itemCount == (layoutManager.findLastCompletelyVisibleItemPosition() + 1)){
fetchMore()
}
}
})
}

private fun fetchMore() {
if (viewModel.page != null) progressBar.visibility = View.VISIBLE
viewModel.fetchMoreRunningContents()
}
Expand All @@ -52,19 +89,16 @@ class RunningContentsListFragment: BaseContentStateFragment(),EmptyViewListener
hideLoadingPlaceholder()
val items = resource.data!! as List<DomainContent>
if (items.isEmpty()) showEmptyList(resources.getString(R.string.testpress_no_running_contents))
mAdapter.contents = items
mAdapter.notifyDataSetChanged()
swipeRefreshLayout.isRefreshing = false
adapter.contents = items
adapter.notifyDataSetChanged()
}
Status.ERROR -> {
progressBar.visibility = View.GONE
hideLoadingPlaceholder()
if (resource.data != null) {
swipeRefreshLayout.isRefreshing = false
mAdapter.contents = resource.data as List<DomainContent>
mAdapter.notifyDataSetChanged()
adapter.contents = resource.data as List<DomainContent>
adapter.notifyDataSetChanged()
} else {
swipeRefreshLayout.isRefreshing = false
emptyViewFragment.displayError(resource.exception!!)
}
}
Expand Down
13 changes: 12 additions & 1 deletion course/src/main/res/layout/base_content_list_layout.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,18 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
android:layout_above="@id/bottom_progress_bar"
tools:listitem="@layout/content_state_list_item" />

<ProgressBar
android:id="@+id/bottom_progress_bar"
android:layout_width="match_parent"
android:layout_height="72dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:visibility="gone"
android:layout_alignParentBottom="true"/>

<FrameLayout
android:id="@+id/empty_view_fragment"
Expand Down

0 comments on commit 2965a0d

Please sign in to comment.