I answered your other question, so I have a bit more context :-) Instead of comparing the background colors directly you should store your own State of your app, so that you can control what it is up to, and let the background react accordingly.
enum class State {
ON,
OFF
}
From your GitHub repo, change your loop to update the state:
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
Then use that state to update your UI:
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
And so you can then use the state again to react to a button click:
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
The full example:
import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.foo.*
import kotlinx.coroutines.*
import java.util.concurrent.TimeUnit
import kotlin.random.Random
class FooActivity : AppCompatActivity() {
private var state = State.OFF
private var counter: Int = 0
private var running = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.foo)
val loop = true
GlobalScope.launch(Dispatchers.IO) {
while (loop) {
while (running) {
delay(TimeUnit.SECONDS.toMillis(Random.nextLong(5)))
when (Random.nextBoolean()) {
true -> state = State.ON
false -> state = State.OFF
}
withContext(Dispatchers.Main) {
updateUI()
}
}
}
}
btn_touch.setOnClickListener {
when (state) {
State.ON -> reactOnClickWhenOn()
State.OFF -> reactOnClickWhenOff()
}
}
}
private fun updateUI() {
when (state) {
State.ON -> {
background.setBackgroundColor(Color.GREEN)
}
State.OFF -> {
background.setBackgroundColor(Color.RED)
}
}
}
private fun reactOnClickWhenOn() {
counter += 1
}
private fun reactOnClickWhenOff() {
Toast.makeText(this, "Nope!", Toast.LENGTH_SHORT).show()
}
override fun onResume() {
super.onResume()
running = true
}
override fun onPause() {
running = false
super.onPause()
}
enum class State {
ON,
OFF
}
}