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