add support for bottom nav bar
Auto Tag on Version Change / check-version (push) Successful in 2s

This commit is contained in:
2026-05-17 19:29:44 +05:00
parent 9bbb024d69
commit 2b710f00c6
10 changed files with 192 additions and 4 deletions
@@ -54,6 +54,7 @@ class HomeActivity : AppCompatActivity() {
private lateinit var binding: ActivityHomeBinding
private val viewModel: HomeViewModel by viewModels()
private lateinit var toggle: ActionBarDrawerToggle
private val autolockHandler = Handler(Looper.getMainLooper())
private var warningDialog: AlertDialog? = null
@@ -82,13 +83,25 @@ class HomeActivity : AppCompatActivity() {
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
val toggle = ActionBarDrawerToggle(
toggle = ActionBarDrawerToggle(
this, binding.drawerLayout, binding.toolbar,
R.string.nav_open_drawer, R.string.nav_close_drawer
)
binding.drawerLayout.addDrawerListener(toggle)
toggle.syncState()
binding.bottomNavigation.setOnItemSelectedListener { item ->
when (item.itemId) {
R.id.nav_dashboard -> { show(DashboardFragment()); true }
R.id.nav_accounts -> { show(AccountsFragment()); true }
R.id.nav_transfer -> { show(TransferFragment()); true }
R.id.nav_more -> { showMoreSheet(); false }
else -> false
}
}
applyNavMode()
binding.navigationView.setNavigationItemSelectedListener { item ->
binding.drawerLayout.closeDrawers()
when (item.itemId) {
@@ -177,6 +190,36 @@ class HomeActivity : AppCompatActivity() {
.commit()
}
fun applyNavMode() {
val isBottom = getSharedPreferences("prefs", MODE_PRIVATE).getBoolean("bottom_nav", false)
if (isBottom) {
binding.drawerLayout.setDrawerLockMode(androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
toggle.isDrawerIndicatorEnabled = false
supportActionBar?.setDisplayHomeAsUpEnabled(false)
binding.bottomNavigation.visibility = View.VISIBLE
} else {
binding.drawerLayout.setDrawerLockMode(androidx.drawerlayout.widget.DrawerLayout.LOCK_MODE_UNLOCKED)
toggle.isDrawerIndicatorEnabled = true
toggle.syncState()
binding.bottomNavigation.visibility = View.GONE
}
}
private fun showMoreSheet() {
val sheet = NavMoreSheetFragment()
sheet.onNavigate = { itemId ->
when (itemId) {
R.id.nav_contacts -> show(ContactsFragment())
R.id.nav_transfer_history -> show(TransferHistoryFragment())
R.id.nav_finances -> show(FinancingFragment())
R.id.nav_otp -> show(OtpFragment())
R.id.nav_settings -> show(SettingsFragment())
else -> Toast.makeText(this, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
}
}
sheet.show(supportFragmentManager, "nav_more")
}
fun setRefreshing(visible: Boolean) {
binding.refreshIndicator.visibility = if (visible) View.VISIBLE else View.GONE
}
@@ -0,0 +1,25 @@
package sh.sar.basedbank.ui.home
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.navigation.NavigationView
import sh.sar.basedbank.R
class NavMoreSheetFragment : BottomSheetDialogFragment() {
var onNavigate: ((Int) -> Unit)? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.sheet_nav_more, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<NavigationView>(R.id.navMoreView).setNavigationItemSelectedListener { item ->
dismiss()
onNavigate?.invoke(item.itemId)
true
}
}
}
@@ -44,6 +44,15 @@ class SettingsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val prefs = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE)
// Navigation mode
val isBottom = prefs.getBoolean("bottom_nav", false)
binding.navModeToggle.check(if (isBottom) R.id.btnNavBottom else R.id.btnNavDrawer)
binding.navModeToggle.addOnButtonCheckedListener { _, checkedId, isChecked ->
if (!isChecked) return@addOnButtonCheckedListener
prefs.edit().putBoolean("bottom_nav", checkedId == R.id.btnNavBottom).apply()
(activity as? HomeActivity)?.applyNavMode()
}
// Theme
val saved = prefs.getString("theme", "system")
val initialId = when (saved) {