From 15cb1a4110d6de491e85f693eced081057bbe468 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Thu, 4 Jun 2026 22:37:37 +0500 Subject: [PATCH] add an about page #25 --- app/build.gradle.kts | 1 + .../ui/home/SettingsAboutFragment.kt | 76 +++++++ .../sar/basedbank/ui/home/SettingsFragment.kt | 1 + app/src/main/res/drawable/ic_info.xml | 10 + .../res/layout/fragment_settings_about.xml | 214 ++++++++++++++++++ app/src/main/res/values/strings.xml | 10 + 6 files changed, 312 insertions(+) create mode 100644 app/src/main/java/sh/sar/basedbank/ui/home/SettingsAboutFragment.kt create mode 100644 app/src/main/res/drawable/ic_info.xml create mode 100644 app/src/main/res/layout/fragment_settings_about.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8c7eebd..2202deb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,6 +49,7 @@ android { } buildFeatures { viewBinding = true + buildConfig = true } } diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAboutFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAboutFragment.kt new file mode 100644 index 0000000..27d62be --- /dev/null +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAboutFragment.kt @@ -0,0 +1,76 @@ +package sh.sar.basedbank.ui.home + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.fragment.app.Fragment +import sh.sar.basedbank.BuildConfig +import sh.sar.basedbank.R +import sh.sar.basedbank.databinding.FragmentSettingsAboutBinding + +class SettingsAboutFragment : Fragment() { + + private var _binding: FragmentSettingsAboutBinding? = null + private val binding get() = _binding!! + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + _binding = FragmentSettingsAboutBinding.inflate(inflater, container, false) + return binding.root + } + + 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.tvAppName.text = getString(R.string.app_name) + binding.tvVersion.text = getString(R.string.about_version, BuildConfig.VERSION_NAME) + + binding.rowMibTerms.setOnClickListener { openUrl("https://faisanet.mib.com.mv/terms") } + binding.rowBmlTerms.setOnClickListener { openUrl("https://www.bankofmaldives.com.mv/storage/file/121/10289/terms-conditions-online-banking-en.pdf") } + binding.rowFahipayTerms.setOnClickListener { openUrl("https://fahipay.mv/tos/") } + + binding.btnDonateMvr.setOnClickListener { openDonate(ACCOUNT_MVR) } + binding.btnDonateUsd.setOnClickListener { openDonate(ACCOUNT_USD) } + } + + private fun openUrl(url: String) { + startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) + } + + private fun openDonate(accountNumber: String) { + val fragment = TransferFragment.newInstance( + accountNumber = accountNumber, + displayName = getString(R.string.app_name), + subtitle = accountNumber, + colorHex = "#607D8B", + imageHash = null + ) + (requireActivity() as HomeActivity).showWithBackStack(fragment) + } + + companion object { + private const val ACCOUNT_MVR = "90103100909871000" + private const val ACCOUNT_USD = "90103100909872000" + } + + override fun onResume() { + super.onResume() + requireActivity().title = getString(R.string.settings_about) + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} 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 5701811..8ec0ad0 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 @@ -28,6 +28,7 @@ class SettingsFragment : Fragment() { SettingsItem(R.drawable.ic_settings_appearance, R.string.settings_appearance, R.string.settings_desc_appearance) { SettingsAppearanceFragment() }, SettingsItem(R.drawable.ic_lock, R.string.settings_privacy_security, R.string.settings_desc_privacy_security) { SettingsSecurityFragment() }, SettingsItem(R.drawable.ic_settings_storage, R.string.settings_storage, R.string.settings_desc_storage) { SettingsStorageFragment() }, + SettingsItem(R.drawable.ic_info, R.string.settings_about, R.string.settings_desc_about) { SettingsAboutFragment() }, ) override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 0000000..5085c14 --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_settings_about.xml b/app/src/main/res/layout/fragment_settings_about.xml new file mode 100644 index 0000000..5591c60 --- /dev/null +++ b/app/src/main/res/layout/fragment_settings_about.xml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ff467f3..160ef72 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -191,6 +191,16 @@ Theme, language, and display options App lock, PIN, and security preferences Manage cached data and storage usage + About + App info, version, and legal + Version %s + Thijooree is a native Android client for Maldivian banking services. + Terms of Service + Support Development + If you find this app useful, a small donation goes a long way in keeping it alive and improving. + Donate in MVR + Donate in USD + Thijooree is an independent, third-party app. It is not affiliated with, endorsed by, or officially supported by any bank or financial institution.\n\nThis app works by logging into your internet banking services directly using your credentials and communicating with bank APIs. It is built using techniques derived from reverse-engineered official bank apps. Behaviour may change or break without notice if banks update their systems.\n\nDhiraagu and Ooredoo APIs are used to look up details about phone numbers.\n\nThis app does not collect any analytics, telemetry, or personal data, and does not transmit any information about you or your usage to the developer. Everything stays entirely on your device. Log out Log out of %s? All cached data will be cleared and remaining accounts will be refreshed.