diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.kt b/app/src/main/java/org/linphone/contacts/ContactsManager.kt
index 610ef5d5d..8f6db7e05 100644
--- a/app/src/main/java/org/linphone/contacts/ContactsManager.kt
+++ b/app/src/main/java/org/linphone/contacts/ContactsManager.kt
@@ -228,6 +228,11 @@ class ContactsManager @UiThread constructor() {
coreContext.contactsManager.notifyContactsListChanged()
}
+ @WorkerThread
+ fun areContactsAvailable(): Boolean {
+ return nativeContactsLoaded || knownContactsAvatarsMap.isNotEmpty()
+ }
+
@WorkerThread
fun onNativeContactsLoaded() {
nativeContactsLoaded = true
diff --git a/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt b/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt
index 70af601e3..3c4838aac 100644
--- a/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt
+++ b/app/src/main/java/org/linphone/ui/main/help/fragment/HelpFragment.kt
@@ -26,8 +26,10 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.UiThread
+import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
import androidx.navigation.navGraphViewModels
+import kotlinx.coroutines.launch
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.HelpFragmentBinding
@@ -36,6 +38,7 @@ import org.linphone.ui.main.fragment.GenericFragment
import org.linphone.ui.main.help.viewmodel.HelpViewModel
import org.linphone.ui.main.history.model.ConfirmationDialogModel
import org.linphone.utils.DialogUtils
+import org.linphone.utils.FileUtils
@UiThread
class HelpFragment : GenericFragment() {
@@ -108,6 +111,17 @@ class HelpFragment : GenericFragment() {
}
}
+ binding.setClearCacheCLickListener {
+ lifecycleScope.launch {
+ Log.w("$TAG User requested we clear the cache folder, doing it")
+ FileUtils.clearCacheDirectory()
+ (requireActivity() as GenericActivity).showGreenToast(
+ getString(R.string.help_cache_directory_cleared_toast_message),
+ R.drawable.info
+ )
+ }
+ }
+
viewModel.newVersionAvailableEvent.observe(viewLifecycleOwner) {
it.consume { pair ->
val version = pair.first
diff --git a/app/src/main/java/org/linphone/utils/FileUtils.kt b/app/src/main/java/org/linphone/utils/FileUtils.kt
index 71612cf53..0fe550412 100644
--- a/app/src/main/java/org/linphone/utils/FileUtils.kt
+++ b/app/src/main/java/org/linphone/utils/FileUtils.kt
@@ -424,6 +424,7 @@ class FileUtils {
return stringBuilder.toString()
}
+ @AnyThread
suspend fun clearExistingPlainFiles(path: String) {
val dir = File(path)
if (dir.exists()) {
@@ -436,6 +437,19 @@ class FileUtils {
}
}
+ @AnyThread
+ suspend fun clearCacheDirectory() {
+ val dir = coreContext.context.cacheDir
+ var count = 0
+ if (dir.exists()) {
+ for (file in dir.listFiles().orEmpty()) {
+ deleteFile(file.path)
+ count += 1
+ }
+ }
+ Log.w("$TAG Deleted [$count] cache files")
+ }
+
@AnyThread
fun countFilesInDirectory(path: String): Int {
val dir = File(path)
diff --git a/app/src/main/java/org/linphone/utils/ImageUtils.kt b/app/src/main/java/org/linphone/utils/ImageUtils.kt
index e6118691e..dfb85cf6c 100644
--- a/app/src/main/java/org/linphone/utils/ImageUtils.kt
+++ b/app/src/main/java/org/linphone/utils/ImageUtils.kt
@@ -110,7 +110,7 @@ class ImageUtils {
list.add(picture)
}
}
- if (list.isNotEmpty()) {
+ if (list.isNotEmpty() && coreContext.contactsManager.areContactsAvailable()) {
Log.i(
"$TAG Found at [${list.size}] participant(s) with a picture for conversation [$id]($hash), creating avatar"
)
diff --git a/app/src/main/res/layout/help_fragment.xml b/app/src/main/res/layout/help_fragment.xml
index 35570b02b..41c4ed2af 100644
--- a/app/src/main/res/layout/help_fragment.xml
+++ b/app/src/main/res/layout/help_fragment.xml
@@ -17,6 +17,9 @@
+
@@ -285,12 +288,41 @@
android:drawableEnd="@drawable/caret_right"
android:drawablePadding="8dp"
app:drawableTint="?attr/color_main2_500"
- app:layout_constraintVertical_bias="0"
app:layout_constraintTop_toBottomOf="@id/advanced_title"
- app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/clear_cache_icon"
app:layout_constraintStart_toEndOf="@id/debug_icon"
app:layout_constraintEnd_toEndOf="parent"/>
+
+
+
+
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 7c5036c63..6c2b5db2a 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -187,6 +187,8 @@
Une erreur est survenue
Mise à jour disponible
Une nouvelle version %s est disponible. Voulez-vous mettre à jour ?
+ Vider le dossier de cache
+ Cache directory has been cleared
Dépannage
Activer/désactiver les messages dans ADB
Blah blah blah?
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6ed869e38..d8702fbb0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -222,6 +222,8 @@
An error occurred while checking for update
Update available
A new version %s is available. Do you want to update?
+ Clear cache directory
+ Cache directory has been cleared
Troubleshooting
Enable/disable printing logs in ADB
Blah blah blah?