Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions java/src/org/futo/inputmethod/latin/uix/Action.kt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ interface KeyboardManagerForAction {

fun copyToClipboard(cut: Boolean = false)
fun pasteFromClipboard()
fun dismissQuickClips()

// Returns null if the current IME is not of this kind.
// TODO: In the future make an IMEActionInterface for correctness
Expand Down
7 changes: 7 additions & 0 deletions java/src/org/futo/inputmethod/latin/uix/QuickClip.kt
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,13 @@ object QuickClip {
timeOfDismissal = System.currentTimeMillis()
}

// Invalidate the cached QuickClip state. This must be called when clipboard items
// are removed or pruned so that deleted items no longer appear as QuickClip suggestions.
fun invalidateCache() {
cachedPreviousItem = null
cachedPreviousState = null
}

private fun getStateForItem(validUntil: Long, mimeTypes: List<String>, item: ClipData.Item, isSensitive: Boolean): QuickClipState? {
val texts = mutableListOf<QuickClipItem>()
val currTexts = mutableSetOf<String>()
Expand Down
4 changes: 4 additions & 0 deletions java/src/org/futo/inputmethod/latin/uix/UixManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,10 @@ class UixActionKeyboardManager(val uixManager: UixManager, val latinIME: LatinIM
uixManager.dismissQuickClips()
}

override fun dismissQuickClips() {
uixManager.dismissQuickClips()
}

override fun getSizingCalculator(): KeyboardSizingCalculator =
latinIME.sizingCalculator

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ import org.futo.inputmethod.latin.R
import org.futo.inputmethod.latin.common.Constants
import org.futo.inputmethod.latin.uix.Action
import org.futo.inputmethod.latin.uix.ActionWindow
import org.futo.inputmethod.latin.uix.QuickClip
import org.futo.inputmethod.latin.uix.DialogRequestItem
import org.futo.inputmethod.latin.uix.PersistentActionState
import org.futo.inputmethod.latin.uix.PersistentStateInitialization
Expand Down Expand Up @@ -380,29 +381,37 @@ class ClipboardHistoryManager(val context: Context, val coroutineScope: Lifecycl
val numHoursToKeep = context.getSetting(ClipboardHistoryTimeToKeep)
val numItemsToKeep = context.getSetting(ClipboardHistoryItemsToKeep)
val minimumTimestamp = System.currentTimeMillis() - (numHoursToKeep * 60L * 60L * 1000L)
clipboardHistory.removeAll {
val removedByTime = clipboardHistory.removeAll {
(!it.pinned) && (it.timestamp < minimumTimestamp)
}

// Remove duplicates of entries, if any appeared
// Duplicates will have same timestamp, same text, etc
val set = clipboardHistory.toSet()
if(set.size < clipboardHistory.size) {
val hadDuplicates = set.size < clipboardHistory.size
if(hadDuplicates) {
clipboardHistory.clear()
clipboardHistory.addAll(set)
}

val maxItems = numItemsToKeep
val numUnpinnedItems = clipboardHistory.filter { !it.pinned }.size

var removedByLimit = false
val numItemsToRemove = numUnpinnedItems - maxItems
if(numItemsToRemove > 0) {
for(i in 0 until numItemsToRemove) {
val idx = clipboardHistory.indexOfFirst { !it.pinned }
if(idx == -1) break
clipboardHistory.removeAt(idx)
removedByLimit = true
}
}

// Invalidate QuickClip cache if any items were removed during pruning
if(removedByTime || hadDuplicates || removedByLimit) {
QuickClip.invalidateCache()
}
}

var saveClipboardLoadJob: Job? = null
Expand Down Expand Up @@ -598,6 +607,11 @@ ${if(clipboardFileSwap.exists()) { clipboardFileSwap.readText() } else { "File d
}
}
clipboardHistory.removeAll { it == item }

// Invalidate QuickClip cache so removed items no longer appear as suggestions
QuickClip.invalidateCache()
QuickClip.markQuickClipDismissed()

saveClipboard()
}

Expand Down Expand Up @@ -695,6 +709,7 @@ val ClipboardHistoryAction = Action(
clipboardHistoryManager.onRemove(it)
}
}
manager.dismissQuickClips()
},
),
{}
Expand Down Expand Up @@ -841,6 +856,7 @@ val ClipboardHistoryAction = Action(
context.getString(R.string.action_clipboard_manager_remove_item)
) {
clipboardHistoryManager.onRemove(it)
manager.dismissQuickClips()
manager.performHapticAndAudioFeedback(Constants.CODE_TAB, view)
}
)
Expand Down