Skip to content

Commit 2cd2e15

Browse files
authored
Merge pull request #4110 from kiwix/minor_improvement_in_download
Minor improvement in downloading functionality.
2 parents 15081ca + 49fb4ca commit 2cd2e15

File tree

9 files changed

+43
-21
lines changed

9 files changed

+43
-21
lines changed

app/detekt_baseline.xml

-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
<ID>NestedBlockDepth:ReceiverHandShake.kt$ReceiverHandShake$override fun exchangeFileTransferMetadata(inputStream: InputStream, outputStream: OutputStream)</ID>
1818
<ID>PackageNaming:AvailableSpaceCalculator.kt$package
1919
org.kiwix.kiwixmobile.zimManager.libraryView</ID>
20-
<ID>PackageNaming:ConnectivityBroadcastReceiver.kt$package org.kiwix.kiwixmobile.zimManager</ID>
2120
<ID>PackageNaming:DefaultLanguageProvider.kt$package org.kiwix.kiwixmobile.zimManager</ID>
2221
<ID>PackageNaming:DeleteFiles.kt$package
2322
org.kiwix.kiwixmobile.zimManager.fileselectView.effects</ID>
@@ -37,7 +36,6 @@
3736
<ID>PackageNaming:MountFileSystemChecker.kt$package org.kiwix.kiwixmobile.zimManager</ID>
3837
<ID>PackageNaming:NavigateToDownloads.kt$package
3938
org.kiwix.kiwixmobile.zimManager.fileselectView.effects</ID>
40-
<ID>PackageNaming:NetworkState.kt$package org.kiwix.kiwixmobile.zimManager</ID>
4139
<ID>PackageNaming:None.kt$package org.kiwix.kiwixmobile.zimManager.fileselectView.effects</ID>
4240
<ID>PackageNaming:OpenFileWithNavigation.kt$package
4341
org.kiwix.kiwixmobile.zimManager.fileselectView.effects</ID>

app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ import org.kiwix.kiwixmobile.core.utils.dialog.DialogShower
8989
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
9090
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.YesNoDialog.WifiOnly
9191
import org.kiwix.kiwixmobile.databinding.FragmentDestinationDownloadBinding
92-
import org.kiwix.kiwixmobile.zimManager.NetworkState
92+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
9393
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel
9494
import org.kiwix.kiwixmobile.zimManager.libraryView.AvailableSpaceCalculator
9595
import org.kiwix.kiwixmobile.zimManager.libraryView.adapter.LibraryAdapter

app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,15 @@ import org.kiwix.kiwixmobile.core.utils.BookUtils
6666
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
6767
import org.kiwix.kiwixmobile.core.utils.files.Log
6868
import org.kiwix.kiwixmobile.core.utils.files.ScanningProgressListener
69+
import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
6970
import org.kiwix.kiwixmobile.core.zim_manager.Language
71+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
7072
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.MULTI
7173
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORMAL
7274
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
7375
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk
7476
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState
75-
import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
77+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
7678
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.MultiModeFinished
7779
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection
7880
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestMultiSelection

app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,18 @@ import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity.Book
4848
import org.kiwix.kiwixmobile.core.utils.BookUtils
4949
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
5050
import org.kiwix.kiwixmobile.core.utils.files.ScanningProgressListener
51+
import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
5152
import org.kiwix.kiwixmobile.core.zim_manager.Language
53+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
5254
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.MULTI
5355
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORMAL
5456
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
5557
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk
5658
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState
5759
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState.CanWrite4GbFile
5860
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState.CannotWrite4GbFile
59-
import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
60-
import org.kiwix.kiwixmobile.zimManager.NetworkState.NOT_CONNECTED
61+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
62+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.NOT_CONNECTED
6163
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.MultiModeFinished
6264
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection
6365
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestMultiSelection

core/detekt_baseline.xml

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
<ID>PackageNaming:MountPointProducer.kt$package org.kiwix.kiwixmobile.core.zim_manager</ID>
5252
<ID>PackageNaming:SelectionMode.kt$package org.kiwix.kiwixmobile.core.zim_manager.fileselect_view</ID>
5353
<ID>PackageNaming:TagsView.kt$package org.kiwix.kiwixmobile.core.zim_manager</ID>
54+
<ID>PackageNaming:ConnectivityBroadcastReceiver.kt$package org.kiwix.kiwixmobile.core.zim_manager</ID>
55+
<ID>PackageNaming:NetworkState.kt$package org.kiwix.kiwixmobile.core.zim_manager</ID>
5456
<ID>ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun getAllZimParts(book: Book): List&lt;File></ID>
5557
<ID>ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun getLocalFilePathByUri( context: Context, uri: Uri ): String?</ID>
5658
<ID>ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun hasPart(file: File): Boolean</ID>

app/src/main/java/org/kiwix/kiwixmobile/ConnectivityManagerExtensions.kt core/src/main/java/org/kiwix/kiwixmobile/core/ConnectivityManagerExtensions.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
*
1717
*/
1818

19-
package org.kiwix.kiwixmobile
19+
package org.kiwix.kiwixmobile.core
2020

2121
import android.net.ConnectivityManager
2222
import org.kiwix.kiwixmobile.core.compat.CompatHelper.Companion.isNetworkAvailable
23-
import org.kiwix.kiwixmobile.zimManager.NetworkState
24-
import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
25-
import org.kiwix.kiwixmobile.zimManager.NetworkState.NOT_CONNECTED
23+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
24+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
25+
import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.NOT_CONNECTED
2626

2727
val ConnectivityManager.networkState: NetworkState
2828
get() = if (isNetworkAvailable())

core/src/main/java/org/kiwix/kiwixmobile/core/downloader/downloadManager/DownloadManagerMonitor.kt

+26-8
Original file line numberDiff line numberDiff line change
@@ -18,40 +18,58 @@
1818

1919
package org.kiwix.kiwixmobile.core.downloader.downloadManager
2020

21+
import android.annotation.SuppressLint
2122
import android.app.DownloadManager
2223
import android.content.Context
2324
import android.content.Intent
2425
import kotlinx.coroutines.CoroutineScope
2526
import kotlinx.coroutines.Dispatchers
2627
import kotlinx.coroutines.launch
2728
import org.kiwix.kiwixmobile.core.dao.DownloadRoomDao
28-
import org.kiwix.kiwixmobile.core.dao.entities.DownloadRoomEntity
2929
import org.kiwix.kiwixmobile.core.downloader.DownloadMonitor
3030
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_CANCEL
3131
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_PAUSE
3232
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_QUERY_DOWNLOAD_STATUS
3333
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_RESUME
34+
import org.kiwix.kiwixmobile.core.extensions.registerReceiver
35+
import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
3436
import javax.inject.Inject
3537

3638
class DownloadManagerMonitor @Inject constructor(
3739
val downloadRoomDao: DownloadRoomDao,
38-
private val context: Context
40+
private val context: Context,
41+
private val connectivityBroadcastReceiver: ConnectivityBroadcastReceiver
3942
) : DownloadMonitor, DownloadManagerBroadcastReceiver.Callback {
4043
private val lock = Any()
4144

4245
init {
46+
context.registerReceiver(connectivityBroadcastReceiver)
47+
startServiceIfActiveDownloads()
48+
trackNetworkState()
49+
}
50+
51+
@SuppressLint("CheckResult")
52+
private fun trackNetworkState() {
53+
connectivityBroadcastReceiver.networkStates
54+
.distinctUntilChanged()
55+
.subscribe(
56+
{
57+
// Start the service when the network changes so that we can
58+
// track the progress accurately.
59+
startServiceIfActiveDownloads()
60+
},
61+
Throwable::printStackTrace
62+
)
63+
}
64+
65+
private fun startServiceIfActiveDownloads() {
4366
CoroutineScope(Dispatchers.IO).launch {
44-
if (getActiveDownloads().isNotEmpty()) {
67+
if (downloadRoomDao.downloads().blockingFirst().isNotEmpty()) {
4568
startService()
4669
}
4770
}
4871
}
4972

50-
private suspend fun getActiveDownloads(): List<DownloadRoomEntity> =
51-
downloadRoomDao.downloadRoomEntity().blockingFirst().filter {
52-
it.status != Status.PAUSED && it.status != Status.CANCELLED
53-
}
54-
5573
override fun downloadCompleteOrCancelled(intent: Intent) {
5674
synchronized(lock) {
5775
intent.extras?.let {

app/src/main/java/org/kiwix/kiwixmobile/zimManager/ConnectivityBroadcastReceiver.kt core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/ConnectivityBroadcastReceiver.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@
1616
*
1717
*/
1818

19-
package org.kiwix.kiwixmobile.zimManager
19+
package org.kiwix.kiwixmobile.core.zim_manager
2020

2121
import android.content.Context
2222
import android.content.Intent
2323
import android.net.ConnectivityManager
2424
import io.reactivex.Flowable
2525
import io.reactivex.processors.BehaviorProcessor
2626
import org.kiwix.kiwixmobile.core.base.BaseBroadcastReceiver
27-
import org.kiwix.kiwixmobile.networkState
27+
import org.kiwix.kiwixmobile.core.networkState
2828
import javax.inject.Inject
2929

3030
class ConnectivityBroadcastReceiver @Inject constructor(

app/src/main/java/org/kiwix/kiwixmobile/zimManager/NetworkState.kt core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/NetworkState.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*
1717
*/
1818

19-
package org.kiwix.kiwixmobile.zimManager
19+
package org.kiwix.kiwixmobile.core.zim_manager
2020

2121
enum class NetworkState {
2222
CONNECTED,

0 commit comments

Comments
 (0)