diff --git a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt index daccd2f2ab857a915a8bc6098922652b52f7c718..f34429aab675bd5de2475345864836353f628181 100644 --- a/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt +++ b/app/src/main/java/com/example/bondoman/views/activities/MainActivity.kt @@ -57,6 +57,7 @@ class MainActivity : AppCompatActivity(), ParentActivityService { private lateinit var dialogParent: BlurView private lateinit var transactionViewModel: TransactionViewModel private lateinit var navController: NavController + private lateinit var navbar: BottomNavigationView // destinations private val destinationListeners = mutableListOf<(Int) -> Unit>() @@ -205,8 +206,9 @@ class MainActivity : AppCompatActivity(), ParentActivityService { dialogParent.setBlurEnabled(false) } + private fun configureNavigation() { - val navbar = findViewById<BottomNavigationView>(R.id.navbar) + navbar = findViewById<BottomNavigationView>(R.id.navbar) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment navController = navHostFragment.navController @@ -214,6 +216,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService { navbar.setupWithNavController(navController) + + navController.addOnDestinationChangedListener { _, destination, _ -> headerText.text = destination.label ?: headerText.text @@ -361,6 +365,10 @@ class MainActivity : AppCompatActivity(), ParentActivityService { ) } + override fun getNavbarView(): BottomNavigationView { + return navbar + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/com/example/bondoman/views/fragments/ScanReceiptResultFragment.kt b/app/src/main/java/com/example/bondoman/views/fragments/ScanReceiptResultFragment.kt index 538ac1dfcc5849be10f9dac96f5ce67f147aa0e1..484d617c6fdca8570491b7f510a8352062f2a4f5 100644 --- a/app/src/main/java/com/example/bondoman/views/fragments/ScanReceiptResultFragment.kt +++ b/app/src/main/java/com/example/bondoman/views/fragments/ScanReceiptResultFragment.kt @@ -15,6 +15,7 @@ import android.view.View import android.view.ViewGroup import android.widget.ProgressBar import android.widget.Toast +import androidx.activity.OnBackPressedCallback import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresApi import androidx.core.content.ContextCompat @@ -34,6 +35,8 @@ import com.example.bondoman.data.viewmodels.transaction.TransactionViewModel import com.example.bondoman.databinding.ComponentScanReceiptItemCardBinding import com.example.bondoman.databinding.FragmentScanReceiptResultBinding import com.example.bondoman.networks.responses.ScanReceiptResponseItemsWrapper +import com.example.bondoman.views.components.DialogComponent +import com.example.bondoman.views.utils.interfaces.ParentActivityService import java.io.File import java.io.FileOutputStream import java.io.IOException @@ -44,6 +47,8 @@ class ScanReceiptResultFragment : Fragment() { private lateinit var viewBinding: FragmentScanReceiptResultBinding private lateinit var locationManager: LocationManager private lateinit var transactionViewModel: TransactionViewModel + private lateinit var parentActivityService: ParentActivityService + private lateinit var dialog: DialogComponent private val scanReceiptViewModel: ScanReceiptViewModel by viewModels() private val args by navArgs<ScanReceiptResultFragmentArgs>() @@ -87,6 +92,31 @@ class ScanReceiptResultFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + parentActivityService = requireActivity() as ParentActivityService + + + this.requireActivity().onBackPressedDispatcher.addCallback( + this, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + parentActivityService.showDialog(dialog) + } + }) + + val navbar = parentActivityService.getNavbarView() + + navbar.setOnItemSelectedListener { item -> + val itemId = item.itemId + val scanReceiptResultFragmentId = R.id.scanReceiptResultFragment + + if (itemId != scanReceiptResultFragmentId) { + parentActivityService.showDialog(dialog) + return@setOnItemSelectedListener false + } + + return@setOnItemSelectedListener true + } + transactionViewModel = ViewModelProvider(this.requireActivity())[TransactionViewModel::class.java] locationManager = @@ -124,6 +154,8 @@ class ScanReceiptResultFragment : Fragment() { ) } + addDialogComponent(inflater, container) + return viewBinding.root } @@ -496,6 +528,25 @@ class ScanReceiptResultFragment : Fragment() { } } + private fun addDialogComponent( + inflater: LayoutInflater, + container: ViewGroup?, + ) { + val dialog = + inflater.inflate( + R.layout.component_scan_receipt_dialog, + container, + false, + ) as DialogComponent + dialog.setFirstButtonOnClickListener { parentActivityService.hideDialog() } + dialog.setSecondButtonOnClickListener { + Navigation.findNavController(viewBinding.root) + .navigate(R.id.action_scanReceiptResultFragment_to_scanReceiptFragment) + parentActivityService.hideDialog() + } + this.dialog = dialog + } + companion object { private const val TAG = "ScanReceiptResult" private val REQUIRED_PERMISSIONS = diff --git a/app/src/main/java/com/example/bondoman/views/utils/interfaces/ParentActivityService.kt b/app/src/main/java/com/example/bondoman/views/utils/interfaces/ParentActivityService.kt index aa12d3d66111fd886e1933ecadfcb87ffde29353..235abb284dd948bb475a613853cfc101dc21969a 100644 --- a/app/src/main/java/com/example/bondoman/views/utils/interfaces/ParentActivityService.kt +++ b/app/src/main/java/com/example/bondoman/views/utils/interfaces/ParentActivityService.kt @@ -3,6 +3,7 @@ package com.example.bondoman.views.utils.interfaces import android.view.View import android.view.ViewGroup import android.view.ViewGroup.LayoutParams +import com.google.android.material.bottomnavigation.BottomNavigationView interface ParentActivityService { fun appendLayout(view: View) @@ -53,4 +54,6 @@ interface ParentActivityService { fun getEmail(): String fun getNIM(): String + + fun getNavbarView(): BottomNavigationView } diff --git a/app/src/main/res/layout/component_delete_transaction_dialog.xml b/app/src/main/res/layout/component_delete_transaction_dialog.xml index efd3e8c365092e7f78e5e04d6899b88f4daa38aa..f213867a27f548670858d330b8a3921593c02fbc 100644 --- a/app/src/main/res/layout/component_delete_transaction_dialog.xml +++ b/app/src/main/res/layout/component_delete_transaction_dialog.xml @@ -7,4 +7,4 @@ app:dialogSecondButtonType="negative" app:dialogText="@string/text_delete_transaction_dialog" app:firstButtonText="@string/text_first_button_delete_transaction_dialog" - app:secondButtonText="@string/text_second_button_delete_transaction_dialog"></com.example.bondoman.views.components.DialogComponent> + app:secondButtonText="@string/text_second_button_delete_transaction_dialog" /> diff --git a/app/src/main/res/layout/component_scan_receipt_dialog.xml b/app/src/main/res/layout/component_scan_receipt_dialog.xml new file mode 100644 index 0000000000000000000000000000000000000000..2d926ccf8053e30348b0ca104d42298b233edb9d --- /dev/null +++ b/app/src/main/res/layout/component_scan_receipt_dialog.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<com.example.bondoman.views.components.DialogComponent xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:dialogFirstButtonType="neutral" + app:dialogSecondButtonType="positive" + app:dialogText="@string/scan_receipt_dialog_message" + app:firstButtonText="@string/scan_receipt_dialog_cancel" + app:secondButtonText="@string/scan_receipt_dialog_confirm" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 25142fc9b0c03f244b7727569643698ac776fcf2..8c06689a3732f8ad8ca25194ba2c6640d0f169d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -73,5 +73,8 @@ <string name="scan_receipt_form_button_retry_label">Retry</string> <string name="scan_receipt_form_button_save_label">Save</string> <string name="toast_icon">Toast icon</string> + <string name="scan_receipt_dialog_message">Are you sure to retry? All your current data will not be saved</string> + <string name="scan_receipt_dialog_confirm">Retry</string> + <string name="scan_receipt_dialog_cancel">Cancel</string> </resources>