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,