From 1f55d953868c20cf52901319175606717537f746 Mon Sep 17 00:00:00 2001 From: MohitMaliFtechiz Date: Wed, 18 Dec 2024 13:16:26 +0530 Subject: [PATCH] Improved the resuming of downloads. * Improved the resuming download logic. --- .../downloadManager/DownloadManagerMonitor.kt | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/downloadManager/DownloadManagerMonitor.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/downloadManager/DownloadManagerMonitor.kt index 4496f37e8..6f7f01c25 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/downloadManager/DownloadManagerMonitor.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/downloader/downloadManager/DownloadManagerMonitor.kt @@ -20,7 +20,6 @@ package org.kiwix.kiwixmobile.core.downloader.downloadManager import android.annotation.SuppressLint import android.app.DownloadManager -import android.content.ContentUris import android.content.ContentValues import android.content.Context import android.content.Intent @@ -562,9 +561,13 @@ class DownloadManagerMonitor @Inject constructor( put(COLUMN_CONTROL, control) put(DownloadManager.COLUMN_STATUS, status) } - val uri = ContentUris.withAppendedId(downloadBaseUri, downloadId) context.contentResolver - .update(uri, contentValues, null, null) + .update( + downloadBaseUri, + contentValues, + getWhereClauseForIds(longArrayOf(downloadId)), + getWhereArgsForIds(longArrayOf(downloadId)) + ) true } catch (ignore: Exception) { Log.e("DOWNLOAD_MONITOR", "Couldn't pause/resume the download. Original exception = $ignore") @@ -572,6 +575,33 @@ class DownloadManagerMonitor @Inject constructor( } } + private fun getWhereArgsForIds(ids: LongArray): Array { + val whereArgs = arrayOfNulls(ids.size) + return getWhereArgsForIds(ids, whereArgs) + } + + private fun getWhereArgsForIds(ids: LongArray, args: Array): Array { + assert(args.size >= ids.size) + for (i in ids.indices) { + args[i] = "${ids[i]}" + } + return args + } + + private fun getWhereClauseForIds(ids: LongArray): String { + val whereClause = StringBuilder() + whereClause.append("(") + for (i in ids.indices) { + if (i > 0) { + whereClause.append("OR ") + } + whereClause.append("_id") + whereClause.append(" = ? ") + } + whereClause.append(")") + return "$whereClause" + } + private fun shouldUpdateDownloadStatus(downloadRoomEntity: DownloadRoomEntity) = downloadRoomEntity.status != Status.COMPLETED