diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt b/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt index 4fa8241..b9cf381 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt @@ -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 } diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/NavMoreSheetFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/NavMoreSheetFragment.kt new file mode 100644 index 0000000..ee46f57 --- /dev/null +++ b/app/src/main/java/sh/sar/basedbank/ui/home/NavMoreSheetFragment.kt @@ -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(R.id.navMoreView).setNavigationItemSelectedListener { item -> + dismiss() + onNavigate?.invoke(item.itemId) + true + } + } +} diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsFragment.kt index b7104d3..b70fe67 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsFragment.kt @@ -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) { diff --git a/app/src/main/res/drawable/ic_nav_more.xml b/app/src/main/res/drawable/ic_nav_more.xml new file mode 100644 index 0000000..79e7784 --- /dev/null +++ b/app/src/main/res/drawable/ic_nav_more.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 24b2055..f8f3955 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -32,11 +32,26 @@ - + android:orientation="vertical" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + + + + diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 45f881b..020f97e 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -36,6 +36,41 @@ android:layout_marginBottom="24dp" android:text="@string/nav_add_account" /> + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml new file mode 100644 index 0000000..1dcfc24 --- /dev/null +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/app/src/main/res/menu/more_nav_menu.xml b/app/src/main/res/menu/more_nav_menu.xml new file mode 100644 index 0000000..a257e6d --- /dev/null +++ b/app/src/main/res/menu/more_nav_menu.xml @@ -0,0 +1,24 @@ + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c35920e..81c68d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,6 +80,7 @@ Card Settings OTP Codes Settings + More Open navigation Close navigation Work in progress @@ -122,6 +123,9 @@ Cache Clear Cache Cache cleared + Navigation + Drawer + Bottom Bar Logins Log out Log out of %s?