From dcf74661c78ea14587095641e5f38da6908558c0 Mon Sep 17 00:00:00 2001 From: tabidachinokaze <1171065362@qq.com> Date: Thu, 22 Jun 2023 17:44:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/tabidachi/electro/MainActivity.kt | 1 - .../electro/coil/BlurTransformation.kt | 57 +++++++++++++++++++ .../cn/tabidachi/electro/data/network/Ktor.kt | 8 +-- .../tabidachi/electro/ui/ElectroNavigation.kt | 2 +- .../electro/ui/common/BottomMessageField.kt | 12 ++-- build.gradle | 6 +- 6 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/cn/tabidachi/electro/coil/BlurTransformation.kt diff --git a/app/src/main/java/cn/tabidachi/electro/MainActivity.kt b/app/src/main/java/cn/tabidachi/electro/MainActivity.kt index a2561ae..5645d45 100644 --- a/app/src/main/java/cn/tabidachi/electro/MainActivity.kt +++ b/app/src/main/java/cn/tabidachi/electro/MainActivity.kt @@ -4,7 +4,6 @@ import android.app.Activity import android.os.Bundle import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface import androidx.compose.runtime.getValue diff --git a/app/src/main/java/cn/tabidachi/electro/coil/BlurTransformation.kt b/app/src/main/java/cn/tabidachi/electro/coil/BlurTransformation.kt new file mode 100644 index 0000000..29d9c73 --- /dev/null +++ b/app/src/main/java/cn/tabidachi/electro/coil/BlurTransformation.kt @@ -0,0 +1,57 @@ +package cn.tabidachi.electro.coil + +import android.annotation.SuppressLint +import android.graphics.Bitmap +import android.graphics.HardwareRenderer +import android.graphics.PixelFormat +import android.graphics.RenderEffect +import android.graphics.RenderNode +import android.graphics.Shader +import android.hardware.HardwareBuffer +import android.media.ImageReader +import android.os.Build +import androidx.annotation.RequiresApi +import coil.size.Size +import coil.transform.Transformation + +@RequiresApi(Build.VERSION_CODES.S) +class BlurTransformation( + private val radius: Float, + private val sampling: Float +) : Transformation { + override val cacheKey: String = "${BlurTransformation::class.java.name}-$radius-$sampling" + + @SuppressLint("WrongConstant") + override suspend fun transform(input: Bitmap, size: Size): Bitmap { + val renderNode = RenderNode("RenderEffect") + val hardwareRenderer = HardwareRenderer() + val imageReader = ImageReader.newInstance( + input.width, + input.height, + PixelFormat.RGBA_8888, + 1, + HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE or HardwareBuffer.USAGE_GPU_COLOR_OUTPUT + ) + hardwareRenderer.setSurface(imageReader.surface) + hardwareRenderer.setContentRoot(renderNode) + renderNode.setPosition(0, 0, imageReader.width, imageReader.height) + val blurEffect = RenderEffect.createBlurEffect(radius, radius, Shader.TileMode.MIRROR) + renderNode.setRenderEffect(blurEffect) + val recordingCanvas = renderNode.beginRecording() + recordingCanvas.drawBitmap(input, 0f, 0f, null) + renderNode.endRecording() + hardwareRenderer.createRenderRequest() + .setWaitForPresent(true) + .syncAndDraw() + val image = imageReader.acquireNextImage() ?: throw RuntimeException("No Image") + val hardwareBuffer = image.hardwareBuffer ?: throw RuntimeException("No HardwareBuffer") + val bitmap = Bitmap.wrapHardwareBuffer(hardwareBuffer, null) + ?: throw RuntimeException("Create bitmap Failed") + hardwareBuffer.close() + image.close() + imageReader.close() + renderNode.discardDisplayList() + hardwareRenderer.destroy() + return bitmap + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/tabidachi/electro/data/network/Ktor.kt b/app/src/main/java/cn/tabidachi/electro/data/network/Ktor.kt index 87d95b4..cd47480 100644 --- a/app/src/main/java/cn/tabidachi/electro/data/network/Ktor.kt +++ b/app/src/main/java/cn/tabidachi/electro/data/network/Ktor.kt @@ -175,10 +175,10 @@ class Ktor( .header("Authorization", "Bearer $token") .build() okHttpClient.newCall(request).execute() - client.get(url) { - contentType(ContentType.Application.Json) - setBody(Any()) - } +// client.get(url) { +// contentType(ContentType.Application.Json) +// setBody(Any()) +// } }.onFailure { Log.e(TAG, "get: $url", it) }.mapCatching { diff --git a/app/src/main/java/cn/tabidachi/electro/ui/ElectroNavigation.kt b/app/src/main/java/cn/tabidachi/electro/ui/ElectroNavigation.kt index 68cbb68..21cb5c9 100644 --- a/app/src/main/java/cn/tabidachi/electro/ui/ElectroNavigation.kt +++ b/app/src/main/java/cn/tabidachi/electro/ui/ElectroNavigation.kt @@ -53,7 +53,7 @@ private object ElectroScreens { const val GROUP_ADMIN_SCREEN = "group_admin" const val CHANNEL_SCREEN = "channel" const val CHANNEL_CREATE_SCREEN = "channel_create" - const val CHANNEL_ADMIN_SCREEN = "group_admin" + const val CHANNEL_ADMIN_SCREEN = "channel_admin" const val CHANNEL_DETAIL_SCREEN = "channel_detail" const val CHANNEL_INVITE_SCREEN = "channel_invite" const val CHANNEL_EDIT_SCREEN = "channel_edit" diff --git a/app/src/main/java/cn/tabidachi/electro/ui/common/BottomMessageField.kt b/app/src/main/java/cn/tabidachi/electro/ui/common/BottomMessageField.kt index 274817d..aee6646 100644 --- a/app/src/main/java/cn/tabidachi/electro/ui/common/BottomMessageField.kt +++ b/app/src/main/java/cn/tabidachi/electro/ui/common/BottomMessageField.kt @@ -14,7 +14,6 @@ import android.util.Pair import android.view.View import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.annotation.RequiresApi import androidx.compose.animation.AnimatedContent import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column @@ -42,6 +41,7 @@ import androidx.compose.ui.unit.dp import androidx.core.view.ContentInfoCompat import androidx.core.view.OnReceiveContentListener import androidx.hilt.navigation.compose.hiltViewModel +import cn.tabidachi.electro.coil.BlurTransformation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import cn.tabidachi.electro.LocationActivity @@ -73,7 +73,6 @@ import coil.request.ImageRequest import coil.size.Scale import com.amap.api.maps.model.LatLng import com.amap.api.services.core.PoiItemV2 -import com.commit451.coiltransformations.BlurTransformation import dagger.hilt.android.lifecycle.HiltViewModel import io.ktor.http.ContentType import io.ktor.util.generateNonce @@ -462,9 +461,14 @@ class MessageViewModel @Inject constructor( private fun blur(bitmap: Bitmap): Bitmap { val request = ImageRequest.Builder(application) .data(bitmap) - .transformations(BlurTransformation(application, 25f)) + .transformations(BlurTransformation(25f, 1f)) .build() - return (application.imageLoader.executeBlocking(request).drawable as BitmapDrawable).bitmap + return (application.imageLoader.executeBlocking(request).drawable.also { + println("Drawable $it") + } as BitmapDrawable).bitmap.copy( + Bitmap.Config.ARGB_8888, + true + ) } private fun quality(bitmap: Bitmap): ByteArray { diff --git a/build.gradle b/build.gradle index 1c1bd36..5b0f2f7 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ buildscript { ext { - compose_bom_version = '2023.05.00' + compose_bom_version = '2023.06.00' ktor_version = '2.3.0' } } // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.0.1' apply false - id 'com.android.library' version '8.0.1' apply false + id 'com.android.application' version '8.0.2' apply false + id 'com.android.library' version '8.0.2' apply false id 'org.jetbrains.kotlin.android' version '1.8.21' apply false id 'com.google.dagger.hilt.android' version '2.46.1' apply false id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.21' apply false