Skip to content
Snippets Groups Projects
Commit 8f1f5656 authored by Ryan Harg's avatar Ryan Harg
Browse files

Bugfix/122 fix resource leakage

parent 5ace27ca
Branches
Tags
1 merge request!175Bugfix/122 fix resource leakage
...@@ -14,7 +14,6 @@ import com.google.android.exoplayer2.offline.DownloadManager ...@@ -14,7 +14,6 @@ import com.google.android.exoplayer2.offline.DownloadManager
import kotlinx.coroutines.Dispatchers.Default import kotlinx.coroutines.Dispatchers.Default
import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import org.koin.java.KoinJavaComponent.inject import org.koin.java.KoinJavaComponent.inject
...@@ -65,20 +64,19 @@ class DownloadsActivity : AppCompatActivity() { ...@@ -65,20 +64,19 @@ class DownloadsActivity : AppCompatActivity() {
private fun refresh() { private fun refresh() {
lifecycleScope.launch(Main) { lifecycleScope.launch(Main) {
val cursor = exoDownloadManager.downloadIndex.getDownloads()
adapter.downloads.clear() adapter.downloads.clear()
exoDownloadManager.downloadIndex.getDownloads()
while (cursor.moveToNext()) { .use { cursor ->
val download = cursor.download while (cursor.moveToNext()) {
val download = cursor.download
download.getMetadata()?.let { info ->
adapter.downloads.add( download.getMetadata()?.let { info ->
info.apply { this.download = download } adapter.downloads.add(
) info.apply { this.download = download }
)
}
}
} }
}
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
} }
} }
...@@ -101,26 +99,29 @@ class DownloadsActivity : AppCompatActivity() { ...@@ -101,26 +99,29 @@ class DownloadsActivity : AppCompatActivity() {
} }
private suspend fun refreshProgress() { private suspend fun refreshProgress() {
val cursor = exoDownloadManager.downloadIndex.getDownloads() exoDownloadManager.downloadIndex.getDownloads()
.use { cursor ->
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
val download = cursor.download val download = cursor.download
download.getMetadata()?.let { info -> download.getMetadata()?.let { info ->
adapter.downloads.withIndex().associate { it.value to it.index } adapter.downloads.withIndex().associate { it.value to it.index }
.filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match -> .filter { it.key.id == info.id }.toList().getOrNull(0)?.let { match ->
if (download.state == Download.STATE_DOWNLOADING && download.percentDownloaded != info.download?.percentDownloaded ?: 0) { if (download.state == Download.STATE_DOWNLOADING
withContext(Main) { && download.percentDownloaded != (info.download?.percentDownloaded ?: 0)
adapter.downloads[match.second] = info.apply { ) {
this.download = download withContext(Main) {
adapter.downloads[match.second] = info.apply {
this.download = download
}
adapter.notifyItemChanged(match.second)
}
} }
adapter.notifyItemChanged(match.second)
} }
}
} }
}
} }
}
} }
inner class DownloadChangedListener : DownloadsAdapter.OnDownloadChangedListener { inner class DownloadChangedListener : DownloadsAdapter.OnDownloadChangedListener {
......
...@@ -42,19 +42,18 @@ class TracksRepository(override val context: Context?, albumId: Int) : ...@@ -42,19 +42,18 @@ class TracksRepository(override val context: Context?, albumId: Int) :
companion object { companion object {
fun getDownloadedIds(exoDownloadManager: DownloadManager): List<Int>? { fun getDownloadedIds(exoDownloadManager: DownloadManager): List<Int>? {
val cursor = exoDownloadManager.downloadIndex.getDownloads()
val ids: MutableList<Int> = mutableListOf() val ids: MutableList<Int> = mutableListOf()
exoDownloadManager.downloadIndex.getDownloads()
while (cursor.moveToNext()) { .use { cursor ->
val download = cursor.download while (cursor.moveToNext()) {
val download = cursor.download
download.getMetadata()?.let { download.getMetadata()?.let {
if (download.state == Download.STATE_COMPLETED) { if (download.state == Download.STATE_COMPLETED) {
ids.add(it.id) ids.add(it.id)
}
}
} }
} }
}
return ids return ids
} }
} }
......
Fix leaked database cursor resource
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment