From a39442976ad7e6dcbc3e78231fe7bf7805288446 Mon Sep 17 00:00:00 2001 From: ismailnurudeen Date: Tue, 18 Apr 2023 06:14:02 +0100 Subject: [PATCH 1/7] feat: added setting to show number row --- .../keyboard/activities/SettingsActivity.kt | 8 ++++++++ .../simplemobiletools/keyboard/helpers/Config.kt | 3 +++ .../keyboard/helpers/Constants.kt | 1 + app/src/main/res/layout/activity_settings.xml | 14 ++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt index 5bfe2b14..df9aa832 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt @@ -44,6 +44,7 @@ class SettingsActivity : SimpleActivity() { setupKeyboardLanguage() setupKeyboardHeightMultiplier() setupShowClipboardContent() + setupShowNumbersRow() updateTextColors(settings_nested_scrollview) @@ -159,4 +160,11 @@ class SettingsActivity : SimpleActivity() { config.showClipboardContent = settings_show_clipboard_content.isChecked } } + private fun setupShowNumbersRow() { + settings_show_numbers_row.isChecked = config.showNumbersRow + settings_show_numbers_row_holder.setOnClickListener { + settings_show_numbers_row.toggle() + config.showNumbersRow = settings_show_numbers_row.isChecked + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt index 694293ee..cb17a744 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt @@ -37,6 +37,9 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(SHOW_CLIPBOARD_CONTENT, true) set(showClipboardContent) = prefs.edit().putBoolean(SHOW_CLIPBOARD_CONTENT, showClipboardContent).apply() + var showNumbersRow: Boolean + get() = prefs.getBoolean(SHOW_NUMBERS_ROW, false) + set(showNumbersRow) = prefs.edit().putBoolean(SHOW_NUMBERS_ROW, showNumbersRow).apply() private fun getDefaultLanguage(): Int { val conf = context.resources.configuration diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt index ddc2838a..78a59fc6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt @@ -15,6 +15,7 @@ const val LAST_EXPORTED_CLIPS_FOLDER = "last_exported_clips_folder" const val KEYBOARD_LANGUAGE = "keyboard_language" const val HEIGHT_MULTIPLIER = "height_multiplier" const val SHOW_CLIPBOARD_CONTENT = "show_clipboard_content" +const val SHOW_NUMBERS_ROW = "show_numbers_row" // differentiate current and pinned clips at the keyboards' Clipboard section const val ITEM_SECTION_LABEL = 0 diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 832b3971..1230d13b 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -189,6 +189,20 @@ android:layout_height="wrap_content" android:text="@string/show_clipboard_content" /> + + + + + Date: Tue, 18 Apr 2023 16:14:02 +0100 Subject: [PATCH 2/7] feat: added number keys row --- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/xml/keys_letters_bengali.xml | 34 +++++++++++++++ .../main/res/xml/keys_letters_bulgarian.xml | 34 +++++++++++++++ .../res/xml/keys_letters_english_dvorak.xml | 34 +++++++++++++++ .../res/xml/keys_letters_english_qwerty.xml | 42 +++++++++++++++++-- .../res/xml/keys_letters_english_qwertz.xml | 34 +++++++++++++++ app/src/main/res/xml/keys_letters_french.xml | 34 +++++++++++++++ app/src/main/res/xml/keys_letters_german.xml | 34 +++++++++++++++ app/src/main/res/xml/keys_letters_greek.xml | 34 +++++++++++++++ .../main/res/xml/keys_letters_lithuanian.xml | 34 +++++++++++++++ .../main/res/xml/keys_letters_romanian.xml | 34 +++++++++++++++ app/src/main/res/xml/keys_letters_russian.xml | 34 +++++++++++++++ .../main/res/xml/keys_letters_slovenian.xml | 34 +++++++++++++++ .../res/xml/keys_letters_spanish_qwerty.xml | 34 +++++++++++++++ .../main/res/xml/keys_letters_turkish_q.xml | 34 +++++++++++++++ 15 files changed, 481 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 695614c7..4b8b07eb 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -11,6 +11,7 @@ + diff --git a/app/src/main/res/xml/keys_letters_bengali.xml b/app/src/main/res/xml/keys_letters_bengali.xml index c57ffbfc..085f23fb 100644 --- a/app/src/main/res/xml/keys_letters_bengali.xml +++ b/app/src/main/res/xml/keys_letters_bengali.xml @@ -1,5 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:keyWidth="10%p" + app:secondaryKeyIcon="@drawable/ic_language_outlined" /> + app:popupKeyboard="@xml/keyboard_popup_template" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Date: Tue, 18 Apr 2023 16:15:25 +0100 Subject: [PATCH 3/7] feat: implemented logic to hide and show number keys row. --- .../keyboard/helpers/MyKeyboard.kt | 13 ++++++++++++- .../keyboard/views/MyKeyboardView.kt | 10 +++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index 69d37b33..08254f55 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -97,6 +97,8 @@ class MyKeyboard { var parent: MyKeyboard + var isNumRow: Boolean = false + constructor(parent: MyKeyboard) { this.parent = parent } @@ -107,6 +109,7 @@ class MyKeyboard { defaultWidth = getDimensionOrFraction(a, R.styleable.MyKeyboard_keyWidth, parent.mDisplayWidth, parent.mDefaultWidth) defaultHeight = (res.getDimension(R.dimen.key_height) * this.parent.mKeyboardHeightMultiplier).roundToInt() defaultHorizontalGap = getDimensionOrFraction(a, R.styleable.MyKeyboard_horizontalGap, parent.mDisplayWidth, parent.mDefaultHorizontalGap) + isNumRow = a.getBoolean(R.styleable.MyKeyboard_isNumRow, false) a.recycle() } } @@ -342,12 +345,19 @@ class MyKeyboard { if (event == XmlResourceParser.START_TAG) { when (parser.name) { TAG_ROW -> { + currentRow = createRowFromXml(res, parser) + if (currentRow.isNumRow && !context.config.showNumbersRow) { + continue + } inRow = true x = 0 - currentRow = createRowFromXml(res, parser) mRows.add(currentRow) } + TAG_KEY -> { + if (currentRow?.isNumRow == true && !context.config.showNumbersRow) { + continue + } inKey = true key = createKeyFromXml(res, currentRow!!, x, y, parser) mKeys!!.add(key) @@ -362,6 +372,7 @@ class MyKeyboard { } currentRow.mKeys.add(key) } + TAG_KEYBOARD -> { parseKeyboardAttributes(res, parser) } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index 262450e1..f5c96c47 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -263,6 +263,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut val repeat = Message.obtain(this, MSG_REPEAT) sendMessageDelayed(repeat, REPEAT_INTERVAL.toLong()) } + MSG_LONGPRESS -> openPopupIfRequired(msg.obj as MotionEvent) } } @@ -591,7 +592,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut label, (key.width / 2).toFloat(), key.height / 2 + (paint.textSize - paint.descent()) / 2, paint ) - if (key.topSmallNumber.isNotEmpty()) { + if (key.topSmallNumber.isNotEmpty() && !context.config.showNumbersRow) { canvas.drawText(key.topSmallNumber, key.width - mTopSmallNumberMarginWidth, mTopSmallNumberMarginHeight, smallLetterPaint) } @@ -1204,6 +1205,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } } + MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { mMiniKeyboard?.mKeys?.firstOrNull { it.focused }?.apply { mOnKeyboardActionListener!!.onKey(code) @@ -1262,6 +1264,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut invalidateKey(mCurrentKey) return true } + MotionEvent.ACTION_DOWN -> { mAbortKey = false mLastCodeX = touchX @@ -1310,6 +1313,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut showPreview(keyIndex) } } + MotionEvent.ACTION_MOVE -> { var continueLongPress = false if (keyIndex != NOT_A_KEY) { @@ -1363,6 +1367,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mLastMoveTime = eventTime } } + MotionEvent.ACTION_UP -> { mLastSpaceMoveX = 0 removeMessages() @@ -1396,6 +1401,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mOnKeyboardActionListener!!.onActionUp() mIsLongPressingSpace = false } + MotionEvent.ACTION_CANCEL -> { mIsLongPressingSpace = false mLastSpaceMoveX = 0 @@ -1515,12 +1521,14 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mHandler!!.sendMessageDelayed(msg, REPEAT_START_DELAY.toLong()) true } + MotionEvent.ACTION_UP -> { mHandler!!.removeMessages(MSG_REPEAT) mRepeatKeyIndex = NOT_A_KEY isPressed = false false } + else -> false } } From 7bb026b2786f1ccc70016f8df6a478d3a3257194 Mon Sep 17 00:00:00 2001 From: ismailnurudeen Date: Thu, 20 Apr 2023 11:53:56 +0100 Subject: [PATCH 4/7] refactor: renamed isNumRow to isNumbersRow --- .../com/simplemobiletools/keyboard/helpers/MyKeyboard.kt | 8 ++++---- app/src/main/res/values/attrs.xml | 2 +- app/src/main/res/xml/keys_letters_bengali.xml | 2 +- app/src/main/res/xml/keys_letters_bulgarian.xml | 2 +- app/src/main/res/xml/keys_letters_english_dvorak.xml | 2 +- app/src/main/res/xml/keys_letters_english_qwerty.xml | 2 +- app/src/main/res/xml/keys_letters_english_qwertz.xml | 2 +- app/src/main/res/xml/keys_letters_french.xml | 2 +- app/src/main/res/xml/keys_letters_german.xml | 2 +- app/src/main/res/xml/keys_letters_greek.xml | 2 +- app/src/main/res/xml/keys_letters_lithuanian.xml | 2 +- app/src/main/res/xml/keys_letters_romanian.xml | 2 +- app/src/main/res/xml/keys_letters_russian.xml | 2 +- app/src/main/res/xml/keys_letters_slovenian.xml | 2 +- app/src/main/res/xml/keys_letters_spanish_qwerty.xml | 2 +- app/src/main/res/xml/keys_letters_turkish_q.xml | 2 +- 16 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index 08254f55..f07ce01c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -97,7 +97,7 @@ class MyKeyboard { var parent: MyKeyboard - var isNumRow: Boolean = false + var isNumbersRow: Boolean = false constructor(parent: MyKeyboard) { this.parent = parent @@ -109,7 +109,7 @@ class MyKeyboard { defaultWidth = getDimensionOrFraction(a, R.styleable.MyKeyboard_keyWidth, parent.mDisplayWidth, parent.mDefaultWidth) defaultHeight = (res.getDimension(R.dimen.key_height) * this.parent.mKeyboardHeightMultiplier).roundToInt() defaultHorizontalGap = getDimensionOrFraction(a, R.styleable.MyKeyboard_horizontalGap, parent.mDisplayWidth, parent.mDefaultHorizontalGap) - isNumRow = a.getBoolean(R.styleable.MyKeyboard_isNumRow, false) + isNumbersRow = a.getBoolean(R.styleable.MyKeyboard_isNumbersRow, false) a.recycle() } } @@ -346,7 +346,7 @@ class MyKeyboard { when (parser.name) { TAG_ROW -> { currentRow = createRowFromXml(res, parser) - if (currentRow.isNumRow && !context.config.showNumbersRow) { + if (currentRow.isNumbersRow && !context.config.showNumbersRow) { continue } inRow = true @@ -355,7 +355,7 @@ class MyKeyboard { } TAG_KEY -> { - if (currentRow?.isNumRow == true && !context.config.showNumbersRow) { + if (currentRow?.isNumbersRow == true && !context.config.showNumbersRow) { continue } inKey = true diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 4b8b07eb..994aa3e2 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -11,7 +11,7 @@ - + diff --git a/app/src/main/res/xml/keys_letters_bengali.xml b/app/src/main/res/xml/keys_letters_bengali.xml index 085f23fb..8803bbbe 100644 --- a/app/src/main/res/xml/keys_letters_bengali.xml +++ b/app/src/main/res/xml/keys_letters_bengali.xml @@ -1,6 +1,6 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + Date: Thu, 20 Apr 2023 12:42:57 +0100 Subject: [PATCH 5/7] fix: remove numbers from popup character if showNumbersRow is enabled. --- .../simplemobiletools/keyboard/helpers/MyKeyboard.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index f07ce01c..9702a4e1 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -360,6 +360,16 @@ class MyKeyboard { } inKey = true key = createKeyFromXml(res, currentRow!!, x, y, parser) + if(context.config.showNumbersRow){ + // Removes numbers (i.e 0-9) from the popupCharacters if numbers row is enabled + key.apply{ + popupCharacters = popupCharacters?.replace(Regex("\\d+"), "") + if(popupCharacters.isNullOrEmpty()){ + popupResId = 0 + } + } + + } mKeys!!.add(key) if (key.code == KEYCODE_ENTER) { val enterResourceId = when (mEnterKeyType) { From 3972a917b815613015371ad0a8459d2e59334cff Mon Sep 17 00:00:00 2001 From: ismailnurudeen Date: Thu, 20 Apr 2023 18:22:25 +0100 Subject: [PATCH 6/7] fix: prevent unnecessary key invalidation when keyboard mode change. --- .../com/simplemobiletools/keyboard/views/MyKeyboardView.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index f5c96c47..dd1f5202 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -138,6 +138,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var mLastKey = 0 private var mLastCodeX = 0 private var mLastCodeY = 0 + private var mLastKeyPressedCode = 0 private var mCurrentKey: Int = NOT_A_KEY private var mLastKeyTime = 0L private var mCurrentKeyTime = 0L @@ -1281,8 +1282,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } else { 0 } - mOnKeyboardActionListener!!.onPress(onPressKey) + mLastKeyPressedCode = onPressKey var wasHandled = false if (mCurrentKey >= 0 && mKeys[mCurrentKey].repeatable) { @@ -1396,7 +1397,9 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut detectAndSendKey(mCurrentKey, touchX, touchY, eventTime) } - invalidateKey(keyIndex) + if (mLastKeyPressedCode != KEYCODE_MODE_CHANGE) { + invalidateKey(keyIndex) + } mRepeatKeyIndex = NOT_A_KEY mOnKeyboardActionListener!!.onActionUp() mIsLongPressingSpace = false From 8b0d59781be3a6bee79bdc8bfdd8e60b7670c6a6 Mon Sep 17 00:00:00 2001 From: ismailnurudeen Date: Mon, 24 Apr 2023 13:51:19 +0100 Subject: [PATCH 7/7] fix: formatting --- .../com/simplemobiletools/keyboard/helpers/MyKeyboard.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index 9702a4e1..b2c77c00 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -360,11 +360,11 @@ class MyKeyboard { } inKey = true key = createKeyFromXml(res, currentRow!!, x, y, parser) - if(context.config.showNumbersRow){ + if (context.config.showNumbersRow) { // Removes numbers (i.e 0-9) from the popupCharacters if numbers row is enabled - key.apply{ + key.apply { popupCharacters = popupCharacters?.replace(Regex("\\d+"), "") - if(popupCharacters.isNullOrEmpty()){ + if (popupCharacters.isNullOrEmpty()) { popupResId = 0 } }