diff --git a/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt b/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt index 2341bf8e541e46ad42acef391a083c40f5bc15d4..2f61bb3a0f89aea1e4afebf6f6fea085cb3fc91e 100644 --- a/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt +++ b/app/src/main/java/com/example/bondoman/data/viewmodels/transaction/TransactionViewModel.kt @@ -56,7 +56,7 @@ class TransactionViewModel( Transaction( title = title, owner = currentUserNim, - amount = amount, + amount = Long.MAX_VALUE, category = category, location = location, ) 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..b27b0525dfaddc25287f55631b421f642a356b26 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 @@ -64,6 +64,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService { private var isConnectionlost: Boolean = false private var isOnConnectionLostFragment: Boolean = false private var isOnBack: Boolean = false + private val connectionRequiredFragmentIds: MutableList<Int> = mutableListOf() + private var hasMovedFromConnectionLostFragment: Boolean = false private val expiryReceiver = ExpiryBroadcastReceiver() @@ -182,6 +184,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService { ).show() } + private fun addConnectionRequiredFragment(fragmentId: Int) { + this.connectionRequiredFragmentIds.add(fragmentId) override fun getEmail(): String { return PreferencesManager.getString(this, "email") ?: "" } @@ -206,6 +210,8 @@ class MainActivity : AppCompatActivity(), ParentActivityService { } private fun configureNavigation() { + this.addConnectionRequiredFragment(R.id.scanReceiptFragment) + val navbar = findViewById<BottomNavigationView>(R.id.navbar) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment @@ -223,8 +229,9 @@ class MainActivity : AppCompatActivity(), ParentActivityService { destinationListeners.forEach { it.invoke(destination.id) } - if (destination.id != R.id.ConnectionLostFragment) { + if (destination.id != R.id.connectionLostFragment) { isOnConnectionLostFragment = false + hasMovedFromConnectionLostFragment = true } // handle back navigation @@ -240,7 +247,9 @@ class MainActivity : AppCompatActivity(), ParentActivityService { } // remove old ConnectionLostFragment - if (isOnConnectionLostFragment && destination.id == R.id.ConnectionLostFragment) { + if ((isOnConnectionLostFragment || hasMovedFromConnectionLostFragment) + && destination.id == R.id.connectionLostFragment + ) { navController.popBackStack() return@addOnDestinationChangedListener } @@ -274,16 +283,19 @@ class MainActivity : AppCompatActivity(), ParentActivityService { // handle connection lost fragment if (isConnectionlost) { - if (destination.id != R.id.ConnectionLostFragment) { + if (destination.id in connectionRequiredFragmentIds) { + hasMovedFromConnectionLostFragment = false navController.navigate(R.id.action_global_to_ConnectionLostFragment) - } else { + return@addOnDestinationChangedListener + } else if (destination.id == R.id.connectionLostFragment) { isOnConnectionLostFragment = true + hasMovedFromConnectionLostFragment = false + return@addOnDestinationChangedListener } - return@addOnDestinationChangedListener } // ignore existing connection lost page on stack - if (destination.id == R.id.ConnectionLostFragment) { + if (destination.id == R.id.connectionLostFragment) { navController.popBackStack() } @@ -331,6 +343,13 @@ class MainActivity : AppCompatActivity(), ParentActivityService { object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { + if (isConnectionlost) { + showToast( + "Connection found", + Toast.LENGTH_SHORT + ) + } + Handler(Looper.getMainLooper()).post { if (isConnectionlost) { isConnectionlost = false @@ -342,7 +361,14 @@ class MainActivity : AppCompatActivity(), ParentActivityService { override fun onLost(network: Network) { Handler(Looper.getMainLooper()).post { isConnectionlost = true - navController.navigate(R.id.action_global_to_ConnectionLostFragment) + if (currentFragmentId in connectionRequiredFragmentIds) { + navController.navigate(R.id.action_global_to_ConnectionLostFragment) + } + + showToast( + "Connection lost", + Toast.LENGTH_SHORT + ) } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 7e7cd9d9f736d99c660618bf8747a86bdef13a31..0ac66761eff02a75236b33cf43ef112705768a6a 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -80,7 +80,7 @@ android:label="@string/menu_title_charts" tools:layout="@layout/fragment_graph" /> <fragment - android:id="@+id/ConnectionLostFragment" + android:id="@+id/connectionLostFragment" android:name="com.example.bondoman.views.fragments.ConnectionLostFragment" tools:layout="@layout/fragment_connection_lost" /> <fragment @@ -97,5 +97,5 @@ </fragment> <action android:id="@+id/action_global_to_ConnectionLostFragment" - app:destination="@id/ConnectionLostFragment" /> + app:destination="@id/connectionLostFragment" /> </navigation>