Skip to content

Commit e6eaa6e

Browse files
author
maskara
committed
Fix descriptions for uploads
1 parent 2280995 commit e6eaa6e

File tree

7 files changed

+104
-48
lines changed

7 files changed

+104
-48
lines changed

app/src/main/java/fr/free/nrw/commons/upload/DescriptionsAdapter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ class DescriptionsAdapter extends RecyclerView.Adapter<DescriptionsAdapter.ViewH
4747
DescriptionsAdapter(UploadView uploadView) {
4848
title = new Title();
4949
descriptions = new ArrayList<>();
50-
descriptions.add(new Description());
5150
titleChangedSubject = BehaviorSubject.create();
5251
selectedLanguages = new BiMap<>();
5352
this.uploadView = uploadView;

app/src/main/java/fr/free/nrw/commons/upload/Title.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public String toString() {
1616
}
1717

1818
public void setTitleText(String titleText) {
19-
Timber.i("Setting title text to "+titleText);
2019
this.titleText = titleText;
2120

2221
if (!TextUtils.isEmpty(titleText)) {

app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,16 @@
5454
import fr.free.nrw.commons.contributions.Contribution;
5555
import fr.free.nrw.commons.mwapi.MediaWikiApi;
5656
import fr.free.nrw.commons.utils.DialogUtil;
57-
import fr.free.nrw.commons.utils.ImageUtils;
57+
import fr.free.nrw.commons.utils.StringUtils;
5858
import fr.free.nrw.commons.utils.ViewUtil;
5959
import io.reactivex.Observable;
6060
import io.reactivex.android.schedulers.AndroidSchedulers;
6161
import io.reactivex.disposables.CompositeDisposable;
6262
import io.reactivex.schedulers.Schedulers;
6363
import timber.log.Timber;
6464

65+
import static fr.free.nrw.commons.utils.ImageUtils.Result;
66+
import static fr.free.nrw.commons.utils.ImageUtils.getErrorMessageForResult;
6567
import static fr.free.nrw.commons.wikidata.WikidataConstants.WIKIDATA_ENTITY_ID_PREF;
6668

6769
public class UploadActivity extends AuthenticatedActivity implements UploadView, SimilarImageInterface {
@@ -211,15 +213,20 @@ public void updateRightCardContent(boolean gpsPresent) {
211213
}
212214

213215
@Override
214-
public void updateBottomCardContent(int currentStep, int stepCount, UploadModel.UploadItem uploadItem) {
216+
public void updateBottomCardContent(int currentStep,
217+
int stepCount,
218+
UploadModel.UploadItem uploadItem,
219+
boolean isShowingItem) {
215220
String cardTitle = getResources().getString(R.string.step_count, currentStep, stepCount);
216221
String cardSubTitle = getResources().getString(R.string.image_in_set_label, currentStep);
217222
bottomCardTitle.setText(cardTitle);
218223
bottomCardSubtitle.setText(cardSubTitle);
219224
categoryTitle.setText(cardTitle);
220225
licenseTitle.setText(cardTitle);
221-
descriptionsAdapter.setItems(uploadItem.title, uploadItem.descriptions);
222-
rvDescriptions.setAdapter(descriptionsAdapter);
226+
if(isShowingItem) {
227+
descriptionsAdapter.setItems(uploadItem.title, uploadItem.descriptions);
228+
rvDescriptions.setAdapter(descriptionsAdapter);
229+
}
223230
}
224231

225232
@Override
@@ -339,28 +346,15 @@ public void dismissKeyboard() {
339346
}
340347

341348
@Override
342-
public void showBadPicturePopup(@ImageUtils.Result int result) {
343-
String errorMessage;
344-
if (result == ImageUtils.IMAGE_DARK)
345-
errorMessage = getString(R.string.upload_image_problem_dark);
346-
else if (result == ImageUtils.IMAGE_BLURRY)
347-
errorMessage = getString(R.string.upload_image_problem_blurry);
348-
else if (result == ImageUtils.IMAGE_DUPLICATE)
349-
errorMessage = getString(R.string.upload_image_problem_duplicate);
350-
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_BLURRY))
351-
errorMessage = getString(R.string.upload_image_problem_dark_blurry);
352-
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_DUPLICATE))
353-
errorMessage = getString(R.string.upload_image_problem_dark_duplicate);
354-
else if (result == (ImageUtils.IMAGE_BLURRY|ImageUtils.IMAGE_DUPLICATE))
355-
errorMessage = getString(R.string.upload_image_problem_blurry_duplicate);
356-
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_BLURRY|ImageUtils.IMAGE_DUPLICATE))
357-
errorMessage = getString(R.string.upload_image_problem_dark_blurry_duplicate);
358-
else
349+
public void showBadPicturePopup(@Result int result) {
350+
String errorMessageForResult = getErrorMessageForResult(this, result);
351+
if (StringUtils.isNullOrWhiteSpace(errorMessageForResult)) {
359352
return;
353+
}
360354

361355
DialogUtil.showAlertDialog(this,
362356
getString(R.string.warning),
363-
errorMessage,
357+
errorMessageForResult,
364358
() -> presenter.deletePicture(),
365359
() -> presenter.keepPicture());
366360
}
@@ -373,7 +367,7 @@ public void showDuplicatePicturePopup() {
373367
null,
374368
() -> {
375369
presenter.keepPicture();
376-
presenter.handleNext(categoriesModel, false);
370+
presenter.handleNext(descriptionsAdapter.getTitle(), getDescriptions());
377371
});
378372
}
379373

@@ -384,7 +378,7 @@ public void showNoCategorySelectedWarning() {
384378
getString(R.string.no_go_back),
385379
getString(R.string.yes_submit),
386380
null,
387-
() -> presenter.handleNext(categoriesModel, true));
381+
() -> presenter.handleCategoryNext(categoriesModel, true));
388382
}
389383

390384
@Override
@@ -454,10 +448,12 @@ private void configureTopCard() {
454448

455449
private void configureBottomCard() {
456450
bottomCardExpandButton.setOnClickListener(v -> presenter.toggleBottomCardState());
457-
bottomCardAddDescription.setOnClickListener(v -> {
458-
descriptionsAdapter.addDescription(new Description());
459-
rvDescriptions.scrollToPosition(descriptionsAdapter.getItemCount() - 1);
460-
});
451+
bottomCardAddDescription.setOnClickListener(v -> addNewDescription());
452+
}
453+
454+
private void addNewDescription() {
455+
descriptionsAdapter.addDescription(new Description());
456+
rvDescriptions.scrollToPosition(descriptionsAdapter.getItemCount() - 1);
461457
}
462458

463459
private void configureRightCard() {
@@ -467,11 +463,15 @@ private void configureRightCard() {
467463

468464
private void configureNavigationButtons() {
469465
// Navigation next / previous for each image as we're collecting title + description
470-
next.setOnClickListener(v -> presenter.handleNext(categoriesModel, false));
466+
next.setOnClickListener(v -> {
467+
setTitleAndDescriptions();
468+
presenter.handleNext(descriptionsAdapter.getTitle(),
469+
descriptionsAdapter.getDescriptions());
470+
});
471471
previous.setOnClickListener(v -> presenter.handlePrevious());
472472

473473
// Next / previous for the category selection currentPage
474-
categoryNext.setOnClickListener(v -> presenter.handleNext(categoriesModel, false));
474+
categoryNext.setOnClickListener(v -> presenter.handleCategoryNext(categoriesModel, false));
475475
categoryPrevious.setOnClickListener(v -> presenter.handlePrevious());
476476

477477
// Finally, the previous / submit buttons on the final currentPage of the wizard
@@ -484,6 +484,11 @@ private void configureNavigationButtons() {
484484

485485
}
486486

487+
private void setTitleAndDescriptions() {
488+
List<Description> descriptions = descriptionsAdapter.getDescriptions();
489+
Timber.d("Descriptions size is %d are %s", descriptions.size(), descriptions);
490+
}
491+
487492
private void configureCategories() {
488493
categoriesAdapter = new UploadCategoriesAdapterFactory(categoriesModel).create(new ArrayList<>());
489494
categoriesList.setLayoutManager(new LinearLayoutManager(this));
@@ -576,6 +581,7 @@ private void initRecyclerView() {
576581
descriptionsAdapter.setCallback(this::showInfoAlert);
577582
rvDescriptions.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
578583
rvDescriptions.setAdapter(descriptionsAdapter);
584+
addNewDescription();
579585
}
580586

581587

app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,23 @@ public void next() {
239239
updateItemState();
240240
}
241241

242+
public void setCurrentTitleAndDescriptions(Title title, List<Description> descriptions) {
243+
setCurrentUploadTitle(title);
244+
setCurrentUploadDescriptions(descriptions);
245+
}
246+
247+
private void setCurrentUploadTitle(Title title) {
248+
if (currentStepIndex < items.size() && currentStepIndex >= 0) {
249+
items.get(currentStepIndex).title = title;
250+
}
251+
}
252+
253+
private void setCurrentUploadDescriptions(List<Description> descriptions) {
254+
if (currentStepIndex < items.size() && currentStepIndex >= 0) {
255+
items.get(currentStepIndex).descriptions = descriptions;
256+
}
257+
}
258+
242259
public void previous() {
243260
if (badImageSubscription != null)
244261
badImageSubscription.dispose();
@@ -295,7 +312,7 @@ Observable<Contribution> buildContributions(List<String> categoryStringList) {
295312
{
296313
Contribution contribution = new Contribution(item.mediaUri, null, item.title + "." + item.fileExt,
297314
Description.formatList(item.descriptions), -1,
298-
null, null, sessionManager.getCurrentAccount().name,
315+
null, null, sessionManager.getUserName(),
299316
CommonsApplication.DEFAULT_EDIT_SUMMARY, item.gpsCoords.getCoords());
300317
contribution.setWikiDataEntityId(item.wikidataEntityId);
301318
contribution.setCategories(categoryStringList);

app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -120,37 +120,43 @@ void selectLicense(String licenseName) {
120120
* Called by the next button in {@link UploadActivity}
121121
*/
122122
@SuppressLint("CheckResult")
123-
void handleNext(CategoriesModel categoriesModel, boolean noCategoryWarningShown) {
124-
if(currentPage == UploadView.TITLE_CARD) {
125-
validateCurrentItemTitle()
126-
.subscribeOn(Schedulers.io())
127-
.observeOn(AndroidSchedulers.mainThread())
128-
.subscribe(this::handleImage);
129-
} else if(currentPage == UploadView.CATEGORIES) {
130-
if (categoriesModel.selectedCategoriesCount() < 1 && !noCategoryWarningShown) {
131-
view.showNoCategorySelectedWarning();
132-
} else {
133-
nextUploadedItem();
134-
}
123+
void handleNext(Title title,
124+
List<Description> descriptions) {
125+
validateCurrentItemTitle()
126+
.subscribeOn(Schedulers.io())
127+
.observeOn(AndroidSchedulers.mainThread())
128+
.subscribe(errorCode -> handleImage(errorCode, title, descriptions));
129+
}
130+
131+
/**
132+
* Called by the next button in {@link UploadActivity}
133+
*/
134+
@SuppressLint("CheckResult")
135+
void handleCategoryNext(CategoriesModel categoriesModel,
136+
boolean noCategoryWarningShown) {
137+
if (categoriesModel.selectedCategoriesCount() < 1 && !noCategoryWarningShown) {
138+
view.showNoCategorySelectedWarning();
135139
} else {
136140
nextUploadedItem();
137141
}
138142
}
139143

140-
private void handleImage(Integer errorCode) {
144+
private void handleImage(Integer errorCode, Title title, List<Description> descriptions) {
141145
switch (errorCode) {
142146
case EMPTY_TITLE:
143147
view.showErrorMessage(R.string.add_title_toast);
144148
break;
145149
case FILE_NAME_EXISTS:
146150
if(getCurrentItem().imageQuality.getValue().equals(IMAGE_KEEP)) {
151+
setTitleAndDescription(title, descriptions);
147152
nextUploadedItem();
148153
} else {
149154
view.showDuplicatePicturePopup();
150155
}
151156
break;
152157
case IMAGE_OK:
153158
default:
159+
setTitleAndDescription(title, descriptions);
154160
nextUploadedItem();
155161
}
156162
}
@@ -164,6 +170,10 @@ private void nextUploadedItem() {
164170
view.dismissKeyboard();
165171
}
166172

173+
private void setTitleAndDescription(Title title, List<Description> descriptions) {
174+
uploadModel.setCurrentTitleAndDescriptions(title, descriptions);
175+
}
176+
167177
private Title getCurrentImageTitle() {
168178
return getCurrentItem().title;
169179
}
@@ -360,7 +370,10 @@ private void updateContent() {
360370

361371
view.setBackground(uploadModel.getCurrentItem().mediaUri);
362372

363-
view.updateBottomCardContent(uploadModel.getCurrentStep(), uploadModel.getStepCount(), uploadModel.getCurrentItem());
373+
view.updateBottomCardContent(uploadModel.getCurrentStep(),
374+
uploadModel.getStepCount(),
375+
uploadModel.getCurrentItem(),
376+
uploadModel.isShowingItem());
364377

365378
view.updateTopCardContent();
366379

app/src/main/java/fr/free/nrw/commons/upload/UploadView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public interface UploadView {
5656

5757
void updateRightCardContent(boolean gpsPresent);
5858

59-
void updateBottomCardContent(int currentStep, int stepCount, UploadModel.UploadItem uploadItem);
59+
void updateBottomCardContent(int currentStep, int stepCount, UploadModel.UploadItem uploadItem, boolean isShowingItem);
6060

6161
void updateLicenses(List<String> licenses, String selectedLicense);
6262

app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,26 @@ private static void setWallpaper(Context context, Bitmap bitmap) {
204204
Timber.e(e, "Error setting wallpaper");
205205
}
206206
}
207+
208+
public static String getErrorMessageForResult(Context context, @Result int result) {
209+
String errorMessage;
210+
if (result == ImageUtils.IMAGE_DARK)
211+
errorMessage = context.getString(R.string.upload_image_problem_dark);
212+
else if (result == ImageUtils.IMAGE_BLURRY)
213+
errorMessage = context.getString(R.string.upload_image_problem_blurry);
214+
else if (result == ImageUtils.IMAGE_DUPLICATE)
215+
errorMessage = context.getString(R.string.upload_image_problem_duplicate);
216+
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_BLURRY))
217+
errorMessage = context.getString(R.string.upload_image_problem_dark_blurry);
218+
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_DUPLICATE))
219+
errorMessage = context.getString(R.string.upload_image_problem_dark_duplicate);
220+
else if (result == (ImageUtils.IMAGE_BLURRY|ImageUtils.IMAGE_DUPLICATE))
221+
errorMessage = context.getString(R.string.upload_image_problem_blurry_duplicate);
222+
else if (result == (ImageUtils.IMAGE_DARK|ImageUtils.IMAGE_BLURRY|ImageUtils.IMAGE_DUPLICATE))
223+
errorMessage = context.getString(R.string.upload_image_problem_dark_blurry_duplicate);
224+
else
225+
return "";
226+
227+
return errorMessage;
228+
}
207229
}

0 commit comments

Comments
 (0)