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 @@ + + + + +