@@ -2,6 +2,7 @@ package com.simplemobiletools.keyboard.services
22
33import android.annotation.SuppressLint
44import android.content.SharedPreferences
5+ import android.graphics.Bitmap
56import android.graphics.drawable.Icon
67import android.graphics.drawable.LayerDrawable
78import android.graphics.drawable.RippleDrawable
@@ -38,6 +39,7 @@ import com.simplemobiletools.keyboard.extensions.safeStorageContext
3839import com.simplemobiletools.keyboard.helpers.*
3940import com.simplemobiletools.keyboard.interfaces.OnKeyboardActionListener
4041import com.simplemobiletools.keyboard.views.MyKeyboardView
42+ import java.io.ByteArrayOutputStream
4143import java.util.Locale
4244
4345// based on https://www.androidauthority.com/lets-build-custom-keyboard-android-832362/
@@ -435,10 +437,12 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
435437
436438 val maxWidth = resources.getDimensionPixelSize(R .dimen.suggestion_max_width)
437439 val height = resources.getDimensionPixelSize(R .dimen.label_text_size) + verticalPadding * 2
440+ val chipBackgroundIcon: Icon = rippleBg.toBitmap(width = maxWidth, height = height).toIcon()
438441
439442 val chipStyle =
440443 ViewStyle .Builder ()
441- .setBackground(Icon .createWithBitmap(rippleBg.toBitmap(width = maxWidth, height = height)))
444+ // don't use Icon.createWithBitmap(), it crashes the app. Issue https://github.com/SimpleMobileTools/Simple-Keyboard/issues/248
445+ .setBackground(chipBackgroundIcon)
442446 .setPadding(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding)
443447 .build()
444448
@@ -471,4 +475,14 @@ class SimpleKeyboardIME : InputMethodService(), OnKeyboardActionListener, Shared
471475 override fun onSharedPreferenceChanged (sharedPreferences : SharedPreferences ? , key : String? ) {
472476 keyboardView?.setupKeyboard()
473477 }
478+
479+ private fun Bitmap.toIcon (): Icon {
480+ val byteArray: ByteArray = ByteArrayOutputStream ().let { outputStream ->
481+ this .compress(Bitmap .CompressFormat .PNG , 100 , outputStream)
482+ outputStream.toByteArray()
483+ }
484+ this .recycle()
485+
486+ return Icon .createWithData(byteArray, 0 , byteArray.size)
487+ }
474488}
0 commit comments