@@ -28,14 +28,15 @@ import androidx.compose.runtime.getValue
28
28
import androidx.compose.runtime.remember
29
29
import androidx.compose.ui.platform.LocalContext
30
30
import androidx.core.net.toUri
31
+ import ru.tech.imageresizershrinker.core.domain.model.ExtraDataType
31
32
import ru.tech.imageresizershrinker.core.settings.presentation.provider.LocalSettingsState
32
33
import ru.tech.imageresizershrinker.core.ui.utils.helper.ContextUtils.getFilename
33
34
import ru.tech.imageresizershrinker.core.ui.utils.navigation.Screen
34
35
import java.util.Locale
35
36
36
37
@Composable
37
38
internal fun List<Uri>.screenList (
38
- extraImageType : String? // TODO: Add normal sealed class instead of string
39
+ extraDataType : ExtraDataType ?
39
40
): State <List <Screen >> {
40
41
val uris = this
41
42
val context = LocalContext .current
@@ -52,22 +53,22 @@ internal fun List<Uri>.screenList(
52
53
53
54
val filesAvailableScreens by remember(uris) {
54
55
derivedStateOf {
55
- listOf (
56
- Screen .Cipher (uris.firstOrNull()),
57
- Screen .ChecksumTools (uris.firstOrNull()),
58
- Screen .Zip (uris)
59
- )
56
+ if (uris.size > 1 ) {
57
+ listOf (Screen .Zip (uris))
58
+ } else {
59
+ listOf (
60
+ Screen .Cipher (uris.firstOrNull()),
61
+ Screen .ChecksumTools (uris.firstOrNull()),
62
+ Screen .Zip (uris)
63
+ )
64
+ }
60
65
}
61
66
}
62
67
val audioAvailableScreens by remember(uris) {
63
68
derivedStateOf {
64
69
listOf (
65
70
Screen .AudioCoverExtractor (uris)
66
- ) + if (uris.size > 1 ) {
67
- filesAvailableScreens
68
- } else {
69
- listOf (Screen .Zip (uris))
70
- }
71
+ ) + filesAvailableScreens
71
72
}
72
73
}
73
74
val gifAvailableScreens by remember(uris) {
@@ -83,11 +84,8 @@ internal fun List<Uri>.screenList(
83
84
),
84
85
Screen .GifTools (
85
86
Screen .GifTools .Type .GifToWebp (uris)
86
- ),
87
- Screen .Cipher (uris.firstOrNull()),
88
- Screen .ChecksumTools (uris.firstOrNull()),
89
- Screen .Zip (uris)
90
- )
87
+ )
88
+ ) + filesAvailableScreens
91
89
}
92
90
}
93
91
val pdfAvailableScreens by remember(uris) {
@@ -102,11 +100,8 @@ internal fun List<Uri>.screenList(
102
100
Screen .PdfTools .Type .PdfToImages (
103
101
uris.firstOrNull()
104
102
)
105
- ),
106
- Screen .Cipher (uris.firstOrNull()),
107
- Screen .ChecksumTools (uris.firstOrNull()),
108
- Screen .Zip (uris)
109
- )
103
+ )
104
+ ) + filesAvailableScreens
110
105
}
111
106
}
112
107
val singleImageScreens by remember(uris) {
@@ -141,8 +136,6 @@ internal fun List<Uri>.screenList(
141
136
Screen .GifTools .Type .ImageToGif (uris)
142
137
),
143
138
Screen .Base64Tools (uris.firstOrNull()),
144
- Screen .Cipher (uris.firstOrNull()),
145
- Screen .ChecksumTools (uris.firstOrNull()),
146
139
Screen .ImagePreview (uris),
147
140
Screen .PickColorFromImage (uris.firstOrNull()),
148
141
Screen .GeneratePalette (uris.firstOrNull()),
@@ -153,36 +146,37 @@ internal fun List<Uri>.screenList(
153
146
Screen .JxlTools .Type .ImageToJxl (uris)
154
147
),
155
148
Screen .SvgMaker (uris),
156
- Screen .Zip (uris),
157
149
Screen .EditExif (uris.firstOrNull()),
158
150
Screen .DeleteExif (uris),
159
151
Screen .LimitResize (uris)
160
- ).let {
152
+ ).let { list ->
153
+ val mergedList = list + filesAvailableScreens
154
+
161
155
val uri = uris.firstOrNull()
162
156
163
157
if (uri.type(" png" )) {
164
- it + Screen .ApngTools (
158
+ mergedList + Screen .ApngTools (
165
159
Screen .ApngTools .Type .ApngToImage (uris.firstOrNull())
166
160
)
167
161
} else if (uri.type(" jpg" , " jpeg" )) {
168
- it + Screen .JxlTools (
162
+ mergedList + Screen .JxlTools (
169
163
Screen .JxlTools .Type .JpegToJxl (uris)
170
164
)
171
165
} else if (uri.type(" jxl" )) {
172
- it + Screen .JxlTools (
166
+ mergedList + Screen .JxlTools (
173
167
Screen .JxlTools .Type .JxlToJpeg (uris)
174
168
) + Screen .JxlTools (
175
169
Screen .JxlTools .Type .JxlToImage (uris.firstOrNull())
176
170
)
177
171
} else if (uri.type(" webp" )) {
178
- it + Screen .WebpTools (
172
+ mergedList + Screen .WebpTools (
179
173
Screen .WebpTools .Type .WebpToImage (uris.firstOrNull())
180
174
)
181
- } else it
175
+ } else mergedList
182
176
}
183
177
}
184
178
}
185
- val multipleImagesScreens by remember(uris) {
179
+ val multipleImageScreens by remember(uris) {
186
180
derivedStateOf {
187
181
mutableListOf (
188
182
Screen .ResizeAndConvert (uris),
@@ -209,7 +203,7 @@ internal fun List<Uri>.screenList(
209
203
add(Screen .ImageCutter (uris))
210
204
add(Screen .ImagePreview (uris))
211
205
add(Screen .LimitResize (uris))
212
- add( Screen . Zip (uris) )
206
+ addAll(filesAvailableScreens )
213
207
add(Screen .SvgMaker (uris))
214
208
215
209
var haveJpeg = false
@@ -261,12 +255,19 @@ internal fun List<Uri>.screenList(
261
255
}
262
256
}
263
257
}
258
+ val imageScreens by remember(uris) {
259
+ derivedStateOf {
260
+ if (uris.size == 1 ) singleImageScreens
261
+ else multipleImageScreens
262
+ }
263
+ }
264
264
265
- val textAvailableScreens by remember(extraImageType ) {
265
+ val textAvailableScreens by remember(extraDataType ) {
266
266
derivedStateOf {
267
+ val text = (extraDataType as ? ExtraDataType .Text )?.text ? : " "
267
268
listOf (
268
- Screen .ScanQrCode (extraImageType ? : " " ),
269
- Screen .LoadNetImage (extraImageType ? : " " )
269
+ Screen .ScanQrCode (text ),
270
+ Screen .LoadNetImage (text )
270
271
)
271
272
}
272
273
}
@@ -275,23 +276,21 @@ internal fun List<Uri>.screenList(
275
276
276
277
return remember(
277
278
favoriteScreens,
278
- extraImageType ,
279
+ extraDataType ,
279
280
uris,
280
281
pdfAvailableScreens,
281
- singleImageScreens ,
282
- multipleImagesScreens
282
+ audioAvailableScreens ,
283
+ imageScreens
283
284
) {
284
285
derivedStateOf {
285
- when {
286
- extraImageType == " audio" -> audioAvailableScreens
287
- extraImageType == " pdf" -> pdfAvailableScreens
288
- extraImageType == " gif" -> gifAvailableScreens
289
- extraImageType == " file" -> filesAvailableScreens
290
- uris.size == 1 -> singleImageScreens
291
- uris.size >= 2 -> multipleImagesScreens
292
- extraImageType != null -> textAvailableScreens
293
-
294
- else -> multipleImagesScreens
286
+ when (extraDataType) {
287
+ is ExtraDataType .Backup -> filesAvailableScreens
288
+ is ExtraDataType .Text -> textAvailableScreens
289
+ ExtraDataType .Audio -> audioAvailableScreens
290
+ ExtraDataType .File -> filesAvailableScreens
291
+ ExtraDataType .Gif -> gifAvailableScreens
292
+ ExtraDataType .Pdf -> pdfAvailableScreens
293
+ null , ExtraDataType .Jxl -> imageScreens
295
294
}.sortedWith(compareBy(nullsLast()) { s -> favoriteScreens.find { it == s.id } })
296
295
}
297
296
}
0 commit comments