From 05fe9debc3329be6ae93384d04e4185e6b41ea48 Mon Sep 17 00:00:00 2001 From: Naveen Date: Mon, 30 Jan 2023 17:52:27 +0530 Subject: [PATCH 1/9] Use proper width for emoji key --- app/src/main/res/xml/keys_letters_bengali.xml | 2 +- app/src/main/res/xml/keys_letters_bulgarian.xml | 2 +- app/src/main/res/xml/keys_letters_english_dvorak.xml | 2 +- app/src/main/res/xml/keys_letters_english_qwerty.xml | 2 +- app/src/main/res/xml/keys_letters_english_qwertz.xml | 2 +- app/src/main/res/xml/keys_letters_french.xml | 2 +- app/src/main/res/xml/keys_letters_german.xml | 2 +- app/src/main/res/xml/keys_letters_greek.xml | 2 +- app/src/main/res/xml/keys_letters_lithuanian.xml | 2 +- app/src/main/res/xml/keys_letters_romanian.xml | 2 +- app/src/main/res/xml/keys_letters_russian.xml | 2 +- app/src/main/res/xml/keys_letters_slovenian.xml | 2 +- app/src/main/res/xml/keys_letters_spanish_qwerty.xml | 2 +- app/src/main/res/xml/keys_letters_turkish_q.xml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/xml/keys_letters_bengali.xml b/app/src/main/res/xml/keys_letters_bengali.xml index d067c9c8..7c83c214 100644 --- a/app/src/main/res/xml/keys_letters_bengali.xml +++ b/app/src/main/res/xml/keys_letters_bengali.xml @@ -162,7 +162,7 @@ app:code="-6" app:keyEdgeFlags="left" app:keyIcon="@drawable/ic_emoji_emotions_outline_vector" - app:keyWidth="8%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> + app:keyWidth="10%p" /> Date: Mon, 30 Jan 2023 17:54:20 +0530 Subject: [PATCH 2/9] Add "Show key borders" preference --- .../keyboard/activities/SettingsActivity.kt | 9 +++++++++ .../simplemobiletools/keyboard/helpers/Config.kt | 4 ++++ .../keyboard/helpers/Constants.kt | 1 + app/src/main/res/layout/activity_settings.xml | 15 +++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt index 18fe50aa..855d4789 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/activities/SettingsActivity.kt @@ -40,6 +40,7 @@ class SettingsActivity : SimpleActivity() { setupManageClipboardItems() setupVibrateOnKeypress() setupShowPopupOnKeypress() + setupShowKeyBorders() setupKeyboardLanguage() setupKeyboardHeightMultiplier() @@ -106,6 +107,14 @@ class SettingsActivity : SimpleActivity() { } } + private fun setupShowKeyBorders() { + settings_show_key_borders.isChecked = config.showKeyBorders + settings_show_key_borders_holder.setOnClickListener { + settings_show_key_borders.toggle() + config.showKeyBorders = settings_show_key_borders.isChecked + } + } + private fun setupKeyboardLanguage() { settings_keyboard_language.text = getKeyboardLanguageText(config.keyboardLanguage) settings_keyboard_language_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 175d34ed..70fc30e9 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 showKeyBorders: Boolean + get() = prefs.getBoolean(SHOW_KEY_BORDERS, false) + set(showKeyBorders) = prefs.edit().putBoolean(SHOW_KEY_BORDERS, showKeyBorders).apply() + var lastExportedClipsFolder: String get() = prefs.getString(LAST_EXPORTED_CLIPS_FOLDER, "")!! set(lastExportedClipsFolder) = prefs.edit().putString(LAST_EXPORTED_CLIPS_FOLDER, lastExportedClipsFolder).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 b2b4f21e..600ed27e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/helpers/Constants.kt @@ -10,6 +10,7 @@ const val MAX_KEYS_PER_MINI_ROW = 9 // shared prefs 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 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/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 12ebb51b..35ec90b8 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -161,6 +161,21 @@ + + + + + + Date: Tue, 31 Jan 2023 20:30:55 +0530 Subject: [PATCH 3/9] Use proper space width in symbols layout --- app/src/main/res/xml/keys_symbols.xml | 2 +- app/src/main/res/xml/keys_symbols_shift.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/xml/keys_symbols.xml b/app/src/main/res/xml/keys_symbols.xml index 490a4429..6b136eb4 100755 --- a/app/src/main/res/xml/keys_symbols.xml +++ b/app/src/main/res/xml/keys_symbols.xml @@ -64,7 +64,7 @@ + app:keyWidth="50%p" /> diff --git a/app/src/main/res/xml/keys_symbols_shift.xml b/app/src/main/res/xml/keys_symbols_shift.xml index 40cd49fb..4b5b0e62 100755 --- a/app/src/main/res/xml/keys_symbols_shift.xml +++ b/app/src/main/res/xml/keys_symbols_shift.xml @@ -64,7 +64,7 @@ + app:keyWidth="50%p" /> From d3bf5f0d72dadf74e15d2605e31b2a113ac541ea Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 31 Jan 2023 21:19:07 +0530 Subject: [PATCH 4/9] Implement key borders --- .../keyboard/views/MyKeyboardView.kt | 163 ++++++++++++------ .../res/drawable/key_background_outlined.xml | 9 + .../keyboard_enter_background_outlined.xml | 9 + .../keyboard_key_selector_outlined.xml | 6 + ...ard_space_background_material_outlined.xml | 23 +++ 5 files changed, 156 insertions(+), 54 deletions(-) create mode 100644 app/src/main/res/drawable/key_background_outlined.xml create mode 100644 app/src/main/res/drawable/keyboard_enter_background_outlined.xml create mode 100644 app/src/main/res/drawable/keyboard_key_selector_outlined.xml create mode 100644 app/src/main/res/drawable/keyboard_space_background_material_outlined.xml 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 a40b9b61..1eb8d626 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -9,10 +9,7 @@ import android.content.Context import android.content.Intent import android.graphics.* import android.graphics.Paint.Align -import android.graphics.drawable.ColorDrawable -import android.graphics.drawable.Drawable -import android.graphics.drawable.LayerDrawable -import android.graphics.drawable.RippleDrawable +import android.graphics.drawable.* import android.os.Handler import android.os.Looper import android.os.Message @@ -280,23 +277,9 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mPrimaryColor = context.getProperPrimaryColor() val strokeColor = context.getStrokeColor() - val toolbarColor = if (context.config.isUsingSystemTheme) { - resources.getColor(R.color.you_keyboard_toolbar_color, context.theme) - } else { - mBackgroundColor.darkenColor() - } - - val darkerColor = if (context.config.isUsingSystemTheme) { - resources.getColor(R.color.you_keyboard_background_color, context.theme) - } else { - mBackgroundColor.darkenColor(2) - } - - val miniKeyboardBackgroundColor = if (context.config.isUsingSystemTheme) { - resources.getColor(R.color.you_keyboard_toolbar_color, context.theme) - } else { - mBackgroundColor.darkenColor(4) - } + val toolbarColor = getToolbarColor() + val darkerColor = getKeyboardBackgroundColor() + val miniKeyboardBackgroundColor = getToolbarColor(4) if (changedView == mini_keyboard_view) { val previewBackground = background as LayerDrawable @@ -563,36 +546,10 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut for (i in 0 until keyCount) { val key = keys[i] val code = key.code - var keyBackground = mKeyBackground - if (code == KEYCODE_SPACE) { - keyBackground = if (context.config.isUsingSystemTheme) { - resources.getDrawable(R.drawable.keyboard_space_background_material, context.theme) - } else { - resources.getDrawable(R.drawable.keyboard_space_background, context.theme) - } - } else if (code == KEYCODE_ENTER) { - keyBackground = resources.getDrawable(R.drawable.keyboard_enter_background, context.theme) - } + setupKeyBackground(key, code, canvas) // Switch the character to uppercase if shift is pressed val label = adjustCase(key.label)?.toString() - val bounds = keyBackground!!.bounds - if (key.width != bounds.right || key.height != bounds.bottom) { - keyBackground.setBounds(0, 0, key.width, key.height) - } - - keyBackground.state = when { - key.pressed -> intArrayOf(android.R.attr.state_pressed) - key.focused -> intArrayOf(android.R.attr.state_focused) - else -> intArrayOf() - } - - if (key.focused || code == KEYCODE_ENTER) { - keyBackground.applyColorFilter(mPrimaryColor) - } - - canvas.translate(key.x.toFloat(), key.y.toFloat()) - keyBackground.draw(canvas) if (label?.isNotEmpty() == true) { // For characters, use large font. For labels like "Done", use small font. if (label.length > 1) { @@ -656,6 +613,57 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mDirtyRect.setEmpty() } + private fun setupKeyBackground(key: MyKeyboard.Key, keyCode: Int, canvas: Canvas) { + val showKeyBorders = context.config.showKeyBorders + val drawableId = when (keyCode) { + KEYCODE_SPACE -> if (context.config.isUsingSystemTheme) { + if (showKeyBorders) { + R.drawable.keyboard_space_background_material_outlined + } else { + R.drawable.keyboard_space_background_material + } + } else { + if (showKeyBorders) { + R.drawable.keyboard_key_selector_outlined + } else { + R.drawable.keyboard_space_background + } + } + KEYCODE_ENTER -> if (showKeyBorders) { + R.drawable.keyboard_enter_background_outlined + } else { + R.drawable.keyboard_enter_background + } + else -> if (showKeyBorders) { + R.drawable.keyboard_key_selector_outlined + } else { + R.drawable.keyboard_key_selector + } + } + val keyBackground = resources.getDrawable(drawableId, context.theme) + + val bounds = keyBackground!!.bounds + if (key.width != bounds.right || key.height != bounds.bottom) { + keyBackground.setBounds(0, 0, key.width, key.height) + } + + keyBackground.state = when { + key.pressed -> intArrayOf(android.R.attr.state_pressed) + key.focused -> intArrayOf(android.R.attr.state_focused) + else -> intArrayOf() + } + + if (key.focused || keyCode == KEYCODE_ENTER) { + keyBackground.applyColorFilter(mPrimaryColor) + } else if (showKeyBorders && drawableId == R.drawable.keyboard_key_selector_outlined) { + val keyColor = getKeyColor(key.pressed) + keyBackground.applyColorFilter(keyColor) + } + + canvas.translate(key.x.toFloat(), key.y.toFloat()) + keyBackground.draw(canvas) + } + private fun handleClipboard() { if (mToolbarHolder != null && mPopupParent.id != R.id.mini_keyboard_view) { val clipboardContent = context.getCurrentClip() @@ -767,7 +775,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut val newKey = keys[mCurrentKeyIndex] val code = newKey.code - if (code == KEYCODE_SHIFT || code == KEYCODE_MODE_CHANGE || code == KEYCODE_DELETE || code == KEYCODE_ENTER || code == KEYCODE_SPACE) { + if (context.config.showKeyBorders || (code == KEYCODE_SHIFT || code == KEYCODE_MODE_CHANGE || code == KEYCODE_DELETE || code == KEYCODE_ENTER || code == KEYCODE_SPACE)) { newKey.pressed = true } @@ -819,11 +827,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } - val previewBackgroundColor = if (context.config.isUsingSystemTheme) { - resources.getColor(R.color.you_keyboard_toolbar_color, context.theme) - } else { - mBackgroundColor.darkenColor(4) - } + val previewBackgroundColor = getToolbarColor(4) val previewBackground = mPreviewText!!.background as LayerDrawable previewBackground.findDrawableByLayerId(R.id.button_background_shape).applyColorFilter(previewBackgroundColor) @@ -1529,4 +1533,55 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut invalidateAllKeys() } } + + private fun maybeDarkenColor(color: Int, factor: Int): Int { + // use darker background color when key borders are enabled + if (context.config.showKeyBorders && !context.isUsingSystemDarkTheme()) { + val darkerColor = color.darkenColor(factor) + return if (darkerColor == Color.WHITE) { + resources.getColor(R.color.md_grey_200, context.theme).darkenColor(4) + } else { + darkerColor + } + } + return color + } + + private fun getToolbarColor(factor: Int = 8): Int { + val color = if (context.config.isUsingSystemTheme) { + resources.getColor(R.color.you_keyboard_toolbar_color, context.theme) + } else { + mBackgroundColor.darkenColor(factor) + } + return maybeDarkenColor(color, 2) + } + + private fun getKeyboardBackgroundColor(): Int { + val color = if (context.config.isUsingSystemTheme) { + resources.getColor(R.color.you_keyboard_background_color, context.theme) + } else { + mBackgroundColor.darkenColor(2) + } + return maybeDarkenColor(color, 6) + } + + private fun getKeyColor(pressed: Boolean): Int { + val backgroundColor = getKeyboardBackgroundColor() + val lighterColor = backgroundColor.lightenColor() + val keyColor = if (context.config.isUsingSystemTheme) { + lighterColor + } else { + if (backgroundColor == Color.BLACK) { + backgroundColor.getContrastColor().adjustAlpha(0.1f) + } else { + lighterColor + } + } + + return if (pressed) { + keyColor.adjustAlpha(0.2f) + } else { + keyColor + } + } } diff --git a/app/src/main/res/drawable/key_background_outlined.xml b/app/src/main/res/drawable/key_background_outlined.xml new file mode 100644 index 00000000..6db0412f --- /dev/null +++ b/app/src/main/res/drawable/key_background_outlined.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/keyboard_enter_background_outlined.xml b/app/src/main/res/drawable/keyboard_enter_background_outlined.xml new file mode 100644 index 00000000..765df883 --- /dev/null +++ b/app/src/main/res/drawable/keyboard_enter_background_outlined.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/keyboard_key_selector_outlined.xml b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml new file mode 100644 index 00000000..7e53d7c9 --- /dev/null +++ b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/keyboard_space_background_material_outlined.xml b/app/src/main/res/drawable/keyboard_space_background_material_outlined.xml new file mode 100644 index 00000000..fcb54960 --- /dev/null +++ b/app/src/main/res/drawable/keyboard_space_background_material_outlined.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + From 96cc36d13a3fa69dfdf2e71dd98aae1bc69c9900 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 31 Jan 2023 21:25:41 +0530 Subject: [PATCH 5/9] Always handle key presses Otherwise there won't be any click feedback when "Show key popup" is disabled --- .../simplemobiletools/keyboard/views/MyKeyboardView.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt index 1eb8d626..e55ec2c8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -753,10 +753,6 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } private fun showPreview(keyIndex: Int) { - if (!context.config.showPopupOnKeypress) { - return - } - val oldKeyIndex = mCurrentKeyIndex val previewPopup = mPreviewPopup mCurrentKeyIndex = keyIndex @@ -784,6 +780,10 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } } + if (!context.config.showPopupOnKeypress) { + return + } + // If key changed and preview is on ... if (oldKeyIndex != mCurrentKeyIndex) { if (previewPopup.isShowing) { From 8c5e422b3bace0917b61dbb9c5d37b0797de2f97 Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 31 Jan 2023 21:32:41 +0530 Subject: [PATCH 6/9] Show click feedback with enter too --- .../com/simplemobiletools/keyboard/views/MyKeyboardView.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 e55ec2c8..9942b86d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -654,7 +654,12 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } if (key.focused || keyCode == KEYCODE_ENTER) { - keyBackground.applyColorFilter(mPrimaryColor) + val keyColor = if (key.pressed) { + mPrimaryColor.adjustAlpha(0.8f) + } else { + mPrimaryColor + } + keyBackground.applyColorFilter(keyColor) } else if (showKeyBorders && drawableId == R.drawable.keyboard_key_selector_outlined) { val keyColor = getKeyColor(key.pressed) keyBackground.applyColorFilter(keyColor) From 6a6b70d414f3d12698f46c4b51acd2e419ace25d Mon Sep 17 00:00:00 2001 From: Naveen Date: Tue, 31 Jan 2023 23:25:32 +0530 Subject: [PATCH 7/9] Update keyboard on preference changes --- .../keyboard/services/SimpleKeyboardIME.kt | 9 +- .../keyboard/views/MyKeyboardView.kt | 208 ++++++++++-------- 2 files changed, 124 insertions(+), 93 deletions(-) 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 b25b5860..9047364a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/services/SimpleKeyboardIME.kt @@ -1,5 +1,6 @@ package com.simplemobiletools.keyboard.services +import android.content.SharedPreferences import android.inputmethodservice.InputMethodService import android.text.InputType import android.text.InputType.TYPE_CLASS_DATETIME @@ -14,6 +15,7 @@ import android.view.inputmethod.EditorInfo.IME_ACTION_NONE import android.view.inputmethod.EditorInfo.IME_FLAG_NO_ENTER_ACTION import android.view.inputmethod.EditorInfo.IME_MASK_ACTION import android.view.inputmethod.ExtractedTextRequest +import com.simplemobiletools.commons.extensions.getSharedPrefs import com.simplemobiletools.keyboard.R import com.simplemobiletools.keyboard.extensions.config import com.simplemobiletools.keyboard.helpers.* @@ -21,7 +23,7 @@ import com.simplemobiletools.keyboard.views.MyKeyboardView import kotlinx.android.synthetic.main.keyboard_view_keyboard.view.* // based on https://www.androidauthority.com/lets-build-custom-keyboard-android-832362/ -class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionListener { +class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionListener, SharedPreferences.OnSharedPreferenceChangeListener { private var SHIFT_PERM_TOGGLE_SPEED = 500 // how quickly do we have to doubletap shift to enable permanent caps lock private val KEYBOARD_LETTERS = 0 private val KEYBOARD_SYMBOLS = 1 @@ -38,6 +40,7 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL override fun onInitializeInterface() { super.onInitializeInterface() keyboard = MyKeyboard(this, getKeyboardLayoutXML(), enterKeyType) + getSharedPrefs().registerOnSharedPreferenceChangeListener(this) } override fun onCreateInputView(): View { @@ -275,4 +278,8 @@ class SimpleKeyboardIME : InputMethodService(), MyKeyboardView.OnKeyboardActionL else -> R.xml.keys_letters_english_qwerty } } + + override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { + keyboardView?.setupKeyboard() + } } 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 9942b86d..608b6a1d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -104,6 +104,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var mTextColor = 0 private var mBackgroundColor = 0 private var mPrimaryColor = 0 + private var mKeyColor = 0 + private var mKeyColorPressed = 0 private var mPreviewText: TextView? = null private val mPreviewPopup: PopupWindow @@ -155,6 +157,8 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private var ignoreTouches = false private var mKeyBackground: Drawable? = null + private var mShowKeyBorders: Boolean = false + private var mUsingSystemTheme: Boolean = true private var mToolbarHolder: View? = null private var mClipboardManagerHolder: View? = null @@ -272,61 +276,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut closeEmojiPalette() if (visibility == VISIBLE) { - mTextColor = context.getProperTextColor() - mBackgroundColor = context.getProperBackgroundColor() - mPrimaryColor = context.getProperPrimaryColor() - val strokeColor = context.getStrokeColor() - - val toolbarColor = getToolbarColor() - val darkerColor = getKeyboardBackgroundColor() - val miniKeyboardBackgroundColor = getToolbarColor(4) - - if (changedView == mini_keyboard_view) { - val previewBackground = background as LayerDrawable - previewBackground.findDrawableByLayerId(R.id.button_background_shape).applyColorFilter(miniKeyboardBackgroundColor) - previewBackground.findDrawableByLayerId(R.id.button_background_stroke).applyColorFilter(strokeColor) - background = previewBackground - } else { - background.applyColorFilter(darkerColor) - } - - val rippleBg = resources.getDrawable(R.drawable.clipboard_background, context.theme) as RippleDrawable - val layerDrawable = rippleBg.findDrawableByLayerId(R.id.clipboard_background_holder) as LayerDrawable - layerDrawable.findDrawableByLayerId(R.id.clipboard_background_stroke).applyColorFilter(strokeColor) - layerDrawable.findDrawableByLayerId(R.id.clipboard_background_shape).applyColorFilter(mBackgroundColor) - - val wasDarkened = mBackgroundColor != mBackgroundColor.darkenColor() - mToolbarHolder?.apply { - top_keyboard_divider.beGoneIf(wasDarkened) - top_keyboard_divider.background = ColorDrawable(strokeColor) - - background = ColorDrawable(toolbarColor) - clipboard_value.apply { - background = rippleBg - setTextColor(mTextColor) - setLinkTextColor(mTextColor) - } - - settings_cog.applyColorFilter(mTextColor) - pinned_clipboard_items.applyColorFilter(mTextColor) - clipboard_clear.applyColorFilter(mTextColor) - } - - mClipboardManagerHolder?.apply { - top_clipboard_divider.beGoneIf(wasDarkened) - top_clipboard_divider.background = ColorDrawable(strokeColor) - clipboard_manager_holder.background = ColorDrawable(toolbarColor) - - clipboard_manager_close.applyColorFilter(mTextColor) - clipboard_manager_manage.applyColorFilter(mTextColor) - - clipboard_manager_label.setTextColor(mTextColor) - clipboard_content_placeholder_1.setTextColor(mTextColor) - clipboard_content_placeholder_2.setTextColor(mTextColor) - } - - setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor) - setupStoredClips() + setupKeyboard(changedView) } } @@ -421,6 +371,75 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut emojiCompatMetadataVersion = editorInfo.extras?.getInt(EmojiCompat.EDITOR_INFO_METAVERSION_KEY, 0) ?: 0 } + fun setupKeyboard(changedView: View? = null) { + mTextColor = context.getProperTextColor() + mBackgroundColor = context.getProperBackgroundColor() + mPrimaryColor = context.getProperPrimaryColor() + + mShowKeyBorders = context.config.showKeyBorders + mUsingSystemTheme = context.config.isUsingSystemTheme + mKeyBackground = if (mShowKeyBorders) { + resources.getDrawable(R.drawable.keyboard_key_selector_outlined, context.theme) + } else { + resources.getDrawable(R.drawable.keyboard_key_selector, context.theme) + } + mKeyColor = getKeyColor() + mKeyColorPressed = mKeyColor.adjustAlpha(0.2f) + + val strokeColor = context.getStrokeColor() + + val toolbarColor = getToolbarColor() + val darkerColor = getKeyboardBackgroundColor() + val miniKeyboardBackgroundColor = getToolbarColor(4) + + if (changedView != null && changedView == mini_keyboard_view) { + val previewBackground = background as LayerDrawable + previewBackground.findDrawableByLayerId(R.id.button_background_shape).applyColorFilter(miniKeyboardBackgroundColor) + previewBackground.findDrawableByLayerId(R.id.button_background_stroke).applyColorFilter(strokeColor) + background = previewBackground + } else { + background.applyColorFilter(darkerColor) + } + + val rippleBg = resources.getDrawable(R.drawable.clipboard_background, context.theme) as RippleDrawable + val layerDrawable = rippleBg.findDrawableByLayerId(R.id.clipboard_background_holder) as LayerDrawable + layerDrawable.findDrawableByLayerId(R.id.clipboard_background_stroke).applyColorFilter(strokeColor) + layerDrawable.findDrawableByLayerId(R.id.clipboard_background_shape).applyColorFilter(mBackgroundColor) + + val wasDarkened = mBackgroundColor != mBackgroundColor.darkenColor() + mToolbarHolder?.apply { + top_keyboard_divider.beGoneIf(wasDarkened) + top_keyboard_divider.background = ColorDrawable(strokeColor) + + background = ColorDrawable(toolbarColor) + clipboard_value.apply { + background = rippleBg + setTextColor(mTextColor) + setLinkTextColor(mTextColor) + } + + settings_cog.applyColorFilter(mTextColor) + pinned_clipboard_items.applyColorFilter(mTextColor) + clipboard_clear.applyColorFilter(mTextColor) + } + + mClipboardManagerHolder?.apply { + top_clipboard_divider.beGoneIf(wasDarkened) + top_clipboard_divider.background = ColorDrawable(strokeColor) + clipboard_manager_holder.background = ColorDrawable(toolbarColor) + + clipboard_manager_close.applyColorFilter(mTextColor) + clipboard_manager_manage.applyColorFilter(mTextColor) + + clipboard_manager_label.setTextColor(mTextColor) + clipboard_content_placeholder_1.setTextColor(mTextColor) + clipboard_content_placeholder_2.setTextColor(mTextColor) + } + + setupEmojiPalette(toolbarColor = toolbarColor, backgroundColor = mBackgroundColor, textColor = mTextColor) + setupStoredClips() + } + fun vibrateIfNeeded() { if (context.config.vibrateOnKeypress) { performHapticFeedback() @@ -614,33 +633,11 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut } private fun setupKeyBackground(key: MyKeyboard.Key, keyCode: Int, canvas: Canvas) { - val showKeyBorders = context.config.showKeyBorders - val drawableId = when (keyCode) { - KEYCODE_SPACE -> if (context.config.isUsingSystemTheme) { - if (showKeyBorders) { - R.drawable.keyboard_space_background_material_outlined - } else { - R.drawable.keyboard_space_background_material - } - } else { - if (showKeyBorders) { - R.drawable.keyboard_key_selector_outlined - } else { - R.drawable.keyboard_space_background - } - } - KEYCODE_ENTER -> if (showKeyBorders) { - R.drawable.keyboard_enter_background_outlined - } else { - R.drawable.keyboard_enter_background - } - else -> if (showKeyBorders) { - R.drawable.keyboard_key_selector_outlined - } else { - R.drawable.keyboard_key_selector - } + val keyBackground = when (keyCode) { + KEYCODE_SPACE -> getSpaceKeyBackground() + KEYCODE_ENTER -> getEnterKeyBackground() + else -> mKeyBackground } - val keyBackground = resources.getDrawable(drawableId, context.theme) val bounds = keyBackground!!.bounds if (key.width != bounds.right || key.height != bounds.bottom) { @@ -660,15 +657,47 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mPrimaryColor } keyBackground.applyColorFilter(keyColor) - } else if (showKeyBorders && drawableId == R.drawable.keyboard_key_selector_outlined) { - val keyColor = getKeyColor(key.pressed) - keyBackground.applyColorFilter(keyColor) + } else if (mShowKeyBorders) { + if (keyCode != KEYCODE_SPACE || !mUsingSystemTheme) { + val keyColor = if (key.pressed) { + mKeyColorPressed + } else { + mKeyColor + } + keyBackground.applyColorFilter(keyColor) + } } canvas.translate(key.x.toFloat(), key.y.toFloat()) keyBackground.draw(canvas) } + private fun getSpaceKeyBackground(): Drawable? { + val drawableId = if (mUsingSystemTheme) { + if (mShowKeyBorders) { + R.drawable.keyboard_space_background_material_outlined + } else { + R.drawable.keyboard_space_background_material + } + } else { + if (mShowKeyBorders) { + R.drawable.keyboard_key_selector_outlined + } else { + R.drawable.keyboard_space_background + } + } + return resources.getDrawable(drawableId, context.theme) + } + + private fun getEnterKeyBackground(): Drawable? { + val drawableId = if (mShowKeyBorders) { + R.drawable.keyboard_enter_background_outlined + } else { + R.drawable.keyboard_enter_background + } + return resources.getDrawable(drawableId, context.theme) + } + private fun handleClipboard() { if (mToolbarHolder != null && mPopupParent.id != R.id.mini_keyboard_view) { val clipboardContent = context.getCurrentClip() @@ -1544,7 +1573,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut if (context.config.showKeyBorders && !context.isUsingSystemDarkTheme()) { val darkerColor = color.darkenColor(factor) return if (darkerColor == Color.WHITE) { - resources.getColor(R.color.md_grey_200, context.theme).darkenColor(4) + resources.getColor(R.color.md_grey_200, context.theme) } else { darkerColor } @@ -1570,7 +1599,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut return maybeDarkenColor(color, 6) } - private fun getKeyColor(pressed: Boolean): Int { + private fun getKeyColor(): Int { val backgroundColor = getKeyboardBackgroundColor() val lighterColor = backgroundColor.lightenColor() val keyColor = if (context.config.isUsingSystemTheme) { @@ -1582,11 +1611,6 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut lighterColor } } - - return if (pressed) { - keyColor.adjustAlpha(0.2f) - } else { - keyColor - } + return keyColor } } From e8338a522a2a5cc04405c465882c372172f62905 Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 1 Feb 2023 00:16:02 +0530 Subject: [PATCH 8/9] Use bordered mini keyboard background shape --- .../main/res/drawable/keyboard_key_selector_outlined.xml | 2 +- .../minikeyboard_selected_background_outlined.xml | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml diff --git a/app/src/main/res/drawable/keyboard_key_selector_outlined.xml b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml index 7e53d7c9..6d1d1edc 100644 --- a/app/src/main/res/drawable/keyboard_key_selector_outlined.xml +++ b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml @@ -1,6 +1,6 @@ - + diff --git a/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml b/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml new file mode 100644 index 00000000..bfdfc4d5 --- /dev/null +++ b/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml @@ -0,0 +1,9 @@ + + + + + + + + + From 2999ccdc08dc4da375f76198abfa751b4707af00 Mon Sep 17 00:00:00 2001 From: Naveen Date: Fri, 3 Feb 2023 21:43:10 +0530 Subject: [PATCH 9/9] Don't show key borders in mini keyboard --- .../simplemobiletools/keyboard/views/MyKeyboardView.kt | 8 +++++--- .../main/res/drawable/keyboard_key_selector_outlined.xml | 6 +++--- .../minikeyboard_selected_background_outlined.xml | 9 --------- 3 files changed, 8 insertions(+), 15 deletions(-) delete mode 100644 app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml 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 608b6a1d..4a01ff6e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt +++ b/app/src/main/kotlin/com/simplemobiletools/keyboard/views/MyKeyboardView.kt @@ -378,7 +378,9 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut mShowKeyBorders = context.config.showKeyBorders mUsingSystemTheme = context.config.isUsingSystemTheme - mKeyBackground = if (mShowKeyBorders) { + + val isMainKeyboard = changedView == null || changedView != mini_keyboard_view + mKeyBackground = if (mShowKeyBorders && isMainKeyboard) { resources.getDrawable(R.drawable.keyboard_key_selector_outlined, context.theme) } else { resources.getDrawable(R.drawable.keyboard_key_selector, context.theme) @@ -392,7 +394,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut val darkerColor = getKeyboardBackgroundColor() val miniKeyboardBackgroundColor = getToolbarColor(4) - if (changedView != null && changedView == mini_keyboard_view) { + if (!isMainKeyboard) { val previewBackground = background as LayerDrawable previewBackground.findDrawableByLayerId(R.id.button_background_shape).applyColorFilter(miniKeyboardBackgroundColor) previewBackground.findDrawableByLayerId(R.id.button_background_stroke).applyColorFilter(strokeColor) @@ -1570,7 +1572,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut private fun maybeDarkenColor(color: Int, factor: Int): Int { // use darker background color when key borders are enabled - if (context.config.showKeyBorders && !context.isUsingSystemDarkTheme()) { + if (context.config.showKeyBorders) { val darkerColor = color.darkenColor(factor) return if (darkerColor == Color.WHITE) { resources.getColor(R.color.md_grey_200, context.theme) diff --git a/app/src/main/res/drawable/keyboard_key_selector_outlined.xml b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml index 6d1d1edc..7c6063e7 100644 --- a/app/src/main/res/drawable/keyboard_key_selector_outlined.xml +++ b/app/src/main/res/drawable/keyboard_key_selector_outlined.xml @@ -1,6 +1,6 @@ - - - + + + diff --git a/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml b/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml deleted file mode 100644 index bfdfc4d5..00000000 --- a/app/src/main/res/drawable/minikeyboard_selected_background_outlined.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - -