Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@ import androidx.core.graphics.createBitmap
import com.android.developers.androidify.customize.ComposableBitmapRenderer

class FakeComposableBitmapRenderer : ComposableBitmapRenderer {
override fun initialize() {
}

override fun dispose() {
}

override suspend fun renderComposableToBitmap(
canvasSize: Size,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import android.graphics.Bitmap
import android.graphics.SurfaceTexture
import android.hardware.display.DisplayManager
import android.hardware.display.VirtualDisplay
import android.util.Log
import android.view.Display
import android.view.Surface
import android.view.ViewGroup
Expand Down Expand Up @@ -58,9 +57,6 @@ import javax.inject.Inject
import javax.inject.Singleton

interface ComposableBitmapRenderer {
fun initialize()

fun dispose()

suspend fun renderComposableToBitmap(canvasSize: Size, composableContent: @Composable () -> Unit): Bitmap?
}
Expand All @@ -79,34 +75,25 @@ interface ComposableBitmapRenderer {
*/
@Singleton
class ComposableBitmapRendererImpl @Inject constructor(private val application: Application) : ComposableBitmapRenderer {
private val texture = SurfaceTexture(false)
private val surface = Surface(texture)
private var virtualDisplay: VirtualDisplay? = null

override fun initialize() {
virtualDisplay =
(application.getSystemService(DISPLAY_SERVICE) as DisplayManager).createVirtualDisplay(
"virtualDisplay",
1,
1,
72,
surface,
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY,
)
}

override fun dispose() {
virtualDisplay?.release()
private suspend fun <T> useVirtualDisplay(callback: suspend (display: Display) -> T): T? {
val texture = SurfaceTexture(false)
val surface = Surface(texture)
val virtualDisplay: VirtualDisplay? =
(application.getSystemService(DISPLAY_SERVICE) as DisplayManager).createVirtualDisplay(
"virtualDisplay",
1,
1,
72,
surface,
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY,
)

val result = callback(virtualDisplay!!.display)
virtualDisplay.release()
surface.release()
texture.release()
}

private suspend fun <T> useVirtualDisplay(callback: suspend (display: Display) -> T): T? {
if (virtualDisplay == null) {
Log.e("OffscreenBitmapManager", "virtualDisplay is null")
initialize()
}
return callback(virtualDisplay!!.display)
return result
}

override suspend fun renderComposableToBitmap(canvasSize: Size, composableContent: @Composable () -> Unit): Bitmap? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ class CustomizeExportViewModel @Inject constructor(

override fun onCleared() {
super.onCleared()
composableBitmapRenderer.dispose()
}
fun setArguments(
resultImageUrl: Bitmap,
Expand Down