diff --git a/app/build.gradle b/app/build.gradle index 9fe3a6f83..9baaed622 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,22 +12,25 @@ dependencies { compile 'ch.acra:acra:4.7.0' compile 'org.mediawiki:api:1.3' compile 'commons-codec:commons-codec:1.10' + compile 'com.github.pedrovgs:renderers:3.3.3' + compile 'com.google.code.gson:gson:2.8.1' + compile 'com.jakewharton.timber:timber:4.5.1' + compile 'info.debatty:java-string-similarity:0.24' + compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.0@aar'){ + transitive=true + } compile "com.android.support:support-v4:${project.supportLibVersion}" compile "com.android.support:appcompat-v7:${project.supportLibVersion}" compile "com.android.support:design:${project.supportLibVersion}" + compile "com.android.support:cardview-v7:${project.supportLibVersion}" - compile 'com.google.code.gson:gson:2.8.0' compile "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION" - compile 'com.github.pedrovgs:renderers:3.3.3' annotationProcessor "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION" - compile 'com.jakewharton.timber:timber:4.5.1' + compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com.squareup.okio:okio:1.13.0' - compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.0@aar'){ - transitive=true - } compile 'io.reactivex.rxjava2:rxandroid:2.0.1' // Because RxAndroid releases are few and far between, it is recommended you also @@ -42,12 +45,12 @@ dependencies { compile 'com.facebook.stetho:stetho:1.5.0' testCompile 'junit:junit:4.12' - testCompile 'org.robolectric:robolectric:3.3.2' + testCompile 'org.robolectric:robolectric:3.4' testCompile 'com.squareup.okhttp3:mockwebserver:3.8.1' androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.8.1' androidTestCompile "com.android.support:support-annotations:${project.supportLibVersion}" - androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' + androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index f654dca7d..20802f6b7 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -25,6 +25,7 @@ import com.pedrogomez.renderers.RVRendererAdapter; import java.util.ArrayList; import java.util.Calendar; +import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -36,6 +37,7 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; import fr.free.nrw.commons.data.Category; import fr.free.nrw.commons.upload.MwVolleyApi; +import fr.free.nrw.commons.utils.StringSortingUtils; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; @@ -107,7 +109,7 @@ public class CategorizationFragment extends Fragment { RxTextView.textChanges(categoriesFilter) .takeUntil(RxView.detaches(categoriesFilter)) - .debounce(300, TimeUnit.MILLISECONDS) + .debounce(500, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(filter -> updateCategoryList(filter.toString())); return rootView; @@ -200,6 +202,7 @@ public class CategorizationFragment extends Fragment { ) .filter(categoryItem -> !containsYear(categoryItem.getName())) .distinct() + .sorted(sortBySimilarity(filter)) .observeOn(AndroidSchedulers.mainThread()) .subscribe( s -> categoriesAdapter.add(s), Timber::e, () -> { @@ -221,6 +224,12 @@ public class CategorizationFragment extends Fragment { ); } + private Comparator sortBySimilarity(final String filter) { + Comparator stringSimilarityComparator = StringSortingUtils.sortBySimilarity(filter); + return (firstItem, secondItem) -> stringSimilarityComparator + .compare(firstItem.getName(), secondItem.getName()); + } + private List getStringList(List input) { List output = new ArrayList<>(); for (CategoryItem item : input) { diff --git a/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java new file mode 100644 index 000000000..03b1469e0 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/StringSortingUtils.java @@ -0,0 +1,46 @@ +package fr.free.nrw.commons.utils; + +import java.util.Comparator; + +import info.debatty.java.stringsimilarity.Levenshtein; + +public class StringSortingUtils { + + private StringSortingUtils() { + //no-op + } + + /** + * Returns Comparator for sorting strings by its similarity with Levenshtein + * algorithm. By using this Comparator we get results from the highest to + * the lowest match. + * + * @param filter pattern to compare similarity + * @return Comparator with string similarity + */ + + public static Comparator sortBySimilarity(final String filter) { + return (firstItem, secondItem) -> { + double firstItemSimilarity = calculateSimilarity(firstItem, filter); + double secondItemSimilarity = calculateSimilarity(secondItem, filter); + return (int) Math.signum(secondItemSimilarity - firstItemSimilarity); + }; + } + + private static double calculateSimilarity(String firstString, String secondString) { + String longer = firstString.toLowerCase(); + String shorter = secondString.toLowerCase(); + + if (firstString.length() < secondString.length()) { + longer = secondString; + shorter = firstString; + } + int longerLength = longer.length(); + if (longerLength == 0) { + return 1.0; + } + + double distanceBetweenStrings = new Levenshtein().distance(longer, shorter); + return (longerLength - distanceBetweenStrings) / (double) longerLength; + } +} \ No newline at end of file diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index a8582166b..0dfd8396e 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -135,6 +135,7 @@ Llicencia desconocida Refrescar Permisu riquíu: llectura d\'almacenamientu esternu. L\'aplicación nun puede funcionar ensin él. + Permisu riquíu: escritura d\'almacenamientu esternu. L\'aplicación nun puede funcionar ensin él. Permisu opcional: llograr l\'allugamientu actual pa suxerir categoríes Aceutar Llugares cercanos @@ -194,4 +195,6 @@ Error al poner les fotos na caché Un títulu descriptivu únicu pal ficheru, que sirvirá para da-y nome al ficheru. Se pue usar llinguax normal con espacios. Nun amiestes la estensión del ficheru Por favor, describi l\'elementu multimedia tantu como sía posible: ¿ónde se tomó?, ¿qué amuesa?, ¿cuál ye\'l contestu? Por favor, describi los oxetos o persones. Revela la información que nun pueda aldovinase de mou cenciellu, por casu el momentu del día si ye un paisaxe. Si\'l mediu amuesa daqué desacostumao, esplica qué lo fai raro. + Usar almacenamientu esternu + Guardar nel preséu les imaxes tomaes cola cámara de la app diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c49cf7a51..e70b78c64 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -8,10 +8,10 @@ Regístrate Accediendo Espera un momento… - ¡Inicio de sesión exitoso! - ¡Inicio de sesión fallido! + Acceso correcto. + Acceso fallido. No se encontró el archivo. Prueba con otro. - ¡Autentificación fallida! + Falló la autenticación. ¡Empenzando a subir! ¡Se subieron %1$s! Pulsa para ver tu subida @@ -78,7 +78,7 @@ <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Normativa de privacidad</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a> Acerca de - Enviar comentarios (por e-mail) + Enviar comentarios (por correo) No se ha instalado ningún cliente de correo Categorías usadas recientemente Esperando la primera sincronización… @@ -135,6 +135,7 @@ Licencia desconocida Actualizar Permiso obligatorio: lectura de almacenamiento externo. La aplicación no puede funcionar sin él. + Permiso necesario: Escribir en almacenamiento externo. La aplicación no puede funcionar sin él. Permiso opcional: obtener la ubicación actual para sugerir categorías Aceptar Lugares cercanos @@ -194,4 +195,6 @@ Error mientras se guardaban imágenes en la caché Un título único descriptivo para el archivo, que servirá como un nombre de archivo. Puede usar un lenguaje claro con espacios. No incluya la extensión del archivo. Por favor, describa el elemento multimedia tanto como sea posible: ¿dónde fue tomado?, ¿qué muestra?, ¿cuál es el contexto? Por favor, describa los objetos o personas. Ofrezca la información que no puede ser inferida tan facilmente, por ejemplo el momento del día si es un paisaje. Si el medio muestra algo inusual, explique qué lo hace insual. + Utilizar almacenamiento externo + Guardar en el dispositivo imágenes capturadas con la cámara de la aplicación diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 8960ce8f5..ace1fac80 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -135,6 +135,7 @@ مجوز ناشناخته تازه‌کردن اجازه‌های مورد نیاز: مطالعهٔ حافظهٔ خارجی. اپلیکیشن بدون آن نمی‌تواند کار کند. + اجازه‌های مورد نیاز: نوشتن حافظهٔ خارجی. اپلیکیشن بدون آن نمی‌تواند کار کند. اجازه‌های اختیاری: دریافت موقعیت برای پیشنهاد رده تأیید مکان‌‌های اطراف @@ -194,4 +195,6 @@ خطا در زمان دریافت تصاویر عنوانی توصیفی و یکتا برای پرونده که به عنوان نام پرونده در نظر گرفته خواهد شد. ترجیحاً به زبان ساده باشد، می‌توانید فاصله هم به کار ببرید. پسوند پرونده را ننویسید. لطفاً تصویر را تا حد توان شرح دهید. کجا گرفته شده‌است؟ شامل چه چیزی می‌شود؟ لطفاً اشیا یا افراد را شرح دهید. اطلاعاتی که به راحتی قابل مشاهده هستند را صرفه‌نظر کنید. اگر چیزی در تصویر غیر طبیعی به نظر می‌رسد آن را شرح دهید. + استفاده از حافظهٔ خارجی + ذخیرهٔ تصویرهای گرفته شده توسط دوربین درونکار اپلیکیشن بر روی دستگاه شما diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 87601934a..06d359b84 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -135,6 +135,7 @@ Licenza descoñecida Refrescar Permiso necesarioː ler un almacenamento externo. A aplicación non pode funcionar sen isto. + Permiso necesario: Escribir en almacenamento externo. A aplicación non pode funcionar sen el. Permiso opcionalː obter a localización actual para suxerir categorías Aceptar Lugares próximos @@ -194,4 +195,6 @@ Erro mentras se gardaban as imaxes na caché Un título único descritivo para o ficheiro, que servirá como un nome de ficheiro. Pode usar unha linguaxe clara con espazos. Non inclúa a extensión do ficheiro Por favor, describa o ficheiro todo o posibleː Onde se gravou? Cal é o contexto? Por favor, describa os obxectos ou persoas. Indique información que non pode ser adiviñada de forma doada, por exemplo, a hora do día se é unha paisaxe. Se o ficheiro amosa algo pouco habitual, por favor, explique que é o que o fai excepcional. + Usar o almacenamento externo + Gardar as imaxes capturadas coa cámara do seu dispositivo diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 132f9b0ca..1d66c0278 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -131,6 +131,7 @@ अज्ञात लाइसेन्स ताजा करें अनिवार्य अनुमति: बाहरी स्मृति पढ़ें। एप इसके बिना कार्य नहीं करेगा। + अनिवार्य अनुमति:बाहरी कंप्यूटर स्टोरेज लिखना|इसके बिना एप कार्य नहीं करेगा। वैकल्पिक अनुमति: श्रेणी सुझाव हेतु वर्तमान स्थान ज्ञात करें ठीक है आसपास के स्थान @@ -190,4 +191,6 @@ चित्र कैशिंग करते समय त्रुटि फ़ाइल के लिए एक अद्वितीय वर्णनात्मक शीर्षक, जो एक फ़ाइल नाम के रूप में काम करेगा। आप रिक्त स्थान के साथ सादे भाषा का उपयोग कर सकते हैं। फ़ाइल विस्तार शामिल न करें कृपया मीडिया जितना संभव हो उतना बताएं: यह कहां लिया गया? यह क्या दिखाता है? संदर्भ क्या है? कृपया वस्तुओं या व्यक्तियों का वर्णन करें। ऐसी जानकारी का खुलासा करें जिसे आसानी से अनुमानित नहीं किया जा सकता, उदाहरण के लिए दिन का समय यदि यह परिदृश्य है। अगर मीडिया कुछ असामान्य दिखाता है, तो कृपया बताएं कि इसे क्या असामान्य बनाता है। + बाहरी स्टॉरज का पृयोग करे। + आप अपने डिवाइस के इन-ऐप कैमरा से ली गई तस्वीरों को सहेजें। diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index c0b346ee5..c5024a0dc 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -134,6 +134,7 @@ רישיון לא ידוע רענון הרשאה מחייבת: אחסון. היישום לא יכול לעבוד בלי זה. + נדרשת הרשאה: כתיבה לאחסון חיצוני. היישום לא יכול לעבוד בלי זה. הרשאה לא מחייבת: קבלת מיקום נוכחי בשביל הצעות קטגוריות אישור מקומות בסביבה @@ -190,4 +191,6 @@ שגיאה במשירת תמונות במטמון כותרת מתארת ייחודית לקובץ, שתשמש שם קובץ. אפשר להשתמש בשפה פשוטה עם רווחים. אין לכלול סיומת קובץ נא לתאר את המדיה כמה שיותר: איפה היא נוצרה? מה היא מראה? מה ההקשר? נא לתאר את העצמים או את האנשים. נא לחשוף מידע שאי־אפשר לנחש בקלות, למשל, הזמן ביום אם זאת תמונת נוף. אם המדיה מציגה משהו בלתי־רגיל, נא להסביר מה מיוחד בה. + להשתמש באחסון חיצוני + שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום במכשיר שלך diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index de5095d61..811846451 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -167,4 +167,5 @@ チュートリアル 説明がありません ウィキデータ項目 + 外部ストレージを使用 diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 41ad81fb1..04f51f247 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -185,4 +185,6 @@ keng Beschreiwung fonnt Commons-Fichierssäit Wikidata-Element + Externe Späicher benotzen + Biller späicheren déi mat der in-app Kamera vun Ärem Apparat gemaach goufen diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 76413d697..b35377915 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -55,6 +55,11 @@ Licence Nakts režīms CC0 + CC BY-SA 3.0 + CC BY 3.0 + CC BY-SA 4.0 + CC BY 4.0 + CC Zero Jums šķiet, ka sapratāt? Jā! Kategorijas @@ -67,6 +72,7 @@ Nosaukums + Apraksts Augšupielādēšanas datums Licence Koordinātas @@ -75,6 +81,7 @@ Augšupielādēt attēlu Lama Tulpe + Nekādu pašbilžu Atcelt Atvērt Aizvērt @@ -85,6 +92,7 @@ Iestatījumi Atsauksmes Iziet - Ievads + Apmācība apraksts nav atrasts + Izmantot ārējo krātuvi diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index f304bcc5f..03d8c28f2 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -24,7 +24,7 @@ १ संचिका अपभारीत आहे %d संचिका अपभारीत आहे - माझी अपभारणे + माझी अपभारणे प्रतिक्षावलीत ठेवले अपयशी %1$d%% पूर्ण @@ -42,6 +42,7 @@ सनोंद प्रवेश अशक्य - कृपया आपला परवलीचा शब्द तपासा अनेक अयशस्वी प्रयत्न.काही मिनीटांनंतर पुन्हा प्रयत्न करा. माफ करा,कॉमन्सवर हा सदस्य प्रतिबंधित आहे + आपण आपल्या दोन कारक प्रमाणिकरण कोड प्रदान करणे आवश्यक आहे. सनोंद प्रवेश अयशस्वी! अपभारण करा या संचास नाव द्या diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index ea217028b..3a8fe4435 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -135,6 +135,7 @@ Licensa sconossùa Rinfrësché Autorisassion necessaria: Lese n\'anmagasinament estern. L\'aplicassion a peul pa marcé sensa lòn. + Autorisassion necessaria: Scrive n\'anmagasinament estern. L\'aplicassion a peul pa marcé sensa \'d lòn. Autorisassion facoltativa: Oten-e la posission atual për dij sugeriment ëd categorìa Va bin Pòst davzin @@ -194,4 +195,6 @@ Eror antramentre ch\'as butavo le plance an memòria local Un tìtol dëscritiv ùnich për l\'archivi, che a servirà com nòm d\'archivi. A peul dovré un lengagi sempi con djë spassi. Ch\'a ancluda pa l\'estension dl\'archivi Për piasì, ch\'a descriva ël mojen mej ch\'a peul: Andoa a l\'é stàit fàit? Për piasì, ch\'a descriva j\'oget o le përson-e. Ch\'a arvela j\'anformassion ch\'a l\'é nen belfé andviné, për esempi l\'ora dël dì, s\'a l\'é un panorama. Si ël mojen a smon cheicòs ëd foravìa, për piasì ch\'a spiega lòn ch\'a lo rend foravìa. + Dovré n\'anmagasinament estern + Argistré le plance pijà con la màchina fòto ëd sò angign diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 7192a8f42..bd369bbb0 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -135,6 +135,7 @@ Licença desconhecida Atualizar Permissão necessária: Ler armazenamento externo. O aplicativo não pode funcionar sem isso. + Permissão necessária: Escreva armazenamento externo. A aplicação não pode funcionar sem isso. Permissão opcional: Obter a localização atual de sugestões de categoria OK Lugares próximos @@ -194,4 +195,6 @@ Erro durante o cache de imagens Um título descritivo exclusivo para o arquivo, que servirá como um nome de arquivo. Você pode usar linguagem simples com espaços. Não inclua a extensão do arquivo Por favor, descreva a mídia tanto quanto possível: onde foi tomada? O que isso mostra? Qual é o contexto? Descreva os objetos ou pessoas. Revelar informações que não podem ser facilmente adivinhadas, por exemplo, a hora do dia, se for uma paisagem. Se a mídia mostrar algo incomum, explique o que torna incomum. + Usar o armazenamento externo + Salvar as fotos tiradas com a câmera no aplicativo no seu dispositivo diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a2d790b68..5f9b2ac1f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -137,7 +137,8 @@ Нет описания Неизвестная лицензия Обновить - Требуемые разрешения: чтение с внешнего накопителя. Приложение не сможет функционировать без этого. + Требуемые разрешения: чтение с внешнего хранилища. Приложение не сможет функционировать без этого. + Требуемые разрешения: запись на внешнее хранилище. Приложение не сможет функционировать без этого. Необязательное разрешение: получение текущего местоположения для предложения категорий OK Места поблизости @@ -195,4 +196,6 @@ Страница файла на Викискладе Элемент Викиданных Ошибка при кэшировании картинок + Использовать внешнее хранилище + Сохранять изображения, сделанные с помощью встроенной камеры на устройстве diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 72ad5974f..490bd475d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -135,6 +135,7 @@ Okänd licens Uppdatera Nödvändig behörighet: Läsa extern lagring. Appen fungerar inte utan detta. + Nödvändig behörighet: Skriva till extern lagring. Appen kan inte fungera så här. Valfri behörighet: Hämta aktuell plats för kategoriförslag OK Platser i närheten @@ -194,4 +195,6 @@ Fel uppstod när bilder cachelagras En unik beskrivande titel för filen, som kommer att fungera som ett filnamn. Du kan använda klarspråk med mellanslag. Ta inte med filändelsen Beskriv mediafilen så mycket som möjligt. Var togs den? Vad visar den? Vad är sammanhanget? Beskriv föremålen eller personerna. Ge information som inte kan gissas fram, t.ex. tidpunkten om det är ett landskap. Om mediafilen visar någonting ovanligt, förklara vad som gör den ovanlig. + Använd extern lagring + Spara bilder som tas med kameran i appen på din enhet diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 0da4bf00d..5334f9a6c 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -125,6 +125,7 @@ Giấy phép không rõ Làm tươi Yêu cầu cấp phép: Đọc thiết bị lưu trữ bên ngoài. Ứng dụng cần được phép đọc thiết bị lưu trữ bên ngoài để hoạt động. + Yêu cầu cấp phép: Ghi vào thiết bị lưu trữ bên ngoài. Ứng dụng cần được phép ghi vào thiết bị lưu trữ bên ngoài để hoạt động. Tùy chọn cấp phép: Định vị hiện tại để nhận gợi ý thể loại OK Nơi Lân cận @@ -184,4 +185,6 @@ Xuất hiện lỗi khi đưa hình ảnh vào vùng nhớ đệm Tên ngắn và duy nhất cho tập tin sẽ được dùng làm tên tập tin. Có thể dùng thuật ngữ bình thường với khoảng cách. Đừng bao gồm phần mở rộng tập tin. Xin vui lòng miêu tả phương tiện càng đầy đủ càng tốt: Chụp ở đâu? Trong hình có gì? Bối cảnh làm sao? Xin vui lòng miêu tả các đối tượng và người trong hình. Cho biết những thông tin khó đoán ra, chẳng hạn giờ trong ngày nếu là phong cảnh. Nếu phương tiện có gì kỳ lạ, xin vui lòng giải thích tại sao nó kỳ lạ. + Sử dụng thiết bị lưu trữ bên ngoài + Lưu các hình ảnh được chụp bằng máy chụp hình trong ứng dụng vào thiết bị của bạn diff --git a/app/src/test/java/fr/free/nrw/commons/utils/StringSortingUtilsTest.java b/app/src/test/java/fr/free/nrw/commons/utils/StringSortingUtilsTest.java new file mode 100644 index 000000000..2fc2fac88 --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/utils/StringSortingUtilsTest.java @@ -0,0 +1,40 @@ +package fr.free.nrw.commons.utils; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.junit.Assert; +import org.junit.Test; + +public class StringSortingUtilsTest { + + @Test + public void testSortingNumbersBySimilarity() throws Exception { + List actualList = Arrays.asList("1234567", "4567", "12345", "123", "1234"); + List expectedList = Arrays.asList("1234", "12345", "123", "1234567", "4567"); + + Collections.sort(actualList, StringSortingUtils.sortBySimilarity("1234")); + Assert.assertEquals(expectedList, actualList); + } + + @Test + public void testSortingTextBySimilarity() throws Exception { + List actualList = Arrays.asList("The quick brown fox", + "quick brown fox", + "The", + "The quick ", + "The fox", + "brown fox", + "fox"); + List expectedList = Arrays.asList("The", + "The fox", + "The quick ", + "The quick brown fox", + "quick brown fox", + "brown fox", + "fox"); + + Collections.sort(actualList, StringSortingUtils.sortBySimilarity("The")); + Assert.assertEquals(expectedList, actualList); + } +} \ No newline at end of file