https://codinginflow.com/tutorials/android/countdowntimer/part-3-run-in-background
I am watching this tutorial, i want to change some things : I want to display a message "Time Out" after 6 seconds, by using CountDownTimer. It works when i am in TimerActivity, but when i go to another activity (such as WelcomeActivity), then the application do not display the message. How to achieve the message "Time Out" in the WelcomeActivity ?
TimerActivity
class TimerActivity : AppCompatActivity() {
companion object {
var START_TIME_IN_MILLIS : Long = 6000
}
private var mTextViewCountDown: TextView? = null
private var mButtonStartPause: Button? = null
private var mButtonReset: Button? = null
private var mCountDownTimer: CountDownTimer? = null
private var mTimerRunning: Boolean = false
private var mTimeLeftInMillis : Long =0
private var mEndTime : Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_timer)
mTextViewCountDown = findViewById(R.id.text_view_countdown)
mButtonStartPause = findViewById(R.id.button_start_pause)
mButtonReset = findViewById(R.id.button_reset)
btnWelcomeAct.setOnClickListener {
val intent = Intent(this@TimerActivity, Welcome::class.java)
startActivity(intent)
}
mButtonStartPause!!.setOnClickListener {
if (mTimerRunning) {
pauseTimer()
} else {
startTimer()
}
}
mButtonReset!!.setOnClickListener {
resetTimer()
}
updateCountDownText()
}
private fun startTimer() {
mEndTime = System.currentTimeMillis() + mTimeLeftInMillis
mCountDownTimer = object : CountDownTimer(mTimeLeftInMillis, 1000) {
override fun onTick(millisUntilFinished: Long) {
mTimeLeftInMillis = millisUntilFinished
updateCountDownText()
}
override fun onFinish() {
mTimerRunning = false
updateButton()
Toast.makeText(applicationContext,"Time out", Toast.LENGTH_SHORT).show()
}
}.start()
mTimerRunning = true
updateButton()
}
private fun pauseTimer() {
mCountDownTimer!!.cancel()
mTimerRunning = false
updateButton()
}
private fun resetTimer() {
mTimeLeftInMillis = START_TIME_IN_MILLIS
updateCountDownText()
updateButton()
}
private fun updateCountDownText() {
val minutes = mTimeLeftInMillis / 1000 / 60
val seconds = mTimeLeftInMillis / 1000 % 60
val timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds)
mTextViewCountDown!!.text = (timeLeftFormatted)
}
private fun updateButton() {
if (mTimerRunning) {
mButtonReset!!.setVisibility(View.INVISIBLE)
mButtonStartPause!!.setText("Pause")
} else {
mButtonStartPause!!.setText("Start")
if (mTimeLeftInMillis < 1000) {
mButtonStartPause!!.setVisibility(View.INVISIBLE)
} else {
mButtonStartPause!!.setVisibility(View.VISIBLE)
}
if (mTimeLeftInMillis < START_TIME_IN_MILLIS) {
mButtonReset!!.setVisibility(View.VISIBLE)
} else {
mButtonReset!!.setVisibility(View.INVISIBLE)
}
}
}
override fun onStop() {
super.onStop()
val prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE)
val editor = prefs.edit()
editor.putLong("millisLeft", mTimeLeftInMillis)
editor.putBoolean("timerRunning", mTimerRunning)
editor.putLong("endTime", mEndTime)
editor.apply()
if (mCountDownTimer != null) {
mCountDownTimer!!.cancel()
}
}
override fun onStart() {
super.onStart()
val prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE)
mTimeLeftInMillis = prefs.getLong("millisLeft", START_TIME_IN_MILLIS)
mTimerRunning = prefs.getBoolean("timerRunning", false)
updateCountDownText()
updateButton()
if (mTimerRunning) {
mEndTime = prefs.getLong("endTime", 0)
mTimeLeftInMillis = (mEndTime - System.currentTimeMillis())
if (mTimeLeftInMillis < 0) {
mTimeLeftInMillis = 0
mTimerRunning = false
updateCountDownText()
updateButton()
} else {
startTimer()
}
}
}
override fun onBackPressed() {
val intent = Intent(this@TimerActivity, Welcome::class.java)
startActivity(intent)
}
}
Class WelcomeActivity
How to display the message "Time Out" in this activiy when CountDownTimer in TimerActivity finished?
class Welcome : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_welcome)
}