🎯 Główna Idea
Moduł Clipboard upraszcza pracę ze schowkiem systemowym. Dodaje historię kopiowanych tekstów i callbacki na zmiany.
📝 Podstawowe użycie
// Kopiuj tekst
ADict.Clipboard.copy("Hello World")
// Kopiuj z Toast
ADict.Clipboard.copy("Skopiowano!", showToast = true)
ADict.Clipboard.copy("Link", showToast = true, toastMessage = "Link skopiowany")
// Wklej
val text = ADict.Clipboard.paste()
// Wklej lub domyślna wartość
val content = ADict.Clipboard.pasteOrDefault("Brak danych")
// Sprawdź zawartość
if (ADict.Clipboard.hasText()) {
processClipboard()
}
if (ADict.Clipboard.isEmpty()) {
showEmptyMessage()
}
📤 Kopiowanie
// Prosty tekst
ADict.Clipboard.copy("Tekst do skopiowania")
// Z własną etykietą (widoczna w niektórych managerach)
ADict.Clipboard.copy(
text = "Sekretny kod",
label = "Kod aktywacyjny"
)
// HTML
ADict.Clipboard.copyHtml(
text = "Tekst fallback",
html = "<b>Pogrubiony tekst</b>"
)
// URI
ADict.Clipboard.copyUri(Uri.parse("content://media/image/123"))
// Wyczyść schowek
ADict.Clipboard.clear()
📥 Wklejanie
// Zwykły tekst
val text: String? = ADict.Clipboard.paste()
// Z domyślną wartością
val content = ADict.Clipboard.pasteOrDefault("Pusty")
// HTML (jeśli dostępny)
val html: String? = ADict.Clipboard.pasteHtml()
// URI (jeśli dostępny)
val uri: Uri? = ADict.Clipboard.pasteUri()
// Sprawdź typ zawartości
when {
ADict.Clipboard.hasHtml() -> {
val html = ADict.Clipboard.pasteHtml()
displayRichText(html)
}
ADict.Clipboard.hasUri() -> {
val uri = ADict.Clipboard.pasteUri()
handleUri(uri)
}
ADict.Clipboard.hasText() -> {
val text = ADict.Clipboard.paste()
displayText(text)
}
else -> {
showEmpty()
}
}
📚 Historia schowka
// Włącz historię (domyślnie wyłączona)
ADict.Clipboard.enableHistory(maxSize = 10)
// Pobierz historię (od najnowszego)
val history: List<Clipboard.ClipboardEntry> = ADict.Clipboard.getHistory()
history.forEach { entry ->
println("${entry.text} - skopiowano ${entry.timestamp}")
}
// Pokaż w RecyclerView
historyAdapter.submitList(ADict.Clipboard.getHistory())
// Kopiuj z historii (0 = najnowszy)
button.setOnClickListener {
ADict.Clipboard.copyFromHistory(index = 0, showToast = true)
}
// Wyczyść historię
ADict.Clipboard.clearHistory()
// Wyłącz historię
ADict.Clipboard.disableHistory()
👀 Obserwowanie zmian
// Callback
ADict.Clipboard.onClipboardChange { text ->
Log.d("Clipboard", "Nowa zawartość: $text")
updateUI(text)
}
// Flow (w ViewModel lub lifecycleScope)
lifecycleScope.launch {
ADict.Clipboard.clipboardContent.collect { text ->
textView.text = text ?: "Pusty schowek"
}
}
// Usuń callback
val callback: (String?) -> Unit = { text -> handleChange(text) }
ADict.Clipboard.onClipboardChange(callback)
// ...później
ADict.Clipboard.removeClipboardChangeCallback(callback)
// Usuń wszystkie callbacki
ADict.Clipboard.clearCallbacks()
💡 Praktyczne zastosowania
// 1. Automatyczne wykrywanie linków w schowku
ADict.Clipboard.onClipboardChange { text ->
text?.let {
if (it.startsWith("http")) {
showOpenLinkDialog(it)
}
}
}
// 2. Kopiowanie z przyciskiem
copyButton.setOnClickListener {
ADict.Clipboard.copy(
text = couponCode,
showToast = true,
toastMessage = "Kod promocyjny skopiowany!"
)
}
// 3. Historia w Bottom Sheet
fun showClipboardHistory() {
val history = ADict.Clipboard.getHistory()
BottomSheetDialog(context).apply {
// ... setup RecyclerView with history
setOnItemClickListener { index ->
ADict.Clipboard.copyFromHistory(index)
dismiss()
}
}.show()
}