EditNoteFragment.kt 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package com.sduduzog.slimlauncher.ui.notes
  2. import android.content.Context
  3. import android.os.Bundle
  4. import android.view.LayoutInflater
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.view.inputmethod.InputMethodManager
  8. import androidx.lifecycle.ViewModelProviders
  9. import androidx.navigation.Navigation
  10. import com.sduduzog.slimlauncher.R
  11. import com.sduduzog.slimlauncher.data.MainViewModel
  12. import com.sduduzog.slimlauncher.data.model.Note
  13. import com.sduduzog.slimlauncher.utils.BaseFragment
  14. import kotlinx.android.synthetic.main.edit_note_fragment.*
  15. import java.security.MessageDigest
  16. import java.util.*
  17. class EditNoteFragment : BaseFragment() {
  18. override fun getFragmentView(): ViewGroup = edit_note_fragment
  19. private lateinit var note: Note
  20. private lateinit var viewModel: MainViewModel
  21. private lateinit var initialDigest: String
  22. override fun onCreate(savedInstanceState: Bundle?) {
  23. super.onCreate(savedInstanceState)
  24. arguments.let {
  25. note = if (it != null && it.containsKey(getString(R.string.nav_key_note))) {
  26. it.get(getString(R.string.nav_key_note)) as Note
  27. } else {
  28. Note("")
  29. }
  30. }
  31. initialDigest = hash(note.title + note.body)
  32. activity?.let {
  33. viewModel = ViewModelProviders.of(it).get(MainViewModel::class.java)
  34. } ?: throw Error("Activity null, something here is fucked up")
  35. }
  36. override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
  37. return inflater.inflate(R.layout.edit_note_fragment, container, false)
  38. }
  39. override fun onActivityCreated(savedInstanceState: Bundle?) {
  40. super.onActivityCreated(savedInstanceState)
  41. if (note.edited == -1L) {
  42. // Wait
  43. } else {
  44. edit_note_fragment_title.setText(note.title.orEmpty())
  45. edit_note_fragment_body.setText(note.body)
  46. }
  47. if (edit_note_fragment_body.requestFocus()) {
  48. val imm = activity!!.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
  49. imm.showSoftInput(edit_note_fragment_title, InputMethodManager.SHOW_IMPLICIT)
  50. }
  51. edit_note_fragment_save.setOnClickListener {
  52. save()?.let {
  53. val bundle = Bundle()
  54. bundle.putSerializable(getString(R.string.nav_key_note), it)
  55. Navigation.findNavController(edit_note_fragment).navigate(R.id.action_editNoteFragment_to_noteFragment, bundle)
  56. }
  57. }
  58. }
  59. private fun hash(input: String): String {
  60. val bytes = input.toByteArray(charset("UTF-8"))
  61. val md = MessageDigest.getInstance("MD5")
  62. md.update(bytes)
  63. return String(md.digest())
  64. }
  65. private fun save(): Note? {
  66. val body = edit_note_fragment_body.text.toString()
  67. val title = edit_note_fragment_title.text.toString()
  68. val newNote = Note(body, Date().time)
  69. newNote.title = title.trim()
  70. newNote.body = body.trim()
  71. newNote.id = note.id
  72. val currentDigest = hash(newNote.title + newNote.body)
  73. if (body.isEmpty()) return null
  74. if (initialDigest == currentDigest) return null
  75. if (note.edited == -1L) viewModel.add(newNote) else viewModel.update(newNote)
  76. return newNote
  77. }
  78. }