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?