RichDocumentsTemplateAdapter.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /*
  2. *
  3. * Nextcloud Android client application
  4. *
  5. * @author Tobias Kaminsky
  6. * Copyright (C) 2019 Tobias Kaminsky
  7. * Copyright (C) 2019 Nextcloud GmbH
  8. *
  9. * This program is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU Affero General Public License as published by
  11. * the Free Software Foundation, either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU Affero General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License
  20. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  21. */
  22. package com.owncloud.android.ui.adapter;
  23. import android.content.Context;
  24. import android.view.LayoutInflater;
  25. import android.view.View;
  26. import android.view.ViewGroup;
  27. import com.bumptech.glide.Glide;
  28. import com.nextcloud.client.account.CurrentAccountProvider;
  29. import com.nextcloud.client.network.ClientFactory;
  30. import com.owncloud.android.R;
  31. import com.owncloud.android.databinding.TemplateButtonBinding;
  32. import com.owncloud.android.datamodel.Template;
  33. import com.owncloud.android.ui.dialog.ChooseRichDocumentsTemplateDialogFragment;
  34. import com.owncloud.android.utils.NextcloudServer;
  35. import com.owncloud.android.utils.ThemeUtils;
  36. import com.owncloud.android.utils.glide.CustomGlideStreamLoader;
  37. import java.util.ArrayList;
  38. import java.util.List;
  39. import androidx.annotation.NonNull;
  40. import androidx.recyclerview.widget.RecyclerView;
  41. /**
  42. * Adapter for handling Templates, used to create files out of it via RichDocuments app
  43. */
  44. public class RichDocumentsTemplateAdapter extends RecyclerView.Adapter<RichDocumentsTemplateAdapter.ViewHolder> {
  45. private List<Template> templateList = new ArrayList<>();
  46. private ClickListener clickListener;
  47. private Context context;
  48. private ChooseRichDocumentsTemplateDialogFragment.Type type;
  49. private CurrentAccountProvider currentAccountProvider;
  50. private ClientFactory clientFactory;
  51. private Template selectedTemplate;
  52. private final int colorSelected;
  53. private final int colorUnselected;
  54. public RichDocumentsTemplateAdapter(
  55. ChooseRichDocumentsTemplateDialogFragment.Type type,
  56. ClickListener clickListener,
  57. Context context,
  58. CurrentAccountProvider currentAccountProvider,
  59. ClientFactory clientFactory
  60. ) {
  61. this.clickListener = clickListener;
  62. this.type = type;
  63. this.context = context;
  64. this.currentAccountProvider = currentAccountProvider;
  65. this.clientFactory = clientFactory;
  66. colorSelected = ThemeUtils.primaryColor(context, true);
  67. colorUnselected = context.getResources().getColor(R.color.grey_200);
  68. }
  69. @NonNull
  70. @Override
  71. @NextcloudServer(max = 18) // remove entire class
  72. public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  73. return new RichDocumentsTemplateAdapter.ViewHolder(
  74. TemplateButtonBinding.inflate(LayoutInflater.from(parent.getContext()),
  75. parent,
  76. false)
  77. );
  78. }
  79. @Override
  80. public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
  81. holder.setData(templateList.get(position));
  82. }
  83. public void setTemplateList(List<Template> templateList) {
  84. this.templateList = templateList;
  85. }
  86. public void setTemplateAsActive(Template template) {
  87. selectedTemplate = template;
  88. notifyDataSetChanged();
  89. }
  90. public Template getSelectedTemplate() {
  91. return selectedTemplate;
  92. }
  93. @Override
  94. public int getItemCount() {
  95. return templateList.size();
  96. }
  97. public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  98. private final TemplateButtonBinding binding;
  99. private Template template;
  100. public ViewHolder(@NonNull TemplateButtonBinding binding) {
  101. super(binding.getRoot());
  102. this.binding = binding;
  103. itemView.setOnClickListener(this);
  104. }
  105. @Override
  106. public void onClick(View v) {
  107. if (clickListener != null) {
  108. clickListener.onClick(template);
  109. }
  110. }
  111. public void setData(Template template) {
  112. this.template = template;
  113. int placeholder;
  114. switch (type) {
  115. case DOCUMENT:
  116. placeholder = R.drawable.file_doc;
  117. break;
  118. case SPREADSHEET:
  119. placeholder = R.drawable.file_xls;
  120. break;
  121. case PRESENTATION:
  122. placeholder = R.drawable.file_ppt;
  123. break;
  124. default:
  125. placeholder = R.drawable.file;
  126. break;
  127. }
  128. Glide.with(context).using(new CustomGlideStreamLoader(currentAccountProvider, clientFactory)).
  129. load(template.getThumbnailLink())
  130. .placeholder(placeholder)
  131. .error(placeholder)
  132. .into(binding.template);
  133. binding.templateName.setText(template.getName());
  134. if (template == selectedTemplate) {
  135. binding.templateContainer.setStrokeColor(colorSelected);
  136. } else {
  137. binding.templateContainer.setStrokeColor(colorUnselected);
  138. }
  139. }
  140. }
  141. public interface ClickListener {
  142. void onClick(Template template);
  143. }
  144. }