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