From 3d22463445a16f8e17239f27868391e6980f55d4 Mon Sep 17 00:00:00 2001
From: ayans
Date: Thu, 30 Sep 2021 01:07:48 +0530
Subject: [PATCH 01/23] DescriptionEditHelper implemented
---
.../nrw/commons/actions/PageEditClient.kt | 3 +
.../description/DescriptionEditHelper.java | 193 ++++++++++++++++++
.../commons/media/MediaDetailFragment.java | 16 ++
.../main/res/layout/fragment_media_detail.xml | 10 +
4 files changed, 222 insertions(+)
create mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index a1a0db6e0b..0f6c2e433e 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -1,5 +1,6 @@
package fr.free.nrw.commons.actions
+import android.util.Log
import io.reactivex.Observable
import io.reactivex.Single
import org.wikipedia.csrf.CsrfTokenClient
@@ -25,6 +26,8 @@ class PageEditClient(
*/
fun edit(pageTitle: String, text: String, summary: String): Observable {
return try {
+ Log.d("hehe", csrfTokenClient.tokenBlocking)
+ Log.d("hehe", text)
pageEditInterface.postEdit(pageTitle, summary, text, csrfTokenClient.tokenBlocking)
.map { editResponse -> editResponse.edit()!!.editSucceeded() }
} catch (throwable: Throwable) {
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
new file mode 100644
index 0000000000..e2417a8c82
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
@@ -0,0 +1,193 @@
+package fr.free.nrw.commons.description;
+
+import static fr.free.nrw.commons.notification.NotificationHelper.NOTIFICATION_EDIT_COORDINATES;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import fr.free.nrw.commons.BuildConfig;
+import fr.free.nrw.commons.Media;
+import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.actions.PageEditClient;
+import fr.free.nrw.commons.notification.NotificationHelper;
+import fr.free.nrw.commons.utils.ViewUtilWrapper;
+import io.reactivex.Observable;
+import io.reactivex.Single;
+import io.reactivex.schedulers.Schedulers;
+import java.util.Objects;
+import javax.inject.Inject;
+import javax.inject.Named;
+import org.apache.commons.lang3.StringUtils;
+import timber.log.Timber;
+
+public class DescriptionEditHelper {
+
+ /**
+ * notificationHelper: helps creating notification
+ */
+ private final NotificationHelper notificationHelper;
+ /**
+ * * pageEditClient: methods provided by this member posts the edited coordinates
+ * to the Media wiki api
+ */
+ public final PageEditClient pageEditClient;
+ /**
+ * viewUtil: helps to show Toast
+ */
+ private final ViewUtilWrapper viewUtil;
+
+ @Inject
+ public DescriptionEditHelper(final NotificationHelper notificationHelper,
+ @Named("commons-page-edit") final PageEditClient pageEditClient,
+ final ViewUtilWrapper viewUtil) {
+ this.notificationHelper = notificationHelper;
+ this.pageEditClient = pageEditClient;
+ this.viewUtil = viewUtil;
+ }
+
+ /**
+ * Public interface to edit coordinates
+ * @param context to be added
+ * @param media to be added
+ * @param Accuracy to be added
+ * @return Single
+ */
+ public Single makeDescriptionEdit(final Context context, final Media media,
+ final String Latitude, final String Longitude, final String Accuracy) {
+ viewUtil.showShortToast(context,
+ context.getString(R.string.coordinates_edit_helper_make_edit_toast));
+ return addDescription(media, Latitude, Longitude, Accuracy)
+ .flatMapSingle(result -> Single.just(showDescriptionEditNotification(context, media,
+ Latitude, Longitude, Accuracy, result)))
+ .firstOrError();
+ }
+
+ /**
+ * Replaces new coordinates
+ * @param media to be added
+ * @param Latitude to be added
+ * @param Longitude to be added
+ * @param Accuracy to be added
+ * @return Observable
+ */
+ private Observable addDescription(final Media media, final String Latitude,
+ final String Longitude, final String Accuracy) {
+ Timber.d("thread is coordinates adding %s", Thread.currentThread().getName());
+ final String summary = "Adding Coordinates";
+
+ final StringBuilder buffer = new StringBuilder();
+
+ final String wikiText = pageEditClient.getCurrentWikiText(media.getFilename())
+ .subscribeOn(Schedulers.io())
+ .blockingGet();
+
+ if (Latitude != null) {
+ buffer.append("\n{{Location|").append(Latitude).append("|").append(Longitude)
+ .append("|").append(Accuracy).append("}}");
+ }
+
+ final String editedLocation = buffer.toString();
+ final String appendText = getFormattedWikiText(wikiText, editedLocation);
+
+ return pageEditClient.edit(Objects.requireNonNull(media.getFilename())
+ , appendText, summary);
+ }
+
+ /**
+ * Helps to get formatted wikitext with upgraded location
+ * @param wikiText current wikitext
+ * @param editedLocation new location
+ * @return String
+ */
+ private String getFormattedWikiText(final String wikiText, final String editedLocation){
+
+ if (wikiText.contains("filedesc") && wikiText.contains("Location")) {
+
+ final String fromLocationToEnd = wikiText.substring(wikiText.indexOf("{{Location"));
+ final String firstHalf = wikiText.substring(0, wikiText.indexOf("{{Location"));
+ final String lastHalf = fromLocationToEnd.substring(
+ fromLocationToEnd.indexOf("}}") + 2);
+
+ final int startOfSecondSection = StringUtils.ordinalIndexOf(wikiText,
+ "==", 3);
+ final StringBuilder buffer = new StringBuilder();
+ if (wikiText.charAt(wikiText.indexOf("{{Location")-1) == '\n') {
+ buffer.append(editedLocation.substring(1));
+ } else {
+ buffer.append(editedLocation);
+ }
+ if (startOfSecondSection != -1 && wikiText.charAt(startOfSecondSection-1)!= '\n') {
+ buffer.append("\n");
+ }
+
+ return firstHalf + buffer + lastHalf;
+
+ }
+ if (wikiText.contains("filedesc") && !wikiText.contains("Location")) {
+
+ final int startOfSecondSection = StringUtils.ordinalIndexOf(wikiText,
+ "==", 3);
+
+ if (startOfSecondSection != -1) {
+ final String firstHalf = wikiText.substring(0, startOfSecondSection);
+ final String lastHalf = wikiText.substring(startOfSecondSection);
+ final String buffer = editedLocation.substring(1)
+ + "\n";
+ return firstHalf + buffer + lastHalf;
+ }
+
+ return wikiText + editedLocation;
+ }
+ if (!wikiText.contains("filedesc") && !wikiText.contains("Location")) {
+
+ return "== {{int:filedesc}} ==" + editedLocation + wikiText;
+
+ }
+ if (!wikiText.contains("filedesc") && wikiText.contains("Location")) {
+
+ return "== {{int:filedesc}} ==" + editedLocation + wikiText;
+
+ }
+ return null;
+ }
+
+ /**
+ * Update coordinates and shows notification about coordinates update
+ * @param context to be added
+ * @param media to be added
+ * @param latitude to be added
+ * @param longitude to be added
+ * @param Accuracy to be added
+ * @param result to be added
+ * @return boolean
+ */
+ private boolean showDescriptionEditNotification(final Context context, final Media media,
+ final String latitude, final String longitude, final String Accuracy,
+ final boolean result) {
+ final String message;
+ String title = context.getString(R.string.coordinates_edit_helper_show_edit_title);
+
+ if (result) {
+ media.setCoordinates(
+ new fr.free.nrw.commons.location.LatLng(Double.parseDouble(latitude),
+ Double.parseDouble(longitude),
+ Float.parseFloat(Accuracy)));
+ title += ": " + context
+ .getString(R.string.coordinates_edit_helper_show_edit_title_success);
+ final StringBuilder coordinatesInMessage = new StringBuilder();
+ final String mediaCoordinate = String.valueOf(media.getCoordinates());
+ coordinatesInMessage.append(mediaCoordinate);
+ message = context.getString(R.string.coordinates_edit_helper_show_edit_message,
+ coordinatesInMessage.toString());
+ } else {
+ title += ": " + context.getString(R.string.coordinates_edit_helper_show_edit_title);
+ message = context.getString(R.string.coordinates_edit_helper_edit_message_else) ;
+ }
+
+ final String urlForFile = BuildConfig.COMMONS_URL + "/wiki/" + media.getFilename();
+ final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlForFile));
+ notificationHelper.showNotification(context, title, message, NOTIFICATION_EDIT_COORDINATES,
+ browserIntent);
+ return result;
+ }
+}
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 289a859cc8..029da7fd3d 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
@@ -794,6 +794,22 @@ public void onUpdateCoordinatesClicked(){
goToLocationPickerActivity();
}
+ @OnClick(R.id.description_edit)
+ public void onUpdateDescriptionClicked(){
+ updateDescription();
+ }
+
+ private void updateDescription() {
+// compositeDisposable.add(coordinateEditHelper.makeCoordinatesEdit(getContext(), media,
+// Latitude, Longitude, Accuracy)
+// .subscribeOn(Schedulers.io())
+// .observeOn(AndroidSchedulers.mainThread())
+// .subscribe(s -> {
+// Timber.d("Coordinates are added.");
+// coordinates.setText(prettyCoordinates(media));
+// }));
+ }
+
/**
* Start location picker activity with a request code and get the coordinates from the activity.
*/
diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml
index cfbb010942..7e01725b29 100644
--- a/app/src/main/res/layout/fragment_media_detail.xml
+++ b/app/src/main/res/layout/fragment_media_detail.xml
@@ -204,6 +204,16 @@
android:textSize="@dimen/description_text_size"
android:textIsSelectable="true"
tools:text="Description of the media goes here. This can potentially be fairly long, and will need to wrap across multiple lines. We hope it looks nice though." />
+
+
+
Date: Thu, 7 Oct 2021 17:31:10 +0530
Subject: [PATCH 02/23] Description extracted
---
app/build.gradle | 1 +
app/src/main/AndroidManifest.xml | 420 +++++++++---------
.../fr/free/nrw/commons/MediaDataExtractor.kt | 2 +
.../description/DescriptionEditActivity.java | 14 +
.../fr/free/nrw/commons/media/MediaClient.kt | 6 +
.../commons/media/MediaDetailFragment.java | 85 ++++
.../commons/media/MediaDetailInterface.java | 11 +
.../res/layout/activity_description_edit.xml | 9 +
.../main/res/layout/fragment_media_detail.xml | 29 +-
app/src/main/res/values/strings.xml | 2 +-
10 files changed, 348 insertions(+), 231 deletions(-)
create mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
create mode 100644 app/src/main/res/layout/activity_description_edit.xml
diff --git a/app/build.gradle b/app/build.gradle
index eb4d11c249..a588407c8b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -46,6 +46,7 @@ dependencies {
implementation 'com.karumi:dexter:5.0.0'
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
+ implementation 'androidx.appcompat:appcompat:1.3.1'
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
implementation "com.hannesdorfmann:adapterdelegates4-kotlin-dsl-layoutcontainer:$ADAPTER_DELEGATES_VERSION"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a2c33778fa..2f08d0a5e4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,221 +1,203 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ xmlns:tools="http://schemas.android.com/tools"
+ package="fr.free.nrw.commons">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
index 34a9a81bea..5c902ef7f2 100644
--- a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
+++ b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
@@ -50,4 +50,6 @@ class MediaDataExtractor @Inject constructor(private val mediaClient: MediaClien
}
fun getHtmlOfPage(title: String) = mediaClient.getPageHtml(title);
+
+ fun getCurrentWikiText(title: String) = mediaClient.getCurrentWikiText(title);
}
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
new file mode 100644
index 0000000000..4c07ecd8e0
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -0,0 +1,14 @@
+package fr.free.nrw.commons.description;
+
+import androidx.appcompat.app.AppCompatActivity;
+import android.os.Bundle;
+import fr.free.nrw.commons.R;
+
+public class DescriptionEditActivity extends AppCompatActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_description_edit);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
index 5ca20b9461..ee7331abf3 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
@@ -157,6 +157,12 @@ class MediaClient @Inject constructor(
fun resetUserNameContinuation(userName: String) =
resetUserContinuation("user_", userName)
+ fun getCurrentWikiText(title: String): Single {
+ return mediaDetailInterface.getWikiText(title).map {
+ it.query()?.pages()?.get(0)?.revisions()?.get(0)?.content()
+ }
+ }
+
override fun responseMapper(
networkResult: Single,
key: String?
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 029da7fd3d..2b23c7d6ca 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
@@ -18,6 +18,7 @@
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -82,6 +83,7 @@
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -349,6 +351,76 @@ public void launchZoomActivity(View view) {
}
}
+ @OnClick(R.id.description_edit)
+ public void editDescriptionAndCaption(View view) {
+ Log.d("hoho", "language+ languageCaption");
+ getDescriptionList();
+
+ }
+
+ private void getDescriptionList() {
+ compositeDisposable.add(mediaDataExtractor.getCurrentWikiText(media.getFilename())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(this::extractCaptionDescription, Timber::e));
+ }
+
+ private void extractCaptionDescription(String s) {
+ final HashMap descriptions = getDescriptions(s);
+ final HashMap captions = getCaptionsList();
+
+
+
+ }
+
+ private HashMap getDescriptions(String s) {
+ Log.d("WikiText","yyyyyy"+ s);
+ int descriptionIndex = s.indexOf("description=");
+ if(descriptionIndex == -1){
+ descriptionIndex = s.indexOf("Description=");
+ }
+ Log.d("WikiText", "descriptionIndex"+descriptionIndex);
+
+ if( descriptionIndex == -1 ){
+ return new HashMap();
+ } else {
+ String descriptionToEnd = s.substring(descriptionIndex+12);
+ int descriptionEndIndex = descriptionToEnd.indexOf("\n");
+ Log.d("WikiText", "descriptionEndIndex"+descriptionEndIndex);
+ Log.d("WikiText", "descriptionEndIndex"+descriptionToEnd);
+ String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
+ Log.d("WikiText",description);
+ String[] arr = description.trim().split(",");
+ HashMap descriptionList = new HashMap<>();
+ for (String string :
+ arr) {
+ int startCode = string.indexOf("{{");
+ int endCode = string.indexOf("|");
+ String languageCode = string.substring(startCode+2, endCode).trim();
+ Log.d("WikiText","languageCode "+languageCode);
+ int startDescription = string.indexOf("=");
+ int endDescription = string.indexOf("}}");
+ String languageDescription = string.substring(startDescription+1, endDescription);
+ Log.d("WikiText","languageDescription "+languageDescription);
+
+ descriptionList.put(languageCode, languageDescription);
+ }
+ return descriptionList;
+ }
+ }
+
+ private HashMap getCaptionsList() {
+ HashMap captionList = new HashMap<>();
+ Map captions = media.getCaptions();
+ AppLanguageLookUpTable appLanguageLookUpTable = new AppLanguageLookUpTable(getContext());
+ for (Map.Entry map : captions.entrySet()) {
+ String language = map.getKey();
+ String languageCaption = map.getValue();
+ captionList.put(language, languageCaption);
+ }
+ return captionList;
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -1118,8 +1190,14 @@ private String chooseDescription(Media media) {
return multilingualDesc;
}
for (String description : descriptions.values()) {
+ Log.d("hehe", "dxxxx "+ description);
return description;
}
+
+ for (String lang : descriptions.keySet()) {
+ Log.d("hehe", "lxxxxx "+ lang);
+ }
+
return media.getFallbackDescription();
}
@@ -1186,6 +1264,11 @@ private void setUpCaptionAndDescriptionLayout() {
if (descriptionHtmlCode == null) {
progressBar.setVisibility(VISIBLE);
}
+//
+// for (Caption c :
+// captions) {
+//
+// }
getDescription();
CaptionListViewAdapter adapter = new CaptionListViewAdapter(captions);
@@ -1227,8 +1310,10 @@ private void extractDescription(String s) {
int end = s.indexOf("", start);
descriptionHtmlCode = "";
for (int i = start; i < end; i++) {
+ Log.d("hehe", "uuuu"+s.toCharArray()[i]);
descriptionHtmlCode = descriptionHtmlCode + s.toCharArray()[i];
}
+ Log.d("hehe", s);
descriptionWebView
.loadDataWithBaseURL(null, descriptionHtmlCode, "text/html", "utf-8", null);
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
index 86be5c8759..913e68ec06 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
@@ -2,6 +2,8 @@
import io.reactivex.Observable;
import io.reactivex.Single;
+import org.wikipedia.dataclient.Service;
+import org.wikipedia.dataclient.mwapi.MwQueryResponse;
import org.wikipedia.wikidata.Entities;
import retrofit2.Call;
import retrofit2.http.GET;
@@ -35,4 +37,13 @@ public interface MediaDetailInterface {
*/
@GET("/w/api.php?action=wbgetentities&props=labels&format=json&languagefallback=1&sites=commonswiki")
Observable getEntityForImage(@Query("languages") String language, @Query("ids") String wikibaseIdentifier);
+
+ @GET(
+ Service.MW_API_PREFIX +
+ "action=query&prop=revisions&rvprop=content|timestamp&rvlimit=1&converttitles="
+ )
+ Single getWikiText(
+ @Query("titles") String title
+ );
+
}
diff --git a/app/src/main/res/layout/activity_description_edit.xml b/app/src/main/res/layout/activity_description_edit.xml
new file mode 100644
index 0000000000..a5de7e070e
--- /dev/null
+++ b/app/src/main/res/layout/activity_description_edit.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml
index 7e01725b29..d05371ced2 100644
--- a/app/src/main/res/layout/fragment_media_detail.xml
+++ b/app/src/main/res/layout/fragment_media_detail.xml
@@ -205,26 +205,33 @@
android:textIsSelectable="true"
tools:text="Description of the media goes here. This can potentially be fairly long, and will need to wrap across multiple lines. We hope it looks nice though." />
+
+
+
+
+
+
-
-
Next
Previous
Submit
- A file with the file name %1$s exists. Are you sure you want to proceed?\n\nNote: A suitable suffix will be added to the file name automatically.
+ A file with the file name %1$s exists. Are you sure you want to proceed?\n\nNote: A suitable suffix will be added to the file name automatically.
No compatible map application could be found on your device. Please install a map application to use this feature.
Pictures
Locations
From 8937945c556b36ad237a8116563d5f3b61029d93 Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 13 Oct 2021 11:53:35 +0530
Subject: [PATCH 03/23] Description editable
---
.../description/DescriptionAndCaption.kt | 8 +
.../description/DescriptionEditActivity.java | 147 +++++++++++++++++-
.../description/DescriptionEditHelper.java | 146 ++---------------
.../commons/media/MediaDetailFragment.java | 133 +++++++++++++++-
.../notification/NotificationHelper.java | 1 +
.../nrw/commons/upload/UploadMediaDetail.kt | 5 +-
.../upload/UploadMediaDetailAdapter.java | 44 ++++--
.../UploadMediaDetailFragment.java | 7 +
.../res/layout/activity_description_edit.xml | 33 ++++
.../main/res/layout/fragment_media_detail.xml | 13 +-
app/src/main/res/values/strings.xml | 4 +
11 files changed, 393 insertions(+), 148 deletions(-)
create mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
new file mode 100644
index 0000000000..af6d1bf07c
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
@@ -0,0 +1,8 @@
+package fr.free.nrw.commons.description
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class DescriptionAndCaption(
+ val language: String, val description: String, val caption: String) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 4c07ecd8e0..9a1003aac8 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -1,14 +1,159 @@
package fr.free.nrw.commons.description;
+import android.content.Intent;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
+import androidx.appcompat.widget.AppCompatButton;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import butterknife.OnClick;
+import fr.free.nrw.commons.LocationPicker.LocationPickerConstants;
import fr.free.nrw.commons.R;
+import fr.free.nrw.commons.kvstore.JsonKvStore;
+import fr.free.nrw.commons.settings.Prefs;
+import fr.free.nrw.commons.upload.UploadMediaDetail;
+import fr.free.nrw.commons.upload.UploadMediaDetailAdapter;
+import fr.free.nrw.commons.utils.DialogUtil;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import javax.inject.Inject;
+import javax.inject.Named;
-public class DescriptionEditActivity extends AppCompatActivity {
+public class DescriptionEditActivity extends AppCompatActivity implements
+ UploadMediaDetailAdapter.EventListener {
+
+ private UploadMediaDetailAdapter uploadMediaDetailAdapter;
+
+ @Inject
+ @Named("default_preferences")
+ JsonKvStore defaultKvStore;
+
+ @BindView(R.id.rv_descriptions_captions)
+ RecyclerView rvDescriptions;
+
+ @BindView(R.id.btn_edit_submit)
+ AppCompatButton btnSubmit;
+
+ String wikiText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description_edit);
+
+ ButterKnife.bind(this, this);
+ Bundle bundle = getIntent().getExtras();
+ ArrayList descriptionAndCaptions = bundle.getParcelableArrayList("mylist");
+ wikiText = bundle.getString("wikiText");
+
+ for (UploadMediaDetail d :
+ descriptionAndCaptions) {
+ Log.d("DescriptionAndCaption", "des1 "+d.getDescriptionText()+" cap1 "
+ +d.getCaptionText()+" lan1 "+d.getLanguageCode());
+ }
+
+ initRecyclerView(descriptionAndCaptions);
+ }
+
+ private void initRecyclerView(ArrayList descriptionAndCaptions) {
+ uploadMediaDetailAdapter = new UploadMediaDetailAdapter("en",descriptionAndCaptions);
+ uploadMediaDetailAdapter.setCallback(this::showInfoAlert);
+ uploadMediaDetailAdapter.setEventListener(this);
+ rvDescriptions.setLayoutManager(new LinearLayoutManager(this));
+ rvDescriptions.setAdapter(uploadMediaDetailAdapter);
+ }
+
+ /**
+ * show dialog with info
+ * @param titleStringID
+ * @param messageStringId
+ */
+ private void showInfoAlert(int titleStringID, int messageStringId) {
+ DialogUtil.showAlertDialog(this, getString(titleStringID), getString(messageStringId), getString(android.R.string.ok), null, true);
+ }
+
+ @Override
+ public void onPrimaryCaptionTextChange(boolean isNotEmpty) {
+
+ }
+
+ @OnClick(R.id.btn_add_description)
+ public void onButtonAddDescriptionClicked() {
+ UploadMediaDetail uploadMediaDetail = new UploadMediaDetail();
+ uploadMediaDetail.setManuallyAdded(true);//This was manually added by the user
+ uploadMediaDetailAdapter.addDescription(uploadMediaDetail);
+ rvDescriptions.smoothScrollToPosition(uploadMediaDetailAdapter.getItemCount()-1);
+ }
+
+
+ @OnClick(R.id.btn_edit_submit)
+ public void onSubmitButtonClicked(){
+ List uploadMediaDetails = uploadMediaDetailAdapter.getItems();
+
+ Log.d("DescriptionAndCaption", "clicked");
+ for (UploadMediaDetail d :
+ uploadMediaDetails) {
+ Log.d("DescriptionAndCaption", "des2 "+d.getDescriptionText()+" cap2 "
+ +d.getCaptionText()+" lan2 "+d.getLanguageCode());
+ }
+
+ updateDescription(uploadMediaDetails);
+
+ finish();
+ }
+
+ private void updateDescription(List uploadMediaDetails) {
+ int descriptionIndex = wikiText.indexOf("description=");
+ if(descriptionIndex == -1){
+ descriptionIndex = wikiText.indexOf("Description=");
+ }
+ Log.d("DescriptionAndCaption", "descriptionIndex"+descriptionIndex);
+
+ final StringBuilder buffer = new StringBuilder();
+
+ if( descriptionIndex == -1 ){
+
+ } else {
+
+ String descriptionStart = wikiText.substring(0, descriptionIndex + 12);
+ Log.d("DescriptionAndCaption", "descriptionStart"+descriptionStart);
+ String descriptionToEnd = wikiText.substring(descriptionIndex+12);
+ int descriptionEndIndex = descriptionToEnd.indexOf("\n");
+ String descriptionEnd = wikiText.substring(descriptionStart.length()+descriptionEndIndex);
+ Log.d("DescriptionAndCaption", "descriptionEnd"+descriptionEnd);
+
+ buffer.append(descriptionStart);
+ for (int i=0; i
- */
- public Single makeDescriptionEdit(final Context context, final Media media,
- final String Latitude, final String Longitude, final String Accuracy) {
- viewUtil.showShortToast(context,
- context.getString(R.string.coordinates_edit_helper_make_edit_toast));
- return addDescription(media, Latitude, Longitude, Accuracy)
- .flatMapSingle(result -> Single.just(showDescriptionEditNotification(context, media,
- Latitude, Longitude, Accuracy, result)))
- .firstOrError();
- }
-
- /**
- * Replaces new coordinates
- * @param media to be added
- * @param Latitude to be added
- * @param Longitude to be added
- * @param Accuracy to be added
+ * @param appendText to be added
* @return Observable
*/
- private Observable addDescription(final Media media, final String Latitude,
- final String Longitude, final String Accuracy) {
- Timber.d("thread is coordinates adding %s", Thread.currentThread().getName());
- final String summary = "Adding Coordinates";
-
- final StringBuilder buffer = new StringBuilder();
+ public Observable addDescription(final Media media, final String appendText) {
+ Timber.d("thread is description adding %s", Thread.currentThread().getName());
+ final String summary = "Updating Description";
- final String wikiText = pageEditClient.getCurrentWikiText(media.getFilename())
- .subscribeOn(Schedulers.io())
- .blockingGet();
-
- if (Latitude != null) {
- buffer.append("\n{{Location|").append(Latitude).append("|").append(Longitude)
- .append("|").append(Accuracy).append("}}");
- }
-
- final String editedLocation = buffer.toString();
- final String appendText = getFormattedWikiText(wikiText, editedLocation);
-
- return pageEditClient.edit(Objects.requireNonNull(media.getFilename())
- , appendText, summary);
- }
-
- /**
- * Helps to get formatted wikitext with upgraded location
- * @param wikiText current wikitext
- * @param editedLocation new location
- * @return String
- */
- private String getFormattedWikiText(final String wikiText, final String editedLocation){
-
- if (wikiText.contains("filedesc") && wikiText.contains("Location")) {
-
- final String fromLocationToEnd = wikiText.substring(wikiText.indexOf("{{Location"));
- final String firstHalf = wikiText.substring(0, wikiText.indexOf("{{Location"));
- final String lastHalf = fromLocationToEnd.substring(
- fromLocationToEnd.indexOf("}}") + 2);
-
- final int startOfSecondSection = StringUtils.ordinalIndexOf(wikiText,
- "==", 3);
- final StringBuilder buffer = new StringBuilder();
- if (wikiText.charAt(wikiText.indexOf("{{Location")-1) == '\n') {
- buffer.append(editedLocation.substring(1));
- } else {
- buffer.append(editedLocation);
- }
- if (startOfSecondSection != -1 && wikiText.charAt(startOfSecondSection-1)!= '\n') {
- buffer.append("\n");
- }
-
- return firstHalf + buffer + lastHalf;
-
- }
- if (wikiText.contains("filedesc") && !wikiText.contains("Location")) {
-
- final int startOfSecondSection = StringUtils.ordinalIndexOf(wikiText,
- "==", 3);
-
- if (startOfSecondSection != -1) {
- final String firstHalf = wikiText.substring(0, startOfSecondSection);
- final String lastHalf = wikiText.substring(startOfSecondSection);
- final String buffer = editedLocation.substring(1)
- + "\n";
- return firstHalf + buffer + lastHalf;
- }
-
- return wikiText + editedLocation;
- }
- if (!wikiText.contains("filedesc") && !wikiText.contains("Location")) {
-
- return "== {{int:filedesc}} ==" + editedLocation + wikiText;
-
- }
- if (!wikiText.contains("filedesc") && wikiText.contains("Location")) {
-
- return "== {{int:filedesc}} ==" + editedLocation + wikiText;
-
- }
- return null;
+ return pageEditClient.edit(Objects.requireNonNull(media.getFilename()),
+ appendText, summary);
}
/**
- * Update coordinates and shows notification about coordinates update
+ * Update descriptions and shows notification about descriptions update
* @param context to be added
* @param media to be added
- * @param latitude to be added
- * @param longitude to be added
- * @param Accuracy to be added
* @param result to be added
* @return boolean
*/
private boolean showDescriptionEditNotification(final Context context, final Media media,
- final String latitude, final String longitude, final String Accuracy,
final boolean result) {
final String message;
- String title = context.getString(R.string.coordinates_edit_helper_show_edit_title);
+ String title = context.getString(R.string.description_edit_helper_show_edit_title);
if (result) {
- media.setCoordinates(
- new fr.free.nrw.commons.location.LatLng(Double.parseDouble(latitude),
- Double.parseDouble(longitude),
- Float.parseFloat(Accuracy)));
title += ": " + context
.getString(R.string.coordinates_edit_helper_show_edit_title_success);
- final StringBuilder coordinatesInMessage = new StringBuilder();
- final String mediaCoordinate = String.valueOf(media.getCoordinates());
- coordinatesInMessage.append(mediaCoordinate);
- message = context.getString(R.string.coordinates_edit_helper_show_edit_message,
- coordinatesInMessage.toString());
+ message = context.getString(R.string.description_edit_helper_show_edit_message);
} else {
- title += ": " + context.getString(R.string.coordinates_edit_helper_show_edit_title);
- message = context.getString(R.string.coordinates_edit_helper_edit_message_else) ;
+ title += ": " + context.getString(R.string.description_edit_helper_show_edit_title);
+ message = context.getString(R.string.description_edit_helper_edit_message_else) ;
}
final String urlForFile = BuildConfig.COMMONS_URL + "/wiki/" + media.getFilename();
final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlForFile));
- notificationHelper.showNotification(context, title, message, NOTIFICATION_EDIT_COORDINATES,
+ notificationHelper.showNotification(context, title, message, NOTIFICATION_EDIT_DESCRIPTION,
browserIntent);
return result;
}
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 2b23c7d6ca..ba0aafdfb6 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
@@ -57,6 +57,7 @@
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.geometry.LatLng;
import fr.free.nrw.commons.LocationPicker.LocationPicker;
+import fr.free.nrw.commons.LocationPicker.LocationPickerConstants;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.MediaDataExtractor;
import fr.free.nrw.commons.R;
@@ -72,11 +73,15 @@
import fr.free.nrw.commons.coordinates.CoordinateEditHelper;
import fr.free.nrw.commons.delete.DeleteHelper;
import fr.free.nrw.commons.delete.ReasonBuilder;
+import fr.free.nrw.commons.description.DescriptionAndCaption;
+import fr.free.nrw.commons.description.DescriptionEditActivity;
+import fr.free.nrw.commons.description.DescriptionEditHelper;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.nearby.Label;
import fr.free.nrw.commons.ui.widget.HtmlTextView;
+import fr.free.nrw.commons.upload.UploadMediaDetail;
import fr.free.nrw.commons.utils.ViewUtilWrapper;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -84,6 +89,7 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -100,6 +106,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
CategoryEditHelper.Callback {
private static final int REQUEST_CODE = 1001 ;
+ private static final int REQUEST_CODE_EDIT_DESCRIPTION = 1002 ;
private boolean editable;
private boolean isCategoryImage;
private MediaDetailPagerFragment.MediaDetailProvider detailProvider;
@@ -139,6 +146,8 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
@Inject
CoordinateEditHelper coordinateEditHelper;
@Inject
+ DescriptionEditHelper descriptionEditHelper;
+ @Inject
ViewUtilWrapper viewUtil;
@Inject
CategoryClient categoryClient;
@@ -226,6 +235,10 @@ public static MediaDetailFragment forMedia(int index, boolean editable, boolean
String descriptionHtmlCode;
@BindView(R.id.progressBarDeletion)
ProgressBar progressBarDeletion;
+ @BindView(R.id.progressBarEdit)
+ ProgressBar progressBarEditDescription;
+ @BindView(R.id.description_edit)
+ Button editDescription;
private ArrayList categoryNames = new ArrayList<>();
private String categorySearchQuery;
@@ -354,6 +367,8 @@ public void launchZoomActivity(View view) {
@OnClick(R.id.description_edit)
public void editDescriptionAndCaption(View view) {
Log.d("hoho", "language+ languageCaption");
+ progressBarEditDescription.setVisibility(VISIBLE);
+ editDescription.setVisibility(GONE);
getDescriptionList();
}
@@ -366,14 +381,91 @@ private void getDescriptionList() {
}
private void extractCaptionDescription(String s) {
- final HashMap descriptions = getDescriptions(s);
+ final LinkedHashMap descriptions = getDescriptions(s);
final HashMap captions = getCaptionsList();
+ ArrayList descriptionAndCaptions = new ArrayList<>();
+// for (final Map.Entry mapElement: captions.entrySet()){
+//
+// String language = (String) mapElement.getKey();
+// Log.d("DescriptionAndCaption", "language "+language);
+//// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+// Log.d("DescriptionAndCaption", "cap "+captions.get(language));
+// Log.d("DescriptionAndCaption", "capMap "+mapElement.getValue());
+// }
+// for (final Map.Entry mapElement: descriptions.entrySet()){
+//
+// String language = (String) mapElement.getKey();
+// Log.d("DescriptionAndCaption", "language "+language);
+// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+//// Log.d("DescriptionAndCaption", "cap "+captions.get(language));
+// Log.d("DescriptionAndCaption", "desMap "+mapElement.getValue());
+// }
+ if(captions.size() >= descriptions.size()) {
+ Log.d("DescriptionAndCaption", "size " + captions.size());
+ for (final Map.Entry mapElement : captions.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("DescriptionAndCaption", "language " + language);
+// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+ Log.d("DescriptionAndCaption", "cap " + captions.get(language));
+ Log.d("DescriptionAndCaption", "capMap " + mapElement.getValue());
+ if (descriptions.containsKey(language)) {
+ Log.d("DescriptionAndCaption", "des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, descriptions.get(language),
+ (String) mapElement.getValue())
+ );
+ } else {
+ Log.d("DescriptionAndCaption", "no des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, "",
+ (String) mapElement.getValue())
+ );
+ }
+ }
+ } else {
+ Log.d("CaptionDescriptionAnd", "size " + captions.size());
+ for (final Map.Entry mapElement : descriptions.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("CaptionDescriptionAnd", "language " + language);
+// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+ Log.d("CaptionDescriptionAnd", "cap " + captions.get(language));
+ Log.d("CaptionDescriptionAnd", "capMap " + mapElement.getValue());
+ if (captions.containsKey(language)) {
+ Log.d("CaptionDescriptionAnd", "des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, (String) mapElement.getValue(),
+ captions.get(language))
+ );
+ } else {
+ Log.d("CaptionDescriptionAnd", "no des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, (String) mapElement.getValue(),
+ "")
+ );
+ }
+ }
+ }
+
+ for (UploadMediaDetail d :
+ descriptionAndCaptions) {
+ Log.d("CaptionDescriptionAnd", "des "+d.getDescriptionText()+" cap "
+ +d.getCaptionText()+" lan "+d.getLanguageCode());
+ }
+ Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putParcelableArrayList("mylist", descriptionAndCaptions);
+ Log.d("wikiText", s);
+ bundle.putString("wikiText", s);
+ intent.putExtras(bundle);
+ startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
}
- private HashMap getDescriptions(String s) {
+ private LinkedHashMap getDescriptions(String s) {
Log.d("WikiText","yyyyyy"+ s);
int descriptionIndex = s.indexOf("description=");
if(descriptionIndex == -1){
@@ -382,7 +474,7 @@ private HashMap getDescriptions(String s) {
Log.d("WikiText", "descriptionIndex"+descriptionIndex);
if( descriptionIndex == -1 ){
- return new HashMap();
+ return new LinkedHashMap();
} else {
String descriptionToEnd = s.substring(descriptionIndex+12);
int descriptionEndIndex = descriptionToEnd.indexOf("\n");
@@ -391,7 +483,7 @@ private HashMap getDescriptions(String s) {
String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
Log.d("WikiText",description);
String[] arr = description.trim().split(",");
- HashMap descriptionList = new HashMap<>();
+ LinkedHashMap descriptionList = new LinkedHashMap<>();
for (String string :
arr) {
int startCode = string.indexOf("{{");
@@ -405,6 +497,13 @@ private HashMap getDescriptions(String s) {
descriptionList.put(languageCode, languageDescription);
}
+ for (final Map.Entry mapElement : descriptionList.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("WikiText", "language " + language);
+ Log.d("WikiText", "capMap " + mapElement.getValue());
+
+ }
return descriptionList;
}
}
@@ -921,6 +1020,10 @@ public void onActivityResult(final int requestCode, final int resultCode,
assert data != null;
final CameraPosition cameraPosition = LocationPicker.getCameraPosition(data);
+ Log.d("testing","nullii ");
+ Log.d("testing","nullii "+cameraPosition);
+
+
if (cameraPosition != null) {
final String latitude = String.valueOf(cameraPosition.target.getLatitude());
@@ -940,10 +1043,30 @@ public void onActivityResult(final int requestCode, final int resultCode,
updateCoordinates(latitude, longitude, accuracy);
}
}
- } else if (resultCode == RESULT_CANCELED) {
+ } else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_OK) {
+ String updatedWikiText = data.getStringExtra("updatedWikiText");
+ Log.d("EditDes", "Updated "+updatedWikiText);
+ compositeDisposable.add(descriptionEditHelper.addDescription(media,
+ updatedWikiText)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(s -> {
+ Timber.d("Descriptions are added.");
+ }));
+ progressBarEditDescription.setVisibility(GONE);
+ editDescription.setVisibility(VISIBLE);
+
+ } else if (requestCode == REQUEST_CODE && resultCode == RESULT_CANCELED) {
viewUtil.showShortToast(getContext(),
Objects.requireNonNull(getContext())
.getString(R.string.coordinates_picking_unsuccessful));
+ } else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_CANCELED) {
+ progressBarEditDescription.setVisibility(GONE);
+ editDescription.setVisibility(VISIBLE);
+
+ viewUtil.showShortToast(getContext(),
+ Objects.requireNonNull(getContext())
+ .getString(R.string.descriptions_picking_unsuccessful));
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationHelper.java b/app/src/main/java/fr/free/nrw/commons/notification/NotificationHelper.java
index a23f350bd4..f7e3592a03 100644
--- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationHelper.java
+++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationHelper.java
@@ -26,6 +26,7 @@ public class NotificationHelper {
public static final int NOTIFICATION_DELETE = 1;
public static final int NOTIFICATION_EDIT_CATEGORY = 2;
public static final int NOTIFICATION_EDIT_COORDINATES = 3;
+ public static final int NOTIFICATION_EDIT_DESCRIPTION = 4;
private NotificationManager notificationManager;
private NotificationCompat.Builder notificationBuilder;
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetail.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetail.kt
index 160f135eaa..9ca587800a 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetail.kt
+++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetail.kt
@@ -1,10 +1,13 @@
package fr.free.nrw.commons.upload
+import android.os.Parcelable
import fr.free.nrw.commons.nearby.Place
+import kotlinx.android.parcel.Parcelize
/**
* Holds a description of an item being uploaded by [UploadActivity]
*/
+@Parcelize
data class UploadMediaDetail constructor(
/**
* @return The language code ie. "en" or "fr"
@@ -15,7 +18,7 @@ data class UploadMediaDetail constructor(
var languageCode: String? = null,
var descriptionText: String = "",
var captionText: String = ""
-) {
+) : Parcelable {
fun javaCopy() = copy()
constructor(place: Place) : this(
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
index cb51ac4ff5..4d7aa54d14 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
@@ -1,6 +1,7 @@
package fr.free.nrw.commons.upload;
import android.text.TextUtils;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -39,6 +40,12 @@ public UploadMediaDetailAdapter(String savedLanguageValue) {
this.savedLanguageValue = savedLanguageValue;
}
+ public UploadMediaDetailAdapter(String savedLanguageValue, List uploadMediaDetails) {
+ this.uploadMediaDetails = uploadMediaDetails;
+ selectedLanguages = new HashMap<>();
+ this.savedLanguageValue = savedLanguageValue;
+ }
+
public void setCallback(Callback callback) {
this.callback = callback;
}
@@ -53,6 +60,10 @@ public void setItems(List uploadMediaDetails) {
notifyDataSetChanged();
}
+ public List getItems(){
+ return uploadMediaDetails;
+ }
+
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@@ -126,6 +137,7 @@ public void bind(int position) {
captionItemEditText.setText(uploadMediaDetail.getCaptionText());
descItemEditText.setText(uploadMediaDetail.getDescriptionText());
+
if (position == 0) {
removeButton.setVisibility(View.GONE);
captionInputLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM);
@@ -178,16 +190,28 @@ private void initLanguageSpinner(int position, UploadMediaDetail description) {
@Override
public void onItemSelected(AdapterView> adapterView, View view, int position,
long l) {
- description.setSelectedLanguageIndex(position);
- String languageCode = ((SpinnerLanguagesAdapter) adapterView.getAdapter())
+ Log.d("Spinner", "default "+description.getLanguageCode());
+// if(description.getLanguageCode() != null){
+// description.setSelectedLanguageIndex(position);
+// String languageCode = description.getLanguageCode();
+// selectedLanguages.remove(adapterView);
+// selectedLanguages.put(adapterView, languageCode);
+// ((SpinnerLanguagesAdapter) adapterView
+// .getAdapter()).setSelectedLangCode(languageCode);
+// spinnerDescriptionLanguages.setSelection(position);
+// Timber.d("Description language code is: " + languageCode);
+// } else {
+ description.setSelectedLanguageIndex(position);
+ String languageCode = ((SpinnerLanguagesAdapter) adapterView.getAdapter())
.getLanguageCode(position);
- description.setLanguageCode(languageCode);
- selectedLanguages.remove(adapterView);
- selectedLanguages.put(adapterView, languageCode);
- ((SpinnerLanguagesAdapter) adapterView
+ description.setLanguageCode(languageCode);
+ selectedLanguages.remove(adapterView);
+ selectedLanguages.put(adapterView, languageCode);
+ ((SpinnerLanguagesAdapter) adapterView
.getAdapter()).setSelectedLangCode(languageCode);
- spinnerDescriptionLanguages.setSelection(position);
- Timber.d("Description language code is: "+languageCode);
+ spinnerDescriptionLanguages.setSelection(position);
+ Timber.d("Description language code is: " + languageCode);
+// }
}
@Override
@@ -197,11 +221,11 @@ public void onNothingSelected(AdapterView> adapterView) {
if (description.getSelectedLanguageIndex() == -1) {
- if (!TextUtils.isEmpty(savedLanguageValue)) {
+ if (!TextUtils.isEmpty(description.getLanguageCode())) {
// If user has chosen a default language from settings activity
// savedLanguageValue is not null
spinnerDescriptionLanguages.setSelection(languagesAdapter
- .getIndexOfLanguageCode(savedLanguageValue));
+ .getIndexOfLanguageCode(description.getLanguageCode()));
} else {
//Checking whether Language Code attribute is null or not.
if (uploadMediaDetails.get(position).getLanguageCode() != null) {
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
index b73553f5e8..004095455b 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
@@ -6,6 +6,7 @@
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -204,6 +205,12 @@ private void showInfoAlert(int titleStringID, int messageStringId) {
@OnClick(R.id.btn_next)
public void onNextButtonClicked() {
+ List a = uploadMediaDetailAdapter.getItems();
+ for (UploadMediaDetail u :
+ a) {
+ Log.d("UploadMediaDetail", "des " + u.getDescriptionText() + " cap "
+ + u.getCaptionText() + " lan " + u.getLanguageCode());
+ }
presenter.verifyImageQuality(callback.getIndexInViewFlipper(this));
}
diff --git a/app/src/main/res/layout/activity_description_edit.xml b/app/src/main/res/layout/activity_description_edit.xml
index a5de7e070e..b945da2f2a 100644
--- a/app/src/main/res/layout/activity_description_edit.xml
+++ b/app/src/main/res/layout/activity_description_edit.xml
@@ -6,4 +6,37 @@
android:layout_height="match_parent"
tools:context=".description.DescriptionEditActivity">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml
index d05371ced2..393981e1c3 100644
--- a/app/src/main/res/layout/fragment_media_detail.xml
+++ b/app/src/main/res/layout/fragment_media_detail.xml
@@ -229,7 +229,18 @@
android:layout_height="24dp"
android:layout_gravity="end"
android:background="@drawable/ic_baseline_edit_24" />
-
+
Trying to update coordinates.
Coordinates update
+ Description update
Success
Coordinates %1$s are added.
+ Descriptions are added.
Could not add coordinates.
+ Could not add descriptions.
Unable to get coordinates.
+ Unable to get descriptions.
Share image via
You haven\'t made any contributions yet
From 82c3c2dc50730ca5f95ad09315f37beb42a01639 Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 13 Oct 2021 19:11:36 +0530
Subject: [PATCH 04/23] No description condition handled
---
.../description/DescriptionEditActivity.java | 64 ++--
.../description/DescriptionEditHelper.java | 12 +-
.../commons/media/MediaDetailFragment.java | 319 ++++++++----------
3 files changed, 172 insertions(+), 223 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 9a1003aac8..8f0fec9e1c 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -1,26 +1,20 @@
package fr.free.nrw.commons.description;
import android.content.Intent;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
+import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
-import fr.free.nrw.commons.LocationPicker.LocationPickerConstants;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.UploadMediaDetail;
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter;
import fr.free.nrw.commons.utils.DialogUtil;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
@@ -43,25 +37,19 @@ public class DescriptionEditActivity extends AppCompatActivity implements
String wikiText;
@Override
- protected void onCreate(Bundle savedInstanceState) {
+ protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description_edit);
ButterKnife.bind(this, this);
- Bundle bundle = getIntent().getExtras();
- ArrayList descriptionAndCaptions = bundle.getParcelableArrayList("mylist");
+ final Bundle bundle = getIntent().getExtras();
+ final ArrayList descriptionAndCaptions = bundle.getParcelableArrayList("mylist");
wikiText = bundle.getString("wikiText");
- for (UploadMediaDetail d :
- descriptionAndCaptions) {
- Log.d("DescriptionAndCaption", "des1 "+d.getDescriptionText()+" cap1 "
- +d.getCaptionText()+" lan1 "+d.getLanguageCode());
- }
-
initRecyclerView(descriptionAndCaptions);
}
- private void initRecyclerView(ArrayList descriptionAndCaptions) {
+ private void initRecyclerView(final ArrayList descriptionAndCaptions) {
uploadMediaDetailAdapter = new UploadMediaDetailAdapter("en",descriptionAndCaptions);
uploadMediaDetailAdapter.setCallback(this::showInfoAlert);
uploadMediaDetailAdapter.setEventListener(this);
@@ -71,21 +59,21 @@ private void initRecyclerView(ArrayList descriptionAndCaption
/**
* show dialog with info
- * @param titleStringID
- * @param messageStringId
+ * @param titleStringID Title ID
+ * @param messageStringId Message ID
*/
- private void showInfoAlert(int titleStringID, int messageStringId) {
+ private void showInfoAlert(final int titleStringID, final int messageStringId) {
DialogUtil.showAlertDialog(this, getString(titleStringID), getString(messageStringId), getString(android.R.string.ok), null, true);
}
@Override
- public void onPrimaryCaptionTextChange(boolean isNotEmpty) {
+ public void onPrimaryCaptionTextChange(final boolean isNotEmpty) {
}
@OnClick(R.id.btn_add_description)
public void onButtonAddDescriptionClicked() {
- UploadMediaDetail uploadMediaDetail = new UploadMediaDetail();
+ final UploadMediaDetail uploadMediaDetail = new UploadMediaDetail();
uploadMediaDetail.setManuallyAdded(true);//This was manually added by the user
uploadMediaDetailAdapter.addDescription(uploadMediaDetail);
rvDescriptions.smoothScrollToPosition(uploadMediaDetailAdapter.getItemCount()-1);
@@ -94,43 +82,30 @@ public void onButtonAddDescriptionClicked() {
@OnClick(R.id.btn_edit_submit)
public void onSubmitButtonClicked(){
- List uploadMediaDetails = uploadMediaDetailAdapter.getItems();
-
- Log.d("DescriptionAndCaption", "clicked");
- for (UploadMediaDetail d :
- uploadMediaDetails) {
- Log.d("DescriptionAndCaption", "des2 "+d.getDescriptionText()+" cap2 "
- +d.getCaptionText()+" lan2 "+d.getLanguageCode());
- }
-
+ final List uploadMediaDetails = uploadMediaDetailAdapter.getItems();
updateDescription(uploadMediaDetails);
-
finish();
}
- private void updateDescription(List uploadMediaDetails) {
+ private void updateDescription(final List uploadMediaDetails) {
int descriptionIndex = wikiText.indexOf("description=");
if(descriptionIndex == -1){
descriptionIndex = wikiText.indexOf("Description=");
}
- Log.d("DescriptionAndCaption", "descriptionIndex"+descriptionIndex);
final StringBuilder buffer = new StringBuilder();
- if( descriptionIndex == -1 ){
-
- } else {
+ if( descriptionIndex != -1 ) {
- String descriptionStart = wikiText.substring(0, descriptionIndex + 12);
- Log.d("DescriptionAndCaption", "descriptionStart"+descriptionStart);
- String descriptionToEnd = wikiText.substring(descriptionIndex+12);
- int descriptionEndIndex = descriptionToEnd.indexOf("\n");
- String descriptionEnd = wikiText.substring(descriptionStart.length()+descriptionEndIndex);
- Log.d("DescriptionAndCaption", "descriptionEnd"+descriptionEnd);
+ final String descriptionStart = wikiText.substring(0, descriptionIndex + 12);
+ final String descriptionToEnd = wikiText.substring(descriptionIndex+12);
+ final int descriptionEndIndex = descriptionToEnd.indexOf("\n");
+ final String descriptionEnd = wikiText.substring(descriptionStart.length()
+ +descriptionEndIndex);
buffer.append(descriptionStart);
for (int i=0; i uploadMediaDetails) {
}
buffer.append(descriptionEnd);
}
- Log.d("EditDes", buffer.toString());
final Intent returningIntent = new Intent();
returningIntent.putExtra("updatedWikiText",
buffer.toString());
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
index cd4cc18ac0..3fbd1c0845 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
@@ -10,7 +10,7 @@
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.actions.PageEditClient;
import fr.free.nrw.commons.notification.NotificationHelper;
-import io.reactivex.Observable;
+import io.reactivex.Single;
import java.util.Objects;
import javax.inject.Inject;
import javax.inject.Named;
@@ -37,16 +37,22 @@ public DescriptionEditHelper(final NotificationHelper notificationHelper,
/**
* Replaces new descriptions
+ *
+ * @param context context
* @param media to be added
* @param appendText to be added
* @return Observable
*/
- public Observable addDescription(final Media media, final String appendText) {
+ public Single addDescription(final Context context, final Media media,
+ final String appendText) {
Timber.d("thread is description adding %s", Thread.currentThread().getName());
final String summary = "Updating Description";
return pageEditClient.edit(Objects.requireNonNull(media.getFilename()),
- appendText, summary);
+ appendText, summary)
+ .flatMapSingle(result -> Single.just(showDescriptionEditNotification(context,
+ media, result)))
+ .firstOrError();
}
/**
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 ba0aafdfb6..ad9ab0b41f 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
@@ -57,7 +57,6 @@
import com.mapbox.mapboxsdk.camera.CameraPosition;
import com.mapbox.mapboxsdk.geometry.LatLng;
import fr.free.nrw.commons.LocationPicker.LocationPicker;
-import fr.free.nrw.commons.LocationPicker.LocationPickerConstants;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.MediaDataExtractor;
import fr.free.nrw.commons.R;
@@ -73,7 +72,6 @@
import fr.free.nrw.commons.coordinates.CoordinateEditHelper;
import fr.free.nrw.commons.delete.DeleteHelper;
import fr.free.nrw.commons.delete.ReasonBuilder;
-import fr.free.nrw.commons.description.DescriptionAndCaption;
import fr.free.nrw.commons.description.DescriptionEditActivity;
import fr.free.nrw.commons.description.DescriptionEditHelper;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
@@ -364,162 +362,6 @@ public void launchZoomActivity(View view) {
}
}
- @OnClick(R.id.description_edit)
- public void editDescriptionAndCaption(View view) {
- Log.d("hoho", "language+ languageCaption");
- progressBarEditDescription.setVisibility(VISIBLE);
- editDescription.setVisibility(GONE);
- getDescriptionList();
-
- }
-
- private void getDescriptionList() {
- compositeDisposable.add(mediaDataExtractor.getCurrentWikiText(media.getFilename())
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::extractCaptionDescription, Timber::e));
- }
-
- private void extractCaptionDescription(String s) {
- final LinkedHashMap descriptions = getDescriptions(s);
- final HashMap captions = getCaptionsList();
-
- ArrayList descriptionAndCaptions = new ArrayList<>();
-// for (final Map.Entry mapElement: captions.entrySet()){
-//
-// String language = (String) mapElement.getKey();
-// Log.d("DescriptionAndCaption", "language "+language);
-//// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
-// Log.d("DescriptionAndCaption", "cap "+captions.get(language));
-// Log.d("DescriptionAndCaption", "capMap "+mapElement.getValue());
-// }
-// for (final Map.Entry mapElement: descriptions.entrySet()){
-//
-// String language = (String) mapElement.getKey();
-// Log.d("DescriptionAndCaption", "language "+language);
-// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
-//// Log.d("DescriptionAndCaption", "cap "+captions.get(language));
-// Log.d("DescriptionAndCaption", "desMap "+mapElement.getValue());
-// }
- if(captions.size() >= descriptions.size()) {
- Log.d("DescriptionAndCaption", "size " + captions.size());
- for (final Map.Entry mapElement : captions.entrySet()) {
-
- String language = (String) mapElement.getKey();
- Log.d("DescriptionAndCaption", "language " + language);
-// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
- Log.d("DescriptionAndCaption", "cap " + captions.get(language));
- Log.d("DescriptionAndCaption", "capMap " + mapElement.getValue());
- if (descriptions.containsKey(language)) {
- Log.d("DescriptionAndCaption", "des ");
- descriptionAndCaptions.add(
- new UploadMediaDetail(language, descriptions.get(language),
- (String) mapElement.getValue())
- );
- } else {
- Log.d("DescriptionAndCaption", "no des ");
- descriptionAndCaptions.add(
- new UploadMediaDetail(language, "",
- (String) mapElement.getValue())
- );
- }
- }
- } else {
- Log.d("CaptionDescriptionAnd", "size " + captions.size());
- for (final Map.Entry mapElement : descriptions.entrySet()) {
-
- String language = (String) mapElement.getKey();
- Log.d("CaptionDescriptionAnd", "language " + language);
-// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
- Log.d("CaptionDescriptionAnd", "cap " + captions.get(language));
- Log.d("CaptionDescriptionAnd", "capMap " + mapElement.getValue());
- if (captions.containsKey(language)) {
- Log.d("CaptionDescriptionAnd", "des ");
- descriptionAndCaptions.add(
- new UploadMediaDetail(language, (String) mapElement.getValue(),
- captions.get(language))
- );
- } else {
- Log.d("CaptionDescriptionAnd", "no des ");
- descriptionAndCaptions.add(
- new UploadMediaDetail(language, (String) mapElement.getValue(),
- "")
- );
- }
- }
- }
-
- for (UploadMediaDetail d :
- descriptionAndCaptions) {
- Log.d("CaptionDescriptionAnd", "des "+d.getDescriptionText()+" cap "
- +d.getCaptionText()+" lan "+d.getLanguageCode());
- }
-
- Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
- Bundle bundle = new Bundle();
- bundle.putParcelableArrayList("mylist", descriptionAndCaptions);
- Log.d("wikiText", s);
- bundle.putString("wikiText", s);
- intent.putExtras(bundle);
- startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
-
- }
-
- private LinkedHashMap getDescriptions(String s) {
- Log.d("WikiText","yyyyyy"+ s);
- int descriptionIndex = s.indexOf("description=");
- if(descriptionIndex == -1){
- descriptionIndex = s.indexOf("Description=");
- }
- Log.d("WikiText", "descriptionIndex"+descriptionIndex);
-
- if( descriptionIndex == -1 ){
- return new LinkedHashMap();
- } else {
- String descriptionToEnd = s.substring(descriptionIndex+12);
- int descriptionEndIndex = descriptionToEnd.indexOf("\n");
- Log.d("WikiText", "descriptionEndIndex"+descriptionEndIndex);
- Log.d("WikiText", "descriptionEndIndex"+descriptionToEnd);
- String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
- Log.d("WikiText",description);
- String[] arr = description.trim().split(",");
- LinkedHashMap descriptionList = new LinkedHashMap<>();
- for (String string :
- arr) {
- int startCode = string.indexOf("{{");
- int endCode = string.indexOf("|");
- String languageCode = string.substring(startCode+2, endCode).trim();
- Log.d("WikiText","languageCode "+languageCode);
- int startDescription = string.indexOf("=");
- int endDescription = string.indexOf("}}");
- String languageDescription = string.substring(startDescription+1, endDescription);
- Log.d("WikiText","languageDescription "+languageDescription);
-
- descriptionList.put(languageCode, languageDescription);
- }
- for (final Map.Entry mapElement : descriptionList.entrySet()) {
-
- String language = (String) mapElement.getKey();
- Log.d("WikiText", "language " + language);
- Log.d("WikiText", "capMap " + mapElement.getValue());
-
- }
- return descriptionList;
- }
- }
-
- private HashMap getCaptionsList() {
- HashMap captionList = new HashMap<>();
- Map captions = media.getCaptions();
- AppLanguageLookUpTable appLanguageLookUpTable = new AppLanguageLookUpTable(getContext());
- for (Map.Entry map : captions.entrySet()) {
- String language = map.getKey();
- String languageCaption = map.getValue();
- captionList.put(language, languageCaption);
- }
- return captionList;
- }
-
@Override
public void onResume() {
super.onResume();
@@ -965,22 +807,6 @@ public void onUpdateCoordinatesClicked(){
goToLocationPickerActivity();
}
- @OnClick(R.id.description_edit)
- public void onUpdateDescriptionClicked(){
- updateDescription();
- }
-
- private void updateDescription() {
-// compositeDisposable.add(coordinateEditHelper.makeCoordinatesEdit(getContext(), media,
-// Latitude, Longitude, Accuracy)
-// .subscribeOn(Schedulers.io())
-// .observeOn(AndroidSchedulers.mainThread())
-// .subscribe(s -> {
-// Timber.d("Coordinates are added.");
-// coordinates.setText(prettyCoordinates(media));
-// }));
- }
-
/**
* Start location picker activity with a request code and get the coordinates from the activity.
*/
@@ -1004,6 +830,149 @@ private void goToLocationPickerActivity() {
.build(getActivity()), REQUEST_CODE);
}
+ @OnClick(R.id.description_edit)
+ public void onClickDescriptionEdit(View view) {
+ Log.d("hoho", "language+ languageCaption");
+ progressBarEditDescription.setVisibility(VISIBLE);
+ editDescription.setVisibility(GONE);
+ getDescriptionList();
+ }
+
+ private void getDescriptionList() {
+ compositeDisposable.add(mediaDataExtractor.getCurrentWikiText(media.getFilename())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(this::extractCaptionDescription, Timber::e));
+ }
+
+ private void extractCaptionDescription(String s) {
+ final LinkedHashMap descriptions = getDescriptions(s);
+ final HashMap captions = getCaptionsList();
+
+ ArrayList descriptionAndCaptions = new ArrayList<>();
+
+ if(captions.size() >= descriptions.size()) {
+ Log.d("DescriptionAndCaption", "size " + captions.size());
+ for (final Map.Entry mapElement : captions.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("DescriptionAndCaption", "language " + language);
+// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+ Log.d("DescriptionAndCaption", "cap " + captions.get(language));
+ Log.d("DescriptionAndCaption", "capMap " + mapElement.getValue());
+ if (descriptions.containsKey(language)) {
+ Log.d("DescriptionAndCaption", "des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, descriptions.get(language),
+ (String) mapElement.getValue())
+ );
+ } else {
+ Log.d("DescriptionAndCaption", "no des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, "",
+ (String) mapElement.getValue())
+ );
+ }
+ }
+ } else {
+ Log.d("CaptionDescriptionAnd", "size " + captions.size());
+ for (final Map.Entry mapElement : descriptions.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("CaptionDescriptionAnd", "language " + language);
+// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
+ Log.d("CaptionDescriptionAnd", "cap " + captions.get(language));
+ Log.d("CaptionDescriptionAnd", "capMap " + mapElement.getValue());
+ if (captions.containsKey(language)) {
+ Log.d("CaptionDescriptionAnd", "des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, (String) mapElement.getValue(),
+ captions.get(language))
+ );
+ } else {
+ Log.d("CaptionDescriptionAnd", "no des ");
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language, (String) mapElement.getValue(),
+ "")
+ );
+ }
+ }
+ }
+
+ for (UploadMediaDetail d :
+ descriptionAndCaptions) {
+ Log.d("CaptionDescriptionAnd", "des "+d.getDescriptionText()+" cap "
+ +d.getCaptionText()+" lan "+d.getLanguageCode());
+ }
+
+ Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
+ Bundle bundle = new Bundle();
+ bundle.putParcelableArrayList("mylist", descriptionAndCaptions);
+ Log.d("wikiText1", "ddd");
+ bundle.putString("wikiText", s);
+ intent.putExtras(bundle);
+ startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
+
+ }
+
+ private LinkedHashMap getDescriptions(String s) {
+ Log.d("WikiText","yyyyyy"+ s);
+ int descriptionIndex = s.indexOf("description=");
+ if(descriptionIndex == -1){
+ descriptionIndex = s.indexOf("Description=");
+ }
+ Log.d("WikiText", "descriptionIndex"+descriptionIndex);
+
+ if( descriptionIndex == -1 ){
+ return new LinkedHashMap();
+ }
+ String descriptionToEnd = s.substring(descriptionIndex+12);
+ int descriptionEndIndex = descriptionToEnd.indexOf("\n");
+ Log.d("WikiText", "descriptionEndIndex"+descriptionEndIndex);
+ Log.d("WikiText", "descriptionEndIndex"+descriptionToEnd);
+ String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
+ Log.d("WikiText",description);
+ String[] arr = description.trim().split(",");
+ LinkedHashMap descriptionList = new LinkedHashMap<>();
+
+ if(!description.equals("")) {
+ for (String string :
+ arr) {
+ int startCode = string.indexOf("{{");
+ int endCode = string.indexOf("|");
+ String languageCode = string.substring(startCode + 2, endCode).trim();
+ Log.d("WikiText", "languageCode " + languageCode);
+ int startDescription = string.indexOf("=");
+ int endDescription = string.indexOf("}}");
+ String languageDescription = string
+ .substring(startDescription + 1, endDescription);
+ Log.d("WikiText", "languageDescription " + languageDescription);
+
+ descriptionList.put(languageCode, languageDescription);
+ }
+ for (final Map.Entry mapElement : descriptionList.entrySet()) {
+
+ String language = (String) mapElement.getKey();
+ Log.d("WikiText", "language " + language);
+ Log.d("WikiText", "capMap " + mapElement.getValue());
+
+ }
+ }
+ return descriptionList;
+ }
+
+ private HashMap getCaptionsList() {
+ HashMap captionList = new HashMap<>();
+ Map captions = media.getCaptions();
+ AppLanguageLookUpTable appLanguageLookUpTable = new AppLanguageLookUpTable(getContext());
+ for (Map.Entry map : captions.entrySet()) {
+ String language = map.getKey();
+ String languageCaption = map.getValue();
+ captionList.put(language, languageCaption);
+ }
+ return captionList;
+ }
+
/**
* Get the coordinates and update the existing coordinates.
* @param requestCode
@@ -1046,7 +1015,7 @@ public void onActivityResult(final int requestCode, final int resultCode,
} else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_OK) {
String updatedWikiText = data.getStringExtra("updatedWikiText");
Log.d("EditDes", "Updated "+updatedWikiText);
- compositeDisposable.add(descriptionEditHelper.addDescription(media,
+ compositeDisposable.add(descriptionEditHelper.addDescription(getContext(), media,
updatedWikiText)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
From db80d7835ef612caab29cb61842e9777dec9a9fc Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 13 Oct 2021 21:26:09 +0530
Subject: [PATCH 05/23] Code cleanup
---
.../description/DescriptionAndCaption.kt | 8 -
.../description/DescriptionEditActivity.java | 33 ++--
.../description/EditDescriptionConstants.kt | 7 +
.../commons/media/MediaDetailFragment.java | 146 ++++++++----------
.../upload/UploadMediaDetailAdapter.java | 48 +++---
5 files changed, 116 insertions(+), 126 deletions(-)
delete mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
create mode 100644 app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
deleted file mode 100644
index af6d1bf07c..0000000000
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionAndCaption.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package fr.free.nrw.commons.description
-
-import android.os.Parcelable
-import kotlinx.android.parcel.Parcelize
-
-@Parcelize
-data class DescriptionAndCaption(
- val language: String, val description: String, val caption: String) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 8f0fec9e1c..b831e9fe8e 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -1,5 +1,9 @@
package fr.free.nrw.commons.description;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT;
+
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
@@ -43,14 +47,20 @@ protected void onCreate(final Bundle savedInstanceState) {
ButterKnife.bind(this, this);
final Bundle bundle = getIntent().getExtras();
- final ArrayList descriptionAndCaptions = bundle.getParcelableArrayList("mylist");
- wikiText = bundle.getString("wikiText");
+ final ArrayList descriptionAndCaptions
+ = bundle.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION);
+ wikiText = bundle.getString(WIKITEXT);
initRecyclerView(descriptionAndCaptions);
}
+ /**
+ * Initializes the RecyclerView
+ * @param descriptionAndCaptions list of description and caption
+ */
private void initRecyclerView(final ArrayList descriptionAndCaptions) {
- uploadMediaDetailAdapter = new UploadMediaDetailAdapter("en",descriptionAndCaptions);
+ uploadMediaDetailAdapter
+ = new UploadMediaDetailAdapter("en",descriptionAndCaptions);
uploadMediaDetailAdapter.setCallback(this::showInfoAlert);
uploadMediaDetailAdapter.setEventListener(this);
rvDescriptions.setLayoutManager(new LinearLayoutManager(this));
@@ -63,7 +73,9 @@ private void initRecyclerView(final ArrayList descriptionAndC
* @param messageStringId Message ID
*/
private void showInfoAlert(final int titleStringID, final int messageStringId) {
- DialogUtil.showAlertDialog(this, getString(titleStringID), getString(messageStringId), getString(android.R.string.ok), null, true);
+ DialogUtil.showAlertDialog(this, getString(titleStringID),
+ getString(messageStringId), getString(android.R.string.ok),
+ null, true);
}
@Override
@@ -87,15 +99,19 @@ public void onSubmitButtonClicked(){
finish();
}
+ /**
+ * Updates newly added descriptions in the wikiText and send to calling fragment
+ * @param uploadMediaDetails descriptions and captions
+ */
private void updateDescription(final List uploadMediaDetails) {
int descriptionIndex = wikiText.indexOf("description=");
- if(descriptionIndex == -1){
+ if (descriptionIndex == -1){
descriptionIndex = wikiText.indexOf("Description=");
}
final StringBuilder buffer = new StringBuilder();
- if( descriptionIndex != -1 ) {
+ if (descriptionIndex != -1) {
final String descriptionStart = wikiText.substring(0, descriptionIndex + 12);
final String descriptionToEnd = wikiText.substring(descriptionIndex+12);
@@ -106,7 +122,7 @@ private void updateDescription(final List uploadMediaDetails)
buffer.append(descriptionStart);
for (int i=0; i uploadMediaDetails)
buffer.append(descriptionEnd);
}
final Intent returningIntent = new Intent();
- returningIntent.putExtra("updatedWikiText",
- buffer.toString());
+ returningIntent.putExtra(UPDATED_WIKITEXT, buffer.toString());
setResult(RESULT_OK, returningIntent);
finish();
}
diff --git a/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt b/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
new file mode 100644
index 0000000000..eaaf72fd18
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
@@ -0,0 +1,7 @@
+package fr.free.nrw.commons.description
+
+object EditDescriptionConstants {
+ const val LIST_OF_DESCRIPTION_AND_CAPTION = "description.descriptionAndCaption"
+ const val WIKITEXT = "description.wikiText"
+ const val UPDATED_WIKITEXT = "description.updatedWikiText";
+}
\ No newline at end of file
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 ad9ab0b41f..455541e334 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
@@ -6,6 +6,9 @@
import static android.view.View.VISIBLE;
import static fr.free.nrw.commons.category.CategoryClientKt.CATEGORY_NEEDING_CATEGORIES;
import static fr.free.nrw.commons.category.CategoryClientKt.CATEGORY_UNCATEGORISED;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT;
+import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
@@ -831,43 +834,46 @@ private void goToLocationPickerActivity() {
}
@OnClick(R.id.description_edit)
- public void onClickDescriptionEdit(View view) {
- Log.d("hoho", "language+ languageCaption");
+ public void onDescriptionEditClicked() {
progressBarEditDescription.setVisibility(VISIBLE);
editDescription.setVisibility(GONE);
getDescriptionList();
}
+ /**
+ * Gets descriptions from wikitext
+ */
private void getDescriptionList() {
- compositeDisposable.add(mediaDataExtractor.getCurrentWikiText(media.getFilename())
+ compositeDisposable.add(mediaDataExtractor.getCurrentWikiText(
+ Objects.requireNonNull(media.getFilename()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::extractCaptionDescription, Timber::e));
}
- private void extractCaptionDescription(String s) {
+ /**
+ * Gets captions and descriptions and merge them according to language code and arranges it in a
+ * single list.
+ * Send the list to DescriptionEditActivity
+ * @param s wikitext
+ */
+ private void extractCaptionDescription(final String s) {
final LinkedHashMap descriptions = getDescriptions(s);
- final HashMap captions = getCaptionsList();
+ final LinkedHashMap captions = getCaptionsList();
- ArrayList descriptionAndCaptions = new ArrayList<>();
+ final ArrayList descriptionAndCaptions = new ArrayList<>();
if(captions.size() >= descriptions.size()) {
- Log.d("DescriptionAndCaption", "size " + captions.size());
for (final Map.Entry mapElement : captions.entrySet()) {
- String language = (String) mapElement.getKey();
- Log.d("DescriptionAndCaption", "language " + language);
-// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
- Log.d("DescriptionAndCaption", "cap " + captions.get(language));
- Log.d("DescriptionAndCaption", "capMap " + mapElement.getValue());
+ final String language = (String) mapElement.getKey();
if (descriptions.containsKey(language)) {
- Log.d("DescriptionAndCaption", "des ");
descriptionAndCaptions.add(
- new UploadMediaDetail(language, descriptions.get(language),
+ new UploadMediaDetail(language,
+ Objects.requireNonNull(descriptions.get(language)),
(String) mapElement.getValue())
);
} else {
- Log.d("DescriptionAndCaption", "no des ");
descriptionAndCaptions.add(
new UploadMediaDetail(language, "",
(String) mapElement.getValue())
@@ -875,22 +881,15 @@ private void extractCaptionDescription(String s) {
}
}
} else {
- Log.d("CaptionDescriptionAnd", "size " + captions.size());
for (final Map.Entry mapElement : descriptions.entrySet()) {
- String language = (String) mapElement.getKey();
- Log.d("CaptionDescriptionAnd", "language " + language);
-// Log.d("DescriptionAndCaption", "des "+descriptions.get(language));
- Log.d("CaptionDescriptionAnd", "cap " + captions.get(language));
- Log.d("CaptionDescriptionAnd", "capMap " + mapElement.getValue());
+ final String language = (String) mapElement.getKey();
if (captions.containsKey(language)) {
- Log.d("CaptionDescriptionAnd", "des ");
descriptionAndCaptions.add(
new UploadMediaDetail(language, (String) mapElement.getValue(),
- captions.get(language))
+ Objects.requireNonNull(captions.get(language)))
);
} else {
- Log.d("CaptionDescriptionAnd", "no des ");
descriptionAndCaptions.add(
new UploadMediaDetail(language, (String) mapElement.getValue(),
"")
@@ -898,83 +897,69 @@ private void extractCaptionDescription(String s) {
}
}
}
-
- for (UploadMediaDetail d :
- descriptionAndCaptions) {
- Log.d("CaptionDescriptionAnd", "des "+d.getDescriptionText()+" cap "
- +d.getCaptionText()+" lan "+d.getLanguageCode());
- }
-
- Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
- Bundle bundle = new Bundle();
- bundle.putParcelableArrayList("mylist", descriptionAndCaptions);
- Log.d("wikiText1", "ddd");
- bundle.putString("wikiText", s);
+ final Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
+ final Bundle bundle = new Bundle();
+ bundle.putParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION, descriptionAndCaptions);
+ bundle.putString(WIKITEXT, s);
intent.putExtras(bundle);
startActivityForResult(intent, REQUEST_CODE_EDIT_DESCRIPTION);
-
}
+ /**
+ * Filters descriptions from current wikiText and arranges it in LinkedHashmap according to the
+ * language code
+ * @param s wikitext
+ * @return LinkedHashMap
+ */
private LinkedHashMap getDescriptions(String s) {
- Log.d("WikiText","yyyyyy"+ s);
int descriptionIndex = s.indexOf("description=");
if(descriptionIndex == -1){
descriptionIndex = s.indexOf("Description=");
}
- Log.d("WikiText", "descriptionIndex"+descriptionIndex);
if( descriptionIndex == -1 ){
- return new LinkedHashMap();
+ return new LinkedHashMap<>();
}
- String descriptionToEnd = s.substring(descriptionIndex+12);
- int descriptionEndIndex = descriptionToEnd.indexOf("\n");
- Log.d("WikiText", "descriptionEndIndex"+descriptionEndIndex);
- Log.d("WikiText", "descriptionEndIndex"+descriptionToEnd);
- String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
- Log.d("WikiText",description);
- String[] arr = description.trim().split(",");
- LinkedHashMap descriptionList = new LinkedHashMap<>();
-
- if(!description.equals("")) {
- for (String string :
+ final String descriptionToEnd = s.substring(descriptionIndex+12);
+ final int descriptionEndIndex = descriptionToEnd.indexOf("\n");
+ final String description = s.substring(descriptionIndex+12, descriptionIndex+12+descriptionEndIndex);
+
+ final String[] arr = description.trim().split(",");
+ final LinkedHashMap descriptionList = new LinkedHashMap<>();
+
+ if (!description.equals("")) {
+ for (final String string :
arr) {
- int startCode = string.indexOf("{{");
- int endCode = string.indexOf("|");
- String languageCode = string.substring(startCode + 2, endCode).trim();
- Log.d("WikiText", "languageCode " + languageCode);
- int startDescription = string.indexOf("=");
- int endDescription = string.indexOf("}}");
- String languageDescription = string
+ final int startCode = string.indexOf("{{");
+ final int endCode = string.indexOf("|");
+ final String languageCode = string.substring(startCode + 2, endCode).trim();
+ final int startDescription = string.indexOf("=");
+ final int endDescription = string.indexOf("}}");
+ final String languageDescription = string
.substring(startDescription + 1, endDescription);
- Log.d("WikiText", "languageDescription " + languageDescription);
-
descriptionList.put(languageCode, languageDescription);
}
- for (final Map.Entry mapElement : descriptionList.entrySet()) {
-
- String language = (String) mapElement.getKey();
- Log.d("WikiText", "language " + language);
- Log.d("WikiText", "capMap " + mapElement.getValue());
-
- }
}
return descriptionList;
}
- private HashMap getCaptionsList() {
- HashMap captionList = new HashMap<>();
- Map captions = media.getCaptions();
- AppLanguageLookUpTable appLanguageLookUpTable = new AppLanguageLookUpTable(getContext());
- for (Map.Entry map : captions.entrySet()) {
- String language = map.getKey();
- String languageCaption = map.getValue();
+ /**
+ * Gets list of caption and arranges it in a LinkedHashmap according to the language code
+ * @return LinkedHashMap
+ */
+ private LinkedHashMap getCaptionsList() {
+ final LinkedHashMap captionList = new LinkedHashMap<>();
+ final Map captions = media.getCaptions();
+ for (final Map.Entry map : captions.entrySet()) {
+ final String language = map.getKey();
+ final String languageCaption = map.getValue();
captionList.put(language, languageCaption);
}
return captionList;
}
/**
- * Get the coordinates and update the existing coordinates.
+ * Get the result from another activity and act accordingly.
* @param requestCode
* @param resultCode
* @param data
@@ -989,10 +974,6 @@ public void onActivityResult(final int requestCode, final int resultCode,
assert data != null;
final CameraPosition cameraPosition = LocationPicker.getCameraPosition(data);
- Log.d("testing","nullii ");
- Log.d("testing","nullii "+cameraPosition);
-
-
if (cameraPosition != null) {
final String latitude = String.valueOf(cameraPosition.target.getLatitude());
@@ -1012,9 +993,9 @@ public void onActivityResult(final int requestCode, final int resultCode,
updateCoordinates(latitude, longitude, accuracy);
}
}
- } else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_OK) {
- String updatedWikiText = data.getStringExtra("updatedWikiText");
- Log.d("EditDes", "Updated "+updatedWikiText);
+
+ } else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_OK) {
+ final String updatedWikiText = data.getStringExtra(UPDATED_WIKITEXT);
compositeDisposable.add(descriptionEditHelper.addDescription(getContext(), media,
updatedWikiText)
.subscribeOn(Schedulers.io())
@@ -1029,6 +1010,7 @@ public void onActivityResult(final int requestCode, final int resultCode,
viewUtil.showShortToast(getContext(),
Objects.requireNonNull(getContext())
.getString(R.string.coordinates_picking_unsuccessful));
+
} else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_CANCELED) {
progressBarEditDescription.setVisibility(GONE);
editDescription.setVisibility(VISIBLE);
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
index 4d7aa54d14..d54dc41bc1 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
@@ -1,7 +1,6 @@
package fr.free.nrw.commons.upload;
import android.text.TextUtils;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,8 +10,6 @@
import android.widget.Spinner;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.widget.AppCompatEditText;
-import androidx.appcompat.widget.AppCompatSpinner;
import androidx.recyclerview.widget.RecyclerView;
import butterknife.BindView;
import butterknife.ButterKnife;
@@ -40,7 +37,8 @@ public UploadMediaDetailAdapter(String savedLanguageValue) {
this.savedLanguageValue = savedLanguageValue;
}
- public UploadMediaDetailAdapter(String savedLanguageValue, List uploadMediaDetails) {
+ public UploadMediaDetailAdapter(final String savedLanguageValue,
+ List uploadMediaDetails) {
this.uploadMediaDetails = uploadMediaDetails;
selectedLanguages = new HashMap<>();
this.savedLanguageValue = savedLanguageValue;
@@ -190,28 +188,16 @@ private void initLanguageSpinner(int position, UploadMediaDetail description) {
@Override
public void onItemSelected(AdapterView> adapterView, View view, int position,
long l) {
- Log.d("Spinner", "default "+description.getLanguageCode());
-// if(description.getLanguageCode() != null){
-// description.setSelectedLanguageIndex(position);
-// String languageCode = description.getLanguageCode();
-// selectedLanguages.remove(adapterView);
-// selectedLanguages.put(adapterView, languageCode);
-// ((SpinnerLanguagesAdapter) adapterView
-// .getAdapter()).setSelectedLangCode(languageCode);
-// spinnerDescriptionLanguages.setSelection(position);
-// Timber.d("Description language code is: " + languageCode);
-// } else {
- description.setSelectedLanguageIndex(position);
- String languageCode = ((SpinnerLanguagesAdapter) adapterView.getAdapter())
- .getLanguageCode(position);
- description.setLanguageCode(languageCode);
- selectedLanguages.remove(adapterView);
- selectedLanguages.put(adapterView, languageCode);
- ((SpinnerLanguagesAdapter) adapterView
- .getAdapter()).setSelectedLangCode(languageCode);
- spinnerDescriptionLanguages.setSelection(position);
- Timber.d("Description language code is: " + languageCode);
-// }
+ description.setSelectedLanguageIndex(position);
+ String languageCode = ((SpinnerLanguagesAdapter) adapterView.getAdapter())
+ .getLanguageCode(position);
+ description.setLanguageCode(languageCode);
+ selectedLanguages.remove(adapterView);
+ selectedLanguages.put(adapterView, languageCode);
+ ((SpinnerLanguagesAdapter) adapterView
+ .getAdapter()).setSelectedLangCode(languageCode);
+ spinnerDescriptionLanguages.setSelection(position);
+ Timber.d("Description language code is: " + languageCode);
}
@Override
@@ -221,9 +207,17 @@ public void onNothingSelected(AdapterView> adapterView) {
if (description.getSelectedLanguageIndex() == -1) {
- if (!TextUtils.isEmpty(description.getLanguageCode())) {
+ if (!TextUtils.isEmpty(savedLanguageValue)) {
// If user has chosen a default language from settings activity
// savedLanguageValue is not null
+ if(!TextUtils.isEmpty(description.getLanguageCode())) {
+ spinnerDescriptionLanguages.setSelection(languagesAdapter
+ .getIndexOfLanguageCode(description.getLanguageCode()));
+ } else {
+ spinnerDescriptionLanguages.setSelection(languagesAdapter
+ .getIndexOfLanguageCode(savedLanguageValue));
+ }
+ } else if (!TextUtils.isEmpty(description.getLanguageCode())) {
spinnerDescriptionLanguages.setSelection(languagesAdapter
.getIndexOfLanguageCode(description.getLanguageCode()));
} else {
From b91f12415971e8703b5850b65b587f74f595545f Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 13 Oct 2021 23:43:30 +0530
Subject: [PATCH 06/23] Added javadocs
---
app/build.gradle | 1 -
.../fr/free/nrw/commons/MediaDataExtractor.kt | 3 +++
.../free/nrw/commons/actions/PageEditClient.kt | 3 ---
.../description/DescriptionEditActivity.java | 18 ++++++++++++++++++
.../description/DescriptionEditHelper.java | 3 +++
.../description/EditDescriptionConstants.kt | 3 +++
.../fr/free/nrw/commons/media/MediaClient.kt | 5 +++++
.../nrw/commons/media/MediaDetailFragment.java | 14 --------------
.../commons/media/MediaDetailInterface.java | 5 +++++
.../upload/UploadMediaDetailAdapter.java | 1 -
.../UploadMediaDetailFragment.java | 7 -------
11 files changed, 37 insertions(+), 26 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index a588407c8b..eb4d11c249 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -46,7 +46,6 @@ dependencies {
implementation 'com.karumi:dexter:5.0.0'
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
- implementation 'androidx.appcompat:appcompat:1.3.1'
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
implementation "com.hannesdorfmann:adapterdelegates4-kotlin-dsl-layoutcontainer:$ADAPTER_DELEGATES_VERSION"
diff --git a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
index 5c902ef7f2..0b42137e73 100644
--- a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
+++ b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.kt
@@ -51,5 +51,8 @@ class MediaDataExtractor @Inject constructor(private val mediaClient: MediaClien
fun getHtmlOfPage(title: String) = mediaClient.getPageHtml(title);
+ /**
+ * Fetches wikitext from mediaClient
+ */
fun getCurrentWikiText(title: String) = mediaClient.getCurrentWikiText(title);
}
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index 0f6c2e433e..a1a0db6e0b 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -1,6 +1,5 @@
package fr.free.nrw.commons.actions
-import android.util.Log
import io.reactivex.Observable
import io.reactivex.Single
import org.wikipedia.csrf.CsrfTokenClient
@@ -26,8 +25,6 @@ class PageEditClient(
*/
fun edit(pageTitle: String, text: String, summary: String): Observable {
return try {
- Log.d("hehe", csrfTokenClient.tokenBlocking)
- Log.d("hehe", text)
pageEditInterface.postEdit(pageTitle, summary, text, csrfTokenClient.tokenBlocking)
.map { editResponse -> editResponse.edit()!!.editSucceeded() }
} catch (throwable: Throwable) {
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index b831e9fe8e..615ffc6cbb 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -23,21 +23,39 @@
import javax.inject.Inject;
import javax.inject.Named;
+/**
+ * Activity for populating and editing existing description and caption
+ */
public class DescriptionEditActivity extends AppCompatActivity implements
UploadMediaDetailAdapter.EventListener {
+ /**
+ * Adapter for showing UploadMediaDetail in the activity
+ */
private UploadMediaDetailAdapter uploadMediaDetailAdapter;
+ /**
+ * For getting default preference
+ */
@Inject
@Named("default_preferences")
JsonKvStore defaultKvStore;
+ /**
+ * Recyclerview for recycling data in views
+ */
@BindView(R.id.rv_descriptions_captions)
RecyclerView rvDescriptions;
+ /**
+ * Submit button for submitting new wikiText
+ */
@BindView(R.id.btn_edit_submit)
AppCompatButton btnSubmit;
+ /**
+ * Current wikitext
+ */
String wikiText;
@Override
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
index 3fbd1c0845..72e713dfa9 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
@@ -16,6 +16,9 @@
import javax.inject.Named;
import timber.log.Timber;
+/**
+ * Helper class for edit and update given descriptions and showing notification upgradation
+ */
public class DescriptionEditHelper {
/**
diff --git a/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt b/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
index eaaf72fd18..7502a10edc 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
+++ b/app/src/main/java/fr/free/nrw/commons/description/EditDescriptionConstants.kt
@@ -1,5 +1,8 @@
package fr.free.nrw.commons.description
+/**
+ * For storing required constants for editing descriptions
+ */
object EditDescriptionConstants {
const val LIST_OF_DESCRIPTION_AND_CAPTION = "description.descriptionAndCaption"
const val WIKITEXT = "description.wikiText"
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
index ee7331abf3..b4ab6ec01b 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.kt
@@ -157,6 +157,11 @@ class MediaClient @Inject constructor(
fun resetUserNameContinuation(userName: String) =
resetUserContinuation("user_", userName)
+ /**
+ * Get whole WikiText of required file
+ * @param title : Name of the file
+ * @return Observable
+ */
fun getCurrentWikiText(title: String): Single {
return mediaDetailInterface.getWikiText(title).map {
it.query()?.pages()?.get(0)?.revisions()?.get(0)?.content()
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 455541e334..0d2ce75dc2 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
@@ -21,7 +21,6 @@
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
-import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -1264,14 +1263,8 @@ private String chooseDescription(Media media) {
return multilingualDesc;
}
for (String description : descriptions.values()) {
- Log.d("hehe", "dxxxx "+ description);
return description;
}
-
- for (String lang : descriptions.keySet()) {
- Log.d("hehe", "lxxxxx "+ lang);
- }
-
return media.getFallbackDescription();
}
@@ -1338,11 +1331,6 @@ private void setUpCaptionAndDescriptionLayout() {
if (descriptionHtmlCode == null) {
progressBar.setVisibility(VISIBLE);
}
-//
-// for (Caption c :
-// captions) {
-//
-// }
getDescription();
CaptionListViewAdapter adapter = new CaptionListViewAdapter(captions);
@@ -1384,10 +1372,8 @@ private void extractDescription(String s) {
int end = s.indexOf("", start);
descriptionHtmlCode = "";
for (int i = start; i < end; i++) {
- Log.d("hehe", "uuuu"+s.toCharArray()[i]);
descriptionHtmlCode = descriptionHtmlCode + s.toCharArray()[i];
}
- Log.d("hehe", s);
descriptionWebView
.loadDataWithBaseURL(null, descriptionHtmlCode, "text/html", "utf-8", null);
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
index 913e68ec06..f595f5a83c 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailInterface.java
@@ -38,6 +38,11 @@ public interface MediaDetailInterface {
@GET("/w/api.php?action=wbgetentities&props=labels&format=json&languagefallback=1&sites=commonswiki")
Observable getEntityForImage(@Query("languages") String language, @Query("ids") String wikibaseIdentifier);
+ /**
+ * Fetches current wikitext
+ * @param title file name
+ * @return Single
+ */
@GET(
Service.MW_API_PREFIX +
"action=query&prop=revisions&rvprop=content|timestamp&rvlimit=1&converttitles="
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
index d54dc41bc1..899bf96121 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java
@@ -135,7 +135,6 @@ public void bind(int position) {
captionItemEditText.setText(uploadMediaDetail.getCaptionText());
descItemEditText.setText(uploadMediaDetail.getDescriptionText());
-
if (position == 0) {
removeButton.setVisibility(View.GONE);
captionInputLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM);
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
index 004095455b..b73553f5e8 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java
@@ -6,7 +6,6 @@
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -205,12 +204,6 @@ private void showInfoAlert(int titleStringID, int messageStringId) {
@OnClick(R.id.btn_next)
public void onNextButtonClicked() {
- List a = uploadMediaDetailAdapter.getItems();
- for (UploadMediaDetail u :
- a) {
- Log.d("UploadMediaDetail", "des " + u.getDescriptionText() + " cap "
- + u.getCaptionText() + " lan " + u.getLanguageCode());
- }
presenter.verifyImageQuality(callback.getIndexInViewFlipper(this));
}
From 34c33c083f65065794a60afa7cf83705b3a30a51 Mon Sep 17 00:00:00 2001
From: ayans
Date: Thu, 14 Oct 2021 00:52:10 +0530
Subject: [PATCH 07/23] toolbar added
---
.../description/DescriptionEditActivity.java | 5 +++
.../res/layout/activity_description_edit.xml | 42 ++++++++++++++++++-
app/src/main/res/values/strings.xml | 1 +
3 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 615ffc6cbb..703edd24c2 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -101,6 +101,11 @@ public void onPrimaryCaptionTextChange(final boolean isNotEmpty) {
}
+ @OnClick(R.id.mapbox_place_picker_toolbar_back_button)
+ public void onBackButtonClicked(){
+ onBackPressed();
+ }
+
@OnClick(R.id.btn_add_description)
public void onButtonAddDescriptionClicked() {
final UploadMediaDetail uploadMediaDetail = new UploadMediaDetail();
diff --git a/app/src/main/res/layout/activity_description_edit.xml b/app/src/main/res/layout/activity_description_edit.xml
index b945da2f2a..6929752533 100644
--- a/app/src/main/res/layout/activity_description_edit.xml
+++ b/app/src/main/res/layout/activity_description_edit.xml
@@ -6,14 +6,52 @@
android:layout_height="match_parent"
tools:context=".description.DescriptionEditActivity">
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/toolbar" />
Could not add descriptions.
Unable to get coordinates.
Unable to get descriptions.
+ Edit descriptions and captions
Share image via
You haven\'t made any contributions yet
From a50483b6b32bfb73bff8a5514cc8f1758f8aca95 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sun, 17 Oct 2021 11:56:12 +0530
Subject: [PATCH 08/23] API call done
---
.../fr/free/nrw/commons/actions/PageEditInterface.kt | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
index 91e8230bfc..037ae1fd44 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
@@ -73,6 +73,17 @@ interface PageEditInterface {
@Field("token") token: String
): Observable
+
+ @FormUrlEncoded
+ @Headers("Cache-Control: no-cache")
+ @POST(Service.MW_API_PREFIX + "action=wbsetlabel&format=json&site=commonswiki&formatversion=2")
+ fun setCaptions(
+ @Field("summary") summary: String,
+ @Field("language") title: String,
+ @Field("value") prependText: String,
+ @Field("token") token: String
+ ): Observable
+
/**
* Get wiki text for provided file names
* @param titles : Name of the file
From 2a553f0d8f1390c078eded8b95bdef9ed45dbfba Mon Sep 17 00:00:00 2001
From: ayans
Date: Tue, 19 Oct 2021 10:00:09 +0530
Subject: [PATCH 09/23] Caption edit available
---
.../nrw/commons/actions/PageEditClient.kt | 11 +++++++
.../nrw/commons/actions/PageEditInterface.kt | 10 +++---
.../description/DescriptionEditActivity.java | 10 ++++++
.../description/DescriptionEditHelper.java | 33 +++++++++++++++++++
.../commons/media/MediaDetailFragment.java | 22 +++++++++++++
app/src/main/res/values/strings.xml | 3 ++
6 files changed, 85 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index a1a0db6e0b..dbc2e397d6 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -3,6 +3,7 @@ package fr.free.nrw.commons.actions
import io.reactivex.Observable
import io.reactivex.Single
import org.wikipedia.csrf.CsrfTokenClient
+import retrofit2.http.Field
/**
* This class acts as a Client to facilitate wiki page editing
@@ -64,6 +65,16 @@ class PageEditClient(
}
}
+ fun setCaptions(summary: String, title: String,
+ language: String, value: String) : Observable{
+ return try {
+ pageEditInterface.postCaptions(summary, title, language, value, csrfTokenClient.tokenBlocking)
+ .map { it.success }
+ } catch (throwable: Throwable) {
+ Observable.just(0)
+ }
+ }
+
/**
* Get whole WikiText of required file
* @param title : Name of the file
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
index 037ae1fd44..99f8b7d477 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt
@@ -5,6 +5,7 @@ import io.reactivex.Single
import org.wikipedia.dataclient.Service
import org.wikipedia.dataclient.mwapi.MwQueryResponse
import org.wikipedia.edit.Edit
+import org.wikipedia.wikidata.Entities
import retrofit2.http.*
/**
@@ -77,12 +78,13 @@ interface PageEditInterface {
@FormUrlEncoded
@Headers("Cache-Control: no-cache")
@POST(Service.MW_API_PREFIX + "action=wbsetlabel&format=json&site=commonswiki&formatversion=2")
- fun setCaptions(
+ fun postCaptions(
@Field("summary") summary: String,
- @Field("language") title: String,
- @Field("value") prependText: String,
+ @Field("title") title: String,
+ @Field("language") language: String,
+ @Field("value") value: String,
@Field("token") token: String
- ): Observable
+ ): Observable
/**
* Get wiki text for provided file names
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 703edd24c2..702bbcf495 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -6,6 +6,8 @@
import android.content.Intent;
import android.os.Bundle;
+import android.os.Parcelable;
+import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -13,6 +15,7 @@
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
+import butterknife.Optional;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.upload.UploadMediaDetail;
@@ -53,6 +56,10 @@ public class DescriptionEditActivity extends AppCompatActivity implements
@BindView(R.id.btn_edit_submit)
AppCompatButton btnSubmit;
+// @BindView(R.id.mapbox_place_picker_toolbar_back_button)
+// ImageView backButton;
+
+
/**
* Current wikitext
*/
@@ -101,6 +108,7 @@ public void onPrimaryCaptionTextChange(final boolean isNotEmpty) {
}
+ @Optional
@OnClick(R.id.mapbox_place_picker_toolbar_back_button)
public void onBackButtonClicked(){
onBackPressed();
@@ -165,6 +173,8 @@ private void updateDescription(final List uploadMediaDetails)
}
final Intent returningIntent = new Intent();
returningIntent.putExtra(UPDATED_WIKITEXT, buffer.toString());
+ returningIntent.putParcelableArrayListExtra(LIST_OF_DESCRIPTION_AND_CAPTION,
+ (ArrayList extends Parcelable>) uploadMediaDetails);
setResult(RESULT_OK, returningIntent);
finish();
}
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
index 72e713dfa9..e6748d49f3 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditHelper.java
@@ -58,6 +58,39 @@ public Single addDescription(final Context context, final Media media,
.firstOrError();
}
+ public Single addCaption(final Context context, final Media media,
+ final String language, final String value) {
+ Timber.d("thread is caption adding %s", Thread.currentThread().getName());
+ final String summary = "Updating Caption";
+
+ return pageEditClient.setCaptions(summary, Objects.requireNonNull(media.getFilename()),
+ language, value)
+ .flatMapSingle(result -> Single.just(showCaptionEditNotification(context,
+ media, result)))
+ .firstOrError();
+ }
+
+ private boolean showCaptionEditNotification(final Context context, final Media media,
+ final int result) {
+ final String message;
+ String title = context.getString(R.string.caption_edit_helper_show_edit_title);
+
+ if (result == 1) {
+ title += ": " + context
+ .getString(R.string.coordinates_edit_helper_show_edit_title_success);
+ message = context.getString(R.string.caption_edit_helper_show_edit_message);
+ } else {
+ title += ": " + context.getString(R.string.caption_edit_helper_show_edit_title);
+ message = context.getString(R.string.caption_edit_helper_edit_message_else) ;
+ }
+
+ final String urlForFile = BuildConfig.COMMONS_URL + "/wiki/" + media.getFilename();
+ final Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlForFile));
+ notificationHelper.showNotification(context, title, message, NOTIFICATION_EDIT_DESCRIPTION,
+ browserIntent);
+ return result == 1;
+ }
+
/**
* Update descriptions and shows notification about descriptions update
* @param context to be added
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 ff9fd09916..3582f382fe 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
@@ -1003,6 +1003,22 @@ public void onActivityResult(final int requestCode, final int resultCode,
.subscribe(s -> {
Timber.d("Descriptions are added.");
}));
+
+ final ArrayList uploadMediaDetails
+ = data.getParcelableArrayListExtra(LIST_OF_DESCRIPTION_AND_CAPTION);
+
+ Map updatedCaptions = new LinkedHashMap<>();
+ for (UploadMediaDetail mediaDetail:
+ uploadMediaDetails) {
+ compositeDisposable.add(descriptionEditHelper.addCaption(getContext(), media,
+ mediaDetail.getLanguageCode(), mediaDetail.getCaptionText())
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(s -> {
+ updateCaptions(mediaDetail, updatedCaptions);
+ Timber.d("Caption is added.");
+ }));
+ }
progressBarEditDescription.setVisibility(GONE);
editDescription.setVisibility(VISIBLE);
@@ -1021,6 +1037,12 @@ public void onActivityResult(final int requestCode, final int resultCode,
}
}
+ private void updateCaptions(UploadMediaDetail mediaDetail,
+ Map updatedCaptions) {
+ updatedCaptions.put(mediaDetail.getLanguageCode(), mediaDetail.getCaptionText());
+ media.setCaptions(updatedCaptions);
+ }
+
@OnClick(R.id.update_categories_button)
public void onUpdateCategoriesClicked() {
updateCategories(categoryEditSearchRecyclerViewAdapter.getNewCategories());
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e2645e1108..6bcd701e6e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -522,11 +522,14 @@ Upload your first media by tapping on the add button.
Trying to update coordinates.
Coordinates update
Description update
+ Caption update
Success
Coordinates %1$s are added.
Descriptions are added.
+ Caption is added.
Could not add coordinates.
Could not add descriptions.
+ Could not add caption.
Unable to get coordinates.
Unable to get descriptions.
Edit descriptions and captions
From 81c76abebcf07fb4aa81fb5b80d1e083d1268d1c Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 20 Oct 2021 11:00:44 +0530
Subject: [PATCH 10/23] Progress dialog added
---
.../description/DescriptionEditActivity.java | 32 +++++++++++--------
.../commons/media/MediaDetailFragment.java | 4 +--
app/src/main/res/values/strings.xml | 2 ++
3 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 702bbcf495..b7e03f0db3 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -4,6 +4,7 @@
import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT;
import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT;
+import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
@@ -64,6 +65,7 @@ public class DescriptionEditActivity extends AppCompatActivity implements
* Current wikitext
*/
String wikiText;
+ ProgressDialog progressDialog;
@Override
protected void onCreate(final Bundle savedInstanceState) {
@@ -125,6 +127,7 @@ public void onButtonAddDescriptionClicked() {
@OnClick(R.id.btn_edit_submit)
public void onSubmitButtonClicked(){
+ showLoggingProgressBar();
final List uploadMediaDetails = uploadMediaDetailAdapter.getItems();
updateDescription(uploadMediaDetails);
finish();
@@ -154,21 +157,15 @@ private void updateDescription(final List uploadMediaDetails)
for (int i=0; i uploadMediaDetails)
setResult(RESULT_OK, returningIntent);
finish();
}
+
+ private void showLoggingProgressBar() {
+ progressDialog = new ProgressDialog(this);
+ progressDialog.setIndeterminate(true);
+ progressDialog.setTitle(getString(R.string.updating_caption_title));
+ progressDialog.setMessage(getString(R.string.updating_caption_message));
+ progressDialog.setCanceledOnTouchOutside(false);
+ progressDialog.show();
+ }
}
\ No newline at end of file
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 3582f382fe..32a0535c98 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
@@ -1007,7 +1007,7 @@ public void onActivityResult(final int requestCode, final int resultCode,
final ArrayList uploadMediaDetails
= data.getParcelableArrayListExtra(LIST_OF_DESCRIPTION_AND_CAPTION);
- Map updatedCaptions = new LinkedHashMap<>();
+ LinkedHashMap updatedCaptions = new LinkedHashMap<>();
for (UploadMediaDetail mediaDetail:
uploadMediaDetails) {
compositeDisposable.add(descriptionEditHelper.addCaption(getContext(), media,
@@ -1038,7 +1038,7 @@ public void onActivityResult(final int requestCode, final int resultCode,
}
private void updateCaptions(UploadMediaDetail mediaDetail,
- Map updatedCaptions) {
+ LinkedHashMap updatedCaptions) {
updatedCaptions.put(mediaDetail.getLanguageCode(), mediaDetail.getCaptionText());
media.setCaptions(updatedCaptions);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6bcd701e6e..127d765696 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -46,6 +46,8 @@
Sign up
Logging in
Please wait…
+ Updating captions and descriptions
+ Please wait…
Login success!
Login failed!
File not found. Please try another file.
From f46d6dea0d597323dd2025f6193e3768625f4b24 Mon Sep 17 00:00:00 2001
From: ayans
Date: Wed, 20 Oct 2021 12:25:29 +0530
Subject: [PATCH 11/23] Log
---
.../free/nrw/commons/description/DescriptionEditActivity.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index b7e03f0db3..c171012db7 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -8,6 +8,7 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
+import android.util.Log;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
@@ -156,6 +157,9 @@ private void updateDescription(final List uploadMediaDetails)
buffer.append(descriptionStart);
for (int i=0; i
Date: Wed, 20 Oct 2021 21:47:29 +0530
Subject: [PATCH 12/23] Problem with ButterKnife
---
.../commons/description/DescriptionEditActivity.java | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index 703edd24c2..fc5012755d 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -6,6 +6,7 @@
import android.content.Intent;
import android.os.Bundle;
+import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -101,10 +102,10 @@ public void onPrimaryCaptionTextChange(final boolean isNotEmpty) {
}
- @OnClick(R.id.mapbox_place_picker_toolbar_back_button)
- public void onBackButtonClicked(){
- onBackPressed();
- }
+// @OnClick(R.id.mapbox_place_picker_toolbar_back_button)
+// public void onBackButtonClicked(){
+// onBackPressed();
+// }
@OnClick(R.id.btn_add_description)
public void onButtonAddDescriptionClicked() {
@@ -145,6 +146,9 @@ private void updateDescription(final List uploadMediaDetails)
buffer.append(descriptionStart);
for (int i=0; i
Date: Thu, 21 Oct 2021 13:28:19 +0530
Subject: [PATCH 13/23] Caption is editable
---
.../description/DescriptionEditActivity.java | 12 +++------
.../description/DescriptionEditHelper.java | 16 +++++++++++
.../commons/media/MediaDetailFragment.java | 27 +++++++++++++++++++
3 files changed, 46 insertions(+), 9 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
index c171012db7..0435c34d08 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
@@ -8,8 +8,6 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
-import android.util.Log;
-import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -58,14 +56,13 @@ public class DescriptionEditActivity extends AppCompatActivity implements
@BindView(R.id.btn_edit_submit)
AppCompatButton btnSubmit;
-// @BindView(R.id.mapbox_place_picker_toolbar_back_button)
-// ImageView backButton;
-
-
/**
* Current wikitext
*/
String wikiText;
+ /**
+ * For showing progress dialog
+ */
ProgressDialog progressDialog;
@Override
@@ -157,9 +154,6 @@ private void updateDescription(final List uploadMediaDetails)
buffer.append(descriptionStart);
for (int i=0; i addDescription(final Context context, final Media media,
.firstOrError();
}
+ /**
+ * Adds new captions
+ *
+ * @param context context
+ * @param media to be added
+ * @param language to be added
+ * @param value to be added
+ * @return Observable
+ */
public Single addCaption(final Context context, final Media media,
final String language, final String value) {
Timber.d("thread is caption adding %s", Thread.currentThread().getName());
@@ -70,6 +79,13 @@ public Single addCaption(final Context context, final Media media,
.firstOrError();
}
+ /**
+ * Update captions and shows notification about captions update
+ * @param context to be added
+ * @param media to be added
+ * @param result to be added
+ * @return boolean
+ */
private boolean showCaptionEditNotification(final Context context, final Media media,
final int result) {
final String message;
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 32a0535c98..2db8132aa1 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
@@ -880,6 +880,17 @@ private void extractCaptionDescription(final String s) {
);
}
}
+ for (final Map.Entry mapElement : descriptions.entrySet()) {
+
+ final String language = (String) mapElement.getKey();
+ if (!captions.containsKey(language)) {
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language,
+ Objects.requireNonNull(descriptions.get(language)),
+ "")
+ );
+ }
+ }
} else {
for (final Map.Entry mapElement : descriptions.entrySet()) {
@@ -896,6 +907,17 @@ private void extractCaptionDescription(final String s) {
);
}
}
+ for (final Map.Entry mapElement : captions.entrySet()) {
+
+ final String language = (String) mapElement.getKey();
+ if (!descriptions.containsKey(language)) {
+ descriptionAndCaptions.add(
+ new UploadMediaDetail(language,
+ "",
+ Objects.requireNonNull(descriptions.get(language)))
+ );
+ }
+ }
}
final Intent intent = new Intent(requireContext(), DescriptionEditActivity.class);
final Bundle bundle = new Bundle();
@@ -1037,6 +1059,11 @@ public void onActivityResult(final int requestCode, final int resultCode,
}
}
+ /**
+ * Adds caption to the map and updates captions
+ * @param mediaDetail UploadMediaDetail
+ * @param updatedCaptions updated captionds
+ */
private void updateCaptions(UploadMediaDetail mediaDetail,
LinkedHashMap updatedCaptions) {
updatedCaptions.put(mediaDetail.getLanguageCode(), mediaDetail.getCaptionText());
From 5d445239cf6aecf5dfa26c25a4f19b582a6de0fb Mon Sep 17 00:00:00 2001
From: ayans
Date: Thu, 21 Oct 2021 13:38:27 +0530
Subject: [PATCH 14/23] Removed unused import
---
app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index dbc2e397d6..997bd7ccd7 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -3,7 +3,6 @@ package fr.free.nrw.commons.actions
import io.reactivex.Observable
import io.reactivex.Single
import org.wikipedia.csrf.CsrfTokenClient
-import retrofit2.http.Field
/**
* This class acts as a Client to facilitate wiki page editing
From 2388dfe8313815c0d356b57714caa22a3ac3c235 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sat, 23 Oct 2021 12:13:50 +0530
Subject: [PATCH 15/23] Manifest file reverted
---
app/src/main/AndroidManifest.xml | 204 ++++++++++++++++---------------
1 file changed, 104 insertions(+), 100 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea6de57384..8bf7b61d49 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ package="fr.free.nrw.commons">
@@ -23,25 +23,29 @@
+ android:name=".CommonsApplication"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/LightAppTheme"
+ android:largeHeap="true"
+ android:supportsRtl="true"
+ tools:replace="android:appComponentFactory"
+ android:appComponentFactory="commons"
+ android:requestLegacyExternalStorage = "true"
+ tools:ignore="GoogleAppIndexingWarning">
+
+
+ android:process=":acra"
+ android:launchMode="singleInstance"
+ android:excludeFromRecents="true"
+ android:finishOnTaskLaunch="true" />
+ android:name=".media.ZoomableActivity" />
@@ -51,19 +55,19 @@
+ android:resource="@xml/shortcuts" />
+ android:hardwareAccelerated="false"
+ android:name=".upload.UploadActivity"
+ android:configChanges="orientation|screenSize|keyboard"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:windowSoftInputMode="adjustResize"
+ >
@@ -82,126 +86,126 @@
+ android:name=".contributions.MainActivity"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:configChanges="screenSize|keyboard|orientation" />
+ android:name=".settings.SettingsActivity"
+ android:label="@string/title_activity_settings" />
+ android:name=".AboutActivity"
+ android:label="@string/title_activity_about"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".auth.SignupActivity"
+ android:configChanges="orientation|screenLayout|screenSize"
+ android:label="@string/title_activity_signup" />
+ android:name=".notification.NotificationActivity"
+ android:label="@string/navigation_item_notification" />
+ android:label="@string/quiz"/>
+ android:label="@string/result"/>
+ android:name=".customselector.ui.selector.CustomSelectorActivity"
+ android:label="@string/title_activity_custom_selector"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".category.CategoryDetailsActivity"
+ android:label="@string/title_activity_featured_images"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".explore.depictions.WikidataItemDetailsActivity"
+ android:label="@string/title_activity_featured_images"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".explore.SearchActivity"
+ android:label="@string/title_activity_search"
+ android:launchMode="singleTop"
+ android:configChanges="orientation|keyboardHidden|screenSize"
+ android:parentActivityName=".contributions.MainActivity"
+ />
+ android:name=".profile.ProfileActivity"
+ android:configChanges="orientation|screenSize|keyboard"
+ android:label="@string/Profile" />
+ android:name=".review.ReviewActivity"
+ android:label="@string/title_activity_review" />
+ android:name=".auth.WikiAccountAuthenticatorService"
+ android:exported="true"
+ android:process=":auth">
+ android:name="android.accounts.AccountAuthenticator"
+ android:resource="@xml/authenticator" />
+ android:name="org.acra.sender.SenderService"
+ android:exported="false"
+ android:process=":acra" />
+ android:name=".filepicker.ExtendedFileProvider"
+ android:authorities="${applicationId}.provider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/provider_paths" />
+ android:name=".category.CategoryContentProvider"
+ android:authorities="${applicationId}.categories.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_categories"
+ android:syncable="false" />
+ android:name=".explore.recentsearches.RecentSearchesContentProvider"
+ android:authorities="${applicationId}.explore.recentsearches.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_searches"
+ android:syncable="false" />
+ android:name=".bookmarks.pictures.BookmarkPicturesContentProvider"
+ android:authorities="${applicationId}.bookmarks.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_bookmarks"
+ android:syncable="false" />
+ android:name=".bookmarks.locations.BookmarkLocationsContentProvider"
+ android:authorities="${applicationId}.bookmarks.locations.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_bookmarks_location"
+ android:syncable="false" />
@@ -209,8 +213,8 @@
+ android:name="android.appwidget.provider"
+ android:resource="@xml/pic_of_day_app_widget_info" />
From 19f28731e8af47a480186d773db7aaf41706cd80 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sat, 23 Oct 2021 12:40:07 +0530
Subject: [PATCH 16/23] Manifest file reverted
---
app/src/main/AndroidManifest.xml | 208 +++++++++++++++----------------
1 file changed, 104 insertions(+), 104 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8bf7b61d49..d3707d69a1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ package="fr.free.nrw.commons">
@@ -23,29 +23,29 @@
+ android:name=".CommonsApplication"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:theme="@style/LightAppTheme"
+ android:largeHeap="true"
+ android:supportsRtl="true"
+ tools:replace="android:appComponentFactory"
+ android:appComponentFactory="commons"
+ android:requestLegacyExternalStorage = "true"
+ tools:ignore="GoogleAppIndexingWarning">
+ android:name=".description.DescriptionEditActivity"
+ android:exported="true" />
+ android:process=":acra"
+ android:launchMode="singleInstance"
+ android:excludeFromRecents="true"
+ android:finishOnTaskLaunch="true" />
+ android:name=".media.ZoomableActivity" />
@@ -55,19 +55,19 @@
+ android:resource="@xml/shortcuts" />
+ android:hardwareAccelerated="false"
+ android:name=".upload.UploadActivity"
+ android:configChanges="orientation|screenSize|keyboard"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:windowSoftInputMode="adjustResize"
+ >
@@ -86,126 +86,126 @@
+ android:name=".contributions.MainActivity"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:configChanges="screenSize|keyboard|orientation" />
+ android:name=".settings.SettingsActivity"
+ android:label="@string/title_activity_settings" />
+ android:name=".AboutActivity"
+ android:label="@string/title_activity_about"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".auth.SignupActivity"
+ android:configChanges="orientation|screenLayout|screenSize"
+ android:label="@string/title_activity_signup" />
+ android:name=".notification.NotificationActivity"
+ android:label="@string/navigation_item_notification" />
+ android:label="@string/quiz"/>
+ android:label="@string/result"/>
+ android:name=".customselector.ui.selector.CustomSelectorActivity"
+ android:label="@string/title_activity_custom_selector"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".category.CategoryDetailsActivity"
+ android:label="@string/title_activity_featured_images"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".explore.depictions.WikidataItemDetailsActivity"
+ android:label="@string/title_activity_featured_images"
+ android:configChanges="screenSize|keyboard|orientation"
+ android:parentActivityName=".contributions.MainActivity" />
+ android:name=".explore.SearchActivity"
+ android:label="@string/title_activity_search"
+ android:launchMode="singleTop"
+ android:configChanges="orientation|keyboardHidden|screenSize"
+ android:parentActivityName=".contributions.MainActivity"
+ />
+ android:name=".profile.ProfileActivity"
+ android:configChanges="orientation|screenSize|keyboard"
+ android:label="@string/Profile" />
+ android:name=".review.ReviewActivity"
+ android:label="@string/title_activity_review" />
+ android:name=".LocationPicker.LocationPickerActivity"
+ android:label="Location Picker" />
+ android:name=".auth.WikiAccountAuthenticatorService"
+ android:exported="true"
+ android:process=":auth">
+ android:name="android.accounts.AccountAuthenticator"
+ android:resource="@xml/authenticator" />
+ android:name="org.acra.sender.SenderService"
+ android:exported="false"
+ android:process=":acra" />
+ android:name=".filepicker.ExtendedFileProvider"
+ android:authorities="${applicationId}.provider"
+ android:exported="false"
+ android:grantUriPermissions="true">
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/provider_paths" />
+ android:name=".category.CategoryContentProvider"
+ android:authorities="${applicationId}.categories.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_categories"
+ android:syncable="false" />
+ android:name=".explore.recentsearches.RecentSearchesContentProvider"
+ android:authorities="${applicationId}.explore.recentsearches.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_searches"
+ android:syncable="false" />
+ android:name=".bookmarks.pictures.BookmarkPicturesContentProvider"
+ android:authorities="${applicationId}.bookmarks.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_bookmarks"
+ android:syncable="false" />
+ android:name=".bookmarks.locations.BookmarkLocationsContentProvider"
+ android:authorities="${applicationId}.bookmarks.locations.contentprovider"
+ android:exported="false"
+ android:label="@string/provider_bookmarks_location"
+ android:syncable="false" />
@@ -213,8 +213,8 @@
+ android:name="android.appwidget.provider"
+ android:resource="@xml/pic_of_day_app_widget_info" />
From ac2197823aeecac877a8a9d717b7db08bf238dc8 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sat, 23 Oct 2021 12:41:38 +0530
Subject: [PATCH 17/23] Manifest file reverted
---
app/src/main/AndroidManifest.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d3707d69a1..fd64338e1d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -149,8 +149,8 @@
android:label="@string/title_activity_review" />
+ android:name=".LocationPicker.LocationPickerActivity"
+ android:label="Location Picker" />
Date: Tue, 26 Oct 2021 11:35:38 +0530
Subject: [PATCH 18/23] View binding added
---
.../description/DescriptionEditActivity.java | 185 ------------------
.../description/DescriptionEditActivity.kt | 181 +++++++++++++++++
2 files changed, 181 insertions(+), 185 deletions(-)
delete mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
create mode 100644 app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
deleted file mode 100644
index 0435c34d08..0000000000
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package fr.free.nrw.commons.description;
-
-import static fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION;
-import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT;
-import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT;
-
-import android.app.ProgressDialog;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.Parcelable;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.appcompat.widget.AppCompatButton;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import butterknife.BindView;
-import butterknife.ButterKnife;
-import butterknife.OnClick;
-import butterknife.Optional;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.upload.UploadMediaDetail;
-import fr.free.nrw.commons.upload.UploadMediaDetailAdapter;
-import fr.free.nrw.commons.utils.DialogUtil;
-import java.util.ArrayList;
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-/**
- * Activity for populating and editing existing description and caption
- */
-public class DescriptionEditActivity extends AppCompatActivity implements
- UploadMediaDetailAdapter.EventListener {
-
- /**
- * Adapter for showing UploadMediaDetail in the activity
- */
- private UploadMediaDetailAdapter uploadMediaDetailAdapter;
-
- /**
- * For getting default preference
- */
- @Inject
- @Named("default_preferences")
- JsonKvStore defaultKvStore;
-
- /**
- * Recyclerview for recycling data in views
- */
- @BindView(R.id.rv_descriptions_captions)
- RecyclerView rvDescriptions;
-
- /**
- * Submit button for submitting new wikiText
- */
- @BindView(R.id.btn_edit_submit)
- AppCompatButton btnSubmit;
-
- /**
- * Current wikitext
- */
- String wikiText;
- /**
- * For showing progress dialog
- */
- ProgressDialog progressDialog;
-
- @Override
- protected void onCreate(final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_description_edit);
-
- ButterKnife.bind(this, this);
- final Bundle bundle = getIntent().getExtras();
- final ArrayList descriptionAndCaptions
- = bundle.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION);
- wikiText = bundle.getString(WIKITEXT);
-
- initRecyclerView(descriptionAndCaptions);
- }
-
- /**
- * Initializes the RecyclerView
- * @param descriptionAndCaptions list of description and caption
- */
- private void initRecyclerView(final ArrayList descriptionAndCaptions) {
- uploadMediaDetailAdapter
- = new UploadMediaDetailAdapter("en",descriptionAndCaptions);
- uploadMediaDetailAdapter.setCallback(this::showInfoAlert);
- uploadMediaDetailAdapter.setEventListener(this);
- rvDescriptions.setLayoutManager(new LinearLayoutManager(this));
- rvDescriptions.setAdapter(uploadMediaDetailAdapter);
- }
-
- /**
- * show dialog with info
- * @param titleStringID Title ID
- * @param messageStringId Message ID
- */
- private void showInfoAlert(final int titleStringID, final int messageStringId) {
- DialogUtil.showAlertDialog(this, getString(titleStringID),
- getString(messageStringId), getString(android.R.string.ok),
- null, true);
- }
-
- @Override
- public void onPrimaryCaptionTextChange(final boolean isNotEmpty) {
-
- }
-
- @Optional
- @OnClick(R.id.mapbox_place_picker_toolbar_back_button)
- public void onBackButtonClicked(){
- onBackPressed();
- }
-
- @OnClick(R.id.btn_add_description)
- public void onButtonAddDescriptionClicked() {
- final UploadMediaDetail uploadMediaDetail = new UploadMediaDetail();
- uploadMediaDetail.setManuallyAdded(true);//This was manually added by the user
- uploadMediaDetailAdapter.addDescription(uploadMediaDetail);
- rvDescriptions.smoothScrollToPosition(uploadMediaDetailAdapter.getItemCount()-1);
- }
-
-
- @OnClick(R.id.btn_edit_submit)
- public void onSubmitButtonClicked(){
- showLoggingProgressBar();
- final List uploadMediaDetails = uploadMediaDetailAdapter.getItems();
- updateDescription(uploadMediaDetails);
- finish();
- }
-
- /**
- * Updates newly added descriptions in the wikiText and send to calling fragment
- * @param uploadMediaDetails descriptions and captions
- */
- private void updateDescription(final List uploadMediaDetails) {
- int descriptionIndex = wikiText.indexOf("description=");
- if (descriptionIndex == -1){
- descriptionIndex = wikiText.indexOf("Description=");
- }
-
- final StringBuilder buffer = new StringBuilder();
-
- if (descriptionIndex != -1) {
-
- final String descriptionStart = wikiText.substring(0, descriptionIndex + 12);
- final String descriptionToEnd = wikiText.substring(descriptionIndex+12);
- final int descriptionEndIndex = descriptionToEnd.indexOf("\n");
- final String descriptionEnd = wikiText.substring(descriptionStart.length()
- +descriptionEndIndex);
-
- buffer.append(descriptionStart);
- for (int i=0; i extends Parcelable>) uploadMediaDetails);
- setResult(RESULT_OK, returningIntent);
- finish();
- }
-
- private void showLoggingProgressBar() {
- progressDialog = new ProgressDialog(this);
- progressDialog.setIndeterminate(true);
- progressDialog.setTitle(getString(R.string.updating_caption_title));
- progressDialog.setMessage(getString(R.string.updating_caption_message));
- progressDialog.setCanceledOnTouchOutside(false);
- progressDialog.show();
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
new file mode 100644
index 0000000000..1389e3c0f0
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
@@ -0,0 +1,181 @@
+package fr.free.nrw.commons.description
+
+import android.app.ProgressDialog
+import android.content.Intent
+import android.os.Bundle
+import android.os.Parcelable
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.databinding.ActivityDescriptionEditBinding
+import fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION
+import fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT
+import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.settings.Prefs
+import fr.free.nrw.commons.upload.UploadMediaDetail
+import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
+import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
+import java.util.*
+import javax.inject.Inject
+import javax.inject.Named
+
+/**
+ * Activity for populating and editing existing description and caption
+ */
+class DescriptionEditActivity : AppCompatActivity(), UploadMediaDetailAdapter.EventListener {
+ /**
+ * Adapter for showing UploadMediaDetail in the activity
+ */
+ private lateinit var uploadMediaDetailAdapter: UploadMediaDetailAdapter
+
+ /**
+ * For getting default preference
+ */
+ @JvmField
+ @Inject
+ @Named("default_preferences")
+ var defaultKvStore: JsonKvStore? = null
+
+ /**
+ * Recyclerview for recycling data in views
+ */
+ @JvmField
+ var rvDescriptions: RecyclerView? = null
+
+ /**
+ * Current wikitext
+ */
+ var wikiText: String? = null
+
+ /**
+ * For showing progress dialog
+ */
+ private var progressDialog: ProgressDialog? = null
+
+ private lateinit var binding: ActivityDescriptionEditBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ binding = ActivityDescriptionEditBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val bundle = intent.extras
+ val descriptionAndCaptions: ArrayList =
+ bundle!!.getParcelableArrayList(LIST_OF_DESCRIPTION_AND_CAPTION)!!
+ wikiText = bundle.getString(WIKITEXT)
+ initRecyclerView(descriptionAndCaptions)
+
+ binding.btnAddDescription.setOnClickListener(::onButtonAddDescriptionClicked)
+ binding.btnEditSubmit.setOnClickListener(::onSubmitButtonClicked)
+ binding.toolbarBackButton.setOnClickListener(::onBackButtonClicked)
+ }
+
+ /**
+ * Initializes the RecyclerView
+ * @param descriptionAndCaptions list of description and caption
+ */
+ private fun initRecyclerView(descriptionAndCaptions: ArrayList?) {
+ uploadMediaDetailAdapter = UploadMediaDetailAdapter(
+ defaultKvStore?.getString(Prefs.DESCRIPTION_LANGUAGE, ""),
+ descriptionAndCaptions)
+ uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int ->
+ showInfoAlert(
+ titleStringID,
+ messageStringId
+ )
+ }
+ uploadMediaDetailAdapter.setEventListener(this)
+ rvDescriptions = binding.rvDescriptionsCaptions
+ rvDescriptions!!.layoutManager = LinearLayoutManager(this)
+ rvDescriptions!!.adapter = uploadMediaDetailAdapter
+ }
+
+ /**
+ * show dialog with info
+ * @param titleStringID Title ID
+ * @param messageStringId Message ID
+ */
+ private fun showInfoAlert(titleStringID: Int, messageStringId: Int) {
+ showAlertDialog(
+ this, getString(titleStringID),
+ getString(messageStringId), getString(android.R.string.ok),
+ null, true
+ )
+ }
+
+ override fun onPrimaryCaptionTextChange(isNotEmpty: Boolean) {}
+
+ private fun onBackButtonClicked(view: View) {
+ onBackPressed()
+ }
+
+ private fun onButtonAddDescriptionClicked(view: View) {
+ val uploadMediaDetail = UploadMediaDetail()
+ uploadMediaDetail.isManuallyAdded = true //This was manually added by the user
+ uploadMediaDetailAdapter.addDescription(uploadMediaDetail)
+ rvDescriptions!!.smoothScrollToPosition(uploadMediaDetailAdapter.itemCount - 1)
+ }
+
+ private fun onSubmitButtonClicked(view: View) {
+ showLoggingProgressBar()
+ val uploadMediaDetails = uploadMediaDetailAdapter.items
+ updateDescription(uploadMediaDetails)
+ finish()
+ }
+
+ /**
+ * Updates newly added descriptions in the wikiText and send to calling fragment
+ * @param uploadMediaDetails descriptions and captions
+ */
+ private fun updateDescription(uploadMediaDetails: List) {
+ var descriptionIndex = wikiText!!.indexOf("description=")
+ if (descriptionIndex == -1) {
+ descriptionIndex = wikiText!!.indexOf("Description=")
+ }
+ val buffer = StringBuilder()
+ if (descriptionIndex != -1) {
+ val descriptionStart = wikiText!!.substring(0, descriptionIndex + 12)
+ val descriptionToEnd = wikiText!!.substring(descriptionIndex + 12)
+ val descriptionEndIndex = descriptionToEnd.indexOf("\n")
+ val descriptionEnd = wikiText!!.substring(
+ descriptionStart.length
+ + descriptionEndIndex
+ )
+ buffer.append(descriptionStart)
+ for (i in uploadMediaDetails.indices) {
+ val uploadDetails = uploadMediaDetails[i]
+ if (uploadDetails!!.descriptionText != "") {
+ buffer.append("{{")
+ buffer.append(uploadDetails.languageCode)
+ buffer.append("|1=")
+ buffer.append(uploadDetails.descriptionText)
+ buffer.append("}}, ")
+ }
+ }
+ buffer.deleteCharAt(buffer.length - 1)
+ buffer.deleteCharAt(buffer.length - 1)
+ buffer.append(descriptionEnd)
+ }
+ val returningIntent = Intent()
+ returningIntent.putExtra(UPDATED_WIKITEXT, buffer.toString())
+ returningIntent.putParcelableArrayListExtra(
+ LIST_OF_DESCRIPTION_AND_CAPTION,
+ uploadMediaDetails as ArrayList
+ )
+ setResult(RESULT_OK, returningIntent)
+ finish()
+ }
+
+ private fun showLoggingProgressBar() {
+ progressDialog = ProgressDialog(this)
+ progressDialog!!.isIndeterminate = true
+ progressDialog!!.setTitle(getString(R.string.updating_caption_title))
+ progressDialog!!.setMessage(getString(R.string.updating_caption_message))
+ progressDialog!!.setCanceledOnTouchOutside(false)
+ progressDialog!!.show()
+ }
+}
\ No newline at end of file
From 074268e00710fc4555d67233b7fc6b6a464293ee Mon Sep 17 00:00:00 2001
From: ayans
Date: Tue, 26 Oct 2021 13:11:14 +0530
Subject: [PATCH 19/23] Post operation test added
---
.../fr/free/nrw/commons/actions/PageEditClientTest.kt | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/actions/PageEditClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/actions/PageEditClientTest.kt
index 5477d95499..994ab5593b 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/actions/PageEditClientTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/actions/PageEditClientTest.kt
@@ -81,4 +81,15 @@ class PageEditClientTest {
pageEditClient.prependEdit("test", "test", "test")
verify(pageEditInterface).postPrependEdit(eq("test"), eq("test"), eq("test"), eq("test"))
}
+
+ /**
+ * Test setCaptions
+ */
+ @Test
+ fun testSetCaptions() {
+ Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
+ pageEditClient.setCaptions("test", "test", "en", "test")
+ verify(pageEditInterface).postCaptions(eq("test"), eq("test"), eq("en"),
+ eq("test"), eq("test"))
+ }
}
\ No newline at end of file
From 6fcf3fda72547bc47d003945174749bde8151bb8 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sat, 30 Oct 2021 10:52:07 +0530
Subject: [PATCH 20/23] Java docs added
---
.../fr/free/nrw/commons/actions/PageEditClient.kt | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index 997bd7ccd7..6b03ab06aa 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -64,10 +64,19 @@ class PageEditClient(
}
}
+ /**
+ * Set new labels to Wikibase server of commons
+ * @param summary Edit summary
+ * @param title Title of the page to edit
+ * @param language Corresponding language of label
+ * @param value label
+ * @return 1 when the edit was successful
+ */
fun setCaptions(summary: String, title: String,
language: String, value: String) : Observable{
return try {
- pageEditInterface.postCaptions(summary, title, language, value, csrfTokenClient.tokenBlocking)
+ pageEditInterface.postCaptions(summary, title, language,
+ value, csrfTokenClient.tokenBlocking)
.map { it.success }
} catch (throwable: Throwable) {
Observable.just(0)
From 4cf1ea43bd627d1366ad0111f8acdcc8fdfab577 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sat, 30 Oct 2021 12:17:26 +0530
Subject: [PATCH 21/23] Java docs added
---
.../main/java/fr/free/nrw/commons/actions/PageEditClient.kt | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
index 6b03ab06aa..cf7b9865c4 100644
--- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
+++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt
@@ -76,8 +76,7 @@ class PageEditClient(
language: String, value: String) : Observable{
return try {
pageEditInterface.postCaptions(summary, title, language,
- value, csrfTokenClient.tokenBlocking)
- .map { it.success }
+ value, csrfTokenClient.tokenBlocking).map { it.success }
} catch (throwable: Throwable) {
Observable.just(0)
}
From 85fb0072dfd9c1fc368286e33e762ddcccc3beb9 Mon Sep 17 00:00:00 2001
From: ayans
Date: Sun, 31 Oct 2021 13:16:26 +0530
Subject: [PATCH 22/23] MediaDetailFragment unit tests added
---
.../media/MediaDetailFragmentUnitTests.kt | 70 +++++++++++++++++++
1 file changed, 70 insertions(+)
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt
index e54762405e..b29d91fd96 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt
@@ -1,6 +1,8 @@
package fr.free.nrw.commons.media
+import android.app.Activity
import android.content.Context
+import android.content.Intent
import android.content.res.Configuration
import android.os.Bundle
import android.view.LayoutInflater
@@ -49,6 +51,9 @@ import kotlin.collections.HashMap
@LooperMode(LooperMode.Mode.PAUSED)
class MediaDetailFragmentUnitTests {
+
+ private val REQUEST_CODE = 1001
+ private val REQUEST_CODE_EDIT_DESCRIPTION = 1002
private lateinit var fragment: MediaDetailFragment
private lateinit var fragmentManager: FragmentManager
private lateinit var layoutInflater: LayoutInflater
@@ -106,6 +111,9 @@ class MediaDetailFragmentUnitTests {
@Mock
private lateinit var searchView: SearchView
+ @Mock
+ private lateinit var intent: Intent
+
@Before
fun setUp() {
@@ -140,6 +148,7 @@ class MediaDetailFragmentUnitTests {
Whitebox.setInternalState(fragment, "media", media)
Whitebox.setInternalState(fragment, "progressBar", progressBar)
+ Whitebox.setInternalState(fragment, "progressBarEditDescription", progressBar)
Whitebox.setInternalState(fragment, "captionsListView", listView)
Whitebox.setInternalState(fragment, "descriptionWebView", webView)
Whitebox.setInternalState(fragment, "detailProvider", detailProvider)
@@ -159,6 +168,7 @@ class MediaDetailFragmentUnitTests {
Whitebox.setInternalState(fragment, "dummyCategoryEditContainer", linearLayout)
Whitebox.setInternalState(fragment, "showCaptionAndDescriptionContainer", linearLayout)
Whitebox.setInternalState(fragment, "updateCategoriesButton", button)
+ Whitebox.setInternalState(fragment, "editDescription", button)
Whitebox.setInternalState(fragment, "categoryContainer", linearLayout)
Whitebox.setInternalState(fragment, "categorySearchView", searchView)
Whitebox.setInternalState(fragment, "mediaDiscussion", textView)
@@ -188,6 +198,24 @@ class MediaDetailFragmentUnitTests {
fragment.onCreateView(layoutInflater, null, savedInstanceState)
}
+ @Test
+ @Throws(Exception::class)
+ fun testOnActivityResultLocationPickerActivity() {
+ fragment.onActivityResult(REQUEST_CODE, Activity.RESULT_CANCELED, intent)
+ }
+
+ @Test
+ @Throws(Exception::class)
+ fun `test OnActivity Result Cancelled LocationPickerActivity`() {
+ fragment.onActivityResult(REQUEST_CODE, Activity.RESULT_CANCELED, intent)
+ }
+
+ @Test
+ @Throws(Exception::class)
+ fun `test OnActivity Result Cancelled DescriptionEditActivity`() {
+ fragment.onActivityResult(REQUEST_CODE, Activity.RESULT_OK, intent)
+ }
+
@Test
@Throws(Exception::class)
fun testOnSaveInstanceState() {
@@ -252,6 +280,17 @@ class MediaDetailFragmentUnitTests {
method.invoke(fragment)
}
+ @Test
+ @Throws(Exception::class)
+ fun testGetDescriptionList() {
+ `when`(media.filename).thenReturn("")
+ val method: Method = MediaDetailFragment::class.java.getDeclaredMethod(
+ "getDescriptionList"
+ )
+ method.isAccessible = true
+ method.invoke(fragment)
+ }
+
@Test
@Throws(Exception::class)
fun testGetCaptions() {
@@ -301,6 +340,15 @@ class MediaDetailFragmentUnitTests {
Assert.assertEquals(fragment.updateCategoryDisplay(listOf()), true)
}
+ @Test
+ @Throws(Exception::class)
+ fun testDescriptionEditClicked() {
+ `when`(progressBar.visibility).thenReturn(View.VISIBLE)
+ `when`(button.visibility).thenReturn(View.GONE)
+ `when`(media.filename).thenReturn("")
+ fragment.onDescriptionEditClicked()
+ }
+
@Test
@Throws(Exception::class)
fun testShowCaptionAndDescriptionCaseVisible() {
@@ -397,6 +445,28 @@ class MediaDetailFragmentUnitTests {
method.invoke(fragment, "mock")
}
+ @Test
+ @Throws(Exception::class)
+ fun testExtractCaptionDescription() {
+ val method: Method = MediaDetailFragment::class.java.getDeclaredMethod(
+ "extractCaptionDescription",
+ String::class.java
+ )
+ method.isAccessible = true
+ method.invoke(fragment, "mock")
+ }
+
+ @Test
+ @Throws(Exception::class)
+ fun testGetDescriptions() {
+ val method: Method = MediaDetailFragment::class.java.getDeclaredMethod(
+ "getDescriptions",
+ String::class.java
+ )
+ method.isAccessible = true
+ method.invoke(fragment, "mock")
+ }
+
@Test
@Throws(Exception::class)
fun testPrettyCaptionCaseEmpty() {
From 2a38826e4d774d1d7da634cbfa6ed226355ef615 Mon Sep 17 00:00:00 2001
From: ayans
Date: Mon, 8 Nov 2021 11:58:11 +0530
Subject: [PATCH 23/23] Test added
---
.../kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt | 8 ++++++++
.../kotlin/fr/free/nrw/commons/media/MediaClientTest.kt | 6 ++++++
2 files changed, 14 insertions(+)
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt
index 281afbe4f9..2045c2731e 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt
@@ -1,5 +1,6 @@
package fr.free.nrw.commons
+import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.media.MediaClient
import io.reactivex.Single
import org.junit.Assert.assertTrue
@@ -11,6 +12,7 @@ import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.MockitoAnnotations
+import org.wikipedia.dataclient.mwapi.MwQueryResponse
/**
* Test methods in media data extractor
@@ -49,4 +51,10 @@ class MediaDataExtractorTest {
//assertTrue(fetchMediaDetails is Media)
}
+
+ @Test
+ fun getWikiText() {
+ `when`(mediaDataExtractor?.getCurrentWikiText(ArgumentMatchers.anyString()))
+ .thenReturn(Single.just("Test"))
+ }
}
\ No newline at end of file
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt
index d6b09a11b4..81ec11806c 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt
@@ -199,6 +199,12 @@ class MediaClientTest {
mediaClient.doesPageContainMedia("").test().assertValue(true)
}
+ @Test
+ fun getWikiText() {
+ val wikiText = mock()
+ whenever(mediaDetailInterface.getWikiText("File:Test.jpg")).thenReturn(Single.just(wikiText))
+ }
+
private fun mockQuery(queryReceiver: MwQueryResult.() -> Unit): MwQueryResponse {
val mwQueryResponse = mock()
val mwQueryResult = mock()