diff --git a/navigation-fragments/src/main/java/dev/hotwire/navigation/fragments/HotwireWebFragmentDelegate.kt b/navigation-fragments/src/main/java/dev/hotwire/navigation/fragments/HotwireWebFragmentDelegate.kt index ba9a9a83..f85e88da 100644 --- a/navigation-fragments/src/main/java/dev/hotwire/navigation/fragments/HotwireWebFragmentDelegate.kt +++ b/navigation-fragments/src/main/java/dev/hotwire/navigation/fragments/HotwireWebFragmentDelegate.kt @@ -6,6 +6,7 @@ import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions import androidx.activity.result.contract.ActivityResultContracts.RequestPermission import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult +import androidx.fragment.app.DialogFragment import androidx.lifecycle.Lifecycle.State.STARTED import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.lifecycleScope @@ -444,7 +445,8 @@ internal class HotwireWebFragmentDelegate( private suspend fun screenshotView() { hotwireView?.let { - screenshotHolder.captureScreenshot(it) + val window = (navDestination.fragment as? DialogFragment)?.dialog?.window + screenshotHolder.captureScreenshot(it, window) screenshotHolder.showScreenshotIfAvailable(it) } } diff --git a/navigation-fragments/src/main/java/dev/hotwire/navigation/util/HotwireViewScreenshotHolder.kt b/navigation-fragments/src/main/java/dev/hotwire/navigation/util/HotwireViewScreenshotHolder.kt index 8937057b..7cec5401 100644 --- a/navigation-fragments/src/main/java/dev/hotwire/navigation/util/HotwireViewScreenshotHolder.kt +++ b/navigation-fragments/src/main/java/dev/hotwire/navigation/util/HotwireViewScreenshotHolder.kt @@ -9,6 +9,7 @@ import android.os.Handler import android.os.Looper import android.view.PixelCopy import android.view.View +import android.view.Window import dev.hotwire.navigation.logging.logError import dev.hotwire.navigation.logging.logDebug import dev.hotwire.navigation.views.HotwireView @@ -35,16 +36,16 @@ internal class HotwireViewScreenshotHolder { } } - suspend fun captureScreenshot(hotwireView: HotwireView) { - bitmap = copyViewToBitmap(hotwireView) + suspend fun captureScreenshot(hotwireView: HotwireView, window: Window? = null) { + val screenshotWindow = window ?: hotwireView.getActivity()?.window + bitmap = copyViewToBitmap(hotwireView, screenshotWindow) screenshotOrientation = hotwireView.currentOrientation() screenshotZoomed = currentlyZoomed } - private suspend fun copyViewToBitmap(hotwireView: HotwireView): Bitmap? { + private suspend fun copyViewToBitmap(hotwireView: HotwireView, window: Window?): Bitmap? { return suspendCancellableCoroutine { continuation -> val start = System.currentTimeMillis() - val window = hotwireView.getActivity()?.window if (window == null || !hotwireView.isLaidOut || !hasEnoughMemoryForScreenshot() || hotwireView.width <= 0 || hotwireView.height <= 0 @@ -112,4 +113,4 @@ internal class HotwireViewScreenshotHolder { } return null } -} \ No newline at end of file +}