From ce87f6a8ccd5ce02b2b525b7c97ae018a915f98c Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 02:42:38 +0530 Subject: [PATCH 1/6] updated gradle plugin version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index f9213b054f..1ccb2eda2b 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:3.6.1' + classpath 'com.android.tools.build:gradle:3.6.3' classpath "com.hiya:jacoco-android:0.2" classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION" From 9454313ebd9b72ebbca2f6b2ef4afd9b7dbb2ab4 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 02:57:30 +0530 Subject: [PATCH 2/6] BugFix #3856 * Do not use preference for deciding acceptable lat long for nearby uploads, instead save the corresponding location in the Contribution via UploadItem --- .../main/java/fr/free/nrw/commons/Media.java | 11 ----------- .../commons/contributions/Contribution.java | 10 ++++++++++ .../fr/free/nrw/commons/db/AppDatabase.java | 2 +- .../commons/di/CommonsApplicationModule.java | 14 +++++++++++++- .../free/nrw/commons/upload/UploadModel.java | 6 ++++++ .../nrw/commons/upload/UploadService.java | 10 +++++++++- .../mediaDetails/UploadMediaPresenter.java | 19 ++++++++++++------- .../commons/wikidata/WikidataEditService.java | 5 ----- .../locations/BookMarkLocationDaoTest.kt | 5 +++-- .../upload/UploadMediaPresenterTest.kt | 14 +++++++------- 10 files changed, 61 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/Media.java b/app/src/main/java/fr/free/nrw/commons/Media.java index 548a5b01ae..b07c3fbc7d 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.java +++ b/app/src/main/java/fr/free/nrw/commons/Media.java @@ -554,15 +554,4 @@ protected Media(Parcel in) { this.coordinates = in.readParcelable(LatLng.class.getClassLoader()); } - public static final Creator CREATOR = new Creator() { - @Override - public Media createFromParcel(Parcel source) { - return new Media(source); - } - - @Override - public Media[] newArray(int size) { - return new Media[size]; - } - }; } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index 935547655d..c9c08c49b3 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -60,6 +60,15 @@ public class Contribution extends Media { private String p18Value; public Uri contentProviderUri; public String dateCreatedSource; + public int hasInvalidLocation; + + public void setHasInvalidLocation(boolean hasInvalidLocation) { + this.hasInvalidLocation = hasInvalidLocation?1:0; + } + + public boolean isHasInvalidLocation() { + return hasInvalidLocation==1; + } public Contribution(Uri contentUri, String filename, Uri localUri, String imageUrl, Date dateCreated, int state, long dataLength, Date dateUploaded, long transferred, @@ -269,6 +278,7 @@ public void setContentProviderUri(Uri contentProviderUri) { this.contentProviderUri = contentProviderUri; } + @Override public int describeContents() { return 0; diff --git a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.java b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.java index 61097fa6f0..39d5fb1bbb 100644 --- a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.java +++ b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.java @@ -7,7 +7,7 @@ import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.contributions.ContributionDao; -@Database(entities = {Contribution.class}, version = 1, exportSchema = false) +@Database(entities = {Contribution.class}, version = 2, exportSchema = false) @TypeConverters({Converters.class}) abstract public class AppDatabase extends RoomDatabase { public abstract ContributionDao getContributionDao(); diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java index 8ed13d4df1..425c95b83b 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java @@ -7,6 +7,8 @@ import android.view.inputmethod.InputMethodManager; import androidx.collection.LruCache; import androidx.room.Room; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; import com.github.varunpant.quadtree.QuadTree; import com.google.gson.Gson; import dagger.Module; @@ -52,6 +54,14 @@ public class CommonsApplicationModule { public static final String MAIN_THREAD="main_thread"; private AppDatabase appDatabase; + static final Migration MIGRATION_1_2 = new Migration(1, 2) { + @Override + public void migrate(SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE contribution " + + " ADD COLUMN hasInvalidLocation INTEGER"); + } + }; + public CommonsApplicationModule(Context applicationContext) { this.applicationContext = applicationContext; } @@ -231,7 +241,9 @@ public QuadTree providesQuadTres() { @Provides @Singleton public AppDatabase provideAppDataBase() { - appDatabase=Room.databaseBuilder(applicationContext, AppDatabase.class, "commons_room.db").build(); + appDatabase=Room.databaseBuilder(applicationContext, AppDatabase.class, "commons_room.db") + .addMigrations(MIGRATION_1_2) + .build(); return appDatabase; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java index 69572ce9ed..da72869c8c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadModel.java @@ -172,6 +172,7 @@ public Observable buildContributions() { contribution.setSource(item.source); contribution.setContentProviderUri(item.mediaUri); contribution.setDateUploaded(new Date()); + contribution.setHasInvalidLocation(item.hasInvalidLocation); Timber.d("Created timestamp while building contribution is %s, %s", item.getCreatedTimestamp(), @@ -221,6 +222,7 @@ public static class UploadItem { private final String mimeType; private final String source; private ImageCoordinates gpsCoords; + private boolean hasInvalidLocation; public void setGpsCoords(ImageCoordinates gpsCoords) { this.gpsCoords = gpsCoords; @@ -326,6 +328,10 @@ public boolean equals(@Nullable Object obj) { public int hashCode() { return mediaUri.hashCode(); } + + public void setHasInvalidLocation(boolean hasInvalidLocation) { + this.hasInvalidLocation=hasInvalidLocation; + } } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java index 2553a1796c..fcce0c3bf3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadService.java @@ -282,7 +282,15 @@ private void uploadContribution(Contribution contribution) { Timber.d("Contribution upload success. Initiating Wikidata edit for" + " entity id %s if necessary (if P18 is null). P18 value is %s", contribution.getWikiDataEntityId(), contribution.getP18Value()); - wikidataEditService.createClaimWithLogging(contribution.getWikiDataEntityId(), contribution.getWikiItemName(), canonicalFilename, contribution.getP18Value()); + if (!contribution.isHasInvalidLocation()) { + wikidataEditService + .createClaimWithLogging(contribution.getWikiDataEntityId(), + contribution.getWikiItemName(), canonicalFilename, + contribution.getP18Value()); + } else { + Timber + .d("Image location and nearby place location mismatched, so Wikidata item won't be edited"); + } contribution.setFilename(canonicalFilename); contribution.setImageUrl(uploadResult.getImageinfo().getOriginalUrl()); contribution.setState(Contribution.STATE_COMPLETED); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java index c36d1b781f..9ad6dccc6c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java @@ -120,7 +120,7 @@ public void verifyImageQuality(UploadItem uploadItem) { .observeOn(mainThreadScheduler) .subscribe(imageResult -> { view.showProgress(false); - handleImageResult(imageResult); + handleImageResult(imageResult,uploadItem); }, throwable -> { view.showProgress(false); @@ -165,13 +165,16 @@ public void useSimilarPictureCoordinates(ImageCoordinates imageCoordinates, int /** * handles image quality verifications * - * @param imageResult - */ - public void handleImageResult(Integer imageResult) { + * @param imageResult + * @param uploadItem + */ + public void handleImageResult(Integer imageResult, + UploadItem uploadItem) { if (imageResult == IMAGE_KEEP || imageResult == IMAGE_OK) { view.onImageValidationSuccess(); + uploadItem.setHasInvalidLocation(false); } else { - handleBadImage(imageResult); + handleBadImage(imageResult,uploadItem); } } @@ -179,12 +182,14 @@ public void handleImageResult(Integer imageResult) { * Handle images, say empty title, duplicate file name, bad picture(in all other cases) * * @param errorCode + * @param uploadItem */ - public void handleBadImage(Integer errorCode) { + public void handleBadImage(Integer errorCode, + UploadItem uploadItem) { Timber.d("Handle bad picture with error code %d", errorCode); if (errorCode >= 8) { // If location of image and nearby does not match, then set shared preferences to disable wikidata edits - repository.saveValue("Picture_Has_Correct_Location", false); + uploadItem.setHasInvalidLocation(true); } switch (errorCode) { diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.java b/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.java index 25cc020fb1..ece32a2479 100644 --- a/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.java +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.java @@ -61,11 +61,6 @@ public void createClaimWithLogging(String wikidataEntityId, String wikiItemName, return; } - if (!(directKvStore.getBoolean("Picture_Has_Correct_Location", true))) { - Timber.d("Image location and nearby place location mismatched, so Wikidata item won't be edited"); - return; - } - if (p18Value != null && !p18Value.trim().isEmpty()) { Timber.d("Skipping creation of claim as p18Value is not empty, we won't override existing image"); return; diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt index 86268c348b..ee2be006e6 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt @@ -242,13 +242,14 @@ class BookMarkLocationDaoTest { fun migrateTableVersionFrom_v6_to_v7() { onUpdate(database, 6, 7) // Table didnt change in version 7 - verifyZeroInteractions(database) + verify(database).execSQL(CREATE_TABLE_STATEMENT) } @Test fun migrateTableVersionFrom_v7_to_v8() { onUpdate(database, 7, 8) - verify(database).execSQL(CREATE_TABLE_STATEMENT) + // Table didnt change in version 8 + verifyZeroInteractions(database) } private fun createCursor(rowCount: Int) = MatrixCursor(columns, rowCount).apply { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt index 68bef84fd8..2cbd4da203 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt @@ -109,20 +109,20 @@ class UploadMediaPresenterTest { @Test fun handleImageResult() { //Positive case test - uploadMediaPresenter.handleImageResult(IMAGE_KEEP) + uploadMediaPresenter.handleImageResult(IMAGE_KEEP, uploadItem) verify(view).onImageValidationSuccess() //Duplicate file name - uploadMediaPresenter.handleImageResult(FILE_NAME_EXISTS) + uploadMediaPresenter.handleImageResult(FILE_NAME_EXISTS, uploadItem) verify(view).showDuplicatePicturePopup() //Empty Title test - uploadMediaPresenter.handleImageResult(EMPTY_TITLE) + uploadMediaPresenter.handleImageResult(EMPTY_TITLE, uploadItem) verify(view).showMessage(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt()) //Bad Picture test //Empty Title test - uploadMediaPresenter.handleImageResult(-7) + uploadMediaPresenter.handleImageResult(-7, uploadItem) verify(view).showBadImagePopup(ArgumentMatchers.anyInt()) } @@ -158,7 +158,7 @@ class UploadMediaPresenterTest { */ @Test fun handleBadImageBaseTestInvalidLocation() { - uploadMediaPresenter.handleBadImage(8) + uploadMediaPresenter.handleBadImage(8, uploadItem) verify(repository).saveValue(ArgumentMatchers.anyString(), eq(false)) verify(view).showBadImagePopup(8) } @@ -168,7 +168,7 @@ class UploadMediaPresenterTest { */ @Test fun handleBadImageBaseTestEmptyTitle() { - uploadMediaPresenter.handleBadImage(-3) + uploadMediaPresenter.handleBadImage(-3, uploadItem) verify(view).showMessage(ArgumentMatchers.anyInt(), ArgumentMatchers.anyInt()) } @@ -177,7 +177,7 @@ class UploadMediaPresenterTest { */ @Test fun handleBadImageBaseTestFileNameExists() { - uploadMediaPresenter.handleBadImage(-4) + uploadMediaPresenter.handleBadImage(-4, uploadItem) verify(view).showDuplicatePicturePopup() } From c10d8d8aa933c5f8b7871fa0c519155d9fa61e2e Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 03:02:30 +0530 Subject: [PATCH 3/6] Marshall contribution's hasInvalidLocation --- .../java/fr/free/nrw/commons/contributions/Contribution.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index c9c08c49b3..66fd1aab2f 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -300,6 +300,7 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.p18Value); dest.writeParcelable(this.contentProviderUri, flags); dest.writeString(this.dateCreatedSource); + dest.writeInt(this.hasInvalidLocation); } protected Contribution(Parcel in) { @@ -317,6 +318,7 @@ protected Contribution(Parcel in) { this.p18Value = in.readString(); this.contentProviderUri = in.readParcelable(Uri.class.getClassLoader()); this.dateCreatedSource = in.readString(); + this.hasInvalidLocation=in.readInt(); } public static final Creator CREATOR = new Creator() { From caaa2e08eef5a9a15f2297fc181f344ec82b027d Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 03:08:35 +0530 Subject: [PATCH 4/6] reset un-related changes --- app/src/main/java/fr/free/nrw/commons/Media.java | 11 +++++++++++ .../bookmarks/locations/BookMarkLocationDaoTest.kt | 5 ++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/Media.java b/app/src/main/java/fr/free/nrw/commons/Media.java index b07c3fbc7d..548a5b01ae 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.java +++ b/app/src/main/java/fr/free/nrw/commons/Media.java @@ -554,4 +554,15 @@ protected Media(Parcel in) { this.coordinates = in.readParcelable(LatLng.class.getClassLoader()); } + public static final Creator CREATOR = new Creator() { + @Override + public Media createFromParcel(Parcel source) { + return new Media(source); + } + + @Override + public Media[] newArray(int size) { + return new Media[size]; + } + }; } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt index ee2be006e6..86268c348b 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookMarkLocationDaoTest.kt @@ -242,14 +242,13 @@ class BookMarkLocationDaoTest { fun migrateTableVersionFrom_v6_to_v7() { onUpdate(database, 6, 7) // Table didnt change in version 7 - verify(database).execSQL(CREATE_TABLE_STATEMENT) + verifyZeroInteractions(database) } @Test fun migrateTableVersionFrom_v7_to_v8() { onUpdate(database, 7, 8) - // Table didnt change in version 8 - verifyZeroInteractions(database) + verify(database).execSQL(CREATE_TABLE_STATEMENT) } private fun createCursor(rowCount: Int) = MatrixCursor(columns, rowCount).apply { From b82f83cadf9de6b5d7670788815d0c867dc5b808 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 03:13:22 +0530 Subject: [PATCH 5/6] Fixed test cases --- .../free/nrw/commons/upload/UploadMediaPresenterTest.kt | 2 +- .../free/nrw/commons/wikidata/WikidataEditServiceTest.kt | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt index 2cbd4da203..b5194a3f5d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaPresenterTest.kt @@ -159,7 +159,7 @@ class UploadMediaPresenterTest { @Test fun handleBadImageBaseTestInvalidLocation() { uploadMediaPresenter.handleBadImage(8, uploadItem) - verify(repository).saveValue(ArgumentMatchers.anyString(), eq(false)) + verify(uploadItem).setHasInvalidLocation(true) verify(view).showBadImagePopup(8) } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/wikidata/WikidataEditServiceTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/wikidata/WikidataEditServiceTest.kt index efd28c7576..397e74a21b 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/wikidata/WikidataEditServiceTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/wikidata/WikidataEditServiceTest.kt @@ -50,14 +50,6 @@ class WikidataEditServiceTest { verifyZeroInteractions(wikidataClient!!) } - @Test - fun noClaimsWhenLocationIsNotCorrect() { - `when`(directKvStore!!.getBoolean("Picture_Has_Correct_Location", true)) - .thenReturn(false) - wikidataEditService!!.createClaimWithLogging("Q1", "","Test.jpg","") - verifyZeroInteractions(wikidataClient!!) - } - @Test fun createClaimWithLogging() { `when`(directKvStore!!.getBoolean("Picture_Has_Correct_Location", true)) From 07de29d1b689088864da0ef88ade1cf8197f1e9c Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Thu, 9 Jul 2020 03:17:48 +0530 Subject: [PATCH 6/6] Minor code formatting and docs --- .../free/nrw/commons/contributions/Contribution.java | 10 +++++++--- .../upload/mediaDetails/UploadMediaPresenter.java | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java index 66fd1aab2f..704a728153 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/Contribution.java @@ -62,12 +62,16 @@ public class Contribution extends Media { public String dateCreatedSource; public int hasInvalidLocation; + /** + * Set this true when ImageProcessor has said that the location is invalid + * @param hasInvalidLocation + */ public void setHasInvalidLocation(boolean hasInvalidLocation) { - this.hasInvalidLocation = hasInvalidLocation?1:0; + this.hasInvalidLocation = hasInvalidLocation ? 1 : 0; } public boolean isHasInvalidLocation() { - return hasInvalidLocation==1; + return hasInvalidLocation == 1; } public Contribution(Uri contentUri, String filename, Uri localUri, String imageUrl, Date dateCreated, @@ -318,7 +322,7 @@ protected Contribution(Parcel in) { this.p18Value = in.readString(); this.contentProviderUri = in.readParcelable(Uri.class.getClassLoader()); this.dateCreatedSource = in.readString(); - this.hasInvalidLocation=in.readInt(); + this.hasInvalidLocation = in.readInt(); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java index 9ad6dccc6c..c153ab3c2b 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java @@ -120,7 +120,7 @@ public void verifyImageQuality(UploadItem uploadItem) { .observeOn(mainThreadScheduler) .subscribe(imageResult -> { view.showProgress(false); - handleImageResult(imageResult,uploadItem); + handleImageResult(imageResult, uploadItem); }, throwable -> { view.showProgress(false); @@ -174,7 +174,7 @@ public void handleImageResult(Integer imageResult, view.onImageValidationSuccess(); uploadItem.setHasInvalidLocation(false); } else { - handleBadImage(imageResult,uploadItem); + handleBadImage(imageResult, uploadItem); } } @@ -188,7 +188,7 @@ public void handleBadImage(Integer errorCode, UploadItem uploadItem) { Timber.d("Handle bad picture with error code %d", errorCode); if (errorCode - >= 8) { // If location of image and nearby does not match, then set shared preferences to disable wikidata edits + >= 8) { // If location of image and nearby does not match, then set shared preferences to disable wikidata edits uploadItem.setHasInvalidLocation(true); }