Merge branch 'main' into talkback_improvements

# Conflicts:
#	app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt
This commit is contained in:
merkost
2023-06-09 10:38:37 +10:00
56 changed files with 853 additions and 112 deletions

View File

@ -44,6 +44,7 @@ class SettingsActivity : SimpleActivity() {
setupKeyboardLanguage() setupKeyboardLanguage()
setupKeyboardHeightMultiplier() setupKeyboardHeightMultiplier()
setupShowClipboardContent() setupShowClipboardContent()
setupSentencesCapitalization()
setupShowNumbersRow() setupShowNumbersRow()
updateTextColors(settings_nested_scrollview) updateTextColors(settings_nested_scrollview)
@ -160,6 +161,15 @@ class SettingsActivity : SimpleActivity() {
config.showClipboardContent = settings_show_clipboard_content.isChecked config.showClipboardContent = settings_show_clipboard_content.isChecked
} }
} }
private fun setupSentencesCapitalization() {
settings_start_sentences_capitalized.isChecked = config.enableSentencesCapitalization
settings_start_sentences_capitalized_holder.setOnClickListener {
settings_start_sentences_capitalized.toggle()
config.enableSentencesCapitalization = settings_start_sentences_capitalized.isChecked
}
}
private fun setupShowNumbersRow() { private fun setupShowNumbersRow() {
settings_show_numbers_row.isChecked = config.showNumbersRow settings_show_numbers_row.isChecked = config.showNumbersRow
settings_show_numbers_row_holder.setOnClickListener { settings_show_numbers_row_holder.setOnClickListener {

View File

@ -4,11 +4,7 @@ import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.graphics.Color import android.graphics.Color
import android.os.IBinder import android.os.IBinder
import android.view.LayoutInflater import android.view.*
import android.view.View
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager
import android.widget.TextView import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.res.ResourcesCompat import androidx.core.content.res.ResourcesCompat
@ -152,6 +148,7 @@ fun Context.getKeyboardLanguages(): ArrayList<RadioItem> {
return arrayListOf( return arrayListOf(
RadioItem(LANGUAGE_BENGALI, getKeyboardLanguageText(LANGUAGE_BENGALI)), RadioItem(LANGUAGE_BENGALI, getKeyboardLanguageText(LANGUAGE_BENGALI)),
RadioItem(LANGUAGE_BULGARIAN, getKeyboardLanguageText(LANGUAGE_BULGARIAN)), RadioItem(LANGUAGE_BULGARIAN, getKeyboardLanguageText(LANGUAGE_BULGARIAN)),
RadioItem(LANGUAGE_DANISH, getKeyboardLanguageText(LANGUAGE_DANISH)),
RadioItem(LANGUAGE_ENGLISH_QWERTY, getKeyboardLanguageText(LANGUAGE_ENGLISH_QWERTY)), RadioItem(LANGUAGE_ENGLISH_QWERTY, getKeyboardLanguageText(LANGUAGE_ENGLISH_QWERTY)),
RadioItem(LANGUAGE_ENGLISH_QWERTZ, getKeyboardLanguageText(LANGUAGE_ENGLISH_QWERTZ)), RadioItem(LANGUAGE_ENGLISH_QWERTZ, getKeyboardLanguageText(LANGUAGE_ENGLISH_QWERTZ)),
RadioItem(LANGUAGE_ENGLISH_DVORAK, getKeyboardLanguageText(LANGUAGE_ENGLISH_DVORAK)), RadioItem(LANGUAGE_ENGLISH_DVORAK, getKeyboardLanguageText(LANGUAGE_ENGLISH_DVORAK)),
@ -159,10 +156,12 @@ fun Context.getKeyboardLanguages(): ArrayList<RadioItem> {
RadioItem(LANGUAGE_GERMAN, getKeyboardLanguageText(LANGUAGE_GERMAN)), RadioItem(LANGUAGE_GERMAN, getKeyboardLanguageText(LANGUAGE_GERMAN)),
RadioItem(LANGUAGE_GREEK, getKeyboardLanguageText(LANGUAGE_GREEK)), RadioItem(LANGUAGE_GREEK, getKeyboardLanguageText(LANGUAGE_GREEK)),
RadioItem(LANGUAGE_LITHUANIAN, getKeyboardLanguageText(LANGUAGE_LITHUANIAN)), RadioItem(LANGUAGE_LITHUANIAN, getKeyboardLanguageText(LANGUAGE_LITHUANIAN)),
RadioItem(LANGUAGE_NORWEGIAN, getKeyboardLanguageText(LANGUAGE_NORWEGIAN)),
RadioItem(LANGUAGE_ROMANIAN, getKeyboardLanguageText(LANGUAGE_ROMANIAN)), RadioItem(LANGUAGE_ROMANIAN, getKeyboardLanguageText(LANGUAGE_ROMANIAN)),
RadioItem(LANGUAGE_RUSSIAN, getKeyboardLanguageText(LANGUAGE_RUSSIAN)), RadioItem(LANGUAGE_RUSSIAN, getKeyboardLanguageText(LANGUAGE_RUSSIAN)),
RadioItem(LANGUAGE_SLOVENIAN, getKeyboardLanguageText(LANGUAGE_SLOVENIAN)), RadioItem(LANGUAGE_SLOVENIAN, getKeyboardLanguageText(LANGUAGE_SLOVENIAN)),
RadioItem(LANGUAGE_SPANISH, getKeyboardLanguageText(LANGUAGE_SPANISH)), RadioItem(LANGUAGE_SPANISH, getKeyboardLanguageText(LANGUAGE_SPANISH)),
RadioItem(LANGUAGE_SWEDISH, getKeyboardLanguageText(LANGUAGE_SWEDISH)),
RadioItem(LANGUAGE_TURKISH_Q, getKeyboardLanguageText(LANGUAGE_TURKISH_Q)), RadioItem(LANGUAGE_TURKISH_Q, getKeyboardLanguageText(LANGUAGE_TURKISH_Q)),
) )
} }
@ -171,18 +170,22 @@ fun Context.getKeyboardLanguageText(language: Int): String {
return when (language) { return when (language) {
LANGUAGE_BENGALI -> getString(R.string.translation_bengali) LANGUAGE_BENGALI -> getString(R.string.translation_bengali)
LANGUAGE_BULGARIAN -> getString(R.string.translation_bulgarian) LANGUAGE_BULGARIAN -> getString(R.string.translation_bulgarian)
LANGUAGE_DANISH -> getString(R.string.translation_danish)
LANGUAGE_ENGLISH_DVORAK -> "${getString(R.string.translation_english)} (DVORAK)" LANGUAGE_ENGLISH_DVORAK -> "${getString(R.string.translation_english)} (DVORAK)"
LANGUAGE_ENGLISH_QWERTZ -> "${getString(R.string.translation_english)} (QWERTZ)" LANGUAGE_ENGLISH_QWERTZ -> "${getString(R.string.translation_english)} (QWERTZ)"
LANGUAGE_FRENCH -> getString(R.string.translation_french) LANGUAGE_FRENCH -> getString(R.string.translation_french)
LANGUAGE_GERMAN -> getString(R.string.translation_german) LANGUAGE_GERMAN -> getString(R.string.translation_german)
LANGUAGE_GREEK -> getString(R.string.translation_greek) LANGUAGE_GREEK -> getString(R.string.translation_greek)
LANGUAGE_LITHUANIAN -> getString(R.string.translation_lithuanian) LANGUAGE_LITHUANIAN -> getString(R.string.translation_lithuanian)
LANGUAGE_NORWEGIAN -> getString(R.string.translation_norwegian)
LANGUAGE_ROMANIAN -> getString(R.string.translation_romanian) LANGUAGE_ROMANIAN -> getString(R.string.translation_romanian)
LANGUAGE_RUSSIAN -> getString(R.string.translation_russian) LANGUAGE_RUSSIAN -> getString(R.string.translation_russian)
LANGUAGE_SLOVENIAN -> getString(R.string.translation_slovenian) LANGUAGE_SLOVENIAN -> getString(R.string.translation_slovenian)
LANGUAGE_SPANISH -> getString(R.string.translation_spanish) LANGUAGE_SPANISH -> getString(R.string.translation_spanish)
LANGUAGE_SWEDISH -> getString(R.string.translation_swedish)
LANGUAGE_TURKISH_Q -> "${getString(R.string.translation_turkish)} (Q)" LANGUAGE_TURKISH_Q -> "${getString(R.string.translation_turkish)} (Q)"
else -> "${getString(R.string.translation_english)} (QWERTY)" else -> "${getString(R.string.translation_english)} (QWERTY)"
} }
} }

View File

@ -17,6 +17,10 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getBoolean(SHOW_POPUP_ON_KEYPRESS, true) get() = prefs.getBoolean(SHOW_POPUP_ON_KEYPRESS, true)
set(showPopupOnKeypress) = prefs.edit().putBoolean(SHOW_POPUP_ON_KEYPRESS, showPopupOnKeypress).apply() set(showPopupOnKeypress) = prefs.edit().putBoolean(SHOW_POPUP_ON_KEYPRESS, showPopupOnKeypress).apply()
var enableSentencesCapitalization: Boolean
get() = prefs.getBoolean(SENTENCES_CAPITALIZATION, true)
set(enableCapitalization) = prefs.edit().putBoolean(SENTENCES_CAPITALIZATION, enableCapitalization).apply()
var showKeyBorders: Boolean var showKeyBorders: Boolean
get() = prefs.getBoolean(SHOW_KEY_BORDERS, false) get() = prefs.getBoolean(SHOW_KEY_BORDERS, false)
set(showKeyBorders) = prefs.edit().putBoolean(SHOW_KEY_BORDERS, showKeyBorders).apply() set(showKeyBorders) = prefs.edit().putBoolean(SHOW_KEY_BORDERS, showKeyBorders).apply()

View File

@ -1,8 +1,11 @@
package com.simplemobiletools.keyboard.helpers package com.simplemobiletools.keyboard.helpers
const val SHIFT_OFF = 0
const val SHIFT_ON_ONE_CHAR = 1 enum class ShiftState {
const val SHIFT_ON_PERMANENT = 2 OFF,
ON_ONE_CHAR,
ON_PERMANENT;
}
// limit the count of alternative characters that show up at long pressing a key // limit the count of alternative characters that show up at long pressing a key
const val MAX_KEYS_PER_MINI_ROW = 9 const val MAX_KEYS_PER_MINI_ROW = 9
@ -11,6 +14,7 @@ const val MAX_KEYS_PER_MINI_ROW = 9
const val VIBRATE_ON_KEYPRESS = "vibrate_on_keypress" const val VIBRATE_ON_KEYPRESS = "vibrate_on_keypress"
const val SHOW_POPUP_ON_KEYPRESS = "show_popup_on_keypress" const val SHOW_POPUP_ON_KEYPRESS = "show_popup_on_keypress"
const val SHOW_KEY_BORDERS = "show_key_borders" const val SHOW_KEY_BORDERS = "show_key_borders"
const val SENTENCES_CAPITALIZATION = "sentences_capitalization"
const val LAST_EXPORTED_CLIPS_FOLDER = "last_exported_clips_folder" const val LAST_EXPORTED_CLIPS_FOLDER = "last_exported_clips_folder"
const val KEYBOARD_LANGUAGE = "keyboard_language" const val KEYBOARD_LANGUAGE = "keyboard_language"
const val HEIGHT_MULTIPLIER = "height_multiplier" const val HEIGHT_MULTIPLIER = "height_multiplier"
@ -35,6 +39,9 @@ const val LANGUAGE_TURKISH_Q = 10
const val LANGUAGE_LITHUANIAN = 11 const val LANGUAGE_LITHUANIAN = 11
const val LANGUAGE_BENGALI = 12 const val LANGUAGE_BENGALI = 12
const val LANGUAGE_GREEK = 13 const val LANGUAGE_GREEK = 13
const val LANGUAGE_NORWEGIAN = 14
const val LANGUAGE_SWEDISH = 15
const val LANGUAGE_DANISH = 16
// keyboard height multiplier options // keyboard height multiplier options
const val KEYBOARD_HEIGHT_MULTIPLIER_SMALL = 1 const val KEYBOARD_HEIGHT_MULTIPLIER_SMALL = 1

View File

@ -34,7 +34,7 @@ class MyKeyboard {
var mKeyboardHeightMultiplier: Float = 1F var mKeyboardHeightMultiplier: Float = 1F
/** Is the keyboard in the shifted state */ /** Is the keyboard in the shifted state */
var mShiftState = SHIFT_OFF var mShiftState = ShiftState.OFF
/** Total height of the keyboard, including the padding and keys */ /** Total height of the keyboard, including the padding and keys */
var mHeight = 0 var mHeight = 0
@ -201,8 +201,14 @@ class MyKeyboard {
a.recycle() a.recycle()
a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.MyKeyboard_Key) a = res.obtainAttributes(Xml.asAttributeSet(parser), R.styleable.MyKeyboard_Key)
label = a.getText(R.styleable.MyKeyboard_Key_keyLabel) ?: ""
code = a.getInt(R.styleable.MyKeyboard_Key_code, 0) code = a.getInt(R.styleable.MyKeyboard_Key_code, 0)
if (label.isNotEmpty() && code == 0) {
code = label[0].code
}
popupCharacters = a.getText(R.styleable.MyKeyboard_Key_popupCharacters) popupCharacters = a.getText(R.styleable.MyKeyboard_Key_popupCharacters)
popupResId = a.getResourceId(R.styleable.MyKeyboard_Key_popupKeyboard, 0) popupResId = a.getResourceId(R.styleable.MyKeyboard_Key_popupKeyboard, 0)
repeatable = a.getBoolean(R.styleable.MyKeyboard_Key_isRepeatable, false) repeatable = a.getBoolean(R.styleable.MyKeyboard_Key_isRepeatable, false)
@ -213,12 +219,9 @@ class MyKeyboard {
secondaryIcon = a.getDrawable(R.styleable.MyKeyboard_Key_secondaryKeyIcon) secondaryIcon = a.getDrawable(R.styleable.MyKeyboard_Key_secondaryKeyIcon)
secondaryIcon?.setBounds(0, 0, secondaryIcon!!.intrinsicWidth, secondaryIcon!!.intrinsicHeight) secondaryIcon?.setBounds(0, 0, secondaryIcon!!.intrinsicWidth, secondaryIcon!!.intrinsicHeight)
label = a.getText(R.styleable.MyKeyboard_Key_keyLabel) ?: ""
topSmallNumber = a.getString(R.styleable.MyKeyboard_Key_topSmallNumber) ?: "" topSmallNumber = a.getString(R.styleable.MyKeyboard_Key_topSmallNumber) ?: ""
if (label.isNotEmpty() && code != KEYCODE_MODE_CHANGE && code != KEYCODE_SHIFT) {
code = label[0].code
}
a.recycle() a.recycle()
} }
@ -274,12 +277,7 @@ class MyKeyboard {
fun isInside(x: Int, y: Int): Boolean { fun isInside(x: Int, y: Int): Boolean {
val leftEdge = edgeFlags and EDGE_LEFT > 0 val leftEdge = edgeFlags and EDGE_LEFT > 0
val rightEdge = edgeFlags and EDGE_RIGHT > 0 val rightEdge = edgeFlags and EDGE_RIGHT > 0
return ( return ((x >= this.x || leftEdge && x <= this.x + width) && (x < this.x + width || rightEdge && x >= this.x) && (y >= this.y && y <= this.y + height) && (y < this.y + height && y >= this.y))
(x >= this.x || leftEdge && x <= this.x + width) &&
(x < this.x + width || rightEdge && x >= this.x) &&
(y >= this.y && y <= this.y + height) &&
(y < this.y + height && y >= this.y)
)
} }
} }
@ -309,8 +307,7 @@ class MyKeyboard {
* @param characters the list of characters to display on the keyboard. One key will be created for each character. * @param characters the list of characters to display on the keyboard. One key will be created for each character.
* @param keyWidth the width of the popup key, make sure it is the same as the key itself * @param keyWidth the width of the popup key, make sure it is the same as the key itself
*/ */
constructor(context: Context, layoutTemplateResId: Int, characters: CharSequence, keyWidth: Int) : constructor(context: Context, layoutTemplateResId: Int, characters: CharSequence, keyWidth: Int) : this(context, layoutTemplateResId, 0) {
this(context, layoutTemplateResId, 0) {
var x = 0 var x = 0
var y = 0 var y = 0
var column = 0 var column = 0
@ -347,12 +344,11 @@ class MyKeyboard {
mRows.add(row) mRows.add(row)
} }
fun setShifted(shiftState: Int): Boolean { fun setShifted(shiftState: ShiftState): Boolean {
if (this.mShiftState != shiftState) { if (this.mShiftState != shiftState) {
this.mShiftState = shiftState this.mShiftState = shiftState
return true return true
} }
return false return false
} }

View File

@ -2,11 +2,7 @@ package com.simplemobiletools.keyboard.services
import android.content.SharedPreferences import android.content.SharedPreferences
import android.inputmethodservice.InputMethodService import android.inputmethodservice.InputMethodService
import android.text.InputType import android.text.InputType.*
import android.text.InputType.TYPE_CLASS_DATETIME
import android.text.InputType.TYPE_CLASS_NUMBER
import android.text.InputType.TYPE_CLASS_PHONE
import android.text.InputType.TYPE_MASK_CLASS
import android.text.TextUtils import android.text.TextUtils
import android.view.KeyEvent import android.view.KeyEvent
import android.view.View import android.view.View
@ -36,13 +32,13 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
private var keyboardView: MyKeyboardView? = null private var keyboardView: MyKeyboardView? = null
private var lastShiftPressTS = 0L private var lastShiftPressTS = 0L
private var keyboardMode = KEYBOARD_LETTERS private var keyboardMode = KEYBOARD_LETTERS
private var inputTypeClass = InputType.TYPE_CLASS_TEXT private var inputTypeClass = TYPE_CLASS_TEXT
private var inputTypeClassVariation = TYPE_CLASS_TEXT
private var enterKeyType = IME_ACTION_NONE private var enterKeyType = IME_ACTION_NONE
private var switchToLetters = false private var switchToLetters = false
override fun onInitializeInterface() { override fun onInitializeInterface() {
super.onInitializeInterface() super.onInitializeInterface()
keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType)
getSharedPrefs().registerOnSharedPreferenceChangeListener(this) getSharedPrefs().registerOnSharedPreferenceChangeListener(this)
} }
@ -65,24 +61,31 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
override fun onStartInput(attribute: EditorInfo?, restarting: Boolean) { override fun onStartInput(attribute: EditorInfo?, restarting: Boolean) {
super.onStartInput(attribute, restarting) super.onStartInput(attribute, restarting)
inputTypeClass = attribute!!.inputType and TYPE_MASK_CLASS inputTypeClass = attribute!!.inputType and TYPE_MASK_CLASS
enterKeyType = attribute.imeOptions and (IME_MASK_ACTION or IME_FLAG_NO_ENTER_ACTION) inputTypeClassVariation = attribute.inputType and TYPE_MASK_VARIATION
keyboard = getKeyBoard() enterKeyType = attribute.imeOptions and (IME_MASK_ACTION or IME_FLAG_NO_ENTER_ACTION)
keyboard = createNewKeyboard()
keyboardView?.setKeyboard(keyboard!!) keyboardView?.setKeyboard(keyboard!!)
keyboardView?.setEditorInfo(attribute) keyboardView?.setEditorInfo(attribute)
updateShiftKeyState() updateShiftKeyState(null)
} }
private fun updateShiftKeyState() { private fun updateShiftKeyState(code: Int?) {
if (keyboardMode == KEYBOARD_LETTERS) { if (code == MyKeyboard.KEYCODE_SHIFT) {
val editorInfo = currentInputEditorInfo return
if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != SHIFT_ON_PERMANENT) { }
if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) {
keyboard?.setShifted(SHIFT_ON_ONE_CHAR) val editorInfo = currentInputEditorInfo
keyboardView?.invalidateAllKeys() if (config.enableSentencesCapitalization && editorInfo != null && editorInfo.inputType != TYPE_NULL) {
} if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) {
keyboard?.setShifted(ShiftState.ON_ONE_CHAR)
keyboardView?.invalidateAllKeys()
return
} }
} }
keyboard?.setShifted(ShiftState.OFF)
keyboardView?.invalidateAllKeys()
} }
override fun onKey(code: Int) { override fun onKey(code: Int) {
@ -97,10 +100,6 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
when (code) { when (code) {
MyKeyboard.KEYCODE_DELETE -> { MyKeyboard.KEYCODE_DELETE -> {
if (keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR) {
keyboard!!.mShiftState = SHIFT_OFF
}
val selectedText = inputConnection.getSelectedText(0) val selectedText = inputConnection.getSelectedText(0)
if (TextUtils.isEmpty(selectedText)) { if (TextUtils.isEmpty(selectedText)) {
inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
@ -108,15 +107,14 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
} else { } else {
inputConnection.commitText("", 1) inputConnection.commitText("", 1)
} }
keyboardView!!.invalidateAllKeys()
} }
MyKeyboard.KEYCODE_SHIFT -> { MyKeyboard.KEYCODE_SHIFT -> {
if (keyboardMode == KEYBOARD_LETTERS) { if (keyboardMode == KEYBOARD_LETTERS) {
when { when {
keyboard!!.mShiftState == SHIFT_ON_PERMANENT -> keyboard!!.mShiftState = SHIFT_OFF keyboard!!.mShiftState == ShiftState.ON_PERMANENT -> keyboard!!.mShiftState = ShiftState.OFF
System.currentTimeMillis() - lastShiftPressTS < SHIFT_PERM_TOGGLE_SPEED -> keyboard!!.mShiftState = SHIFT_ON_PERMANENT System.currentTimeMillis() - lastShiftPressTS < SHIFT_PERM_TOGGLE_SPEED -> keyboard!!.mShiftState = ShiftState.ON_PERMANENT
keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR -> keyboard!!.mShiftState = SHIFT_OFF keyboard!!.mShiftState == ShiftState.ON_ONE_CHAR -> keyboard!!.mShiftState = ShiftState.OFF
keyboard!!.mShiftState == SHIFT_OFF -> keyboard!!.mShiftState = SHIFT_ON_ONE_CHAR keyboard!!.mShiftState == ShiftState.OFF -> keyboard!!.mShiftState = ShiftState.ON_ONE_CHAR
} }
lastShiftPressTS = System.currentTimeMillis() lastShiftPressTS = System.currentTimeMillis()
@ -158,43 +156,43 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
} }
else -> { else -> {
var codeChar = code.toChar() var codeChar = code.toChar()
if (Character.isLetter(codeChar) && keyboard!!.mShiftState > SHIFT_OFF) { val originalText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text ?: return
if (Character.isLetter(codeChar) && keyboard!!.mShiftState > ShiftState.OFF) {
codeChar = Character.toUpperCase(codeChar) codeChar = Character.toUpperCase(codeChar)
} }
// If the keyboard is set to symbols and the user presses space, we usually should switch back to the letters keyboard. // If the keyboard is set to symbols and the user presses space, we usually should switch back to the letters keyboard.
// However, avoid doing that in cases when the EditText for example requires numbers as the input. // However, avoid doing that in cases when the EditText for example requires numbers as the input.
// We can detect that by the text not changing on pressing Space. // We can detect that by the text not changing on pressing Space.
if (keyboardMode != KEYBOARD_LETTERS && code == MyKeyboard.KEYCODE_SPACE) { if (keyboardMode != KEYBOARD_LETTERS && inputTypeClass == TYPE_CLASS_TEXT && code == MyKeyboard.KEYCODE_SPACE) {
val originalText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text ?: return
inputConnection.commitText(codeChar.toString(), 1) inputConnection.commitText(codeChar.toString(), 1)
val newText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text val newText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text
switchToLetters = originalText != newText if (originalText != newText) {
switchToLetters = true
}
} else { } else {
inputConnection.commitText(codeChar.toString(), 1) inputConnection.commitText(codeChar.toString(), 1)
} }
if (keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR && keyboardMode == KEYBOARD_LETTERS) {
keyboard!!.mShiftState = SHIFT_OFF
keyboardView!!.invalidateAllKeys()
}
} }
} }
if (code != MyKeyboard.KEYCODE_SHIFT) { if (keyboard!!.mShiftState != ShiftState.ON_PERMANENT) {
updateShiftKeyState() updateShiftKeyState(code)
} }
} }
override fun onActionUp() { override fun onActionUp() {
if (switchToLetters) { if (switchToLetters) {
// TODO: Change keyboardMode to enum class
keyboardMode = KEYBOARD_LETTERS keyboardMode = KEYBOARD_LETTERS
keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType) keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType)
val editorInfo = currentInputEditorInfo val editorInfo = currentInputEditorInfo
if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != SHIFT_ON_PERMANENT) { if (editorInfo != null && editorInfo.inputType != TYPE_NULL && keyboard?.mShiftState != ShiftState.ON_PERMANENT) {
if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) { if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) {
keyboard?.setShifted(SHIFT_ON_ONE_CHAR) keyboard?.setShifted(ShiftState.ON_ONE_CHAR)
} }
} }
@ -216,12 +214,12 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
} }
override fun reloadKeyboard() { override fun reloadKeyboard() {
val keyboard = getKeyBoard() val keyboard = createNewKeyboard()
this.keyboard = keyboard this.keyboard = keyboard
keyboardView?.setKeyboard(keyboard) keyboardView?.setKeyboard(keyboard)
} }
private fun getKeyBoard(): MyKeyboard { private fun createNewKeyboard(): MyKeyboard {
val keyboardXml = when (inputTypeClass) { val keyboardXml = when (inputTypeClass) {
TYPE_CLASS_NUMBER -> { TYPE_CLASS_NUMBER -> {
keyboardMode = KEYBOARD_NUMBERS keyboardMode = KEYBOARD_NUMBERS
@ -240,8 +238,11 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
getKeyboardLayoutXML() getKeyboardLayoutXML()
} }
} }
return MyKeyboard(
return MyKeyboard(this, keyboardXml, enterKeyType) context = this,
xmlLayoutResId = keyboardXml,
enterKeyType = enterKeyType,
)
} }
override fun onUpdateSelection(oldSelStart: Int, oldSelEnd: Int, newSelStart: Int, newSelEnd: Int, candidatesStart: Int, candidatesEnd: Int) { override fun onUpdateSelection(oldSelStart: Int, oldSelEnd: Int, newSelStart: Int, newSelEnd: Int, candidatesStart: Int, candidatesEnd: Int) {
@ -275,15 +276,18 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
return when (baseContext.config.keyboardLanguage) { return when (baseContext.config.keyboardLanguage) {
LANGUAGE_BENGALI -> R.xml.keys_letters_bengali LANGUAGE_BENGALI -> R.xml.keys_letters_bengali
LANGUAGE_BULGARIAN -> R.xml.keys_letters_bulgarian LANGUAGE_BULGARIAN -> R.xml.keys_letters_bulgarian
LANGUAGE_DANISH -> R.xml.keys_letters_danish
LANGUAGE_ENGLISH_DVORAK -> R.xml.keys_letters_english_dvorak LANGUAGE_ENGLISH_DVORAK -> R.xml.keys_letters_english_dvorak
LANGUAGE_ENGLISH_QWERTZ -> R.xml.keys_letters_english_qwertz LANGUAGE_ENGLISH_QWERTZ -> R.xml.keys_letters_english_qwertz
LANGUAGE_FRENCH -> R.xml.keys_letters_french LANGUAGE_FRENCH -> R.xml.keys_letters_french
LANGUAGE_GERMAN -> R.xml.keys_letters_german LANGUAGE_GERMAN -> R.xml.keys_letters_german
LANGUAGE_GREEK -> R.xml.keys_letters_greek LANGUAGE_GREEK -> R.xml.keys_letters_greek
LANGUAGE_LITHUANIAN -> R.xml.keys_letters_lithuanian LANGUAGE_LITHUANIAN -> R.xml.keys_letters_lithuanian
LANGUAGE_NORWEGIAN -> R.xml.keys_letters_norwegian
LANGUAGE_ROMANIAN -> R.xml.keys_letters_romanian LANGUAGE_ROMANIAN -> R.xml.keys_letters_romanian
LANGUAGE_RUSSIAN -> R.xml.keys_letters_russian LANGUAGE_RUSSIAN -> R.xml.keys_letters_russian
LANGUAGE_SLOVENIAN -> R.xml.keys_letters_slovenian LANGUAGE_SLOVENIAN -> R.xml.keys_letters_slovenian
LANGUAGE_SWEDISH -> R.xml.keys_letters_swedish
LANGUAGE_SPANISH -> R.xml.keys_letters_spanish_qwerty LANGUAGE_SPANISH -> R.xml.keys_letters_spanish_qwerty
LANGUAGE_TURKISH_Q -> R.xml.keys_letters_turkish_q LANGUAGE_TURKISH_Q -> R.xml.keys_letters_turkish_q
else -> R.xml.keys_letters_english_qwerty else -> R.xml.keys_letters_english_qwerty

View File

@ -56,7 +56,7 @@ import kotlinx.android.synthetic.main.keyboard_popup_keyboard.view.*
import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.*
import java.util.* import java.util.*
@SuppressLint("UseCompatLoadingForDrawables") @SuppressLint("UseCompatLoadingForDrawables", "ClickableViewAccessibility")
class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int = 0) : class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: AttributeSet?, defStyleRes: Int = 0) :
View(context, attrs, defStyleRes) { View(context, attrs, defStyleRes) {
@ -496,7 +496,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
* @param shifted whether or not to enable the state of the shift key * @param shifted whether or not to enable the state of the shift key
* @return true if the shift key state changed, false if there was no change * @return true if the shift key state changed, false if there was no change
*/ */
private fun setShifted(shiftState: Int) { private fun setShifted(shiftState: ShiftState) {
if (mKeyboard?.setShifted(shiftState) == true) { if (mKeyboard?.setShifted(shiftState) == true) {
invalidateAllKeys() invalidateAllKeys()
} }
@ -507,7 +507,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
* @return true if the shift is in a pressed state, false otherwise * @return true if the shift is in a pressed state, false otherwise
*/ */
private fun isShifted(): Boolean { private fun isShifted(): Boolean {
return (mKeyboard?.mShiftState ?: SHIFT_OFF) > SHIFT_OFF return (mKeyboard?.mShiftState ?: ShiftState.OFF) > ShiftState.OFF
} }
private fun setPopupOffset(x: Int, y: Int) { private fun setPopupOffset(x: Int, y: Int) {
@ -520,7 +520,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
private fun adjustCase(label: CharSequence): CharSequence? { private fun adjustCase(label: CharSequence): CharSequence? {
var newLabel: CharSequence? = label var newLabel: CharSequence? = label
if (!newLabel.isNullOrEmpty() && mKeyboard!!.mShiftState > SHIFT_OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) { if (!newLabel.isNullOrEmpty() && mKeyboard!!.mShiftState != ShiftState.OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) {
newLabel = newLabel.toString().uppercase(Locale.getDefault()) newLabel = newLabel.toString().uppercase(Locale.getDefault())
} }
return newLabel return newLabel
@ -610,6 +610,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
for (i in 0 until keyCount) { for (i in 0 until keyCount) {
val key = keys[i] val key = keys[i]
val code = key.code val code = key.code
// TODO: Space key background on a KEYBOARD_PHONE should not be applied
setupKeyBackground(key, code, canvas) setupKeyBackground(key, code, canvas)
// Switch the character to uppercase if shift is pressed // Switch the character to uppercase if shift is pressed
@ -643,8 +645,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
} else if (key.icon != null && mKeyboard != null) { } else if (key.icon != null && mKeyboard != null) {
if (code == KEYCODE_SHIFT) { if (code == KEYCODE_SHIFT) {
val drawableId = when (mKeyboard!!.mShiftState) { val drawableId = when (mKeyboard!!.mShiftState) {
SHIFT_OFF -> R.drawable.ic_caps_outline_vector ShiftState.OFF -> R.drawable.ic_caps_outline_vector
SHIFT_ON_ONE_CHAR -> R.drawable.ic_caps_vector ShiftState.ON_ONE_CHAR -> R.drawable.ic_caps_vector
else -> R.drawable.ic_caps_underlined_vector else -> R.drawable.ic_caps_underlined_vector
} }
key.icon = resources.getDrawable(drawableId) key.icon = resources.getDrawable(drawableId)
@ -715,9 +717,9 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
} }
private fun setupKeyBackground(key: MyKeyboard.Key, keyCode: Int, canvas: Canvas) { private fun setupKeyBackground(key: MyKeyboard.Key, keyCode: Int, canvas: Canvas) {
val keyBackground = when (keyCode) { val keyBackground = when {
KEYCODE_SPACE -> getSpaceKeyBackground() keyCode == KEYCODE_SPACE && key.label.isBlank() -> getSpaceKeyBackground()
KEYCODE_ENTER -> getEnterKeyBackground() keyCode == KEYCODE_ENTER -> getEnterKeyBackground()
else -> mKeyBackground else -> mKeyBackground
} }
@ -1170,7 +1172,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
mMiniKeyboardSelectedKeyIndex = selectedKeyIndex mMiniKeyboardSelectedKeyIndex = selectedKeyIndex
mMiniKeyboard!!.invalidateAllKeys() mMiniKeyboard!!.invalidateAllKeys()
val miniShiftStatus = if (isShifted()) SHIFT_ON_PERMANENT else SHIFT_OFF val miniShiftStatus = if (isShifted()) ShiftState.ON_PERMANENT else ShiftState.OFF
mMiniKeyboard!!.setShifted(miniShiftStatus) mMiniKeyboard!!.setShifted(miniShiftStatus)
mPopupKeyboard.contentView = mMiniKeyboardContainer mPopupKeyboard.contentView = mMiniKeyboardContainer
mPopupKeyboard.width = mMiniKeyboardContainer!!.measuredWidth mPopupKeyboard.width = mMiniKeyboardContainer!!.measuredWidth

View File

@ -41,13 +41,32 @@
</RelativeLayout> </RelativeLayout>
<com.simplemobiletools.commons.views.MyEditText <LinearLayout
android:id="@+id/text_edittext"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/change_keyboard_holder" android:layout_below="@+id/change_keyboard_holder"
android:layout_margin="@dimen/activity_margin" /> android:orientation="vertical">
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/text_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin" />
<com.simplemobiletools.commons.views.MyEditText
android:id="@+id/text_editphone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/activity_margin"
android:layout_marginTop="@dimen/activity_margin"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_marginBottom="@dimen/activity_margin"
android:inputType="phone" />
</LinearLayout>
</RelativeLayout> </RelativeLayout>
</androidx.core.widget.NestedScrollView> </androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -190,6 +190,7 @@
android:text="@string/show_clipboard_content" /> android:text="@string/show_clipboard_content" />
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_show_numbers_row_holder" android:id="@+id/settings_show_numbers_row_holder"
style="@style/SettingsHolderCheckboxStyle" style="@style/SettingsHolderCheckboxStyle"
@ -205,6 +206,21 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_start_sentences_capitalized_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_start_sentences_capitalized"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/start_sentences_capitalized" />
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_keyboard_language_holder" android:id="@+id/settings_keyboard_language_holder"
style="@style/SettingsHolderTextViewStyle" style="@style/SettingsHolderTextViewStyle"

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">ارتفاع لوحة المفاتيح</string> <string name="keyboard_height">ارتفاع لوحة المفاتيح</string>
<string name="show_key_borders">إظهار حدود المفاتيح</string> <string name="show_key_borders">إظهار حدود المفاتيح</string>
<string name="show_numbers_row">إظهار الأرقام في صف منفصل</string> <string name="show_numbers_row">إظهار الأرقام في صف منفصل</string>
<string name="start_sentences_capitalized">بدء الجمل بحرف كبير</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">الرموز التعبيرية</string> <string name="emojis">الرموز التعبيرية</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Вышыня клавіятуры</string> <string name="keyboard_height">Вышыня клавіятуры</string>
<string name="show_key_borders">Паказаць контуры клавіш</string> <string name="show_key_borders">Паказаць контуры клавіш</string>
<string name="show_numbers_row">Паказаць лічбы ў асобным радку</string> <string name="show_numbers_row">Паказаць лічбы ў асобным радку</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Эмодзі</string> <string name="emojis">Эмодзі</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Височина на клавиатурата</string> <string name="keyboard_height">Височина на клавиатурата</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Емоджита</string> <string name="emojis">Емоджита</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Alçada del teclat</string> <string name="keyboard_height">Alçada del teclat</string>
<string name="show_key_borders">Mostra les vores de les tecles</string> <string name="show_key_borders">Mostra les vores de les tecles</string>
<string name="show_numbers_row">Mostra els números en una fila separada</string> <string name="show_numbers_row">Mostra els números en una fila separada</string>
<string name="start_sentences_capitalized">Comença les frases amb una lletra majúscula</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">قەبارەی تەختەکلیل</string> <string name="keyboard_height">قەبارەی تەختەکلیل</string>
<string name="show_key_borders">لێواری دوگمەکان</string> <string name="show_key_borders">لێواری دوگمەکان</string>
<string name="show_numbers_row">پیشاندانی لیستی ژمارەکان بەجیا</string> <string name="show_numbers_row">پیشاندانی لیستی ژمارەکان بەجیا</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">خەندەکان</string> <string name="emojis">خەندەکان</string>
</resources> </resources>

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Výška klávesnice</string> <string name="keyboard_height">Výška klávesnice</string>
<string name="show_key_borders">Zobrazit ohraničení kláves</string> <string name="show_key_borders">Zobrazit ohraničení kláves</string>
<string name="show_numbers_row">Zobrazit čísla na samostatném řádku</string> <string name="show_numbers_row">Zobrazit čísla na samostatném řádku</string>
<string name="start_sentences_capitalized">Začínat věty velkým písmenem</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emotikony</string> <string name="emojis">Emotikony</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Höhe der Tastatur</string> <string name="keyboard_height">Höhe der Tastatur</string>
<string name="show_key_borders">Tastenränder anzeigen</string> <string name="show_key_borders">Tastenränder anzeigen</string>
<string name="show_numbers_row">Zahlen in einer separaten Zeile anzeigen</string> <string name="show_numbers_row">Zahlen in einer separaten Zeile anzeigen</string>
<string name="start_sentences_capitalized">Sätze mit einem Großbuchstaben beginnen</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Ύψος πληκτρολογίου</string> <string name="keyboard_height">Ύψος πληκτρολογίου</string>
<string name="show_key_borders">Εμφάνιση ορίων πλήκτρου</string> <string name="show_key_borders">Εμφάνιση ορίων πλήκτρου</string>
<string name="show_numbers_row">Εμφάνιση αριθμών σε ξεχωριστή γραμμή</string> <string name="show_numbers_row">Εμφάνιση αριθμών σε ξεχωριστή γραμμή</string>
<string name="start_sentences_capitalized">Αρχίστε τις προτάσεις με κεφαλαίο γράμμα</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Altura del teclado</string> <string name="keyboard_height">Altura del teclado</string>
<string name="show_key_borders">Mostrar bordes de las teclas</string> <string name="show_key_borders">Mostrar bordes de las teclas</string>
<string name="show_numbers_row">Mostrar los números en una fila separada</string> <string name="show_numbers_row">Mostrar los números en una fila separada</string>
<string name="start_sentences_capitalized">Empezar las frases con mayúsculas</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoticonos</string> <string name="emojis">Emoticonos</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Klaviatuuri kõrgus</string> <string name="keyboard_height">Klaviatuuri kõrgus</string>
<string name="show_key_borders">Näita klahvide ääriseid</string> <string name="show_key_borders">Näita klahvide ääriseid</string>
<string name="show_numbers_row">Näita numbreid eraldi real</string> <string name="show_numbers_row">Näita numbreid eraldi real</string>
<string name="start_sentences_capitalized">Alusta lauseid suurtähega</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojid</string> <string name="emojis">Emojid</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Näppäimistön korkeus</string> <string name="keyboard_height">Näppäimistön korkeus</string>
<string name="show_key_borders">Näytä näppäinten ääriviivat</string> <string name="show_key_borders">Näytä näppäinten ääriviivat</string>
<string name="show_numbers_row">Näytä erillinen numerorivi</string> <string name="show_numbers_row">Näytä erillinen numerorivi</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojit</string> <string name="emojis">Emojit</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Hauteur du clavier</string> <string name="keyboard_height">Hauteur du clavier</string>
<string name="show_key_borders">Afficher les bordures des touches</string> <string name="show_key_borders">Afficher les bordures des touches</string>
<string name="show_numbers_row">Afficher les chiffres sur une ligne distincte</string> <string name="show_numbers_row">Afficher les chiffres sur une ligne distincte</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Émojis</string> <string name="emojis">Émojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Altura do teclado</string> <string name="keyboard_height">Altura do teclado</string>
<string name="show_key_borders">Mostralos bordes das teclas</string> <string name="show_key_borders">Mostralos bordes das teclas</string>
<string name="show_numbers_row">Mostralos números nunha fila afastada</string> <string name="show_numbers_row">Mostralos números nunha fila afastada</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoticona</string> <string name="emojis">Emoticona</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Visina tipkovnice</string> <string name="keyboard_height">Visina tipkovnice</string>
<string name="show_key_borders">Prikaži obrube ključeva</string> <string name="show_key_borders">Prikaži obrube ključeva</string>
<string name="show_numbers_row">Pokaži brojeve u zasebnom retku</string> <string name="show_numbers_row">Pokaži brojeve u zasebnom retku</string>
<string name="start_sentences_capitalized">Počni rečenice s velikim slovom</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji</string> <string name="emojis">Emoji</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Billentyűzet magassága</string> <string name="keyboard_height">Billentyűzet magassága</string>
<string name="show_key_borders">Gombszélek megjelenítése</string> <string name="show_key_borders">Gombszélek megjelenítése</string>
<string name="show_numbers_row">Számok megjelenítése külön sorban</string> <string name="show_numbers_row">Számok megjelenítése külön sorban</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojik</string> <string name="emojis">Emojik</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Tinggi papan tik</string> <string name="keyboard_height">Tinggi papan tik</string>
<string name="show_key_borders">Tampilkan garis luar tombol</string> <string name="show_key_borders">Tampilkan garis luar tombol</string>
<string name="show_numbers_row">Tampilkan nomor di baris terpisah</string> <string name="show_numbers_row">Tampilkan nomor di baris terpisah</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji</string> <string name="emojis">Emoji</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Altezza della tastiera</string> <string name="keyboard_height">Altezza della tastiera</string>
<string name="show_key_borders">Mostra i bordi dei tasti</string> <string name="show_key_borders">Mostra i bordi dei tasti</string>
<string name="show_numbers_row">Mostra i numeri su una riga separata</string> <string name="show_numbers_row">Mostra i numeri su una riga separata</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji</string> <string name="emojis">Emoji</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">キーボードの高さ</string> <string name="keyboard_height">キーボードの高さ</string>
<string name="show_key_borders">キー枠を表示する</string> <string name="show_key_borders">キー枠を表示する</string>
<string name="show_numbers_row">数字を別の行に表示する</string> <string name="show_numbers_row">数字を別の行に表示する</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">絵文字</string> <string name="emojis">絵文字</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">കീബോർഡ് ഉയരം</string> <string name="keyboard_height">കീബോർഡ് ഉയരം</string>
<string name="show_key_borders">പ്രധാന അതിരുകൾ കാണിക്കുക</string> <string name="show_key_borders">പ്രധാന അതിരുകൾ കാണിക്കുക</string>
<string name="show_numbers_row">ഒരു പ്രത്യേക വരിയിൽ സംഖ്യകൾ കാണിക്കുക</string> <string name="show_numbers_row">ഒരു പ്രത്യേക വരിയിൽ സംഖ്യകൾ കാണിക്കുക</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">ഇമോജികൾ</string> <string name="emojis">ഇമോജികൾ</string>
</resources> </resources>

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Hoogte toetsenbord</string> <string name="keyboard_height">Hoogte toetsenbord</string>
<string name="show_key_borders">Toetsen omranden</string> <string name="show_key_borders">Toetsen omranden</string>
<string name="show_numbers_row">Cijfers op een aparte rij</string> <string name="show_numbers_row">Cijfers op een aparte rij</string>
<string name="start_sentences_capitalized">Zinnen met een hoofdletter beginnen</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji\'s</string> <string name="emojis">Emoji\'s</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">کیبورڈ دی اُچائی</string> <string name="keyboard_height">کیبورڈ دی اُچائی</string>
<string name="show_key_borders">کنجیاں دے حد ویکھو</string> <string name="show_key_borders">کنجیاں دے حد ویکھو</string>
<string name="show_numbers_row">وکھری قطار وچ نمبر ویکھو</string> <string name="show_numbers_row">وکھری قطار وچ نمبر ویکھو</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">ایموجیاں</string> <string name="emojis">ایموجیاں</string>
</resources> </resources>

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">ਕੀਬੋਰਡ ਦੀ ਉਚਾਈ</string> <string name="keyboard_height">ਕੀਬੋਰਡ ਦੀ ਉਚਾਈ</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">ਇਮੋਜੀਆਂ</string> <string name="emojis">ਇਮੋਜੀਆਂ</string>
</resources> </resources>

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Wysokość klawiatury</string> <string name="keyboard_height">Wysokość klawiatury</string>
<string name="show_key_borders">Pokazuj obramowania klawiszy</string> <string name="show_key_borders">Pokazuj obramowania klawiszy</string>
<string name="show_numbers_row">Pokazuj cyfry w osobnym wierszu</string> <string name="show_numbers_row">Pokazuj cyfry w osobnym wierszu</string>
<string name="start_sentences_capitalized">Zaczynaj zdania wielką literą</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji</string> <string name="emojis">Emoji</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Altura do teclado</string> <string name="keyboard_height">Altura do teclado</string>
<string name="show_key_borders">Mostrar contorno das teclas</string> <string name="show_key_borders">Mostrar contorno das teclas</string>
<string name="show_numbers_row">Mostrar números em linha distinta</string> <string name="show_numbers_row">Mostrar números em linha distinta</string>
<string name="start_sentences_capitalized">Iniciar frases com letra maiúscula</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Înălțime tastatură</string> <string name="keyboard_height">Înălțime tastatură</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoticoane</string> <string name="emojis">Emoticoane</string>
<!-- <!--

View File

@ -35,6 +35,7 @@
<string name="keyboard_height">Высота клавиатуры</string> <string name="keyboard_height">Высота клавиатуры</string>
<string name="show_key_borders">Показывать границы кнопок</string> <string name="show_key_borders">Показывать границы кнопок</string>
<string name="show_numbers_row">Показывать цифры отдельной строкой</string> <string name="show_numbers_row">Показывать цифры отдельной строкой</string>
<string name="start_sentences_capitalized">Начинать предложения с заглавной буквы</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Эмодзи</string> <string name="emojis">Эмодзи</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Výška klávesnice</string> <string name="keyboard_height">Výška klávesnice</string>
<string name="show_key_borders">Zobraziť hranice kláves</string> <string name="show_key_borders">Zobraziť hranice kláves</string>
<string name="show_numbers_row">Zobraziť čísla na samostatnom riadku</string> <string name="show_numbers_row">Zobraziť čísla na samostatnom riadku</string>
<string name="start_sentences_capitalized">Začať vety veľkým písmenom</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji</string> <string name="emojis">Emoji</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Višina tipkovnice</string> <string name="keyboard_height">Višina tipkovnice</string>
<string name="show_key_borders">Prikaži meje ključa</string> <string name="show_key_borders">Prikaži meje ključa</string>
<string name="show_numbers_row">Prikažite številke v ločeni vrstici</string> <string name="show_numbers_row">Prikažite številke v ločeni vrstici</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emoji-ji</string> <string name="emojis">Emoji-ji</string>
</resources> </resources>

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Висина тастатуре</string> <string name="keyboard_height">Висина тастатуре</string>
<string name="show_key_borders">Прикажи ивице кључева</string> <string name="show_key_borders">Прикажи ивице кључева</string>
<string name="show_numbers_row">Прикажи бројеве у посебном реду</string> <string name="show_numbers_row">Прикажи бројеве у посебном реду</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Емоји</string> <string name="emojis">Емоји</string>
</resources> </resources>

View File

@ -15,7 +15,7 @@
<string name="clipboard_current">Nuvarande</string> <string name="clipboard_current">Nuvarande</string>
<string name="clipboard_pinned">Nålad</string> <string name="clipboard_pinned">Nålad</string>
<string name="add_new_item">Lägg till ett nytt objekt</string> <string name="add_new_item">Lägg till ett nytt objekt</string>
<string name="manage_clips">Du kan hantera eller addera nya klipp här för snabb tillgänglighet.</string> <string name="manage_clips">Du kan hantera eller lägga till klipp här för snabb åtkomst.</string>
<string name="clip_text">Klipp text</string> <string name="clip_text">Klipp text</string>
<string name="pin_text">Nåla text</string> <string name="pin_text">Nåla text</string>
<string name="text_pinned">Text har blivit nålad</string> <string name="text_pinned">Text har blivit nålad</string>
@ -34,6 +34,7 @@
<string name="keyboard_height">Tangentbordshöjd</string> <string name="keyboard_height">Tangentbordshöjd</string>
<string name="show_key_borders">Visa ramar runt tangenterna</string> <string name="show_key_borders">Visa ramar runt tangenterna</string>
<string name="show_numbers_row">Visa siffror på en separat rad</string> <string name="show_numbers_row">Visa siffror på en separat rad</string>
<string name="start_sentences_capitalized">Börja meningar med stor bokstav</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojier</string> <string name="emojis">Emojier</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Klavye yüksekliği</string> <string name="keyboard_height">Klavye yüksekliği</string>
<string name="show_key_borders">Tuş sınırlarını göster</string> <string name="show_key_borders">Tuş sınırlarını göster</string>
<string name="show_numbers_row">Sayıları ayrı bir satırda göster</string> <string name="show_numbers_row">Sayıları ayrı bir satırda göster</string>
<string name="start_sentences_capitalized">Cümlelere büyük harfle başla</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojiler</string> <string name="emojis">Emojiler</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">Висота клавіатури</string> <string name="keyboard_height">Висота клавіатури</string>
<string name="show_key_borders">Показати рамки клавіш</string> <string name="show_key_borders">Показати рамки клавіш</string>
<string name="show_numbers_row">Відображення чисел в окремому рядку</string> <string name="show_numbers_row">Відображення чисел в окремому рядку</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Емодзі</string> <string name="emojis">Емодзі</string>
<!-- <!--

View File

@ -34,6 +34,7 @@
<string name="keyboard_height">键盘高度</string> <string name="keyboard_height">键盘高度</string>
<string name="show_key_borders">显示键符边界</string> <string name="show_key_borders">显示键符边界</string>
<string name="show_numbers_row">在单独的行上显示数字</string> <string name="show_numbers_row">在单独的行上显示数字</string>
<string name="start_sentences_capitalized">句子开头使用大写字母</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">表情符号</string> <string name="emojis">表情符号</string>
<!-- <!--

View File

@ -35,6 +35,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -35,6 +35,7 @@
<string name="keyboard_height">Keyboard height</string> <string name="keyboard_height">Keyboard height</string>
<string name="show_key_borders">Show key borders</string> <string name="show_key_borders">Show key borders</string>
<string name="show_numbers_row">Show numbers on a separate row</string> <string name="show_numbers_row">Show numbers on a separate row</string>
<string name="start_sentences_capitalized">Start sentences with a capital letter</string>
<!-- Emojis --> <!-- Emojis -->
<string name="emojis">Emojis</string> <string name="emojis">Emojis</string>
<!-- <!--

View File

@ -0,0 +1,213 @@
<?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"
app:keyLabel="q"
app:keyWidth="9.05%p"
app:popupCharacters="1"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="1" />
<Key
app:keyLabel="w"
app:keyWidth="9.05%p"
app:popupCharacters="2"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="2" />
<Key
app:keyLabel="e"
app:keyWidth="9.05%p"
app:popupCharacters="éè3êëēę"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="3" />
<Key
app:keyLabel="r"
app:keyWidth="9.05%p"
app:popupCharacters="ř4ŕ"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="4" />
<Key
app:keyLabel="t"
app:keyWidth="9.05%p"
app:popupCharacters="5ť"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="5" />
<Key
app:keyLabel="y"
app:keyWidth="9.05%p"
app:popupCharacters="ý6ÿ¥"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="6" />
<Key
app:keyLabel="u"
app:keyWidth="9.05%p"
app:popupCharacters="űúù7ûüū"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="7" />
<Key
app:keyLabel="i"
app:keyWidth="9.05%p"
app:popupCharacters="íì8îïī"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="8" />
<Key
app:keyLabel="o"
app:keyWidth="9.05%p"
app:popupCharacters="őöøóôò9õō"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="9" />
<Key
app:keyLabel="p"
app:keyWidth="9.05%p"
app:popupCharacters="0"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="0" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="å"
app:keyWidth="9.05%p" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"
app:keyLabel="a"
app:keyWidth="9.05%p"
app:popupCharacters="áàâãäåāæą"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="s"
app:keyWidth="9.05%p"
app:popupCharacters="śßš"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="d"
app:keyWidth="9.05%p"
app:popupCharacters="ďđ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="f"
app:keyWidth="9.05%p"
app:popupCharacters="₣"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="g"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="h"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="j"
app:keyWidth="9.05%p" />
<Key app:keyLabel="k" />
<Key
app:keyLabel="l"
app:keyWidth="9.05%p"
app:popupCharacters="ĺľł"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="æ"
app:keyWidth="9.05%p"
app:popupCharacters="ä"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="ø"
app:keyWidth="9.05%p"
app:popupCharacters="ö"
app:popupKeyboard="@xml/keyboard_popup_template" />
</Row>
<Row>
<Key
app:code="-1"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_caps_outline_vector"
app:keyWidth="15%p" />
<Key
app:keyLabel="z"
app:popupCharacters="źžż"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="x" />
<Key
app:keyLabel="c"
app:popupCharacters="çčć¢"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="v" />
<Key app:keyLabel="b" />
<Key
app:keyLabel="n"
app:popupCharacters="ňńñ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="m" />
<Key
app:code="-5"
app:isRepeatable="true"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_clear_vector"
app:keyWidth="15%p" />
</Row>
<Row>
<Key
app:code="-2"
app:keyEdgeFlags="left"
app:keyLabel="123"
app:keyWidth="15%p" />
<Key
app:keyLabel=","
app:keyWidth="10%p" />
<Key
app:code="-6"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector"
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" />
<Key
app:code="-4"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_enter_vector"
app:keyWidth="15%p" />
</Row>
</Keyboard>

View File

@ -73,7 +73,7 @@
app:topSmallNumber="7" /> app:topSmallNumber="7" />
<Key <Key
app:keyLabel="i" app:keyLabel="i"
app:popupCharacters="íìî8įïī" app:popupCharacters="íìîį8ïī"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="8" /> app:topSmallNumber="8" />
<Key <Key
@ -159,17 +159,17 @@
app:code="-6" app:code="-6"
app:keyEdgeFlags="left" app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector" 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 <Key
app:code="32" app:code="32"
app:isRepeatable="true" app:isRepeatable="true"
app:keyWidth="40%p" /> app:keyWidth="40%p" />
<Key <Key
app:keyLabel="." app:keyLabel="."
app:keyWidth="10%p"
app:popupCharacters=",?!;:…" app:popupCharacters=",?!;:…"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template" />
app:keyWidth="10%p" />
<Key <Key
app:code="-4" app:code="-4"
app:keyEdgeFlags="right" app:keyEdgeFlags="right"

View File

@ -0,0 +1,213 @@
<?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"
app:keyLabel="q"
app:keyWidth="9.05%p"
app:popupCharacters="1"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="1" />
<Key
app:keyLabel="w"
app:keyWidth="9.05%p"
app:popupCharacters="2"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="2" />
<Key
app:keyLabel="e"
app:keyWidth="9.05%p"
app:popupCharacters="éè3êëēę"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="3" />
<Key
app:keyLabel="r"
app:keyWidth="9.05%p"
app:popupCharacters="ř4ŕ"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="4" />
<Key
app:keyLabel="t"
app:keyWidth="9.05%p"
app:popupCharacters="5ť"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="5" />
<Key
app:keyLabel="y"
app:keyWidth="9.05%p"
app:popupCharacters="ý6ÿ¥"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="6" />
<Key
app:keyLabel="u"
app:keyWidth="9.05%p"
app:popupCharacters="űúù7ûüū"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="7" />
<Key
app:keyLabel="i"
app:keyWidth="9.05%p"
app:popupCharacters="íì8îïī"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="8" />
<Key
app:keyLabel="o"
app:keyWidth="9.05%p"
app:popupCharacters="őöøóôò9õō"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="9" />
<Key
app:keyLabel="p"
app:keyWidth="9.05%p"
app:popupCharacters="0"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="0" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="å"
app:keyWidth="9.05%p" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"
app:keyLabel="a"
app:keyWidth="9.05%p"
app:popupCharacters="áàâãäåāæą"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="s"
app:keyWidth="9.05%p"
app:popupCharacters="śßš"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="d"
app:keyWidth="9.05%p"
app:popupCharacters="ďđ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="f"
app:keyWidth="9.05%p"
app:popupCharacters="₣"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="g"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="h"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="j"
app:keyWidth="9.05%p" />
<Key app:keyLabel="k" />
<Key
app:keyLabel="l"
app:keyWidth="9.05%p"
app:popupCharacters="ĺľł"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="ø"
app:keyWidth="9.05%p"
app:popupCharacters="ö"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="æ"
app:keyWidth="9.05%p"
app:popupCharacters="ä"
app:popupKeyboard="@xml/keyboard_popup_template" />
</Row>
<Row>
<Key
app:code="-1"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_caps_outline_vector"
app:keyWidth="15%p" />
<Key
app:keyLabel="z"
app:popupCharacters="źžż"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="x" />
<Key
app:keyLabel="c"
app:popupCharacters="çčć¢"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="v" />
<Key app:keyLabel="b" />
<Key
app:keyLabel="n"
app:popupCharacters="ňńñ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="m" />
<Key
app:code="-5"
app:isRepeatable="true"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_clear_vector"
app:keyWidth="15%p" />
</Row>
<Row>
<Key
app:code="-2"
app:keyEdgeFlags="left"
app:keyLabel="123"
app:keyWidth="15%p" />
<Key
app:keyLabel=","
app:keyWidth="10%p" />
<Key
app:code="-6"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector"
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" />
<Key
app:code="-4"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_enter_vector"
app:keyWidth="15%p" />
</Row>
</Keyboard>

View File

@ -0,0 +1,212 @@
<?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"
app:keyLabel="q"
app:keyWidth="9.05%p"
app:popupCharacters="1"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="1" />
<Key
app:keyLabel="w"
app:keyWidth="9.05%p"
app:popupCharacters="2"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="2" />
<Key
app:keyLabel="e"
app:keyWidth="9.05%p"
app:popupCharacters="éè3êëēę"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="3" />
<Key
app:keyLabel="r"
app:keyWidth="9.05%p"
app:popupCharacters="ř4ŕ"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="4" />
<Key
app:keyLabel="t"
app:keyWidth="9.05%p"
app:popupCharacters="5ť"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="5" />
<Key
app:keyLabel="y"
app:keyWidth="9.05%p"
app:popupCharacters="ý6ÿ¥"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="6" />
<Key
app:keyLabel="u"
app:keyWidth="9.05%p"
app:popupCharacters="űúù7ûüū"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="7" />
<Key
app:keyLabel="i"
app:keyWidth="9.05%p"
app:popupCharacters="íì8îïī"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="8" />
<Key
app:keyLabel="o"
app:keyWidth="9.05%p"
app:popupCharacters="őöøóôò9õō"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="9" />
<Key
app:keyLabel="p"
app:keyWidth="9.05%p"
app:popupCharacters="0"
app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="0" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="å"
app:keyWidth="9.05%p" />
</Row>
<Row>
<Key
app:keyEdgeFlags="left"
app:keyLabel="a"
app:keyWidth="9.05%p"
app:popupCharacters="áàâãäåāæą"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="s"
app:keyWidth="9.05%p"
app:popupCharacters="śßš"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="d"
app:keyWidth="9.05%p"
app:popupCharacters="ďđ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="f"
app:keyWidth="9.05%p"
app:popupCharacters="₣"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="g"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="h"
app:keyWidth="9.05%p" />
<Key
app:keyLabel="j"
app:keyWidth="9.05%p" />
<Key app:keyLabel="k" />
<Key
app:keyLabel="l"
app:keyWidth="9.05%p"
app:popupCharacters="ĺľł"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyLabel="ö"
app:keyWidth="9.05%p"
app:popupCharacters="Ͽ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key
app:keyEdgeFlags="right"
app:keyLabel="ä"
app:keyWidth="9.05%p"
app:popupCharacters="æ"
app:popupKeyboard="@xml/keyboard_popup_template" />
</Row>
<Row>
<Key
app:code="-1"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_caps_outline_vector"
app:keyWidth="15%p" />
<Key
app:keyLabel="z"
app:popupCharacters="źžż"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="x" />
<Key
app:keyLabel="c"
app:popupCharacters="çčć¢"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="v" />
<Key app:keyLabel="b" />
<Key
app:keyLabel="n"
app:popupCharacters="ňńñ"
app:popupKeyboard="@xml/keyboard_popup_template" />
<Key app:keyLabel="m" />
<Key
app:code="-5"
app:isRepeatable="true"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_clear_vector"
app:keyWidth="15%p" />
</Row>
<Row>
<Key
app:code="-2"
app:keyEdgeFlags="left"
app:keyLabel="123"
app:keyWidth="15%p" />
<Key
app:keyLabel=","
app:keyWidth="10%p" />
<Key
app:code="-6"
app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector"
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" />
<Key
app:code="-4"
app:keyEdgeFlags="right"
app:keyIcon="@drawable/ic_enter_vector"
app:keyWidth="15%p" />
</Row>
</Keyboard>

View File

@ -73,12 +73,12 @@
app:topSmallNumber="7" /> app:topSmallNumber="7" />
<Key <Key
app:keyLabel="ı" app:keyLabel="ı"
app:popupCharacters="íìî8ïī" app:popupCharacters="íì8îïī"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="8" /> app:topSmallNumber="8" />
<Key <Key
app:keyLabel="o" app:keyLabel="o"
app:popupCharacters="őöóôòõ9ō" app:popupCharacters="őöóô9òõō"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template"
app:topSmallNumber="9" /> app:topSmallNumber="9" />
<Key <Key
@ -167,17 +167,17 @@
app:code="-6" app:code="-6"
app:keyEdgeFlags="left" app:keyEdgeFlags="left"
app:keyIcon="@drawable/ic_emoji_emotions_outline_vector" 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 <Key
app:code="32" app:code="32"
app:isRepeatable="true" app:isRepeatable="true"
app:keyWidth="40%p" /> app:keyWidth="40%p" />
<Key <Key
app:keyLabel="." app:keyLabel="."
app:keyWidth="10%p"
app:popupCharacters=",?!;:…" app:popupCharacters=",?!;:…"
app:popupKeyboard="@xml/keyboard_popup_template" app:popupKeyboard="@xml/keyboard_popup_template" />
app:keyWidth="10%p" />
<Key <Key
app:code="-4" app:code="-4"
app:keyEdgeFlags="right" app:keyEdgeFlags="right"