rework back butotn
This commit is contained in:
@@ -14,8 +14,10 @@ import android.widget.Toast
|
|||||||
import sh.sar.basedbank.ui.home.NavCustomization
|
import sh.sar.basedbank.ui.home.NavCustomization
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||||
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
@@ -72,6 +74,10 @@ class HomeActivity : AppCompatActivity() {
|
|||||||
private lateinit var toggle: ActionBarDrawerToggle
|
private lateinit var toggle: ActionBarDrawerToggle
|
||||||
private var suppressBottomNavCallback = false
|
private var suppressBottomNavCallback = false
|
||||||
|
|
||||||
|
private var backPressedOnce = false
|
||||||
|
private val backPressHandler = Handler(Looper.getMainLooper())
|
||||||
|
private val resetBackPress = Runnable { backPressedOnce = false }
|
||||||
|
|
||||||
private val autolockHandler = Handler(Looper.getMainLooper())
|
private val autolockHandler = Handler(Looper.getMainLooper())
|
||||||
private var warningDialog: AlertDialog? = null
|
private var warningDialog: AlertDialog? = null
|
||||||
private var countdownTimer: CountDownTimer? = null
|
private var countdownTimer: CountDownTimer? = null
|
||||||
@@ -211,6 +217,42 @@ class HomeActivity : AppCompatActivity() {
|
|||||||
binding.navigationView.setCheckedItem(R.id.nav_dashboard)
|
binding.navigationView.setCheckedItem(R.id.nav_dashboard)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
// Close drawer if open (drawer-nav mode)
|
||||||
|
if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) {
|
||||||
|
binding.drawerLayout.closeDrawers()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// Pop fragment back stack if there's anything on it (e.g. showWithBackStack)
|
||||||
|
if (supportFragmentManager.backStackEntryCount > 0) {
|
||||||
|
supportFragmentManager.popBackStack()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// In bottom nav mode, pressing back navigates up the hierarchy
|
||||||
|
val isBottomNav = getSharedPreferences("prefs", MODE_PRIVATE).getBoolean("bottom_nav", false)
|
||||||
|
if (isBottomNav && binding.bottomNavigation.selectedItemId != R.id.nav_dashboard) {
|
||||||
|
val currentFrag = supportFragmentManager.findFragmentById(R.id.contentFrame)
|
||||||
|
// Sub-page reached via More (e.g. Settings, Activities) — go back to More
|
||||||
|
if (binding.bottomNavigation.selectedItemId == R.id.nav_more && currentFrag !is MoreFragment) {
|
||||||
|
show(MoreFragment())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
binding.bottomNavigation.selectedItemId = R.id.nav_dashboard
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// At top level — require double-tap to exit
|
||||||
|
if (backPressedOnce) {
|
||||||
|
backPressHandler.removeCallbacks(resetBackPress)
|
||||||
|
finish()
|
||||||
|
} else {
|
||||||
|
backPressedOnce = true
|
||||||
|
Toast.makeText(this@HomeActivity, R.string.press_back_to_exit, Toast.LENGTH_SHORT).show()
|
||||||
|
backPressHandler.postDelayed(resetBackPress, 2000)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// Keep all MIB sessions alive every 25 seconds while the app is in the foreground
|
// Keep all MIB sessions alive every 25 seconds while the app is in the foreground
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
|
|||||||
@@ -89,6 +89,7 @@
|
|||||||
<string name="nav_open_drawer">Open navigation</string>
|
<string name="nav_open_drawer">Open navigation</string>
|
||||||
<string name="nav_close_drawer">Close navigation</string>
|
<string name="nav_close_drawer">Close navigation</string>
|
||||||
<string name="work_in_progress">Work in progress</string>
|
<string name="work_in_progress">Work in progress</string>
|
||||||
|
<string name="press_back_to_exit">Press back again to exit</string>
|
||||||
|
|
||||||
<!-- Dashboard -->
|
<!-- Dashboard -->
|
||||||
<string name="dashboard_pending_finances">Pending Finances</string>
|
<string name="dashboard_pending_finances">Pending Finances</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user