From 48ec8928f6e3b93f73df683d354e21cea0ebc45b Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 16 Jun 2026 15:29:52 +0200 Subject: [PATCH 1/8] do not display errors from start Signed-off-by: alperozturk96 --- ...ooseRichDocumentsTemplateDialogFragment.kt | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt index 919eb152c3ea..56bf1f1cb7e2 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt @@ -61,6 +61,7 @@ class ChooseRichDocumentsTemplateDialogFragment : RichDocumentsTemplateAdapter.ClickListener, Injectable { private var fileNames: MutableSet? = null + private var hasUserInteracted = false @Inject lateinit var currentAccount: CurrentAccountProvider @@ -181,6 +182,7 @@ class ChooseRichDocumentsTemplateDialogFragment : override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) = Unit override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) = Unit override fun afterTextChanged(s: Editable) { + hasUserInteracted = true checkEnablingCreateButton() } }) @@ -303,32 +305,46 @@ class ChooseRichDocumentsTemplateDialogFragment : requireContext(), fileNames ?: setOf() ) - val isExtension = ( - selectedTemplate == null || - !name.equals( - DOT + selectedTemplate.extension, - ignoreCase = true - ) - ) - val isChangedExtension = name.substringAfterLast(DOT) != selectedTemplate?.extension + val isJustExtension = selectedTemplate != null && + name.equals(DOT + selectedTemplate.extension, ignoreCase = true) + + val isChangedExtension = selectedTemplate != null && + name.contains(DOT) && + name.substringAfterLast(DOT).isNotEmpty() && + name.substringAfterLast(DOT) != selectedTemplate.extension - val isEnable = isExtension && !isChangedExtension && errorMessage == null + val isEnable = selectedTemplate != null && errorMessage == null && !isJustExtension positiveButton?.let { it.isEnabled = isEnable it.isClickable = isEnable } + if (!hasUserInteracted) { + return + } + binding.filenameContainer.run { - isErrorEnabled = !isEnable - error = if (!isEnable) { - when { - errorMessage != null -> errorMessage - isChangedExtension -> getString(R.string.extension_cannot_be_changed) - else -> getText(R.string.filename_empty) + when { + errorMessage != null -> { + isErrorEnabled = true + error = errorMessage + } + + isChangedExtension -> { + isErrorEnabled = true + error = getString(R.string.extension_cannot_be_changed) + } + + isJustExtension -> { + isErrorEnabled = true + error = getText(R.string.filename_empty) + } + + else -> { + isErrorEnabled = false + error = null } - } else { - null } } } @@ -455,8 +471,7 @@ class ChooseRichDocumentsTemplateDialogFragment : onTemplateChosen(templateList[0]) binding.list.visibility = View.GONE } else { - val name = DOT + templateList[0].extension - binding.filename.setText(name) + binding.filename.setText(DOT + templateList[0].extension) binding.helperText.visibility = View.VISIBLE } From 366b0b5218ff57626a236c8ab00557f2baa59409 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 16 Jun 2026 15:49:45 +0200 Subject: [PATCH 2/8] speed up template fetch Signed-off-by: alperozturk96 --- ...ooseRichDocumentsTemplateDialogFragment.kt | 74 +++++++++---------- 1 file changed, 34 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt index 56bf1f1cb7e2..e11833b87287 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt @@ -17,6 +17,7 @@ import android.text.TextWatcher import android.view.View import androidx.appcompat.app.AlertDialog import androidx.fragment.app.DialogFragment +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -49,6 +50,9 @@ import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.NextcloudServer import com.owncloud.android.utils.theme.ViewThemeUtils +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.lang.ref.WeakReference import javax.inject.Inject @@ -135,7 +139,10 @@ class ChooseRichDocumentsTemplateDialogFragment : viewThemeUtils.material.colorTextInputLayout(binding.filenameContainer) val type = Type.valueOf(arguments.getString(ARG_TYPE) ?: "") - FetchTemplateTask(this, client).execute(type) + + lifecycleScope.launch { + fetchTemplate(type) + } initList(type) addTextChangeListener() @@ -428,55 +435,42 @@ class ChooseRichDocumentsTemplateDialogFragment : } } - @Suppress("DEPRECATION") - private class FetchTemplateTask( - chooseTemplateDialogFragment: ChooseRichDocumentsTemplateDialogFragment, - private val client: OwnCloudClient? - ) : AsyncTask>() { - private val chooseTemplateDialogFragmentWeakReference = WeakReference(chooseTemplateDialogFragment) + @SuppressLint("SetTextI18n") + private suspend fun fetchTemplate(type: Type) = withContext(Dispatchers.IO) { + client ?: return@withContext - @Deprecated("Deprecated in Java") - override fun doInBackground(vararg type: Type?): List