Target API33. Setup Hilt DI framework. Apply formatting
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-12-21 20:20:22 +01:00
parent 479f5476e0
commit a835580682
21 changed files with 399 additions and 482 deletions

View File

@@ -2,19 +2,20 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:name=".framework.TichuCounterApplication"
android:allowBackup="true"
android:fullBackupContent="@xml/backup_descriptor"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:localeConfig="@xml/locales_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:fullBackupContent="@xml/backup_descriptor">
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustPan"
android:name=".viewModel.MainActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

View File

@@ -1,11 +0,0 @@
package me.zobrist.tichucounter
fun Int.isMultipleOf5(): Boolean
{
return (this % 5) == 0
}
fun Int.isMultipleOf100(): Boolean
{
return (this % 100) == 0
}

View File

@@ -1,65 +0,0 @@
package me.zobrist.tichucounter
class History
{
private var scores=ArrayList<Round>()
fun getScoreA(): Int
{
var tempScore=0
scores.forEach {
tempScore+=it.scoreA
}
return tempScore
}
fun getScoreB(): Int
{
var tempScore=0
scores.forEach {
tempScore+=it.scoreB
}
return tempScore
}
fun getHistoryA(): String
{
var tempHistory=String()
scores.forEach {
tempHistory+=it.scoreA.toString() + "\n"
}
return tempHistory
}
fun getHistoryB(): String
{
var tempHistory=String()
scores.forEach {
tempHistory+=it.scoreB.toString() + "\n"
}
return tempHistory
}
fun logRound(round: Round)
{
scores.add(round)
}
fun revertLastRound()
{
if (scores.isNotEmpty())
{
scores.removeAt(scores.size - 1)
}
}
fun clearAll()
{
scores.clear()
}
fun isEmpty(): Boolean
{
return scores.isEmpty()
}
}

View File

@@ -1,47 +0,0 @@
package me.zobrist.tichucounter
import java.io.Serializable
class Round() : Serializable
{
var scoreA: Int=0
var scoreB: Int=0
constructor(score: Int , isScoreA: Boolean) : this()
{
if (isScoreA)
{
scoreA=score
scoreB=calculateOtherScore(scoreA)
}
else
{
scoreB=score
scoreA=calculateOtherScore(scoreB)
}
}
constructor(scoreA: Int , scoreB: Int) : this()
{
this.scoreA=scoreA
this.scoreB=scoreB
}
private fun calculateOtherScore(score: Int): Int
{
if (score.isMultipleOf100() && score != 0)
{
return 0
}
if (score in 101 ..125)
{
return 0 - (score % 100)
}
return 100 - (score % 100)
}
fun isValidRound(): Boolean
{
return (scoreA.isMultipleOf5()) && scoreB.isMultipleOf5() && (scoreA + scoreB).isMultipleOf100()
}
}

View File

@@ -0,0 +1,60 @@
package me.zobrist.tichucounter.domain
import javax.inject.Inject
class History {
private var scores = ArrayList<Round>()
@Inject
constructor()
fun getScoreA(): Int {
var tempScore = 0
scores.forEach {
tempScore += it.scoreA
}
return tempScore
}
fun getScoreB(): Int {
var tempScore = 0
scores.forEach {
tempScore += it.scoreB
}
return tempScore
}
fun getHistoryA(): String {
var tempHistory = String()
scores.forEach {
tempHistory += it.scoreA.toString() + "\n"
}
return tempHistory
}
fun getHistoryB(): String {
var tempHistory = String()
scores.forEach {
tempHistory += it.scoreB.toString() + "\n"
}
return tempHistory
}
fun logRound(round: Round) {
scores.add(round)
}
fun revertLastRound() {
if (scores.isNotEmpty()) {
scores.removeAt(scores.size - 1)
}
}
fun clearAll() {
scores.clear()
}
fun isEmpty(): Boolean {
return scores.isEmpty()
}
}

View File

@@ -0,0 +1,9 @@
package me.zobrist.tichucounter.domain
fun Int.isMultipleOf5(): Boolean {
return (this % 5) == 0
}
fun Int.isMultipleOf100(): Boolean {
return (this % 100) == 0
}

View File

@@ -0,0 +1,37 @@
package me.zobrist.tichucounter.domain
import java.io.Serializable
class Round() : Serializable {
var scoreA: Int = 0
var scoreB: Int = 0
constructor(score: Int, isScoreA: Boolean) : this() {
if (isScoreA) {
scoreA = score
scoreB = calculateOtherScore(scoreA)
} else {
scoreB = score
scoreA = calculateOtherScore(scoreB)
}
}
constructor(scoreA: Int, scoreB: Int) : this() {
this.scoreA = scoreA
this.scoreB = scoreB
}
fun calculateOtherScore(score: Int): Int {
if (score.isMultipleOf100() && score != 0) {
return 0
}
if (score in 101..125) {
return 0 - (score % 100)
}
return 100 - (score % 100)
}
fun isValidRound(): Boolean {
return (scoreA.isMultipleOf5()) && scoreB.isMultipleOf5() && (scoreA + scoreB).isMultipleOf100()
}
}

View File

@@ -0,0 +1,9 @@
package me.zobrist.tichucounter.framework
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class TichuCounterApplication : Application() {
}

View File

@@ -1,4 +1,4 @@
package me.zobrist.tichucounter
package me.zobrist.tichucounter.viewModel
import android.app.AlertDialog
import android.content.Intent
@@ -14,26 +14,32 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.core.os.LocaleListCompat
import androidx.core.widget.doOnTextChanged
import com.google.gson.Gson
import dagger.hilt.android.AndroidEntryPoint
import me.zobrist.tichucounter.R
import me.zobrist.tichucounter.databinding.ActivityMainBinding
import me.zobrist.tichucounter.domain.History
import me.zobrist.tichucounter.domain.Round
import java.util.*
import javax.inject.Inject
class MainActivity : AppCompatActivity()
{
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private var updateOnChange: Boolean=true
private var updateOnChange: Boolean = true
private lateinit var history: History
private var currentRound=Round()
private var systemLocale=Locale.getDefault()
@Inject
lateinit var history: History
lateinit var currentRound: Round
private var systemLocale = Locale.getDefault()
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?)
{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding=ActivityMainBinding.inflate(layoutInflater)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
@@ -42,123 +48,94 @@ class MainActivity : AppCompatActivity()
binding.contentMain.inputTeamB.setRawInputType(InputType.TYPE_NULL)
binding.contentMain.inputTeamA.requestFocus()
disableSubmitButton()
updateTheme(this.getSharedPreferences("Settings" , MODE_PRIVATE).getInt("Theme" , 2))
updateTheme(this.getSharedPreferences("Settings", MODE_PRIVATE).getInt("Theme", 2))
keepScreenOn(
this.getSharedPreferences("Settings" , MODE_PRIVATE)
.getBoolean("Screen_On" , false)
this.getSharedPreferences("Settings", MODE_PRIVATE)
.getBoolean("Screen_On", false)
)
val json=this.getSharedPreferences("Settings" , MODE_PRIVATE)
.getString("history" , "{\"scores\":[]}")
history=Gson().fromJson(json , History::class.java)
val json = this.getSharedPreferences("Settings", MODE_PRIVATE)
.getString("history", "{\"scores\":[]}")
history = Gson().fromJson(json, History::class.java)
binding.contentMain.nameTeamA.setText(
this.getSharedPreferences("Settings" , MODE_PRIVATE).getString("nameTeamA" , "TeamA")
this.getSharedPreferences("Settings", MODE_PRIVATE).getString("nameTeamA", "TeamA")
)
binding.contentMain.nameTeamB.setText(
this.getSharedPreferences("Settings" , MODE_PRIVATE).getString("nameTeamB" , "TeamB")
this.getSharedPreferences("Settings", MODE_PRIVATE).getString("nameTeamB", "TeamB")
)
updateView()
this.setListenes()
this.setListeners()
}
private fun setListenes()
{
binding.contentMain.inputTeamA.setOnFocusChangeListener { _ , b ->
if (b)
{
private fun setListeners() {
binding.contentMain.inputTeamA.setOnFocusChangeListener { _, b ->
if (b) {
hideKeyboard()
}
}
binding.contentMain.inputTeamB.setOnFocusChangeListener { _ , b ->
if (b)
{
binding.contentMain.inputTeamB.setOnFocusChangeListener { _, b ->
if (b) {
hideKeyboard()
}
}
binding.contentMain.inputTeamA.doOnTextChanged { text , _ , _ , _ ->
if (binding.contentMain.inputTeamA.isFocused)
{
if (binding.contentMain.inputTeamA.text.isNotEmpty())
{
if (updateOnChange)
{
currentRound=try
{
Round(text.toString().toInt() , true)
binding.contentMain.inputTeamA.doOnTextChanged { text, _, _, _ ->
if (binding.contentMain.inputTeamA.isFocused) {
if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
if (updateOnChange) {
currentRound = try {
Round(text.toString().toInt(), true)
}
catch (e: java.lang.Exception)
{
Round(1 , 1)
} catch (e: java.lang.Exception) {
Round(1, 1)
}
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
} else {
updateOnChange = true
}
else
{
updateOnChange=true
}
}
else
{
} else {
binding.contentMain.inputTeamA.text.clear()
binding.contentMain.inputTeamB.text.clear()
}
}
if (currentRound.isValidRound() && binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty())
{
if (currentRound.isValidRound() && binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty()) {
enableSubmitButton()
}
else
{
} else {
disableSubmitButton()
}
}
binding.contentMain.inputTeamB.doOnTextChanged { text , _ , _ , _ ->
if (binding.contentMain.inputTeamB.isFocused)
{
if (binding.contentMain.inputTeamB.text.isNotEmpty())
{
if (updateOnChange)
{
currentRound=try
{
Round(text.toString().toInt() , false)
binding.contentMain.inputTeamB.doOnTextChanged { text, _, _, _ ->
if (binding.contentMain.inputTeamB.isFocused) {
if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
if (updateOnChange) {
currentRound = try {
Round(text.toString().toInt(), false)
}
catch (e: java.lang.Exception)
{
Round(1 , 1)
} catch (e: java.lang.Exception) {
Round(1, 1)
}
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
}
else
{
updateOnChange=true
} else {
updateOnChange = true
}
}
else
{
} else {
binding.contentMain.inputTeamA.text.clear()
binding.contentMain.inputTeamB.text.clear()
}
}
if (currentRound.isValidRound() && binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty())
{
if (currentRound.isValidRound() && binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty()) {
enableSubmitButton()
}
else
{
} else {
disableSubmitButton()
}
}
@@ -166,37 +143,29 @@ class MainActivity : AppCompatActivity()
binding.contentMain.buttonAdd100.setOnClickListener {
giveFocusToAIfNone()
if (binding.contentMain.inputTeamA.isFocused)
{
if (binding.contentMain.inputTeamA.isFocused) {
currentRound.scoreA=try
{
currentRound.scoreA = try {
binding.contentMain.inputTeamA.text.toString().toInt() + 100
}
catch (e: Exception)
{
currentRound.scoreB=0
} catch (e: Exception) {
currentRound.scoreB = 0
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
100
}
updateOnChange=false
updateOnChange = false
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
}
if (binding.contentMain.inputTeamB.isFocused)
{
currentRound.scoreB=try
{
if (binding.contentMain.inputTeamB.isFocused) {
currentRound.scoreB = try {
binding.contentMain.inputTeamB.text.toString().toInt() + 100
}
catch (e: Exception)
{
currentRound.scoreA=0
} catch (e: Exception) {
currentRound.scoreA = 0
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
100
}
updateOnChange=false
updateOnChange = false
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
}
@@ -205,35 +174,27 @@ class MainActivity : AppCompatActivity()
binding.contentMain.buttonSub100.setOnClickListener {
giveFocusToAIfNone()
if (binding.contentMain.inputTeamA.isFocused)
{
currentRound.scoreA=try
{
if (binding.contentMain.inputTeamA.isFocused) {
currentRound.scoreA = try {
binding.contentMain.inputTeamA.text.toString().toInt() - 100
}
catch (e: Exception)
{
currentRound.scoreB=0
} catch (e: Exception) {
currentRound.scoreB = 0
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
-100
}
updateOnChange=false
updateOnChange = false
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
}
if (binding.contentMain.inputTeamB.isFocused)
{
currentRound.scoreB=try
{
if (binding.contentMain.inputTeamB.isFocused) {
currentRound.scoreB = try {
binding.contentMain.inputTeamB.text.toString().toInt() - 100
}
catch (e: Exception)
{
currentRound.scoreA=0
} catch (e: Exception) {
currentRound.scoreA = 0
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
-100
}
updateOnChange=false
updateOnChange = false
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
}
}
@@ -293,42 +254,29 @@ class MainActivity : AppCompatActivity()
giveFocusToAIfNone()
if (binding.contentMain.inputTeamA.isFocused)
{
if (binding.contentMain.inputTeamA.text.toString().equals("-"))
{
if (binding.contentMain.inputTeamA.isFocused) {
if (binding.contentMain.inputTeamA.text.toString() == "-") {
binding.contentMain.inputTeamA.text.clear()
}
else if (binding.contentMain.inputTeamA.text.isNotEmpty())
{
tempInt=binding.contentMain.inputTeamA.text.toString().toInt() * -1
} else if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
tempInt = binding.contentMain.inputTeamA.text.toString().toInt() * -1
binding.contentMain.inputTeamA.setText(tempInt.toString())
}
else
{
updateOnChange=false
} else {
updateOnChange = false
appendToFocusedInput('-')
currentRound=Round(1 , 1)
currentRound = Round(1, 1)
}
}
else if (binding.contentMain.inputTeamB.isFocused)
{
if (binding.contentMain.inputTeamB.text.toString().equals("-"))
{
} else if (binding.contentMain.inputTeamB.isFocused) {
if (binding.contentMain.inputTeamB.text.toString() == "-") {
binding.contentMain.inputTeamB.text.clear()
}
else if (binding.contentMain.inputTeamB.text.isNotEmpty())
{
tempInt=binding.contentMain.inputTeamB.text.toString().toInt() * -1
} else if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
tempInt = binding.contentMain.inputTeamB.text.toString().toInt() * -1
binding.contentMain.inputTeamB.setText(tempInt.toString())
}
else
{
updateOnChange=false
} else {
updateOnChange = false
appendToFocusedInput('-')
currentRound=Round(1 , 1)
currentRound = Round(1, 1)
}
}
}
@@ -336,21 +284,16 @@ class MainActivity : AppCompatActivity()
binding.contentMain.buttonBack.setOnClickListener {
giveFocusToAIfNone()
if (binding.contentMain.inputTeamA.isFocused)
{
if (binding.contentMain.inputTeamA.text.isNotEmpty())
{
val string=binding.contentMain.inputTeamA.text.toString()
binding.contentMain.inputTeamA.setText(string.substring(0 , string.length - 1))
if (binding.contentMain.inputTeamA.isFocused) {
if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
val string = binding.contentMain.inputTeamA.text.toString()
binding.contentMain.inputTeamA.setText(string.substring(0, string.length - 1))
}
}
else if (binding.contentMain.inputTeamB.isFocused)
{
if (binding.contentMain.inputTeamB.text.isNotEmpty())
{
val string=binding.contentMain.inputTeamB.text.toString()
binding.contentMain.inputTeamB.setText(string.substring(0 , string.length - 1))
} else if (binding.contentMain.inputTeamB.isFocused) {
if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
val string = binding.contentMain.inputTeamB.text.toString()
binding.contentMain.inputTeamB.setText(string.substring(0, string.length - 1))
}
}
}
@@ -358,12 +301,11 @@ class MainActivity : AppCompatActivity()
binding.contentMain.submit.setOnClickListener {
giveFocusToAIfNone()
if (binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty())
{
if (binding.contentMain.inputTeamA.text.isNotEmpty() && binding.contentMain.inputTeamB.text.isNotEmpty()) {
history.logRound(
Round(
binding.contentMain.inputTeamA.text.toString().toInt() ,
binding.contentMain.inputTeamA.text.toString().toInt(),
binding.contentMain.inputTeamB.text.toString().toInt()
)
)
@@ -379,69 +321,60 @@ class MainActivity : AppCompatActivity()
}
}
override fun onSaveInstanceState(outState: Bundle)
{
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
val prefs=this.getSharedPreferences("Settings" , MODE_PRIVATE).edit()
prefs.putString("history" , Gson().toJson(history))
prefs.putString("nameTeamA" , binding.contentMain.nameTeamA.text.toString())
prefs.putString("nameTeamB" , binding.contentMain.nameTeamB.text.toString())
val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
prefs.putString("history", Gson().toJson(history))
prefs.putString("nameTeamA", binding.contentMain.nameTeamA.text.toString())
prefs.putString("nameTeamB", binding.contentMain.nameTeamB.text.toString())
prefs.apply()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean
{
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)
menuInflater.inflate(R.menu.menu_main, menu)
menu.findItem(R.id.action_screenOn).isChecked=
this.getSharedPreferences("Settings" , MODE_PRIVATE)
.getBoolean("Screen_On" , false)
menu.findItem(R.id.action_screenOn).isChecked =
this.getSharedPreferences("Settings", MODE_PRIVATE)
.getBoolean("Screen_On", false)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean
{
return when (item.itemId)
{
R.id.action_clear ->
{
val builder=AlertDialog.Builder(this)
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_clear -> {
val builder = AlertDialog.Builder(this)
builder.setMessage(getString(R.string.confirmClear))
.setTitle(R.string.clear)
.setCancelable(false)
.setPositiveButton(getString(R.string.yes)) { dialog , _ ->
.setPositiveButton(getString(R.string.yes)) { dialog, _ ->
dialog.dismiss()
clearAll()
}
.setNegativeButton(getString(R.string.no)) { dialog , _ ->
.setNegativeButton(getString(R.string.no)) { dialog, _ ->
dialog.cancel()
}
builder.create().show()
true
}
R.id.action_undo ->
{
R.id.action_undo -> {
undoLastRound()
true
}
R.id.action_theme ->
{
R.id.action_theme -> {
chooseThemeDialog()
true
}
R.id.action_language ->
{
R.id.action_language -> {
chooseLanguageDialog()
true
}
R.id.action_screenOn ->
{
item.isChecked=!item.isChecked
R.id.action_screenOn -> {
item.isChecked = !item.isChecked
keepScreenOn(item.isChecked)
true
}
@@ -449,92 +382,79 @@ class MainActivity : AppCompatActivity()
}
}
private fun hideKeyboard()
{
val imm: InputMethodManager=
private fun hideKeyboard() {
val imm: InputMethodManager =
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus!!.windowToken , 0)
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}
private fun giveFocusToAIfNone()
{
if (!binding.contentMain.inputTeamA.isFocused && !binding.contentMain.inputTeamB.isFocused)
{
private fun giveFocusToAIfNone() {
if (!binding.contentMain.inputTeamA.isFocused && !binding.contentMain.inputTeamB.isFocused) {
binding.contentMain.inputTeamA.requestFocus()
}
}
private fun undoLastRound()
{
private fun undoLastRound() {
history.revertLastRound()
updateView()
}
private fun updateView()
{
binding.contentMain.scoreA.text=history.getScoreA().toString()
binding.contentMain.scoreB.text=history.getScoreB().toString()
private fun updateView() {
binding.contentMain.scoreA.text = history.getScoreA().toString()
binding.contentMain.scoreB.text = history.getScoreB().toString()
binding.contentMain.historyA.text=history.getHistoryA()
binding.contentMain.historyB.text=history.getHistoryB()
binding.contentMain.historyA.text = history.getHistoryA()
binding.contentMain.historyB.text = history.getHistoryB()
}
private fun clearAll()
{
binding.contentMain.historyA.text=""
binding.contentMain.historyB.text=""
private fun clearAll() {
binding.contentMain.historyA.text = ""
binding.contentMain.historyB.text = ""
binding.contentMain.inputTeamA.text.clear()
binding.contentMain.inputTeamB.text.clear()
binding.contentMain.scoreA.text="0"
binding.contentMain.scoreB.text="0"
binding.contentMain.scoreA.text = "0"
binding.contentMain.scoreB.text = "0"
history.clearAll()
}
private fun appendToFocusedInput(toAppend: Char)
{
if (binding.contentMain.inputTeamA.isFocused)
{
private fun appendToFocusedInput(toAppend: Char) {
if (binding.contentMain.inputTeamA.isFocused) {
binding.contentMain.inputTeamA.text.append(toAppend)
}
else if (binding.contentMain.inputTeamB.isFocused)
{
} else if (binding.contentMain.inputTeamB.isFocused) {
binding.contentMain.inputTeamB.text.append(toAppend)
}
}
private fun enableSubmitButton()
{
binding.contentMain.submit.imageAlpha=255 // 0 being transparent and 255 being opaque
binding.contentMain.submit.isEnabled=true
private fun enableSubmitButton() {
binding.contentMain.submit.imageAlpha = 255 // 0 being transparent and 255 being opaque
binding.contentMain.submit.isEnabled = true
}
private fun disableSubmitButton()
{
binding.contentMain.submit.imageAlpha=60 // 0 being transparent and 255 being opaque
binding.contentMain.submit.isEnabled=false
private fun disableSubmitButton() {
binding.contentMain.submit.imageAlpha = 60 // 0 being transparent and 255 being opaque
binding.contentMain.submit.isEnabled = false
}
private fun chooseThemeDialog()
{
private fun chooseThemeDialog() {
val builder=AlertDialog.Builder(this)
val builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.choose_theme_text))
val styles=arrayOf(
getString(R.string.light) ,
getString(R.string.dark) ,
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 checkedItem =
this.getSharedPreferences("Settings", MODE_PRIVATE).getInt("Theme", 2)
val prefs=this.getSharedPreferences("Settings" , MODE_PRIVATE).edit()
val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
builder.setSingleChoiceItems(styles , checkedItem) { dialog , which ->
builder.setSingleChoiceItems(styles, checkedItem) { dialog, which ->
prefs.putInt("Theme" , which)
prefs.putInt("Theme", which)
prefs.apply()
updateTheme(which)
@@ -542,53 +462,49 @@ class MainActivity : AppCompatActivity()
dialog.dismiss()
}
val dialog=builder.create()
val dialog = builder.create()
dialog.show()
}
private fun chooseLanguageDialog()
{
private fun chooseLanguageDialog() {
val builder=AlertDialog.Builder(this)
val builder = AlertDialog.Builder(this)
builder.setTitle(getString(R.string.choose_language_text))
val languages_map=mapOf(
getString(R.string.english) to "en" ,
val languagesMap = mapOf(
getString(R.string.english) to "en",
getString(R.string.german) to "de"
)
val languages_display_keys=languages_map.keys.toTypedArray()
val languages_display_values=languages_map.values.toTypedArray()
val languagesDisplayKeys = languagesMap.keys.toTypedArray()
val languagesDisplayValues = languagesMap.values.toTypedArray()
val checkedItem=AppCompatDelegate.getApplicationLocales()[0].toString()
var checkedItemIndex=languages_display_values.indexOf(checkedItem)
val checkedItem = AppCompatDelegate.getApplicationLocales()[0].toString()
var checkedItemIndex = languagesDisplayValues.indexOf(checkedItem)
if (checkedItemIndex == -1)
{
checkedItemIndex=0
if (checkedItemIndex == -1) {
checkedItemIndex = 0
}
builder.setSingleChoiceItems(languages_display_keys , checkedItemIndex) { dialog , which ->
builder.setSingleChoiceItems(languagesDisplayKeys, checkedItemIndex) { dialog, which ->
val newLocale=
LocaleListCompat.forLanguageTags(languages_map[languages_display_keys[which]])
val newLocale =
LocaleListCompat.forLanguageTags(languagesMap[languagesDisplayKeys[which]])
AppCompatDelegate.setApplicationLocales(newLocale)
startActivity(Intent(this , MainActivity::class.java))
startActivity(Intent(this, MainActivity::class.java))
finish()
dialog.dismiss()
}
val dialog=builder.create()
val dialog = builder.create()
dialog.show()
}
private fun updateTheme(which: Int)
{
when (which)
{
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)
@@ -596,19 +512,15 @@ class MainActivity : AppCompatActivity()
delegate.applyDayNight()
}
private fun keepScreenOn(keepOn: Boolean)
{
if (keepOn)
{
private fun keepScreenOn(keepOn: Boolean) {
if (keepOn) {
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
else
{
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
val prefs=this.getSharedPreferences("Settings" , MODE_PRIVATE).edit()
prefs.putBoolean("Screen_On" , keepOn)
val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
prefs.putBoolean("Screen_On", keepOn)
prefs.apply()
}
}

View File

@@ -269,12 +269,12 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="TODO"
android:cropToPadding="false"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:scaleType="fitCenter"
app:srcCompat="@drawable/back"
android:contentDescription="TODO" />
app:srcCompat="@drawable/back" />
</LinearLayout>
@@ -312,9 +312,9 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.0"
android:contentDescription="TODO"
android:scaleType="fitCenter"
app:srcCompat="@drawable/checkmark"
android:contentDescription="TODO" />
app:srcCompat="@drawable/checkmark" />
</LinearLayout>
</LinearLayout>

View File

@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
tools:context=".viewModel.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"

View File

@@ -285,12 +285,12 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="@string/back"
android:cropToPadding="false"
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:scaleType="fitCenter"
app:srcCompat="@drawable/back"
android:contentDescription="@string/back" />
app:srcCompat="@drawable/back" />
</LinearLayout>
@@ -331,8 +331,8 @@
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.0"
android:contentDescription="TODO"
android:scaleType="fitCenter"
app:srcCompat="@drawable/checkmark"
android:contentDescription="TODO" />
app:srcCompat="@drawable/checkmark" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,7 +1,7 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="me.zobrist.tichucounter.MainActivity">
tools:context="me.zobrist.tichucounter.viewModel.MainActivity">
<item
android:id="@+id/action_undo"
android:icon="@android:drawable/ic_menu_revert"

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background" />
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<background android:drawable="@color/ic_launcher_background" />
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="en"/>
<locale android:name="de"/>
<locale android:name="en" />
<locale android:name="de" />
</locale-config>