@@ -10,6 +10,7 @@ import androidx.compose.runtime.Composable
10
10
import androidx.compose.runtime.LaunchedEffect
11
11
import androidx.compose.runtime.getValue
12
12
import androidx.compose.runtime.mutableStateOf
13
+ import androidx.compose.runtime.produceState
13
14
import androidx.compose.runtime.remember
14
15
import androidx.compose.runtime.setValue
15
16
import androidx.compose.ui.Alignment
@@ -19,12 +20,12 @@ import androidx.compose.ui.graphics.painter.Painter
19
20
import androidx.compose.ui.platform.LocalDensity
20
21
import androidx.compose.ui.platform.LocalLayoutDirection
21
22
import androidx.compose.ui.unit.dp
23
+ import kotlinx.coroutines.Dispatchers
24
+ import kotlinx.coroutines.withContext
22
25
import org.example.project.helpers.computePixelatedImage
23
26
import org.example.project.helpers.toImageBitmap
24
27
25
- /* *
26
- * Composable for displaying an image with pixelated effect.
27
- */
28
+
28
29
@Composable
29
30
fun CensorshipComposable (
30
31
painter : Painter ,
@@ -40,33 +41,41 @@ fun CensorshipComposable(
40
41
painter.toImageBitmap(size, density, layoutDirection)
41
42
}
42
43
43
- var isPixelated by remember { mutableStateOf(false ) }
44
- var pixelatedImage by remember { mutableStateOf<ImageBitmap ?>(null ) }
45
-
46
- LaunchedEffect (isPixelated) {
47
- if (isPixelated && pixelatedImage == null ) {
48
- pixelatedImage = computePixelatedImage(imageBitmap, pixelsSize)
44
+ val pixelatedImage by produceState<ImageBitmap ?>(initialValue = null , imageBitmap) {
45
+ value = withContext(Dispatchers .Default ) {
46
+ computePixelatedImage(imageBitmap, pixelsSize)
49
47
}
50
48
}
51
49
52
- Box (modifier = modifier.size(200 .dp).clickable(
53
- interactionSource = remember { MutableInteractionSource () },
54
- indication = null
55
- ) { isPixelated = ! isPixelated }) {
50
+ var isPixelated by remember { mutableStateOf(false ) }
51
+
52
+ Box (
53
+ modifier = modifier
54
+ .size(200 .dp)
55
+ .clickable(
56
+ interactionSource = remember { MutableInteractionSource () },
57
+ indication = null
58
+ ) {
59
+ isPixelated = ! isPixelated
60
+ }
61
+ ) {
56
62
if (isPixelated) {
57
- pixelatedImage?. let {
63
+ if ( pixelatedImage != null ) {
58
64
Image (
59
- bitmap = it ,
65
+ bitmap = pixelatedImage !! ,
60
66
contentDescription = " Pixelated image" ,
61
- modifier.align(Alignment .Center )
67
+ modifier = Modifier .align(Alignment .Center )
62
68
)
63
- } ? : CircularProgressIndicator ()
69
+ } else {
70
+ CircularProgressIndicator (Modifier .align(Alignment .Center ))
71
+ }
64
72
} else {
65
73
Image (
66
74
bitmap = imageBitmap,
67
75
contentDescription = " Original image" ,
68
- modifier.align(Alignment .Center )
76
+ modifier = Modifier .align(Alignment .Center )
69
77
)
70
78
}
71
79
}
72
80
}
81
+
0 commit comments