From cff3901491ba4ab331cda0726ab5fccef9f14ff8 Mon Sep 17 00:00:00 2001 From: CalebK Date: Thu, 7 Nov 2024 09:10:21 +0300 Subject: [PATCH] move total space to IO Thread --- .idea/codeStyles/Project.xml | 43 +++++--------- .../settings/KiwixPrefsFragment.kt | 4 +- .../utils/storage/StorageSelectDialog.kt | 4 +- .../utils/storage/adapter/StorageDelegate.kt | 3 + .../storage/adapter/StorageViewHolder.kt | 3 + .../core/extensions/FileExtensions.kt | 6 +- .../core/settings/CorePrefsFragment.kt | 56 ++++++++++--------- .../core/settings/StorageCalculator.kt | 6 +- .../custom/settings/CustomPrefsFragment.kt | 2 +- 9 files changed, 62 insertions(+), 65 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index ec9393b3a..08d0eda1f 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,7 +1,5 @@ - - + \ No newline at end of file diff --git a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt index 8e40ca4c7..df0df3a90 100644 --- a/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt +++ b/app/src/main/java/org/kiwix/kiwixmobile/settings/KiwixPrefsFragment.kt @@ -22,6 +22,7 @@ import android.os.Build import android.os.Bundle import android.os.Environment import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.PreferenceCategory import eu.mhutti1.utils.storage.StorageDevice @@ -30,6 +31,7 @@ import io.reactivex.Flowable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.extensions.getFreeSpace import org.kiwix.kiwixmobile.core.extensions.getUsedSpace @@ -52,7 +54,7 @@ class KiwixPrefsFragment : CorePrefsFragment() { setMangeExternalStoragePermission() } - override fun setStorage() { + override suspend fun setStorage() { sharedPreferenceUtil?.let { if (storageDisposable?.isDisposed == false) { // update the storage when user switch to other storage. diff --git a/core/src/main/java/eu/mhutti1/utils/storage/StorageSelectDialog.kt b/core/src/main/java/eu/mhutti1/utils/storage/StorageSelectDialog.kt index c37989c76..c4466505b 100644 --- a/core/src/main/java/eu/mhutti1/utils/storage/StorageSelectDialog.kt +++ b/core/src/main/java/eu/mhutti1/utils/storage/StorageSelectDialog.kt @@ -25,6 +25,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.DialogFragment import androidx.fragment.app.FragmentManager +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import eu.mhutti1.utils.storage.adapter.StorageAdapter @@ -56,7 +57,8 @@ class StorageSelectDialog : DialogFragment() { StorageDelegate( storageCalculator, sharedPreferenceUtil, - shouldShowCheckboxSelected + lifecycleScope, + shouldShowCheckboxSelected, ) { onSelectAction?.invoke(it) dismiss() diff --git a/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageDelegate.kt b/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageDelegate.kt index c809f8476..c842314bf 100644 --- a/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageDelegate.kt +++ b/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageDelegate.kt @@ -21,6 +21,7 @@ package eu.mhutti1.utils.storage.adapter import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView.ViewHolder import eu.mhutti1.utils.storage.StorageDevice +import kotlinx.coroutines.CoroutineScope import org.kiwix.kiwixmobile.core.base.adapter.AdapterDelegate import org.kiwix.kiwixmobile.core.databinding.ItemStoragePreferenceBinding import org.kiwix.kiwixmobile.core.extensions.ViewGroupExtensions.viewBinding @@ -30,6 +31,7 @@ import org.kiwix.kiwixmobile.core.utils.SharedPreferenceUtil class StorageDelegate( private val storageCalculator: StorageCalculator, private val sharedPreferenceUtil: SharedPreferenceUtil, + private val lifecycleScope: CoroutineScope, private val shouldShowCheckboxSelected: Boolean, private val onClickAction: (StorageDevice) -> Unit ) : AdapterDelegate { @@ -37,6 +39,7 @@ class StorageDelegate( return StorageViewHolder( parent.viewBinding(ItemStoragePreferenceBinding::inflate, false), storageCalculator, + lifecycleScope, sharedPreferenceUtil, shouldShowCheckboxSelected, onClickAction diff --git a/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageViewHolder.kt b/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageViewHolder.kt index 05f6492d8..61e60001e 100644 --- a/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageViewHolder.kt +++ b/core/src/main/java/eu/mhutti1/utils/storage/adapter/StorageViewHolder.kt @@ -24,6 +24,8 @@ import android.text.SpannableStringBuilder import android.text.style.AbsoluteSizeSpan import android.view.View.VISIBLE import eu.mhutti1.utils.storage.StorageDevice +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.base.adapter.BaseViewHolder import org.kiwix.kiwixmobile.core.databinding.ItemStoragePreferenceBinding @@ -43,6 +45,7 @@ const val STORAGE_TITLE_TEXTVIEW_SIZE = 15 internal class StorageViewHolder( private val itemStoragePreferenceBinding: ItemStoragePreferenceBinding, private val storageCalculator: StorageCalculator, + private val lifecycleScope: CoroutineScope, private val sharedPreferenceUtil: SharedPreferenceUtil, private val shouldShowCheckboxSelected: Boolean, private val onClickAction: (StorageDevice) -> Unit diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FileExtensions.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FileExtensions.kt index 95c733ded..9ba4e9cfe 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FileExtensions.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/extensions/FileExtensions.kt @@ -35,11 +35,7 @@ fun File.freeSpace(): Long = runBlocking { } } -fun File.totalSpace(): Long = runBlocking { - withContext(Dispatchers.IO) { - totalSpace - } -} +suspend fun File.totalSpace(): Long = withContext(Dispatchers.IO) { totalSpace } suspend fun File.canReadFile(): Boolean = withContext(Dispatchers.IO) { canRead() } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt index 65638c765..cf4f366e0 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/CorePrefsFragment.kt @@ -34,6 +34,7 @@ import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.core.content.ContextCompat +import androidx.lifecycle.lifecycleScope import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference @@ -97,20 +98,22 @@ abstract class CorePrefsFragment : @Inject internal var libkiwixBookmarks: LibkiwixBookmarks? = null override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - coreComponent - .activityComponentBuilder() - .activity(requireActivity()) - .build() - .inject(this) - addPreferencesFromResource(R.xml.preferences) - setStorage() - setUpSettings() - setupZoom() - sharedPreferenceUtil?.let { - LanguageUtils(requireActivity()).changeFont( - requireActivity(), - it - ) + lifecycleScope.launch { + coreComponent + .activityComponentBuilder() + .activity(requireActivity()) + .build() + .inject(this@CorePrefsFragment) + addPreferencesFromResource(R.xml.preferences) + setStorage() + setUpSettings() + setupZoom() + sharedPreferenceUtil?.let { + LanguageUtils(requireActivity()).changeFont( + requireActivity(), + it + ) + } } } @@ -129,7 +132,7 @@ abstract class CorePrefsFragment : textZoom?.summary = getString(R.string.percentage, sharedPreferenceUtil?.textZoom) } - protected abstract fun setStorage() + protected abstract suspend fun setStorage() override fun onResume() { super.onResume() preferenceScreen.sharedPreferences @@ -448,18 +451,19 @@ abstract class CorePrefsFragment : @Suppress("NestedBlockDepth") fun onStorageDeviceSelected(storageDevice: StorageDevice) { - sharedPreferenceUtil?.let { sharedPreferenceUtil -> - sharedPreferenceUtil.putPrefStorage( - sharedPreferenceUtil.getPublicDirectoryPath(storageDevice.name) - ) - sharedPreferenceUtil.putStoragePosition( - if (storageDevice.isInternal) INTERNAL_SELECT_POSITION - else EXTERNAL_SELECT_POSITION - ) - setShowStorageOption() - setStorage() + lifecycleScope.launch { + sharedPreferenceUtil?.let { sharedPreferenceUtil -> + sharedPreferenceUtil.putPrefStorage( + sharedPreferenceUtil.getPublicDirectoryPath(storageDevice.name) + ) + sharedPreferenceUtil.putStoragePosition( + if (storageDevice.isInternal) INTERNAL_SELECT_POSITION + else EXTERNAL_SELECT_POSITION + ) + setShowStorageOption() + setStorage() + } } - return } private fun setShowStorageOption() { diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/StorageCalculator.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/StorageCalculator.kt index 8fffecdbe..2e366a5f6 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/settings/StorageCalculator.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/settings/StorageCalculator.kt @@ -33,15 +33,15 @@ class StorageCalculator @Inject constructor( fun calculateAvailableSpace(file: File = File(sharedPreferenceUtil.prefStorage)): String = Bytes(availableBytes(file)).humanReadable - fun calculateTotalSpace(file: File = File(sharedPreferenceUtil.prefStorage)): String = + suspend fun calculateTotalSpace(file: File = File(sharedPreferenceUtil.prefStorage)): String = Bytes(totalBytes(file)).humanReadable - fun calculateUsedSpace(file: File): String = + suspend fun calculateUsedSpace(file: File): String = Bytes(totalBytes(file) - availableBytes(file)).humanReadable fun availableBytes(file: File = File(sharedPreferenceUtil.prefStorage)) = if (file.isFileExist()) file.freeSpace() else 0L - fun totalBytes(file: File) = if (file.isFileExist()) file.totalSpace() else 0L + suspend fun totalBytes(file: File) = if (file.isFileExist()) file.totalSpace() else 0L } diff --git a/custom/src/main/java/org/kiwix/kiwixmobile/custom/settings/CustomPrefsFragment.kt b/custom/src/main/java/org/kiwix/kiwixmobile/custom/settings/CustomPrefsFragment.kt index 7ab9236f2..9694ee93c 100644 --- a/custom/src/main/java/org/kiwix/kiwixmobile/custom/settings/CustomPrefsFragment.kt +++ b/custom/src/main/java/org/kiwix/kiwixmobile/custom/settings/CustomPrefsFragment.kt @@ -50,7 +50,7 @@ class CustomPrefsFragment : CorePrefsFragment() { sharedPreferenceUtil?.putPrefExternalLinkPopup(false) } - override fun setStorage() { + override suspend fun setStorage() { findPreference("pref_storage")?.let(preferenceScreen::removePreference) } }