0
0
mirror of https://github.com/ankidroid/Anki-Android.git synced 2024-09-19 19:42:17 +02:00

rename 'image' to 'media'

In preparation for 'Drag & Drop' work,
which will allow importing of media
This commit is contained in:
SanjaySargam 2024-07-24 10:32:45 +05:30 committed by Arthur Milchior
parent 06e8ac2ef3
commit 9d036f61e8
4 changed files with 35 additions and 35 deletions

View File

@ -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 {

View File

@ -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<String, String?>()
private val pastedMediaCache = HashMap<String, String?>()
/**
* 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

View File

@ -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
}

View File

@ -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
}