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 7821762fddeff95589c0bb5a25398d793cf03fd3..2390d1e8f250bb8e7657402d1234609d202ca627 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 @@ -16,6 +16,7 @@ import android.view.ViewGroup import android.widget.ImageButton import android.widget.TextView import android.widget.Toast +import androidx.activity.OnBackPressedCallback import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.ViewCompat @@ -66,6 +67,13 @@ class MainActivity : AppCompatActivity(), ParentActivityService { private var isOnBack: Boolean = false private val connectionRequiredFragmentIds: MutableList<Int> = mutableListOf() private var hasMovedFromConnectionLostFragment: Boolean = false + private val onBackPressedCallback = + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + isOnBack = true + navController.popBackStack() + } + } private val expiryReceiver = ExpiryBroadcastReceiver() @@ -184,10 +192,13 @@ class MainActivity : AppCompatActivity(), ParentActivityService { ).show() } + override fun getOnBackPressedCallback(): OnBackPressedCallback { + return onBackPressedCallback + } + private fun addConnectionRequiredFragment(fragmentId: Int) { this.connectionRequiredFragmentIds.add(fragmentId) } - override fun getEmail(): String { return PreferencesManager.getString(this, "email") ?: "" } @@ -214,6 +225,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService { private fun configureNavigation() { this.addConnectionRequiredFragment(R.id.scanReceiptFragment) + onBackPressedDispatcher.addCallback(this, onBackPressedCallback) + val navbar = findViewById<BottomNavigationView>(R.id.navbar) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment @@ -231,11 +244,6 @@ class MainActivity : AppCompatActivity(), ParentActivityService { destinationListeners.forEach { it.invoke(destination.id) } - if (destination.id != R.id.connectionLostFragment) { - isOnConnectionLostFragment = false - hasMovedFromConnectionLostFragment = true - } - // handle back navigation // IMPORTANT: must be checked before isConnectionLost condition if (isOnBack) { @@ -248,9 +256,15 @@ class MainActivity : AppCompatActivity(), ParentActivityService { isOnBack = false } + // update states + if (destination.id != R.id.connectionLostFragment) { + isOnConnectionLostFragment = false + hasMovedFromConnectionLostFragment = true + } + // remove old ConnectionLostFragment - if ((isOnConnectionLostFragment || hasMovedFromConnectionLostFragment) - && destination.id == R.id.connectionLostFragment + if ((isOnConnectionLostFragment || hasMovedFromConnectionLostFragment) && + destination.id == R.id.connectionLostFragment ) { navController.popBackStack() return@addOnDestinationChangedListener @@ -348,7 +362,7 @@ class MainActivity : AppCompatActivity(), ParentActivityService { if (isConnectionlost) { showToast( "Connection found", - Toast.LENGTH_SHORT + Toast.LENGTH_SHORT, ) } @@ -369,7 +383,7 @@ class MainActivity : AppCompatActivity(), ParentActivityService { showToast( "Connection lost", - Toast.LENGTH_SHORT + Toast.LENGTH_SHORT, ) } } @@ -400,7 +414,7 @@ class MainActivity : AppCompatActivity(), ParentActivityService { setContentView(binding.root) // initialize viewmodel - val factory = TransactionViewModelFactory(application as MainApplication, "13521148") + val factory = TransactionViewModelFactory(application as MainApplication, getNIM()) transactionViewModel = ViewModelProvider(this, factory)[TransactionViewModel::class.java] // initialize fragment id tracking 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..71b43952dad5fd8ad5f132d71d13277ad9a7ff3c 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 androidx.activity.OnBackPressedCallback interface ParentActivityService { fun appendLayout(view: View) @@ -53,4 +54,6 @@ interface ParentActivityService { fun getEmail(): String fun getNIM(): String + + fun getOnBackPressedCallback(): OnBackPressedCallback }