diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 01b92f1..96aa988 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -11,6 +11,11 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
+
+
+ if (key == "language") {
+ setLanguage(sharedPreferences.getString("language", null))
+ }
+ if (key == "screen_on") {
+ keepScreenOn(sharedPreferences.getBoolean("screen_on", false))
+ }
+ if (key == "theme") {
+ updateTheme(sharedPreferences.getString("theme", null))
+ }
+ }
+ }
+
+ private fun updateTheme(theme: String?) {
+
+ var themeValue = when (theme) {
+ "light" -> AppCompatDelegate.MODE_NIGHT_NO
+ "dark" -> AppCompatDelegate.MODE_NIGHT_YES
+ "default" -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
+ else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
+ }
+
+ if (themeValue != AppCompatDelegate.getDefaultNightMode()) {
+ AppCompatDelegate.setDefaultNightMode(themeValue)
+ delegate.applyDayNight()
+ }
+ }
+
+ private fun keepScreenOn(keepOn: Boolean) {
+ if (keepOn) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+ } else {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+ }
+ }
+
+ private fun setLanguage(locale: String?) {
+
+ val currentLocale = AppCompatDelegate.getApplicationLocales()[0].toString()
+
+ if (locale != null && locale != currentLocale) {
+ val newLocale = LocaleListCompat.forLanguageTags(locale)
+ AppCompatDelegate.setApplicationLocales(newLocale)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt
index 8aac2e5..c62a13c 100644
--- a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt
+++ b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt
@@ -5,11 +5,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
-import android.view.WindowManager
import androidx.activity.viewModels
-import androidx.appcompat.app.AppCompatActivity
-import androidx.appcompat.app.AppCompatDelegate
-import androidx.core.os.LocaleListCompat
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -23,7 +19,7 @@ import me.zobrist.tichucounter.repository.GameRepository
import javax.inject.Inject
@AndroidEntryPoint
-class MainActivity : AppCompatActivity() {
+class MainActivity : BaseActivity() {
private var currentRound: Round = Round(0, 0, null, null)
@@ -45,9 +41,10 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
-
setSupportActionBar(binding.toolbar)
+
+
GlobalScope.launch(Dispatchers.IO) {
val game = gameRepository.getActiveGame()
@@ -56,11 +53,6 @@ class MainActivity : AppCompatActivity() {
}
}
- updateTheme(this.getSharedPreferences("Settings", MODE_PRIVATE).getInt("Theme", 2))
- keepScreenOn(
- this.getSharedPreferences("Settings", MODE_PRIVATE).getBoolean("Screen_On", false)
- )
-
keyboardViewModel.scoreA.observe(this) { value ->
val oldValue = currentRound.scoreA
currentRound.scoreA = value
@@ -98,14 +90,6 @@ class MainActivity : AppCompatActivity() {
}
}
- override fun onSaveInstanceState(outState: Bundle) {
- super.onSaveInstanceState(outState)
-
- val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
- prefs.apply()
-
- }
-
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
@@ -147,106 +131,7 @@ class MainActivity : AppCompatActivity() {
startActivity(i)
true
}
- //R.id.action_theme -> {
- // chooseThemeDialog()
- // true
- //}
- //R.id.action_language -> {
- // chooseLanguageDialog()
- // true
- //}
- //R.id.action_screenOn -> {
- // item.isChecked = !item.isChecked
- // keepScreenOn(item.isChecked)
- // true
- //}
else -> super.onOptionsItemSelected(item)
}
}
-
- private fun chooseThemeDialog() {
-
- val builder = AlertDialog.Builder(this)
- builder.setTitle(getString(R.string.choose_theme_text))
- val styles = arrayOf(
- getString(R.string.light),
- getString(R.string.dark),
- getString(R.string.android_default_text)
- )
-
- val checkedItem = this.getSharedPreferences("Settings", MODE_PRIVATE).getInt("Theme", 2)
-
- val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
-
-
- builder.setSingleChoiceItems(styles, checkedItem) { dialog, which ->
-
- prefs.putInt("Theme", which)
- prefs.apply()
-
- updateTheme(which)
-
- dialog.dismiss()
- }
-
- val dialog = builder.create()
- dialog.show()
- }
-
- private fun chooseLanguageDialog() {
-
- val builder = AlertDialog.Builder(this)
- builder.setTitle(getString(R.string.choose_language_text))
-
- val languagesMap = mapOf(
- getString(R.string.english) to "en", getString(R.string.german) to "de"
- )
-
- val languagesDisplayKeys = languagesMap.keys.toTypedArray()
- val languagesDisplayValues = languagesMap.values.toTypedArray()
-
- val checkedItem = AppCompatDelegate.getApplicationLocales()[0].toString()
- var checkedItemIndex = languagesDisplayValues.indexOf(checkedItem)
-
- if (checkedItemIndex == -1) {
- checkedItemIndex = 0
- }
-
- builder.setSingleChoiceItems(languagesDisplayKeys, checkedItemIndex) { dialog, which ->
-
- val newLocale =
- LocaleListCompat.forLanguageTags(languagesMap[languagesDisplayKeys[which]])
-
- AppCompatDelegate.setApplicationLocales(newLocale)
-
- startActivity(Intent(this, MainActivity::class.java))
- finish()
-
- dialog.dismiss()
- }
-
- val dialog = builder.create()
- dialog.show()
- }
-
- private fun updateTheme(which: Int) {
- when (which) {
- 0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
- 1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
- 2 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
- }
- delegate.applyDayNight()
- }
-
- private fun keepScreenOn(keepOn: Boolean) {
- if (keepOn) {
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- } else {
- window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- }
-
- val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
- prefs.putBoolean("Screen_On", keepOn)
- prefs.apply()
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/me/zobrist/tichucounter/SettingsActivity.kt b/app/src/main/java/me/zobrist/tichucounter/SettingsActivity.kt
index 09fdb6e..6554ab5 100644
--- a/app/src/main/java/me/zobrist/tichucounter/SettingsActivity.kt
+++ b/app/src/main/java/me/zobrist/tichucounter/SettingsActivity.kt
@@ -1,22 +1,15 @@
package me.zobrist.tichucounter
-import android.app.AlertDialog
import android.content.Intent
+import android.os.Build
import android.os.Bundle
-import android.view.Menu
import android.view.MenuItem
-import androidx.activity.OnBackPressedCallback
-import androidx.appcompat.app.AppCompatActivity
+import androidx.preference.ListPreference
import androidx.preference.PreferenceFragmentCompat
-import dagger.hilt.android.AndroidEntryPoint
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.launch
import me.zobrist.tichucounter.databinding.SettingsActivityBinding
-@AndroidEntryPoint
-class SettingsActivity : AppCompatActivity() {
+class SettingsActivity : BaseActivity() {
private lateinit var binding: SettingsActivityBinding
@@ -54,8 +47,22 @@ class SettingsActivity : AppCompatActivity() {
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
+
+ val index = when (getCurrentLocale()) {
+ "de" -> 1
+ "en" -> 0
+ else -> 0
+ }
+
+ findPreference("language")?.setValueIndex(index)
+ }
+
+ private fun getCurrentLocale(): String? {
+ return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ resources.configuration.locales.get(0).language
+ } else {
+ resources.configuration.locale.language
+ }
}
}
-
-
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_baseline_add_24.xml b/app/src/main/res/drawable/ic_baseline_add_24.xml
index 06b5d2d..d9b76ed 100644
--- a/app/src/main/res/drawable/ic_baseline_add_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_add_24.xml
@@ -1,5 +1,10 @@
-
-
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_undo_24.xml b/app/src/main/res/drawable/ic_baseline_undo_24.xml
index 79b6347..6e3ff9b 100644
--- a/app/src/main/res/drawable/ic_baseline_undo_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_undo_24.xml
@@ -1,5 +1,11 @@
-
-
+
+
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 98bff63..cef510d 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -7,11 +7,11 @@
android:icon="@drawable/ic_baseline_undo_24"
android:orderInCategory="5"
android:title="@string/undo"
- app:showAsAction="ifRoom"/>
+ app:showAsAction="ifRoom" />
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 516462b..c9f68f0 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -15,4 +15,5 @@
Hell
Dunkel
Einstellungen
+ Anzeige
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index f653604..e93c628 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -14,12 +14,12 @@
- - @string/german
- @string/english
+ - @string/german
- - german
- - english
+ - en
+ - de
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c85fc17..f0ced8f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,6 +3,7 @@
Tichu Counter
Team A
Team B
+ SettingsActivity
Start new game
Undo last round
@@ -18,21 +19,6 @@
German
Light
Dark
- SettingsActivity
-
-
- Messages
- Sync
-
-
- Your signature
- Theme
-
-
- Sync email periodically
- Download incoming attachments
- Automatically download attachments for incoming emails
-
- Only download attachments when manually requested
+ Display
Settings
\ No newline at end of file
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index ccd87d8..bef27fb 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -1,6 +1,6 @@
-
+