diff --git a/app/detekt_baseline.xml b/app/detekt_baseline.xml
index 6c2a6da631..afafc1a17c 100644
--- a/app/detekt_baseline.xml
+++ b/app/detekt_baseline.xml
@@ -17,7 +17,6 @@
NestedBlockDepth:ReceiverHandShake.kt$ReceiverHandShake$override fun exchangeFileTransferMetadata(inputStream: InputStream, outputStream: OutputStream)
PackageNaming:AvailableSpaceCalculator.kt$package
org.kiwix.kiwixmobile.zimManager.libraryView
- PackageNaming:ConnectivityBroadcastReceiver.kt$package org.kiwix.kiwixmobile.zimManager
PackageNaming:DefaultLanguageProvider.kt$package org.kiwix.kiwixmobile.zimManager
PackageNaming:DeleteFiles.kt$package
org.kiwix.kiwixmobile.zimManager.fileselectView.effects
@@ -37,7 +36,6 @@
PackageNaming:MountFileSystemChecker.kt$package org.kiwix.kiwixmobile.zimManager
PackageNaming:NavigateToDownloads.kt$package
org.kiwix.kiwixmobile.zimManager.fileselectView.effects
- PackageNaming:NetworkState.kt$package org.kiwix.kiwixmobile.zimManager
PackageNaming:None.kt$package org.kiwix.kiwixmobile.zimManager.fileselectView.effects
PackageNaming:OpenFileWithNavigation.kt$package
org.kiwix.kiwixmobile.zimManager.fileselectView.effects
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt
index caa8778277..513d5b6517 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt
+++ b/app/src/main/java/org/kiwix/kiwixmobile/nav/destination/library/OnlineLibraryFragment.kt
@@ -89,7 +89,7 @@ import org.kiwix.kiwixmobile.core.utils.dialog.DialogShower
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog
import org.kiwix.kiwixmobile.core.utils.dialog.KiwixDialog.YesNoDialog.WifiOnly
import org.kiwix.kiwixmobile.databinding.FragmentDestinationDownloadBinding
-import org.kiwix.kiwixmobile.zimManager.NetworkState
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel
import org.kiwix.kiwixmobile.zimManager.libraryView.AvailableSpaceCalculator
import org.kiwix.kiwixmobile.zimManager.libraryView.adapter.LibraryAdapter
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt b/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt
index 262bf4150f..8b0cae71ef 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt
+++ b/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModel.kt
@@ -66,13 +66,15 @@ import org.kiwix.kiwixmobile.core.utils.BookUtils
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.core.utils.files.Log
import org.kiwix.kiwixmobile.core.utils.files.ScanningProgressListener
+import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
import org.kiwix.kiwixmobile.core.zim_manager.Language
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.MULTI
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORMAL
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem.BookOnDisk
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState
-import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.MultiModeFinished
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestMultiSelection
diff --git a/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt b/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt
index 91a63a8cc8..c4d3c09dbd 100644
--- a/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt
+++ b/app/src/test/java/org/kiwix/kiwixmobile/zimManager/ZimManageViewModelTest.kt
@@ -48,7 +48,9 @@ import org.kiwix.kiwixmobile.core.entity.LibraryNetworkEntity.Book
import org.kiwix.kiwixmobile.core.utils.BookUtils
import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil
import org.kiwix.kiwixmobile.core.utils.files.ScanningProgressListener
+import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
import org.kiwix.kiwixmobile.core.zim_manager.Language
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.MULTI
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.SelectionMode.NORMAL
import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDiskListItem
@@ -56,8 +58,8 @@ import org.kiwix.kiwixmobile.core.zim_manager.fileselect_view.adapter.BooksOnDis
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState.CanWrite4GbFile
import org.kiwix.kiwixmobile.zimManager.Fat32Checker.FileSystemState.CannotWrite4GbFile
-import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
-import org.kiwix.kiwixmobile.zimManager.NetworkState.NOT_CONNECTED
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.NOT_CONNECTED
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.MultiModeFinished
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestDeleteMultiSelection
import org.kiwix.kiwixmobile.zimManager.ZimManageViewModel.FileSelectActions.RequestMultiSelection
diff --git a/core/detekt_baseline.xml b/core/detekt_baseline.xml
index 552831001b..a8770c6630 100644
--- a/core/detekt_baseline.xml
+++ b/core/detekt_baseline.xml
@@ -51,6 +51,8 @@
PackageNaming:MountPointProducer.kt$package org.kiwix.kiwixmobile.core.zim_manager
PackageNaming:SelectionMode.kt$package org.kiwix.kiwixmobile.core.zim_manager.fileselect_view
PackageNaming:TagsView.kt$package org.kiwix.kiwixmobile.core.zim_manager
+ PackageNaming:ConnectivityBroadcastReceiver.kt$package org.kiwix.kiwixmobile.core.zim_manager
+ PackageNaming:NetworkState.kt$package org.kiwix.kiwixmobile.core.zim_manager
ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun getAllZimParts(book: Book): List<File>
ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun getLocalFilePathByUri( context: Context, uri: Uri ): String?
ReturnCount:FileUtils.kt$FileUtils$@JvmStatic fun hasPart(file: File): Boolean
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/ConnectivityManagerExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/ConnectivityManagerExtensions.kt
similarity index 80%
rename from app/src/main/java/org/kiwix/kiwixmobile/ConnectivityManagerExtensions.kt
rename to core/src/main/java/org/kiwix/kiwixmobile/core/ConnectivityManagerExtensions.kt
index cb99280660..d44ae96357 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/ConnectivityManagerExtensions.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/ConnectivityManagerExtensions.kt
@@ -16,13 +16,13 @@
*
*/
-package org.kiwix.kiwixmobile
+package org.kiwix.kiwixmobile.core
import android.net.ConnectivityManager
import org.kiwix.kiwixmobile.core.compat.CompatHelper.Companion.isNetworkAvailable
-import org.kiwix.kiwixmobile.zimManager.NetworkState
-import org.kiwix.kiwixmobile.zimManager.NetworkState.CONNECTED
-import org.kiwix.kiwixmobile.zimManager.NetworkState.NOT_CONNECTED
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.CONNECTED
+import org.kiwix.kiwixmobile.core.zim_manager.NetworkState.NOT_CONNECTED
val ConnectivityManager.networkState: NetworkState
get() = if (isNetworkAvailable())
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 370b65d7d9..2704d5fbc1 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
@@ -18,6 +18,7 @@
package org.kiwix.kiwixmobile.core.downloader.downloadManager
+import android.annotation.SuppressLint
import android.app.DownloadManager
import android.content.Context
import android.content.Intent
@@ -25,33 +26,50 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.kiwix.kiwixmobile.core.dao.DownloadRoomDao
-import org.kiwix.kiwixmobile.core.dao.entities.DownloadRoomEntity
import org.kiwix.kiwixmobile.core.downloader.DownloadMonitor
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_CANCEL
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_PAUSE
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_QUERY_DOWNLOAD_STATUS
import org.kiwix.kiwixmobile.core.downloader.downloadManager.DownloadNotificationManager.Companion.ACTION_RESUME
+import org.kiwix.kiwixmobile.core.extensions.registerReceiver
+import org.kiwix.kiwixmobile.core.zim_manager.ConnectivityBroadcastReceiver
import javax.inject.Inject
class DownloadManagerMonitor @Inject constructor(
val downloadRoomDao: DownloadRoomDao,
- private val context: Context
+ private val context: Context,
+ private val connectivityBroadcastReceiver: ConnectivityBroadcastReceiver
) : DownloadMonitor, DownloadManagerBroadcastReceiver.Callback {
private val lock = Any()
init {
+ context.registerReceiver(connectivityBroadcastReceiver)
+ startServiceIfActiveDownloads()
+ trackNetworkState()
+ }
+
+ @SuppressLint("CheckResult")
+ private fun trackNetworkState() {
+ connectivityBroadcastReceiver.networkStates
+ .distinctUntilChanged()
+ .subscribe(
+ {
+ // Start the service when the network changes so that we can
+ // track the progress accurately.
+ startServiceIfActiveDownloads()
+ },
+ Throwable::printStackTrace
+ )
+ }
+
+ private fun startServiceIfActiveDownloads() {
CoroutineScope(Dispatchers.IO).launch {
- if (getActiveDownloads().isNotEmpty()) {
+ if (downloadRoomDao.downloads().blockingFirst().isNotEmpty()) {
startService()
}
}
}
- private suspend fun getActiveDownloads(): List =
- downloadRoomDao.downloadRoomEntity().blockingFirst().filter {
- it.status != Status.PAUSED && it.status != Status.CANCELLED
- }
-
override fun downloadCompleteOrCancelled(intent: Intent) {
synchronized(lock) {
intent.extras?.let {
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ConnectivityBroadcastReceiver.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/ConnectivityBroadcastReceiver.kt
similarity index 94%
rename from app/src/main/java/org/kiwix/kiwixmobile/zimManager/ConnectivityBroadcastReceiver.kt
rename to core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/ConnectivityBroadcastReceiver.kt
index 95298a2190..d8f49d9318 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/ConnectivityBroadcastReceiver.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/ConnectivityBroadcastReceiver.kt
@@ -16,7 +16,7 @@
*
*/
-package org.kiwix.kiwixmobile.zimManager
+package org.kiwix.kiwixmobile.core.zim_manager
import android.content.Context
import android.content.Intent
@@ -24,7 +24,7 @@ import android.net.ConnectivityManager
import io.reactivex.Flowable
import io.reactivex.processors.BehaviorProcessor
import org.kiwix.kiwixmobile.core.base.BaseBroadcastReceiver
-import org.kiwix.kiwixmobile.networkState
+import org.kiwix.kiwixmobile.core.networkState
import javax.inject.Inject
class ConnectivityBroadcastReceiver @Inject constructor(
diff --git a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/NetworkState.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/NetworkState.kt
similarity index 94%
rename from app/src/main/java/org/kiwix/kiwixmobile/zimManager/NetworkState.kt
rename to core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/NetworkState.kt
index 64125e1b85..85359d8252 100644
--- a/app/src/main/java/org/kiwix/kiwixmobile/zimManager/NetworkState.kt
+++ b/core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/NetworkState.kt
@@ -16,7 +16,7 @@
*
*/
-package org.kiwix.kiwixmobile.zimManager
+package org.kiwix.kiwixmobile.core.zim_manager
enum class NetworkState {
CONNECTED,