Skip to content

Commit

Permalink
Add settings to change language from the app (Hinglish fixed)
Browse files Browse the repository at this point in the history
  • Loading branch information
brahmkshatriya committed Aug 16, 2024
1 parent 338aeff commit 8c6cb19
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 3 deletions.
2 changes: 2 additions & 0 deletions app/src/main/java/dev/brahmkshatriya/echo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import dev.brahmkshatriya.echo.common.models.User
import dev.brahmkshatriya.echo.databinding.ActivityMainBinding
import dev.brahmkshatriya.echo.ui.common.openFragment
import dev.brahmkshatriya.echo.ui.item.ItemFragment
import dev.brahmkshatriya.echo.ui.settings.AboutFragment.AboutPreference.Companion.applyLocale
import dev.brahmkshatriya.echo.ui.settings.LookFragment.Companion.NAVBAR_GRADIENT
import dev.brahmkshatriya.echo.utils.animateTranslation
import dev.brahmkshatriya.echo.utils.checkPermissions
Expand Down Expand Up @@ -67,6 +68,7 @@ class MainActivity : AppCompatActivity() {
)

checkPermissions(this)
applyLocale(playerViewModel.settings)

val navView = binding.navView as NavigationBarView

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
package dev.brahmkshatriya.echo.ui.settings

import android.content.Context
import android.content.SharedPreferences
import android.os.Build.BRAND
import android.os.Build.DEVICE
import android.os.Build.SUPPORTED_ABIS
import android.os.Build.VERSION.CODENAME
import android.os.Build.VERSION.RELEASE
import android.os.Build.VERSION.SDK_INT
import android.os.Bundle
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.preference.PreferenceFragmentCompat
import dev.brahmkshatriya.echo.R
import dev.brahmkshatriya.echo.ui.exception.ExceptionFragment.Companion.copyToClipboard
import dev.brahmkshatriya.echo.utils.prefs.LongClickPreference
import dev.brahmkshatriya.echo.utils.prefs.MaterialListPreference

class AboutFragment : BaseSettingsFragment() {
override val title get() = getString(R.string.about)
Expand Down Expand Up @@ -44,7 +48,37 @@ class AboutFragment : BaseSettingsFragment() {
context.copyToClipboard(title?.toString(), info)
}
screen.addPreference(this)
}

val languages = mapOf(
"system" to getString(R.string.system),
"as" to "Assamese",
"de" to "Deutsch",
"fr" to "Français",
"hi" to "हिन्दी",
"hng" to "Hinglish",
"ja" to "日本語",
"nb-rNO" to "Norsk bokmål",
"nl" to "Nederlands",
"pl" to "Polski",
"pt" to "Português",
"sa" to "संस्कृतम्",
"tr" to "Türkçe",
"zh-rCN" to "中文 (简体)",
)
MaterialListPreference(context).apply {
title = getString(R.string.language)
summary = getString(R.string.language_summary)
key = "language"
entries = languages.map { it.value }.toTypedArray()
entryValues = languages.map { it.key }.toTypedArray()
layoutResource = R.layout.preference
isIconSpaceReserved = false
screen.addPreference(this)
}
preferenceManager.sharedPreferences?.registerOnSharedPreferenceChangeListener { pref, key ->
println(key)
if (key == "language") applyLocale(pref)
}
}

Expand All @@ -62,5 +96,14 @@ class AboutFragment : BaseSettingsFragment() {
?: "Unknown"
}

companion object{

fun applyLocale(sharedPref: SharedPreferences) {
val value = sharedPref.getString("language", "system") ?: "system"
val locale = if (value == "system") LocaleListCompat.getEmptyLocaleList()
else LocaleListCompat.forLanguageTags(value)
AppCompatDelegate.setApplicationLocales(locale)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class MaterialListPreference(context: Context) : ListPreference(context) {
private fun updateSummary() {
val value = context.getString(R.string.value)
val entry = entry ?: context.getString(R.string.not_set)
summary = "$value : $entry\n\n$customSummary"
val sum = customSummary?.let { "\n\n$it" } ?: ""
summary = "$value : $entry$sum"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class MaterialMultipleChoicePreference(context: Context) : MultiSelectListPrefer
val index = entryValues.indexOf(v)
if (index >= 0) entries.getOrNull(index).toString() else v
} ?: context.getString(R.string.not_set)
summary = "$value : $entry\n\n$customSummary"
val sum = customSummary?.let { "\n\n$it" } ?: ""
summary = "$value : $entry$sum"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class MaterialTextInputPreference(context: Context) : EditTextPreference(context
private fun updateSummary() {
val value = context.getString(R.string.value)
val entry = text ?: context.getString(R.string.not_set)
summary = "$value : $entry\n\n$customSummary"
val sum = customSummary?.let { "\n\n$it" } ?: ""
summary = "$value : $entry$sum"
}
}
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,9 @@
<string name="navbar_gradient_summary">Navbar gradually becomes transparent</string>
<string name="value">Value</string>
<string name="not_set">Not Set</string>
<string name="language">Language</string>
<string name="system">System</string>
<string name="language_summary">Language of the app, System will default to English</string>
<string-array name="stream_qualities">
<item>Highest</item>
<item>Medium</item>
Expand Down

0 comments on commit 8c6cb19

Please sign in to comment.