Target API33. Setup Hilt DI framework. Apply formatting
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
apply plugin: 'com.android.application'
|
plugins {
|
||||||
apply plugin: 'kotlin-android'
|
id 'com.android.application'
|
||||||
|
id 'kotlin-android'
|
||||||
|
id 'kotlin-kapt'
|
||||||
|
id 'com.google.dagger.hilt.android'
|
||||||
|
}
|
||||||
|
|
||||||
// Create a variable called keystorePropertiesFile, and initialize it to your
|
// Create a variable called keystorePropertiesFile, and initialize it to your
|
||||||
// keystore.properties file, in the rootProject folder.
|
// keystore.properties file, in the rootProject folder.
|
||||||
@@ -16,15 +20,17 @@ def versionProperties = new Properties()
|
|||||||
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||||
versionProperties.load(new FileInputStream(versionPropertiesFile))
|
versionProperties.load(new FileInputStream(versionPropertiesFile))
|
||||||
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 32
|
compileSdkVersion 33
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "me.zobrist.tichucounter"
|
applicationId "me.zobrist.tichucounter"
|
||||||
minSdkVersion 16
|
minSdkVersion 16
|
||||||
targetSdkVersion 32
|
targetSdkVersion 33
|
||||||
versionCode versionProperties["versionCode"].toInteger()
|
versionCode versionProperties["versionCode"].toInteger()
|
||||||
versionName "1.1.0Beta1"
|
versionName "1.1.0Beta1"
|
||||||
|
resConfigs("de", "en")
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
@@ -62,17 +68,23 @@ android {
|
|||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
implementation 'androidx.core:core-ktx:1.8.0'
|
implementation 'androidx.core:core-ktx:1.9.0'
|
||||||
implementation 'androidx.appcompat:appcompat:1.6.0-alpha05'
|
implementation 'androidx.appcompat:appcompat:1.6.0-rc01'
|
||||||
implementation 'com.google.android.material:material:1.6.1'
|
implementation 'com.google.android.material:material:1.7.0'
|
||||||
implementation 'com.google.android.play:core-ktx:1.8.1'
|
implementation 'com.google.android.play:core-ktx:1.8.1'
|
||||||
implementation 'com.google.android.play:core-ktx:1.8.1'
|
implementation 'com.google.android.play:core-ktx:1.8.1'
|
||||||
implementation 'com.google.code.gson:gson:2.8.9'
|
implementation 'com.google.code.gson:gson:2.8.9'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
implementation 'androidx.navigation:navigation-fragment-ktx:2.4.2'
|
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
|
||||||
implementation 'androidx.navigation:navigation-ui-ktx:2.4.2'
|
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
|
||||||
|
implementation "com.google.dagger:hilt-android:2.44"
|
||||||
|
kapt "com.google.dagger:hilt-compiler:2.44"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow references to generated code
|
||||||
|
kapt {
|
||||||
|
correctErrorTypes true
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
package me.zobrist.tichucounter
|
package me.zobrist.tichucounter
|
||||||
|
|
||||||
import androidx.test.platform.app.InstrumentationRegistry
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry
|
||||||
|
import org.junit.Assert.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
import org.junit.Assert.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrumented test, which will execute on an Android device.
|
* Instrumented test, which will execute on an Android device.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -2,19 +2,20 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
android:name=".framework.TichuCounterApplication"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
android:fullBackupContent="@xml/backup_descriptor"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
android:localeConfig="@xml/locales_config"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme"
|
android:theme="@style/AppTheme">
|
||||||
android:fullBackupContent="@xml/backup_descriptor">
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".viewModel.MainActivity"
|
||||||
android:windowSoftInputMode="adjustPan"
|
android:exported="true"
|
||||||
android:theme="@style/AppTheme.NoActionBar"
|
android:theme="@style/AppTheme.NoActionBar"
|
||||||
android:exported="true">
|
android:windowSoftInputMode="adjustPan">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
package me.zobrist.tichucounter
|
|
||||||
|
|
||||||
fun Int.isMultipleOf5(): Boolean
|
|
||||||
{
|
|
||||||
return (this % 5) == 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Int.isMultipleOf100(): Boolean
|
|
||||||
{
|
|
||||||
return (this % 100) == 0
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
60
app/src/main/java/me/zobrist/tichucounter/domain/History.kt
Normal file
60
app/src/main/java/me/zobrist/tichucounter/domain/History.kt
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
37
app/src/main/java/me/zobrist/tichucounter/domain/Round.kt
Normal file
37
app/src/main/java/me/zobrist/tichucounter/domain/Round.kt
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package me.zobrist.tichucounter.framework
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import dagger.hilt.android.HiltAndroidApp
|
||||||
|
|
||||||
|
@HiltAndroidApp
|
||||||
|
class TichuCounterApplication : Application() {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package me.zobrist.tichucounter
|
package me.zobrist.tichucounter.viewModel
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -14,26 +14,32 @@ import androidx.appcompat.app.AppCompatDelegate
|
|||||||
import androidx.core.os.LocaleListCompat
|
import androidx.core.os.LocaleListCompat
|
||||||
import androidx.core.widget.doOnTextChanged
|
import androidx.core.widget.doOnTextChanged
|
||||||
import com.google.gson.Gson
|
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.databinding.ActivityMainBinding
|
||||||
|
import me.zobrist.tichucounter.domain.History
|
||||||
|
import me.zobrist.tichucounter.domain.Round
|
||||||
import java.util.*
|
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
|
@Inject
|
||||||
private var currentRound=Round()
|
lateinit var history: History
|
||||||
private var systemLocale=Locale.getDefault()
|
lateinit var currentRound: Round
|
||||||
|
|
||||||
|
private var systemLocale = Locale.getDefault()
|
||||||
|
|
||||||
|
|
||||||
private lateinit var binding: ActivityMainBinding
|
private lateinit var binding: ActivityMainBinding
|
||||||
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?)
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding=ActivityMainBinding.inflate(layoutInflater)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
|
|
||||||
setSupportActionBar(binding.toolbar)
|
setSupportActionBar(binding.toolbar)
|
||||||
@@ -42,123 +48,94 @@ class MainActivity : AppCompatActivity()
|
|||||||
binding.contentMain.inputTeamB.setRawInputType(InputType.TYPE_NULL)
|
binding.contentMain.inputTeamB.setRawInputType(InputType.TYPE_NULL)
|
||||||
binding.contentMain.inputTeamA.requestFocus()
|
binding.contentMain.inputTeamA.requestFocus()
|
||||||
disableSubmitButton()
|
disableSubmitButton()
|
||||||
updateTheme(this.getSharedPreferences("Settings" , MODE_PRIVATE).getInt("Theme" , 2))
|
updateTheme(this.getSharedPreferences("Settings", MODE_PRIVATE).getInt("Theme", 2))
|
||||||
keepScreenOn(
|
keepScreenOn(
|
||||||
this.getSharedPreferences("Settings" , MODE_PRIVATE)
|
this.getSharedPreferences("Settings", MODE_PRIVATE)
|
||||||
.getBoolean("Screen_On" , false)
|
.getBoolean("Screen_On", false)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
val json=this.getSharedPreferences("Settings" , MODE_PRIVATE)
|
val json = this.getSharedPreferences("Settings", MODE_PRIVATE)
|
||||||
.getString("history" , "{\"scores\":[]}")
|
.getString("history", "{\"scores\":[]}")
|
||||||
history=Gson().fromJson(json , History::class.java)
|
history = Gson().fromJson(json, History::class.java)
|
||||||
binding.contentMain.nameTeamA.setText(
|
binding.contentMain.nameTeamA.setText(
|
||||||
this.getSharedPreferences("Settings" , MODE_PRIVATE).getString("nameTeamA" , "TeamA")
|
this.getSharedPreferences("Settings", MODE_PRIVATE).getString("nameTeamA", "TeamA")
|
||||||
)
|
)
|
||||||
binding.contentMain.nameTeamB.setText(
|
binding.contentMain.nameTeamB.setText(
|
||||||
this.getSharedPreferences("Settings" , MODE_PRIVATE).getString("nameTeamB" , "TeamB")
|
this.getSharedPreferences("Settings", MODE_PRIVATE).getString("nameTeamB", "TeamB")
|
||||||
)
|
)
|
||||||
updateView()
|
updateView()
|
||||||
|
|
||||||
this.setListenes()
|
this.setListeners()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setListenes()
|
private fun setListeners() {
|
||||||
{
|
binding.contentMain.inputTeamA.setOnFocusChangeListener { _, b ->
|
||||||
binding.contentMain.inputTeamA.setOnFocusChangeListener { _ , b ->
|
if (b) {
|
||||||
if (b)
|
|
||||||
{
|
|
||||||
hideKeyboard()
|
hideKeyboard()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.contentMain.inputTeamB.setOnFocusChangeListener { _ , b ->
|
binding.contentMain.inputTeamB.setOnFocusChangeListener { _, b ->
|
||||||
if (b)
|
if (b) {
|
||||||
{
|
|
||||||
hideKeyboard()
|
hideKeyboard()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.contentMain.inputTeamA.doOnTextChanged { text , _ , _ , _ ->
|
binding.contentMain.inputTeamA.doOnTextChanged { text, _, _, _ ->
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
{
|
if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
|
||||||
if (binding.contentMain.inputTeamA.text.isNotEmpty())
|
if (updateOnChange) {
|
||||||
{
|
currentRound = try {
|
||||||
if (updateOnChange)
|
Round(text.toString().toInt(), true)
|
||||||
{
|
|
||||||
currentRound=try
|
|
||||||
{
|
|
||||||
Round(text.toString().toInt() , true)
|
|
||||||
|
|
||||||
}
|
} catch (e: java.lang.Exception) {
|
||||||
catch (e: java.lang.Exception)
|
Round(1, 1)
|
||||||
{
|
|
||||||
Round(1 , 1)
|
|
||||||
}
|
}
|
||||||
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
||||||
|
} else {
|
||||||
|
updateOnChange = true
|
||||||
}
|
}
|
||||||
else
|
} else {
|
||||||
{
|
|
||||||
updateOnChange=true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.clear()
|
binding.contentMain.inputTeamA.text.clear()
|
||||||
binding.contentMain.inputTeamB.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()
|
enableSubmitButton()
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
disableSubmitButton()
|
disableSubmitButton()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
binding.contentMain.inputTeamB.doOnTextChanged { text , _ , _ , _ ->
|
binding.contentMain.inputTeamB.doOnTextChanged { text, _, _, _ ->
|
||||||
if (binding.contentMain.inputTeamB.isFocused)
|
if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
{
|
if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
|
||||||
if (binding.contentMain.inputTeamB.text.isNotEmpty())
|
if (updateOnChange) {
|
||||||
{
|
currentRound = try {
|
||||||
if (updateOnChange)
|
Round(text.toString().toInt(), false)
|
||||||
{
|
|
||||||
currentRound=try
|
|
||||||
{
|
|
||||||
Round(text.toString().toInt() , false)
|
|
||||||
|
|
||||||
}
|
} catch (e: java.lang.Exception) {
|
||||||
catch (e: java.lang.Exception)
|
Round(1, 1)
|
||||||
{
|
|
||||||
Round(1 , 1)
|
|
||||||
}
|
}
|
||||||
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
updateOnChange = true
|
||||||
{
|
|
||||||
updateOnChange=true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.clear()
|
binding.contentMain.inputTeamA.text.clear()
|
||||||
binding.contentMain.inputTeamB.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()
|
enableSubmitButton()
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
disableSubmitButton()
|
disableSubmitButton()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -166,37 +143,29 @@ class MainActivity : AppCompatActivity()
|
|||||||
binding.contentMain.buttonAdd100.setOnClickListener {
|
binding.contentMain.buttonAdd100.setOnClickListener {
|
||||||
giveFocusToAIfNone()
|
giveFocusToAIfNone()
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
{
|
|
||||||
|
|
||||||
currentRound.scoreA=try
|
currentRound.scoreA = try {
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.toString().toInt() + 100
|
binding.contentMain.inputTeamA.text.toString().toInt() + 100
|
||||||
}
|
} catch (e: Exception) {
|
||||||
catch (e: Exception)
|
currentRound.scoreB = 0
|
||||||
{
|
|
||||||
currentRound.scoreB=0
|
|
||||||
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
||||||
100
|
100
|
||||||
}
|
}
|
||||||
updateOnChange=false
|
updateOnChange = false
|
||||||
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamB.isFocused)
|
if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
{
|
currentRound.scoreB = try {
|
||||||
currentRound.scoreB=try
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamB.text.toString().toInt() + 100
|
binding.contentMain.inputTeamB.text.toString().toInt() + 100
|
||||||
}
|
} catch (e: Exception) {
|
||||||
catch (e: Exception)
|
currentRound.scoreA = 0
|
||||||
{
|
|
||||||
currentRound.scoreA=0
|
|
||||||
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
||||||
100
|
100
|
||||||
|
|
||||||
}
|
}
|
||||||
updateOnChange=false
|
updateOnChange = false
|
||||||
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -205,35 +174,27 @@ class MainActivity : AppCompatActivity()
|
|||||||
binding.contentMain.buttonSub100.setOnClickListener {
|
binding.contentMain.buttonSub100.setOnClickListener {
|
||||||
giveFocusToAIfNone()
|
giveFocusToAIfNone()
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
{
|
currentRound.scoreA = try {
|
||||||
currentRound.scoreA=try
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.toString().toInt() - 100
|
binding.contentMain.inputTeamA.text.toString().toInt() - 100
|
||||||
}
|
} catch (e: Exception) {
|
||||||
catch (e: Exception)
|
currentRound.scoreB = 0
|
||||||
{
|
|
||||||
currentRound.scoreB=0
|
|
||||||
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
||||||
-100
|
-100
|
||||||
}
|
}
|
||||||
updateOnChange=false
|
updateOnChange = false
|
||||||
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamB.isFocused)
|
if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
{
|
currentRound.scoreB = try {
|
||||||
currentRound.scoreB=try
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamB.text.toString().toInt() - 100
|
binding.contentMain.inputTeamB.text.toString().toInt() - 100
|
||||||
}
|
} catch (e: Exception) {
|
||||||
catch (e: Exception)
|
currentRound.scoreA = 0
|
||||||
{
|
|
||||||
currentRound.scoreA=0
|
|
||||||
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
binding.contentMain.inputTeamA.setText(currentRound.scoreA.toString())
|
||||||
-100
|
-100
|
||||||
}
|
}
|
||||||
updateOnChange=false
|
updateOnChange = false
|
||||||
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
binding.contentMain.inputTeamB.setText(currentRound.scoreB.toString())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -293,42 +254,29 @@ class MainActivity : AppCompatActivity()
|
|||||||
|
|
||||||
giveFocusToAIfNone()
|
giveFocusToAIfNone()
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
{
|
if (binding.contentMain.inputTeamA.text.toString() == "-") {
|
||||||
if (binding.contentMain.inputTeamA.text.toString().equals("-"))
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.clear()
|
binding.contentMain.inputTeamA.text.clear()
|
||||||
}
|
} else if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
|
||||||
else if (binding.contentMain.inputTeamA.text.isNotEmpty())
|
tempInt = binding.contentMain.inputTeamA.text.toString().toInt() * -1
|
||||||
{
|
|
||||||
tempInt=binding.contentMain.inputTeamA.text.toString().toInt() * -1
|
|
||||||
binding.contentMain.inputTeamA.setText(tempInt.toString())
|
binding.contentMain.inputTeamA.setText(tempInt.toString())
|
||||||
}
|
} else {
|
||||||
else
|
updateOnChange = false
|
||||||
{
|
|
||||||
updateOnChange=false
|
|
||||||
appendToFocusedInput('-')
|
appendToFocusedInput('-')
|
||||||
currentRound=Round(1 , 1)
|
currentRound = Round(1, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
} else if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
else if (binding.contentMain.inputTeamB.isFocused)
|
if (binding.contentMain.inputTeamB.text.toString() == "-") {
|
||||||
{
|
|
||||||
if (binding.contentMain.inputTeamB.text.toString().equals("-"))
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamB.text.clear()
|
binding.contentMain.inputTeamB.text.clear()
|
||||||
}
|
} else if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
|
||||||
else if (binding.contentMain.inputTeamB.text.isNotEmpty())
|
tempInt = binding.contentMain.inputTeamB.text.toString().toInt() * -1
|
||||||
{
|
|
||||||
tempInt=binding.contentMain.inputTeamB.text.toString().toInt() * -1
|
|
||||||
binding.contentMain.inputTeamB.setText(tempInt.toString())
|
binding.contentMain.inputTeamB.setText(tempInt.toString())
|
||||||
}
|
} else {
|
||||||
else
|
updateOnChange = false
|
||||||
{
|
|
||||||
updateOnChange=false
|
|
||||||
appendToFocusedInput('-')
|
appendToFocusedInput('-')
|
||||||
currentRound=Round(1 , 1)
|
currentRound = Round(1, 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,21 +284,16 @@ class MainActivity : AppCompatActivity()
|
|||||||
binding.contentMain.buttonBack.setOnClickListener {
|
binding.contentMain.buttonBack.setOnClickListener {
|
||||||
giveFocusToAIfNone()
|
giveFocusToAIfNone()
|
||||||
|
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
{
|
if (binding.contentMain.inputTeamA.text.isNotEmpty()) {
|
||||||
if (binding.contentMain.inputTeamA.text.isNotEmpty())
|
val string = binding.contentMain.inputTeamA.text.toString()
|
||||||
{
|
binding.contentMain.inputTeamA.setText(string.substring(0, string.length - 1))
|
||||||
val string=binding.contentMain.inputTeamA.text.toString()
|
|
||||||
binding.contentMain.inputTeamA.setText(string.substring(0 , string.length - 1))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} else if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
else if (binding.contentMain.inputTeamB.isFocused)
|
if (binding.contentMain.inputTeamB.text.isNotEmpty()) {
|
||||||
{
|
val string = binding.contentMain.inputTeamB.text.toString()
|
||||||
if (binding.contentMain.inputTeamB.text.isNotEmpty())
|
binding.contentMain.inputTeamB.setText(string.substring(0, string.length - 1))
|
||||||
{
|
|
||||||
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 {
|
binding.contentMain.submit.setOnClickListener {
|
||||||
giveFocusToAIfNone()
|
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(
|
history.logRound(
|
||||||
Round(
|
Round(
|
||||||
binding.contentMain.inputTeamA.text.toString().toInt() ,
|
binding.contentMain.inputTeamA.text.toString().toInt(),
|
||||||
binding.contentMain.inputTeamB.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)
|
super.onSaveInstanceState(outState)
|
||||||
|
|
||||||
val prefs=this.getSharedPreferences("Settings" , MODE_PRIVATE).edit()
|
val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
|
||||||
prefs.putString("history" , Gson().toJson(history))
|
prefs.putString("history", Gson().toJson(history))
|
||||||
prefs.putString("nameTeamA" , binding.contentMain.nameTeamA.text.toString())
|
prefs.putString("nameTeamA", binding.contentMain.nameTeamA.text.toString())
|
||||||
prefs.putString("nameTeamB" , binding.contentMain.nameTeamB.text.toString())
|
prefs.putString("nameTeamB", binding.contentMain.nameTeamB.text.toString())
|
||||||
prefs.apply()
|
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.
|
// 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=
|
menu.findItem(R.id.action_screenOn).isChecked =
|
||||||
this.getSharedPreferences("Settings" , MODE_PRIVATE)
|
this.getSharedPreferences("Settings", MODE_PRIVATE)
|
||||||
.getBoolean("Screen_On" , false)
|
.getBoolean("Screen_On", false)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
{
|
return when (item.itemId) {
|
||||||
return when (item.itemId)
|
R.id.action_clear -> {
|
||||||
{
|
val builder = AlertDialog.Builder(this)
|
||||||
R.id.action_clear ->
|
|
||||||
{
|
|
||||||
val builder=AlertDialog.Builder(this)
|
|
||||||
builder.setMessage(getString(R.string.confirmClear))
|
builder.setMessage(getString(R.string.confirmClear))
|
||||||
.setTitle(R.string.clear)
|
.setTitle(R.string.clear)
|
||||||
.setCancelable(false)
|
.setCancelable(false)
|
||||||
.setPositiveButton(getString(R.string.yes)) { dialog , _ ->
|
.setPositiveButton(getString(R.string.yes)) { dialog, _ ->
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
clearAll()
|
clearAll()
|
||||||
}
|
}
|
||||||
.setNegativeButton(getString(R.string.no)) { dialog , _ ->
|
.setNegativeButton(getString(R.string.no)) { dialog, _ ->
|
||||||
dialog.cancel()
|
dialog.cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.create().show()
|
builder.create().show()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_undo ->
|
R.id.action_undo -> {
|
||||||
{
|
|
||||||
undoLastRound()
|
undoLastRound()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_theme ->
|
R.id.action_theme -> {
|
||||||
{
|
|
||||||
chooseThemeDialog()
|
chooseThemeDialog()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_language ->
|
R.id.action_language -> {
|
||||||
{
|
|
||||||
chooseLanguageDialog()
|
chooseLanguageDialog()
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.action_screenOn ->
|
R.id.action_screenOn -> {
|
||||||
{
|
item.isChecked = !item.isChecked
|
||||||
item.isChecked=!item.isChecked
|
|
||||||
keepScreenOn(item.isChecked)
|
keepScreenOn(item.isChecked)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
@@ -449,92 +382,79 @@ class MainActivity : AppCompatActivity()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun hideKeyboard()
|
private fun hideKeyboard() {
|
||||||
{
|
val imm: InputMethodManager =
|
||||||
val imm: InputMethodManager=
|
|
||||||
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
|
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
imm.hideSoftInputFromWindow(currentFocus!!.windowToken , 0)
|
imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun giveFocusToAIfNone()
|
private fun giveFocusToAIfNone() {
|
||||||
{
|
if (!binding.contentMain.inputTeamA.isFocused && !binding.contentMain.inputTeamB.isFocused) {
|
||||||
if (!binding.contentMain.inputTeamA.isFocused && !binding.contentMain.inputTeamB.isFocused)
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.requestFocus()
|
binding.contentMain.inputTeamA.requestFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun undoLastRound()
|
private fun undoLastRound() {
|
||||||
{
|
|
||||||
history.revertLastRound()
|
history.revertLastRound()
|
||||||
updateView()
|
updateView()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateView()
|
private fun updateView() {
|
||||||
{
|
binding.contentMain.scoreA.text = history.getScoreA().toString()
|
||||||
binding.contentMain.scoreA.text=history.getScoreA().toString()
|
binding.contentMain.scoreB.text = history.getScoreB().toString()
|
||||||
binding.contentMain.scoreB.text=history.getScoreB().toString()
|
|
||||||
|
|
||||||
binding.contentMain.historyA.text=history.getHistoryA()
|
binding.contentMain.historyA.text = history.getHistoryA()
|
||||||
binding.contentMain.historyB.text=history.getHistoryB()
|
binding.contentMain.historyB.text = history.getHistoryB()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun clearAll()
|
private fun clearAll() {
|
||||||
{
|
binding.contentMain.historyA.text = ""
|
||||||
binding.contentMain.historyA.text=""
|
binding.contentMain.historyB.text = ""
|
||||||
binding.contentMain.historyB.text=""
|
|
||||||
binding.contentMain.inputTeamA.text.clear()
|
binding.contentMain.inputTeamA.text.clear()
|
||||||
binding.contentMain.inputTeamB.text.clear()
|
binding.contentMain.inputTeamB.text.clear()
|
||||||
binding.contentMain.scoreA.text="0"
|
binding.contentMain.scoreA.text = "0"
|
||||||
binding.contentMain.scoreB.text="0"
|
binding.contentMain.scoreB.text = "0"
|
||||||
|
|
||||||
history.clearAll()
|
history.clearAll()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun appendToFocusedInput(toAppend: Char)
|
private fun appendToFocusedInput(toAppend: Char) {
|
||||||
{
|
if (binding.contentMain.inputTeamA.isFocused) {
|
||||||
if (binding.contentMain.inputTeamA.isFocused)
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamA.text.append(toAppend)
|
binding.contentMain.inputTeamA.text.append(toAppend)
|
||||||
}
|
} else if (binding.contentMain.inputTeamB.isFocused) {
|
||||||
else if (binding.contentMain.inputTeamB.isFocused)
|
|
||||||
{
|
|
||||||
binding.contentMain.inputTeamB.text.append(toAppend)
|
binding.contentMain.inputTeamB.text.append(toAppend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun enableSubmitButton()
|
private fun enableSubmitButton() {
|
||||||
{
|
binding.contentMain.submit.imageAlpha = 255 // 0 being transparent and 255 being opaque
|
||||||
binding.contentMain.submit.imageAlpha=255 // 0 being transparent and 255 being opaque
|
binding.contentMain.submit.isEnabled = true
|
||||||
binding.contentMain.submit.isEnabled=true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun disableSubmitButton()
|
private fun disableSubmitButton() {
|
||||||
{
|
binding.contentMain.submit.imageAlpha = 60 // 0 being transparent and 255 being opaque
|
||||||
binding.contentMain.submit.imageAlpha=60 // 0 being transparent and 255 being opaque
|
binding.contentMain.submit.isEnabled = false
|
||||||
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))
|
builder.setTitle(getString(R.string.choose_theme_text))
|
||||||
val styles=arrayOf(
|
val styles = arrayOf(
|
||||||
getString(R.string.light) ,
|
getString(R.string.light),
|
||||||
getString(R.string.dark) ,
|
getString(R.string.dark),
|
||||||
getString(R.string.android_default_text)
|
getString(R.string.android_default_text)
|
||||||
)
|
)
|
||||||
|
|
||||||
val checkedItem=
|
val checkedItem =
|
||||||
this.getSharedPreferences("Settings" , MODE_PRIVATE).getInt("Theme" , 2)
|
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()
|
prefs.apply()
|
||||||
|
|
||||||
updateTheme(which)
|
updateTheme(which)
|
||||||
@@ -542,53 +462,49 @@ class MainActivity : AppCompatActivity()
|
|||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
val dialog=builder.create()
|
val dialog = builder.create()
|
||||||
dialog.show()
|
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))
|
builder.setTitle(getString(R.string.choose_language_text))
|
||||||
|
|
||||||
val languages_map=mapOf(
|
val languagesMap = mapOf(
|
||||||
getString(R.string.english) to "en" ,
|
getString(R.string.english) to "en",
|
||||||
getString(R.string.german) to "de"
|
getString(R.string.german) to "de"
|
||||||
)
|
)
|
||||||
|
|
||||||
val languages_display_keys=languages_map.keys.toTypedArray()
|
val languagesDisplayKeys = languagesMap.keys.toTypedArray()
|
||||||
val languages_display_values=languages_map.values.toTypedArray()
|
val languagesDisplayValues = languagesMap.values.toTypedArray()
|
||||||
|
|
||||||
val checkedItem=AppCompatDelegate.getApplicationLocales()[0].toString()
|
val checkedItem = AppCompatDelegate.getApplicationLocales()[0].toString()
|
||||||
var checkedItemIndex=languages_display_values.indexOf(checkedItem)
|
var checkedItemIndex = languagesDisplayValues.indexOf(checkedItem)
|
||||||
|
|
||||||
if (checkedItemIndex == -1)
|
if (checkedItemIndex == -1) {
|
||||||
{
|
checkedItemIndex = 0
|
||||||
checkedItemIndex=0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
builder.setSingleChoiceItems(languages_display_keys , checkedItemIndex) { dialog , which ->
|
builder.setSingleChoiceItems(languagesDisplayKeys, checkedItemIndex) { dialog, which ->
|
||||||
|
|
||||||
val newLocale=
|
val newLocale =
|
||||||
LocaleListCompat.forLanguageTags(languages_map[languages_display_keys[which]])
|
LocaleListCompat.forLanguageTags(languagesMap[languagesDisplayKeys[which]])
|
||||||
|
|
||||||
AppCompatDelegate.setApplicationLocales(newLocale)
|
AppCompatDelegate.setApplicationLocales(newLocale)
|
||||||
|
|
||||||
startActivity(Intent(this , MainActivity::class.java))
|
startActivity(Intent(this, MainActivity::class.java))
|
||||||
finish()
|
finish()
|
||||||
|
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
val dialog=builder.create()
|
val dialog = builder.create()
|
||||||
dialog.show()
|
dialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateTheme(which: Int)
|
private fun updateTheme(which: Int) {
|
||||||
{
|
when (which) {
|
||||||
when (which)
|
|
||||||
{
|
|
||||||
0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
0 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
|
||||||
1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
|
1 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
|
||||||
2 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
2 -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
|
||||||
@@ -596,19 +512,15 @@ class MainActivity : AppCompatActivity()
|
|||||||
delegate.applyDayNight()
|
delegate.applyDayNight()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun keepScreenOn(keepOn: Boolean)
|
private fun keepScreenOn(keepOn: Boolean) {
|
||||||
{
|
if (keepOn) {
|
||||||
if (keepOn)
|
|
||||||
{
|
|
||||||
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||||
}
|
}
|
||||||
|
|
||||||
val prefs=this.getSharedPreferences("Settings" , MODE_PRIVATE).edit()
|
val prefs = this.getSharedPreferences("Settings", MODE_PRIVATE).edit()
|
||||||
prefs.putBoolean("Screen_On" , keepOn)
|
prefs.putBoolean("Screen_On", keepOn)
|
||||||
prefs.apply()
|
prefs.apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -269,12 +269,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
android:contentDescription="TODO"
|
||||||
android:cropToPadding="false"
|
android:cropToPadding="false"
|
||||||
android:paddingTop="15dp"
|
android:paddingTop="15dp"
|
||||||
android:paddingBottom="15dp"
|
android:paddingBottom="15dp"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
app:srcCompat="@drawable/back"
|
app:srcCompat="@drawable/back" />
|
||||||
android:contentDescription="TODO" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -312,9 +312,9 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1.0"
|
android:layout_weight="1.0"
|
||||||
|
android:contentDescription="TODO"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
app:srcCompat="@drawable/checkmark"
|
app:srcCompat="@drawable/checkmark" />
|
||||||
android:contentDescription="TODO" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context=".MainActivity">
|
tools:context=".viewModel.MainActivity">
|
||||||
|
|
||||||
<com.google.android.material.appbar.AppBarLayout
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@@ -285,12 +285,12 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
android:contentDescription="@string/back"
|
||||||
android:cropToPadding="false"
|
android:cropToPadding="false"
|
||||||
android:paddingTop="15dp"
|
android:paddingTop="15dp"
|
||||||
android:paddingBottom="15dp"
|
android:paddingBottom="15dp"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
app:srcCompat="@drawable/back"
|
app:srcCompat="@drawable/back" />
|
||||||
android:contentDescription="@string/back" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@@ -331,8 +331,8 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1.0"
|
android:layout_weight="1.0"
|
||||||
|
android:contentDescription="TODO"
|
||||||
android:scaleType="fitCenter"
|
android:scaleType="fitCenter"
|
||||||
app:srcCompat="@drawable/checkmark"
|
app:srcCompat="@drawable/checkmark" />
|
||||||
android:contentDescription="TODO" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
tools:context="me.zobrist.tichucounter.MainActivity">
|
tools:context="me.zobrist.tichucounter.viewModel.MainActivity">
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_undo"
|
android:id="@+id/action_undo"
|
||||||
android:icon="@android:drawable/ic_menu_revert"
|
android:icon="@android:drawable/ic_menu_revert"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@color/ic_launcher_background" />
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/ic_launcher_background"/>
|
<background android:drawable="@color/ic_launcher_background" />
|
||||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
<foreground android:drawable="@mipmap/ic_launcher_foreground" />
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
|
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<locale android:name="en"/>
|
<locale android:name="en" />
|
||||||
<locale android:name="de"/>
|
<locale android:name="de" />
|
||||||
</locale-config>
|
</locale-config>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package me.zobrist.tichucounter
|
package me.zobrist.tichucounter
|
||||||
|
|
||||||
|
import me.zobrist.tichucounter.domain.History
|
||||||
|
import me.zobrist.tichucounter.domain.Round
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Assert.assertNotEquals
|
import org.junit.Assert.assertNotEquals
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -9,12 +11,10 @@ import org.junit.Test
|
|||||||
*
|
*
|
||||||
* See [testing documentation](http://d.android.com/tools/testing).
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
*/
|
*/
|
||||||
class HistoryUnitTest
|
class HistoryUnitTest {
|
||||||
{
|
|
||||||
@Test
|
@Test
|
||||||
fun calculation_isCorrect()
|
fun calculation_isCorrect() {
|
||||||
{
|
val history = History()
|
||||||
val history=History()
|
|
||||||
|
|
||||||
history.revertLastRound()
|
history.revertLastRound()
|
||||||
history.getHistoryA()
|
history.getHistoryA()
|
||||||
@@ -22,34 +22,34 @@ class HistoryUnitTest
|
|||||||
history.getScoreA()
|
history.getScoreA()
|
||||||
history.getScoreB()
|
history.getScoreB()
|
||||||
|
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
history.logRound(Round(10 , 10))
|
history.logRound(Round(10, 10))
|
||||||
|
|
||||||
assertEquals(100 , history.getScoreA())
|
assertEquals(100, history.getScoreA())
|
||||||
assertEquals(100 , history.getScoreB())
|
assertEquals(100, history.getScoreB())
|
||||||
|
|
||||||
history.revertLastRound()
|
history.revertLastRound()
|
||||||
|
|
||||||
assertEquals(90 , history.getScoreA())
|
assertEquals(90, history.getScoreA())
|
||||||
assertEquals(90 , history.getScoreB())
|
assertEquals(90, history.getScoreB())
|
||||||
|
|
||||||
assertNotEquals("" , history.getHistoryA())
|
assertNotEquals("", history.getHistoryA())
|
||||||
assertNotEquals("" , history.getHistoryB())
|
assertNotEquals("", history.getHistoryB())
|
||||||
|
|
||||||
history.clearAll()
|
history.clearAll()
|
||||||
assertEquals(0 , history.getScoreA())
|
assertEquals(0, history.getScoreA())
|
||||||
assertEquals(0 , history.getScoreB())
|
assertEquals(0, history.getScoreB())
|
||||||
|
|
||||||
|
|
||||||
assertEquals("" , history.getHistoryA())
|
assertEquals("", history.getHistoryA())
|
||||||
assertEquals("" , history.getHistoryB())
|
assertEquals("", history.getHistoryB())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package me.zobrist.tichucounter
|
package me.zobrist.tichucounter
|
||||||
|
|
||||||
|
import me.zobrist.tichucounter.domain.Round
|
||||||
import org.junit.Assert.*
|
import org.junit.Assert.*
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
@@ -8,70 +9,67 @@ import org.junit.Test
|
|||||||
*
|
*
|
||||||
* See [testing documentation](http://d.android.com/tools/testing).
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
*/
|
*/
|
||||||
class RoundUnitTest
|
class RoundUnitTest {
|
||||||
{
|
|
||||||
@Test
|
@Test
|
||||||
fun calculation_isCorrect()
|
fun calculation_isCorrect() {
|
||||||
{
|
|
||||||
|
|
||||||
var inputScoreA=125
|
var inputScoreA = 125
|
||||||
var inputScoreB=-25
|
var inputScoreB = -25
|
||||||
var temp: Round
|
var temp: Round
|
||||||
|
|
||||||
// Normal round range -25 to 125 as input
|
// Normal round range -25 to 125 as input
|
||||||
while (inputScoreB <= 125)
|
while (inputScoreB <= 125) {
|
||||||
{
|
temp = Round(inputScoreA, true)
|
||||||
temp=Round(inputScoreA , true)
|
assertEquals(inputScoreB, temp.scoreB)
|
||||||
assertEquals(inputScoreB , temp.scoreB)
|
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(inputScoreA , false)
|
temp = Round(inputScoreA, false)
|
||||||
assertEquals(inputScoreB , temp.scoreA)
|
assertEquals(inputScoreB, temp.scoreA)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
inputScoreA-=5
|
inputScoreA -= 5
|
||||||
inputScoreB+=5
|
inputScoreB += 5
|
||||||
}
|
}
|
||||||
|
|
||||||
// Double win
|
// Double win
|
||||||
temp=Round(200 , true)
|
temp = Round(200, true)
|
||||||
assertEquals(0 , temp.scoreB)
|
assertEquals(0, temp.scoreB)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(200 , false)
|
temp = Round(200, false)
|
||||||
assertEquals(0 , temp.scoreA)
|
assertEquals(0, temp.scoreA)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
// Double win with Tichu
|
// Double win with Tichu
|
||||||
temp=Round(300 , true)
|
temp = Round(300, true)
|
||||||
assertEquals(0 , temp.scoreB)
|
assertEquals(0, temp.scoreB)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(300 , false)
|
temp = Round(300, false)
|
||||||
assertEquals(0 , temp.scoreA)
|
assertEquals(0, temp.scoreA)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
// Double win with Grand Tichu
|
// Double win with Grand Tichu
|
||||||
temp=Round(400 , true)
|
temp = Round(400, true)
|
||||||
assertEquals(0 , temp.scoreB)
|
assertEquals(0, temp.scoreB)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(400 , false)
|
temp = Round(400, false)
|
||||||
assertEquals(0 , temp.scoreA)
|
assertEquals(0, temp.scoreA)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
//Good rounds
|
//Good rounds
|
||||||
temp=Round(0 , 0)
|
temp = Round(0, 0)
|
||||||
assertTrue(temp.isValidRound())
|
assertTrue(temp.isValidRound())
|
||||||
|
|
||||||
//Bad rounds
|
//Bad rounds
|
||||||
temp=Round(5 , 12)
|
temp = Round(5, 12)
|
||||||
assertFalse(temp.isValidRound())
|
assertFalse(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(12 , 5)
|
temp = Round(12, 5)
|
||||||
assertFalse(temp.isValidRound())
|
assertFalse(temp.isValidRound())
|
||||||
|
|
||||||
temp=Round(5 , 55)
|
temp = Round(5, 55)
|
||||||
assertFalse(temp.isValidRound())
|
assertFalse(temp.isValidRound())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,10 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id 'com.google.dagger.hilt.android' version '2.44' apply false
|
||||||
|
}
|
||||||
|
|
||||||
allprojects {
|
allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
|
|||||||
Reference in New Issue
Block a user