diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png index 94649f8737d0..512624b5ab8d 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png index dcbd74a183f1..e02f1a068aab 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_blue.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png index 545ac06699e7..bf346d3780ef 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_dark_white.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png index fc13882a3061..118f9ccb7b5b 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_delete_light_white.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png index 5feb32d103ef..ea90e61440f4 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png index f7c0f0c638e3..833f1d214cc9 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_blue.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png index eb1464ca0629..b12891f531dd 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_dark_white.png differ diff --git a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png index d72fa40896dc..96fb3fcd5232 100644 Binary files a/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png and b/screenshots/gplay/debug/com.owncloud.android.ui.activity.PassCodeActivityIT_request_light_white.png differ diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt index 1cc9be59d585..8fcd69aefd92 100644 --- a/scripts/analysis/lint-results.txt +++ b/scripts/analysis/lint-results.txt @@ -1,2 +1,2 @@ DO NOT TOUCH; GENERATED BY DRONE - Lint Report: 240 warnings + Lint Report: 232 warnings diff --git a/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java b/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java index 2327604ac0fb..f79c71384dcd 100644 --- a/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java +++ b/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java @@ -278,7 +278,7 @@ public void directCameraUpload() { } @Override - public void showTemplate(Creator creator) { + public void showTemplate(Creator creator, String headline) { } diff --git a/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java b/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java index 27545c1640a4..c48467e3e078 100644 --- a/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java @@ -93,7 +93,7 @@ protected void onCreate(Bundle savedInstanceState) { int elementColor = ThemeUtils.primaryColor(this, true); - ThemeUtils.themeDialogActionButton(binding.cancel); + ThemeUtils.themeBorderlessButton(binding.cancel, ThemeUtils.primaryColor(this, true)); passCodeEditTexts[0] = binding.txt0; ThemeUtils.colorEditText(passCodeEditTexts[0], elementColor); diff --git a/src/main/java/com/owncloud/android/ui/adapter/RichDocumentsTemplateAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/RichDocumentsTemplateAdapter.java index 353e3a153087..bc86430eec53 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/RichDocumentsTemplateAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/RichDocumentsTemplateAdapter.java @@ -26,16 +26,16 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import com.bumptech.glide.Glide; import com.nextcloud.client.account.CurrentAccountProvider; import com.nextcloud.client.network.ClientFactory; import com.owncloud.android.R; +import com.owncloud.android.databinding.TemplateButtonBinding; import com.owncloud.android.datamodel.Template; import com.owncloud.android.ui.dialog.ChooseRichDocumentsTemplateDialogFragment; import com.owncloud.android.utils.NextcloudServer; +import com.owncloud.android.utils.ThemeUtils; import com.owncloud.android.utils.glide.CustomGlideStreamLoader; import java.util.ArrayList; @@ -43,8 +43,6 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import butterknife.BindView; -import butterknife.ButterKnife; /** * Adapter for handling Templates, used to create files out of it via RichDocuments app @@ -57,6 +55,9 @@ public class RichDocumentsTemplateAdapter extends RecyclerView.Adapter templateList) { this.templateList = templateList; } + public void setTemplateAsActive(Template template) { + selectedTemplate = template; + notifyDataSetChanged(); + } + + public Template getSelectedTemplate() { + return selectedTemplate; + } + @Override public int getItemCount() { return templateList.size(); @@ -95,17 +111,12 @@ public int getItemCount() { public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - @BindView(R.id.name) - public TextView name; - - @BindView(R.id.thumbnail) - public ImageView thumbnail; - + private final TemplateButtonBinding binding; private Template template; - public ViewHolder(View itemView) { - super(itemView); - ButterKnife.bind(this, itemView); + public ViewHolder(@NonNull TemplateButtonBinding binding) { + super(binding.getRoot()); + this.binding = binding; itemView.setOnClickListener(this); } @@ -143,9 +154,15 @@ public void setData(Template template) { load(template.getThumbnailLink()) .placeholder(placeholder) .error(placeholder) - .into(thumbnail); + .into(binding.template); - name.setText(template.getName()); + binding.templateName.setText(template.getName()); + + if (template == selectedTemplate) { + binding.templateContainer.setStrokeColor(colorSelected); + } else { + binding.templateContainer.setStrokeColor(colorUnselected); + } } } diff --git a/src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java index 8fe502f60e63..2b777fca383b 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/TemplateAdapter.java @@ -29,22 +29,20 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import com.bumptech.glide.Glide; import com.nextcloud.client.account.CurrentAccountProvider; import com.nextcloud.client.network.ClientFactory; import com.owncloud.android.R; +import com.owncloud.android.databinding.TemplateButtonBinding; import com.owncloud.android.lib.common.Template; import com.owncloud.android.lib.common.TemplateList; import com.owncloud.android.utils.MimeTypeUtil; +import com.owncloud.android.utils.ThemeUtils; import com.owncloud.android.utils.glide.CustomGlideStreamLoader; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import butterknife.BindView; -import butterknife.ButterKnife; /** * Adapter for handling Templates, used to create files out of it via RichDocuments app @@ -57,6 +55,9 @@ public class TemplateAdapter extends RecyclerView.Adapter templateList) { } @Override - public void onClick(Template template) { - String name = fileName.getText().toString(); + public void onClick(View v) { + String name = binding.filename.getText().toString(); String path = parentFolder.getRemotePath() + name; - if (name.isEmpty() || name.equalsIgnoreCase(DOT + template.getExtension())) { - DisplayUtils.showSnackMessage(listView, R.string.enter_filename); - } else if (!name.endsWith(template.getExtension())) { - createFromTemplate(template, path + DOT + template.getExtension()); + Template selectedTemplate = adapter.getSelectedTemplate(); + + if (selectedTemplate == null) { + DisplayUtils.showSnackMessage(binding.list, R.string.select_one_template); + } else if (name.isEmpty() || name.equalsIgnoreCase(DOT + selectedTemplate.getExtension())) { + DisplayUtils.showSnackMessage(binding.list, R.string.enter_filename); + } else if (!name.endsWith(selectedTemplate.getExtension())) { + createFromTemplate(selectedTemplate, path + DOT + selectedTemplate.getExtension()); } else { - createFromTemplate(template, path); + createFromTemplate(selectedTemplate, path); } } @Override - public void onClick(DialogInterface dialog, int which) { - // cancel is handled by dialog itself, no other button available + public void onClick(Template template) { + onTemplateChosen(template); + } + + private void onTemplateChosen(Template template) { + adapter.setTemplateAsActive(template); + prefillFilenameIfEmpty(template); + checkEnablingCreateButton(); + } + + private void prefillFilenameIfEmpty(Template template) { + String name = binding.filename.getText().toString(); + if (name.isEmpty() || name.equalsIgnoreCase(DOT + template.getExtension())) { + binding.filename.setText(String.format("%s.%s", template.name, template.extension)); + } + binding.filename.setSelection(binding.filename.getText().toString().lastIndexOf('.')); + } + + private void checkEnablingCreateButton() { + Template selectedTemplate = adapter.getSelectedTemplate(); + String name = binding.filename.getText().toString(); + + positiveButton.setEnabled(selectedTemplate != null && !name.isEmpty() && + !name.equalsIgnoreCase(DOT + selectedTemplate.getExtension())); } private static class CreateFileFromTemplateTask extends AsyncTask { @@ -268,7 +309,7 @@ protected void onPostExecute(String url) { if (fragment != null && fragment.isAdded()) { if (url.isEmpty()) { - DisplayUtils.showSnackMessage(fragment.listView, "Error creating file from template"); + DisplayUtils.showSnackMessage(fragment.binding.list, "Error creating file from template"); } else { Intent collaboraWebViewIntent = new Intent(MainApp.getAppContext(), RichDocumentsEditorWebView.class); collaboraWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_TITLE, "Collabora"); @@ -319,12 +360,18 @@ protected void onPostExecute(List