@@ -52,16 +52,13 @@ import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaf
5252import androidx.compose.material3.rememberTopAppBarState
5353import androidx.compose.runtime.Composable
5454import androidx.compose.runtime.getValue
55- import androidx.compose.runtime.mutableIntStateOf
56- import androidx.compose.runtime.mutableStateOf
57- import androidx.compose.runtime.remember
5855import androidx.compose.runtime.rememberCoroutineScope
59- import androidx.compose.runtime.setValue
6056import androidx.compose.ui.Modifier
6157import androidx.compose.ui.graphics.ImageBitmap
6258import androidx.compose.ui.input.nestedscroll.nestedScroll
6359import androidx.compose.ui.platform.LocalContext
6460import androidx.compose.ui.unit.dp
61+ import androidx.lifecycle.compose.collectAsStateWithLifecycle
6562import com.embroidermodder.punching.Histogram
6663import de.berlindroid.zepatch.PatchablePreviewMode.BITMAP
6764import de.berlindroid.zepatch.PatchablePreviewMode.COMPOSABLE
@@ -75,9 +72,10 @@ import de.berlindroid.zepatch.ui.theme.ZePatchTheme
7572import de.berlindroid.zepatch.utils.multiLet
7673import de.berlindroid.zepatch.utils.uppercaseWords
7774import kotlinx.coroutines.launch
75+ import androidx.lifecycle.viewmodel.compose.viewModel as lifecycleViewModel
7876
7977
80- private enum class PatchablePreviewMode {
78+ enum class PatchablePreviewMode {
8179 COMPOSABLE , BITMAP , REDUCED_BITMAP , STITCHES
8280}
8381
@@ -197,18 +195,15 @@ private fun PatchableDetail(
197195 onBackClick : () -> Unit ,
198196 patchable : @Composable (Boolean , (ImageBitmap ) -> Unit ) -> Unit ,
199197) {
200- var imageBitmap by remember { mutableStateOf<ImageBitmap ?>(null ) }
201- var reducedImageBitmap by remember { mutableStateOf<ImageBitmap ?>(null ) }
202- var reducedHistogram by remember { mutableStateOf<Histogram ?>(null ) }
203- var colorCount by remember { mutableIntStateOf(3 ) }
204- var embroideryData by remember { mutableStateOf<ByteArray ?>(null ) }
205- var embroideryPreviewImage by remember { mutableStateOf<ImageBitmap ?>(null ) }
206-
207198 val context = LocalContext .current
199+
200+ val viewModel: WizardViewModel = lifecycleViewModel()
201+ val uiState by viewModel.uiState.collectAsStateWithLifecycle()
202+
208203 val launcher = rememberLauncherForActivityResult(
209204 contract = ActivityResultContracts .StartActivityForResult ()
210205 ) { result ->
211- savePesAfterSelection(context, result, embroideryData)
206+ savePesAfterSelection(context, result, uiState. embroideryData)
212207 }
213208
214209 Scaffold (
@@ -232,38 +227,35 @@ private fun PatchableDetail(
232227 Column (
233228 modifier = Modifier .padding(innerPadding),
234229 ) {
235- var currentMode by remember { mutableStateOf(COMPOSABLE ) }
236-
237- ProgressPills (imageBitmap, reducedImageBitmap, currentMode)
230+ ProgressPills (uiState.imageBitmap, uiState.reducedImageBitmap, uiState.previewMode)
238231
239232 WizardContent (
240- currentMode ,
241- imageBitmap,
242- colorCount,
243- reducedImageBitmap,
244- reducedHistogram,
233+ uiState.previewMode ,
234+ uiState. imageBitmap,
235+ uiState. colorCount,
236+ uiState. reducedImageBitmap,
237+ uiState. reducedHistogram,
245238 name,
246- onBitmapUpdated = { imageBitmap = it },
247- onColorCountUpdated = { colorCount = it },
248- onReducedUpdated = { img, histo ->
249- reducedImageBitmap = img;reducedHistogram = histo
250- },
251- onEmbroideryUpdated = { data, preview ->
252- embroideryData = data
253- embroideryPreviewImage = preview
254- },
239+ onBitmapUpdated = viewModel::updateBitmap,
240+ onColorCountUpdated = viewModel::updateColorCount,
241+ computeReducedBitmap = viewModel::computeReducedBitmap,
242+ onReducedUpdated = viewModel::setReducedResult,
243+ onEmbroideryUpdated = viewModel::updateEmbroidery,
255244 patchable
256245 )
257246
258247 WizardButtons (
259- currentMode ,
260- imageBitmap,
261- reducedImageBitmap,
262- embroideryData,
248+ uiState.previewMode ,
249+ uiState. imageBitmap,
250+ uiState. reducedImageBitmap,
251+ uiState. embroideryData,
263252 name,
264253 launcher
265254 ) {
266- currentMode = it
255+ viewModel.setPreviewMode(it)
256+ if (it == PatchablePreviewMode .REDUCED_BITMAP ) {
257+ viewModel.computeReducedBitmap()
258+ }
267259 }
268260 }
269261 }
@@ -279,6 +271,7 @@ private fun WizardContent(
279271 name : String ,
280272 onBitmapUpdated : (ImageBitmap ) -> Unit ,
281273 onColorCountUpdated : (Int ) -> Unit ,
274+ computeReducedBitmap : () -> Unit ,
282275 onReducedUpdated : (ImageBitmap , Histogram ) -> Unit ,
283276 onEmbroideryUpdated : (ByteArray , ImageBitmap ) -> Unit ,
284277 patchable : @Composable (Boolean , (ImageBitmap ) -> Unit ) -> Unit ,
@@ -301,7 +294,8 @@ private fun WizardContent(
301294 image = imageBitmap,
302295 colorCount = colorCount,
303296 onColorCountChanged = onColorCountUpdated,
304- onReduced = onReducedUpdated,
297+ computeReducedBitmap = computeReducedBitmap,
298+ reducedImage = reducedImageBitmap,
305299 )
306300
307301 STITCHES -> reducedImageBitmap?.multiLet(reducedHistogram) { img, histo ->
0 commit comments