Handling empty state for rich document dialog.

This commit is contained in:
A117870935 2023-04-20 23:40:01 +05:30
parent def58c412f
commit 4f690d1e51
2 changed files with 27 additions and 25 deletions

View file

@ -86,6 +86,8 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
private static final String DOT = "."; private static final String DOT = ".";
public static final int SINGLE_TEMPLATE = 1; public static final int SINGLE_TEMPLATE = 1;
private Set<String> fileNames;
@Inject CurrentAccountProvider currentAccount; @Inject CurrentAccountProvider currentAccount;
@Inject ClientFactory clientFactory; @Inject ClientFactory clientFactory;
@Inject ViewThemeUtils viewThemeUtils; @Inject ViewThemeUtils viewThemeUtils;
@ -156,7 +158,7 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER); parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER);
List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false); List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false);
Set<String> fileNames = Sets.newHashSetWithExpectedSize(folderContent.size()); fileNames = Sets.newHashSetWithExpectedSize(folderContent.size());
for (OCFile file : folderContent) { for (OCFile file : folderContent) {
fileNames.add(file.getFileName()); fileNames.add(file.getFileName());
@ -188,31 +190,14 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
} }
/**
* When user enters an already taken file name, a message is shown. Otherwise, the
* message is ensured to be hidden.
*/
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
String newFileName = ""; // not needed
if (binding.filename.getText() != null) {
newFileName = binding.filename.getText().toString().trim();
}
if (fileNames.contains(newFileName)) {
binding.filenameContainer.setError(getText(R.string.file_already_exists));
positiveButton.setEnabled(false);
} else if (binding.filenameContainer.getError() != null) {
binding.filenameContainer.setError(null);
// Called to remove extra padding
binding.filenameContainer.setErrorEnabled(false);
positiveButton.setEnabled(true);
}
} }
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
checkEnablingCreateButton();
} }
}); });
@ -297,11 +282,28 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
} }
private void checkEnablingCreateButton() { private void checkEnablingCreateButton() {
Template selectedTemplate = adapter.getSelectedTemplate(); if (positiveButton != null) {
String name = Objects.requireNonNull(binding.filename.getText()).toString(); Template selectedTemplate = adapter.getSelectedTemplate();
String name = Objects.requireNonNull(binding.filename.getText()).toString();
boolean isNameJustExtension = selectedTemplate != null && name.equalsIgnoreCase(
DOT + selectedTemplate.getExtension());
boolean isNameEmpty = name.isEmpty() || isNameJustExtension;
boolean state = selectedTemplate != null && !isNameEmpty && !fileNames.contains(name);
positiveButton.setEnabled(selectedTemplate != null && !name.isEmpty() && positiveButton.setEnabled(selectedTemplate != null && !name.isEmpty() &&
!name.equalsIgnoreCase(DOT + selectedTemplate.getExtension())); !name.equalsIgnoreCase(DOT + selectedTemplate.getExtension()));
positiveButton.setEnabled(state);
positiveButton.setClickable(state);
binding.filenameContainer.setErrorEnabled(!state);
if (!state) {
if (isNameEmpty) {
binding.filenameContainer.setError(getText(R.string.filename_empty));
} else {
binding.filenameContainer.setError(getText(R.string.file_already_exists));
}
}
}
} }
private static class CreateFileFromTemplateTask extends AsyncTask<Void, Void, String> { private static class CreateFileFromTemplateTask extends AsyncTask<Void, Void, String> {

View file

@ -327,7 +327,7 @@ class ChooseTemplateDialogFragment : DialogFragment(), View.OnClickListener, Tem
val fragment = chooseTemplateDialogFragmentWeakReference.get() val fragment = chooseTemplateDialogFragmentWeakReference.get()
if (fragment != null && fragment.isAdded) { if (fragment != null && fragment.isAdded) {
if (url.isEmpty()) { if (url.isEmpty()) {
DisplayUtils.showSnackMessage(fragment.binding.list, "Error creating file from template") DisplayUtils.showSnackMessage(fragment.binding.list, R.string.error_creating_file_from_template)
} else { } else {
val editorWebView = Intent(MainApp.getAppContext(), TextEditorWebView::class.java) val editorWebView = Intent(MainApp.getAppContext(), TextEditorWebView::class.java)
editorWebView.putExtra(ExternalSiteWebView.EXTRA_TITLE, "Text") editorWebView.putExtra(ExternalSiteWebView.EXTRA_TITLE, "Text")