conventionschedule-android/app/src/main/java/com/adlerosn/brasilfurfest/CountdownActivity.kt

99 lines
3.4 KiB
Kotlin
Raw Normal View History

2018-07-27 03:39:36 +00:00
package com.adlerosn.brasilfurfest
import android.content.Context
import android.os.Bundle
2018-12-12 04:30:34 +00:00
import android.os.PowerManager
import androidx.appcompat.app.AppCompatActivity
2018-07-27 03:39:36 +00:00
import android.view.View
2018-12-28 00:28:48 +00:00
import com.adlerosn.brasilfurfest.helper.getString
import com.adlerosn.brasilfurfest.helper.resourcesAliased
import com.adlerosn.brasilfurfest.helper.uiThreadWithLogger
2018-07-27 03:39:36 +00:00
import kotlinx.android.synthetic.main.activity_countdown.*
import org.jetbrains.anko.doAsync
import java.util.*
class CountdownActivity : AppCompatActivity() {
2018-12-28 00:28:48 +00:00
private var screenOn = true
private lateinit var pm: PowerManager
private val now get() = System.currentTimeMillis()
private var objective = now
private var finishesAt : Long? = null
private lateinit var timer: Timer
2018-07-27 03:39:36 +00:00
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_countdown)
2018-12-28 00:28:48 +00:00
resourcesAliased = this.resources
2018-07-30 23:22:32 +00:00
batteryWarning.visibility = View.GONE
2018-07-27 03:39:36 +00:00
pm = getSystemService(Context.POWER_SERVICE) as PowerManager
countdownTitle.text = intent.getStringExtra("label") ?: ""
objective = intent.getLongExtra("counter", objective)
2018-07-27 20:24:09 +00:00
finishesAt = intent.getLongExtra("finishesAt", -1).let { if (it<0) null else it }
2018-07-27 03:39:36 +00:00
screenOn = pm.isInteractive
timer = Timer()
updateTime()
timerScreen()
}
private fun timerScreen(){
timer.cancel()
timer.purge()
timer = Timer()
doAsync {
timer.scheduleAtFixedRate(
object : TimerTask() {
override fun run() {
2018-12-28 00:28:48 +00:00
uiThreadWithLogger {
updateTime()
2018-07-27 03:39:36 +00:00
}
}
},
1,
2018-12-12 04:30:34 +00:00
1000.toLong()
2018-07-27 03:39:36 +00:00
)
}
}
private fun updateTime(){
val remaining = objective-now
if ( remaining >= 0 ) {
2018-07-27 20:24:09 +00:00
countdownData.text = countdownString(remaining)
2018-12-28 00:28:48 +00:00
countdownLabel.text = R.string.until_it_starts.getString()
2018-07-27 20:24:09 +00:00
countdownData.visibility = View.VISIBLE
countdownLabel.visibility = View.VISIBLE
2018-07-27 03:39:36 +00:00
} else {
2018-12-12 04:30:34 +00:00
val finishes = finishesAt?.let { it-now }
if ( (finishes != null) && (finishes >= 0)) {
countdownData.text = countdownString(finishes)
2018-12-28 00:28:48 +00:00
countdownLabel.text = R.string.until_it_ends.getString()
2018-07-27 03:39:36 +00:00
countdownData.visibility = View.VISIBLE
2018-07-27 20:24:09 +00:00
countdownLabel.visibility = View.VISIBLE
} else {
2018-12-28 00:28:48 +00:00
countdownData.text = R.string.already_finished.getString()
2018-12-12 04:30:34 +00:00
countdownData.visibility = View.VISIBLE
countdownLabel.visibility = View.INVISIBLE
2018-07-27 20:24:09 +00:00
}
2018-07-27 03:39:36 +00:00
}
if (pm.isInteractive != screenOn) {
screenOn = pm.isInteractive
timerScreen()
}
}
2018-07-27 20:24:09 +00:00
private fun countdownString(remaining: Long): String {
2018-07-30 23:22:32 +00:00
val (_, s, m, h, d) = countdownSplitter(remaining)
return "%dd %02dh %02dm %02ds"// %03dms"
.format(d, h, m, s)//, ms)
2018-07-27 20:24:09 +00:00
}
private fun countdownSplitter(remaining: Long) = listOf(
remaining%1000,
(remaining/(1000))%60,
(remaining/(60*1000))%60,
(remaining/(3600*1000))%24,
remaining/(24*3600*1000)
)
2018-07-27 03:39:36 +00:00
}