Merge pull request #28 from hmalik144/show_empty_view

Empty view displayed
This commit is contained in:
2023-09-05 12:30:55 +01:00
committed by GitHub
9 changed files with 85 additions and 38 deletions

View File

@@ -13,8 +13,8 @@ android {
applicationId "com.appttude.h_mal.farmr"
minSdkVersion MIN_SDK_VERSION
targetSdkVersion TARGET_SDK_VERSION
versionCode 2
versionName "2.0"
versionCode 3
versionName "2.1"
testInstrumentationRunner 'com.appttude.h_mal.farmr.application.TestRunner'
vectorDrawables.useSupportLibrary = true
}

View File

@@ -1,6 +1,5 @@
package com.appttude.h_mal.farmr.ui.robots
import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions.scrollTo
import com.appttude.h_mal.farmr.R
import com.appttude.h_mal.farmr.model.ShiftType

View File

@@ -0,0 +1,59 @@
package com.appttude.h_mal.farmr.base
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.appttude.h_mal.farmr.utils.hide
import com.appttude.h_mal.farmr.utils.show
abstract class BaseListAdapter<T : Any>(
diff: DiffUtil.ItemCallback<T>,
private val layoutId: Int,
private val emptyView: View
) : ListAdapter<T, BaseListAdapter.CurrentViewHolder>(diff) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): CurrentViewHolder {
val currentViewHolder = LayoutInflater
.from(parent.context)
.inflate(layoutId, parent, false)
return CurrentViewHolder(currentViewHolder)
}
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
super.onAttachedToRecyclerView(recyclerView)
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
checkEmpty()
}
override fun onItemRangeChanged(positionStart: Int, itemCount: Int) {
checkEmpty()
}
override fun onItemRangeMoved(fromPosition: Int, toPosition: Int, itemCount: Int) {
checkEmpty()
}
override fun onItemRangeRemoved(positionStart: Int, itemCount: Int) {
checkEmpty()
}
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
checkEmpty()
}
fun checkEmpty() {
if (itemCount == 0) emptyView.show()
else emptyView.hide()
}
})
}
class CurrentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}

View File

@@ -7,10 +7,10 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.appttude.h_mal.farmr.utils.generateView
open class BaseRecyclerAdapter<T: Any>(
open class BaseRecyclerAdapter<T : Any>(
@LayoutRes private val emptyViewId: Int,
@LayoutRes private val currentViewId: Int
): RecyclerView.Adapter<ViewHolder>() {
) : RecyclerView.Adapter<ViewHolder>() {
var list: List<T>? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -37,6 +37,6 @@ open class BaseRecyclerAdapter<T: Any>(
open fun bindEmptyView(view: View) {}
open fun bindCurrentView(view: View, position: Int, data: T) {}
class EmptyViewHolder(itemView: View): ViewHolder(itemView)
class CurrentViewHolder(itemView: View): ViewHolder(itemView)
class EmptyViewHolder(itemView: View) : ViewHolder(itemView)
class CurrentViewHolder(itemView: View) : ViewHolder(itemView)
}

View File

@@ -41,20 +41,13 @@ class FragmentMain : BaseFragment<MainViewModel>(R.layout.fragment_main), BackPr
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
mAdapter = ShiftListAdapter(this) {
emptyView = view.findViewById(R.id.empty_view)
productListView = view.findViewById(R.id.list_item_view)
mAdapter = ShiftListAdapter(this, emptyView) {
viewModel.deleteShift(it)
}
productListView = view.findViewById(R.id.list_item_view)
productListView.adapter = mAdapter
emptyView = view.findViewById(R.id.empty_view)
mAdapter.registerAdapterDataObserver(object : AdapterDataObserver() {
override fun onChanged() {
super.onChanged()
if (mAdapter.itemCount == 0) emptyView.show()
else emptyView.hide()
}
})
view.findViewById<FloatingActionButton>(R.id.fab1).setOnClickListener {
navigateToFragment(FragmentAddItem(), name = "additem")

View File

@@ -3,34 +3,27 @@ package com.appttude.h_mal.farmr.ui
import android.annotation.SuppressLint
import android.app.AlertDialog
import android.os.Bundle
import android.view.ViewGroup
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import com.appttude.h_mal.farmr.R
import com.appttude.h_mal.farmr.base.BaseRecyclerAdapter
import com.appttude.h_mal.farmr.base.BaseListAdapter
import com.appttude.h_mal.farmr.data.legacydb.ShiftObject
import com.appttude.h_mal.farmr.model.ShiftType
import com.appttude.h_mal.farmr.utils.ID
import com.appttude.h_mal.farmr.utils.generateView
import com.appttude.h_mal.farmr.utils.formatToTwoDpString
import com.appttude.h_mal.farmr.utils.navigateToFragment
class ShiftListAdapter(
private val fragment: Fragment,
emptyView: View,
private val longPressCallback: (Long) -> Unit
) : ListAdapter<ShiftObject, BaseRecyclerAdapter.CurrentViewHolder>(diffCallBack) {
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): BaseRecyclerAdapter.CurrentViewHolder {
val currentViewHolder = parent.generateView(R.layout.list_item_1)
return BaseRecyclerAdapter.CurrentViewHolder(currentViewHolder)
}
) : BaseListAdapter<ShiftObject>(diffCallBack, R.layout.list_item_1, emptyView) {
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: BaseRecyclerAdapter.CurrentViewHolder, position: Int) {
override fun onBindViewHolder(holder: CurrentViewHolder, position: Int) {
val view = holder.itemView
val data = getItem(position)
@@ -47,7 +40,7 @@ class ShiftListAdapter(
val typeText: String = data.type
val descriptionText: String = data.description
val dateText: String = data.date
val totalPayText: String = data.totalPay.toString()
val totalPayText: String = data.totalPay.formatToTwoDpString()
descriptionTextView.text = descriptionText
dateTextView.text = dateText

View File

@@ -22,6 +22,7 @@ class SplashScreen : Activity() {
Handler(Looper.getMainLooper()).postDelayed({
startActivity(i)
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
this.finish()
}, SPLASH_TIME_OUT)
}

View File

@@ -8,9 +8,8 @@ import java.util.Currency
import java.util.Date
import java.util.Locale
fun String.formatToTwoDp(): Float {
val formattedString = String.format("%.2f", this)
return formattedString.toFloat()
fun String.formatToTwoDp(): String {
return String.format("%.2f", this)
}
fun Float.formatToTwoDp(): Float {
@@ -27,7 +26,7 @@ fun Float.formatAsCurrencyString(): String? {
}
fun Float.formatToTwoDpString(): String {
return formatToTwoDp().toString()
return toBigDecimal().setScale(2).toString()
}
fun String.dateStringIsValid(): Boolean {

View File

@@ -24,8 +24,11 @@
app:backgroundTint="@color/colorPrimary" />
<include
android:visibility="gone"
android:layout_centerInParent="true"
android:visibility="visible"
layout="@layout/empty_list_view"
android:id="@+id/empty_view"/>
android:id="@+id/empty_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>