mirror of
https://github.com/hmalik144/Farmr.git
synced 2025-12-10 02:25:19 +00:00
- mid commit
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'org.jetbrains.kotlin.android'
|
apply plugin: 'org.jetbrains.kotlin.android'
|
||||||
|
apply plugin: 'androidx.navigation.safeargs'
|
||||||
|
|
||||||
def relStorePassword = System.getenv("RELEASE_STORE_PASSWORD")
|
def relStorePassword = System.getenv("RELEASE_STORE_PASSWORD")
|
||||||
def relKeyPassword = System.getenv("RELEASE_KEY_PASSWORD")
|
def relKeyPassword = System.getenv("RELEASE_KEY_PASSWORD")
|
||||||
|
|||||||
@@ -119,61 +119,54 @@ class FragmentAddItem : BaseFragment<SubmissionViewModel>(R.layout.fragment_add_
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupViewAfterViewCreated() {
|
private fun setupViewAfterViewCreated() {
|
||||||
// val id = arguments?.let { FragmentAddItemArgs.fromBundle(it).id)
|
val id = arguments?.let { FragmentAddItemArgs.fromBundle(it).shiftId }
|
||||||
|
|
||||||
id = arguments?.getLong(ID)
|
|
||||||
wholeView.hide()
|
wholeView.hide()
|
||||||
|
|
||||||
val title = when (arguments?.containsKey(ID)) {
|
val title = id?.let {
|
||||||
true -> {
|
// Since we are editing a shift lets load the shift data into the views
|
||||||
// Since we are editing a shift lets load the shift data into the views
|
viewModel.getCurrentShift(arguments!!.getLong(ID))?.run {
|
||||||
viewModel.getCurrentShift(arguments!!.getLong(ID))?.run {
|
mLocationEditText.setText(description)
|
||||||
mLocationEditText.setText(description)
|
mDateEditText.setText(date)
|
||||||
mDateEditText.setText(date)
|
|
||||||
|
|
||||||
// Set types
|
// Set types
|
||||||
mType = ShiftType.getEnumByType(type)
|
mType = ShiftType.getEnumByType(type)
|
||||||
mDescription = description
|
mDescription = description
|
||||||
mDate = date
|
mDate = date
|
||||||
mPayRate = rateOfPay
|
mPayRate = rateOfPay
|
||||||
|
|
||||||
when (ShiftType.getEnumByType(type)) {
|
when (ShiftType.getEnumByType(type)) {
|
||||||
ShiftType.HOURLY -> {
|
ShiftType.HOURLY -> {
|
||||||
mHourlyRadioButton.isChecked = true
|
mHourlyRadioButton.isChecked = true
|
||||||
mPieceRadioButton.isChecked = false
|
mPieceRadioButton.isChecked = false
|
||||||
mTimeInEditText.setText(timeIn)
|
mTimeInEditText.setText(timeIn)
|
||||||
mTimeOutEditText.setText(timeOut)
|
mTimeOutEditText.setText(timeOut)
|
||||||
mBreakEditText.setText(breakMins.toString())
|
mBreakEditText.setText(breakMins.toString())
|
||||||
val durationText = "${duration.formatToTwoDpString()} Hours"
|
val durationText = "${duration.formatToTwoDpString()} Hours"
|
||||||
mDurationTextView.text = durationText
|
mDurationTextView.text = durationText
|
||||||
|
|
||||||
// Set fields
|
// Set fields
|
||||||
mTimeIn = timeIn
|
mTimeIn = timeIn
|
||||||
mTimeOut = timeOut
|
mTimeOut = timeOut
|
||||||
mBreaks = breakMins
|
mBreaks = breakMins
|
||||||
}
|
|
||||||
|
|
||||||
ShiftType.PIECE -> {
|
|
||||||
mHourlyRadioButton.isChecked = false
|
|
||||||
mPieceRadioButton.isChecked = true
|
|
||||||
mUnitEditText.setText(units.formatToTwoDpString())
|
|
||||||
|
|
||||||
// Set piece rate units
|
|
||||||
mUnits = units
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
mPayRateEditText.setText(rateOfPay.formatAsCurrencyString())
|
|
||||||
mTotalPayTextView.text = totalPay.formatAsCurrencyString()
|
|
||||||
|
|
||||||
calculateTotalPay()
|
ShiftType.PIECE -> {
|
||||||
|
mHourlyRadioButton.isChecked = false
|
||||||
|
mPieceRadioButton.isChecked = true
|
||||||
|
mUnitEditText.setText(units.formatToTwoDpString())
|
||||||
|
|
||||||
|
// Set piece rate units
|
||||||
|
mUnits = units
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
mPayRateEditText.setText(rateOfPay.formatAsCurrencyString())
|
||||||
|
mTotalPayTextView.text = totalPay.formatAsCurrencyString()
|
||||||
|
|
||||||
// Return title
|
calculateTotalPay()
|
||||||
getString(R.string.edit_item_title)
|
|
||||||
}
|
}
|
||||||
|
getString(R.string.edit_item_title)
|
||||||
else -> getString(R.string.add_item_title)
|
} ?: getString(R.string.add_item_title)
|
||||||
}
|
|
||||||
setTitle(title)
|
setTitle(title)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -267,6 +260,7 @@ class FragmentAddItem : BaseFragment<SubmissionViewModel>(R.layout.fragment_add_
|
|||||||
StringBuilder().append(mDuration).append(" hours").toString()
|
StringBuilder().append(mDuration).append(" hours").toString()
|
||||||
mDuration!! * mPayRate
|
mDuration!! * mPayRate
|
||||||
}
|
}
|
||||||
|
|
||||||
ShiftType.PIECE -> {
|
ShiftType.PIECE -> {
|
||||||
(mUnits ?: 0f) * mPayRate
|
(mUnits ?: 0f) * mPayRate
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import com.appttude.h_mal.farmr.model.ShiftType
|
|||||||
import com.appttude.h_mal.farmr.utils.CURRENCY
|
import com.appttude.h_mal.farmr.utils.CURRENCY
|
||||||
import com.appttude.h_mal.farmr.utils.formatAsCurrencyString
|
import com.appttude.h_mal.farmr.utils.formatAsCurrencyString
|
||||||
import com.appttude.h_mal.farmr.utils.hide
|
import com.appttude.h_mal.farmr.utils.hide
|
||||||
|
import com.appttude.h_mal.farmr.utils.navigateTo
|
||||||
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
||||||
import com.appttude.h_mal.farmr.utils.show
|
import com.appttude.h_mal.farmr.utils.show
|
||||||
import com.appttude.h_mal.farmr.viewmodel.InfoViewModel
|
import com.appttude.h_mal.farmr.viewmodel.InfoViewModel
|
||||||
@@ -52,11 +53,14 @@ class FurtherInfoFragment : BaseFragment<InfoViewModel>(R.layout.fragment_futher
|
|||||||
hourlyDetailHolder = view.findViewById(R.id.details_hourly_details)
|
hourlyDetailHolder = view.findViewById(R.id.details_hourly_details)
|
||||||
unitsHolder = view.findViewById(R.id.details_units_holder)
|
unitsHolder = view.findViewById(R.id.details_units_holder)
|
||||||
|
|
||||||
|
val id = FurtherInfoFragmentArgs.fromBundle(requireArguments()).shiftId
|
||||||
|
|
||||||
editButton.setOnClickListener {
|
editButton.setOnClickListener {
|
||||||
navigateToFragment(FragmentAddItem(), name = "additem", bundle = arguments!!)
|
val nav = FragmentAddItemDirections.furtherInfoToAddItem(id)
|
||||||
|
navigateTo(nav)
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.retrieveData(arguments)
|
viewModel.retrieveData(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSuccess(data: Any?) {
|
override fun onSuccess(data: Any?) {
|
||||||
|
|||||||
@@ -7,13 +7,16 @@ import android.os.Bundle
|
|||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.appcompat.widget.Toolbar
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
|
import androidx.navigation.fragment.NavHostFragment
|
||||||
import com.appttude.h_mal.farmr.R
|
import com.appttude.h_mal.farmr.R
|
||||||
import com.appttude.h_mal.farmr.base.BackPressedListener
|
import com.appttude.h_mal.farmr.base.BackPressedListener
|
||||||
import com.appttude.h_mal.farmr.base.BaseActivity
|
import com.appttude.h_mal.farmr.base.BaseActivity
|
||||||
|
import com.appttude.h_mal.farmr.utils.goBack
|
||||||
import com.appttude.h_mal.farmr.utils.popBackStack
|
import com.appttude.h_mal.farmr.utils.popBackStack
|
||||||
|
|
||||||
class MainActivity : BaseActivity() {
|
class MainActivity : BaseActivity() {
|
||||||
private lateinit var toolbar: Toolbar
|
private lateinit var toolbar: Toolbar
|
||||||
|
private lateinit var navHost: NavHostFragment
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@@ -21,8 +24,10 @@ class MainActivity : BaseActivity() {
|
|||||||
toolbar = findViewById(R.id.toolbar)
|
toolbar = findViewById(R.id.toolbar)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
val fragmentTransaction = supportFragmentManager.beginTransaction()
|
navHost = supportFragmentManager
|
||||||
fragmentTransaction.replace(R.id.container, FragmentMain()).addToBackStack("main").commit()
|
.findFragmentById(R.id.container) as NavHostFragment
|
||||||
|
val navController = navHost.navController
|
||||||
|
navController.setGraph(R.navigation.shift_navigation)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||||
@@ -37,8 +42,7 @@ class MainActivity : BaseActivity() {
|
|||||||
currentFragment.onBackPressed()
|
currentFragment.onBackPressed()
|
||||||
} else {
|
} else {
|
||||||
if (supportFragmentManager.backStackEntryCount > 1) {
|
if (supportFragmentManager.backStackEntryCount > 1) {
|
||||||
// Todo: go back
|
navHost.goBack()
|
||||||
// goBack()
|
|
||||||
} else {
|
} else {
|
||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import com.appttude.h_mal.farmr.data.legacydb.ShiftObject
|
|||||||
import com.appttude.h_mal.farmr.model.ShiftType
|
import com.appttude.h_mal.farmr.model.ShiftType
|
||||||
import com.appttude.h_mal.farmr.utils.ID
|
import com.appttude.h_mal.farmr.utils.ID
|
||||||
import com.appttude.h_mal.farmr.utils.generateView
|
import com.appttude.h_mal.farmr.utils.generateView
|
||||||
|
import com.appttude.h_mal.farmr.utils.navigateTo
|
||||||
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
import com.appttude.h_mal.farmr.utils.navigateToFragment
|
||||||
|
|
||||||
class ShiftListAdapter(
|
class ShiftListAdapter(
|
||||||
@@ -71,27 +72,16 @@ class ShiftListAdapter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val b: Bundle = Bundle()
|
|
||||||
b.putLong(ID, data.id)
|
|
||||||
view.setOnClickListener {
|
view.setOnClickListener {
|
||||||
// Navigate to further info
|
// Navigate to further info
|
||||||
fragment.navigateToFragment(
|
val nav = FurtherInfoFragmentDirections.mainToFurtherInfo(data.id)
|
||||||
FurtherInfoFragment(),
|
fragment.navigateTo(nav)
|
||||||
bundle = b,
|
|
||||||
name = "furtherinfo"
|
|
||||||
)
|
|
||||||
// val nav = FragmentMainDirections.mainToFurtherInfo(data.id)
|
|
||||||
// fragment.navigateTo(nav)
|
|
||||||
}
|
}
|
||||||
editView.setOnClickListener {
|
editView.setOnClickListener {
|
||||||
// Navigate to edit
|
// Navigate to edit
|
||||||
fragment.navigateToFragment(
|
val nav = FragmentAddItemDirections.mainToAddItem(data.id)
|
||||||
FragmentAddItem(),
|
fragment.navigateTo(nav)
|
||||||
bundle = b,
|
|
||||||
name = "additem"
|
|
||||||
)
|
|
||||||
// val nav = FragmentMainDirections.mainToAddItem(data.id)
|
|
||||||
// fragment.navigateTo(nav)
|
|
||||||
}
|
}
|
||||||
view.setOnLongClickListener {
|
view.setOnLongClickListener {
|
||||||
AlertDialog.Builder(it.context)
|
AlertDialog.Builder(it.context)
|
||||||
|
|||||||
@@ -10,13 +10,7 @@ class InfoViewModel(
|
|||||||
repository: Repository
|
repository: Repository
|
||||||
) : ShiftViewModel(repository) {
|
) : ShiftViewModel(repository) {
|
||||||
|
|
||||||
fun retrieveData(bundle: Bundle?) {
|
fun retrieveData(id: Long) {
|
||||||
val id = bundle?.getLong(ID)
|
|
||||||
if (id == null) {
|
|
||||||
onError("Failed to retrieve shift")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
val shift = getCurrentShift(id)
|
val shift = getCurrentShift(id)
|
||||||
if (shift == null) {
|
if (shift == null) {
|
||||||
onError("Failed to retrieve shift")
|
onError("Failed to retrieve shift")
|
||||||
|
|||||||
@@ -32,14 +32,16 @@
|
|||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<androidx.fragment.app.FragmentContainerView
|
||||||
android:layout_below="@id/appbar"
|
android:layout_below="@id/appbar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
|
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||||
app:layout_constraintTop_toBottomOf="@id/appbar"
|
app:layout_constraintTop_toBottomOf="@id/appbar"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
android:id="@+id/container">
|
android:id="@+id/container"
|
||||||
</FrameLayout>
|
tools:layout="@layout/fragment_main">
|
||||||
|
</androidx.fragment.app.FragmentContainerView>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -17,12 +17,10 @@ class InfoViewModelTest : ShiftViewModelTest<InfoViewModel>() {
|
|||||||
// Arrange
|
// Arrange
|
||||||
val id = anyLong()
|
val id = anyLong()
|
||||||
val shift = mockk<ShiftObject>()
|
val shift = mockk<ShiftObject>()
|
||||||
val bundle = mockk<Bundle>()
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
every { repository.readSingleShiftFromDatabase(id) }.returns(shift)
|
every { repository.readSingleShiftFromDatabase(id) }.returns(shift)
|
||||||
every { bundle.getLong(ID) }.returns(id)
|
viewModel.retrieveData(id)
|
||||||
viewModel.retrieveData(bundle)
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertIs<ShiftObject>(retrieveCurrentData())
|
assertIs<ShiftObject>(retrieveCurrentData())
|
||||||
@@ -32,35 +30,14 @@ class InfoViewModelTest : ShiftViewModelTest<InfoViewModel>() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun retrieveData_noValidBundleAndId_unsuccessfulRetrieval() {
|
|
||||||
// Arrange
|
|
||||||
val id = anyLong()
|
|
||||||
val shift = mockk<ShiftObject>()
|
|
||||||
val bundle = mockk<Bundle>()
|
|
||||||
|
|
||||||
// Act
|
|
||||||
every { repository.readSingleShiftFromDatabase(id) }.returns(shift)
|
|
||||||
every { bundle.getLong(ID) }.returns(id)
|
|
||||||
viewModel.retrieveData(null)
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
assertEquals(
|
|
||||||
retrieveCurrentError(),
|
|
||||||
"Failed to retrieve shift"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun retrieveData_validBundleNoShift_successfulRetrieval() {
|
fun retrieveData_validBundleNoShift_successfulRetrieval() {
|
||||||
// Arrange
|
// Arrange
|
||||||
val id = anyLong()
|
val id = anyLong()
|
||||||
val bundle = mockk<Bundle>()
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
every { repository.readSingleShiftFromDatabase(id) }.returns(null)
|
every { repository.readSingleShiftFromDatabase(id) }.returns(null)
|
||||||
every { bundle.getLong(ID) }.returns(id)
|
viewModel.retrieveData(id)
|
||||||
viewModel.retrieveData(bundle)
|
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(
|
assertEquals(
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ buildscript {
|
|||||||
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
|
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$NAVIGATION_VERSION"
|
||||||
classpath "com.android.tools.build:gradle:$GRADLE_PLUGIN_VERSION"
|
classpath "com.android.tools.build:gradle:$GRADLE_PLUGIN_VERSION"
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION"
|
||||||
classpath "com.autonomousapps:dependency-analysis-gradle-plugin:$GRADLE_ANALYZE_VERSION"
|
classpath "com.autonomousapps:dependency-analysis-gradle-plugin:$GRADLE_ANALYZE_VERSION"
|
||||||
|
|||||||
Reference in New Issue
Block a user