diff --git a/app/build.gradle b/app/build.gradle index 51d6f56b0..4358c4699 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,29 @@ android { } } + productFlavors { + prod { + buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\"" + buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" + buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.wikimedia.org/wikipedia/commons\"" + buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.org/wiki/\"" + buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.org/wiki/\"" + buildConfigField "String", "EVENTLOG_URL", "\"https://www.wikimedia.org/beacon/event\"" + buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\"" + } + + beta { + // What values do we need to hit the BETA versions of the site / api ? + buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.beta.wmflabs.org/w/api.php\"" + buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" + buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\"" + buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\"" + buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/wiki/\"" + buildConfigField "String", "EVENTLOG_URL", "\"https://commons.wikimedia.beta.wmflabs.org/beacon/event\"" + buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\"" + } + } + lintOptions { disable 'MissingTranslation' disable 'ExtraTranslation' diff --git a/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java b/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java deleted file mode 100644 index ecb465293..000000000 --- a/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package fr.free.nrw.commons; - -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.hamcrest.CoreMatchers.is; - -// TODO: use Robolectric and make it runnable without a connected device -@RunWith(AndroidJUnit4.class) -public class MediaTest { - @Test public void displayTitleShouldStripExtension() { - Media m = new Media("File:Example.jpg"); - Assert.assertThat(m.getDisplayTitle(), is("Example")); - } - - @Test public void displayTitleShouldUseSpaceForUnderscore() { - Media m = new Media("File:Example 1_2.jpg"); - Assert.assertThat(m.getDisplayTitle(), is("Example 1 2")); - } -} diff --git a/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java b/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java deleted file mode 100644 index aa32d2637..000000000 --- a/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package fr.free.nrw.commons; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.ArrayList; -import java.util.List; - -import fr.free.nrw.commons.location.LatLng; -import fr.free.nrw.commons.nearby.NearbyBaseMarker; -import fr.free.nrw.commons.nearby.NearbyController; -import fr.free.nrw.commons.nearby.Place; - -import static org.hamcrest.CoreMatchers.is; - -@RunWith(AndroidJUnit4.class) -public class NearbyControllerTest { - private Context instrumentationContext; - - @Before - public void setup() { - instrumentationContext = InstrumentationRegistry.getTargetContext(); - } - - @Test public void testNullAttractions() { - LatLng location = new LatLng(0, 0, 0); - - List options = - NearbyController.loadAttractionsFromLocationToBaseMarkerOptions( - location, - null, - instrumentationContext - ); - - Assert.assertThat(options.size(), is(0)); - } - - @Test public void testEmptyList() { - LatLng location = new LatLng(0, 0, 0); - List emptyList = new ArrayList<>(); - - List options = - NearbyController.loadAttractionsFromLocationToBaseMarkerOptions( - location, - emptyList, - instrumentationContext - ); - - Assert.assertThat(options.size(), is(0)); - } -} diff --git a/app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java b/app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java deleted file mode 100644 index 5c83ef691..000000000 --- a/app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java +++ /dev/null @@ -1,61 +0,0 @@ -package fr.free.nrw.commons; - -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.net.URLEncoder; - -import static org.hamcrest.CoreMatchers.is; - -// TODO: use Robolectric and make it runnable without a connected device -@RunWith(AndroidJUnit4.class) -public class PageTitleTest { - @Test public void displayTextShouldNotBeUnderscored() { - Assert.assertThat(new PageTitle("Ex_1 ").getDisplayText(), - is("Ex 1")); - } - - @Test public void moreThanTwoColons() { - Assert.assertThat(new PageTitle("File:sample:a.jpg").getPrefixedText(), - is("File:Sample:a.jpg")); - } - - @Test public void getTextShouldReturnWithoutNamespace() { - Assert.assertThat(new PageTitle("File:sample.jpg").getText(), - is("Sample.jpg")); - } - - - @Test public void capitalizeNameAfterNamespace() { - Assert.assertThat(new PageTitle("File:sample.jpg").getPrefixedText(), - is("File:Sample.jpg")); - } - - @Test public void prefixedTextShouldBeUnderscored() { - Assert.assertThat(new PageTitle("Ex 1 ").getPrefixedText(), - is("Ex_1")); - } - - @Test public void getMobileUriForTest() { - Assert.assertThat(new PageTitle("Test").getMobileUri().toString(), - is("https://commons.m.wikimedia.org/wiki/Test")); - } - - @Test public void spaceBecomesUnderscoreInUri() { - Assert.assertThat(new PageTitle("File:Ex 1.jpg").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/File:Ex_1.jpg")); - } - - @Test public void leaveSubpageNamesUncapitalizedInUri() { - Assert.assertThat(new PageTitle("User:Ex/subpage").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/User:Ex/subpage")); - } - - @Test public void unicodeUri() throws Throwable { - Assert.assertThat(new PageTitle("User:例").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/User:" + URLEncoder.encode("例", "utf-8"))); - } -} diff --git a/app/src/betaDebug/res/drawable-hdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 000000000..46c0a4202 Binary files /dev/null and b/app/src/betaDebug/res/drawable-hdpi/ic_launcher.png differ diff --git a/app/src/betaDebug/res/drawable-mdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 000000000..2e5499676 Binary files /dev/null and b/app/src/betaDebug/res/drawable-mdpi/ic_launcher.png differ diff --git a/app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 000000000..0f0c702ed Binary files /dev/null and b/app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png differ diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 4c44f00f3..347a51735 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -49,12 +49,6 @@ import timber.log.Timber; public class CommonsApplication extends Application { private Account currentAccount = null; // Unlike a savings account... - public static final String API_URL = "https://commons.wikimedia.org/w/api.php"; - public static final String IMAGE_URL_BASE = "https://upload.wikimedia.org/wikipedia/commons"; - public static final String HOME_URL = "https://commons.wikimedia.org/wiki/"; - public static final String MOBILE_HOME_URL = "https://commons.m.wikimedia.org/wiki/"; - public static final String EVENTLOG_URL = "https://www.wikimedia.org/beacon/event"; - public static final String EVENTLOG_WIKI = "commonswiki"; public static final Object[] EVENT_UPLOAD_ATTEMPT = {"MobileAppUploadAttempts", 5334329L}; public static final Object[] EVENT_LOGIN_ATTEMPT = {"MobileAppLoginAttempts", 5257721L}; @@ -90,7 +84,7 @@ public class CommonsApplication extends Application { public MediaWikiApi getMWApi() { if (api == null) { - api = new ApacheHttpClientMediaWikiApi(API_URL); + api = new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST); } return api; } diff --git a/app/src/main/java/fr/free/nrw/commons/PageTitle.java b/app/src/main/java/fr/free/nrw/commons/PageTitle.java index eb8a61284..6229e7ef9 100644 --- a/app/src/main/java/fr/free/nrw/commons/PageTitle.java +++ b/app/src/main/java/fr/free/nrw/commons/PageTitle.java @@ -58,7 +58,7 @@ public class PageTitle { */ @NonNull public Uri getCanonicalUri() { - String uriStr = CommonsApplication.HOME_URL + Uri.encode(getPrefixedText(), ":/"); + String uriStr = BuildConfig.HOME_URL + Uri.encode(getPrefixedText(), ":/"); return Uri.parse(uriStr); } @@ -71,7 +71,7 @@ public class PageTitle { */ @NonNull public Uri getMobileUri() { - String uriStr = CommonsApplication.MOBILE_HOME_URL + Uri.encode(getPrefixedText(), ":/"); + String uriStr = BuildConfig.MOBILE_HOME_URL + Uri.encode(getPrefixedText(), ":/"); return Uri.parse(uriStr); } diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 7e75f8718..ebebd4891 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -40,7 +40,6 @@ import javax.xml.transform.stream.StreamResult; import fr.free.nrw.commons.settings.Prefs; import timber.log.Timber; - public class Utils { // Get SHA1 of file from input stream @@ -80,10 +79,12 @@ public class Utils { } } - /** Fix Html.fromHtml is deprecated problem + /** + * Fix Html.fromHtml is deprecated problem + * * @param source provided Html string * @return returned Spanned of appropriate method according to version check - * */ + */ public static Spanned fromHtml(String source) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY); @@ -127,7 +128,7 @@ public class Utils { public static String makeThumbBaseUrl(String filename) { String name = new PageTitle(filename).getPrefixedText(); String sha = new String(Hex.encodeHex(DigestUtils.md5(name))); - return String.format("%s/%s/%s/%s", CommonsApplication.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name)); + return String.format("%s/%s/%s/%s", BuildConfig.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name)); } public static String getStringFromDOM(Node dom) { @@ -277,6 +278,6 @@ public class Utils { } public static boolean isDarkTheme(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme",false); + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme", false); } } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java b/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java index b512f9647..eabbbf82e 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java @@ -41,12 +41,12 @@ public class LogBuilder { try { fullData.put("schema", schema); fullData.put("revision", rev); - fullData.put("wiki", CommonsApplication.EVENTLOG_WIKI); + fullData.put("wiki", BuildConfig.EVENTLOG_WIKI); data.put("device", EventLog.DEVICE); data.put("platform", "Android/" + Build.VERSION.RELEASE); data.put("appversion", "Android/" + BuildConfig.VERSION_NAME); fullData.put("event", data); - return new URL(CommonsApplication.EVENTLOG_URL + "?" + Utils.urlEncode(fullData.toString()) + ";"); + return new URL(BuildConfig.EVENTLOG_URL + "?" + Utils.urlEncode(fullData.toString()) + ";"); } catch (MalformedURLException | JSONException e) { throw new RuntimeException(e); } diff --git a/app/src/main/res/drawable/round_icon_airport.xml b/app/src/main/res/drawable/round_icon_airport.xml index 9e224165a..4a24f240b 100644 --- a/app/src/main/res/drawable/round_icon_airport.xml +++ b/app/src/main/res/drawable/round_icon_airport.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_bridge.xml b/app/src/main/res/drawable/round_icon_bridge.xml index c85f8d6e2..efe428b80 100644 --- a/app/src/main/res/drawable/round_icon_bridge.xml +++ b/app/src/main/res/drawable/round_icon_bridge.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_church.xml b/app/src/main/res/drawable/round_icon_church.xml index e861822d1..c27a52669 100644 --- a/app/src/main/res/drawable/round_icon_church.xml +++ b/app/src/main/res/drawable/round_icon_church.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_city.xml b/app/src/main/res/drawable/round_icon_city.xml index 6723ab959..ce4cc5c44 100644 --- a/app/src/main/res/drawable/round_icon_city.xml +++ b/app/src/main/res/drawable/round_icon_city.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_forest.xml b/app/src/main/res/drawable/round_icon_forest.xml index c735354bb..c04d643ab 100644 --- a/app/src/main/res/drawable/round_icon_forest.xml +++ b/app/src/main/res/drawable/round_icon_forest.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_gatehouse.xml b/app/src/main/res/drawable/round_icon_gatehouse.xml index 8c282ac82..7d04491fa 100644 --- a/app/src/main/res/drawable/round_icon_gatehouse.xml +++ b/app/src/main/res/drawable/round_icon_gatehouse.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_generic_building.xml b/app/src/main/res/drawable/round_icon_generic_building.xml index a3b26f7b3..9e8f13593 100644 --- a/app/src/main/res/drawable/round_icon_generic_building.xml +++ b/app/src/main/res/drawable/round_icon_generic_building.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_house.xml b/app/src/main/res/drawable/round_icon_house.xml index 35bf984a6..e69e05eba 100644 --- a/app/src/main/res/drawable/round_icon_house.xml +++ b/app/src/main/res/drawable/round_icon_house.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_island.xml b/app/src/main/res/drawable/round_icon_island.xml index 0f70b5aab..940ccd9d4 100644 --- a/app/src/main/res/drawable/round_icon_island.xml +++ b/app/src/main/res/drawable/round_icon_island.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_milestone.xml b/app/src/main/res/drawable/round_icon_milestone.xml index b105ea3cd..23eb5142b 100644 --- a/app/src/main/res/drawable/round_icon_milestone.xml +++ b/app/src/main/res/drawable/round_icon_milestone.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_mountain.xml b/app/src/main/res/drawable/round_icon_mountain.xml index 1551ede7f..46c9999a0 100644 --- a/app/src/main/res/drawable/round_icon_mountain.xml +++ b/app/src/main/res/drawable/round_icon_mountain.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_ocean.xml b/app/src/main/res/drawable/round_icon_ocean.xml index 22b903104..7f62065aa 100644 --- a/app/src/main/res/drawable/round_icon_ocean.xml +++ b/app/src/main/res/drawable/round_icon_ocean.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_park.xml b/app/src/main/res/drawable/round_icon_park.xml index 877c5fcd4..ed19fe8de 100644 --- a/app/src/main/res/drawable/round_icon_park.xml +++ b/app/src/main/res/drawable/round_icon_park.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_railway_station.xml b/app/src/main/res/drawable/round_icon_railway_station.xml index 1c89d2920..5a0520432 100644 --- a/app/src/main/res/drawable/round_icon_railway_station.xml +++ b/app/src/main/res/drawable/round_icon_railway_station.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_river.xml b/app/src/main/res/drawable/round_icon_river.xml index c7304cc10..27dbaab62 100644 --- a/app/src/main/res/drawable/round_icon_river.xml +++ b/app/src/main/res/drawable/round_icon_river.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_road.xml b/app/src/main/res/drawable/round_icon_road.xml index a556a9efc..4c5cb98ef 100644 --- a/app/src/main/res/drawable/round_icon_road.xml +++ b/app/src/main/res/drawable/round_icon_road.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_school.xml b/app/src/main/res/drawable/round_icon_school.xml index 22eef79cf..303610416 100644 --- a/app/src/main/res/drawable/round_icon_school.xml +++ b/app/src/main/res/drawable/round_icon_school.xml @@ -1,6 +1,5 @@ - diff --git a/app/src/main/res/drawable/round_icon_waterfall.xml b/app/src/main/res/drawable/round_icon_waterfall.xml index 420704690..a02541583 100644 --- a/app/src/main/res/drawable/round_icon_waterfall.xml +++ b/app/src/main/res/drawable/round_icon_waterfall.xml @@ -1,18 +1,17 @@ - - - - - - - - - - - - - - - +android:viewportWidth="235.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_place.xml b/app/src/main/res/layout/item_place.xml index 1c83aef53..88784857b 100644 --- a/app/src/main/res/layout/item_place.xml +++ b/app/src/main/res/layout/item_place.xml @@ -1,66 +1,68 @@ - - + + + + + android:layout_height="wrap_content" + android:layout_alignTop="@id/distance" + android:layout_marginLeft="16dp" + android:layout_marginStart="16dp" + android:layout_toEndOf="@id/icon" + android:layout_toLeftOf="@id/distance" + android:layout_toRightOf="@id/icon" + android:layout_toStartOf="@id/distance" + android:ellipsize="end" + android:maxLines="2" + android:textAppearance="@style/TextAppearance.AppCompat.Body2" + tools:text="@string/placeholder_place_name" + /> - + - - - - - - - - \ No newline at end of file + diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 8f5eaa510..16e241561 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -147,6 +147,9 @@ Deskrivadur Amañ e lakaer titl ar media. Gallout a ra bezañ hir-mat ha mont dre meur a linenn. Spi hon eus e vo bravik an disoc\'h koulskoude. Deiziad enporzhiañ + Aotre-implijout + Daveennoù + N\'eo ket bet pourchaset Deuit da vezañ un amprouer beta En em enskrivañ en hor c\'hanol beta war Google Play ha kaout ur rakmoned d\'an arc\'hwelioù nevez d\'an drein difaziet Ober gant Wikidata diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index d74b5b900..a9b886bcf 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -76,6 +76,8 @@ Lizentzia Aurreko izenburu/deskribapena erabili Oraingo kokapena automatikoki lortu + Gau modua + Gai iluna erabili Aitortu-PartekatuBerdin 4.0 Aitortu 4.0 Aitortu-PartekatuBerdin 3.0 @@ -115,15 +117,29 @@ Izenburua Fitxategiaren izenburua Deskribapena + Igoera data Lizentzia Koordenatuak Ez da eskeini Beta testatzaile bihurtu Wikidata erabili (Erne:hau kentzeak mugikorrak datu asko kontsumitzea ekar dezake) + Gehienezko muga + 500 baino gehiago ezin dira erakutsi Commonsen logoa Atzealdeko irudia + Media irudiak kale egin du + Ez da irudirik aurkitu + Igo irudia + Zao Mendia + Llamak + Ortzadar zubia + Tulipa Selfirik ez + Jabetza irudia + Ongi etorri Wikipedia + Ongi etorri copyright-a + Sidneiko Opera Etxea Utzi Ireki Itxi @@ -132,9 +148,11 @@ Gertukoak Honi buruz Ezarpenak + Atzeraelikadura Saioa itxi - Sarrera + Tutoriala + Deskripziorik ez da aurkitu Artxibo orrialde komuna - WikiData Artikulua + Wikidata itema Argazkiak hartzerakoan sortutako akatsa diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 3c1ec8baf..0254a2721 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -20,11 +20,11 @@ اتمام بارگذاری %1$s %1$s بارگذاری نشد برای دیدن انگشت بزنید - - یک پرونده در حال بارگذاری + + %d پرونده در حال بارگذاری %d پرونده در حال بارگذاری - بارگذاری‌های من + بارگذاری‌های اخیر من در صف ناموفق بود %1$d٪ کامل شد @@ -42,6 +42,7 @@ ناتوانی در ورود - لطفاً گذرواژه‌یتان را بررسی کنید تلاش ناموفق بیش از حد. لطفاً چند دقیقهٔ دیگر دوباره تلاش کنید پوزش، کاربر در ویکی‌انبار بسته شده‌است + باید تأیید دومرحله‌ای را فعال کنید. ورود ناموفق بود بارگذاری نام این مجموعه @@ -49,17 +50,21 @@ بارگذاری جستجوی رده‌ها ذخیره - - هنوز بارگذاری نشده است - یک بارگذاری شد + تازه کردن + مکان‌یاب در دستگاه شما خاموش است. آیا دوست دارید فعال شود؟ + فعال کردن مکان‌یاب + هنوز هیچ بارگذاری + + \@string/contributions_subtitle_zero + بارگذاری شد %d بارگذاری شد - - شروع بارگذاری پرونده - شروع بارگذاری %d پرونده + + شروع %d بارگذاری پرونده + شروع بارگذاری %d پرونده - - ۱ بارگذاری + + %d بارگذاری %d بارگذاری رده‌ای منطبق با %1$s یافت نشد @@ -68,9 +73,10 @@ تنظیمات ثبت نام درباره - نرم‌افزار متن‌باز آزاد تحت <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">مجوز آپاچی نسخهٔ ۲</a>\n\nویکی‌انبار و نشانش یک نشان تجاری‌ست و با اجازهٔ بنیاد ویکی‌مدیا استفاده می‌شود. ما زیرمجموعه یا شعبهٔ بنیاد نیستیم. + نرم‌افزار متن‌باز آزاد تحت <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">مجوز آپاچی نسخهٔ ۲</a>\n\n%1$s و نشانش یک نشان تجاری‌ست و با اجازهٔ بنیاد ویکی‌مدیا استفاده می‌شود. ما زیرمجموعه یا شعبهٔ بنیاد نیستیم. <a href=\"https://github.com/commons-app/apps-android-commons\">Source</a> and <a href=\"https://commons-app.github.io/\">وب‌سایت</a> در گیت‌هاب. ایجاد یک <a href=\"https://github.com/commons-app/apps-android-commons/issues\">درخواست در گیت‌هاب</a> برای گزارش باگ و یا پیشنهاد یک خصوصیت جدید. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">سیاست حفظ حریم خصوصی</a> + <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">مجوز</a> درباره ارسال بازخورد (از طریق ایمیل) نرم‌افزار ایمیل نصب نیست @@ -80,11 +86,16 @@ تلاش مجدد لغو این نگاره تحت مجوز %1$s است + با بارگذاری این تصویر، تأیید می‌کنم که این اثر کار خودم است و از محتوای دارای حق تکثیر یا سلفی برای ایجاد آن استفاده نکرده‌ام و شرایط ذکر شده در By submitting this picture, I declare that this is my own work, that it does not contain copyrighted material or selfies, and otherwise adheres to <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">سیاست‌های ویکی‌انبار</a> را رعایت می‌کند. دریافت مجوز از عنوان/توضیحات پیشین استفاده کنید دریافت خودکار موقعیت کنونی درحال دریافت موقعیت برای پیشنهاد رده در صورتی که برچسب جغرافیایی وجود نداشته باشد. + حالت شبانه + استفاده از حالت تیره + CC Attribution-ShareAlike 4.0 + Attribution 4.0 CC Attribution-ShareAlike 3.0 CC Attribution 3.0 CC0 @@ -127,8 +138,60 @@ اجازه‌های اختیاری: دریافت موقعیت برای پیشنهاد رده تأیید مکان‌‌های اطراف + مکانی در نزدیکی یافت نشد هشدار پرونده در ویکی‌انبار موجود است. آیا مطمئنید که می‌خواهید ادامه دهید؟ بله خیر + عنوان + عنوان رسانه + توضیح + توضیحات رسانه اینجا می‌روند. امکان دارد طولانی باشد و نیاز به چند خط شدن داشته باشد. امیدواریم خوب دیده شود. + تاریخ بارگذاری + مجوز + مختصات‌ها + ارائه نشده است + آزمایشگر نسخهٔ آزمایشی شوید + به گروه آزمایشی ما در گوگل‌پلی بپیوندید و از خصوصیات جدید و خطاهای رفع‌شده زودتر از دیگران برخوردار شوید. + استفاده از ویکی‌داده + (هشدار: غیرفعال کردن این ممکن است حجم زیادی از اینترنت تلفن همراه را مصرف کند) + کد 2FA + محدودیت بارگذاری اخیر من + حداکثر محدودیت + عدم توانایی در نمایش بیش از ۵۰۰ مورد + تنظیم محدودیت بارگذاری‌های اخیر + تأیید دومرحله‌ای الان پشتیبانی نمی‌شود. + آیا واقعاً قصد خروج از سامانه را دارید؟ + نشان ویکی‌انبار + تصویر پس‌زمینه + خطای تصویر رسانه + تصویری یافت نشد + بارگذاری تصویر + کوه زائو + لاما + رینبو بریج + لاله + سلفی نه + تصویر اختصاصی + به ویکی‌پدیا خوش‌آمدید + حق‌تکثیر خوش‌آمدگویی + خانه اپرای سیدنی + لغو + باز کردن + بستن + خانه + بارگذاری + در نزدیکی + درباره + تنظیمات + بازخورد + خروج + آموزش + مکان‌های اطراف بدون اجازه دادن به مکان‌یاب مقدور نیست + توضیحی یافت نشد + صفحهٔ دروند در ویکی‌انبار + آیتم ویکی‌داده + خطا در زمان دریافت تصاویر + عنوانی توصیفی و یکتا برای پرونده که به عنوان نام پرونده در نظر گرفته خواهد شد. ترجیحاً به زبان ساده باشد، می‌توانید فاصله هم به کار ببرید. پسوند پرونده را ننویسید. + لطفاً تصویر را تا حد توان شرح دهید. کجا گرفته شده‌است؟ شامل چه چیزی می‌شود؟ لطفاً اشیا یا افراد را شرح دهید. اطلاعاتی که به راحتی قابل مشاهده هستند را صرفه‌نظر کنید. اگر چیزی در تصویر غیر طبیعی به نظر می‌رسد آن را شرح دهید. diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 6736b0bb8..b33b59fba 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -176,5 +176,5 @@ Bevezető nincs leírás Commons szócikk - Wikidata tétel + Wikidata-elem diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index 1e3c13b81..7e1bfb282 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -103,7 +103,8 @@ An animal. See [[:d:Q42569|Wikidata item Q42569]] for a list of possible translations. A bridge in Japan. See [[:d:Q1046736|Wikidata item Q1046736]] for a list of possible translations. A flower. See [[:d:Q93201|Wikidata item Q93201]] for a list of possible translations. - Welcome Wikipedia + Description of [https://github.com/commons-app/apps-android-commons/blob/master/app/src/main/res/drawable-hdpi/welcome_wikipedia.png the image] displayed on the welcome screen to illustrate {{msg-wm|Commons-android-strings-welcome wikipedia text}} and {{msg-wm|Commons-android-strings-welcome wikipedia subtext}}. + Description of [https://github.com/commons-app/apps-android-commons/blob/master/app/src/main/res/drawable-hdpi/welcome_copyright.png the image] displayed on the welcome screen to illustrate {{msg-wm|Commons-android-strings-welcome copyright text}} and {{msg-wm|Commons-android-strings-welcome copyright subtext}}. A building in the city of Sydney. See [[:d:Q45178|Wikidata item Q45178]] for a list of possible translations. {{Identical|Cancel}} {{Identical|Open}} diff --git a/app/src/main/res/values-sd/strings.xml b/app/src/main/res/values-sd/strings.xml index 00bc35c68..36a914281 100644 --- a/app/src/main/res/values-sd/strings.xml +++ b/app/src/main/res/values-sd/strings.xml @@ -41,7 +41,7 @@ ناقابلِ داخل ٿيڻ - براءِ مھرباني پنھنجو يُوزرنانءُ چڪاسيو ناقابل داخل ٿيڻ - براءِ مھرباني پنھنجو ڳجھولفظ چڪاسيو ھيڪانديون ناڪام ڪوششون. براءِ مھرباني ڪجھ منٽن کانپوءِ ٻيھر ڪوشش ڪريو. - افسوس، ھي يوزر العام تي بندشيل آھي + افسوس، ھي واھپ العام تي بندشيل آھي داخل ٿيڻ ناڪام چاڙھيو ھن سيٽ کي نالو ڏيو diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index e206e3b65..a1c32f2ee 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -16,6 +16,7 @@ اپ لوڈ %1$s شروع تھیندا پئے %1$s اپ لوڈ تھیندا پئے %1$s اپ لوڈ پورا تھیندا پئے + ݙیکھݨ کیتے انگل پھیرو میݙے حالیہ اپ لوڈ قطار وچ ناکام @@ -50,6 +51,7 @@ ڈاؤن لوڈ ، لہاوݨ لائیسنس رات آلا مزاج + گھاٹا تھیم ورتو سی سی او سی سی زیرو براہ مہربانی اپ لوڈ نہ کرو @@ -72,6 +74,7 @@ عنوان میڈیا دا عنوان تفصیل + اپ لوڈ تھیوݨ دی تاریخ لائیسنس کوآرڈینیٹ کجھ نی ݙسیا diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 746d3c11d..679703b80 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -81,7 +81,7 @@ Налаштування Зареєструватися Про програму - Програмне забезпечення з відкритим кодом випущено під <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">ліцензією Apache в.2</a>. Вікісховище і його логотип є товарними знаками Фонду Вікімедіа і використовуються за дозволом Фонду Вікімедіа. Ми не користуємось підтримкою Фонду Вікімедіа і не є його афіліатом. + Програмне забезпечення з відкритим кодом випущено під <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">ліцензією Apache в.2</a>. 1$s і його логотип є товарними знаками Фонду Вікімедіа і використовуються за дозволом Фонду Вікімедіа. Ми не користуємось підтримкою Фонду Вікімедіа і не є його афіліатом. <a href=\"https://github.com/commons-app/apps-android-commons\">Вихідний код</a> і <a href=\"https://commons-app.github.io/\">веб-сайт</a> на GitHub. Створіть нове <a href=\"https://github.com/commons-app/apps-android-commons/issues\">завдання на GitHub</a> для повідомлення про баги або для висловлення пропозицій. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Політика приватності</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Автори</a> @@ -94,6 +94,7 @@ Повторити Скасувати Це зображення буде ліцензоване згідно з %1$s + Подаючи це зображення, я підтверджую, що це моя власна робота, яка не містить захищених авторським правом матеріалів чи селфі, а також відповідає <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/uk\">правилам Вікісховища</a>. Завантажити Ліцензія Використати попередню назву/опис @@ -196,6 +197,9 @@ Посібник Місця поблизу неможливо показати без дозволу на визначення місця розташування. опис не знайдено - Стаття на Вікісховищі + Сторінка файлу у Вікісховищі Елемент Вікіданих + Помилка кешування зображень + Унікальна описова назва файлу. Ви можете використовувати простий текст з пробілами. Не вказуйте розширення файлу + Будь ласка, докладно опишіть файл: де його було зроблено? що на ньому зображено? який контекст? Будь ласка, опишіть об\'єкти чи осіб. Додайте інформацію, яку не можна легко здогадатися, наприклад, пору доби для фотографії пейзажу. Якщо зображено щось незвичайне, постарайтеся пояснити, що робить його незвичайним. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index f53e03169..38f6d3987 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -39,6 +39,7 @@ Không thể đăng nhập – xin vui lòng kiểm tra mật khẩu Đã đăng nhập thất bại quá nhiều lần. Xin vui lòng thử lại trong vòng vài phút. Rất tiếc, người dùng này đã bị cấm tại Commons + Bạn phải cung cấp mã xác thực dùng hai nhân tố. Đăng nhập thất bại Tải lên Đặt tên nhóm này @@ -47,6 +48,7 @@ Tìm thể loại Lưu Làm mới + Chức năng GPS đang tắt trên thiết bị của bạn. Bạn có muốn bật nó lên? Bật GPS Chưa có tập tin tải lên @@ -74,6 +76,7 @@ Thử lại Hủy bỏ Hình này sẽ được phát hành theo giấy phép %1$s + Với việc đăng hình này, tôi tuyên bố rằng nó là tác phẩm của chính mình, rằng nó không chứa nội dung có bản quyền hoặc ảnh tự chụp, và về mặt khác thì hoàn toàn tuân theo <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines?uselang=vi\">các quy định Wikimedia Commons</a>. Tải về Giấy phép Sử dụng tiêu đề/miêu tả trước @@ -125,6 +128,7 @@ 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 + Không tìm thấy nơi lân cận Cảnh báo Tập tin này đã tồn tại ở Commons. Bạn có chắc chắn muốn tiếp tục? @@ -141,15 +145,26 @@ Tham gia kênh thử nghiệm của chúng tôi trên Google Play và nhận các tính năng mới cùng những bản sửa lỗi sớm hơn Dùng Wikidata (Cảnh báo: tắt đi có thể tăng sử dụng dữ liệu di động rất lớn) + Mã Hai Nhân tố + Giới hạn Tải lên Gần đây của Tôi Tối đa + Không thể hiển thị hơn 500 cái + Đặt Giới hạn Tải lên Gần đây + Hiện chưa hỗ trợ xác thực dùng hai nhân tố. + Bạn có chắc chắn muốn đăng xuất? Biểu trưng Commons Hình nền + Hình ảnh bị Thất bại Không tìm thấy Hình ảnh Tải lên Hình Núi Zaō Lạc đà không bướu Cầu Cầu vồng Tu-líp + Không cho phép Ảnh tự chụp + Hình có Bản quyền + Hoan nghênh: Wikipedia + Hoan nghênh: Bản quyền Nhà hát Opera Sydney Hủy bỏ Mở @@ -162,5 +177,11 @@ Phản hồi Đăng xuất Hướng dẫn + Cần có quyền truy cập vị trí của bạn để hiển thị các địa điểm lân cận + không tìm thấy miêu tả + Trang tập tin Commons Khoản mục Wikidata + 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ạ. diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 01401aa47..828d5a600 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,7 +3,6 @@ - #90000000 #ffffffff #000000 #ffffff diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index fe2674a9a..40c859118 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,7 +1,4 @@ - 120dp - 4dp - 8dp 240dp 48dp diff --git a/app/src/test/java/fr/free/nrw/commons/MediaTest.java b/app/src/test/java/fr/free/nrw/commons/MediaTest.java new file mode 100644 index 000000000..21cfc2c34 --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/MediaTest.java @@ -0,0 +1,25 @@ +package fr.free.nrw.commons; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) +public class MediaTest { + @Test + public void displayTitleShouldStripExtension() { + Media m = new Media("File:Example.jpg"); + assertThat(m.getDisplayTitle(), is("Example")); + } + + @Test + public void displayTitleShouldUseSpaceForUnderscore() { + Media m = new Media("File:Example 1_2.jpg"); + assertThat(m.getDisplayTitle(), is("Example 1 2")); + } +} diff --git a/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java b/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java new file mode 100644 index 000000000..6ae2063da --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java @@ -0,0 +1,44 @@ +package fr.free.nrw.commons; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.List; + +import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.nearby.NearbyBaseMarker; +import fr.free.nrw.commons.nearby.Place; + +import static fr.free.nrw.commons.nearby.NearbyController.loadAttractionsFromLocationToBaseMarkerOptions; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) +public class NearbyControllerTest { + + @Test + public void testNullAttractions() { + LatLng location = new LatLng(0, 0, 0); + + List options = loadAttractionsFromLocationToBaseMarkerOptions( + location, null, RuntimeEnvironment.application); + + assertThat(options.size(), is(0)); + } + + @Test + public void testEmptyList() { + LatLng location = new LatLng(0, 0, 0); + List emptyList = new ArrayList<>(); + + List options = loadAttractionsFromLocationToBaseMarkerOptions( + location, emptyList, RuntimeEnvironment.application); + + assertThat(options.size(), is(0)); + } +} diff --git a/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java new file mode 100644 index 000000000..455b3fbd0 --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java @@ -0,0 +1,70 @@ +package fr.free.nrw.commons; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import java.net.URLEncoder; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) +public class PageTitleTest { + @Test + public void displayTextShouldNotBeUnderscored() { + assertThat(new PageTitle("Ex_1 ").getDisplayText(), + is("Ex 1")); + } + + @Test + public void moreThanTwoColons() { + assertThat(new PageTitle("File:sample:a.jpg").getPrefixedText(), + is("File:Sample:a.jpg")); + } + + @Test + public void getTextShouldReturnWithoutNamespace() { + assertThat(new PageTitle("File:sample.jpg").getText(), + is("Sample.jpg")); + } + + + @Test + public void capitalizeNameAfterNamespace() { + assertThat(new PageTitle("File:sample.jpg").getPrefixedText(), + is("File:Sample.jpg")); + } + + @Test + public void prefixedTextShouldBeUnderscored() { + assertThat(new PageTitle("Ex 1 ").getPrefixedText(), + is("Ex_1")); + } + + @Test + public void getMobileUriForTest() { + assertThat(new PageTitle("Test").getMobileUri().toString(), + is(BuildConfig.MOBILE_HOME_URL + "Test")); + } + + @Test + public void spaceBecomesUnderscoreInUri() { + assertThat(new PageTitle("File:Ex 1.jpg").getCanonicalUri().toString(), + is(BuildConfig.HOME_URL + "File:Ex_1.jpg")); + } + + @Test + public void leaveSubpageNamesUncapitalizedInUri() { + assertThat(new PageTitle("User:Ex/subpage").getCanonicalUri().toString(), + is(BuildConfig.HOME_URL + "User:Ex/subpage")); + } + + @Test + public void unicodeUri() throws Throwable { + assertThat(new PageTitle("User:例").getCanonicalUri().toString(), + is(BuildConfig.HOME_URL + "User:" + URLEncoder.encode("例", "utf-8"))); + } +}