From e7b312eb5e3062ee104fa83bfaa143e314803840 Mon Sep 17 00:00:00 2001 From: Ashish Yadav <48384865+criticalAY@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:12:11 +0530 Subject: [PATCH] fix: nullable getCurrentMultimediaEditableNote --- .../main/java/com/ichi2/anki/NoteEditor.kt | 12 +++---- .../impl/MultimediaEditableNote.kt | 3 ++ .../ichi2/anki/servicelayer/NoteService.kt | 33 +++++++++---------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt index 42fae6f685..c791aef5d6 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt @@ -540,7 +540,7 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su // ImageIntentManager.saveImageUri(imageUri) // the field won't exist so it will always be a new card val note = getCurrentMultimediaEditableNote() - if (note == null) { + if (note.isEmpty) { Timber.w("Note is null, returning") return } @@ -1605,11 +1605,10 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su insertStringInField(getFieldForTest(fieldIndex), newString) } - @KotlinCleanup("fix the requireNoNulls") - private suspend fun getCurrentMultimediaEditableNote(): MultimediaEditableNote? { + private suspend fun getCurrentMultimediaEditableNote(): MultimediaEditableNote { val note = NoteService.createEmptyNote(editorNote!!.notetype) val fields = currentFieldStrings.requireNoNulls() - withCol { NoteService.updateMultimediaNoteFromFields(this@withCol, fields, editorNote!!.mid, note!!) } + withCol { NoteService.updateMultimediaNoteFromFields(this@withCol, fields, editorNote!!.mid, note) } return note } @@ -1773,7 +1772,8 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su private fun handleMultimediaActions(fieldIndex: Int) { // Based on the type of multimedia action received, perform the corresponding operation lifecycleScope.launch { - val note: MultimediaEditableNote = getCurrentMultimediaEditableNote() ?: return@launch + val note: MultimediaEditableNote = getCurrentMultimediaEditableNote() + if (note.isEmpty) return@launch multimediaViewModel.multimediaAction.first { action -> when (action) { @@ -1894,7 +1894,7 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su private fun addMediaFileToField(index: Int, field: IField) { lifecycleScope.launch { val note = getCurrentMultimediaEditableNote() - note?.setField(index, field) + note.setField(index, field) val fieldEditText = editFields!![index] // Import field media diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt index 63906b1362..f03986b266 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/multimediacard/impl/MultimediaEditableNote.kt @@ -105,6 +105,9 @@ class MultimediaEditableNote : IMultimediaEditableNote { return IOUtils.deserialize(IField::class.java, IOUtils.serialize(f!!)) } + val isEmpty: Boolean + get() = fields.isNullOrEmpty() + companion object { private const val serialVersionUID = -6161821367135636659L } diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt index 5aca062bf7..42b81801af 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/servicelayer/NoteService.kt @@ -51,31 +51,30 @@ object NoteService { /** * Creates an empty Note from given Model * - * @param model the model in JSOBObject format - * @return a new note instance + * @param model the model in JSONObject format + * @return a new MultimediaEditableNote instance */ - fun createEmptyNote(model: JSONObject): MultimediaEditableNote? { + fun createEmptyNote(model: JSONObject): MultimediaEditableNote { + val note = MultimediaEditableNote() try { val fieldsArray = model.getJSONArray("flds") val numOfFields = fieldsArray.length() - if (numOfFields > 0) { - val note = MultimediaEditableNote() - note.setNumFields(numOfFields) - for (i in 0 until numOfFields) { - val fieldObject = fieldsArray.getJSONObject(i) - val uiTextField = TextField() - uiTextField.name = fieldObject.getString("name") - uiTextField.text = fieldObject.getString("name") - note.setField(i, uiTextField) + note.setNumFields(numOfFields) + + for (i in 0 until numOfFields) { + val fieldObject = fieldsArray.getJSONObject(i) + val uiTextField = TextField().apply { + name = fieldObject.getString("name") + text = fieldObject.getString("name") } - note.modelId = model.getLong("id") - return note + note.setField(i, uiTextField) } + note.modelId = model.getLong("id") } catch (e: JSONException) { - // TODO Auto-generated catch block - Timber.w(e) + Timber.w(e, "Error parsing model: %s", model) + // Return note with default/empty fields } - return null + return note } fun updateMultimediaNoteFromFields(