diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6d00ca1..8235bda 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
+ android:localeConfig="@xml/locales_config"
android:theme="@style/Theme.BasedBank"
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="31">
diff --git a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt
index 8db7c0a..9d8d20a 100644
--- a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt
+++ b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt
@@ -4,8 +4,11 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.core.os.LocaleListCompat
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
+import sh.sar.basedbank.R
import sh.sar.basedbank.databinding.ActivityOnboardingBinding
import sh.sar.basedbank.ui.login.LoginActivity
@@ -23,11 +26,28 @@ class OnboardingActivity : AppCompatActivity() {
TabLayoutMediator(binding.dotsIndicator, binding.viewPager) { _, _ -> }.attach()
+ // Pre-select the chip for the saved language without triggering the listener
+ val savedLang = getSharedPreferences("prefs", MODE_PRIVATE).getString("language", null)
+ binding.languageChipGroup.setOnCheckedStateChangeListener(null)
+ when (savedLang) {
+ "en" -> binding.chipEnglish.isChecked = true
+ "dv" -> binding.chipDhivehi.isChecked = true
+ }
+ binding.languageChipGroup.setOnCheckedStateChangeListener { _, checkedIds ->
+ if (checkedIds.isNotEmpty()) {
+ val lang = if (checkedIds[0] == R.id.chipEnglish) "en" else "dv"
+ selectLanguage(lang)
+ }
+ }
+
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
+ binding.languageChipGroup.visibility = if (position == 0) View.VISIBLE else View.GONE
updateButtons(position, adapter.itemCount)
}
})
+ // Show chips and set initial button state for page 0
+ binding.languageChipGroup.visibility = View.VISIBLE
updateButtons(0, adapter.itemCount)
binding.btnNext.setOnClickListener {
@@ -43,9 +63,19 @@ class OnboardingActivity : AppCompatActivity() {
}
}
+ private fun selectLanguage(lang: String) {
+ getSharedPreferences("prefs", MODE_PRIVATE).edit().putString("language", lang).apply()
+ val locales = LocaleListCompat.forLanguageTags(lang)
+ AppCompatDelegate.setApplicationLocales(locales)
+ // Update buttons immediately in case locale didn't change (no recreation)
+ updateButtons(binding.viewPager.currentItem, binding.viewPager.adapter?.itemCount ?: 3)
+ }
+
private fun updateButtons(position: Int, count: Int) {
+ val langSelected = getSharedPreferences("prefs", MODE_PRIVATE).getString("language", null) != null
val isLast = position == count - 1
binding.btnNext.visibility = if (isLast) View.GONE else View.VISIBLE
binding.btnGetStarted.visibility = if (isLast) View.VISIBLE else View.GONE
+ binding.btnNext.isEnabled = position > 0 || langSelected
}
}
diff --git a/app/src/main/res/drawable/bml_logo_vector.xml b/app/src/main/res/drawable/bml_logo_vector.xml
new file mode 100644
index 0000000..7ba20d5
--- /dev/null
+++ b/app/src/main/res/drawable/bml_logo_vector.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_onboarding.xml b/app/src/main/res/layout/activity_onboarding.xml
index 3d1eb01..071e8f4 100644
--- a/app/src/main/res/layout/activity_onboarding.xml
+++ b/app/src/main/res/layout/activity_onboarding.xml
@@ -27,6 +27,32 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
+
+
+
+
+
+
+
+
-
+
-
-
-
+ android:src="@drawable/mib_faisanet_logo"
+ android:scaleType="centerInside"
+ android:padding="12dp"
+ android:contentDescription="@string/mib_name" />
+
-
-
-
+ android:src="@drawable/bml_logo_vector"
+ android:scaleType="centerInside"
+ android:padding="8dp"
+ android:contentDescription="@string/bml_name" />
+
diff --git a/app/src/main/res/values-b+dv/strings.xml b/app/src/main/res/values-b+dv/strings.xml
new file mode 100644
index 0000000..ffa23d7
--- /dev/null
+++ b/app/src/main/res/values-b+dv/strings.xml
@@ -0,0 +1,34 @@
+
+
+ BasedBank
+
+
+ ތިޔަ ބޭންކްތައް، އެއް އެޕެއްގައި
+ BasedBank ގެ ސަބަބުން ތިޔަ ދިވެހި ބޭންކު އެކައުންޓްތައް، ހަމައެއް ތަނަކުން ބެލޭ. ބެލެންސް ބެލޭ، ތަފާތު ތަންތަން ބެލޭ — ތަފާތު އެޕްތަކަށް ބަދަލު ނުވެ.
+ އިތުރު ބޭންކްތައް ހިމެނެނީ
+ އިތުރު ބޭންކްތަކަށް ސަޕޯޓް ލިބޭ ގޮތަށް ތައްޔާރުވަމުން ދަނީ. ދިވެހިރާއްޖޭގެ ބޭންކްތަކަށް ސަޕޯޓް ފަހި ވަމުން ދިޔަ ވަރަކަށް ހިމަނެމުން ދޭ.
+ ފެށޭ ގޮތަށް ތައްޔާރު
+ ތިޔަ ބޭންކު ކްރެޑެންޝަލް ޖެހި، ތިޔަ އެކައުންޓްތައް ބަލާ. ތިޔަ ޑޭޓާ ހިފެހެއްޓޭ ތަނަކީ ހަމައެކަނި ތިޔަ ފޯނު.
+ ފަހުން ލިބޭ
+ ދެން
+ ފަށާ
+
+
+ ބޭންކެއް ހިޔާރު ކުރޭ
+ ލޮގިން ވާ ބޭންކު ހިޔާރު ކުރޭ.
+ Maldives Islamic Bank
+ ފައިސާނެޓް މޯބައިލް ބޭންކިން
+ Bank of Maldives
+ BML އިންޓަނެޓް ބޭންކިން
+ ލޮގިން ވޭ
+ Maldives Islamic Bank ގެ ކްރެޑެންޝަލް ދިވޭ.
+ ޔޫޒަރ ނޭމް
+ ޕާސްވޯޑް
+ OTP ސީޑް (TOTP ސިއްރު)
+ ތިޔަ އޮތެންޓިކޭޓަ ދިން Base32 ސިއްރު
+ ލޮގިން
+
+
+ އެކައުންޓްތައް
+ ލިބެން ހުރި ބެލެންސް
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 02459f3..1568e4b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,6 +17,8 @@
Choose the bank you want to sign in to.
Maldives Islamic Bank
Faisanet Mobile Banking
+ Bank of Maldives
+ BML Internet Banking
Sign In
Enter your Maldives Islamic Bank credentials.
Username
diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml
new file mode 100644
index 0000000..b8eccb4
--- /dev/null
+++ b/app/src/main/res/xml/locales_config.xml
@@ -0,0 +1,5 @@
+
+
+
+
+