diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt index 8a14b79ca7..cea4773b0c 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/FieldEditText.kt @@ -41,8 +41,8 @@ import com.ichi2.anki.preferences.sharedPrefs import com.ichi2.anki.servicelayer.NoteService import com.ichi2.ui.FixedEditText import com.ichi2.utils.ClipboardUtil.IMAGE_MIME_TYPES -import com.ichi2.utils.ClipboardUtil.getImageUri import com.ichi2.utils.ClipboardUtil.getPlainText +import com.ichi2.utils.ClipboardUtil.getUri import com.ichi2.utils.ClipboardUtil.hasImage import com.ichi2.utils.KotlinCleanup import kotlinx.parcelize.Parcelize @@ -55,7 +55,7 @@ class FieldEditText : FixedEditText, NoteService.NoteField { override var ord = 0 private var origBackground: Drawable? = null private var selectionChangeListener: TextSelectionListener? = null - private var imageListener: ImagePasteListener? = null + private var pasteListener: PasteListener? = null @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) var clipboard: ClipboardManager? = null @@ -96,8 +96,8 @@ class FieldEditText : FixedEditText, NoteService.NoteField { setDefaultStyle() } - fun setImagePasteListener(imageListener: ImagePasteListener?) { - this.imageListener = imageListener + fun setPasteListener(pasteListener: PasteListener) { + this.pasteListener = pasteListener } @KotlinCleanup("add extension method to iterate clip items") @@ -113,7 +113,7 @@ class FieldEditText : FixedEditText, NoteService.NoteField { val uriContent = pair.first val remaining = pair.second - if (imageListener == null || uriContent == null) { + if (pasteListener == null || uriContent == null) { return remaining } @@ -127,7 +127,7 @@ class FieldEditText : FixedEditText, NoteService.NoteField { for (i in 0 until clip.itemCount) { val uri = clip.getItemAt(i).uri try { - onImagePaste(uri) + onPaste(uri) } catch (e: Exception) { Timber.w(e) CrashReportService.sendExceptionReport(e, "NoteEditor::onImage") @@ -191,10 +191,10 @@ class FieldEditText : FixedEditText, NoteService.NoteField { } override fun onTextContextMenuItem(id: Int): Boolean { - // This handles both CTRL+V and "Paste" + // The current function is called both by Ctrl+V and pasting from the context menu if (id == android.R.id.paste) { if (hasImage(clipboard)) { - return onImagePaste(getImageUri(clipboard)) + return onPaste(getUri(clipboard)) } return pastePlainText() } @@ -215,11 +215,11 @@ class FieldEditText : FixedEditText, NoteService.NoteField { return false } - private fun onImagePaste(imageUri: Uri?): Boolean { - return if (imageUri == null) { + private fun onPaste(mediaUri: Uri?): Boolean { + return if (mediaUri == null) { false } else { - imageListener!!.onImagePaste(this, imageUri) + pasteListener!!.onPaste(this, mediaUri) } } @@ -251,8 +251,8 @@ class FieldEditText : FixedEditText, NoteService.NoteField { fun onSelectionChanged(selStart: Int, selEnd: Int) } - fun interface ImagePasteListener { - fun onImagePaste(editText: EditText, uri: Uri?): Boolean + fun interface PasteListener { + fun onPaste(editText: EditText, uri: Uri?): Boolean } companion object { diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt b/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt index 0bb437f8c8..f273722196 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/MediaRegistration.kt @@ -39,15 +39,15 @@ import java.io.InputStream */ class MediaRegistration(private val context: Context) { // Use the same HTML if the same image is pasted multiple times. - private val pastedImageCache = HashMap() + private val pastedMediaCache = HashMap() /** - * Loads an image into the collection.media directory and returns a HTML reference + * Loads media into the collection.media directory and returns a HTML reference * @param uri The uri of the image to load * @return HTML referring to the loaded image */ @Throws(IOException::class) - fun loadImageIntoCollection(uri: Uri): String? { + fun loadMediaIntoCollection(uri: Uri): String? { val fileName: String val filename = getFileName(context.contentResolver, uri) val fd = openInputStreamWithURI(uri) @@ -87,7 +87,7 @@ class MediaRegistration(private val context: Context) { } val field = ImageField() field.hasTemporaryMedia = true - field.extraImagePathRef = tempFilePath + field.mediaPath = tempFilePath return field.formattedValue } @@ -129,13 +129,13 @@ class MediaRegistration(private val context: Context) { return fileNameAndExtension.key.length <= 3 } - fun onImagePaste(uri: Uri): String? { + fun onPaste(uri: Uri): String? { return try { // check if cache already holds registered file or not - if (!pastedImageCache.containsKey(uri.toString())) { - pastedImageCache[uri.toString()] = loadImageIntoCollection(uri) + if (!pastedMediaCache.containsKey(uri.toString())) { + pastedMediaCache[uri.toString()] = loadMediaIntoCollection(uri) } - pastedImageCache[uri.toString()] + pastedMediaCache[uri.toString()] } catch (ex: NullPointerException) { // Tested under FB Messenger and GMail, both apps do nothing if this occurs. // This typically works if the user copies again - don't know the exact cause @@ -143,28 +143,28 @@ class MediaRegistration(private val context: Context) { // java.lang.SecurityException: Permission Denial: opening provider // org.chromium.chrome.browser.util.ChromeFileProvider from ProcessRecord{80125c 11262:com.ichi2.anki/u0a455} // (pid=11262, uid=10455) that is not exported from UID 10057 - Timber.w(ex, "Failed to paste image") + Timber.w(ex, "Failed to paste media") null } catch (ex: SecurityException) { - Timber.w(ex, "Failed to paste image") + Timber.w(ex, "Failed to paste media") null } catch (e: Exception) { // NOTE: This is happy path coding which works on Android 9. CrashReportService.sendExceptionReport("File is invalid issue:8880", "RegisterMediaForWebView:onImagePaste URI of file:$uri") - Timber.w(e, "Failed to paste image") + Timber.w(e, "Failed to paste media") showThemedToast(context, context.getString(R.string.multimedia_editor_something_wrong), false) null } } @CheckResult - fun registerMediaForWebView(imagePath: String?): Boolean { - if (imagePath == null) { + fun registerMediaForWebView(mediaPath: String?): Boolean { + if (mediaPath == null) { // Nothing to register - continue with execution. return true } - Timber.i("Adding media to collection: %s", imagePath) - val f = File(imagePath) + Timber.i("Adding media to collection: %s", mediaPath) + val f = File(mediaPath) return try { CollectionManager.getColUnsafe().media.addFile(f) true diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt index b59a850226..a7b7499cc9 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt +++ b/AnkiDroid/src/main/java/com/ichi2/anki/NoteEditor.kt @@ -623,7 +623,7 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su // TODO: Support all extensions // See https://github.com/ankitects/anki/blob/6f3550464d37aee1b8b784e431cbfce8382d3ce7/rslib/src/image_occlusion/imagedata.rs#L154 if (ClipboardUtil.hasImage(clipboard)) { - val uri = ClipboardUtil.getImageUri(clipboard) + val uri = ClipboardUtil.getUri(clipboard) val i = Intent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) clipData = ClipData.newUri(requireActivity().contentResolver, uri.toString(), uri) @@ -1594,8 +1594,8 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su val editLineView = editLines[i] customViewIds.add(editLineView.id) val newEditText = editLineView.editText - newEditText.setImagePasteListener { editText: EditText?, uri: Uri? -> - onImagePaste( + newEditText.setPasteListener { editText: EditText?, uri: Uri? -> + onPaste( editText!!, uri!! ) @@ -1837,9 +1837,9 @@ class NoteEditor : AnkiFragment(R.layout.note_editor), DeckSelectionListener, Su } } - private fun onImagePaste(editText: EditText, uri: Uri): Boolean { - val imageTag = mediaRegistration!!.onImagePaste(uri) ?: return false - insertStringInField(editText, imageTag) + private fun onPaste(editText: EditText, uri: Uri): Boolean { + val mediaTag = mediaRegistration!!.onPaste(uri) ?: return false + insertStringInField(editText, mediaTag) return true } diff --git a/AnkiDroid/src/main/java/com/ichi2/utils/ClipboardUtil.kt b/AnkiDroid/src/main/java/com/ichi2/utils/ClipboardUtil.kt index eb61b9e16a..7e3e462b25 100644 --- a/AnkiDroid/src/main/java/com/ichi2/utils/ClipboardUtil.kt +++ b/AnkiDroid/src/main/java/com/ichi2/utils/ClipboardUtil.kt @@ -54,7 +54,7 @@ object ClipboardUtil { ?.takeIf { it.itemCount > 0 } ?.getItemAt(0) - fun getImageUri(clipboard: ClipboardManager?): Uri? { + fun getUri(clipboard: ClipboardManager?): Uri? { return getFirstItem(clipboard)?.uri }