Untitled
unknown
plain_text
10 months ago
7.2 kB
1
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