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" />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/row_item_languages_spinner.xml b/app/src/main/res/layout/row_item_languages_spinner.xml
new file mode 100644
index 0000000000..e6cb24f2a7
--- /dev/null
+++ b/app/src/main/res/layout/row_item_languages_spinner.xml
@@ -0,0 +1,14 @@
+
+
+
+
\ No newline at end of file
From 14183de8daf2aee63e53323fe7a03eaa4b15f9d8 Mon Sep 17 00:00:00 2001
From: Ashish
Date: Mon, 28 May 2018 12:56:07 +0530
Subject: [PATCH 02/10] Changes for adding descriptions in multipe
languages[issue #1501]
---
.../commons/media/MediaDetailFragment.java | 4 +-
.../free/nrw/commons/upload/Description.java | 2 +-
.../commons/upload/DescriptionsAdapter.java | 119 +++++++++++++++---
.../fr/free/nrw/commons/upload/Language.java | 26 ++--
.../nrw/commons/upload/ShareActivity.java | 2 +-
.../commons/upload/SingleUploadFragment.java | 108 ++++++++++------
.../upload/SpinnerLanguagesAdapter.java | 92 ++++++++++++++
.../res/layout/fragment_single_upload.xml | 23 +++-
.../main/res/layout/row_item_description.xml | 5 +-
.../res/layout/row_item_languages_spinner.xml | 19 ++-
app/src/main/res/values/strings.xml | 4 +
11 files changed, 332 insertions(+), 72 deletions(-)
create mode 100644 app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
index e7a21ed09f..30551e24f7 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java
@@ -60,6 +60,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment {
private boolean isCategoryImage;
private MediaDetailPagerFragment.MediaDetailProvider detailProvider;
private int index;
+ private Locale locale;
public static MediaDetailFragment forMedia(int index, boolean editable, boolean isCategoryImage) {
MediaDetailFragment mf = new MediaDetailFragment();
@@ -198,6 +199,7 @@ public void onGlobalLayout() {
}
};
view.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);
+ locale = getResources().getConfiguration().locale;
return view;
}
@@ -455,7 +457,7 @@ private void updateTheDarkness() {
private String prettyDescription(Media media) {
// @todo use UI language when multilingual descs are available
- String desc = media.getDescription("en").trim();
+ String desc = media.getDescription(locale.getLanguage()).trim();
if (desc.equals("")) {
return getString(R.string.detail_description_empty);
} else {
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
index 64454a641d..8e41c422be 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/Description.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/Description.java
@@ -9,7 +9,7 @@ class Description {
private String languageDisplayText;
private String descriptionText;
private boolean set;
- private int selectedLanguageIndex=0;
+ private int selectedLanguageIndex = -1;
public String getLanguageId() {
return languageId;
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
index 59a70e1fdf..db477c10e5 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -1,36 +1,46 @@
package fr.free.nrw.commons.upload;
-import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
+import static android.view.MotionEvent.ACTION_UP;
+import android.content.Context;
+import android.support.v4.view.ViewCompat;
import android.support.v7.widget.AppCompatSpinner;
import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
import android.text.TextUtils;
+import android.text.TextWatcher;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
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 butterknife.OnTouch;
import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.utils.ViewUtil;
import java.util.ArrayList;
import java.util.List;
+import java.util.Locale;
class DescriptionsAdapter extends RecyclerView.Adapter {
List descriptions;
List languages;
+ private Context context;
+ private Callback callback;
public DescriptionsAdapter() {
descriptions = new ArrayList<>();
+ descriptions.add(new Description());
languages = new ArrayList<>();
}
public void setDescriptions(List descriptions) {
this.descriptions = descriptions;
+ notifyDataSetChanged();
}
public void setLanguages(List languages) {
@@ -41,6 +51,7 @@ public void setLanguages(List languages) {
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.row_item_description, parent, false);
+ context = parent.getContext();
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@@ -55,6 +66,15 @@ public int getItemCount() {
return descriptions.size();
}
+ public List getDescriptions() {
+ return descriptions;
+ }
+
+ public void addDescription(Description description) {
+ this.descriptions.add(description);
+ notifyItemInserted(descriptions.size() - 1);
+ }
+
public class ViewHolder extends RecyclerView.ViewHolder {
@@ -62,10 +82,13 @@ public class ViewHolder extends RecyclerView.ViewHolder {
AppCompatSpinner spinnerDescriptionLanguages;
@BindView(R.id.et_description_text)
EditText etDescriptionText;
+ private View view;
+
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
+ this.view = itemView;
}
public void init(int position) {
@@ -76,22 +99,47 @@ public void init(int position) {
etDescriptionText.setText("");
}
- ArrayAdapter adapter = new ArrayAdapter(getApplicationContext(),
- R.layout.row_item_languages_spinner) {
+ etDescriptionText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
+
+ @Override
+ public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+
+ }
@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;
+ public void afterTextChanged(Editable editable) {
+ description.setDescriptionText(editable.toString());
}
- };
+ });
+
+ etDescriptionText.setOnFocusChangeListener((v, hasFocus) -> {
+ if (!hasFocus) {
+ ViewUtil.hideKeyboard(v);
+ }
+ });
- spinnerDescriptionLanguages.setAdapter(adapter);
+ SpinnerLanguagesAdapter languagesAdapter = new SpinnerLanguagesAdapter(context,
+ R.layout.row_item_languages_spinner);
+ languagesAdapter.setLanguages(languages);
+ languagesAdapter.notifyDataSetChanged();
+ spinnerDescriptionLanguages.setAdapter(languagesAdapter);
+
+ if (description.getSelectedLanguageIndex() == -1) {
+ if (position == 0) {
+ int defaultLocaleIndex = getIndexOfUserDefaultLocale();
+ spinnerDescriptionLanguages.setSelection(defaultLocaleIndex);
+ } else {
+ spinnerDescriptionLanguages.setSelection(0);
+ }
+ } else {
+ spinnerDescriptionLanguages.setSelection(description.getSelectedLanguageIndex());
+ }
- spinnerDescriptionLanguages.setSelection(description.getSelectedLanguageIndex());
+ languages.get(spinnerDescriptionLanguages.getSelectedItemPosition()).setSet(true);
//TODO do it the butterknife way
spinnerDescriptionLanguages.setOnItemSelectedListener(new OnItemSelectedListener() {
@@ -110,13 +158,52 @@ public void onNothingSelected(AdapterView> adapterView) {
}
+
+ @OnTouch(R.id.et_description_text)
+ boolean descriptionInfo(View view, MotionEvent motionEvent) {
+ final int value;
+ if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) {
+ value = etDescriptionText.getRight() - etDescriptionText.getCompoundDrawables()[2]
+ .getBounds().width();
+ if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) {
+ callback.showAlert(R.string.media_detail_description,
+ R.string.description_info);
+ return true;
+ }
+ } else {
+ value = etDescriptionText.getLeft() + etDescriptionText.getCompoundDrawables()[0]
+ .getBounds().width();
+ if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) {
+ callback.showAlert(R.string.media_detail_description,
+ R.string.description_info);
+ return true;
+ }
+ }
+ return false;
+ }
+ }
+
+ private int getIndexOfUserDefaultLocale() {
+ for (int i = 0; i < languages.size(); i++) {
+ if (languages.get(i).getLocale()
+ .equals(context.getResources().getConfiguration().locale)) {
+ return i;
+ }
+ }
+ return 0;
}
private void updateDescriptionBasedOnSelectedLanguageIndex(Description description,
int position) {
Language language = languages.get(position);
+ Locale locale = language.getLocale();
description.setSelectedLanguageIndex(position);
- description.setLanguageDisplayText(language.getDisplayText());
- description.setLanguageId(language.getId());
+ description.setLanguageDisplayText(locale.getDisplayName());
+ description.setLanguageId(locale.getLanguage());
+ }
+
+ public interface Callback {
+
+ void showAlert(int mediaDetailDescription, int descriptionInfo);
}
}
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
index 50df311861..8d4b272397 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/Language.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/Language.java
@@ -1,23 +1,29 @@
package fr.free.nrw.commons.upload;
+import java.util.Locale;
+
class Language {
- private String id;
- private String displayText;
+ private Locale locale;
+ private boolean isSet = false;
+
+ public Language(Locale locale) {
+ this.locale = locale;
+ }
- public String getId() {
- return id;
+ public Locale getLocale() {
+ return locale;
}
- public void setId(String id) {
- this.id = id;
+ public void setLocale(Locale locale) {
+ this.locale = locale;
}
- public String getDisplayText() {
- return displayText;
+ public boolean isSet() {
+ return isSet;
}
- public void setDisplayText(String displayText) {
- this.displayText = displayText;
+ public void setSet(boolean set) {
+ isSet = set;
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
index f9f289d33c..0fd463c699 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java
@@ -481,7 +481,7 @@ private void zoomImageFromThumb(final View thumbView, Uri imageuri) {
CurrentAnimator.cancel();
}
isZoom = true;
- ViewUtil.hideKeyboard(ShareActivity.this.findViewById(R.id.titleEdit | R.id.descEdit));
+ ViewUtil.hideKeyboard(ShareActivity.this.findViewById(R.id.titleEdit));
closeFABMenu();
mainFab.setVisibility(View.GONE);
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 0152bf9aa1..59113e3145 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.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.Html;
@@ -31,9 +32,15 @@
import android.widget.TextView;
import android.widget.Toast;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Locale;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Named;
@@ -66,7 +73,7 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment {
private String license;
private OnUploadActionInitiated uploadActionInitiatedHandler;
private TitleTextWatcher textWatcher = new TitleTextWatcher();
- private DescriptionsAdapter adapter;
+ private DescriptionsAdapter descriptionsAdapter;
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
@@ -84,21 +91,40 @@ public boolean onOptionsItemSelected(MenuItem item) {
return false;
}
- String title = titleEdit.getText().toString().trim();
- String desc = descEdit.getText().toString().trim();
+ String title = titleEdit.getText().toString();
+ String descriptionsInVariousLanguages = getDescriptionsInAppropriateFormat();
//Save the title/desc in short-lived cache so next time this fragment is loaded, we can access these
prefs.edit()
.putString("Title", title)
- .putString("Desc", desc)
+ .putString("Desc", new Gson().toJson(descriptionsAdapter
+ .getDescriptions()))//Description, now is not just a string, its a list of description objects
.apply();
- uploadActionInitiatedHandler.uploadActionInitiated(title, desc);
+ uploadActionInitiatedHandler
+ .uploadActionInitiated(title, descriptionsInVariousLanguages);
return true;
}
return super.onOptionsItemSelected(item);
}
+ private String getDescriptionsInAppropriateFormat() {
+ List descriptions = descriptionsAdapter.getDescriptions();
+ StringBuilder descriptionsInAppropriateFormat = new StringBuilder();
+ for (Description description : descriptions) {
+ String individualDescription = String.format("{{%s|1=%s}}", description.getLanguageId(),
+ description.getDescriptionText());
+ descriptionsInAppropriateFormat.append(individualDescription);
+ }
+ return descriptionsInAppropriateFormat.toString();
+
+ }
+
+ private List getDescriptions() {
+ List descriptions = descriptionsAdapter.getDescriptions();
+ return descriptions;
+ }
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -112,7 +138,12 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
titleEdit.setText(activityIntent.getStringExtra("title"));
}
if (activityIntent.hasExtra("description")) {
- descEdit.setText(activityIntent.getStringExtra("description"));
+ if (descriptionsAdapter.getDescriptions() != null
+ && descriptionsAdapter.getDescriptions().size() > 0) {
+ descriptionsAdapter.getDescriptions().get(0)
+ .setDescriptionText(activityIntent.getStringExtra("description"));
+ descriptionsAdapter.notifyItemChanged(0);
+ }
}
ArrayList licenseItems = new ArrayList<>();
@@ -133,7 +164,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
String imageCats = directPrefs.getString("Category", "");
Timber.d("Image title: " + imageTitle + ", image desc: " + imageDesc + ", image categories: " + imageCats);
titleEdit.setText(imageTitle);
- descEdit.setText(imageDesc);
+ if (descriptionsAdapter.getDescriptions() != null
+ && descriptionsAdapter.getDescriptions().size() > 0) {
+ descriptionsAdapter.getDescriptions().get(0).setDescriptionText(imageDesc);
+ descriptionsAdapter.notifyItemChanged(0);
+ }
}
// check if this is the first time we have uploaded
@@ -174,19 +209,26 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
}
});
- descEdit.setOnFocusChangeListener((v, hasFocus) -> {
- if(!hasFocus){
- ViewUtil.hideKeyboard(v);
- }
- });
-
setLicenseSummary(license);
return rootView;
}
private void initRecyclerView() {
- adapter=new DescriptionsAdapter();
+ descriptionsAdapter = new DescriptionsAdapter();
+ descriptionsAdapter.setLanguages(getLocaleSupportedByDevice());
+ rvDescriptions.setLayoutManager(new LinearLayoutManager(getContext()));
+ rvDescriptions.setAdapter(descriptionsAdapter);
+ }
+
+ private List getLocaleSupportedByDevice() {
+ List languages = new ArrayList<>();
+ Locale[] localesArray = Locale.getAvailableLocales();
+ List locales = Arrays.asList(localesArray);
+ for (Locale locale : locales) {
+ languages.add(new Language(locale));
+ }
+ return languages;
}
@Override
@@ -232,11 +274,16 @@ void onLicenseSelected(AdapterView> parent, View view, int position, long id)
void setTitleDescButton() {
//Retrieve last title and desc entered
String title = prefs.getString("Title", "");
- String desc = prefs.getString("Desc", "");
- Timber.d("Title: %s, Desc: %s", title, desc);
+ String descriptionJson = prefs.getString("Desc", "");
+ Timber.d("Title: %s, Desc: %s", title, descriptionJson);
titleEdit.setText(title);
- descEdit.setText(desc);
+ Type typeOfDest = new TypeToken>() {
+ }.getType();
+
+ List descriptions = new Gson().fromJson(descriptionJson, typeOfDest);
+ descriptionsAdapter.setDescriptions(descriptions);
+
}
/**
@@ -262,26 +309,6 @@ boolean titleInfo(View view, MotionEvent motionEvent) {
return false;
}
- @OnTouch(R.id.descEdit)
- boolean descriptionInfo(View view, MotionEvent motionEvent) {
- final int value;
- if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
- value = descEdit.getRight() - descEdit.getCompoundDrawables()[2].getBounds().width();
- if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) {
- showInfoAlert(R.string.media_detail_description,R.string.description_info);
- return true;
- }
- }
- else{
- value = descEdit.getLeft() + descEdit.getCompoundDrawables()[0].getBounds().width();
- if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) {
- showInfoAlert(R.string.media_detail_description,R.string.description_info);
- return true;
- }
- }
- return false;
- }
-
@SuppressLint("StringFormatInvalid")
private void setLicenseSummary(String license) {
String licenseHyperLink = ""+ getString(Utils.licenseNameFor(license)) + "
";
@@ -323,10 +350,12 @@ private String licenseUrlFor(String license) {
}
public interface OnUploadActionInitiated {
+
void uploadActionInitiated(String title, String description);
}
private class TitleTextWatcher implements TextWatcher {
+
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@@ -354,6 +383,11 @@ private void showInfoAlert (int titleStringID, int messageStringID){
.show();
}
+ @OnClick(R.id.ll_add_description)
+ public void onLLAddDescriptionClicked() {
+ descriptionsAdapter.addDescription(new Description());
+ }
+
/**
* To launch the Commons:Licensing
* @param view
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
new file mode 100644
index 0000000000..3d4482550e
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
@@ -0,0 +1,92 @@
+package fr.free.nrw.commons.upload;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import fr.free.nrw.commons.R;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class SpinnerLanguagesAdapter extends ArrayAdapter {
+
+ private final Context context;
+ private final int resource;
+ private final LayoutInflater layoutInflater;
+ List languages;
+
+ public SpinnerLanguagesAdapter(@NonNull Context context,
+ int resource) {
+ super(context, resource);
+ this.context = context;
+ this.resource = resource;
+ this.layoutInflater = LayoutInflater.from(context);
+ languages = new ArrayList<>();
+ }
+
+ public void setLanguages(List languages) {
+ this.languages = languages;
+ }
+
+ @Override
+ public int getCount() {
+ return languages.size();
+ }
+
+ @Override
+ public View getDropDownView(int position, @Nullable View convertView,
+ @NonNull ViewGroup parent) {
+ View view = layoutInflater.inflate(resource, parent, false);
+ ViewHolder holder = new ViewHolder(view);
+ holder.init(position, true);
+ return view;
+ }
+
+ @Override
+ public @NonNull
+ View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
+ View view = layoutInflater.inflate(resource, parent, false);
+ ViewHolder holder = new ViewHolder(view);
+ holder.init(position, false);
+ return view;
+ }
+
+
+ public class ViewHolder {
+
+ @BindView(R.id.ll_container_description_language)
+ LinearLayout llContainerDescriptionLanguage;
+
+ @BindView(R.id.tv_language)
+ TextView tvLanguage;
+
+ @BindView(R.id.view)
+ View view;
+
+ public ViewHolder(View itemView) {
+ ButterKnife.bind(this, itemView);
+ }
+
+ public void init(int position, boolean isDropDownView) {
+ Language language = languages.get(position);
+ tvLanguage.setText(
+ String.format("%s [%s]", language.getLocale().getDisplayName(),
+ language.getLocale().getLanguage()));
+ if (!isDropDownView) {
+ view.setVisibility(View.GONE);
+ } else {
+ view.setVisibility(View.VISIBLE);
+ }
+
+ }
+ }
+
+}
diff --git a/app/src/main/res/layout/fragment_single_upload.xml b/app/src/main/res/layout/fragment_single_upload.xml
index 11ece37469..c8e90aaab4 100644
--- a/app/src/main/res/layout/fragment_single_upload.xml
+++ b/app/src/main/res/layout/fragment_single_upload.xml
@@ -38,10 +38,31 @@
android:scrollHorizontally="false" />
+
+ android:layout_height="wrap_content"/>
+
+
+
+
@@ -10,7 +10,8 @@
android:id="@+id/spinner_description_languages"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_weight="3">
+ android:layout_weight="3"
+ android:spinnerMode="dialog">
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:id="@+id/ll_container_description_language"
+ android:orientation="vertical">
-
\ No newline at end of file
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0de347dfe4..0b3365c9ca 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -325,6 +325,10 @@
Correct Answer
Wrong Answer
Is this screenshot OK to upload?
+ Share App
+ Coordinates were not specified during image selection
+ Error fetching nearby places.
+ + Add description
Are you sure you want to clear your search history?
Search history deleted
From d17d5e5d14f690b2210eb16119d49374bc3750eb Mon Sep 17 00:00:00 2001
From: Ashish
Date: Mon, 18 Jun 2018 15:15:47 +0530
Subject: [PATCH 03/10] Added callback for the adapter
---
.../free/nrw/commons/upload/DescriptionsAdapter.java | 11 +++++++++++
.../free/nrw/commons/upload/SingleUploadFragment.java | 2 ++
2 files changed, 13 insertions(+)
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
index db477c10e5..0e08852c55 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -3,6 +3,7 @@
import static android.view.MotionEvent.ACTION_UP;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.support.v4.view.ViewCompat;
import android.support.v7.widget.AppCompatSpinner;
import android.support.v7.widget.RecyclerView;
@@ -38,6 +39,10 @@ public DescriptionsAdapter() {
languages = new ArrayList<>();
}
+ public void setCallback(Callback callback) {
+ this.callback = callback;
+ }
+
public void setDescriptions(List descriptions) {
this.descriptions = descriptions;
notifyDataSetChanged();
@@ -98,6 +103,12 @@ public void init(int position) {
} else {
etDescriptionText.setText("");
}
+ Drawable drawableRight=context.getResources().getDrawable(R.drawable.mapbox_info_icon_default);
+ if(position==0){
+ etDescriptionText.setCompoundDrawables(null,null,drawableRight,null);
+ }else{
+ etDescriptionText.setCompoundDrawables(null,null,null,null);
+ }
etDescriptionText.addTextChangedListener(new TextWatcher() {
@Override
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 59113e3145..76e269d982 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
@@ -34,6 +34,7 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
+import fr.free.nrw.commons.upload.DescriptionsAdapter.Callback;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Locale;
@@ -216,6 +217,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
private void initRecyclerView() {
descriptionsAdapter = new DescriptionsAdapter();
+ descriptionsAdapter.setCallback((mediaDetailDescription, descriptionInfo) -> showInfoAlert(mediaDetailDescription,descriptionInfo));
descriptionsAdapter.setLanguages(getLocaleSupportedByDevice());
rvDescriptions.setLayoutManager(new LinearLayoutManager(getContext()));
rvDescriptions.setAdapter(descriptionsAdapter);
From b2771ee84bafbe5916e64504b8fe24df1b526d89 Mon Sep 17 00:00:00 2001
From: Ashish
Date: Mon, 18 Jun 2018 17:18:10 +0530
Subject: [PATCH 04/10] Codacy suggested changes
---
.../nrw/commons/upload/SingleUploadFragment.java | 13 ++++++-------
.../nrw/commons/upload/SpinnerLanguagesAdapter.java | 2 --
2 files changed, 6 insertions(+), 9 deletions(-)
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 76e269d982..a601d23c20 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
@@ -138,15 +138,14 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
if (activityIntent.hasExtra("title")) {
titleEdit.setText(activityIntent.getStringExtra("title"));
}
- if (activityIntent.hasExtra("description")) {
- if (descriptionsAdapter.getDescriptions() != null
- && descriptionsAdapter.getDescriptions().size() > 0) {
- descriptionsAdapter.getDescriptions().get(0)
- .setDescriptionText(activityIntent.getStringExtra("description"));
- descriptionsAdapter.notifyItemChanged(0);
- }
+ if (activityIntent.hasExtra("description") && descriptionsAdapter.getDescriptions() != null
+ && descriptionsAdapter.getDescriptions().size() > 0) {
+ descriptionsAdapter.getDescriptions().get(0)
+ .setDescriptionText(activityIntent.getStringExtra("description"));
+ descriptionsAdapter.notifyItemChanged(0);
}
+
ArrayList licenseItems = new ArrayList<>();
licenseItems.add(getString(R.string.license_name_cc0));
licenseItems.add(getString(R.string.license_name_cc_by));
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
index 3d4482550e..2528d14afd 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
@@ -18,7 +18,6 @@
public class SpinnerLanguagesAdapter extends ArrayAdapter {
- private final Context context;
private final int resource;
private final LayoutInflater layoutInflater;
List languages;
@@ -26,7 +25,6 @@ public class SpinnerLanguagesAdapter extends ArrayAdapter {
public SpinnerLanguagesAdapter(@NonNull Context context,
int resource) {
super(context, resource);
- this.context = context;
this.resource = resource;
this.layoutInflater = LayoutInflater.from(context);
languages = new ArrayList<>();
From 0be49dce43ab65f5ba9a362a46a6cbc519ce011f Mon Sep 17 00:00:00 2001
From: Ashish
Date: Tue, 19 Jun 2018 00:03:25 +0530
Subject: [PATCH 05/10] Sort the languages in the spinner in alphabetical order
---
.../fr/free/nrw/commons/upload/DescriptionsAdapter.java | 4 ++++
.../fr/free/nrw/commons/upload/SingleUploadFragment.java | 1 +
.../free/nrw/commons/upload/SpinnerLanguagesAdapter.java | 8 +++++---
app/src/main/res/layout/fragment_single_upload.xml | 1 +
4 files changed, 11 insertions(+), 3 deletions(-)
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
index 0e08852c55..f36316edf3 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -23,6 +23,8 @@
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.utils.ViewUtil;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Locale;
@@ -135,6 +137,8 @@ public void afterTextChanged(Editable editable) {
SpinnerLanguagesAdapter languagesAdapter = new SpinnerLanguagesAdapter(context,
R.layout.row_item_languages_spinner);
+ Collections.sort(languages, (language, t1) -> language.getLocale().getDisplayLanguage()
+ .compareTo(t1.getLocale().getDisplayLanguage().toString()));
languagesAdapter.setLanguages(languages);
languagesAdapter.notifyDataSetChanged();
spinnerDescriptionLanguages.setAdapter(languagesAdapter);
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 a601d23c20..6664a7c4e3 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
@@ -387,6 +387,7 @@ private void showInfoAlert (int titleStringID, int messageStringID){
@OnClick(R.id.ll_add_description)
public void onLLAddDescriptionClicked() {
descriptionsAdapter.addDescription(new Description());
+ rvDescriptions.scrollToPosition(rvDescriptions.getAdapter().getItemCount() - 1);
}
/**
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
index 2528d14afd..5667aa55c2 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java
@@ -75,13 +75,15 @@ public ViewHolder(View itemView) {
public void init(int position, boolean isDropDownView) {
Language language = languages.get(position);
- tvLanguage.setText(
- String.format("%s [%s]", language.getLocale().getDisplayName(),
- language.getLocale().getLanguage()));
if (!isDropDownView) {
view.setVisibility(View.GONE);
+ tvLanguage.setText(
+ language.getLocale().getLanguage());
} else {
view.setVisibility(View.VISIBLE);
+ tvLanguage.setText(
+ String.format("%s [%s]", language.getLocale().getDisplayName(),
+ language.getLocale().getLanguage()));
}
}
diff --git a/app/src/main/res/layout/fragment_single_upload.xml b/app/src/main/res/layout/fragment_single_upload.xml
index c8e90aaab4..196760bb0d 100644
--- a/app/src/main/res/layout/fragment_single_upload.xml
+++ b/app/src/main/res/layout/fragment_single_upload.xml
@@ -12,6 +12,7 @@
android:paddingRight="@dimen/standard_gap"
android:paddingStart="@dimen/standard_gap"
android:paddingTop="@dimen/small_gap"
+ android:nestedScrollingEnabled="false"
android:theme="@style/DarkAppTheme">
Date: Tue, 19 Jun 2018 00:04:04 +0530
Subject: [PATCH 06/10] scroll view nested scrolling enabled false
---
.../java/fr/free/nrw/commons/upload/SingleUploadFragment.java | 1 -
app/src/main/res/layout/fragment_single_upload.xml | 1 -
2 files changed, 2 deletions(-)
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 6664a7c4e3..a601d23c20 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
@@ -387,7 +387,6 @@ private void showInfoAlert (int titleStringID, int messageStringID){
@OnClick(R.id.ll_add_description)
public void onLLAddDescriptionClicked() {
descriptionsAdapter.addDescription(new Description());
- rvDescriptions.scrollToPosition(rvDescriptions.getAdapter().getItemCount() - 1);
}
/**
diff --git a/app/src/main/res/layout/fragment_single_upload.xml b/app/src/main/res/layout/fragment_single_upload.xml
index 196760bb0d..c8e90aaab4 100644
--- a/app/src/main/res/layout/fragment_single_upload.xml
+++ b/app/src/main/res/layout/fragment_single_upload.xml
@@ -12,7 +12,6 @@
android:paddingRight="@dimen/standard_gap"
android:paddingStart="@dimen/standard_gap"
android:paddingTop="@dimen/small_gap"
- android:nestedScrollingEnabled="false"
android:theme="@style/DarkAppTheme">
Date: Tue, 19 Jun 2018 00:07:03 +0530
Subject: [PATCH 07/10] Nested scrolling enabled false [Allow rv to expand]
---
.../java/fr/free/nrw/commons/upload/SingleUploadFragment.java | 1 +
app/src/main/res/layout/fragment_single_upload.xml | 1 +
2 files changed, 2 insertions(+)
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 a601d23c20..3a46c76cd5 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
@@ -387,6 +387,7 @@ private void showInfoAlert (int titleStringID, int messageStringID){
@OnClick(R.id.ll_add_description)
public void onLLAddDescriptionClicked() {
descriptionsAdapter.addDescription(new Description());
+ rvDescriptions.scrollToPosition(descriptionsAdapter.getItemCount() - 1);
}
/**
diff --git a/app/src/main/res/layout/fragment_single_upload.xml b/app/src/main/res/layout/fragment_single_upload.xml
index c8e90aaab4..196760bb0d 100644
--- a/app/src/main/res/layout/fragment_single_upload.xml
+++ b/app/src/main/res/layout/fragment_single_upload.xml
@@ -12,6 +12,7 @@
android:paddingRight="@dimen/standard_gap"
android:paddingStart="@dimen/standard_gap"
android:paddingTop="@dimen/small_gap"
+ android:nestedScrollingEnabled="false"
android:theme="@style/DarkAppTheme">
Date: Thu, 2 Aug 2018 14:05:11 +0530
Subject: [PATCH 08/10] rebased to master, resolved conflicts
---
.../commons/upload/DescriptionsAdapter.java | 38 +++++----
.../commons/upload/SingleUploadFragment.java | 13 ----
app/src/main/res/values/strings.xml | 77 +++++++++----------
3 files changed, 59 insertions(+), 69 deletions(-)
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
index f36316edf3..c256c1ac1d 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -176,22 +176,28 @@ public void onNothingSelected(AdapterView> adapterView) {
@OnTouch(R.id.et_description_text)
boolean descriptionInfo(View view, MotionEvent motionEvent) {
- final int value;
- if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) {
- value = etDescriptionText.getRight() - etDescriptionText.getCompoundDrawables()[2]
- .getBounds().width();
- if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) {
- callback.showAlert(R.string.media_detail_description,
- R.string.description_info);
- return true;
- }
- } else {
- value = etDescriptionText.getLeft() + etDescriptionText.getCompoundDrawables()[0]
- .getBounds().width();
- if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) {
- callback.showAlert(R.string.media_detail_description,
- R.string.description_info);
- return true;
+
+ if (getAdapterPosition() == 0) {
+ //Description info is visible only for the first item
+ final int value;
+ if (ViewCompat.getLayoutDirection(view) == ViewCompat.LAYOUT_DIRECTION_LTR) {
+ value = etDescriptionText.getRight() - etDescriptionText
+ .getCompoundDrawables()[2]
+ .getBounds().width();
+ if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) {
+ callback.showAlert(R.string.media_detail_description,
+ R.string.description_info);
+ return true;
+ }
+ } else {
+ value = etDescriptionText.getLeft() + etDescriptionText
+ .getCompoundDrawables()[0]
+ .getBounds().width();
+ if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) {
+ callback.showAlert(R.string.media_detail_description,
+ R.string.description_info);
+ return true;
+ }
}
}
return false;
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 3a46c76cd5..bacefd5242 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
@@ -389,17 +389,4 @@ public void onLLAddDescriptionClicked() {
descriptionsAdapter.addDescription(new Description());
rvDescriptions.scrollToPosition(descriptionsAdapter.getItemCount() - 1);
}
-
- /**
- * To launch the Commons:Licensing
- * @param view
- */
- @OnClick(R.id.licenseInfo)
- public void launchLicenseInfo(View view){
- Log.i("Language", Locale.getDefault().getLanguage());
- UrlLicense urlLicense = new UrlLicense();
- urlLicense.initialize();
- String url = urlLicense.getLicenseUrl(Locale.getDefault().getLanguage());
- Utils.handleWebUrl(getActivity() , Uri.parse(url));
- }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0b3365c9ca..651529ba38 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -248,50 +248,47 @@
See webpage for details
View in Browser
- Location has not changed.
- Location not available.
- Permission required to display a list of nearby places
- GET DIRECTIONS
- READ ARTICLE
+ Location has not changed.
+ Location not available.
+ Permission required to display a list of nearby places
+ GET DIRECTIONS
+ READ ARTICLE
- Welcome to Wikimedia Commons, %1$s! We\'re glad you\'re here.
- %1$s left a message on your talk page
- Thank you for making an edit
- %1$s mentioned you on %2$s.
- Toggle view
- DIRECTIONS
- WIKIDATA
- WIKIPEDIA
- COMMONS
-
-
- Skip Tutorial
- Internet unavailable
- Internet available
- Error fetching notifications
- No notifications found
-
- Languages
- Select the language that you would like to submit translations for
- Proceed
- Cancel
- Retry
+ Welcome to Wikimedia Commons, %1$s! We\'re glad you\'re here.
+ %1$s left a message on your talk page
+ Thank you for making an edit
+ %1$s mentioned you on %2$s.
+ Toggle view
+ DIRECTIONS
+ WIKIDATA
+ WIKIPEDIA
+ COMMONS
+
+
+ Skip Tutorial
+ Internet unavailable
+ Internet available
+ Error fetching notifications
+ No notifications found
+
+ Languages
+ Select the language that you would like to submit translations for
+ Proceed
+ Cancel
+ Retry
- Got it!
- These are the places near you that need pictures to illustrate their Wikipedia articles
- Tapping this button brings up a list of these places
- You can upload a picture for any place from your gallery or camera
+ Got it!
+ These are the places near you that need pictures to illustrate their Wikipedia articles
+ Tapping this button brings up a list of these places
+ You can upload a picture for any place from your gallery or camera
- No images found!
- Error occurred while loading images.
- Uploaded by: %1$s
+ No images found!
+ Error occurred while loading images.
+ Uploaded by: %1$s
- You are blocked from editing Commons
- Share App
- Coordinates were not specified during image selection
- Error fetching nearby places.
- Pic of the Day
- Pic of the Day
+ You are blocked from editing Commons
+ Pic of the Day
+ Pic of the Day
Search
Search Commons
No Images matching %1$s found
From a31b7f7f109f1a50775e2d83f00c41c542b62bf2 Mon Sep 17 00:00:00 2001
From: Ashish
Date: Thu, 2 Aug 2018 23:14:27 +0530
Subject: [PATCH 09/10] replaced setCompoundDrawables with
setCompoundDrawablesWithIntrinsicBounds [the former dint used to work on all
devices]
---
.../free/nrw/commons/upload/DescriptionsAdapter.java | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
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
index c256c1ac1d..da163e6ba4 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -105,11 +105,12 @@ public void init(int position) {
} else {
etDescriptionText.setText("");
}
- Drawable drawableRight=context.getResources().getDrawable(R.drawable.mapbox_info_icon_default);
- if(position==0){
- etDescriptionText.setCompoundDrawables(null,null,drawableRight,null);
- }else{
- etDescriptionText.setCompoundDrawables(null,null,null,null);
+ Drawable drawableRight = context.getResources()
+ .getDrawable(R.drawable.mapbox_info_icon_default);
+ if (position != 0) {
+ etDescriptionText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
+ } else {
+ etDescriptionText.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawableRight, null);
}
etDescriptionText.addTextChangedListener(new TextWatcher() {
From afc5ec0c9b8a56a78c96dd89ad8b6b5b2aa0e4ce Mon Sep 17 00:00:00 2001
From: Ashish
Date: Thu, 2 Aug 2018 23:16:44 +0530
Subject: [PATCH 10/10] replaced setCompoundDrawables with
setCompoundDrawablesWithIntrinsicBounds [the former dint used to work on all
devices]
---
.../java/fr/free/nrw/commons/upload/DescriptionsAdapter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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
index da163e6ba4..8642e12101 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java
@@ -110,7 +110,7 @@ public void init(int position) {
if (position != 0) {
etDescriptionText.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
} else {
- etDescriptionText.setCompoundDrawablesRelativeWithIntrinsicBounds(null, null, drawableRight, null);
+ etDescriptionText.setCompoundDrawablesWithIntrinsicBounds(null, null, drawableRight, null);
}
etDescriptionText.addTextChangedListener(new TextWatcher() {