diff --git a/app/build.gradle b/app/build.gradle index 480916ee8..6f225dc2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.1' implementation 'com.jakewharton.timber:timber:4.5.1' implementation 'info.debatty:java-string-similarity:0.24' - implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.2.1@aar'){ + implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.4.1@aar'){ transitive=true } @@ -26,6 +26,7 @@ dependencies { implementation "com.android.support:support-v4:$SUPPORT_LIB_VERSION" implementation "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION" implementation "com.android.support:design:$SUPPORT_LIB_VERSION" + implementation "com.android.support:customtabs:$SUPPORT_LIB_VERSION" implementation "com.android.support:cardview-v7:$SUPPORT_LIB_VERSION" @@ -48,7 +49,7 @@ dependencies { compile 'com.facebook.stetho:stetho:1.5.0' testCompile 'junit:junit:4.12' - testCompile 'org.robolectric:robolectric:3.4' + testCompile 'org.robolectric:robolectric:3.7.1' testCompile 'com.squareup.okhttp3:mockwebserver:3.8.1' androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.8.1' @@ -77,7 +78,7 @@ dependencies { androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" testImplementation 'junit:junit:4.12' - testImplementation 'org.robolectric:robolectric:3.4' + testImplementation 'org.robolectric:robolectric:3.7.1' testImplementation 'org.mockito:mockito-all:1.10.19' testImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1' diff --git a/app/src/main/java/fr/free/nrw/commons/AboutActivity.java b/app/src/main/java/fr/free/nrw/commons/AboutActivity.java index a2635d0dc..1b27c86b7 100644 --- a/app/src/main/java/fr/free/nrw/commons/AboutActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/AboutActivity.java @@ -5,6 +5,8 @@ import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; +import android.support.customtabs.CustomTabsIntent; +import android.support.v4.content.ContextCompat; import android.view.View; import android.widget.TextView; import android.widget.Toast; @@ -57,23 +59,20 @@ public class AboutActivity extends NavigationBaseActivity { intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + "1921335171459985\\")); //check if web browser available if(intent.resolveActivity(this.getPackageManager()) != null){ - startActivity(intent); + Utils.handleWebUrl(this,Uri.parse("https://www.facebook.com/" + "1921335171459985")); } else { Toast toast = Toast.makeText(this, getString(R.string.no_web_browser), LENGTH_SHORT); toast.show(); } - } - } @OnClick(R.id.github_launch_icon) public void launchGithub(View view) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/commons-app/apps-android-commons\\")); //check if web browser available if (browserIntent.resolveActivity(this.getPackageManager()) != null) { - startActivity(browserIntent); + Utils.handleWebUrl(this,Uri.parse("https://github.com/commons-app/apps-android-commons\\")); } else { Toast toast = Toast.makeText(this, getString(R.string.no_web_browser), LENGTH_SHORT); toast.show(); @@ -82,14 +81,40 @@ public class AboutActivity extends NavigationBaseActivity { @OnClick(R.id.website_launch_icon) public void launchWebsite(View view) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://commons-app.github.io/\\")); //check if web browser available if (browserIntent.resolveActivity(this.getPackageManager()) != null) { - startActivity(browserIntent); + Utils.handleWebUrl(this,Uri.parse("https://commons-app.github.io/\\")); } else { Toast toast = Toast.makeText(this, getString(R.string.no_web_browser), LENGTH_SHORT); toast.show(); } } + + + @OnClick(R.id.about_credits) + public void launchCredits(View view) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/commons-app/apps-android-commons/blob/master/CREDITS/\\")); + //check if web browser available + if (browserIntent.resolveActivity(this.getPackageManager()) != null) { + Utils.handleWebUrl(this,Uri.parse("https://github.com/commons-app/apps-android-commons/blob/master/CREDITS/\\")); + } else { + Toast toast = Toast.makeText(this, getString(R.string.no_web_browser), LENGTH_SHORT); + toast.show(); + } + } + + @OnClick(R.id.about_privacy_policy) + public void launchPrivacyPolicy(View view) { + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\\")); + //check if web browser available + if (browserIntent.resolveActivity(this.getPackageManager()) != null) { + Utils.handleWebUrl(this,Uri.parse("https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\\")); + } else { + Toast toast = Toast.makeText(this, getString(R.string.no_web_browser), LENGTH_SHORT); + toast.show(); + } + + } + } \ No newline at end of file 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 817c39f24..1044a7c17 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -1,8 +1,12 @@ package fr.free.nrw.commons; import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.customtabs.CustomTabsIntent; +import android.support.v4.content.ContextCompat; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; @@ -11,6 +15,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; +import java.net.URL; import java.net.URLEncoder; import java.util.Locale; import java.util.regex.Matcher; @@ -159,4 +164,26 @@ public class Utils { return stringBuilder.toString(); } + + public static void rateApp(Context context) { + final String appPackageName = context.getPackageName(); + try { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); + } + catch (android.content.ActivityNotFoundException anfe) { + context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); + } + return ; + } + + public static void handleWebUrl(Context context,Uri url){ + CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); + builder.setToolbarColor(ContextCompat.getColor(context, R.color.primaryColor)); + builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.primaryDarkColor)); + builder.setExitAnimations(context, android.R.anim.slide_in_left, android.R.anim.slide_out_right); + CustomTabsIntent customTabsIntent = builder.build(); + customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + customTabsIntent.launchUrl(context, url); + } + } diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 3e90fbf5e..cbdff2e0b 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -4,6 +4,7 @@ import android.accounts.Account; import android.accounts.AccountAuthenticatorActivity; import android.accounts.AccountAuthenticatorResponse; import android.accounts.AccountManager; +import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.SharedPreferences; @@ -17,10 +18,12 @@ import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatDelegate; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @@ -69,6 +72,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { @BindView(R.id.loginTwoFactor) EditText twoFactorEdit; @BindView(R.id.error_message_container) ViewGroup errorMessageContainer; @BindView(R.id.error_message) TextView errorMessage; + @BindView(R.id.login_credentials) TextView loginCredentials; @BindView(R.id.two_factor_container)TextInputLayout twoFactorContainer; ProgressDialog progressDialog; private AppCompatDelegate delegate; @@ -91,14 +95,39 @@ public class LoginActivity extends AccountAuthenticatorActivity { ButterKnife.bind(this); usernameEdit.addTextChangedListener(textWatcher); + usernameEdit.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + hideKeyboard(v); + } + }); + passwordEdit.addTextChangedListener(textWatcher); + passwordEdit.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + hideKeyboard(v); + } + }); + twoFactorEdit.addTextChangedListener(textWatcher); passwordEdit.setOnEditorActionListener(newLoginInputActionListener()); loginButton.setOnClickListener(view -> performLogin()); signupButton.setOnClickListener(view -> signUp()); + + if(BuildConfig.FLAVOR == "beta"){ + loginCredentials.setText(getString(R.string.login_credential)); + } else { + loginCredentials.setVisibility(View.GONE); + } } + + public void hideKeyboard(View view) { + InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); 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 7c2e910c4..fd3d02c31 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 @@ -1,17 +1,23 @@ package fr.free.nrw.commons.category; + +import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.text.Editable; import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; @@ -37,6 +43,7 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.upload.MwVolleyApi; +import fr.free.nrw.commons.upload.SingleUploadFragment; import fr.free.nrw.commons.utils.StringSortingUtils; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -72,6 +79,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { private OnCategoriesSaveHandler onCategoriesSaveHandler; private HashMap> categoriesCache; private List selectedCategories = new ArrayList<>(); + private TitleTextWatcher textWatcher = new TitleTextWatcher(); private final CategoriesAdapterFactory adapterFactory = new CategoriesAdapterFactory(item -> { if (item.isSelected()) { @@ -102,6 +110,15 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { categoriesAdapter = adapterFactory.create(items); categoriesList.setAdapter(categoriesAdapter); + + categoriesFilter.addTextChangedListener(textWatcher); + + categoriesFilter.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + hideKeyboard(v); + } + }); + RxTextView.textChanges(categoriesFilter) .takeUntil(RxView.detaches(categoriesFilter)) .debounce(500, TimeUnit.MILLISECONDS) @@ -110,6 +127,18 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { return rootView; } + public void hideKeyboard(View view) { + InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + + @Override + public void onDestroyView() { + categoriesFilter.removeTextChangedListener(textWatcher); + super.onDestroyView(); + } + + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.clear(); @@ -351,4 +380,21 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment { .create() .show(); } + + private class TitleTextWatcher implements TextWatcher { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { + } + + @Override + public void afterTextChanged(Editable editable) { + if (getActivity() != null) { + getActivity().invalidateOptionsMenu(); + } + } + } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 4c38af529..80d1c8783 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -276,7 +276,12 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment { } private void setOnClickListeners(final Media media) { - license.setOnClickListener(v -> openWebBrowser(licenseLink(media))); + if (licenseLink(media) != null) { + license.setOnClickListener(v -> openWebBrowser(licenseLink(media))); + } else { + Toast toast = Toast.makeText(getContext(), getString(R.string.null_url), Toast.LENGTH_SHORT); + toast.show(); + } if (media.getCoordinates() != null) { coordinates.setOnClickListener(v -> openMap(media.getCoordinates())); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 0e67afc2f..7aecee337 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -10,6 +10,7 @@ import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AlertDialog; import android.view.Menu; import android.view.MenuInflater; @@ -60,7 +61,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp private NearbyActivityMode viewMode; private Disposable placesDisposable; private boolean lockNearbyView; //Determines if the nearby places needs to be refreshed - + @BindView(R.id.swipe_container) SwipeRefreshLayout swipeLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -70,6 +71,13 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp bundle = new Bundle(); initDrawer(); initViewState(); + swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + lockNearbyView(false); + refreshView(true); + } + }); } private void initViewState() { @@ -309,7 +317,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp } else { setListFragment(); } - + swipeLayout.setRefreshing(false); hideProgressBar(); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java index b383fd9b9..69fce546c 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java @@ -3,7 +3,9 @@ package fr.free.nrw.commons.nearby; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.customtabs.CustomTabsIntent; import android.support.v4.app.FragmentActivity; +import android.support.v4.content.ContextCompat; import android.support.v7.widget.PopupMenu; import android.view.LayoutInflater; import android.view.MenuItem; @@ -17,6 +19,7 @@ import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.ui.widget.OverlayDialog; import fr.free.nrw.commons.utils.DialogUtil; @@ -141,8 +144,7 @@ public class NearbyInfoDialog extends OverlayDialog { } private void openWebView(Uri link) { - Intent browserIntent = new Intent(Intent.ACTION_VIEW, link); - startActivity(browserIntent); + Utils.handleWebUrl(getContext(),link); } @OnClick(R.id.emptyLayout) diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java index 39d5252ee..663845384 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java @@ -5,12 +5,14 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Toast; import com.pedrogomez.renderers.RVRendererAdapter; +import java.util.Collections; import java.util.List; import javax.inject.Inject; @@ -48,8 +50,9 @@ public class NotificationActivity extends NavigationBaseActivity { } private void initListView() { - recyclerView = findViewById(R.id.listView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); + DividerItemDecoration itemDecor = new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL); + recyclerView.addItemDecoration(itemDecor); addNotifications(); } @@ -61,6 +64,7 @@ public class NotificationActivity extends NavigationBaseActivity { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(notificationList -> { + Collections.reverse(notificationList); Timber.d("Number of notifications is %d", notificationList.size()); setAdapter(notificationList); }, throwable -> Timber.e(throwable, "Error occurred while loading notifications")); diff --git a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java index 99c9f253b..81f56adea 100644 --- a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java @@ -5,6 +5,7 @@ import android.accounts.AccountManager; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.v4.widget.DrawerLayout; @@ -22,6 +23,7 @@ import fr.free.nrw.commons.AboutActivity; import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.WelcomeActivity; import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.auth.LoginActivity; @@ -119,8 +121,9 @@ public abstract class NavigationBaseActivity extends BaseActivity return true; case R.id.action_feedback: drawerLayout.closeDrawer(navigationView); - Intent feedbackIntent = new Intent(Intent.ACTION_SEND); + Intent feedbackIntent = new Intent(Intent.ACTION_SENDTO); feedbackIntent.setType("message/rfc822"); + feedbackIntent.setData(Uri.parse("mailto:")); feedbackIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{CommonsApplication.FEEDBACK_EMAIL}); feedbackIntent.putExtra(Intent.EXTRA_SUBJECT, diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java index 0b6e527e5..5b39b92f7 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleUploadListFragment.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.upload; +import android.app.Activity; import android.content.Context; import android.graphics.Point; import android.net.Uri; @@ -10,6 +11,7 @@ import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.util.DisplayMetrics; +import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -177,9 +179,21 @@ public class MultipleUploadListFragment extends Fragment { photosGrid.setColumnWidth(photoSize.x); baseTitle.addTextChangedListener(textWatcher); + + baseTitle.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + hideKeyboard(v); + } + }); + return view; } + public void hideKeyboard(View view) { + InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); + inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + @Override public void onDestroyView() { baseTitle.removeTextChangedListener(textWatcher); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java index 099790495..50e22396a 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java @@ -9,6 +9,7 @@ import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.v4.view.ViewCompat; import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; @@ -228,35 +229,40 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { */ @OnTouch(R.id.titleEdit) boolean titleInfo(View view, MotionEvent motionEvent) { - //Should replace right with end to support different right-to-left languages as well - final int value = titleEdit.getRight() - titleEdit.getCompoundDrawables()[2].getBounds().width(); - - if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.media_detail_title) - .setMessage(R.string.title_info) - .setCancelable(true) - .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.cancel()) - .create() - .show(); - return true; + final int value; + if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) { + value = titleEdit.getRight() - titleEdit.getCompoundDrawables()[2].getBounds().width(); + if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) { + showInfoAlert(R.string.media_detail_title, R.string.title_info); + return true; + } + } + else { + value = titleEdit.getLeft() + titleEdit.getCompoundDrawables()[0].getBounds().width(); + if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) { + showInfoAlert(R.string.media_detail_title, R.string.title_info); + return true; + } } return false; } @OnTouch(R.id.descEdit) boolean descriptionInfo(View view, MotionEvent motionEvent) { - final int value = descEdit.getRight() - descEdit.getCompoundDrawables()[2].getBounds().width(); - - if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.media_detail_description) - .setMessage(R.string.description_info) - .setCancelable(true) - .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.cancel()) - .create() - .show(); - return true; + final int value; + if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) { + value = descEdit.getRight() - descEdit.getCompoundDrawables()[2].getBounds().width(); + if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() >= value) { + showInfoAlert(R.string.media_detail_description,R.string.description_info); + return true; + } + } + else{ + value = descEdit.getLeft() + descEdit.getCompoundDrawables()[0].getBounds().width(); + if (motionEvent.getAction() == ACTION_UP && motionEvent.getRawX() <= value) { + showInfoAlert(R.string.media_detail_description,R.string.description_info); + return true; + } } return false; } @@ -321,4 +327,14 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment { } } } + + private void showInfoAlert (int titleStringID, int messageStringID){ + new AlertDialog.Builder(getContext()) + .setTitle(titleStringID) + .setMessage(messageStringID) + .setCancelable(true) + .setNeutralButton(android.R.string.ok, (dialog, id) -> dialog.cancel()) + .create() + .show(); + } } diff --git a/app/src/main/res/layout-land/activity_login.xml b/app/src/main/res/layout-land/activity_login.xml index 9ecaf9855..2914f9530 100644 --- a/app/src/main/res/layout-land/activity_login.xml +++ b/app/src/main/res/layout-land/activity_login.xml @@ -13,12 +13,12 @@ @@ -40,11 +40,26 @@ android:textColor="@android:color/white" android:textSize="@dimen/heading_text_size" /> + + @@ -56,6 +71,7 @@ android:layout_marginLeft="@dimen/standard_gap" android:layout_marginRight="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" + android:gravity="center" android:paddingBottom="@dimen/small_gap" android:paddingTop="@dimen/small_gap" android:textColor="@color/secondaryDarkColor" @@ -98,7 +114,7 @@ android:layout_marginLeft="@dimen/standard_gap" android:layout_marginRight="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" - app:passwordToggleEnabled="false"> + app:passwordToggleEnabled="true"> + android:layout_marginBottom="@dimen/standard_gap" + android:text="@string/about_privacy_policy" /> @@ -188,19 +204,19 @@ + android:elevation="8dp" + app:srcCompat="@drawable/blue_rinse_circle" + tools:ignore="UnusedAttribute" /> + app:srcCompat="@drawable/commons_logo_large" + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout-land/welcome_do_upload.xml b/app/src/main/res/layout-land/welcome_do_upload.xml index 1f02c3183..d96b00675 100644 --- a/app/src/main/res/layout-land/welcome_do_upload.xml +++ b/app/src/main/res/layout-land/welcome_do_upload.xml @@ -73,16 +73,91 @@ android:gravity="center_horizontal" android:textColor="@android:color/white"/> - + + + + + /> + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-land/welcome_dont_upload.xml b/app/src/main/res/layout-land/welcome_dont_upload.xml index 1d4d0db80..d950ffc1d 100644 --- a/app/src/main/res/layout-land/welcome_dont_upload.xml +++ b/app/src/main/res/layout-land/welcome_dont_upload.xml @@ -55,16 +55,90 @@ android:gravity="center_horizontal" android:textColor="@android:color/white"/> - + + + + + + + + + android:orientation="horizontal"> + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-land/welcome_image_details.xml b/app/src/main/res/layout-land/welcome_image_details.xml index d112292a1..79f48829b 100644 --- a/app/src/main/res/layout-land/welcome_image_details.xml +++ b/app/src/main/res/layout-land/welcome_image_details.xml @@ -38,16 +38,89 @@ android:gravity="center_horizontal" android:textColor="@android:color/white"/> - + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout-xlarge/activity_login.xml b/app/src/main/res/layout-xlarge/activity_login.xml index 32cd47451..b078e6fe3 100644 --- a/app/src/main/res/layout-xlarge/activity_login.xml +++ b/app/src/main/res/layout-xlarge/activity_login.xml @@ -13,12 +13,12 @@ @@ -40,6 +40,21 @@ android:textColor="@android:color/white" android:textSize="@dimen/heading_text_size" /> + + + android:layout_marginBottom="@dimen/standard_gap" + android:text="@string/about_privacy_policy" /> @@ -188,8 +204,8 @@ @@ -198,9 +214,9 @@ android:layout_height="42dp" android:layout_gravity="center_horizontal" android:layout_marginTop="8dp" - tools:ignore="UnusedAttribute" android:elevation="8dp" - app:srcCompat="@drawable/commons_logo_large" /> + app:srcCompat="@drawable/commons_logo_large" + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 76c51a4aa..00c7fa5b8 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -5,119 +5,130 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="wrap_content"> - + android:layout_height="wrap_content"> - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + - @@ -132,7 +143,8 @@ android:gravity="center" /> - + + + app:menu="@menu/drawer" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 278e3464f..b816a37fb 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -19,12 +19,16 @@ android:layout_marginRight="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" android:layout_marginTop="@dimen/large_gap" + android:clickable="true" + android:focusableInTouchMode="true" app:cardCornerRadius="4dp" app:cardElevation="4dp"> @@ -40,11 +44,27 @@ android:textColor="@android:color/white" android:textSize="@dimen/heading_text_size" /> + + + @@ -56,6 +76,7 @@ android:layout_marginLeft="@dimen/standard_gap" android:layout_marginRight="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" + android:gravity="center" android:paddingBottom="@dimen/small_gap" android:paddingTop="@dimen/small_gap" android:textColor="@color/secondaryDarkColor" @@ -98,7 +119,7 @@ android:layout_marginLeft="@dimen/standard_gap" android:layout_marginRight="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" - app:passwordToggleEnabled="false"> + app:passwordToggleEnabled="true"> + android:elevation="8dp" + app:srcCompat="@drawable/blue_rinse_circle" + tools:ignore="UnusedAttribute" /> + app:srcCompat="@drawable/commons_logo_large" + tools:ignore="UnusedAttribute" /> diff --git a/app/src/main/res/layout/activity_nearby.xml b/app/src/main/res/layout/activity_nearby.xml index 726c49fe0..f2c41da5f 100644 --- a/app/src/main/res/layout/activity_nearby.xml +++ b/app/src/main/res/layout/activity_nearby.xml @@ -21,17 +21,19 @@ android:orientation="horizontal" android:gravity="center_vertical" android:layout_below="@id/toolbar"> - - + - + diff --git a/app/src/main/res/layout/detail_category_item.xml b/app/src/main/res/layout/detail_category_item.xml index 51302fd0d..ad6a7fca4 100644 --- a/app/src/main/res/layout/detail_category_item.xml +++ b/app/src/main/res/layout/detail_category_item.xml @@ -21,9 +21,4 @@ app:drawableStart="@drawable/ic_info_outline_white_24dp" /> - - diff --git a/app/src/main/res/layout/fragment_categorization.xml b/app/src/main/res/layout/fragment_categorization.xml index 1c7b0a9f7..58a768094 100644 --- a/app/src/main/res/layout/fragment_categorization.xml +++ b/app/src/main/res/layout/fragment_categorization.xml @@ -1,32 +1,34 @@ + android:theme="@style/DarkAppTheme"> + android:layout_height="wrap_content" + android:clickable="true" + android:focusableInTouchMode="true"> + android:imeOptions="flagNoExtractUi"/> @@ -44,27 +46,24 @@ + android:visibility="gone" /> + android:visibility="gone" /> + android:layout_height="wrap_content" + android:fadingEdge="none" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_media_detail.xml b/app/src/main/res/layout/fragment_media_detail.xml index cffca14c6..5cc303763 100644 --- a/app/src/main/res/layout/fragment_media_detail.xml +++ b/app/src/main/res/layout/fragment_media_detail.xml @@ -149,6 +149,10 @@ tools:text="License link" /> + + + \ No newline at end of file diff --git a/app/src/main/res/layout/welcome_do_upload.xml b/app/src/main/res/layout/welcome_do_upload.xml index b2befbf12..fab6452df 100644 --- a/app/src/main/res/layout/welcome_do_upload.xml +++ b/app/src/main/res/layout/welcome_do_upload.xml @@ -67,15 +67,95 @@ android:textColor="@android:color/white" /> - + android:gravity="center" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/welcome_dont_upload.xml b/app/src/main/res/layout/welcome_dont_upload.xml index 8d352547e..d819bc035 100644 --- a/app/src/main/res/layout/welcome_dont_upload.xml +++ b/app/src/main/res/layout/welcome_dont_upload.xml @@ -48,15 +48,87 @@ android:textColor="@android:color/white" /> - + android:gravity="center" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/welcome_image_details.xml b/app/src/main/res/layout/welcome_image_details.xml index 0b4618b37..e38eb5979 100644 --- a/app/src/main/res/layout/welcome_image_details.xml +++ b/app/src/main/res/layout/welcome_image_details.xml @@ -32,15 +32,101 @@ android:textColor="@android:color/white" /> - + android:gravity="center" + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml index 83c1bf0ad..f41d1c43a 100644 --- a/app/src/main/res/menu/drawer.xml +++ b/app/src/main/res/menu/drawer.xml @@ -10,6 +10,11 @@ android:icon="@drawable/ic_location_black_24dp" android:title="@string/navigation_item_nearby"/> + + - - diff --git a/app/src/main/res/values-diq/strings.xml b/app/src/main/res/values-diq/strings.xml index 8ab93b5ed..1dec79926 100644 --- a/app/src/main/res/values-diq/strings.xml +++ b/app/src/main/res/values-diq/strings.xml @@ -7,7 +7,7 @@ Cı kewe Qeyd be Cıkewtış - Tay bıpawe + Kerem kerên, bıpawên... Cıkewtış hewl bi. Nidekeweya de Dosya nêvineya. Dosyê da bine bıcerebnê. @@ -20,9 +20,9 @@ Barkerdışe %1$s qedya %1$s bar nêbeno. pıpawane xo bıvin - - 1 dosye selagnayış - %1$d dosye Selagnayışi + + 1 dosya bar bena + %1$d dosyeyi bar benê Barkerdışê mınê peyêni Ratneya @@ -49,18 +49,18 @@ Bar ke Kategoriyan dı cı geyr Star ke - - Theba bar nêbı - 1 bar kerdış - %1$d bar kerdışi + + \@string/contributions_subtitle_zero + Yew barbiyayış + %1$d barbiyayışi Sergendış 1 bar kerdış Sergendış %1$d bar kerdışi - - 1 bar kerdış - %1$d bar kerdışi + + %1$d barkerdış + %1$d barkerdışi Kategoriyan de %1$s deye theba çıniyo Kategori cı kerdışi rê nusnayış bıkeré. Ena gamer ravêrdışi rê mesaci bıpıloğnê yana peyd şırê. @@ -69,7 +69,7 @@ Qeyd be Heq te cı <a href=\"https://github.com/commons-app/apps-android-commons\">Çıme</a> u <a href=\"https://commons-app.github.io/\">website</a> on GitHub</a>. Newe vıraz <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub mewzu </a> U rapor bıweseynê - / + <a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Politikay nımıtışi</a> Heq te cı Peyd rışten bırış (E-posta ra) E-posta eyar nêbi diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7067f5f9b..40b807084 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -199,6 +199,8 @@ Error al almacenar imágenes en la antememoria 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 fácilmente, por ejemplo el momento del día si es un paisaje. Si el medio muestra algo inusual, explique qué lo hace insual. + Esta imagen es demasiado oscura. ¿Confirmas que quieres cargarla? Wikimedia Commons solo acepta imágenes con valor enciclopédico. + Esta imagen se ve borrosa. ¿Confirmas que quieres cargarla? Wikimedia Commons solo acepta imágenes con valor enciclopédico. Otorgar permiso 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-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 860cb6e2c..745d8811e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -199,6 +199,8 @@ Erreur en mettant les images en cache Un titre descriptif unique pour le fichier, qui servira de nom de fichier. Vous pouvez utiliser un langage simple avec des espaces. N’incluez pas l’extension du fichier Veuillez décrire le média autant que possible : Où a-t-il été enregistré ? Que montre-t-il ? Quel est le contexte ? Veuillez décrire les objets ou les personnes. Révélez les informations qui ne peuvent pas être devinées facilement, par exemple l’heure de la journée si c’est un paysage. Si le média montre quelque chose d’inhabituel, veuillez expliquer ce qui le rend exceptionnel. + Cette image est trop sombre, êtes-vous sûr de vouloir la télécharger ? Wikimédia Communs n’est que pour les images avec une valeur encyclopédique. + Cette image est floue, êtes-vous sûr de vouloir la télécharger ? Wikimédia Communs n’est que pour les images ayant une valeur encyclopédique. Accorder le droit Utiliser le stockage externe Enregistrer les images prises avec l’appareil photo de votre appareil diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 0b0bf3b5a..b6358b88e 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -54,16 +54,16 @@ GPS er óvirkt í tækinu þínu. Viltu virkja það? Virkja GPS Engar innsendingar ennþá - + \@string/contributions_subtitle_zero %1$d innsending %1$d innsendingar - + Byrja %1$d innsendingu Byrja %1$d innsendingar - + %1$d innsending %1$d innsendingar @@ -199,6 +199,8 @@ Villa kom upp í skyndiminni mynda Einstakur og lýsandi titill, sem mun verða skráarheiti. Þú mátt nota einfaldan texta með bilum. Ekki hafa með neina skráarendingu Lýstu gögnunum eins vel og auðið er: Hvar er myndin tekin? Hvað sýnir hún? Hvert er samhengið? Lýstu fólki og fyrirbærum. Gefðu upp þær upplýsingar sem ekki er auðvelt að giska á, til dæmis á hvaða tíma dags myndin er tekin ef hún sýnir landslag. Ef gögnin sýna eitthvað óvenjulegt, útskýrðu þá hvað það er sem sé sérstakt. + Þessi mynd er of dökk, ertu viss um að þú viljir senda hana inn? Wikimedia Commons er aðeins fyrir myndir sem hafa eitthvað fræðslugildi. + Þessi mynd er ekki skörp, ertu viss um að þú viljir senda hana inn? Wikimedia Commons er aðeins fyrir myndir sem hafa eitthvað fræðslugildi. Gefa heimild Nota ytri gagnageymslu Vistaðu myndir sem teknar hafa verið með innbyggðu myndavélinni í tækinu þínu @@ -210,8 +212,9 @@ Heimild þarf til að birta lista yfir staði í nágrenninu FÁ LEIÐSÖGN LESA GREIN - Velkomin á Wikimedia Commons, %1$s! Við erum ánægð með að þú skulir vera hérna. + Velkomin á Wikimedia Commons, %1$s! Við erum ánægð með að þú skulir vera hérna. %1$s skildi eftir skilaboð á spjallsíðunni þinni Takk fyrir að hafa gert breytingar - %1$s minntist á þig á %2$s. + %1$s minntist á þig á %2$s. + Víxla sýn diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index aa2a840d4..3f48c3c98 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -41,6 +41,7 @@ ログインできません - パスワードを確認してください 失敗した回数が多すぎます。数分でもう一度お試しください。 申し訳ありませんが、この利用者はコモンズでブロックされています。 + 2 要素認証コードを提供する必要があります。 ログイン失敗 アップロード このセットに名前をつけてください @@ -150,8 +151,10 @@ Google Playのベータ版チャンネルにオプトインして、新機能やバグ修正プログラムに早期にアクセス ウィキデータを使用してください (警告:これを無効にすると、モバイルデータを大量に消費する可能性があります) + 2FA コード 最近のアップロードファイルに表示する最大件数 最大限 + 500 以上の項目を表示できません 最近のアップロードファイルに表示する最大件数 2段階認証は現在サポートされていません。 ログアウトしてもよろしいですか? diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 1119d2b46..83d826c0f 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -73,17 +73,29 @@ मांडण्या नोंदणी करा आमच्याबद्दल + विकीमिडीया कॉमन्स अॅप हे एक मुक्तस्त्रोत अॅप असून ते विकीमिडीया समुदायातील स्वयंसेवकांनी आणि अनुदानित सदस्यांकडून निर्माण आणि सांभाळले जाते. विकीमिडीया फ़ांउंडेशनचा ह्या अॅपच्या निर्मिती,सांभाळामध्ये सहभाग नाही. + नव्याने तयार करा <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> त्रुटी अहवालांसाठी आणि सुचनांसाठी. + <a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privacy policy</a> + <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Credits</a> च्या विषयी प्रतिसाद पाठवा (विपत्राद्वारे) + कोणतेही ईमेल क्लायंट स्थापित नाहीत अलीकडे वापरलेले वर्ग + प्रथम संकालनाची प्रतीक्षा करीत आहे ... आपण अद्याप काहीच चित्रे अपभारीत केली नाहीत. पुन्हा प्रयत्न करा रद्द करा ही संचिका %1$s या परवान्यांतर्गत राहील + हे चित्र इथे चढवत असताना, मी हे घोषीत करतो की हे माझेच काम आहे आणि ह्या कामावर इतर कुणाचाही प्रताधिकार नाही तसेच हे सेल्फ़ी नाहीये, म्हणून हे काम ह्या संकेतांचे पालन करेल <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons policies</a>. अधिभारण करा परवाना मागील शीर्षक/वर्णन वापरा आपोआप सध्याचे स्थान मिळवा + जर छायाचित्राला जिओटॅग नसल्यास तुम्ही तुमच्या स्थानाची निश्चिती करा जेणे करुन संबंधीत वर्ग सुचवले जातील + रात्रीच्या वेळेच्या व्यवस्था + गडद त्वचा वापरा + Attribution-ShareAlike 3.0 + Attribution 3.0 Attribution-ShareAlike 3.0 Attribution 3.0 CC0 @@ -109,7 +121,7 @@ कृपया अपभारण करू \'\'\'नका\'\'\': -आपल्या किंवा मित्रांच्या सेल्फी\n-आपण आंतरजाल (इंटरनेट) वरुन अधिभारण केलेली चित्रे\n-प्रोप्रायटरी अॅप्सचे स्क्रिनशॉट उदाहरणादाखल अपभारण: - - शीर्षक: Sydney Opera House\n- वर्णन: Sydney Opera House as viewed from across the bay\n- वर्ग: Sydney Opera House, Sydney Opera House from the west, Sydney Opera House remote views + - शीर्षक: Sydney Opera House\n- वर्णन: Sydney Opera House as viewed from across the bay\n- वर्ग: Sydney Opera House, Sydney Opera House from the west, Sydney Opera House remote views आपली चित्रे जोडा. विकिपीडियावरील लेखात जीवंतपणा आणा! विकिपीडियावरची चित्रे विकिमिडिया कॉमन्सवरुन येतात. जगातल्या अनेक लोकांना आपल्या चित्राद्वारे शिकता येते. @@ -123,11 +135,86 @@ अनोळखी परवाना ताजेतवाने करा परवानगी आवश्यक:बाह्य भंडारण वाचन. याशिवाय अॅप काम करू शकत नाही. + परवानगी आवश्यक:बाह्य भंडारण वाचन. याशिवाय अॅप काम करू शकत नाही. ऐच्छिक परवानगी:वर्ग सुचवण्यांसाठी सध्याचे स्थान मिळवा ठीक आहे जवळपासची स्थाने + आसपास काहीही सापडले नाही इशारा ही संचिका पूर्वीच कॉमन्सवर उपलब्ध आहे. आपणास पुढे जायचे याची निश्चिती करता काय? होय नाही + शीर्षक + माध्यमाचे शिर्षक + वर्णन + माध्यमाची माहिती इथे दिली आहे. ती बरीच मोठी असू शकते, तरीही आम्हांला वाटते ती आपल्या उपयोगाची असावी. + चढवल्याची तारिख + परवाना + अक्षांश-रेखांश + दिलेले नाही + बिटा आवृत्तीचे तपासक बना + गुगल प्ले वरील आमच्या बिटा चॅनलचा पाठलाग करा आणि आमच्या नव्या सेवा-सुविधांचा तसाच त्रुटी-निरसनांचा फ़ायदा घ्या. + विकीडाटा वापरा + (ताकीद: हे बंद केल्यामुळे तुम्हांला मोठ्याप्रमाणात डेटा खर्च करावा लागेल) + 2FA कोड + माझ्या अलिकडच्या अपभरणाची मर्यादा + जास्तीची मर्यादा + ५०० पेक्षा जास्त दाखवण्यास असमर्थ + माझ्या अलिकडच्या अपभरणाची मर्यादा + दोन पायऱ्यांची वैधता तपासणी सध्या उपलब्ध नाही. + काय आपणास खरेच बंद करायचे आहे? + कॉमन्सचे चिन्ह + कॉमन्सचे संकेतस्थळ + कॉमन्सचे फ़ेसबुक पान + कॉमन्सचे गिटहब स्त्रोत कोड + पार्श्वभूमी चित्र + चित्र माध्यमे कोसळली + कोणतेही चित्र सापडले नाही + चित्र अपभारीत करा + जाओ जान पर्वत + लामा + रेनबो पूल + टुलिप + सेल्फ़ी चालणार नाहीत + मालकी हक्क प्रतिमा + विकीपिडीयात स्वागत आहे + प्रताधिकार स्वागत आहे + सिडनीचे ओपेरा हाऊस + रद्द करा + उघडा + बंद करा + मुख्य + अपभारण करा + जवळपास + आमच्याबद्दल + सेटिंग्स + प्रतिक्रिया + बाहेर पडा + माहिती पुस्तिका + अधिसूचना + लोकेशन सेवा वापराची परवानगी दिल्याशिवाय जवळपासची ठिकाणे दाखवली जाउ शकत नाहीत. + कोणतीही माहिती सापडली नाही + कॉमन्स फ़ाईलचे पान + विकिबेस कलम + चित्र दाखवताना त्रुटी आढळली + फ़ाईलला असे नाव द्या जे सुयोग्य असेल,चित्राविषयी त्यामधून माहिती कळेल अशी साधी भाषा वापरा,नावामध्ये फ़ाईलचे एक्सटेन्शन लिहू नका. + माध्यमांची शक्य तितकी जास्त माहिती द्या:छायाचित्र/चलचित्र/ध्वनिमुद्रण कोठे घेतले आहे? त्यात काय दाखवले आहे? त्या माध्यमांचा संदर्भ काय? त्यातील वस्तू,व्यक्ति व इतर माहिती द्या? अशी सगळी माहिती जी त्या माध्यमाकडे पाहून लक्षात येणार नाही पण ती महत्वाचे आहे ती सर्व पुरवा. जर त्या माध्यमामध्ये काहीही वेगळे दिसत असेल तर ते वेगळे का आहे याची माहिती पुरवा. + हे छायाचित्र खुप अंधारलेले आहे, तुम्ही खरच हे छायाचित्र येथे चढवू इच्छीता का? विकीमिडीया कॉमन्सवर नेहमी विश्वकोषात महत्त्वाची असलेलीच चित्रे चढवली जाऊ शकतात. + हे छायाचित्र खुप फ़िकट आलेले आहे, तुम्ही खरच हे छायाचित्र येथे चढवू इच्छीता का? विकीमिडीया कॉमन्सवर नेहमी विश्वकोषात महत्त्वाची असलेलीच चित्रे चढवली जाऊ शकतात. + परवानगी द्या + बाहेरील स्टोरेज वापरा + आपल्या डिव्हाइसवरील इन-अॅप्स कॅमेर्यासह घेतलेली चित्रे जतन करा + तुमच्या खात्यावरुन सनोंद प्रवेश करा + लॉग फ़ाईल पाठवा + विकसकांना लॉग फ़ाईल विपत्राने पाठवा + लोकेशन बदलली नाहीये. + ही लोकेशन उपलब्ध नाही + जवळपासच्या ठिकाणांची यादी दाखवण्यासाठी आपली परवानगी आवश्यक आहे + दिशानिर्देश मिळवा + लेख वाचा + विकीमिडीया कॉमन्समध्ये आपले स्वागत आहे,%1$s! आम्हांला आनंद आहे आपण इथे आलात. + %1$s यांनी तुमच्या चर्चापानावर संदेश टाकला + तुमच्या संपादनासाठी तुमचे आभार ! + %1$s यांनी तुमचा उल्लेख %2$s येथे केला. + टॉगल दृश्य diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index be8fce740..ef23af5b6 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -20,7 +20,7 @@ Avslutter opplasting av %1$s Opplastingen av %1$s feilet Trykk for å vise - + %1$d fil lastes opp %1$d filer lastes opp @@ -54,7 +54,7 @@ GPS er slått av på denne enheten. Ønsker du å slå den på? Slå på GPS Ingen opplastinger ennå - + \@string/contributions_subtitle_zero %1$d opplasting %1$d opplastinger @@ -63,7 +63,7 @@ Starter %1$d opplasting Starter %1$d opplastinger - + %1$d opplasting %1$d opplastinger @@ -199,6 +199,8 @@ Feil under mellomlagring av bilder En unik beskrivende tittel for fila, som vil fungere som filnavn. Du kan bruke vanlig språk med mellomrom. Ikke ta med filendelsen Beskriv bidraget så mye som mulig: Hvor ble det tatt? Hva viser det? Hva er konteksten? Beskriv objektene eller personene. Gi informasjon som ikke kan gjettes lett, for eksempel når på dagen bildet ble tatt om det er et landskapsbilde. Om bildet viser noe uvanlig, forklar hva som gjør det uvanlig. + Dette bildet er for mørkt, er du sikker på at du ønsker å laste det opp? Wikimedia Commons er kun for bilder med ensyklopedisk verdi. + Dette bildet er uklart, er du sikker på at du ønsker å laste det opp? Wikimedia Commons er bare for bilder med ensyklopedisk verdi. Gi tillatelse Bruk ekstern lagring Lagre bilder som er tatt med kameraet i appen på enheten din @@ -214,4 +216,5 @@ %1$s la igjen en beskjed på diskusjonssiden din Takk for at du har gjort en redigering %1$s nevnte deg på %2$s. + Skift visning diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 98bb346aa..b08520060 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -199,6 +199,8 @@ 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. + Esta foto está muito escura, você tem certeza de que deseja enviá-la? O Wikimedia Commons é apenas para imagens com valor enciclopédico. + Esta foto está embaçada, tem certeza de que deseja enviá-la? O Wikimedia Commons é apenas para imagens com valor enciclopédico. Dar permissão 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 1c3fbcb46..c47473dbc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -203,7 +203,7 @@ Ошибка при кэшировании картинок Уникальное описание, которое будет сохранено как имя файла. Вы можете использовать естественный язык, разделяя слова пробелами. Пожалуйста, не указывайте расширение файла. Пожалуйста, подробно опишите загружаемый файл: где он был снят? что на нём изображено? каков его контекст? Пожалуйста опишите изображённых персон или объекты. Добавьте информацию, о которой нельзя легко догадаться, например, время суток, когда снимался файл. Если снято что-то необычное, постарайтесь пояснить, что именно в этом необычного. - Это изображение слишком темное. Вы уверены, что хотите его загрузить? Викисклад подходит только для фотографий, имеющих энциклопедическую ценность. + Это изображение слишком тёмное. Вы уверены, что хотите его загрузить? Викисклад подходит только для фотографий, имеющих энциклопедическую ценность. Это изображение размыто. Вы уверены, что хотите его загрузить? Викисклад подходит только для фотографий, имеющих энциклопедическую ценность. Дать разрешение Использовать внешнее хранилище diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 385e1e04d..caea75ee5 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -199,6 +199,8 @@ 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. + Denna bild är för mörk, är du säker på att du vill ladda upp den? Wikimedia Commons är endast till för bilder med encyklopediskt värde. + Denna bild är suddig, är du säker på att du vill ladda upp den? Wikimedia Commons är endast till för bilder med encyklopediskt värde. Ge behörighet Använd extern lagring Spara bilder som tas med kameran i appen på din enhet diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 28558315b..adc4fc75f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -207,6 +207,8 @@ Помилка кешування зображень Унікальна описова назва файлу. Ви можете використовувати простий текст з пробілами. Не вказуйте розширення файлу Будь ласка, докладно опишіть файл: де його було зроблено? що на ньому зображено? який контекст? Будь ласка, опишіть об\'єкти чи осіб. Додайте інформацію, яку не можна легко здогадатися, наприклад, пору доби для фотографії пейзажу. Якщо зображено щось незвичайне, постарайтеся пояснити, що робить його незвичайним. + Це зображення надто темне. Ви упевнені, що хочете його завантажити? Вікісховище призначене лише для зображень, що мають енциклопедичну цінність. + Це зображення розмите. Ви упевнені, що хочете його завантажити? Вікісховище призначене лише для зображень, що мають енциклопедичну цінність. Надати дозвіл Використовувати зовнішнє сховище Зберігати зображення, виконані вбудованою камерою Вашого пристрою diff --git a/app/src/main/res/values-yue/error.xml b/app/src/main/res/values-yue/error.xml new file mode 100644 index 000000000..081685201 --- /dev/null +++ b/app/src/main/res/values-yue/error.xml @@ -0,0 +1,6 @@ + + + 同享壞咗 + 哎呀。出咗錯! + 多謝你! + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 79614f218..ccbc6a993 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,9 +1,11 @@ Commons + Settings Username Password + Log in to your Commons Beta account Log in Sign up Logging in @@ -77,8 +79,8 @@ The Wikimedia Commons app is an open-source app created and maintained by grantees and volunteers of the Wikimedia community. The Wikimedia Foundation is not involved in the creation, development, or maintenance of the app. Wikimedia Commons Create a new <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> for bug reports and suggestions. - <a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privacy policy</a> - <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Credits</a> + Privacy policy + Credits About Send Feedback (via Email) No email client installed @@ -119,11 +121,20 @@ Wikimedia Commons hosts most of the images that are used in Wikipedia. Your images help educate people around the world! Please upload pictures that are taken or created entirely by yourself: - - Natural objects (flowers, animals, mountains)\n- Useful objects (bicycles, train stations)\n- Famous people (your mayor, Olympic athletes you met) + Natural objects (flowers, animals, mountains)\n• Useful objects (bicycles, train stations)\n• Famous people (your mayor, Olympic athletes you met) + Natural objects (flowers, animals, mountains) + Useful objects (bicycles, train stations) + Famous people (your mayor, Olympic athletes you met) Please do NOT upload: - Selfies or pictures of your friends\n- Pictures you downloaded from the Internet\n- Screenshots of proprietary apps + Selfies or pictures of your friends + Pictures you downloaded from the Internet + Screenshots of proprietary apps Example upload: - Title: Sydney Opera House\n- Description: Sydney Opera House as viewed from across the bay\n- Categories: Sydney Opera House from the west, Sydney Opera House remote views + Title: Sydney Opera House + Description: Sydney Opera House as viewed from across the bay + Categories: Sydney Opera House from the west, Sydney Opera House remote views Contribute your images. Help Wikipedia articles come to life! Images on Wikipedia come from Wikimedia Commons. Your images help educate people around the world. @@ -214,6 +225,7 @@ Send log file Send log file to developers via email No web browser found to open URL + Error! URL not found Location has not changed. Location not available. @@ -226,4 +238,5 @@ Thank you for making an edit %1$s mentioned you on %2$s. Toggle view + Rate Us