Merge branch 'main' of github.com:SimpleMobileTools/Simple-Keyboard into main

This commit is contained in:
tibbi 2023-05-03 20:47:00 +02:00
commit d421b910fe
21 changed files with 543 additions and 8 deletions

View File

@ -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
}
}
}

View File

@ -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

View File

@ -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

View File

@ -97,6 +97,8 @@ class MyKeyboard {
var parent: MyKeyboard
var isNumbersRow: 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)
isNumbersRow = a.getBoolean(R.styleable.MyKeyboard_isNumbersRow, false)
a.recycle()
}
}
@ -342,14 +345,31 @@ class MyKeyboard {
if (event == XmlResourceParser.START_TAG) {
when (parser.name) {
TAG_ROW -> {
currentRow = createRowFromXml(res, parser)
if (currentRow.isNumbersRow && !context.config.showNumbersRow) {
continue
}
inRow = true
x = 0
currentRow = createRowFromXml(res, parser)
mRows.add(currentRow)
}
TAG_KEY -> {
if (currentRow?.isNumbersRow == true && !context.config.showNumbersRow) {
continue
}
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) {
@ -362,6 +382,7 @@ class MyKeyboard {
}
currentRow.mKeys.add(key)
}
TAG_KEYBOARD -> {
parseKeyboardAttributes(res, parser)
}

View File

@ -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
@ -263,6 +264,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 +593,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 +1206,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 +1265,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
invalidateKey(mCurrentKey)
return true
}
MotionEvent.ACTION_DOWN -> {
mAbortKey = false
mLastCodeX = touchX
@ -1278,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) {
@ -1310,6 +1314,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
showPreview(keyIndex)
}
}
MotionEvent.ACTION_MOVE -> {
var continueLongPress = false
if (keyIndex != NOT_A_KEY) {
@ -1363,6 +1368,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
mLastMoveTime = eventTime
}
}
MotionEvent.ACTION_UP -> {
mLastSpaceMoveX = 0
removeMessages()
@ -1391,11 +1397,14 @@ 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
}
MotionEvent.ACTION_CANCEL -> {
mIsLongPressingSpace = false
mLastSpaceMoveX = 0
@ -1515,12 +1524,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
}
}

View File

@ -189,6 +189,20 @@
android:layout_height="wrap_content"
android:text="@string/show_clipboard_content" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_numbers_row_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_numbers_row"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_numbers_row" />
</RelativeLayout>
<RelativeLayout

View File

@ -11,6 +11,7 @@
<declare-styleable name="MyKeyboard">
<attr name="keyWidth" format="fraction" />
<attr name="horizontalGap" format="fraction" />
<attr name="isNumbersRow" format="boolean" />
</declare-styleable>
<declare-styleable name="MyKeyboard_Key">

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="9.091%p">
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="9.05%p">
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"
@ -125,17 +159,17 @@
app:code="-6"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector"
app:secondaryKeyIcon="@drawable/ic_language_outlined"
app:keyWidth="10%p" />
app:keyWidth="10%p"
app:secondaryKeyIcon="@drawable/ic_language_outlined" />
<Key
app:code="32"
app:isRepeatable="true"
app:keyWidth="40%p" />
<Key
app:keyLabel="."
app:keyWidth="10%p"
app:popupCharacters=",?!;:…"
app:popupKeyboard="@xml/keyboard_popup_template"
app:keyWidth="10%p" />
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:code="-4"
app:keyEdgeFlags="right"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"

View File

@ -1,5 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:app="http://schemas.android.com/apk/res-auto">
<Row app:isNumbersRow="true">
<Key
app:keyEdgeFlags="left"
app:keyLabel="1"
app:topSmallNumber="1" />
<Key
app:keyLabel="2"
app:topSmallNumber="2" />
<Key
app:keyLabel="3"
app:topSmallNumber="3" />
<Key
app:keyLabel="4"
app:topSmallNumber="4" />
<Key
app:keyLabel="5"
app:topSmallNumber="5" />
<Key
app:keyLabel="6"
app:topSmallNumber="6" />
<Key
app:keyLabel="7"
app:topSmallNumber="7" />
<Key
app:keyLabel="8"
app:topSmallNumber="8" />
<Key
app:keyLabel="9"
app:topSmallNumber="9" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="0"
app:topSmallNumber="0" />
</Row>
<Row app:keyWidth="8.33%p">
<Key
app:keyEdgeFlags="left"