From 8be6ad84fc8e359c30538a6bba3878bce92d29f4 Mon Sep 17 00:00:00 2001 From: Lokesh Gidra Date: Fri, 17 Nov 2023 23:34:55 +0800 Subject: [PATCH] Get rid of IntList, LongList --- .../ehviewer/download/DownloadManager.kt | 21 +++++++++---------- .../ehviewer/download/DownloadService.kt | 7 +++---- .../com/hippo/ehviewer/ui/CommonOperations.kt | 15 ++++--------- .../hippo/ehviewer/ui/scene/DownloadsScene.kt | 15 +++++-------- .../com/hippo/ehviewer/util/ArrayUtils.kt | 18 ++++++++++++++++ .../kotlin/com/hippo/ehviewer/util/IntList.kt | 8 ------- .../com/hippo/ehviewer/util/LongList.kt | 8 ------- 7 files changed, 40 insertions(+), 52 deletions(-) create mode 100644 app/src/main/kotlin/com/hippo/ehviewer/util/ArrayUtils.kt delete mode 100644 app/src/main/kotlin/com/hippo/ehviewer/util/IntList.kt delete mode 100644 app/src/main/kotlin/com/hippo/ehviewer/util/LongList.kt diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt index c23eaeaa8..bc795983a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadManager.kt @@ -32,9 +32,9 @@ import com.hippo.ehviewer.spider.readCompatFromUniFile import com.hippo.ehviewer.spider.write import com.hippo.ehviewer.util.AppConfig import com.hippo.ehviewer.util.ConcurrentPool -import com.hippo.ehviewer.util.LongList import com.hippo.ehviewer.util.SimpleHandler import com.hippo.ehviewer.util.assertNotMainThread +import com.hippo.ehviewer.util.mapNotNull import com.hippo.ehviewer.util.runAssertingNotMainThread import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.util.lang.launchIO @@ -218,13 +218,12 @@ object DownloadManager : OnSpiderListener { } } - suspend fun startRangeDownload(gidList: LongList) { + suspend fun startRangeDownload(gidList: LongArray) { var update = false - for (i in 0 until gidList.size) { - val gid = gidList[i] - val info = mAllInfoMap[gid] + for (element in gidList) { + val info = mAllInfoMap[element] if (null == info) { - Log.d(TAG, "Can't get download info with gid: $gid") + Log.d(TAG, "Can't get download info with gid: $element") continue } if (info.state == DownloadInfo.STATE_NONE || info.state == DownloadInfo.STATE_FAILED || info.state == DownloadInfo.STATE_FINISH) { @@ -374,7 +373,7 @@ object DownloadManager : OnSpiderListener { } } - suspend fun stopRangeDownload(gidList: LongList) { + suspend fun stopRangeDownload(gidList: LongArray) { stopRangeDownloadInternal(gidList) // Update listener @@ -432,7 +431,7 @@ object DownloadManager : OnSpiderListener { } } - suspend fun deleteRangeDownload(gidList: LongList) { + suspend fun deleteRangeDownload(gidList: LongArray) { stopRangeDownloadInternal(gidList) val list = gidList.mapNotNull { gid -> mAllInfoMap.remove(gid)?.also { getInfoListForLabel(it.label)?.remove(it) } @@ -546,11 +545,11 @@ object DownloadManager : OnSpiderListener { // Update in DB // Update mDownloadListener - private suspend fun stopRangeDownloadInternal(gidList: LongList) { + private suspend fun stopRangeDownloadInternal(gidList: LongArray) { // Two way if (gidList.size < mWaitList.size) { - for (i in 0 until gidList.size) { - stopDownloadInternal(gidList[i]) + for (element in gidList) { + stopDownloadInternal(element) } } else { // Check current task diff --git a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt index cf6982be0..ceaa8c59f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/download/DownloadService.kt @@ -37,7 +37,6 @@ import com.hippo.ehviewer.dao.DownloadInfo import com.hippo.ehviewer.ui.MainActivity import com.hippo.ehviewer.ui.scene.DownloadsScene import com.hippo.ehviewer.util.FileUtils -import com.hippo.ehviewer.util.LongList import com.hippo.ehviewer.util.ReadableTime import com.hippo.ehviewer.util.SimpleHandler import com.hippo.ehviewer.util.getParcelableExtraCompat @@ -105,7 +104,7 @@ class DownloadService : Service(), DownloadManager.DownloadListener, CoroutineSc } ACTION_START_RANGE -> { - val gidList = intent.getParcelableExtraCompat(KEY_GID_LIST) + val gidList = intent.getLongArrayExtra(KEY_GID_LIST) if (gidList != null) { deferredMgr.await().startRangeDownload(gidList) } @@ -125,7 +124,7 @@ class DownloadService : Service(), DownloadManager.DownloadListener, CoroutineSc ACTION_STOP_CURRENT -> deferredMgr.await().stopCurrentDownload() ACTION_STOP_RANGE -> { - val gidList = intent.getParcelableExtraCompat(KEY_GID_LIST) + val gidList = intent.getLongArrayExtra(KEY_GID_LIST) if (gidList != null) { deferredMgr.await().stopRangeDownload(gidList) } @@ -141,7 +140,7 @@ class DownloadService : Service(), DownloadManager.DownloadListener, CoroutineSc } ACTION_DELETE_RANGE -> { - val gidList = intent.getParcelableExtraCompat(KEY_GID_LIST) + val gidList = intent.getLongArrayExtra(KEY_GID_LIST) if (gidList != null) { deferredMgr.await().deleteRangeDownload(gidList) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt index b6068c404..2a6025ac1 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt @@ -54,9 +54,9 @@ import com.hippo.ehviewer.download.downloadLocation import com.hippo.ehviewer.ui.scene.BaseScene import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.util.FavouriteStatusRouter -import com.hippo.ehviewer.util.LongList import com.hippo.ehviewer.util.findActivity import com.hippo.ehviewer.util.isAtLeastT +import com.hippo.ehviewer.util.mapToLongArray import com.hippo.ehviewer.util.requestPermission import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.ui.reader.ReaderActivity @@ -99,19 +99,12 @@ suspend fun DialogState.startDownload( if (isAtLeastT) { requestPermission(Manifest.permission.POST_NOTIFICATIONS) } - val toStart = LongList() - val toAdd = mutableListOf() - for (gi in galleryInfos) { - if (DownloadManager.containDownloadInfo(gi.gid)) { - toStart.add(gi.gid) - } else { - toAdd.add(gi) - } - } + val (toStart, toAdd) = galleryInfos.partition { DownloadManager.containDownloadInfo(it.gid) } if (toStart.isNotEmpty()) { val intent = Intent(context, DownloadService::class.java) intent.action = DownloadService.ACTION_START_RANGE - intent.putExtra(DownloadService.KEY_GID_LIST, toStart) + val list = toStart.mapToLongArray(GalleryInfo::gid) + intent.putExtra(DownloadService.KEY_GID_LIST, list) ContextCompat.startForegroundService(context, intent) } if (toAdd.isEmpty()) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 78bf9e03e..aaf33736a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -60,7 +60,6 @@ import androidx.compose.ui.res.stringArrayResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp -import androidx.compose.ui.util.fastForEachReversed import androidx.core.content.ContextCompat import androidx.core.os.bundleOf import androidx.lifecycle.lifecycleScope @@ -111,8 +110,8 @@ import com.hippo.ehviewer.ui.setMD3Content import com.hippo.ehviewer.ui.tools.CropDefaults import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.util.FileUtils -import com.hippo.ehviewer.util.LongList import com.hippo.ehviewer.util.containsIgnoreCase +import com.hippo.ehviewer.util.mapToLongArray import com.hippo.ehviewer.util.sendTo import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.util.lang.launchIO @@ -447,12 +446,8 @@ class DownloadsScene : expanded = false val list = mList ?: return@DropdownMenuItem val activity = requireActivity() - val gidList = LongList() - list.fastForEachReversed { info -> - if (info.state != DownloadInfo.STATE_FINISH) { - gidList.add(info.gid) - } - } + val gidList = list.filter { it.state != DownloadInfo.STATE_FINISH } + .asReversed().mapToLongArray(DownloadInfo::gid) val intent = Intent(activity, DownloadService::class.java) intent.action = DownloadService.ACTION_START_RANGE intent.putExtra(DownloadService.KEY_GID_LIST, gidList) @@ -553,7 +548,7 @@ class DownloadsScene : } else { val downloadInfoList = tracker.getAndClearSelection() val gidList = if (position in 1..3) { - LongList(downloadInfoList.map(DownloadInfo::gid).toMutableList()) + downloadInfoList.mapToLongArray(DownloadInfo::gid) } else { null } @@ -690,7 +685,7 @@ class DownloadsScene : private inner class DeleteRangeDialogHelper( private val mDownloadInfoList: List, - private val mGidList: LongList, + private val mGidList: LongArray, private val mBuilder: CheckBoxDialogBuilder, ) : DialogInterface.OnClickListener { override fun onClick(dialog: DialogInterface, which: Int) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/ArrayUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/ArrayUtils.kt new file mode 100644 index 000000000..e6f808fad --- /dev/null +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/ArrayUtils.kt @@ -0,0 +1,18 @@ +package com.hippo.ehviewer.util + +inline fun > LongArray.mapNotNullTo(destination: C, transform: (Long) -> R?): C { + forEach { element -> transform(element)?.let { destination.add(it) } } + return destination +} + +inline fun Collection.mapToLongArray(transform: (T) -> Long): LongArray { + val result = LongArray(size) + var index = 0 + for (element in this) + result[index++] = transform(element) + return result +} + +inline fun LongArray.mapNotNull(transform: (Long) -> R?): List { + return mapNotNullTo(ArrayList(), transform) +} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/IntList.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/IntList.kt deleted file mode 100644 index b8310f506..000000000 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/IntList.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.hippo.ehviewer.util - -import android.os.Parcelable -import kotlinx.parcelize.Parcelize - -@Parcelize -class IntList(private val delegate: MutableList = mutableListOf()) : - Parcelable, MutableList by delegate diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/LongList.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/LongList.kt deleted file mode 100644 index df7186101..000000000 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/LongList.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.hippo.ehviewer.util - -import android.os.Parcelable -import kotlinx.parcelize.Parcelize - -@Parcelize -class LongList(private val delegate: MutableList = mutableListOf()) : - Parcelable, MutableList by delegate