diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt index df9aa83..8b93961 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt @@ -44,6 +44,7 @@ class SettingsActivity : SimpleActivity() { setupKeyboardLanguage() setupKeyboardHeightMultiplier() setupShowClipboardContent() + setupSentencesCapitalization() setupShowNumbersRow() updateTextColors(settings_nested_scrollview) @@ -160,6 +161,15 @@ class SettingsActivity : SimpleActivity() { 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() { settings_show_numbers_row.isChecked = config.showNumbersRow settings_show_numbers_row_holder.setOnClickListener { diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt index 8ebf81f..06cb020 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Config.kt @@ -17,6 +17,10 @@ class Config(context: Context) : BaseConfig(context) { get() = prefs.getBoolean(SHOW_POPUP_ON_KEYPRESS, true) 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 get() = prefs.getBoolean(SHOW_KEY_BORDERS, false) set(showKeyBorders) = prefs.edit().putBoolean(SHOW_KEY_BORDERS, showKeyBorders).apply() diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt index cc93269..a49ebf8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt @@ -1,12 +1,61 @@ package com.simplemobiletools.keyboard.helpers import android.content.Context -import androidx.annotation.StringRes -import com.simplemobiletools.keyboard.R +import com.simplemobiletools.keyboard.extensions.config +import com.simplemobiletools.keyboard.helpers.MyKeyboard.Companion.KEYCODE_SPACE -const val SHIFT_OFF = 0 -const val SHIFT_ON_ONE_CHAR = 1 -const val SHIFT_ON_PERMANENT = 2 +enum class ShiftState { + OFF, + ON_ONE_CHAR, + ON_PERMANENT; + + companion object { + private val endOfSentenceChars: List = listOf('.', '?', '!') + + fun getDefaultShiftState(context: Context): ShiftState { + return when (context.config.enableSentencesCapitalization) { + true -> ON_ONE_CHAR + else -> OFF + } + } + + fun getShiftStateForText(context: Context, newText: String?): ShiftState { + if (!context.config.enableSentencesCapitalization) { + return OFF + } + + val twoLastSymbols = newText?.takeLast(2) + return when { + shouldCapitalizeSentence(previousChar = twoLastSymbols?.getOrNull(0), currentChar = twoLastSymbols?.getOrNull(1)) -> { + ON_ONE_CHAR + } + else -> { + OFF + } + } + } + + fun getCapitalizationOnDelete(context: Context, text: CharSequence?): ShiftState { + if (!context.config.enableSentencesCapitalization) { + return OFF + } + + return if (text.isNullOrEmpty() || shouldCapitalizeSentence(currentChar = text.last(), previousChar = text.getOrNull(text.lastIndex - 1))) { + ON_ONE_CHAR + } else { + OFF + } + } + + private fun shouldCapitalizeSentence(previousChar: Char?, currentChar: Char?): Boolean { + if (previousChar == null || currentChar == null) { + return false + } + + return currentChar.code == KEYCODE_SPACE && endOfSentenceChars.contains(previousChar) + } + } +} // limit the count of alternative characters that show up at long pressing a key const val MAX_KEYS_PER_MINI_ROW = 9 @@ -15,6 +64,7 @@ const val MAX_KEYS_PER_MINI_ROW = 9 const val VIBRATE_ON_KEYPRESS = "vibrate_on_keypress" const val SHOW_POPUP_ON_KEYPRESS = "show_popup_on_keypress" 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 KEYBOARD_LANGUAGE = "keyboard_language" const val HEIGHT_MULTIPLIER = "height_multiplier" diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt index b2c77c0..18bb355 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/MyKeyboard.kt @@ -34,7 +34,7 @@ class MyKeyboard { var mKeyboardHeightMultiplier: Float = 1F /** 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 */ var mHeight = 0 @@ -201,8 +201,14 @@ class MyKeyboard { a.recycle() 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) + if (label.isNotEmpty() && code == 0) { + code = label[0].code + } + popupCharacters = a.getText(R.styleable.MyKeyboard_Key_popupCharacters) popupResId = a.getResourceId(R.styleable.MyKeyboard_Key_popupKeyboard, 0) repeatable = a.getBoolean(R.styleable.MyKeyboard_Key_isRepeatable, false) @@ -213,12 +219,9 @@ class MyKeyboard { secondaryIcon = a.getDrawable(R.styleable.MyKeyboard_Key_secondaryKeyIcon) secondaryIcon?.setBounds(0, 0, secondaryIcon!!.intrinsicWidth, secondaryIcon!!.intrinsicHeight) - label = a.getText(R.styleable.MyKeyboard_Key_keyLabel) ?: "" topSmallNumber = a.getString(R.styleable.MyKeyboard_Key_topSmallNumber) ?: "" - if (label.isNotEmpty() && code != KEYCODE_MODE_CHANGE && code != KEYCODE_SHIFT) { - code = label[0].code - } + a.recycle() } @@ -255,13 +258,14 @@ class MyKeyboard { * @param enterKeyType determines what icon should we show on Enter key */ @JvmOverloads - constructor(context: Context, @XmlRes xmlLayoutResId: Int, enterKeyType: Int) { + constructor(context: Context, @XmlRes xmlLayoutResId: Int, enterKeyType: Int, shiftState: ShiftState = ShiftState.OFF) { mDisplayWidth = context.resources.displayMetrics.widthPixels mDefaultHorizontalGap = 0 mDefaultWidth = mDisplayWidth / 10 mDefaultHeight = mDefaultWidth mKeyboardHeightMultiplier = getKeyboardHeightMultiplier(context.config.keyboardHeightMultiplier) mKeys = ArrayList() + mShiftState = shiftState mEnterKeyType = enterKeyType loadKeyboard(context, context.resources.getXml(xmlLayoutResId)) } @@ -312,12 +316,11 @@ class MyKeyboard { mRows.add(row) } - fun setShifted(shiftState: Int): Boolean { + fun setShifted(shiftState: ShiftState): Boolean { if (this.mShiftState != shiftState) { this.mShiftState = shiftState return true } - return false } diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt index 1aad86d..2c6faa8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt @@ -20,7 +20,8 @@ import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.extensions.config import com.simplemobiletools.keyboard.helpers.* import com.simplemobiletools.keyboard.views.MyKeyboardView -import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* +import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.keyboard_holder +import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.keyboard_view // based on https://www.androidauthority.com/lets-build-custom-keyboard-android-832362/ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionListener, SharedPreferences.OnSharedPreferenceChangeListener { @@ -41,7 +42,6 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL override fun onInitializeInterface() { super.onInitializeInterface() - keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType) getSharedPrefs().registerOnSharedPreferenceChangeListener(this) } @@ -65,8 +65,7 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL super.onStartInput(attribute, restarting) inputTypeClass = attribute!!.inputType and TYPE_MASK_CLASS enterKeyType = attribute.imeOptions and (IME_MASK_ACTION or IME_FLAG_NO_ENTER_ACTION) - - keyboard = getKeyBoard() + keyboard = createNewKeyboard() keyboardView?.setKeyboard(keyboard!!) keyboardView?.setEditorInfo(attribute) updateShiftKeyState() @@ -75,9 +74,9 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL private fun updateShiftKeyState() { if (keyboardMode == KEYBOARD_LETTERS) { val editorInfo = currentInputEditorInfo - if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != SHIFT_ON_PERMANENT) { + if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != ShiftState.ON_PERMANENT) { if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) { - keyboard?.setShifted(SHIFT_ON_ONE_CHAR) + keyboard?.setShifted(ShiftState.ON_ONE_CHAR) keyboardView?.invalidateAllKeys() } } @@ -96,8 +95,10 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL when (code) { MyKeyboard.KEYCODE_DELETE -> { - if (keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR) { - keyboard!!.mShiftState = SHIFT_OFF + + if (keyboard!!.mShiftState != ShiftState.ON_PERMANENT) { + val extractedText = inputConnection.getTextBeforeCursor(3, 0)?.dropLast(1) + keyboard!!.setShifted(ShiftState.getCapitalizationOnDelete(context = this, text = extractedText)) } val selectedText = inputConnection.getSelectedText(0) @@ -109,13 +110,14 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL } keyboardView!!.invalidateAllKeys() } + MyKeyboard.KEYCODE_SHIFT -> { if (keyboardMode == KEYBOARD_LETTERS) { when { - keyboard!!.mShiftState == SHIFT_ON_PERMANENT -> keyboard!!.mShiftState = SHIFT_OFF - System.currentTimeMillis() - lastShiftPressTS < SHIFT_PERM_TOGGLE_SPEED -> keyboard!!.mShiftState = SHIFT_ON_PERMANENT - keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR -> keyboard!!.mShiftState = SHIFT_OFF - keyboard!!.mShiftState == SHIFT_OFF -> keyboard!!.mShiftState = SHIFT_ON_ONE_CHAR + keyboard!!.mShiftState == ShiftState.ON_PERMANENT -> keyboard!!.mShiftState = ShiftState.OFF + System.currentTimeMillis() - lastShiftPressTS < SHIFT_PERM_TOGGLE_SPEED -> keyboard!!.mShiftState = ShiftState.ON_PERMANENT + keyboard!!.mShiftState == ShiftState.ON_ONE_CHAR -> keyboard!!.mShiftState = ShiftState.OFF + keyboard!!.mShiftState == ShiftState.OFF -> keyboard!!.mShiftState = ShiftState.ON_ONE_CHAR } lastShiftPressTS = System.currentTimeMillis() @@ -132,6 +134,7 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL } keyboardView!!.invalidateAllKeys() } + MyKeyboard.KEYCODE_ENTER -> { val imeOptionsActionId = getImeOptionsActionId() if (imeOptionsActionId != IME_ACTION_NONE) { @@ -139,8 +142,14 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL } else { inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)) inputConnection.sendKeyEvent(KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER)) + + if (config.enableSentencesCapitalization) { + keyboard!!.setShifted(ShiftState.ON_ONE_CHAR) + keyboardView!!.invalidateAllKeys() + } } } + MyKeyboard.KEYCODE_MODE_CHANGE -> { val keyboardXml = if (keyboardMode == KEYBOARD_LETTERS) { keyboardMode = KEYBOARD_SYMBOLS @@ -152,12 +161,16 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL keyboard = MyKeyboard(this, keyboardXml, enterKeyType) keyboardView!!.setKeyboard(keyboard!!) } + MyKeyboard.KEYCODE_EMOJI -> { keyboardView?.openEmojiPalette() } + else -> { 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) } @@ -165,35 +178,41 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL // 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. if (keyboardMode != KEYBOARD_LETTERS && code == MyKeyboard.KEYCODE_SPACE) { - val originalText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text ?: return inputConnection.commitText(codeChar.toString(), 1) val newText = inputConnection.getExtractedText(ExtractedTextRequest(), 0)?.text - switchToLetters = originalText != newText + if (originalText != newText) { + switchToLetters = true + } } else { inputConnection.commitText(codeChar.toString(), 1) } - if (keyboard!!.mShiftState == SHIFT_ON_ONE_CHAR && keyboardMode == KEYBOARD_LETTERS) { - keyboard!!.mShiftState = SHIFT_OFF + if (keyboardMode == KEYBOARD_LETTERS && keyboard!!.mShiftState != ShiftState.ON_PERMANENT) { + keyboard!!.setShifted(ShiftState.getShiftStateForText(this, newText = "$originalText$codeChar")) keyboardView!!.invalidateAllKeys() } + } } - if (code != MyKeyboard.KEYCODE_SHIFT) { + if (code != MyKeyboard.KEYCODE_SHIFT && config.enableSentencesCapitalization) { updateShiftKeyState() } } override fun onActionUp() { if (switchToLetters) { + // TODO: Change keyboardMode to enum class keyboardMode = KEYBOARD_LETTERS - keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType) + val text = currentInputConnection?.getExtractedText(ExtractedTextRequest(), 0)?.text + val newShiftState = ShiftState.getShiftStateForText(this, text?.toString().orEmpty()) + + keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType, shiftState = newShiftState) val editorInfo = currentInputEditorInfo - if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != SHIFT_ON_PERMANENT) { + if (editorInfo != null && editorInfo.inputType != InputType.TYPE_NULL && keyboard?.mShiftState != ShiftState.ON_PERMANENT) { if (currentInputConnection.getCursorCapsMode(editorInfo.inputType) != 0) { - keyboard?.setShifted(SHIFT_ON_ONE_CHAR) + keyboard?.setShifted(ShiftState.ON_ONE_CHAR) } } @@ -215,32 +234,37 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL } override fun reloadKeyboard() { - val keyboard = getKeyBoard() + val keyboard = createNewKeyboard() this.keyboard = keyboard keyboardView?.setKeyboard(keyboard) } - private fun getKeyBoard(): MyKeyboard { + private fun createNewKeyboard(): MyKeyboard { val keyboardXml = when (inputTypeClass) { TYPE_CLASS_NUMBER -> { keyboardMode = KEYBOARD_NUMBERS R.xml.keys_numbers } + TYPE_CLASS_PHONE -> { keyboardMode = KEYBOARD_PHONE R.xml.keys_phone } + TYPE_CLASS_DATETIME -> { keyboardMode = KEYBOARD_SYMBOLS R.xml.keys_symbols } + else -> { keyboardMode = KEYBOARD_LETTERS getKeyboardLayoutXML() } } - return MyKeyboard(this, keyboardXml, enterKeyType) + return MyKeyboard( + context = this, xmlLayoutResId = keyboardXml, enterKeyType = enterKeyType, shiftState = ShiftState.getDefaultShiftState(this) + ) } override fun onUpdateSelection(oldSelStart: Int, oldSelEnd: Int, newSelStart: Int, newSelEnd: Int, candidatesStart: Int, candidatesEnd: Int) { diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index dd1f520..76b4125 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -455,7 +455,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut * @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 */ - private fun setShifted(shiftState: Int) { + private fun setShifted(shiftState: ShiftState) { if (mKeyboard?.setShifted(shiftState) == true) { invalidateAllKeys() } @@ -466,7 +466,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut * @return true if the shift is in a pressed state, false otherwise */ 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) { @@ -479,7 +479,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private fun adjustCase(label: CharSequence): CharSequence? { var newLabel: CharSequence? = label - if (newLabel != null && newLabel.isNotEmpty() && mKeyboard!!.mShiftState > SHIFT_OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) { + if (newLabel != null && newLabel.isNotEmpty() && mKeyboard!!.mShiftState != ShiftState.OFF && newLabel.length < 3 && Character.isLowerCase(newLabel[0])) { newLabel = newLabel.toString().uppercase(Locale.getDefault()) } return newLabel @@ -569,6 +569,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut for (i in 0 until keyCount) { val key = keys[i] val code = key.code + + // TODO: Space key background on a KEYBOARD_PHONE should not be applied setupKeyBackground(key, code, canvas) // Switch the character to uppercase if shift is pressed @@ -602,8 +604,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } else if (key.icon != null && mKeyboard != null) { if (code == KEYCODE_SHIFT) { val drawableId = when (mKeyboard!!.mShiftState) { - SHIFT_OFF -> R.drawable.ic_caps_outline_vector - SHIFT_ON_ONE_CHAR -> R.drawable.ic_caps_vector + ShiftState.OFF -> R.drawable.ic_caps_outline_vector + ShiftState.ON_ONE_CHAR -> R.drawable.ic_caps_vector else -> R.drawable.ic_caps_underlined_vector } key.icon = resources.getDrawable(drawableId) @@ -674,9 +676,9 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } private fun setupKeyBackground(key: MyKeyboard.Key, keyCode: Int, canvas: Canvas) { - val keyBackground = when (keyCode) { - KEYCODE_SPACE -> getSpaceKeyBackground() - KEYCODE_ENTER -> getEnterKeyBackground() + val keyBackground = when { + keyCode == KEYCODE_SPACE && key.label.isBlank() -> getSpaceKeyBackground() + keyCode == KEYCODE_ENTER -> getEnterKeyBackground() else -> mKeyBackground } @@ -1129,7 +1131,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mMiniKeyboardSelectedKeyIndex = selectedKeyIndex 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) mPopupKeyboard.contentView = mMiniKeyboardContainer mPopupKeyboard.width = mMiniKeyboardContainer!!.measuredWidth diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4ec8767..4a1cf2c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -41,13 +41,32 @@ - + android:orientation="vertical"> + + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 1230d13..9e56356 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -190,6 +190,7 @@ android:text="@string/show_clipboard_content" /> + + + + + + + ارتفاع لوحة المفاتيح إظهار حدود المفاتيح إظهار الأرقام في صف منفصل + بدء الجمل بحرف كبير الرموز التعبيرية - \ No newline at end of file + diff --git a/app/src/main/res/values-be/strings.xml b/app/src/main/res/values-be/strings.xml index 50c6b26..8b584fb 100644 --- a/app/src/main/res/values-be/strings.xml +++ b/app/src/main/res/values-be/strings.xml @@ -34,10 +34,11 @@ Вышыня клавіятуры Паказаць контуры клавіш Паказаць лічбы ў асобным радку + Start sentences with a capital letter Эмодзі - \ No newline at end of file + diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index dbe77ff..cc35140 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -34,10 +34,11 @@ Височина на клавиатурата Show key borders Show numbers on a separate row + Start sentences with a capital letter Емоджита - \ No newline at end of file + diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 50061e3..5cb2829 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -34,10 +34,11 @@ Alçada del teclat Mostra les vores de les tecles Mostra els números en una fila separada + Comença les frases amb una lletra majúscula Emojis - \ No newline at end of file + diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml index f2a5cd5..9499346 100644 --- a/app/src/main/res/values-ckb/strings.xml +++ b/app/src/main/res/values-ckb/strings.xml @@ -34,6 +34,7 @@ قەبارەی تەختەکلیل لێواری دوگمەکان پیشاندانی لیستی ژمارەکان بەجیا + Start sentences with a capital letter خەندەکان diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 16c4eb4..db987b0 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -34,10 +34,11 @@ Výška klávesnice Zobrazit ohraničení kláves Zobrazit čísla na samostatném řádku + Start sentences with a capital letter Emotikony - \ No newline at end of file + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index e5c4ae9..3fbab32 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis Emojis - \ No newline at end of file + diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 301cf5d..7e2ac5a 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -34,6 +34,7 @@ Ύψος πληκτρολογίου Εμφάνιση ορίων πλήκτρου Εμφάνιση αριθμών σε ξεχωριστή γραμμή + Start sentences with a capital letter Emojis Emojis Emoticonos - \ No newline at end of file + diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index b66e639..95c9690 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -34,10 +34,11 @@ Klaviatuuri kõrgus Näita klahvide ääriseid Näita numbreid eraldi real + Start sentences with a capital letter Emojid - \ No newline at end of file + diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index faf1cc0..f934aac 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -34,10 +34,11 @@ Näppäimistön korkeus Näytä näppäinten ääriviivat Näytä erillinen numerorivi + Start sentences with a capital letter Emojit - \ No newline at end of file + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index baa2d3b..b6d1b0f 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -34,10 +34,11 @@ Hauteur du clavier Afficher les bordures des touches Afficher les chiffres sur une ligne distincte + Start sentences with a capital letter Émojis - \ No newline at end of file + diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 2b192c6..9446f78 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -34,10 +34,11 @@ Altura do teclado Mostralos bordes das teclas Mostralos números nunha fila afastada + Start sentences with a capital letter Emoticona - \ No newline at end of file + diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 0065f8f..592ec63 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -34,10 +34,11 @@ Visina tipkovnice Prikaži obrube ključeva Pokaži brojeve u zasebnom retku + Počni rečenice s velikim slovom Emoji - \ No newline at end of file + diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 760d391..e1821df 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -34,10 +34,11 @@ Billentyűzet magassága Gombszélek megjelenítése Számok megjelenítése külön sorban + Start sentences with a capital letter Emojik - \ No newline at end of file + diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index f05b2bc..705987e 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -34,10 +34,11 @@ Tinggi papan tik Tampilkan garis luar tombol Tampilkan nomor di baris terpisah + Start sentences with a capital letter Emoji - \ No newline at end of file + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f8108ac..267b3d6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -34,10 +34,11 @@ Altezza della tastiera Mostra i bordi dei tasti Mostra i numeri su una riga separata + Start sentences with a capital letter Emoji - \ No newline at end of file + diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 89d87ec..e7a984c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis 絵文字 - \ No newline at end of file + diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 537579d..ae49ca6 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis ഇമോജികൾ diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index b26fb32..14ce48a 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis Emoji\'s - \ No newline at end of file + diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml index 514b451..4860f70 100644 --- a/app/src/main/res/values-pa-rPK/strings.xml +++ b/app/src/main/res/values-pa-rPK/strings.xml @@ -34,6 +34,7 @@ کیبورڈ دی اُچائی کنجیاں دے حد ویکھو وکھری قطار وچ نمبر ویکھو + Start sentences with a capital letter ایموجیاں diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index f7ca403..47e09d3 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -34,6 +34,7 @@ ਕੀਬੋਰਡ ਦੀ ਉਚਾਈ Show key borders Show numbers on a separate row + Start sentences with a capital letter ਇਮੋਜੀਆਂ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index b45c3c7..ff6fedd 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -34,10 +34,11 @@ Wysokość klawiatury Pokazuj obramowania klawiszy Pokazuj cyfry w osobnym wierszu + Zaczynaj zdania wielką literą Emoji - \ No newline at end of file + diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index f87ceff..ee694ef 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis Emojis - \ No newline at end of file + diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 219da08..410545a 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -34,10 +34,11 @@ Înălțime tastatură Show key borders Show numbers on a separate row + Start sentences with a capital letter Emoticoane - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 930b9fe..ffe904b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -34,10 +34,11 @@ Высота клавиатуры Показывать границы кнопок Показывать цифры отдельной строкой + Начинать предложения с заглавной буквы Эмодзи - \ No newline at end of file + diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 3e560ab..6332031 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -34,6 +34,7 @@ Výška klávesnice Zobraziť hranice kláves Zobraziť čísla na samostatnom riadku + Začať vety veľkým písmenom Emoji Emoji-ji - \ No newline at end of file + diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index efc5135..1a790f3 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -34,6 +34,7 @@ Висина тастатуре Прикажи ивице кључева Прикажи бројеве у посебном реду + Start sentences with a capital letter Емоји diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 0a87c9e..9399c1c 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -34,10 +34,11 @@ Tangentbordshöjd Visa ramar runt tangenterna Visa siffror på en separat rad + Start sentences with a capital letter Emojier - \ No newline at end of file + diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index b26fb32..14ce48a 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -34,6 +34,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis Emojiler - \ No newline at end of file + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index c0eb871..dc8cb25 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -34,10 +34,11 @@ Висота клавіатури Показати рамки клавіш Відображення чисел в окремому рядку + Start sentences with a capital letter Емодзі - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index cd680f4..cbc7f2c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -34,10 +34,11 @@ 键盘高度 显示键符边界 在单独的行上显示数字 + 句子开头使用大写字母 表情符号 - \ No newline at end of file + diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 37e420e..f9db284 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -35,6 +35,7 @@ Keyboard height Show key borders Show numbers on a separate row + Start sentences with a capital letter Emojis Emojis