From da25fc282d5ee0fb8aa8dad02465577902d3e245 Mon Sep 17 00:00:00 2001
From: Aleksandras Kostarevas <aleks076@protonmail.com>
Date: Thu, 1 Aug 2024 15:45:57 +0300
Subject: [PATCH] Avoid suppressing Arabic numerals as morekeys when number row
 is active (for languages that use Indo-Arabic numerals)

---
 java/res/values/attrs.xml                     |  3 ++
 java/res/xml/rowkeys_symbols1.xml             | 30 ++++++++++++-------
 .../org/futo/inputmethod/keyboard/Key.java    | 12 ++++++--
 3 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 76db3330f2..8a96052423 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -443,6 +443,9 @@
         <attr name="keyPreviewTextColor" format="color" />
         <!-- Size of the text for key press feedback popup, in the proportion of key height. -->
         <attr name="keyPreviewTextRatio" format="fraction" />
+
+        <!-- If true, numbers will not be suppressed in moreKeys due to enabled number row (This should be set to true for number row keys) -->
+        <attr name="doNotSuppressNumbersInMoreKeys" format="boolean" />
     </declare-styleable>
 
     <declare-styleable name="Keyboard_Include">
diff --git a/java/res/xml/rowkeys_symbols1.xml b/java/res/xml/rowkeys_symbols1.xml
index 93937cff11..cb1e337983 100644
--- a/java/res/xml/rowkeys_symbols1.xml
+++ b/java/res/xml/rowkeys_symbols1.xml
@@ -24,41 +24,51 @@
     <Key
         latin:keySpec="!text/keyspec_symbols_1"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_1"
-        latin:moreKeys="!text/morekeys_symbols_1" />
+        latin:moreKeys="!text/morekeys_symbols_1"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_2"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_2"
-        latin:moreKeys="!text/morekeys_symbols_2" />
+        latin:moreKeys="!text/morekeys_symbols_2"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_3"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_3"
-        latin:moreKeys="!text/morekeys_symbols_3" />
+        latin:moreKeys="!text/morekeys_symbols_3"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_4"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_4"
-        latin:moreKeys="!text/morekeys_symbols_4" />
+        latin:moreKeys="!text/morekeys_symbols_4"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_5"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_5"
-        latin:moreKeys="!text/morekeys_symbols_5" />
+        latin:moreKeys="!text/morekeys_symbols_5"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_6"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_6"
-        latin:moreKeys="!text/morekeys_symbols_6" />
+        latin:moreKeys="!text/morekeys_symbols_6"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_7"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_7"
-        latin:moreKeys="!text/morekeys_symbols_7" />
+        latin:moreKeys="!text/morekeys_symbols_7"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_8"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_8"
-        latin:moreKeys="!text/morekeys_symbols_8" />
+        latin:moreKeys="!text/morekeys_symbols_8"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_9"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_9"
-        latin:moreKeys="!text/morekeys_symbols_9" />
+        latin:moreKeys="!text/morekeys_symbols_9"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
     <Key
         latin:keySpec="!text/keyspec_symbols_0"
         latin:additionalMoreKeys="!text/additional_morekeys_symbols_0"
-        latin:moreKeys="!text/morekeys_symbols_0" />
+        latin:moreKeys="!text/morekeys_symbols_0"
+        latin:doNotSuppressNumbersInMoreKeys="true" />
 </merge>
diff --git a/java/src/org/futo/inputmethod/keyboard/Key.java b/java/src/org/futo/inputmethod/keyboard/Key.java
index 1888bcdcaf..f7f5dd62c5 100644
--- a/java/src/org/futo/inputmethod/keyboard/Key.java
+++ b/java/src/org/futo/inputmethod/keyboard/Key.java
@@ -327,7 +327,13 @@ public class Key implements Comparable<Key> {
         }
         moreKeys = MoreKeySpec.insertAdditionalMoreKeys(moreKeys, additionalMoreKeys);
 
-        if(params.mId.mNumberRow && moreKeys != null) {
+        boolean shouldSuppressNumbersInMoreKeys = moreKeys != null &&
+                // Number row is active
+                params.mId.mNumberRow &&
+                // This key is not part of number row
+                style.getFlags(keyAttr, R.styleable.Keyboard_Key_doNotSuppressNumbersInMoreKeys) == 0;
+
+        if(shouldSuppressNumbersInMoreKeys) {
             moreKeys = Arrays.stream(moreKeys)
                     .filter(s -> !s.matches("\\d+"))
                     .toArray(String[]::new);
@@ -372,7 +378,7 @@ public class Key implements Comparable<Key> {
                 String hintLabelCandidate = moreKeys[0];
                 if(hintLabelCandidate.startsWith("\\")) hintLabelCandidate = hintLabelCandidate.substring(1);
 
-                if(hintLabelCandidate.length() == 1) {
+                if(hintLabelCandidate.length() < 3) {
                     hintLabel = needsToUpcase
                             ? StringUtils.toTitleCaseOfKeyLabel(hintLabelCandidate, localeForUpcasing)
                             : hintLabelCandidate;
@@ -471,7 +477,7 @@ public class Key implements Comparable<Key> {
             String hintLabelCandidate = moreKeys[0].mLabel;
             if(hintLabelCandidate.startsWith("\\")) hintLabelCandidate = hintLabelCandidate.substring(1);
 
-            if(hintLabelCandidate.length() == 1) {
+            if(hintLabelCandidate.length() < 3) {
                 hintLabel = moreKeys[0].mNeedsToUpperCase
                         ? StringUtils.toTitleCaseOfKeyLabel(hintLabelCandidate, moreKeys[0].mLocale)
                         : hintLabelCandidate;
-- 
GitLab