add support for bottom nav bar
All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 2s
All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 2s
This commit is contained in:
@@ -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) {
|
||||
|
||||
10
app/src/main/res/drawable/ic_nav_more.xml
Normal file
10
app/src/main/res/drawable/ic_nav_more.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="?attr/colorOnSurfaceVariant"
|
||||
android:pathData="M6,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
|
||||
</vector>
|
||||
@@ -32,11 +32,26 @@
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/contentFrame"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
|
||||
android:orientation="vertical"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/contentFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/bottomNavigation"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:menu="@menu/bottom_nav_menu" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
|
||||
@@ -36,6 +36,41 @@
|
||||
android:layout_marginBottom="24dp"
|
||||
android:text="@string/nav_add_account" />
|
||||
|
||||
<!-- Navigation -->
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/settings_navigation"
|
||||
android:textAppearance="?attr/textAppearanceTitleMedium"
|
||||
android:layout_marginBottom="12dp" />
|
||||
|
||||
<com.google.android.material.button.MaterialButtonToggleGroup
|
||||
android:id="@+id/navModeToggle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="24dp"
|
||||
app:singleSelection="true"
|
||||
app:selectionRequired="true">
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnNavDrawer"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings_nav_drawer" />
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/btnNavBottom"
|
||||
style="@style/Widget.Material3.Button.OutlinedButton"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/settings_nav_bottom" />
|
||||
|
||||
</com.google.android.material.button.MaterialButtonToggleGroup>
|
||||
|
||||
<!-- Theme -->
|
||||
|
||||
<TextView
|
||||
|
||||
8
app/src/main/res/layout/sheet_nav_more.xml
Normal file
8
app/src/main/res/layout/sheet_nav_more.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<com.google.android.material.navigation.NavigationView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/navMoreView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:menu="@menu/more_nav_menu" />
|
||||
15
app/src/main/res/menu/bottom_nav_menu.xml
Normal file
15
app/src/main/res/menu/bottom_nav_menu.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/nav_dashboard"
|
||||
android:icon="@drawable/ic_nav_dashboard"
|
||||
android:title="@string/nav_dashboard" />
|
||||
<item android:id="@+id/nav_accounts"
|
||||
android:icon="@drawable/ic_nav_accounts"
|
||||
android:title="@string/nav_accounts" />
|
||||
<item android:id="@+id/nav_transfer"
|
||||
android:icon="@drawable/ic_send"
|
||||
android:title="@string/transfer" />
|
||||
<item android:id="@+id/nav_more"
|
||||
android:icon="@drawable/ic_nav_more"
|
||||
android:title="@string/nav_more" />
|
||||
</menu>
|
||||
24
app/src/main/res/menu/more_nav_menu.xml
Normal file
24
app/src/main/res/menu/more_nav_menu.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/nav_contacts"
|
||||
android:icon="@drawable/ic_contacts"
|
||||
android:title="@string/nav_contacts" />
|
||||
<item android:id="@+id/nav_activities"
|
||||
android:icon="@drawable/ic_nav_activities"
|
||||
android:title="@string/nav_activities" />
|
||||
<item android:id="@+id/nav_transfer_history"
|
||||
android:icon="@drawable/ic_nav_transfer_history"
|
||||
android:title="@string/nav_transfer_history" />
|
||||
<item android:id="@+id/nav_finances"
|
||||
android:icon="@drawable/ic_nav_finances"
|
||||
android:title="@string/nav_finances" />
|
||||
<item android:id="@+id/nav_card_settings"
|
||||
android:icon="@drawable/ic_nav_card"
|
||||
android:title="@string/nav_card_settings" />
|
||||
<item android:id="@+id/nav_otp"
|
||||
android:icon="@drawable/ic_nav_otp"
|
||||
android:title="@string/nav_otp" />
|
||||
<item android:id="@+id/nav_settings"
|
||||
android:icon="@drawable/ic_nav_settings"
|
||||
android:title="@string/nav_settings" />
|
||||
</menu>
|
||||
@@ -80,6 +80,7 @@
|
||||
<string name="nav_card_settings">Card Settings</string>
|
||||
<string name="nav_otp">OTP Codes</string>
|
||||
<string name="nav_settings">Settings</string>
|
||||
<string name="nav_more">More</string>
|
||||
<string name="nav_open_drawer">Open navigation</string>
|
||||
<string name="nav_close_drawer">Close navigation</string>
|
||||
<string name="work_in_progress">Work in progress</string>
|
||||
@@ -122,6 +123,9 @@
|
||||
<string name="settings_cache">Cache</string>
|
||||
<string name="settings_clear_cache">Clear Cache</string>
|
||||
<string name="settings_cache_cleared">Cache cleared</string>
|
||||
<string name="settings_navigation">Navigation</string>
|
||||
<string name="settings_nav_drawer">Drawer</string>
|
||||
<string name="settings_nav_bottom">Bottom Bar</string>
|
||||
<string name="settings_logins">Logins</string>
|
||||
<string name="settings_logout">Log out</string>
|
||||
<string name="settings_logout_confirm_title">Log out of %s?</string>
|
||||
|
||||
Reference in New Issue
Block a user