From b28e4a35341a35a44cb56337160fc87ece5198b3 Mon Sep 17 00:00:00 2001 From: sozy <thinpotatogithub@gmail.com> Date: Mon, 1 Apr 2024 14:00:36 +0700 Subject: [PATCH] feat: scan receipt before navigate confirmation dialog --- .../bondoman/views/activities/MainActivity.kt | 10 +++- .../fragments/ScanReceiptResultFragment.kt | 51 +++++++++++++++++++ .../utils/interfaces/ParentActivityService.kt | 3 ++ .../component_delete_transaction_dialog.xml | 2 +- .../layout/component_scan_receipt_dialog.xml | 10 ++++ app/src/main/res/values/strings.xml | 3 ++ 6 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/layout/component_scan_receipt_dialog.xml 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 daccd2f..f34429a 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 538ac1d..484d617 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 aa12d3d..235abb2 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 efd3e8c..f213867 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 0000000..2d926cc --- /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 25142fc..8c06689 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> -- GitLab