From ce601634f2c3daea5a4bcf39e5a774bcff35e9bd Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 6 Apr 2021 18:16:35 +0200 Subject: [PATCH] Prevent cleaning whole Glide cache when contacts are loaded --- .../linphone/contact/AsyncContactsLoader.kt | 4 ---- .../org/linphone/contact/ContactsManager.kt | 4 ++++ .../org/linphone/utils/DataBindingUtils.kt | 19 ++++++++++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt b/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt index 46f578329..fd7380093 100644 --- a/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt +++ b/app/src/main/java/org/linphone/contact/AsyncContactsLoader.kt @@ -23,7 +23,6 @@ import android.content.Context import android.database.Cursor import android.os.AsyncTask import android.provider.ContactsContract -import com.bumptech.glide.Glide import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.core.* @@ -105,9 +104,6 @@ class AsyncContactsLoader(private val context: Context) : } if (PermissionHelper.required(context).hasReadContactsPermission()) { - // Clear Glide cache to be able to display new contact avatars - Glide.get(context).clearDiskCache() - var selection: String? = null if (corePreferences.fetchContactsFromDefaultDirectory) { Log.i("[Contacts Loader] Only fetching contacts in default directory") diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index 3ad86e2ad..b2fa8a96d 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -84,6 +84,8 @@ class ContactsManager(private val context: Context) { magicSearch } + var latestContactFetch: String = "" + private val contactsUpdatedListeners = ArrayList() private var loadContactsTask: AsyncContactsLoader? = null @@ -138,6 +140,8 @@ class ContactsManager(private val context: Context) { @Synchronized fun fetchContactsAsync() { + latestContactFetch = System.currentTimeMillis().toString() + if (loadContactsTask != null) { Log.w("[Contacts Manager] Cancelling existing async task") loadContactsTask?.cancel(true) diff --git a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt index ec5e7233f..6be800485 100644 --- a/app/src/main/java/org/linphone/utils/DataBindingUtils.kt +++ b/app/src/main/java/org/linphone/utils/DataBindingUtils.kt @@ -40,8 +40,10 @@ import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.target.Target +import com.bumptech.glide.signature.ObjectKey import com.google.android.material.switchmaterial.SwitchMaterial import org.linphone.BR +import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.activities.GenericActivity @@ -304,9 +306,11 @@ fun setEntries( @BindingAdapter("glideAvatarFallback") fun loadAvatarWithGlideFallback(imageView: ImageView, path: String?) { if (path != null && path.isNotEmpty() && FileUtils.isExtensionImage(path)) { - GlideApp.with(imageView).load(path).apply(RequestOptions.circleCropTransform()).into( - imageView - ) + GlideApp.with(imageView) + .load(path) + .signature(ObjectKey(coreContext.contactsManager.latestContactFetch)) + .apply(RequestOptions.circleCropTransform()) + .into(imageView) } else { Log.w("[Data Binding] [Glide] Can't load $path") imageView.setImageResource(R.drawable.avatar) @@ -330,7 +334,11 @@ fun loadAvatarWithGlide(imageView: ImageView, path: Uri?) { @BindingAdapter("glideAvatar") fun loadAvatarWithGlide(imageView: ImageView, path: String?) { if (path != null) { - GlideApp.with(imageView).load(path).apply(RequestOptions.circleCropTransform()).listener( + GlideApp + .with(imageView) + .load(path) + .signature(ObjectKey(coreContext.contactsManager.latestContactFetch)) + .apply(RequestOptions.circleCropTransform()).listener( object : RequestListener { override fun onLoadFailed( @@ -354,7 +362,8 @@ fun loadAvatarWithGlide(imageView: ImageView, path: String?) { imageView.visibility = View.VISIBLE return false } - }).into(imageView) + }) + .into(imageView) } else { imageView.visibility = View.GONE }