@@ -3,7 +3,6 @@ package com.anthonyla.paperize.feature.wallpaper.presentation.album_view_screen
3
3
4
4
import android.app.Application
5
5
import android.content.Context
6
- import android.webkit.MimeTypeMap
7
6
import androidx.core.net.toUri
8
7
import androidx.lifecycle.AndroidViewModel
9
8
import androidx.lifecycle.viewModelScope
@@ -39,10 +38,10 @@ class AlbumViewScreenViewModel @Inject constructor(
39
38
event.albumsWithWallpaper.let { album ->
40
39
val folders = album.folders.filter { _state .value.selectedFolders.contains(it.folderUri)}
41
40
val wallpapers = album.wallpapers.filter { _state .value.selectedWallpapers.contains(it.wallpaperUri)}
42
- val doesContainCover = wallpapers.any { it.wallpaperUri == album.album.coverUri }
41
+ val containsCoverUri = wallpapers.any { it.wallpaperUri == album.album.coverUri }
43
42
repository.deleteFolderList(folders)
44
43
repository.deleteWallpaperList(wallpapers)
45
- if (doesContainCover ) {
44
+ if (containsCoverUri ) {
46
45
repository.updateAlbum(album.album.copy(coverUri = null ))
47
46
}
48
47
}
@@ -52,15 +51,15 @@ class AlbumViewScreenViewModel @Inject constructor(
52
51
viewModelScope.launch {
53
52
event.albumsWithWallpaper.let { album ->
54
53
if (! _state .value.allSelected) {
55
- _state .update { state ->
56
- state .copy(
54
+ _state .update { it ->
55
+ it .copy(
57
56
selectedFolders = album.folders.map { it.folderUri },
58
57
selectedWallpapers = album.wallpapers.map { it.wallpaperUri },
59
58
selectedCount = album.folders.size + album.wallpapers.size,
60
- maxSize = album.folders.size + album.wallpapers.size
59
+ maxSize = album.folders.size + album.wallpapers.size,
60
+ allSelected = true
61
61
)
62
62
}
63
- updateAllSelected()
64
63
}
65
64
}
66
65
}
@@ -83,12 +82,13 @@ class AlbumViewScreenViewModel @Inject constructor(
83
82
viewModelScope.launch {
84
83
if (! _state .value.selectedFolders.any { it == event.directoryUri }) {
85
84
_state .update {
85
+ val folders = it.selectedFolders.plus(event.directoryUri)
86
86
it.copy(
87
- selectedFolders = it.selectedFolders.plus(event.directoryUri),
88
- selectedCount = it.selectedCount + 1
87
+ selectedFolders = folders,
88
+ selectedCount = it.selectedCount + 1 ,
89
+ allSelected = folders.size + it.selectedWallpapers.size >= it.maxSize
89
90
)
90
91
}
91
- updateAllSelected()
92
92
}
93
93
}
94
94
}
@@ -97,12 +97,13 @@ class AlbumViewScreenViewModel @Inject constructor(
97
97
viewModelScope.launch {
98
98
if (! _state .value.selectedWallpapers.any { it == event.wallpaperUri }) {
99
99
_state .update {
100
+ val wallpapers = it.selectedWallpapers.plus(event.wallpaperUri)
100
101
it.copy(
101
102
selectedWallpapers = it.selectedWallpapers.plus(event.wallpaperUri),
102
- selectedCount = it.selectedCount + 1
103
+ selectedCount = it.selectedCount + 1 ,
104
+ allSelected = it.selectedFolders.size + wallpapers.size >= it.maxSize
103
105
)
104
106
}
105
- updateAllSelected()
106
107
}
107
108
}
108
109
}
@@ -111,12 +112,13 @@ class AlbumViewScreenViewModel @Inject constructor(
111
112
viewModelScope.launch {
112
113
if (_state .value.selectedFolders.find { it == event.directoryUri } != null ) {
113
114
_state .update {
115
+ val folders = it.selectedFolders.minus(event.directoryUri)
114
116
it.copy(
115
- selectedFolders = it.selectedFolders.minus(event.directoryUri),
116
- selectedCount = it.selectedCount - 1
117
+ selectedFolders = folders,
118
+ selectedCount = it.selectedCount - 1 ,
119
+ allSelected = folders.size + it.selectedWallpapers.size >= it.maxSize
117
120
)
118
121
}
119
- updateAllSelected()
120
122
}
121
123
}
122
124
}
@@ -125,12 +127,13 @@ class AlbumViewScreenViewModel @Inject constructor(
125
127
viewModelScope.launch {
126
128
if (_state .value.selectedWallpapers.find { it == event.wallpaperUri } != null ) {
127
129
_state .update {
130
+ val wallpapers = it.selectedWallpapers.minus(event.wallpaperUri)
128
131
it.copy(
129
- selectedWallpapers = it.selectedWallpapers.minus(event.wallpaperUri),
130
- selectedCount = it.selectedCount - 1
132
+ selectedWallpapers = wallpapers,
133
+ selectedCount = it.selectedCount - 1 ,
134
+ allSelected = it.selectedFolders.size + wallpapers.size >= it.maxSize
131
135
)
132
136
}
133
- updateAllSelected()
134
137
}
135
138
}
136
139
}
@@ -161,22 +164,22 @@ class AlbumViewScreenViewModel @Inject constructor(
161
164
162
165
is AlbumViewEvent .AddWallpapers -> {
163
166
viewModelScope.launch {
164
- val newWallpaperUris = event.wallpaperUris.filterNot { it in event.album.wallpapers.map { wallpaper -> wallpaper.wallpaperUri } }
165
- val newWallpapers = newWallpaperUris .map { uri ->
167
+ val wallpaperUris = event.wallpaperUris.filterNot { it in event.album.wallpapers.map { wallpaper -> wallpaper.wallpaperUri } }
168
+ val wallpapers = wallpaperUris .map { uri ->
166
169
Wallpaper (
167
170
initialAlbumName = event.album.album.initialAlbumName,
168
171
wallpaperUri = uri,
169
172
key = uri.hashCode() + event.album.album.initialAlbumName.hashCode(),
170
173
)
171
174
}
172
- repository.upsertWallpaperList(newWallpapers )
175
+ repository.upsertWallpaperList(wallpapers )
173
176
_state .update {
174
177
it.copy(
175
178
selectedFolders = emptyList(),
176
179
selectedWallpapers = emptyList(),
177
180
allSelected = false ,
178
181
selectedCount = 0 ,
179
- maxSize = _state .value. maxSize + newWallpapers .size
182
+ maxSize = it. maxSize + wallpapers .size
180
183
)
181
184
}
182
185
}
@@ -203,7 +206,7 @@ class AlbumViewScreenViewModel @Inject constructor(
203
206
selectedWallpapers = emptyList(),
204
207
allSelected = false ,
205
208
selectedCount = 0 ,
206
- maxSize = _state .value .maxSize + 1
209
+ maxSize = it .maxSize + 1
207
210
)
208
211
}
209
212
}
@@ -212,16 +215,6 @@ class AlbumViewScreenViewModel @Inject constructor(
212
215
}
213
216
}
214
217
215
- private fun updateAllSelected () {
216
- viewModelScope.launch {
217
- _state .update {
218
- it.copy(
219
- allSelected = it.selectedFolders.size + it.selectedWallpapers.size >= _state .value.maxSize
220
- )
221
- }
222
- }
223
- }
224
-
225
218
private fun getWallpaperFromFolder (folderUri : String , context : Context ): List <String > {
226
219
val folderDocumentFile = DocumentFileCompat .fromTreeUri(context, folderUri.toUri())
227
220
return listFilesRecursive(folderDocumentFile, context)
@@ -233,9 +226,8 @@ class AlbumViewScreenViewModel @Inject constructor(
233
226
if (file.isDirectory()) {
234
227
files.addAll(listFilesRecursive(file, context))
235
228
} else {
236
- val extension = MimeTypeMap .getFileExtensionFromUrl(file.uri.toString())
237
- val allowedExtensions = listOf (" jpg" , " png" , " heif" , " webp" )
238
- if (extension in allowedExtensions) {
229
+ val allowedExtensions = listOf (" jpg" , " jpeg" , " png" , " heif" , " webp" , " JPG" , " JPEG" , " PNG" , " HEIF" , " WEBP" )
230
+ if (file.extension in allowedExtensions) {
239
231
files.add(file.uri.toString())
240
232
}
241
233
}
0 commit comments