Skip to content
Snippets Groups Projects

Resolve "Notification on alarm set"

Merged Shonn Li requested to merge 9-notification into master
6 files
+ 136
32
Compare changes
  • Side-by-side
  • Inline
Files
6
package com.noteapplication.cs398
import android.Manifest
import android.app.AlertDialog
import android.app.DatePickerDialog
import android.app.TimePickerDialog
import android.annotation.TargetApi
import android.app.*
import android.content.BroadcastReceiver
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Rect
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.view.View
import android.widget.DatePicker
import android.widget.TextView
import android.widget.TimePicker
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.core.view.isGone
import androidx.fragment.app.DialogFragment
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.RecyclerView
import com.noteapplication.cs398.database.Folder
import com.noteapplication.cs398.database.Note
import com.noteapplication.cs398.database.Tag
import com.noteapplication.cs398.databinding.ActivityAddNoteBinding
import java.util.*
import java.io.InputStream
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.*
//class MainActivity : AppCompatActivity(), TimePickerDialog.OnTimeSetListener {
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
// val button: Button = findViewById<View>(R.id.button) as Button
// button.setOnClickListener(View.OnClickListener {
// val timePicker: DialogFragment = TimePickerFragment()
// timePicker.show(supportFragmentManager, "time picker")
// })
// }
//
// override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
// val textView: TextView = findViewById<View>(R.id.textView) as TextView
// textView.setText("Hour: $hourOfDay Minute: $minute")
// }
//}
class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
private lateinit var binding: ActivityAddNoteBinding
private lateinit var noteViewModel: NoteViewModel
private lateinit var tagViewModel: TagViewModel
private var title: String = ""
private var content: String = ""
var title: String = ""
var content: String = ""
private var todo: Boolean = false
private var oldNote: Note? = null
@@ -121,6 +107,10 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
val newNote: Note
calendar.set(recorded_year, recorded_month, recorded_day, recorded_hour, recorded_minute)
title = binding.titleInput.text.toString()
content = binding.contentInput.text.toString()
println("title: $title")
println("content: $content")
if (oldNote != null) {
newNote = oldNote!!.copy(
title = binding.titleInput.text.toString(),
@@ -129,6 +119,13 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
notifyAt = calendar.time.time,
updatedAt = Date().time
)
if (((calendar.time != Date(oldNote!!.notifyAt)) && binding.idRmdSwitch.isChecked)||
(oldNote!!.title != title) || (oldNote!!.content != content)) {
cancelAlarm()
startAlarm(calendar)
} else if (oldNote!!.notify && !binding.idRmdSwitch.isChecked){
cancelAlarm()
}
noteViewModel.updateNote(newNote, tagViewModel.getSelectedTags())
} else {
newNote = Note(
@@ -136,8 +133,12 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
binding.contentInput.text.toString(),
binding.idRmdSwitch.isChecked,
notifyAt = calendar.time.time,
createdAt = calendar.time.time,
folderId = folder?.id // the note does not goes to any folder for now
)
if (binding.idRmdSwitch.isChecked) {
startAlarm(calendar)
}
noteViewModel.insertNote(newNote, tagViewModel.getSelectedTags())
}
@@ -173,6 +174,7 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
recorded_hour = calendar.get(Calendar.HOUR_OF_DAY)
recorded_minute = calendar.get(Calendar.MINUTE)
}
calendar.set(Calendar.SECOND, 0)
// time setter
val current = LocalDateTime.now()
var formatted = current.format(DateTimeFormatter.BASIC_ISO_DATE)
@@ -183,10 +185,12 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
"" + (if (recorded_hour % 12 < 10) "0" else "") + recorded_hour % 12 + ":" + (if (recorded_minute < 10) "0" else "") + recorded_minute + " " + if (recorded_hour / 12 > 0) "PM" else "AM"
binding.timeInput.text = time
println("year: $recorded_year, month: $recorded_month, day: $recorded_day, hour:$recorded_hour, minute:$recorded_minute")
binding.dateInput.setOnClickListener() {
println("year: $recorded_year, month: $recorded_month, day: $recorded_day, hour:$recorded_hour, minute:$recorded_minute")
DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, this, recorded_year, recorded_month, recorded_day).show()
}
binding.timeInput.setOnClickListener {
println("year: $recorded_year, month: $recorded_month, day: $recorded_day, hour:$recorded_hour, minute:$recorded_minute")
TimePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, this, recorded_hour, recorded_minute, false).show()
@@ -216,7 +220,7 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION && grantResults.isNotEmpty()) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
selectImage();
selectImage()
} else {
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
}
@@ -258,4 +262,34 @@ class AddNoteActivity : AppCompatActivity(), DatePickerDialog.OnDateSetListener,
Toast.makeText(this, exception.message, Toast.LENGTH_SHORT).show()
}
}
}
\ No newline at end of file
private fun startAlarm(c: Calendar) {
var id:Int = calendar.time.time.toInt()
if (oldNote != null) {
id = oldNote!!.createdAt.toInt()
}
val alarmManager: AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(this, AlertReceiver::class.java)
intent.putExtra("title", title)
intent.putExtra("content", content)
intent.putExtra("id", id)
Toast.makeText(this, "title: $title, content:$content", Toast.LENGTH_SHORT).show()
val pendingIntent =
PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT)
if (c.before(Calendar.getInstance())) {
return
}
alarmManager.setExact(AlarmManager.RTC_WAKEUP, c.timeInMillis, pendingIntent)
}
private fun cancelAlarm() {
val alarmManager: AlarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager
Toast.makeText(this, "delted: $title", Toast.LENGTH_SHORT).show()
val intent = Intent(this, AlertReceiver::class.java)
val pendingIntent: PendingIntent = PendingIntent.getBroadcast(this, oldNote!!.createdAt.toInt(), intent, PendingIntent.FLAG_MUTABLE)
alarmManager.cancel(pendingIntent)
// mTextView.setText("Alarm canceled")
}
}
Loading