Skip to content

Instantly share code, notes, and snippets.

@WakkyFree
Created February 21, 2021 03:51
with picture
package com.example.cupnoodletimer
import android.content.Context
import android.media.AudioAttributes
import android.media.AudioManager
import android.media.SoundPool
import android.os.*
import android.view.View
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
val TIMERTIME: Long = 180000;
lateinit var timerText: TextView
lateinit var timer: CountDownTimer
var isRunning: Boolean = false;
lateinit var soundPool: SoundPool
var soundAlarm = 0
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val startButton: Button = findViewById(R.id.buttonStart)
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build()
soundPool = SoundPool.Builder()
.setAudioAttributes(audioAttributes)
.setMaxStreams(1)
.build()
val imageView = findViewById<ImageView>(R.id.imageView)
imageView.setImageResource(R.drawable.cup_ramen)
imageView.visibility = View.INVISIBLE
startButton.setOnClickListener {
if (isRunning) {
timer.cancel()
setTime(TIMERTIME)
isRunning = false
startButton.text = "START"
imageView.visibility = View.INVISIBLE
} else {
soundAlarm = soundPool.load(this, R.raw.alarm, 1)
timer = object : CountDownTimer(TIMERTIME, 1000) {
override fun onTick(millisUntilFinished: Long) {
setTime(millisUntilFinished)
}
override fun onFinish() {
setTime(0)
isRunning = false
startButton.text = "RESTART"
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
val vibrationEffect = VibrationEffect.createOneShot(5000, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(vibrationEffect)
} else {
vibrator.vibrate(5000)
}
val am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val alarmVol: Float = am.getStreamVolume(AudioManager.STREAM_RING).toFloat()
var alarmMaxVol: Float = am.getStreamMaxVolume(AudioManager.STREAM_RING).toFloat()
var setVol: Float = (alarmVol / alarmMaxVol).toFloat()
soundPool.play(soundAlarm, setVol, setVol, 0, 0, 1.0f)
imageView.visibility = View.VISIBLE
}
}
timer.start()
isRunning = true
startButton.text = "RESET"
imageView.visibility = View.INVISIBLE
}
}
}
private fun setTime(t: Long) {
timerText = findViewById(R.id.textViewTime)
var time: Long = t
var minutes: Long = (time / 1000) / 60
var seconds: Long = (time / 1000) % 60
timerText.setText("%d:%02d".format(minutes, seconds))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment