Merge pull request #8086 from vector-im/feature/bma/settingsPerformance

Open general settings performance
This commit is contained in:
Benoit Marty 2023-02-07 14:03:07 +01:00 committed by GitHub
commit 33200764ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 26 additions and 27 deletions

1
changelog.d/5918.bugfix Normal file
View File

@ -0,0 +1 @@
If media cache is large, Settings > General takes a long time to open

View File

@ -17,6 +17,7 @@
package im.vector.app.core.utils package im.vector.app.core.utils
import android.content.Context import android.content.Context
import androidx.annotation.WorkerThread
import timber.log.Timber import timber.log.Timber
import java.io.File import java.io.File
import java.util.Locale import java.util.Locale
@ -125,6 +126,7 @@ fun getFileExtension(fileUri: String): String? {
* Size * Size
* ========================================================================================== */ * ========================================================================================== */
@WorkerThread
fun getSizeOfFiles(root: File): Long { fun getSizeOfFiles(root: File): Long {
return root.walkTopDown() return root.walkTopDown()
.onEnter { .onEnter {

View File

@ -250,37 +250,28 @@ class VectorSettingsGeneralFragment :
// clear medias cache // clear medias cache
findPreference<VectorPreference>(VectorPreferences.SETTINGS_CLEAR_MEDIA_CACHE_PREFERENCE_KEY)!!.let { findPreference<VectorPreference>(VectorPreferences.SETTINGS_CLEAR_MEDIA_CACHE_PREFERENCE_KEY)!!.let {
val size = getSizeOfFiles(File(requireContext().cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_DIR)) + session.fileService().getCacheSize() lifecycleScope.launch(Dispatchers.Main) {
it.summary = getString(R.string.loading)
it.summary = TextUtils.formatFileSize(requireContext(), size.toLong()) val size = getCacheSize()
it.summary = TextUtils.formatFileSize(requireContext(), size)
it.onPreferenceClickListener = Preference.OnPreferenceClickListener { it.onPreferenceClickListener = Preference.OnPreferenceClickListener {
lifecycleScope.launch(Dispatchers.Main) { lifecycleScope.launch(Dispatchers.Main) {
// On UI Thread // On UI Thread
displayLoadingView() displayLoadingView()
Glide.get(requireContext()).clearMemory()
Glide.get(requireContext()).clearMemory() session.fileService().clearCache()
session.fileService().clearCache() val newSize = withContext(Dispatchers.IO) {
// On BG thread
var newSize: Long Glide.get(requireContext()).clearDiskCache()
getCacheSize()
withContext(Dispatchers.IO) { }
// On BG thread it.summary = TextUtils.formatFileSize(requireContext(), newSize)
Glide.get(requireContext()).clearDiskCache() hideLoadingView()
newSize = getSizeOfFiles(File(requireContext().cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_DIR))
newSize += session.fileService().getCacheSize()
} }
false
it.summary = TextUtils.formatFileSize(requireContext(), newSize)
hideLoadingView()
} }
false
} }
} }
// Sign out // Sign out
findPreference<VectorPreference>("SETTINGS_SIGN_OUT_KEY")!! findPreference<VectorPreference>("SETTINGS_SIGN_OUT_KEY")!!
.onPreferenceClickListener = Preference.OnPreferenceClickListener { .onPreferenceClickListener = Preference.OnPreferenceClickListener {
@ -292,6 +283,11 @@ class VectorSettingsGeneralFragment :
} }
} }
private suspend fun getCacheSize(): Long = withContext(Dispatchers.IO) {
getSizeOfFiles(File(requireContext().cacheDir, DiskCache.Factory.DEFAULT_DISK_CACHE_DIR)) +
session.fileService().getCacheSize()
}
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
// Refresh identity server summary // Refresh identity server summary