Skip to content

Commit 669a5ef

Browse files
committed
add set capture it in realtime or not
1 parent bd96d1d commit 669a5ef

File tree

5 files changed

+43
-28
lines changed

5 files changed

+43
-28
lines changed

.idea/deploymentTargetDropDown.xml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/x3rocode/xblur/MainActivity.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,13 @@ fun Content(){
5555
//here is blur dialog!!!!!!!!!!!!!!!!!
5656
BlurDialog(
5757
content = { DialogContent { openDialog = false } },
58-
blurRadius = 250,
58+
blurRadius = 50,
5959
onDismiss = { openDialog = false },
6060
size = IntOffset(280,160),
6161
shape = RoundedCornerShape(30.dp),
6262
backgroundColor = Color.White,
63-
backgroundColorAlpha = 0.4f,
63+
backgroundColorAlpha = 0.3f,
64+
isRealtime = false,
6465
dialogDimAmount = 0.3f,
6566
)
6667
}

xblurlib/src/main/java/com/x3rocode/xblurlib/capture/Capturable.kt

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.graphics.Rect
88
import android.os.Build
99
import android.os.Handler
1010
import android.os.Looper
11+
import android.util.Log
1112
import android.view.PixelCopy
1213
import android.view.View
1314
import android.view.Window
@@ -22,10 +23,7 @@ import androidx.compose.ui.platform.LocalContext
2223
import androidx.compose.ui.viewinterop.AndroidView
2324
import androidx.core.view.doOnLayout
2425
import androidx.core.view.drawToBitmap
25-
import kotlinx.coroutines.flow.catch
26-
import kotlinx.coroutines.flow.launchIn
27-
import kotlinx.coroutines.flow.mapNotNull
28-
import kotlinx.coroutines.flow.onEach
26+
import kotlinx.coroutines.flow.*
2927
import java.io.File
3028
import kotlin.coroutines.resume
3129
import kotlin.coroutines.resumeWithException
@@ -55,8 +53,9 @@ private inline fun ComposeView.applyCapturability(
5553
setContent {
5654
content()
5755
LaunchedEffect(controller, onCaptured) {
56+
5857
controller.captureRequests
59-
.mapNotNull { config -> drawToBitmapPostLaidOut(context, config) }
58+
.map { config -> drawToBitmapPostLaidOut(context, config) }
6059
.onEach { bitmap -> onCaptured(bitmap.asImageBitmap(), null) }
6160
.catch { error -> onCaptured(null, error) }
6261
.launchIn(this)
@@ -65,24 +64,21 @@ private inline fun ComposeView.applyCapturability(
6564
}
6665

6766
suspend fun View.drawToBitmapPostLaidOut(context: Context, config: Bitmap.Config): Bitmap {
67+
6868
return suspendCoroutine { continuation ->
69+
6970
doOnLayout { view ->
70-
try {
71-
continuation.resume(view.drawToBitmap(config))
72-
} catch (e: IllegalArgumentException) {
73-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
74-
val window = context.findActivity().window
75-
76-
drawBitmapWithPixelCopy(
77-
view = view,
78-
window = window,
79-
config = config,
80-
onDrawn = { bitmap -> continuation.resume(bitmap) },
81-
onError = { error -> continuation.resumeWithException(error) }
82-
)
83-
} else {
84-
continuation.resumeWithException(e)
85-
}
71+
72+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
73+
val window = context.findActivity().window
74+
75+
drawBitmapWithPixelCopy(
76+
view = view,
77+
window = window,
78+
config = config,
79+
onDrawn = { bitmap -> continuation.resume(bitmap) },
80+
onError = { error -> continuation.resumeWithException(error) }
81+
)
8682
}
8783
}
8884
}
@@ -111,14 +107,14 @@ fun drawBitmapWithPixelCopy(
111107

112108
val (x, y) = IntArray(2).apply { view.getLocationInWindow(this) }
113109
val rect = Rect(x, y, x + width, y + height)
114-
115110
PixelCopy.request(
116111
window,
117112
rect,
118113
bitmap,
119114
{ copyResult ->
120115
if (copyResult == PixelCopy.SUCCESS) {
121116
onDrawn(bitmap)
117+
122118
} else {
123119
onError(RuntimeException("Failed to draw bitmap"))
124120
}
@@ -135,4 +131,4 @@ internal fun Context.findActivity(): Activity {
135131
context = context.baseContext
136132
}
137133
throw IllegalStateException("Unable to retrieve Activity from the current context")
138-
}
134+
}

xblurlib/src/main/java/com/x3rocode/xblurlib/capture/CaptureController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.*
99

1010
class CaptureController internal constructor() {
1111

12-
private val _captureRequests = MutableSharedFlow<Bitmap.Config>(extraBufferCapacity = 1)
12+
private val _captureRequests = MutableSharedFlow<Bitmap.Config>(replay = 1)
1313
internal val captureRequests = _captureRequests.asSharedFlow()
1414
fun capture(config: Bitmap.Config = Bitmap.Config.ARGB_8888) {
1515
_captureRequests.tryEmit(config)

xblurlib/src/main/java/com/x3rocode/xblurlib/xBlurDialog.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ fun BlurDialog(
6363
backgroundColorAlpha: Float = 0.4f,
6464
dialogDimAmount: Float? = null,
6565
dialogBehindBlurRadius: Int = 0,
66+
isRealtime: Boolean = true,
6667
content: @Composable () -> Unit,
6768
){
6869
val captureController = rememberCaptureController()
@@ -79,14 +80,14 @@ fun BlurDialog(
7980
do{
8081
captureController.capture()
8182
delay(30)
82-
}while (true)
83+
}while (isRealtime)
8384
}
8485

8586
Box(modifier = Modifier.fillMaxSize(),
8687
contentAlignment = Alignment.Center){
8788
Capturable(
8889
controller = captureController,
89-
onCaptured = { b, t ->
90+
onCaptured = { b, _ ->
9091
b?.let {
9192
if(it.asAndroidBitmap().sameAs(bitmap?.asAndroidBitmap()).not()){
9293
bitmap= it

0 commit comments

Comments
 (0)