diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/CircularNavFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/CircularNavFragment.kt index 016c529..11b34ce 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/CircularNavFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/CircularNavFragment.kt @@ -16,6 +16,8 @@ import androidx.annotation.DrawableRes import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.Toolbar import androidx.core.graphics.drawable.DrawableCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import com.google.android.material.color.MaterialColors import sh.sar.basedbank.R @@ -86,6 +88,14 @@ class CircularNavFragment : Fragment() { root.addView(wheelContainer) root.addView(footerIcon) + + ViewCompat.setOnApplyWindowInsetsListener(root) { _, insets -> + val bars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + (footerIcon.layoutParams as android.widget.LinearLayout.LayoutParams).bottomMargin = dp(16f).toInt() + bars.bottom + footerIcon.requestLayout() + insets + } + return root } diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt index 86b04ea..a7eed47 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt @@ -510,15 +510,37 @@ ViewCompat.setOnApplyWindowInsetsListener(binding.contentLayout) { v, insets -> tapAnimView = animView val dp = resources.displayMetrics.density - val cancelBtn = MaterialButton(requireContext(), null, - com.google.android.material.R.attr.materialButtonOutlinedStyle - ).apply { setText(R.string.cancel); setOnClickListener { setTapMode(false) } } + val cancelBtn = (layoutInflater.inflate(R.layout.view_cancel_button, null, false) as MaterialButton).apply { + setOnClickListener { setTapMode(false) } + } + val colorOutlineVariant = MaterialColors.getColor( + requireContext(), com.google.android.material.R.attr.colorOutlineVariant, android.graphics.Color.LTGRAY + ) + val tapDivider = View(requireContext()).apply { + setBackgroundColor(colorOutlineVariant) + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, dp.toInt().coerceAtLeast(1) + ).also { + it.marginStart = (24 * dp).toInt() + it.marginEnd = (24 * dp).toInt() + it.bottomMargin = (4 * dp).toInt() + } + } + + val baseCancelPaddingBottom = (24 * dp).toInt() val cancelWrapper = LinearLayout(requireContext()).apply { orientation = LinearLayout.VERTICAL gravity = Gravity.CENTER_HORIZONTAL - setPadding(0, 0, 0, (24 * dp).toInt()) - addView(cancelBtn) + setPadding((16 * dp).toInt(), (8 * dp).toInt(), (16 * dp).toInt(), baseCancelPaddingBottom) + addView(cancelBtn, LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)) + } + ViewCompat.setOnApplyWindowInsetsListener(cancelWrapper) { v, insets -> + val bottomNav = activity?.findViewById(R.id.bottomNavigation) + val navBarBottom = if (bottomNav?.visibility == View.VISIBLE) 0 + else insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom + v.setPadding((16 * dp).toInt(), (8 * dp).toInt(), (16 * dp).toInt(), baseCancelPaddingBottom + navBarBottom) + insets } val container = LinearLayout(requireContext()).apply { orientation = LinearLayout.VERTICAL @@ -529,6 +551,7 @@ ViewCompat.setOnApplyWindowInsetsListener(binding.contentLayout) { v, insets -> addView(animView.apply { layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 3f) }) + addView(tapDivider) addView(cancelWrapper.apply { layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT) }) diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/QrScannerActivity.kt b/app/src/main/java/sh/sar/basedbank/ui/home/QrScannerActivity.kt index 824c8c8..7fb0f57 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/QrScannerActivity.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/QrScannerActivity.kt @@ -106,6 +106,8 @@ class QrScannerActivity : AppCompatActivity() { } WindowCompat.setDecorFitsSystemWindows(window, false) + window.statusBarColor = android.graphics.Color.TRANSPARENT + window.navigationBarColor = android.graphics.Color.TRANSPARENT binding = ActivityQrScannerBinding.inflate(layoutInflater) setContentView(binding.root) // Black camera background — always use light (white) system bar icons diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt index 0cd3231..4958429 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt @@ -16,6 +16,8 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate.setApplicationLocales import androidx.core.os.LocaleListCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager @@ -48,6 +50,14 @@ class SettingsAppearanceFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { prefs = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE) + (binding.root as? android.widget.ScrollView)?.clipToPadding = false + val basePaddingBottom = binding.root.paddingBottom + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val isBottomNav = prefs.getBoolean("bottom_nav", false) + val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, basePaddingBottom + if (isBottomNav) 0 else navBar.bottom) + insets + } // Navigation mode val currentMode = NavCustomization.getNavMode(prefs) 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 d33d0cb..5701811 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 @@ -9,6 +9,8 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.annotation.DrawableRes import androidx.annotation.StringRes +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import sh.sar.basedbank.R @@ -32,6 +34,14 @@ class SettingsFragment : Fragment() { inflater.inflate(R.layout.fragment_settings, container, false) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + (view as? android.widget.ScrollView)?.clipToPadding = false + val basePaddingBottom = view.paddingBottom + ViewCompat.setOnApplyWindowInsetsListener(view) { v, insets -> + val isBottomNav = requireContext().getSharedPreferences("prefs", android.content.Context.MODE_PRIVATE).getBoolean("bottom_nav", false) + val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, basePaddingBottom + if (isBottomNav) 0 else navBar.bottom) + insets + } val list = view.findViewById(R.id.settingsList) val inflater = LayoutInflater.from(requireContext()) for (item in items) { diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt index f8080f6..70ce6ae 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt @@ -20,6 +20,8 @@ import android.widget.TextView import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat import androidx.core.content.FileProvider +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -333,6 +335,14 @@ class SettingsLoginsFragment : Fragment() { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + (binding.root as? android.widget.ScrollView)?.clipToPadding = false + val basePaddingBottom = binding.root.paddingBottom + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val isBottomNav = requireContext().getSharedPreferences("prefs", android.content.Context.MODE_PRIVATE).getBoolean("bottom_nav", false) + val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, basePaddingBottom + if (isBottomNav) 0 else navBar.bottom) + insets + } binding.btnAddAccount.setOnClickListener { startActivity(Intent(requireContext(), LoginActivity::class.java)) } diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsSecurityFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsSecurityFragment.kt index 17b5c9c..627c53d 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsSecurityFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsSecurityFragment.kt @@ -6,6 +6,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.biometric.BiometricManager +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import sh.sar.basedbank.R import sh.sar.basedbank.databinding.FragmentSettingsSecurityBinding @@ -22,6 +24,14 @@ class SettingsSecurityFragment : Fragment() { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + (binding.root as? android.widget.ScrollView)?.clipToPadding = false + val basePaddingBottom = binding.root.paddingBottom + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val isBottomNav = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE).getBoolean("bottom_nav", false) + val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, basePaddingBottom + if (isBottomNav) 0 else navBar.bottom) + insets + } val prefs = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE) // Change lock diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsStorageFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsStorageFragment.kt index 63ed30c..b4fa159 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsStorageFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsStorageFragment.kt @@ -6,6 +6,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import sh.sar.basedbank.R @@ -31,6 +33,14 @@ class SettingsStorageFragment : Fragment() { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + (binding.root as? android.widget.ScrollView)?.clipToPadding = false + val basePaddingBottom = binding.root.paddingBottom + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val isBottomNav = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE).getBoolean("bottom_nav", false) + val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(v.paddingLeft, v.paddingTop, v.paddingRight, basePaddingBottom + if (isBottomNav) 0 else navBar.bottom) + insets + } binding.btnClearCache.setOnClickListener { val ctx = requireContext() clearAllCaches(ctx) diff --git a/app/src/main/res/layout/view_cancel_button.xml b/app/src/main/res/layout/view_cancel_button.xml new file mode 100644 index 0000000..f6b2556 --- /dev/null +++ b/app/src/main/res/layout/view_cancel_button.xml @@ -0,0 +1,17 @@ + +