Untitled
unknown
plain_text
2 years ago
7.2 kB
4
Indexable
package com.example.alarmclock.utils
import android.annotation.SuppressLint
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Parcel
import android.os.Parcelable
import android.util.Log
import android.widget.TextView
import android.widget.Toast
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.FRIDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.MONDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.RECURRING
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.SATURDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.SUNDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.THURSDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.TITLE
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.TUESDAY
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.VIBRATION
import com.example.alarmclock.broadcastreceiver.AlarmBroadcastReceiver.Companion.WEDNESDAY
import java.util.*
@Entity(tableName = "alarm_table")
class Alarm(
var hour: Int,
var minute: Int,
var title: String?,
var created: Long,
var isStarted: Boolean,
var isRecurring: Boolean,
var isVibration: Boolean,
var isMonday: Boolean,
var isTuesday: Boolean,
var isWednesday: Boolean,
var isThursday: Boolean,
var isFriday: Boolean,
var isSaturday: Boolean,
var isSunday: Boolean
) : Parcelable {
@PrimaryKey(autoGenerate = true)
var alarmId: Int = 0
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readInt(),
parcel.readString(),
parcel.readLong(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte(),
parcel.readByte() != 0.toByte()
) {
alarmId = parcel.readInt()
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(hour)
parcel.writeInt(minute)
parcel.writeString(title)
parcel.writeLong(created)
parcel.writeByte(if (isStarted) 1 else 0)
parcel.writeByte(if (isRecurring) 1 else 0)
parcel.writeByte(if (isVibration) 1 else 0)
parcel.writeByte(if (isMonday) 1 else 0)
parcel.writeByte(if (isTuesday) 1 else 0)
parcel.writeByte(if (isWednesday) 1 else 0)
parcel.writeByte(if (isThursday) 1 else 0)
parcel.writeByte(if (isFriday) 1 else 0)
parcel.writeByte(if (isSaturday) 1 else 0)
parcel.writeByte(if (isSunday) 1 else 0)
parcel.writeInt(alarmId)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<Alarm> {
override fun createFromParcel(parcel: Parcel): Alarm {
return Alarm(parcel)
}
override fun newArray(size: Int): Array<Alarm?> {
return arrayOfNulls(size)
}
}
@SuppressLint("DefaultLocale")
fun schedule(context: Context) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmBroadcastReceiver::class.java).apply {
putExtra(RECURRING, isRecurring)
putExtra(MONDAY, isMonday)
putExtra(TUESDAY, isTuesday)
putExtra(WEDNESDAY, isWednesday)
putExtra(THURSDAY, isThursday)
putExtra(FRIDAY, isFriday)
putExtra(SATURDAY, isSaturday)
putExtra(SUNDAY, isSunday)
putExtra(TITLE, title)
putExtra(VIBRATION, isVibration)
}
val alarmPendingIntent = PendingIntent.getBroadcast(context, alarmId, intent, 0)
val calendar = Calendar.getInstance().apply {
timeInMillis = System.currentTimeMillis()
set(Calendar.HOUR_OF_DAY, hour)
set(Calendar.MINUTE, minute)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
if (timeInMillis <= System.currentTimeMillis()) {
set(Calendar.DAY_OF_MONTH, get(Calendar.DAY_OF_MONTH) + 1)
}
}
if (!isRecurring) {
val toastText = try {
String.format(
"Báo thức một lần được lên lịch cho %s lúc %02d:%02d", DayUtil.toDay(
calendar.get(Calendar.DAY_OF_WEEK)
), hour, minute, alarmId
)
} catch (e: Exception) {
e.printStackTrace()
null
}
Toast.makeText(context, toastText, Toast.LENGTH_LONG).show()
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, alarmPendingIntent)
} else {
val toastText = String.format(
"Takrorlanuvchi signal rejalashtirilgan %s ga %02d:%02d",
recurringDaysText, hour, minute, alarmId
)
Toast.makeText(context, toastText, Toast.LENGTH_LONG).show()
val RUN_DAILY = (24 * 60 * 60 * 1000).toLong()
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, RUN_DAILY, alarmPendingIntent)
}
isStarted = true
}
fun cancelAlarm(context: Context) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(context, AlarmBroadcastReceiver::class.java)
val alarmPendingIntent = PendingIntent.getBroadcast(context, alarmId, intent, 0)
alarmManager.cancel(alarmPendingIntent)
isStarted = false
val toastText = String.format("Đã hủy báo thức %02d:%02d", hour, minute)
Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show()
Log.i("Cancel", toastText)
}
val recurringDaysText: String?
get() {
if (!isRecurring) {
return null
}
var days = ""
if (isMonday) {
days += "Thứ Hai "
}
if (isTuesday) {
days += "Thứ Ba "
}
if (isWednesday) {
days += "Thứ Tư "
}
if (isThursday) {
days += "Thứ Năm "
}
if (isFriday) {
days += "Thứ Sáu "
}
if (isSaturday) {
days += "Thứ Bảy "
}
if (isSunday) {
days += "Chủ Nhật "
}
return days
}
}Editor is loading...
Leave a Comment