From df8e7a01e0e69c2a8463a27096d4d3c33b1f6b46 Mon Sep 17 00:00:00 2001 From: Matej Drobnič Date: Mon, 29 Sep 2025 00:56:23 +0200 Subject: Make history duration configurable (#1074) --- res/values/arrays.xml | 12 ++++++++++++ res/values/strings.xml | 6 ++++++ res/xml/settings.xml | 3 +++ srcs/juloo.keyboard2/ClipboardHistoryService.java | 14 +++++++++++--- srcs/juloo.keyboard2/Config.java | 2 ++ 5 files changed, 34 insertions(+), 3 deletions(-) diff --git a/res/values/arrays.xml b/res/values/arrays.xml index cd12337..56015e9 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -106,4 +106,16 @@ 30 15 + + @string/pref_clipboard_history_duration_1 + @string/pref_clipboard_history_duration_5 + @string/pref_clipboard_history_duration_30 + @string/pref_clipboard_history_duration_stop + + + 1 + 5 + 30 + -1 + diff --git a/res/values/strings.xml b/res/values/strings.xml index 988ecaa..05e9160 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -140,4 +140,10 @@ Remove this clipboard item? Yes No voice typing app installed + Clipboard + Clipboard memory duration + At most 1 minute + At most 5 minutes + At most 30 minutes + Until the app stops diff --git a/res/xml/settings.xml b/res/xml/settings.xml index 22dbef2..c96f546 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -59,4 +59,7 @@ + + + diff --git a/srcs/juloo.keyboard2/ClipboardHistoryService.java b/srcs/juloo.keyboard2/ClipboardHistoryService.java index 9554bca..27e2eb9 100644 --- a/srcs/juloo.keyboard2/ClipboardHistoryService.java +++ b/srcs/juloo.keyboard2/ClipboardHistoryService.java @@ -7,6 +7,7 @@ import android.os.Build.VERSION; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.concurrent.TimeUnit; public final class ClipboardHistoryService { @@ -50,8 +51,6 @@ public final class ClipboardHistoryService gives a sense to the user that the history is not persisted and can be forgotten as soon as the app stops. */ public static final int MAX_HISTORY_SIZE = 6; - /** Time in ms until history entries expire. */ - public static final long HISTORY_TTL_MS = 5 * 60 * 1000; static ClipboardHistoryService _service = null; static ClipboardPasteCallback _paste_callback = null; @@ -150,6 +149,10 @@ public final class ClipboardHistoryService } } + int get_history_ttl_minutes() { + return Config.globalConfig().clipboard_history_duration; + } + final class SystemListener implements ClipboardManager.OnPrimaryClipChangedListener { public SystemListener() {} @@ -171,7 +174,12 @@ public final class ClipboardHistoryService public HistoryEntry(String c) { content = c; - expiry_timestamp = System.currentTimeMillis() + HISTORY_TTL_MS; + final int historyTtlMinutes = _service.get_history_ttl_minutes(); + if (historyTtlMinutes >= 0) { + expiry_timestamp = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(historyTtlMinutes); + } else { + expiry_timestamp = Long.MAX_VALUE; + } } } diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index dbdd877..b3eadf5 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -70,6 +70,7 @@ public final class Config public boolean borderConfig; public int circle_sensitivity; public boolean clipboard_history_enabled; + public int clipboard_history_duration; // Dynamically set public boolean shouldOfferVoiceTyping; @@ -181,6 +182,7 @@ public final class Config current_layout_wide = _prefs.getInt("current_layout_landscape", 0); circle_sensitivity = Integer.valueOf(_prefs.getString("circle_sensitivity", "2")); clipboard_history_enabled = _prefs.getBoolean("clipboard_history_enabled", false); + clipboard_history_duration = Integer.parseInt(_prefs.getString("clipboard_history_duration", "5")); float screen_width_dp = dm.widthPixels / dm.density; wide_screen = screen_width_dp >= WIDE_DEVICE_THRESHOLD; -- cgit v1.2.3