Skip to content

Commit 49fb4ca

Browse files
Minor improvement in downloading functionality.
* When the internet connection is turned off and then turned on back, the download progress is now properly tracked while the application is in the foreground. Tracking progress is working fine with this scenario when the application is closed.
1 parent 15081ca commit 49fb4ca

File tree

9 files changed

+43
-21
lines changed

9 files changed

+43
-21
lines changed

app/detekt_baseline.xml

Lines changed: 0 additions & 2 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 3 additions & 1 deletion
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

Lines changed: 4 additions & 2 deletions
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

Lines changed: 2 additions & 0 deletions
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 renamed to core/src/main/java/org/kiwix/kiwixmobile/core/ConnectivityManagerExtensions.kt

Lines changed: 4 additions & 4 deletions
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

Lines changed: 26 additions & 8 deletions
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 renamed to core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/ConnectivityBroadcastReceiver.kt

Lines changed: 2 additions & 2 deletions
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 renamed to core/src/main/java/org/kiwix/kiwixmobile/core/zim_manager/NetworkState.kt

Lines changed: 1 addition & 1 deletion
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)