From 2c07e433e00938e15baf765eb4a672c5cc698fd5 Mon Sep 17 00:00:00 2001 From: Fabian Zobrist Date: Wed, 19 Aug 2020 19:10:34 +0200 Subject: [PATCH] Use new classes --- .../me/zobrist/tichucounter/MainActivity.kt | 188 +++++++++++++----- .../java/me/zobrist/tichucounter/Round.kt | 2 + app/src/main/res/drawable/checkmark.png | Bin 0 -> 9289 bytes app/src/main/res/layout/content_main.xml | 88 ++++---- app/src/main/res/menu/menu_main.xml | 4 + app/src/main/res/values-de/strings.xml | 6 +- app/src/main/res/values-gsw-rCH/strings.xml | 6 +- app/src/main/res/values/strings.xml | 8 +- 8 files changed, 202 insertions(+), 100 deletions(-) create mode 100644 app/src/main/res/drawable/checkmark.png diff --git a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt index c636d1b..ed95624 100644 --- a/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt +++ b/app/src/main/java/me/zobrist/tichucounter/MainActivity.kt @@ -7,135 +7,203 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.widget.doOnTextChanged import kotlinx.android.synthetic.main.content_main.* import android.text.InputType -import kotlinx.coroutines.sync.Mutex +import android.widget.ScrollView class MainActivity : AppCompatActivity() { - var mut = Mutex() - private var listA: List = emptyList() private var listB: List = emptyList() - private var tempCounterTeamA: Int = 0 - private var tempCounterTeamB: Int = 0 private var counterTeamA: Int = 0 private var counterTeamB: Int = 0 + private var invertA: Boolean = false + private var invertB: Boolean = false + + private var updateOnChange: Boolean = true + + private var history = History() + private var currentRound = Round() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setSupportActionBar(findViewById(R.id.toolbar)) inputTeamA.setRawInputType(InputType.TYPE_NULL) inputTeamB.setRawInputType(InputType.TYPE_NULL) + inputTeamA.requestFocus() + disableSubmitButton() inputTeamA.doOnTextChanged { text, start, count, after -> if (inputTeamA.isFocused) { if (inputTeamA.text.isNotEmpty()){ - inputTeamB.setText(updateNumber(text, tempCounterTeamA + tempCounterTeamB)) + if(updateOnChange){ + currentRound = try { + Round(text.toString().toInt(), true) + + } catch (e: java.lang.Exception){ + Round(0, 0) + } + inputTeamB.setText(currentRound.scoreB.toString()) + }else{ + updateOnChange = true + } }else{ inputTeamA.text.clear() inputTeamB.text.clear() } } + + if(currentRound.isValidRound()){ + enableSubmitButton() + }else{ + disableSubmitButton() + } } + + inputTeamB.doOnTextChanged { text, start, count, after -> if (inputTeamB.isFocused) { if (inputTeamB.text.isNotEmpty()){ - inputTeamA.setText(updateNumber(text, tempCounterTeamB + tempCounterTeamA)) + if(updateOnChange){ + currentRound = try { + Round(text.toString().toInt(), false) + + } catch (e: java.lang.Exception){ + Round(0, 0) + } + inputTeamA.setText(currentRound.scoreA.toString()) + + }else{ + updateOnChange = true + } + }else{ inputTeamA.text.clear() inputTeamB.text.clear() } } + + if(currentRound.isValidRound()){ + enableSubmitButton() + }else{ + disableSubmitButton() + } } buttonAdd100.setOnClickListener { if (inputTeamA.isFocused) { - tempCounterTeamA += 100 + val temp = try { inputTeamA.text.toString().toInt() + 100 } catch (e: Exception) { 100 } + updateOnChange = false inputTeamA.setText(temp.toString()) } if (inputTeamB.isFocused) { - tempCounterTeamB += 100 val temp = try { inputTeamB.text.toString().toInt() + 100 } catch (e: Exception) { 100 } + updateOnChange = false inputTeamB.setText(temp.toString()) } } buttonSub100.setOnClickListener { if (inputTeamA.isFocused) { - tempCounterTeamA -= 100 val temp = try { inputTeamA.text.toString().toInt() - 100 } catch (e: Exception) { -100 } + updateOnChange = false inputTeamA.setText(temp.toString()) } if (inputTeamB.isFocused) { - tempCounterTeamB -= 100 val temp = try { inputTeamB.text.toString().toInt() - 100 } catch (e: Exception) { -100 } + updateOnChange = false inputTeamB.setText(temp.toString()) } } button0.setOnClickListener { - appedtoFocusedInput('0') + appendToFocusedInput('0') } button1.setOnClickListener { - appedtoFocusedInput('1') + appendToFocusedInput('1') } button2.setOnClickListener { - appedtoFocusedInput('2') + appendToFocusedInput('2') } button3.setOnClickListener { - appedtoFocusedInput('3') + appendToFocusedInput('3') } button4.setOnClickListener { - appedtoFocusedInput('4') + appendToFocusedInput('4') } button5.setOnClickListener { - appedtoFocusedInput('5') + appendToFocusedInput('5') } button6.setOnClickListener { - appedtoFocusedInput('6') + appendToFocusedInput('6') } button7.setOnClickListener { - appedtoFocusedInput('7') + appendToFocusedInput('7') } button8.setOnClickListener { - appedtoFocusedInput('8') + appendToFocusedInput('8') } button9.setOnClickListener { - appedtoFocusedInput('9') + appendToFocusedInput('9') + } + + buttonInv.setOnClickListener { + var tempInt: Int + + + if(inputTeamA.isFocused ){ + if (inputTeamA.text.isNotEmpty()){ + tempInt = inputTeamA.text.toString().toInt() * -1 + inputTeamA.setText(tempInt.toString()) + }else{ + invertB = false + invertA = true + } + + + }else if(inputTeamB.isFocused) { + if(inputTeamB.text.isNotEmpty()){ + tempInt = inputTeamB.text.toString().toInt() * -1 + inputTeamB.setText(tempInt.toString()) + } else{ + invertA = false + invertB = true + } + } } buttonBack.setOnClickListener{ @@ -153,23 +221,21 @@ class MainActivity : AppCompatActivity() { } } - add.setOnClickListener { + submit.setOnClickListener { if (inputTeamA.text.isNotEmpty() && inputTeamB.text.isNotEmpty()) { - tempCounterTeamA = 0 - tempCounterTeamB = 0 - counterTeamA += inputTeamA.text.toString().toInt() - counterTeamB += inputTeamB.text.toString().toInt() + history.logRound(Round(inputTeamA.text.toString().toInt(), inputTeamB.text.toString().toInt())) - historyA.text = historyA.text.toString().plus(scoreA.text.toString().plus("\n")) - historyB.text = historyB.text.toString().plus(scoreB.text.toString().plus("\n")) - scoreA.text = counterTeamA.toString() - scoreB.text = counterTeamB.toString() + updateView() + inputTeamA.text.clear() inputTeamB.text.clear() + + scrolViewHistory.fullScroll(ScrollView.FOCUS_DOWN) + } } } @@ -186,41 +252,69 @@ class MainActivity : AppCompatActivity() { clearAll() true } + R.id.action_undo -> { + undoLastRound() + true + } else -> super.onOptionsItemSelected(item) } } + private fun undoLastRound(){ + + history.revertLastRound() + updateView() + + } + + private fun updateView() + { + scoreA.text = history.getScoreA().toString() + scoreB.text = history.getScoreB().toString() + + historyA.text = history.getHistoryA() + historyB.text = history.getHistoryB() + } + private fun clearAll() { historyA.text = "" historyB.text = "" inputTeamA.text.clear() inputTeamB.text.clear() - scoreA.text = "" - scoreB.text = "" + scoreA.text = "0" + scoreB.text = "0" + + history.clearAll() } - private fun appedtoFocusedInput(toAppend: Char){ + private fun appendToFocusedInput(toAppend: Char){ if(inputTeamA.isFocused){ + if(invertA){ + invertA = false + inputTeamA.text.append('-') + } + inputTeamA.text.append(toAppend) }else if(inputTeamB.isFocused) { + if(invertB){ + invertB = false + inputTeamB.text.append('-') + } inputTeamB.text.append(toAppend) } + + } - - private fun updateNumber(inputText: CharSequence?, offset: Int): String { - var toSet: Int = 0 - - toSet = try { - 100 - inputText.toString().toInt() - - } catch (e: Exception) { - 0 - } - - toSet += offset - - return "$toSet" + private fun enableSubmitButton() { + submit.imageAlpha = 255 // 0 being transparent and 255 being opaque + submit.isEnabled = true } + + private fun disableSubmitButton(){ + submit.imageAlpha = 60 // 0 being transparent and 255 being opaque + submit.isEnabled = false + } + } \ No newline at end of file diff --git a/app/src/main/java/me/zobrist/tichucounter/Round.kt b/app/src/main/java/me/zobrist/tichucounter/Round.kt index fad6b61..88fc5d4 100644 --- a/app/src/main/java/me/zobrist/tichucounter/Round.kt +++ b/app/src/main/java/me/zobrist/tichucounter/Round.kt @@ -14,6 +14,8 @@ class Round() { } } + constructor(score: String, isScoreA: Boolean): this(score.toInt(), isScoreA) + constructor(scoreA: Int, scoreB: Int) : this() { this.scoreA = scoreA this.scoreB = scoreB diff --git a/app/src/main/res/drawable/checkmark.png b/app/src/main/res/drawable/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..75d22632c8cf040e2e5a19a7e5a339fb66095cb9 GIT binary patch literal 9289 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 + + + + + + + + + app:layout_constraintBottom_toBottomOf="@+id/scrolViewHistory" /> + android:layout_marginTop="16dp" + app:layout_constraintBottom_toTopOf="@+id/Input" + app:layout_constraintTop_toBottomOf="@+id/Score"> - - - - - - - - + android:inputType="numberSigned" /> + android:inputType="numberSigned" /> - + android:layout_weight="1.0" + android:text="+/-" />