Autofil crash fix#248
This commit is contained in:
Tibor Kaputa 2023-10-14 21:09:16 +02:00 committed by GitHub
commit 8f307dc2fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package com.simplemobiletools.keyboard.services
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.SharedPreferences import android.content.SharedPreferences
import android.graphics.Bitmap
import android.graphics.drawable.Icon import android.graphics.drawable.Icon
import android.graphics.drawable.LayerDrawable import android.graphics.drawable.LayerDrawable
import android.graphics.drawable.RippleDrawable import android.graphics.drawable.RippleDrawable
@ -38,6 +39,7 @@ import com.simplemobiletools.keyboard.extensions.safeStorageContext
import com.simplemobiletools.keyboard.helpers.* import com.simplemobiletools.keyboard.helpers.*
import com.simplemobiletools.keyboard.interfaces.OnKeyboardActionListener import com.simplemobiletools.keyboard.interfaces.OnKeyboardActionListener
import com.simplemobiletools.keyboard.views.MyKeyboardView import com.simplemobiletools.keyboard.views.MyKeyboardView
import java.io.ByteArrayOutputStream
import java.util.Locale import java.util.Locale
// based on https://www.androidauthority.com/lets-build-custom-keyboard-android-832362/ // based on https://www.androidauthority.com/lets-build-custom-keyboard-android-832362/
@ -435,10 +437,12 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
val maxWidth = resources.getDimensionPixelSize(R.dimen.suggestion_max_width) val maxWidth = resources.getDimensionPixelSize(R.dimen.suggestion_max_width)
val height = resources.getDimensionPixelSize(R.dimen.label_text_size) + verticalPadding * 2 val height = resources.getDimensionPixelSize(R.dimen.label_text_size) + verticalPadding * 2
val chipBackgroundIcon: Icon = rippleBg.toBitmap(width = maxWidth, height = height).toIcon()
val chipStyle = val chipStyle =
ViewStyle.Builder() ViewStyle.Builder()
.setBackground(Icon.createWithBitmap(rippleBg.toBitmap(width = maxWidth, height = height))) // don't use Icon.createWithBitmap(), it crashes the app. Issue https://github.com/SimpleMobileTools/Simple-Keyboard/issues/248
.setBackground(chipBackgroundIcon)
.setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding) .setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding)
.build() .build()
@ -471,4 +475,14 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) { override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
keyboardView?.setupKeyboard() keyboardView?.setupKeyboard()
} }
private fun Bitmap.toIcon(): Icon {
val byteArray: ByteArray = ByteArrayOutputStream().let { outputStream ->
this.compress(Bitmap.CompressFormat.PNG, 100, outputStream)
outputStream.toByteArray()
}
this.recycle()
return Icon.createWithData(byteArray, 0, byteArray.size)
}
} }

View File

@ -598,7 +598,7 @@ class MyKeyboardView @JvmOverloads constructor(context: Context, attrs: Attribut
label, (key.width / 2).toFloat(), key.height / 2 + (paint.textSize - paint.descent()) / 2, paint label, (key.width / 2).toFloat(), key.height / 2 + (paint.textSize - paint.descent()) / 2, paint
) )
if (key.topSmallNumber.isNotEmpty() && !context.config.showNumbersRow) { if (key.topSmallNumber.isNotEmpty() && !(context.config.showNumbersRow && Regex("\\d").matches(key.topSmallNumber))) {
canvas.drawText(key.topSmallNumber, key.width - mTopSmallNumberMarginWidth, mTopSmallNumberMarginHeight, smallLetterPaint) canvas.drawText(key.topSmallNumber, key.width - mTopSmallNumberMarginWidth, mTopSmallNumberMarginHeight, smallLetterPaint)
} }