From 3dac4cf4e73017bd29f6e3803802f01e69e62195 Mon Sep 17 00:00:00 2001 From: Ashish Date: Fri, 25 May 2018 13:05:22 +0530 Subject: [PATCH 01/10] wip --- .../commons/contributions/Contribution.java | 2 +- .../free/nrw/commons/upload/Description.java | 57 ++++++++ .../commons/upload/DescriptionsAdapter.java | 122 ++++++++++++++++++ .../fr/free/nrw/commons/upload/Language.java | 23 ++++ .../commons/upload/SingleUploadFragment.java | 10 +- .../res/layout/fragment_single_upload.xml | 41 ++---- .../main/res/layout/row_item_description.xml | 32 +++++ .../res/layout/row_item_languages_spinner.xml | 14 ++ 8 files changed, 266 insertions(+), 35 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/upload/Description.java create mode 100644 app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java create mode 100644 app/src/main/java/fr/free/nrw/commons/upload/Language.java create mode 100644 app/src/main/res/layout/row_item_description.xml create mode 100644 app/src/main/res/layout/row_item_languages_spinner.xml diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index 99009c0295..08f0954799 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -13,7 +13,7 @@ import fr.free.nrw.commons.Media; import fr.free.nrw.commons.settings.Prefs; -public class Contribution extends Media { +public class Contribution extends Media { public static Creator CREATOR = new Creator() { @Override diff --git a/app/src/main/java/fr/free/nrw/commons/upload/Description.java b/app/src/main/java/fr/free/nrw/commons/upload/Description.java new file mode 100644 index 0000000000..64454a641d --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/Description.java @@ -0,0 +1,57 @@ +package fr.free.nrw.commons.upload; + +import android.text.TextUtils; +import android.util.TimeUtils; + +class Description { + + private String languageId; + private String languageDisplayText; + private String descriptionText; + private boolean set; + private int selectedLanguageIndex=0; + + public String getLanguageId() { + return languageId; + } + + public void setLanguageId(String languageId) { + this.languageId = languageId; + } + + public String getLanguageDisplayText() { + return languageDisplayText; + } + + public void setLanguageDisplayText(String languageDisplayText) { + this.languageDisplayText = languageDisplayText; + } + + public String getDescriptionText() { + return descriptionText; + } + + public void setDescriptionText(String descriptionText) { + this.descriptionText = descriptionText; + + if (!TextUtils.isEmpty(descriptionText)) { + set = true; + } + } + + public boolean isSet() { + return set; + } + + public void setSet(boolean set) { + this.set = set; + } + + public int getSelectedLanguageIndex() { + return selectedLanguageIndex; + } + + public void setSelectedLanguageIndex(int selectedLanguageIndex) { + this.selectedLanguageIndex = selectedLanguageIndex; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java new file mode 100644 index 0000000000..59a70e1fdf --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java @@ -0,0 +1,122 @@ +package fr.free.nrw.commons.upload; + +import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext; + +import android.support.v7.widget.AppCompatSpinner; +import android.support.v7.widget.RecyclerView; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.TextView; +import butterknife.BindView; +import butterknife.ButterKnife; +import fr.free.nrw.commons.R; +import java.util.ArrayList; +import java.util.List; + +class DescriptionsAdapter extends RecyclerView.Adapter { + + List descriptions; + List languages; + + public DescriptionsAdapter() { + descriptions = new ArrayList<>(); + languages = new ArrayList<>(); + } + + public void setDescriptions(List descriptions) { + this.descriptions = descriptions; + } + + public void setLanguages(List languages) { + this.languages = languages; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.row_item_description, parent, false); + ViewHolder viewHolder = new ViewHolder(view); + return viewHolder; + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.init(position); + } + + @Override + public int getItemCount() { + return descriptions.size(); + } + + + public class ViewHolder extends RecyclerView.ViewHolder { + + @BindView(R.id.spinner_description_languages) + AppCompatSpinner spinnerDescriptionLanguages; + @BindView(R.id.et_description_text) + EditText etDescriptionText; + + public ViewHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void init(int position) { + Description description = descriptions.get(position); + if (!TextUtils.isEmpty(description.getDescriptionText())) { + etDescriptionText.setText(description.getDescriptionText()); + } else { + etDescriptionText.setText(""); + } + + ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(), + R.layout.row_item_languages_spinner) { + + @Override + public View getDropDownView(int position, View convertView, + ViewGroup parent) { + View view = super.getDropDownView(position, convertView, parent); + TextView tvLanguage = view.findViewById(R.id.et_language); + tvLanguage.setText(languages.get(position).getDisplayText()); + return view; + } + }; + + spinnerDescriptionLanguages.setAdapter(adapter); + + spinnerDescriptionLanguages.setSelection(description.getSelectedLanguageIndex()); + + //TODO do it the butterknife way + spinnerDescriptionLanguages.setOnItemSelectedListener(new OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int position, + long l) { + //TODO handle case when user tries to select an already selected language + updateDescriptionBasedOnSelectedLanguageIndex(description, position); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + + + } + } + + private void updateDescriptionBasedOnSelectedLanguageIndex(Description description, + int position) { + Language language = languages.get(position); + description.setSelectedLanguageIndex(position); + description.setLanguageDisplayText(language.getDisplayText()); + description.setLanguageId(language.getId()); + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/Language.java b/app/src/main/java/fr/free/nrw/commons/upload/Language.java new file mode 100644 index 0000000000..50df311861 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/upload/Language.java @@ -0,0 +1,23 @@ +package fr.free.nrw.commons.upload; + +class Language { + + private String id; + private String displayText; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDisplayText() { + return displayText; + } + + public void setDisplayText(String displayText) { + this.displayText = displayText; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index f2fef1ddff..0152bf9aa1 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -10,6 +10,7 @@ import android.support.annotation.NonNull; import android.support.v4.view.ViewCompat; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.Html; import android.text.TextWatcher; @@ -53,7 +54,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { @BindView(R.id.titleEdit) EditText titleEdit; - @BindView(R.id.descEdit) EditText descEdit; + @BindView(R.id.rv_descriptions) RecyclerView rvDescriptions; @BindView(R.id.titleDescButton) Button titleDescButton; @BindView(R.id.share_license_summary) TextView licenseSummaryView; @BindView(R.id.licenseSpinner) Spinner licenseSpinner; @@ -65,6 +66,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { private String license; private OnUploadActionInitiated uploadActionInitiatedHandler; private TitleTextWatcher textWatcher = new TitleTextWatcher(); + private DescriptionsAdapter adapter; @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { @@ -103,6 +105,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, View rootView = inflater.inflate(R.layout.fragment_single_upload, container, false); ButterKnife.bind(this, rootView); + initRecyclerView(); + Intent activityIntent = getActivity().getIntent(); if (activityIntent.hasExtra("title")) { titleEdit.setText(activityIntent.getStringExtra("title")); @@ -181,6 +185,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, return rootView; } + private void initRecyclerView() { + adapter=new DescriptionsAdapter(); + } + @Override public void onDestroyView() { titleEdit.removeTextChangedListener(textWatcher); diff --git a/app/src/main/res/layout/fragment_single_upload.xml b/app/src/main/res/layout/fragment_single_upload.xml index 00cc1d1944..11ece37469 100644 --- a/app/src/main/res/layout/fragment_single_upload.xml +++ b/app/src/main/res/layout/fragment_single_upload.xml @@ -38,40 +38,15 @@ android:scrollHorizontally="false" /> - - - - - - - - + - - - + android:layout_height="wrap_content" + android:theme="?attr/spinnerTheme" />