Skip to content

Commit 49fd2da

Browse files
committed
use thread safe CopyOnWriteArrayList
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent 8515c04 commit 49fd2da

1 file changed

Lines changed: 8 additions & 13 deletions

File tree

app/src/main/java/com/nextcloud/utils/thumbnail/FileThumbnailGenerator.kt

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import com.owncloud.android.utils.BitmapUtils
3838
import com.owncloud.android.utils.MimeType
3939
import com.owncloud.android.utils.MimeTypeUtil
4040
import com.owncloud.android.utils.theme.ViewThemeUtils
41-
import java.util.Collections
41+
import java.util.concurrent.CopyOnWriteArrayList
4242
import java.util.concurrent.Executors
4343
import javax.inject.Inject
4444
import javax.inject.Provider
@@ -67,7 +67,7 @@ class FileThumbnailGenerator @Inject constructor(
6767
maxOf(MIN_THREADS, Runtime.getRuntime().availableProcessors() / CORES_PER_THREAD)
6868
)
6969

70-
private val tasks = Collections.synchronizedList(mutableListOf<ThumbnailGenerationTask>())
70+
private val tasks = CopyOnWriteArrayList<ThumbnailGenerationTask>()
7171

7272
fun setThumbnail(file: OCFile, view: ImageView, arguments: ThumbnailArguments) {
7373
if (file.remoteId == null) {
@@ -109,13 +109,11 @@ class FileThumbnailGenerator @Inject constructor(
109109
}
110110

111111
fun cancelPendingTasks() {
112-
synchronized(tasks) {
113-
tasks.forEach { task ->
114-
task.cancel(true)
115-
task.getMethod?.abort()
116-
}
117-
tasks.clear()
112+
tasks.forEach { task ->
113+
task.cancel(true)
114+
task.getMethod?.abort()
118115
}
116+
tasks.clear()
119117
}
120118

121119
private fun show(bitmap: Bitmap, file: OCFile, view: ImageView, arguments: ThumbnailArguments) {
@@ -158,12 +156,9 @@ class FileThumbnailGenerator @Inject constructor(
158156
return
159157
}
160158

161-
val alreadyRunning = synchronized(tasks) {
162-
tasks.removeAll { it.isCancelled || it.status == AsyncTask.Status.FINISHED }
163-
tasks.any { it.imageKey == file.remoteId }
164-
}
159+
tasks.removeIf { it.isCancelled || it.status == AsyncTask.Status.FINISHED }
165160

166-
if (!alreadyRunning) {
161+
if (tasks.none { it.imageKey == file.remoteId }) {
167162
startTask(
168163
file,
169164
view,

0 commit comments

Comments
 (0)