diff --git a/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt b/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt index fe55cf6a..54a7072f 100644 --- a/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt +++ b/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt @@ -14,53 +14,49 @@ import java.io.InputStream import java.net.HttpURLConnection import java.net.URL -class BitmapUtil { - companion object { - fun roundCorners(bitmap: Bitmap, cornerRadius: Float = 20f): Bitmap { - val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888) - val canvas = Canvas(output) - val paint = Paint() - paint.isAntiAlias = true - paint.shader = BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) - val rect = RectF(0f, 0f, bitmap.width.toFloat(), bitmap.height.toFloat()) - canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paint) +object BitmapUtil { + private fun roundCorners(bitmap: Bitmap, cornerRadius: Float = 20f): Bitmap { + val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888) + val canvas = Canvas(output) + val paint = Paint() + paint.isAntiAlias = true + paint.shader = BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP) + val rect = RectF(0f, 0f, bitmap.width.toFloat(), bitmap.height.toFloat()) + canvas.drawRoundRect(rect, cornerRadius, cornerRadius, paint) - return output - } + return output + } - private val cacheSize = (Runtime.getRuntime().maxMemory() / 1024 / 16).toInt() - private val bitmapCache = LruCache(cacheSize) + private val cacheSize = (Runtime.getRuntime().maxMemory() / 1024 / 16).toInt() + private val bitmapCache = LruCache(cacheSize) - fun downloadImageAsBitmap(imageUrl: String): Bitmap? { - var bitmap: Bitmap? = null + fun downloadImageAsBitmap(imageUrl: String): Bitmap? { + var bitmap: Bitmap? = null - runBlocking(Dispatchers.IO) { + runBlocking(Dispatchers.IO) { + val cacheName = imageUrl.substringAfterLast("/") + bitmap = bitmapCache[cacheName] + if (bitmap != null) return@runBlocking + var inputStream: InputStream? = null + var urlConnection: HttpURLConnection? = null + try { + val url = URL(imageUrl) + urlConnection = url.openConnection() as HttpURLConnection + urlConnection.requestMethod = "GET" + urlConnection.connect() - bitmapCache[imageUrl]?.let { - bitmap = it - } ?: { - var inputStream: InputStream? = null - var urlConnection: HttpURLConnection? = null - try { - val url = URL(imageUrl) - urlConnection = url.openConnection() as HttpURLConnection - urlConnection.requestMethod = "GET" - urlConnection.connect() - - if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) { - inputStream = urlConnection.inputStream - bitmap = BitmapFactory.decodeStream(inputStream) - bitmap?.let { bitmapCache.put(imageUrl, it) } - } - } catch (e: Exception) { - e.printStackTrace() - } finally { - inputStream?.close() - urlConnection?.disconnect() - } + if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) { + inputStream = urlConnection.inputStream + bitmap = BitmapFactory.decodeStream(inputStream) + bitmap?.let { bitmapCache.put(cacheName, it) } } + } catch (e: Exception) { + e.printStackTrace() + } finally { + inputStream?.close() + urlConnection?.disconnect() } - return bitmap?.let { roundCorners(it) } } + return bitmap?.let { roundCorners(it) } } } \ No newline at end of file