diff --git a/app/build.gradle b/app/build.gradle
index 974fcb6d4..8d5ef4b39 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -107,6 +107,7 @@ dependencies {
//Room
def room_version= '2.2.3'
implementation "androidx.room:room-runtime:$room_version"
+ implementation "androidx.room:room-ktx:$room_version"
kapt "androidx.room:room-compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor
implementation 'com.squareup.retrofit2:retrofit:2.7.1'
implementation "androidx.room:room-rxjava2:$room_version"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 74acfcbb6..e0cf4d03c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -183,14 +183,7 @@
android:authorities="${applicationId}.categories.contentprovider"
android:exported="false"
android:label="@string/provider_categories"
- android:syncable="false" />
-
-
+ android:syncable="false" />
Observable.fromIterable(depictSearchResponse.getSearch()))
- .map(depictSearchItem -> new DepictedItem(depictSearchItem.getLabel(), depictSearchItem.getDescription(), "", false, depictSearchItem.getId()));
+ .map(DepictedItem::new);
}
/**
diff --git a/app/src/main/java/fr/free/nrw/commons/repository/UploadRemoteDataSource.java b/app/src/main/java/fr/free/nrw/commons/repository/UploadRemoteDataSource.java
index 866e61656..e8cbd153b 100644
--- a/app/src/main/java/fr/free/nrw/commons/repository/UploadRemoteDataSource.java
+++ b/app/src/main/java/fr/free/nrw/commons/repository/UploadRemoteDataSource.java
@@ -21,7 +21,6 @@ import fr.free.nrw.commons.upload.UploadModel;
import fr.free.nrw.commons.upload.UploadModel.UploadItem;
import fr.free.nrw.commons.upload.structure.depictions.DepictModel;
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
-import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
import io.reactivex.Observable;
import io.reactivex.Single;
@@ -230,8 +229,8 @@ public class UploadRemoteDataSource {
* get all depictions
*/
- public Observable searchAllEntities(String query, List imageTitleList) {
- return depictModel.searchAllEntities(query, imageTitleList);
+ public Observable searchAllEntities(String query) {
+ return depictModel.searchAllEntities(query);
}
public void setSelectedDepictions(List selectedDepictions) {
diff --git a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java
index 606656a0d..3eeb46a47 100644
--- a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java
+++ b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java
@@ -287,12 +287,11 @@ public class UploadRepository {
* Search all depictions from
*
* @param query
- * @param imageTitleList
* @return
*/
- public Observable searchAllEntities(String query, List imageTitleList) {
- return remoteDataSource.searchAllEntities(query, imageTitleList);
+ public Observable searchAllEntities(String query) {
+ return remoteDataSource.searchAllEntities(query);
}
public List getDepictionsEntityIdList() {
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsPresenter.java
index 9e4150d28..eac93e2db 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsPresenter.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsPresenter.java
@@ -3,8 +3,6 @@ package fr.free.nrw.commons.upload.depicts;
import static fr.free.nrw.commons.di.CommonsApplicationModule.IO_THREAD;
import static fr.free.nrw.commons.di.CommonsApplicationModule.MAIN_THREAD;
-import android.util.Log;
-
import fr.free.nrw.commons.explore.depictions.DepictsClient;
import fr.free.nrw.commons.repository.UploadRepository;
import fr.free.nrw.commons.upload.UploadModel;
@@ -85,7 +83,6 @@ public class DepictsPresenter implements DepictsContract.UserActionListener {
@Override
public void searchForDepictions(String query) {
List depictedItemList = new ArrayList<>();
- List imageTitleList = getImageTitleList();
Observable distinctDepictsObservable = Observable
.fromIterable(repository.getSelectedDepictions())
.subscribeOn(ioScheduler)
@@ -97,27 +94,22 @@ public class DepictsPresenter implements DepictsContract.UserActionListener {
})
.observeOn(ioScheduler)
.concatWith(
- repository.searchAllEntities(query, imageTitleList)
+ repository.searchAllEntities(query)
)
.distinct();
Disposable searchDepictsDisposable = distinctDepictsObservable
.observeOn(mainThreadScheduler)
.subscribe(
- s -> depictedItemList.add(s),
+ depictedItemList::add,
Timber::e,
() -> {
view.showProgress(false);
- if (null == depictedItemList || depictedItemList.isEmpty()) {
+ if (depictedItemList.isEmpty()) {
view.showError(true);
} else {
view.showError(false);
- //Understand this is shitty, but yes, doing it the other way is even worse and adapter positions can not be trusted
- for (int position = 0; position < depictedItemList.size();
- position++) {
- //depictedItemList.get(position).setPosition(position);
- }
view.setDepictsList(depictedItemList);
}
}
@@ -156,18 +148,4 @@ public class DepictsPresenter implements DepictsContract.UserActionListener {
view.onImageUrlFetched(response,position);
}));
}
-
- /**
- * Returns image title list from UploadItem
- * @return
- */
- private List getImageTitleList() {
- List titleList = new ArrayList<>();
- for (UploadModel.UploadItem item : repository.getUploads()) {
- if (item.getTitle().isSet()) {
- titleList.add(item.getTitle().toString());
- }
- }
- return titleList;
- }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.java b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.java
deleted file mode 100644
index c38e92daf..000000000
--- a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package fr.free.nrw.commons.upload.structure.depictions;
-
-import android.text.TextUtils;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import fr.free.nrw.commons.explore.depictions.DepictsClient;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.upload.depicts.DepictsInterface;
-import fr.free.nrw.commons.utils.StringSortingUtils;
-import fr.free.nrw.commons.wikidata.model.DepictSearchItem;
-import io.reactivex.Observable;
-import io.reactivex.disposables.CompositeDisposable;
-import timber.log.Timber;
-
-
-/**
- * The model class for depictions in upload
- */
-public class DepictModel {
- private static final int SEARCH_DEPICTS_LIMIT = 25;
- private final DepictionDao depictDao;
- private final DepictsInterface depictsInterface;
- private final JsonKvStore directKvStore;
- @Inject
- DepictsClient depictsClient;
-
- private List selectedDepictedItems;
- private HashMap> depictsCache;
- private CompositeDisposable compositeDisposable = new CompositeDisposable();
-
- @Inject
- public DepictModel(DepictionDao depictDao, @Named("default_preferences") JsonKvStore directKvStore, DepictsInterface depictsInterface) {
- this.depictDao = depictDao;
- this.directKvStore = directKvStore;
- this.depictsInterface = depictsInterface;
- this.depictsCache = new HashMap<>();
- this.selectedDepictedItems = new ArrayList<>();
- }
-
- public Comparator sortBySimilarity(final String filter) {
- Comparator stringSimilarityComparator = StringSortingUtils.sortBySimilarity(filter);
- return (firstItem, secondItem) -> stringSimilarityComparator
- .compare(firstItem.getDepictsLabel(), secondItem.getDescription());
- }
-
- public void cacheAll(HashMap> depictsCache) {
- depictsCache.putAll(depictsCache);
- }
-
- public HashMap> getDepictsCache() {
- return depictsCache;
- }
-
- boolean cacheContainsKey(String term) {
- return depictsCache.containsKey(term);
- }
-
- public void onDepictItemClicked(DepictedItem depictedItem) {
- if (depictedItem.isSelected()) {
- selectDepictItem(depictedItem);
-// updateDepictCount(depictedItem);
- } else {
- unselectDepiction(depictedItem);
- }
- }
-
- private void unselectDepiction(DepictedItem depictedItem) {
- selectedDepictedItems.remove(depictedItem);
- }
-
- private void updateDepictCount(DepictedItem depictedItem) {
- Depiction depiction = depictDao.find(depictedItem.getDepictsLabel());
-
- if (depictedItem == null) {
- depiction = new Depiction(null, depictedItem.getDepictsLabel(), new Date(), 0);
- }
-
- depiction.incTimesUsed();
- depictDao.save(depiction);
- }
-
- private void selectDepictItem(DepictedItem depictedItem) {
- selectedDepictedItems.add(depictedItem);
- }
-
- private Observable titleDepicts(List titleList) {
- return Observable.fromIterable(titleList)
- .concatMap(this::getTitleDepicts);
- }
-
- private Observable getTitleDepicts(String title) {
- return depictsInterface.searchForDepicts(title, String.valueOf(SEARCH_DEPICTS_LIMIT), Locale.getDefault().getLanguage(), Locale.getDefault().getLanguage(),"0")
- .map(depictSearchResponse -> {
- DepictSearchItem depictedItem = depictSearchResponse.getSearch().get(0);
- return new DepictedItem(depictedItem.getLabel(), depictedItem.getDescription(), "", false, depictedItem.getId());
- });
- }
-
- private Observable recentDepicts() {
- return Observable.fromIterable(depictDao.recentDepicts(SEARCH_DEPICTS_LIMIT))
- .map(s -> new DepictedItem(s, "", "", false, ""));
- }
-
- /**
- * Get selected Depictions
- * @return selected depictions
- */
- public List getSelectedDepictions() {
- return selectedDepictedItems;
- }
-
- /**
- * Search for depictions
- * @param query
- * @param imageTitleList
- * @return
- */
- public Observable searchAllEntities(String query, List imageTitleList) {
- return depictsInterface.searchForDepicts(query, String.valueOf(SEARCH_DEPICTS_LIMIT), Locale.getDefault().getLanguage(), Locale.getDefault().getLanguage(), "0")
- .flatMap(depictSearchResponse -> Observable.fromIterable(depictSearchResponse.getSearch()))
- .map(depictSearchItem -> new DepictedItem(depictSearchItem.getLabel(), depictSearchItem.getDescription(), "", false, depictSearchItem.getId()));
- }
-
- public List depictionsEntityIdList() {
- List output = new ArrayList<>();
- for (DepictedItem d : selectedDepictedItems) {
- output.add(d.getEntityId());
- }
- return output;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.kt b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.kt
new file mode 100644
index 000000000..b5540e3e9
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictModel.kt
@@ -0,0 +1,48 @@
+package fr.free.nrw.commons.upload.structure.depictions
+
+import fr.free.nrw.commons.upload.depicts.DepictsInterface
+import io.reactivex.Observable
+import java.util.Locale
+import javax.inject.Inject
+
+/**
+ * The model class for depictions in upload
+ */
+class DepictModel @Inject constructor(private val depictsInterface: DepictsInterface) {
+
+ companion object {
+ private const val SEARCH_DEPICTS_LIMIT = 25
+ }
+
+ val selectedDepictions = mutableListOf()
+
+ fun onDepictItemClicked(depictedItem: DepictedItem) {
+ if (depictedItem.isSelected) {
+ selectDepictItem(depictedItem)
+ } else {
+ unselectDepiction(depictedItem)
+ }
+ }
+
+ private fun unselectDepiction(depictedItem: DepictedItem) {
+ selectedDepictions.remove(depictedItem)
+ }
+
+ private fun selectDepictItem(depictedItem: DepictedItem) {
+ selectedDepictions.add(depictedItem)
+ }
+
+ /**
+ * Search for depictions
+ */
+ fun searchAllEntities(query: String?): Observable {
+ return depictsInterface.searchForDepicts(
+ query, "$SEARCH_DEPICTS_LIMIT", Locale.getDefault().language,
+ Locale.getDefault().language, "0"
+ )
+ .flatMap { Observable.fromIterable(it.search) }
+ .map(::DepictedItem)
+ }
+
+ fun depictionsEntityIdList() = selectedDepictions.map { it.entityId }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.java b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.java
deleted file mode 100644
index e0fce7e79..000000000
--- a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package fr.free.nrw.commons.upload.structure.depictions;
-
-/**
- * Model class for Depicted Item in Upload and Explore
- */
-public class DepictedItem {
- private final String depictsLabel;
- private final String description;
- private String imageUrl;
- private boolean selected;
- private String entityId;
- private int position;
-
- public DepictedItem(String depictsLabel, String description, String imageUrl, boolean selected, String entityId) {
- this.depictsLabel = depictsLabel;
- this.selected = selected;
- this.description = description;
- this.imageUrl = imageUrl;
- this.entityId = entityId;
- }
-
- public String getEntityId() {
- return entityId;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getImageUrl() {
- return imageUrl;
- }
-
- public void setImageUrl(String imageUrl) {
- this.imageUrl = imageUrl;
- }
-
- public String getDepictsLabel() {
- return depictsLabel;
- }
-
- public boolean isSelected() {
- return selected;
- }
-
- public void setSelected(boolean selected) {
- this.selected = selected;
- }
-
- @Override
- public int hashCode() {
- return super.hashCode();
- }
-
- @Override
- public String toString() {
- return super.toString();
- }
-
- public void setPosition(int position) {
- this.position = position;
- }
-
- public int getPosition() {
- return position;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- DepictedItem that = (DepictedItem) o;
-
- return depictsLabel.equals(that.depictsLabel);
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.kt b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.kt
new file mode 100644
index 000000000..babd20298
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictedItem.kt
@@ -0,0 +1,31 @@
+package fr.free.nrw.commons.upload.structure.depictions
+
+import fr.free.nrw.commons.wikidata.model.DepictSearchItem
+
+/**
+ * Model class for Depicted Item in Upload and Explore
+ */
+data class DepictedItem constructor(
+ val depictsLabel: String,
+ val description: String,
+ var imageUrl: String,
+ var isSelected: Boolean,
+ val entityId: String
+) {
+ constructor(depictSearchItem: DepictSearchItem) : this(
+ depictSearchItem.label,
+ depictSearchItem.description,
+ "",
+ false,
+ depictSearchItem.id
+ )
+
+ var position = 0
+
+ override fun equals(o: Any?) = when {
+ this === o -> true
+ o is DepictedItem -> depictsLabel == o.depictsLabel
+ else -> false
+ }
+
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/Depiction.java b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/Depiction.java
deleted file mode 100644
index f77506537..000000000
--- a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/Depiction.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package fr.free.nrw.commons.upload.structure.depictions;
-
-import android.net.Uri;
-
-import java.util.Date;
-
-/**
- * Represents the fact that a given Commons picture depicts a given Wikidata item.
- * Example: https://commons.wikimedia.org/wiki/File:Sorting_quicksort_anim.gif depicts https://www.wikidata.org/wiki/Q486598
- */
-public class Depiction {
- private Uri contentUri;
- private String name;
- private Date lastUsed;
- private int timesUsed;
-
- public Depiction() {
- }
-
- public Depiction(Uri contentUri, String name, Date lastUsed, int timesUsed) {
- this.contentUri = contentUri;
- this.name = name;
- this.lastUsed = lastUsed;
- this.timesUsed = timesUsed;
- }
-
- /**
- * Gets the content URI for this category
- *
- * @return content URI
- */
- public Uri getContentUri() {
- return contentUri;
- }
-
- /**
- * Modifies the content URI - marking this depiction as already saved in the database
- *
- * @param contentUri the content URI
- */
- public void setContentUri(Uri contentUri) {
- this.contentUri = contentUri;
- }
-
-
- /**
- * Gets name
- *
- * @return name
- */
- public String getName() {
- return name;
- }
-
- /**
- * Modifies name
- *
- * @param name Depicts name
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Gets last used date
- *
- * @return Last used date
- */
- public Date getLastUsed() {
- return lastUsed;
- }
-
- /**
- * Set last used date
- *
- * @param lastUsed last used date of depiction
- */
-
- public void setLastUsed(Date lastUsed) {
- this.lastUsed = lastUsed;
- }
-
- /**
- * Gets no. of times the depiction is used
- *
- * @return no. of times used
- */
- public int getTimesUsed() {
- return timesUsed;
- }
-
- /**
- * Increments timesUsed by 1 and sets last used date as now.
- */
- public void incTimesUsed() {
- timesUsed++;
- touch();
- }
-
- /**
- * Generates new last used date
- */
- private void touch() {
- lastUsed = new Date();
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictionDao.java b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictionDao.java
deleted file mode 100644
index 8e3ca5758..000000000
--- a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictionDao.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package fr.free.nrw.commons.upload.structure.depictions;
-
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.RemoteException;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-public class DepictionDao {
-
- private final Provider clientProvider;
-
- @Inject
- public DepictionDao(@Named("depictions") Provider clientProvider) {
- this.clientProvider = clientProvider;
- }
-
- public void save(Depiction depiction) {
- ContentProviderClient db = clientProvider.get();
- try {
- if (depiction.getContentUri() == null) {
- depiction.setContentUri(db.insert(DepictsContentProvider.BASE_URI, toContentValues(depiction)));
- } else {
- db.update(depiction.getContentUri(), toContentValues(depiction), null, null);
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * Find persisted depicts in database, based on its name.
- *
- * @param name Depiction name
- * @return depiction from database, or null if not found
- */
-
- @Nullable
- Depiction find(String name) {
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- DepictsContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- Table.COLUMN_NAME + "=?",
- new String[]{name},
- null);
- if (cursor != null && cursor.moveToFirst()) {
- return fromCursor(cursor);
- }
- db.release();
- } catch (RemoteException e) {
- // This feels lazy, but to hell with checked exceptions. :)
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- return null;
- }
-
- /**
- * Retrieve recently-used depictions, ordered by descending date.
- *
- * @return a list containing recent depicts
- */
- @NonNull
- List recentDepicts(int limit) {
- List items = new ArrayList<>();
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- DepictsContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- null,
- new String[]{},
- Table.COLUMN_LAST_USED + "DESC");
- while (cursor != null && cursor.moveToNext()
- && cursor.getPosition() < limit) {
- items.add(fromCursor(cursor).getName());
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.release();
- }
- return items;
- }
-
- @NonNull
- Depiction fromCursor(Cursor cursor) {
- // Hardcoding column positions!
- return new Depiction(
- DepictsContentProvider.uriForId(cursor.getInt(cursor.getColumnIndex(DepictionDao.Table.COLUMN_ID))),
- cursor.getString(cursor.getColumnIndex(DepictionDao.Table.COLUMN_NAME)),
- new Date(cursor.getLong(cursor.getColumnIndex(DepictionDao.Table.COLUMN_LAST_USED))),
- cursor.getInt(cursor.getColumnIndex(DepictionDao.Table.COLUMN_TIMES_USED))
- );
- }
-
- private ContentValues toContentValues(Depiction depiction) {
- ContentValues cv = new ContentValues();
- cv.put(DepictionDao.Table.COLUMN_NAME, depiction.getName());
- cv.put(DepictionDao.Table.COLUMN_LAST_USED, depiction.getLastUsed().getTime());
- cv.put(DepictionDao.Table.COLUMN_TIMES_USED, depiction.getTimesUsed());
- return cv;
- }
-
- /**
- * Example Table: TABLE_NAME: depictions
- * COLUMN_ID: unique id for the column
- * COLUMN_NAME: depiction name
- * COLUMN_LAST_USED: Time stamp for the previous usage of the depiction
- * COLUMN_TIMES_USED: Number of times the depiction was used previously
- */
-
- public static class Table {
- public static final String TABLE_NAME = "depictions";
- public static final String COLUMN_ID = "_id";
- static final String COLUMN_NAME = "name";
- static final String COLUMN_LAST_USED = "last_used";
- static final String COLUMN_TIMES_USED = "times_used";
-
-
- // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES.
- public static final String[] ALL_FIELDS = {
- COLUMN_ID,
- COLUMN_NAME,
- COLUMN_LAST_USED,
- COLUMN_TIMES_USED
- };
-
- static final String DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME;
-
- static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
- + COLUMN_ID + " INTEGER PRIMARY KEY,"
- + COLUMN_NAME + " STRING,"
- + COLUMN_LAST_USED + " INTEGER,"
- + COLUMN_TIMES_USED + " INTEGER"
- + ");";
-
- public static void onCreate(SQLiteDatabase db) {
- db.execSQL(CREATE_TABLE_STATEMENT);
- }
-
- public static void onDelete(SQLiteDatabase db) {
- db.execSQL(DROP_TABLE_STATEMENT);
- onCreate(db);
- }
-
- public static void onUpdate(SQLiteDatabase db, int from, int to) {
- if (from == to) {
- return;
- }
- }
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictsContentProvider.java
deleted file mode 100644
index 500d3e4ba..000000000
--- a/app/src/main/java/fr/free/nrw/commons/upload/structure/depictions/DepictsContentProvider.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package fr.free.nrw.commons.upload.structure.depictions;
-
-import android.annotation.SuppressLint;
-import android.content.ContentValues;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import org.jetbrains.annotations.NotNull;
-
-import javax.inject.Inject;
-
-import fr.free.nrw.commons.data.DBOpenHelper;
-import fr.free.nrw.commons.di.CommonsDaggerContentProvider;
-import timber.log.Timber;
-
-import static fr.free.nrw.commons.BuildConfig.DEPICTION_AUTHORITY;
-import static fr.free.nrw.commons.upload.structure.depictions.DepictionDao.Table.ALL_FIELDS;
-import static fr.free.nrw.commons.upload.structure.depictions.DepictionDao.Table.COLUMN_ID;
-import static fr.free.nrw.commons.upload.structure.depictions.DepictionDao.Table.TABLE_NAME;
-
-
-@SuppressLint("Registered")
-public class DepictsContentProvider extends CommonsDaggerContentProvider {
-
- private static final int DEPICTS = 1;
- private static final int DEPICTS_ID = 2;
- private static final String BASE_PATH = "depictions";
- public static final Uri BASE_URI = Uri.parse("content://" + DEPICTION_AUTHORITY + "/" + BASE_PATH);
-
- private static final UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
-
- static {
- uriMatcher.addURI(DEPICTION_AUTHORITY, BASE_PATH, DEPICTS);
- uriMatcher.addURI(DEPICTION_AUTHORITY, BASE_PATH + "/#", DEPICTS_ID);
- }
-
- @Inject
- DBOpenHelper dbOpenHelper;
-
- public static Uri uriForId(int id) {
- return Uri.parse(BASE_URI.toString() + "/" + id);
- }
-
- @Override
- public Cursor query(@NotNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
- SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(TABLE_NAME);
-
- int uriType = uriMatcher.match(uri);
-
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- Cursor cursor;
-
- switch (uriType) {
- case DEPICTS:
- cursor = queryBuilder.query(db, projection, selection, selectionArgs,
- null, null, sortOrder);
- break;
- case DEPICTS_ID:
- cursor = queryBuilder.query(db,
- ALL_FIELDS,
- "_id = ?",
- new String[]{uri.getLastPathSegment()},
- null,
- null,
- sortOrder
- );
- break;
- default:
- throw new IllegalArgumentException("Unknown URI" + uri);
- }
-
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
-
- return cursor;
- }
-
- @Override
- public String getType(@NotNull Uri uri) {
- return null;
- }
-
- @Override
- public Uri insert(@NotNull Uri uri, ContentValues values) {
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- long id;
- switch (uriType) {
- case DEPICTS:
- id = sqlDB.insert(TABLE_NAME, null, values);
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return Uri.parse(BASE_URI + "/" + id);
- }
-
- @Override
- public int delete(@NotNull Uri uri, String selection, String[] selectionArgs) {
- return 0;
- }
-
- @Override
- public int bulkInsert(@NotNull Uri uri, @NotNull ContentValues[] values) {
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- sqlDB.beginTransaction();
- switch (uriType) {
- case DEPICTS:
- for (ContentValues value : values) {
- Timber.d("Inserting! %s", value);
- sqlDB.insert(TABLE_NAME, null, value);
- }
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri);
- }
- sqlDB.setTransactionSuccessful();
- sqlDB.endTransaction();
- getContext().getContentResolver().notifyChange(uri, null);
- return values.length;
- }
-
- @Override
- public int update(@NotNull Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- int rowsUpdated;
- switch (uriType) {
- case DEPICTS:
- if (TextUtils.isEmpty(selection)) {
- int id = Integer.valueOf(uri.getLastPathSegment());
- rowsUpdated = sqlDB.update(TABLE_NAME,
- values,
- COLUMN_ID + " = ?",
- new String[]{String.valueOf(id)});
- } else {
- throw new IllegalArgumentException(
- "Parameter `selection` should be empty when updating an ID");
- }
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri + " with type " + uriType);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rowsUpdated;
- }
-}
\ No newline at end of file
diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/DepictsPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/DepictsPresenterTest.kt
index d502cf7aa..9f9cf40e2 100644
--- a/app/src/test/kotlin/fr/free/nrw/commons/upload/DepictsPresenterTest.kt
+++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/DepictsPresenterTest.kt
@@ -2,7 +2,6 @@ package fr.free.nrw.commons.upload
//import com.nhaarman.mockito_kotlin.verify
import com.nhaarman.mockitokotlin2.whenever
-import org.mockito.Mockito.verify
import fr.free.nrw.commons.category.CategoryItem
import fr.free.nrw.commons.explore.depictions.DepictsClient
import fr.free.nrw.commons.repository.UploadRepository
@@ -16,7 +15,7 @@ import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers
import org.mockito.Mock
-import org.mockito.Mockito
+import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
class DepictsPresenterTest {
@@ -50,7 +49,7 @@ class DepictsPresenterTest {
fun setUp() {
MockitoAnnotations.initMocks(this)
testScheduler = TestScheduler()
- depictedItem = DepictedItem("label", "desc", null, false, "entityId")
+ depictedItem = DepictedItem("label", "desc", "", false, "entityId")
depictedItems.add(depictedItem)
testObservable = Observable.just(depictedItem)
depictsPresenter = DepictsPresenter(repository, testScheduler, testScheduler, depictsClient)
@@ -62,7 +61,7 @@ class DepictsPresenterTest {
fun searchEnglishDepictionsTest() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
- whenever(repository?.searchAllEntities(ArgumentMatchers.anyString(), ArgumentMatchers.anyList())).thenReturn(Observable.empty())
+ whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("test")
verify(view)?.showProgress(true)
verify(view)?.showError(true)
@@ -75,7 +74,7 @@ class DepictsPresenterTest {
fun searchOtherLanguageDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
- whenever(repository?.searchAllEntities(ArgumentMatchers.anyString(), ArgumentMatchers.anyList())).thenReturn(Observable.empty())
+ whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("वी")
verify(view)?.showProgress(true)
verify(view)?.showError(true)
@@ -88,7 +87,7 @@ class DepictsPresenterTest {
fun searchForNonExistingDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
- whenever(repository?.searchAllEntities(ArgumentMatchers.anyString(), ArgumentMatchers.anyList())).thenReturn(Observable.empty())
+ whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.searchForDepictions("******")
verify(view)?.showProgress(true)
verify(view)?.setDepictsList(null)
@@ -101,7 +100,7 @@ class DepictsPresenterTest {
fun setSingleDepiction() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
- whenever(repository?.searchAllEntities(ArgumentMatchers.anyString(), ArgumentMatchers.anyList())).thenReturn(Observable.empty())
+ whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.onDepictItemClicked(depictedItem)
depictsPresenter?.verifyDepictions()
verify(view)?.goToNextScreen()
@@ -111,9 +110,9 @@ class DepictsPresenterTest {
fun setMultipleDepictions() {
whenever(repository?.sortBySimilarity(ArgumentMatchers.anyString())).thenReturn(Comparator { _, _ -> 1 })
whenever(repository?.selectedDepictions).thenReturn(depictedItems)
- whenever(repository?.searchAllEntities(ArgumentMatchers.anyString(), ArgumentMatchers.anyList())).thenReturn(Observable.empty())
+ whenever(repository?.searchAllEntities(ArgumentMatchers.anyString())).thenReturn(Observable.empty())
depictsPresenter?.onDepictItemClicked(depictedItem)
- val depictedItem2 = DepictedItem("label2", "desc2", null, false, "entityid2")
+ val depictedItem2 = DepictedItem("label2", "desc2", "", false, "entityid2")
depictsPresenter?.onDepictItemClicked(depictedItem2)
depictsPresenter?.verifyDepictions()
verify(view)?.goToNextScreen()