Merge branch 'main' into issue5502

This commit is contained in:
Kanahia 2024-03-09 12:18:02 +05:30 committed by GitHub
commit da1aae6aec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 133 additions and 157 deletions

View file

@ -1,7 +1,5 @@
package fr.free.nrw.commons.LocationPicker; package fr.free.nrw.commons.LocationPicker;
import com.mapbox.mapboxsdk.maps.Style;
/** /**
* Constants need for location picking * Constants need for location picking
*/ */

View file

@ -16,7 +16,6 @@ import androidx.browser.customtabs.CustomTabColorSchemeParams;
import androidx.browser.customtabs.CustomTabsIntent; import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import fr.free.nrw.commons.wikidata.model.WikiSite; import fr.free.nrw.commons.wikidata.model.WikiSite;
@ -30,9 +29,6 @@ import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import timber.log.Timber; import timber.log.Timber;
import static android.widget.Toast.LENGTH_SHORT;
import static fr.free.nrw.commons.campaigns.CampaignView.CAMPAIGNS_DEFAULT_PREFERENCE;
public class Utils { public class Utils {
public static PageTitle getPageTitle(@NonNull String title) { public static PageTitle getPageTitle(@NonNull String title) {

View file

@ -1,7 +1,6 @@
package fr.free.nrw.commons; package fr.free.nrw.commons;
import android.net.Uri; import android.net.Uri;
import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;

View file

@ -30,9 +30,9 @@ import fr.free.nrw.commons.auth.login.LoginResult;
import fr.free.nrw.commons.databinding.ActivityLoginBinding; import fr.free.nrw.commons.databinding.ActivityLoginBinding;
import fr.free.nrw.commons.utils.ActivityUtils; import fr.free.nrw.commons.utils.ActivityUtils;
import java.util.Locale; import java.util.Locale;
import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse;
import fr.free.nrw.commons.auth.login.LoginCallback; import fr.free.nrw.commons.auth.login.LoginCallback;
import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@ -46,9 +46,6 @@ import fr.free.nrw.commons.utils.ConfigUtils;
import fr.free.nrw.commons.utils.SystemThemeUtils; import fr.free.nrw.commons.utils.SystemThemeUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import timber.log.Timber; import timber.log.Timber;
import static android.view.KeyEvent.KEYCODE_ENTER; import static android.view.KeyEvent.KEYCODE_ENTER;
@ -75,7 +72,6 @@ public class LoginActivity extends AccountAuthenticatorActivity {
private AppCompatDelegate delegate; private AppCompatDelegate delegate;
private LoginTextWatcher textWatcher = new LoginTextWatcher(); private LoginTextWatcher textWatcher = new LoginTextWatcher();
private CompositeDisposable compositeDisposable = new CompositeDisposable(); private CompositeDisposable compositeDisposable = new CompositeDisposable();
private Call<MwQueryResponse> loginToken;
final String saveProgressDailog="ProgressDailog_state"; final String saveProgressDailog="ProgressDailog_state";
final String saveErrorMessage ="errorMessage"; final String saveErrorMessage ="errorMessage";
final String saveUsername="username"; final String saveUsername="username";
@ -116,7 +112,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
binding.loginCredentials.setVisibility(View.GONE); binding.loginCredentials.setVisibility(View.GONE);
} }
} }
/** /**
* Hides the keyboard if the user's focus is not on the password (hasFocus is false). * Hides the keyboard if the user's focus is not on the password (hasFocus is false).
* @param view The keyboard * @param view The keyboard
* @param hasFocus Set to true if the keyboard has focus * @param hasFocus Set to true if the keyboard has focus
@ -212,63 +208,52 @@ public class LoginActivity extends AccountAuthenticatorActivity {
public void performLogin() { public void performLogin() {
Timber.d("Login to start!"); Timber.d("Login to start!");
final String username = binding.loginUsername.getText().toString(); final String username = Objects.requireNonNull(binding.loginUsername.getText()).toString();
final String rawUsername = binding.loginUsername.getText().toString().trim(); final String password = Objects.requireNonNull(binding.loginPassword.getText()).toString();
final String password = binding.loginPassword.getText().toString(); final String twoFactorCode = Objects.requireNonNull(binding.loginTwoFactor.getText()).toString();
String twoFactorCode = binding.loginTwoFactor.getText().toString();
showLoggingProgressBar(); showLoggingProgressBar();
doLogin(username, password, twoFactorCode); loginClient.doLogin(username, password, twoFactorCode, Locale.getDefault().getLanguage(),
new LoginCallback() {
@Override
public void success(@NonNull LoginResult loginResult) {
runOnUiThread(()->{
Timber.d("Login Success");
hideProgress();
onLoginSuccess(loginResult);
});
}
@Override
public void twoFactorPrompt(@NonNull Throwable caught, @Nullable String token) {
runOnUiThread(()->{
Timber.d("Requesting 2FA prompt");
hideProgress();
askUserForTwoFactorAuth();
});
}
@Override
public void passwordResetPrompt(@Nullable String token) {
runOnUiThread(()->{
Timber.d("Showing password reset prompt");
hideProgress();
showPasswordResetPrompt();
});
}
@Override
public void error(@NonNull Throwable caught) {
runOnUiThread(()->{
Timber.e(caught);
hideProgress();
showMessageAndCancelDialog(caught.getLocalizedMessage());
});
}
});
} }
private void doLogin(String username, String password, String twoFactorCode) {
progressDialog.show();
loginToken = loginClient.getLoginToken();
loginToken.enqueue(
new Callback<MwQueryResponse>() {
@Override
public void onResponse(Call<MwQueryResponse> call,
Response<MwQueryResponse> response) {
loginClient.login(username, password, null, twoFactorCode,
response.body().query().loginToken(), Locale.getDefault().getLanguage(), new LoginCallback() {
@Override
public void success(@NonNull LoginResult result) {
Timber.d("Login Success");
onLoginSuccess(result);
}
@Override
public void twoFactorPrompt(@NonNull Throwable caught,
@Nullable String token) {
Timber.d("Requesting 2FA prompt");
hideProgress();
askUserForTwoFactorAuth();
}
@Override
public void passwordResetPrompt(@Nullable String token) {
Timber.d("Showing password reset prompt");
hideProgress();
showPasswordResetPrompt();
}
@Override
public void error(@NonNull Throwable caught) {
Timber.e(caught);
hideProgress();
showMessageAndCancelDialog(caught.getLocalizedMessage());
}
});
}
@Override
public void onFailure(Call<MwQueryResponse> call, Throwable t) {
Timber.e(t);
showMessageAndCancelDialog(t.getLocalizedMessage());
}
});
}
private void hideProgress() { private void hideProgress() {
progressDialog.dismiss(); progressDialog.dismiss();
@ -299,10 +284,6 @@ public class LoginActivity extends AccountAuthenticatorActivity {
} }
private void onLoginSuccess(LoginResult loginResult) { private void onLoginSuccess(LoginResult loginResult) {
if (!progressDialog.isShowing()) {
// no longer attached to activity!
return;
}
compositeDisposable.clear(); compositeDisposable.clear();
sessionManager.setUserLoggedIn(true); sessionManager.setUserLoggedIn(true);
sessionManager.updateAccount(loginResult); sessionManager.updateAccount(loginResult);

View file

@ -28,7 +28,7 @@ class LoginClient(private val loginInterface: LoginInterface) {
*/ */
private var userLanguage = "" private var userLanguage = ""
fun getLoginToken() = loginInterface.getLoginToken() private fun getLoginToken() = loginInterface.getLoginToken()
fun request(userName: String, password: String, cb: LoginCallback) { fun request(userName: String, password: String, cb: LoginCallback) {
cancel() cancel()
@ -106,6 +106,33 @@ class LoginClient(private val loginInterface: LoginInterface) {
}) })
} }
fun doLogin(
username: String,
password: String,
twoFactorCode: String,
userLanguage: String,
loginCallback: LoginCallback
) {
getLoginToken().enqueue(object :Callback<MwQueryResponse?>{
override fun onResponse(
call: Call<MwQueryResponse?>,
response: Response<MwQueryResponse?>
) = if (response.isSuccessful){
val loginToken = response.body()?.query()?.loginToken()
loginToken?.let {
login(username, password, null, twoFactorCode, it, userLanguage, loginCallback)
} ?: run {
loginCallback.error(IOException("Failed to retrieve login token"))
}
} else {
loginCallback.error(IOException("Failed to retrieve login token"))
}
override fun onFailure(call: Call<MwQueryResponse?>, t: Throwable) {
loginCallback.error(t)
}
})
}
@Throws(Throwable::class) @Throws(Throwable::class)
fun loginBlocking(userName: String, password: String, twoFactorCode: String?) { fun loginBlocking(userName: String, password: String, twoFactorCode: String?) {
val tokenResponse = getLoginToken().execute() val tokenResponse = getLoginToken().execute()

View file

@ -12,7 +12,6 @@ import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList; import java.util.ArrayList;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsFragment;
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment; import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment;
public class BookmarksPagerAdapter extends FragmentPagerAdapter { public class BookmarksPagerAdapter extends FragmentPagerAdapter {

View file

@ -5,7 +5,6 @@ import static fr.free.nrw.commons.notification.NotificationHelper.NOTIFICATION_E
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.util.Log;
import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;

View file

@ -2,7 +2,6 @@ package fr.free.nrw.commons.contributions;
import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT; import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT;
import android.Manifest;
import android.Manifest.permission; import android.Manifest.permission;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;

View file

@ -12,7 +12,6 @@ import androidx.room.Update;
import io.reactivex.Completable; import io.reactivex.Completable;
import io.reactivex.Single; import io.reactivex.Single;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
@Dao @Dao

View file

@ -1,7 +1,6 @@
package fr.free.nrw.commons.contributions; package fr.free.nrw.commons.contributions;
import fr.free.nrw.commons.BasePresenter; import fr.free.nrw.commons.BasePresenter;
import java.util.List;
/** /**
* The contract for Contributions list View & Presenter * The contract for Contributions list View & Presenter

View file

@ -17,15 +17,12 @@ import android.view.ViewGroup;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -33,7 +30,6 @@ import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver;
import androidx.recyclerview.widget.RecyclerView.ItemAnimator; import androidx.recyclerview.widget.RecyclerView.ItemAnimator;
import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener; import androidx.recyclerview.widget.RecyclerView.OnItemTouchListener;
import androidx.recyclerview.widget.SimpleItemAnimator; import androidx.recyclerview.widget.SimpleItemAnimator;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;

View file

@ -5,7 +5,6 @@ import com.google.gson.Gson;
import fr.free.nrw.commons.explore.categories.CategoriesModule; import fr.free.nrw.commons.explore.categories.CategoriesModule;
import fr.free.nrw.commons.navtab.MoreBottomSheetFragment; import fr.free.nrw.commons.navtab.MoreBottomSheetFragment;
import fr.free.nrw.commons.navtab.MoreBottomSheetLoggedOutFragment; import fr.free.nrw.commons.navtab.MoreBottomSheetLoggedOutFragment;
import fr.free.nrw.commons.navtab.NavTabLayout;
import fr.free.nrw.commons.upload.worker.UploadWorker; import fr.free.nrw.commons.upload.worker.UploadWorker;
import javax.inject.Singleton; import javax.inject.Singleton;

View file

@ -2,12 +2,10 @@ package fr.free.nrw.commons.explore.map;
import android.content.Context; import android.content.Context;
import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.camera.CameraUpdate;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.nearby.NearbyBaseMarker; import fr.free.nrw.commons.nearby.NearbyBaseMarker;
import fr.free.nrw.commons.nearby.Place;
import java.util.List; import java.util.List;
public class ExploreMapContract { public class ExploreMapContract {

View file

@ -1,15 +1,12 @@
package fr.free.nrw.commons.explore.map; package fr.free.nrw.commons.explore.map;
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED; import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED;
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.MAP_UPDATED;
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.SEARCH_CUSTOM_AREA; import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.SEARCH_CUSTOM_AREA;
import android.location.Location; import android.location.Location;
import android.view.View; import android.view.View;
import com.mapbox.mapboxsdk.annotations.Marker; import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory;
import com.mapbox.mapboxsdk.geometry.LatLngBounds;
import fr.free.nrw.commons.MapController; import fr.free.nrw.commons.MapController;
import fr.free.nrw.commons.MapController.ExplorePlacesInfo; import fr.free.nrw.commons.MapController.ExplorePlacesInfo;
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao; import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
@ -18,7 +15,6 @@ import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType; import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType;
import fr.free.nrw.commons.nearby.NearbyBaseMarker; import fr.free.nrw.commons.nearby.NearbyBaseMarker;
import fr.free.nrw.commons.utils.LocationUtils;
import io.reactivex.Observable; import io.reactivex.Observable;
import java.lang.reflect.Proxy; import java.lang.reflect.Proxy;
import java.util.List; import java.util.List;

View file

@ -4,8 +4,6 @@ import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.databinding.DialogFeedbackBinding; import fr.free.nrw.commons.databinding.DialogFeedbackBinding;
import fr.free.nrw.commons.feedback.model.Feedback; import fr.free.nrw.commons.feedback.model.Feedback;

View file

@ -7,7 +7,6 @@ import android.content.pm.PackageManager;
import android.provider.Settings; import android.provider.Settings;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.filepicker.Constants;
import fr.free.nrw.commons.filepicker.Constants.RequestCodes; import fr.free.nrw.commons.filepicker.Constants.RequestCodes;
import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.DialogUtil;
import fr.free.nrw.commons.utils.PermissionUtils; import fr.free.nrw.commons.utils.PermissionUtils;

View file

@ -76,14 +76,11 @@ import fr.free.nrw.commons.delete.DeleteHelper;
import fr.free.nrw.commons.delete.ReasonBuilder; import fr.free.nrw.commons.delete.ReasonBuilder;
import fr.free.nrw.commons.description.DescriptionEditActivity; import fr.free.nrw.commons.description.DescriptionEditActivity;
import fr.free.nrw.commons.description.DescriptionEditHelper; import fr.free.nrw.commons.description.DescriptionEditHelper;
import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.media.ZoomableActivity.ZoomableActivityConstants;
import fr.free.nrw.commons.profile.ProfileActivity; import fr.free.nrw.commons.profile.ProfileActivity;
import fr.free.nrw.commons.review.ReviewController;
import fr.free.nrw.commons.review.ReviewHelper; import fr.free.nrw.commons.review.ReviewHelper;
import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.ui.widget.HtmlTextView; import fr.free.nrw.commons.ui.widget.HtmlTextView;
@ -98,7 +95,6 @@ import io.reactivex.Observable;
import io.reactivex.ObservableSource; import io.reactivex.ObservableSource;
import io.reactivex.Single; import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;

View file

@ -2,7 +2,6 @@ package fr.free.nrw.commons.media;
import static fr.free.nrw.commons.Utils.handleWebUrl; import static fr.free.nrw.commons.Utils.handleWebUrl;
import android.annotation.SuppressLint;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -48,9 +47,7 @@ import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;

View file

@ -7,7 +7,6 @@ import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.gson.Gson; import com.google.gson.Gson;
import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.campaigns.CampaignResponseDTO; import fr.free.nrw.commons.campaigns.CampaignResponseDTO;
import fr.free.nrw.commons.explore.depictions.DepictsClient; import fr.free.nrw.commons.explore.depictions.DepictsClient;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;

View file

@ -1,8 +1,5 @@
package fr.free.nrw.commons.nearby; package fr.free.nrw.commons.nearby;
import static fr.free.nrw.commons.utils.LengthUtils.computeDistanceBetween;
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;

View file

@ -1,7 +1,6 @@
package fr.free.nrw.commons.nearby; package fr.free.nrw.commons.nearby;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -12,15 +11,12 @@ import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearSmoothScroller; import androidx.recyclerview.widget.LinearSmoothScroller;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList; import java.util.ArrayList;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.nearby.presenter.NearbyParentFragmentPresenter;
import java.util.Collections;
public class NearbyFilterSearchRecyclerViewAdapter public class NearbyFilterSearchRecyclerViewAdapter
extends RecyclerView.Adapter<NearbyFilterSearchRecyclerViewAdapter.RecyclerViewHolder> extends RecyclerView.Adapter<NearbyFilterSearchRecyclerViewAdapter.RecyclerViewHolder>

View file

@ -4,7 +4,6 @@ import android.net.Uri;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.text.TextUtils;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;

View file

@ -6,22 +6,13 @@ import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat; import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import com.dinuscxj.progressbar.CircleProgressBar;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.SessionManager;

View file

@ -13,7 +13,6 @@ import androidx.paging.PagedListAdapter;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.facebook.drawee.view.SimpleDraweeView; import com.facebook.drawee.view.SimpleDraweeView;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.profile.ProfileActivity; import fr.free.nrw.commons.profile.ProfileActivity;
/** /**

View file

@ -14,9 +14,6 @@ import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.dinuscxj.progressbar.CircleProgressBar;
import fr.free.nrw.commons.databinding.ActivityQuizResultBinding; import fr.free.nrw.commons.databinding.ActivityQuizResultBinding;
import java.io.File; import java.io.File;

View file

@ -6,7 +6,6 @@ import android.content.Intent;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;

View file

@ -21,7 +21,6 @@ import fr.free.nrw.commons.R;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
public class ReviewImageFragment extends CommonsDaggerSupportFragment { public class ReviewImageFragment extends CommonsDaggerSupportFragment {

View file

@ -2,10 +2,8 @@ package fr.free.nrw.commons.ui;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.os.Build;
import android.os.Build.VERSION; import android.os.Build.VERSION;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;

View file

@ -3,7 +3,6 @@ package fr.free.nrw.commons.upload;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import io.reactivex.Observable;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;

View file

@ -18,8 +18,6 @@ import android.os.Build;
import android.os.Build.VERSION; import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES; import android.os.Build.VERSION_CODES;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.Settings; import android.provider.Settings;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.View; import android.view.View;
@ -45,7 +43,6 @@ import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.LoginActivity; import fr.free.nrw.commons.auth.LoginActivity;
import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.contributions.ContributionController; import fr.free.nrw.commons.contributions.ContributionController;
import fr.free.nrw.commons.contributions.MainActivity;
import fr.free.nrw.commons.filepicker.Constants.RequestCodes; import fr.free.nrw.commons.filepicker.Constants.RequestCodes;
import fr.free.nrw.commons.filepicker.UploadableFile; import fr.free.nrw.commons.filepicker.UploadableFile;
import fr.free.nrw.commons.kvstore.BasicKvStore; import fr.free.nrw.commons.kvstore.BasicKvStore;
@ -71,7 +68,6 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.io.File; import java.io.File;
import java.security.Permission;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;

View file

@ -2,7 +2,6 @@ package fr.free.nrw.commons.upload;
import android.os.Bundle; import android.os.Bundle;
import android.os.Parcelable;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;

View file

@ -2,32 +2,20 @@ package fr.free.nrw.commons.upload;
import android.accounts.Account; import android.accounts.Account;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.ComponentName;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.AssetFileDescriptor; import android.content.res.AssetFileDescriptor;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.IBinder;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.work.OneTimeWorkRequest;
import androidx.work.WorkManager;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.contributions.ContributionDao;
import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.worker.UploadWorker;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;

View file

@ -10,7 +10,6 @@ import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.nearby.Place; import fr.free.nrw.commons.nearby.Place;
import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.depicts.DepictsFragment;
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem; import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.Single; import io.reactivex.Single;

View file

@ -10,14 +10,10 @@ import android.text.style.ClickableSpan;
import android.text.style.URLSpan; import android.text.style.URLSpan;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener; import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -25,12 +21,7 @@ import androidx.annotation.Nullable;
import fr.free.nrw.commons.databinding.FragmentMediaLicenseBinding; import fr.free.nrw.commons.databinding.FragmentMediaLicenseBinding;
import fr.free.nrw.commons.upload.UploadActivity; import fr.free.nrw.commons.upload.UploadActivity;
import fr.free.nrw.commons.utils.DialogUtil; import fr.free.nrw.commons.utils.DialogUtil;
import java.util.List;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.upload.UploadBaseFragment; import fr.free.nrw.commons.upload.UploadBaseFragment;

View file

@ -1,7 +1,5 @@
package fr.free.nrw.commons.utils; package fr.free.nrw.commons.utils;
import static java.security.AccessController.getContext;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;

View file

@ -10,8 +10,6 @@ import androidx.annotation.Nullable;
import java.util.Date; import java.util.Date;
import static org.apache.commons.lang3.StringUtils.defaultString;
/** /**
* Immutable class that contains metadata associated with a PageTitle. * Immutable class that contains metadata associated with a PageTitle.
*/ */

View file

@ -6,8 +6,6 @@ import androidx.collection.ArraySet;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;

View file

@ -19,6 +19,7 @@
* NancyMilad * NancyMilad
* OsamaK * OsamaK
* Tala Ali * Tala Ali
* أيوب
* أَحمد * أَحمد
* ترجمان05 * ترجمان05
* ديفيد * ديفيد
@ -130,6 +131,7 @@
<string name="upload_failed">الملف غير موجود. فضلا اختر ملفا آخر.</string> <string name="upload_failed">الملف غير موجود. فضلا اختر ملفا آخر.</string>
<string name="retry_limit_reached">تم الوصول إلى الحد الأقصى لإعادة المحاولة! يرجى إلغاء التحميل والمحاولة مرة أخرى</string> <string name="retry_limit_reached">تم الوصول إلى الحد الأقصى لإعادة المحاولة! يرجى إلغاء التحميل والمحاولة مرة أخرى</string>
<string name="unrestricted_battery_mode">هل تريد إيقاف تشغيل تحسين البطارية؟</string> <string name="unrestricted_battery_mode">هل تريد إيقاف تشغيل تحسين البطارية؟</string>
<string name="suggest_unrestricted_mode">يعمل رفع أكثر من 3 صور بشكل أكثر موثوقية عند إيقاف تشغيل تحسين البطارية. يرجى إيقاف تشغيل تحسين البطارية لتطبيق كومنز من الإعدادات للحصول على تجربة تحميل سلسة. \n\nالخطوات الممكنة لإيقاف تشغيل تحسين البطارية:\n\nالخطوة 1: اضغط على زر \'الإعدادات\' أدناه.\n\nالخطوة 2: التبديل من \'غير محسّن\" إلى \'الكل التطبيقات\'.\n\nالخطوة 3: ابحث عن \'كومنز\' أو \'fr.free.nrw.commons\'.\n\nالخطوة 4: اضغط عليها وحدد \'عدم التحسين\'.\n\nالخطوة 5: اضغط على \'تم\'.</string>
<string name="authentication_failed">فشلت المصادقة; الرجاء تسجيل الدخول مرة أخرى</string> <string name="authentication_failed">فشلت المصادقة; الرجاء تسجيل الدخول مرة أخرى</string>
<string name="uploading_started">بدأ الرفع!</string> <string name="uploading_started">بدأ الرفع!</string>
<string name="uploading_queued">تحميل في قائمة الانتظار (وضع الاتصال المحدود ممكّن)</string> <string name="uploading_queued">تحميل في قائمة الانتظار (وضع الاتصال المحدود ممكّن)</string>
@ -244,8 +246,11 @@
<string name="read_storage_permission_rationale">صلاحية مطلوبة: قراءة وحدة التخزين الخارجية، لا يمكن للتطبيق الوصول إلى معرض الصور الخاص بك بدونها.</string> <string name="read_storage_permission_rationale">صلاحية مطلوبة: قراءة وحدة التخزين الخارجية، لا يمكن للتطبيق الوصول إلى معرض الصور الخاص بك بدونها.</string>
<string name="write_storage_permission_rationale">صلاحية مطلوبة: اكتب وحدة التخزين الخارجية، لا يمكن للتطبيق الوصول إلى معرض الصور/الكاميرا الخاصة بك بدونها.</string> <string name="write_storage_permission_rationale">صلاحية مطلوبة: اكتب وحدة التخزين الخارجية، لا يمكن للتطبيق الوصول إلى معرض الصور/الكاميرا الخاصة بك بدونها.</string>
<string name="location_permission_title">جارٍ طلب إذن الموقع</string> <string name="location_permission_title">جارٍ طلب إذن الموقع</string>
<string name="in_app_camera_location_permission_title">سجل الموقع للقطات داخل التطبيق</string>
<string name="in_app_camera_location_switch_pref_summary">قم بتمكين هذا لتسجيل الموقع باستخدام لقطات داخل التطبيق في حالة عدم قيام كاميرا الجهاز بتسجيله</string>
<string name="ok">موافق</string> <string name="ok">موافق</string>
<string name="warning">تحذير</string> <string name="warning">تحذير</string>
<string name="duplicate_file_name">عُثِرَ على اسم ملف مكرر</string>
<string name="upload">رفع</string> <string name="upload">رفع</string>
<string name="yes">نعم</string> <string name="yes">نعم</string>
<string name="no">لا</string> <string name="no">لا</string>
@ -321,6 +326,7 @@
<string name="copy_wikicode">انسخ نص الويكي إلى الكليب بورد</string> <string name="copy_wikicode">انسخ نص الويكي إلى الكليب بورد</string>
<string name="wikicode_copied">نص الويكي تم نسخه إلى الكليب بورد</string> <string name="wikicode_copied">نص الويكي تم نسخه إلى الكليب بورد</string>
<string name="nearby_location_not_available">قد لا تعمل الأجهزة المجاورة بشكل صحيح، الموقع غير متوفر.</string> <string name="nearby_location_not_available">قد لا تعمل الأجهزة المجاورة بشكل صحيح، الموقع غير متوفر.</string>
<string name="upload_location_access_denied">رُفض الوصول إلى الموقع. يرجى ضبط موقعك يدويًا لاستخدام هذه الميزة.</string>
<string name="location_permission_rationale_nearby">صلاحية مطلوبة لعرض قائمة بالأماكن القريبة</string> <string name="location_permission_rationale_nearby">صلاحية مطلوبة لعرض قائمة بالأماكن القريبة</string>
<string name="nearby_directions">الاتجاهات</string> <string name="nearby_directions">الاتجاهات</string>
<string name="nearby_wikidata">ويكي بيانات</string> <string name="nearby_wikidata">ويكي بيانات</string>
@ -388,7 +394,9 @@
<string name="wrong">إجابة خاطئة</string> <string name="wrong">إجابة خاطئة</string>
<string name="quiz_screenshot_question">هل هذه الصورة موافقة للرفع؟</string> <string name="quiz_screenshot_question">هل هذه الصورة موافقة للرفع؟</string>
<string name="share_app_title">شارك التطبيق</string> <string name="share_app_title">شارك التطبيق</string>
<string name="rotate">تدوير</string>
<string name="error_fetching_nearby_places">خطأ في جلب الأماكن المجاورة.</string> <string name="error_fetching_nearby_places">خطأ في جلب الأماكن المجاورة.</string>
<string name="no_pictures_in_this_area">لا توجد صور في هذه المنطقة</string>
<string name="no_nearby_places_around">لا توجد أماكن قريبة بالجوار</string> <string name="no_nearby_places_around">لا توجد أماكن قريبة بالجوار</string>
<string name="error_fetching_nearby_monuments">خطأ في جلب المعالم القريبة.</string> <string name="error_fetching_nearby_monuments">خطأ في جلب المعالم القريبة.</string>
<string name="no_recent_searches">لا توجد عمليات بحث حديثة</string> <string name="no_recent_searches">لا توجد عمليات بحث حديثة</string>
@ -468,7 +476,15 @@
<string name="ends_on">ينتهي في:</string> <string name="ends_on">ينتهي في:</string>
<string name="display_campaigns">عرض الحملات</string> <string name="display_campaigns">عرض الحملات</string>
<string name="display_campaigns_explanation">انظر الحملات الجارية</string> <string name="display_campaigns_explanation">انظر الحملات الجارية</string>
<string name="location_loss_warning" fuzzy="true">يرجى التأكد من أن منتقي أندرويد الجديد هذا لا يزيل الموقع من صورك.</string> <string name="in_app_camera_location_access_explanation">اسمح للتطبيق بجلب الموقع في حالة عدم تسجيله بالكاميرا. بعض كاميرات الأجهزة لا تسجل الموقع. في مثل هذه الحالات، فإن السماح للتطبيق بجلب الموقع وإرفاقه به يجعل مساهمتك أكثر فائدة. يمكنك تغيير هذا في أي وقت من خلال الإعدادات</string>
<string name="option_allow">السماح</string>
<string name="option_dismiss">رفض</string>
<string name="in_app_camera_needs_location">يرجى تشغيل الوصول إلى الموقع من الإعدادات والمحاولة مرة أخرى. \n\nملاحظة: قد لا يكون للتحميل موقع إذا كان التطبيق غير قادر على استرداد الموقع من الجهاز خلال فترة زمنية قصيرة.</string>
<string name="in_app_camera_location_permission_rationale">تحتاج الكاميرا داخل التطبيق إلى إذن تحديد الموقع لإرفاقها بصورك في حالة عدم توفر الموقع في EXIF. يرجى السماح للتطبيق بالوصول إلى موقعك والمحاولة مرة أخرى.\n\nملاحظة: قد لا يكون للتحميل موقع إذا كان التطبيق غير قادر على استرداد الموقع من الجهاز خلال فترة زمنية قصيرة.</string>
<string name="in_app_camera_location_permission_denied">لن يسجل التطبيق الموقع مع اللقطات بسبب عدم وجود إذن بالموقع</string>
<string name="in_app_camera_location_unavailable">لن يسجل التطبيق الموقع مع اللقطات أثناء إيقاف تشغيل نظام تحديد المواقع (GPS).</string>
<string name="open_document_photo_picker_explanation">يخاطر منتقي الصور الجديد لنظام Android بفقدان معلومات الموقع. قم بالتمكين إذا بدا أنك تستخدمه.</string>
<string name="location_loss_warning">قد يؤدي إيقاف تشغيل هذا إلى تشغيل منتقي صور Android الجديد. ويخاطر بفقدان معلومات الموقع.\n\nاضغط على \"اقرأ المزيد\" لمزيد من المعلومات.</string>
<string name="nearby_campaign_dismiss_message">لن ترى الحملات بعد الآن، ومع ذلك، يمكنك إعادة تمكين هذا الإشعار في الإعدادات إذا كنت ترغب.</string> <string name="nearby_campaign_dismiss_message">لن ترى الحملات بعد الآن، ومع ذلك، يمكنك إعادة تمكين هذا الإشعار في الإعدادات إذا كنت ترغب.</string>
<string name="this_function_needs_network_connection">تتطلب هذه الوظيفة الاتصال بالشبكة; يُرجَى التحقق من إعدادات اتصالك.</string> <string name="this_function_needs_network_connection">تتطلب هذه الوظيفة الاتصال بالشبكة; يُرجَى التحقق من إعدادات اتصالك.</string>
<string name="error_processing_image">حدث خطأ أثناء معالجة الصورة. رجاءً حاول مرة أخرى!</string> <string name="error_processing_image">حدث خطأ أثناء معالجة الصورة. رجاءً حاول مرة أخرى!</string>
@ -530,6 +546,7 @@
<string name="exif_tag_name_lensModel">طراز العدسة</string> <string name="exif_tag_name_lensModel">طراز العدسة</string>
<string name="exif_tag_name_serialNumbers">الأرقام التسلسلية</string> <string name="exif_tag_name_serialNumbers">الأرقام التسلسلية</string>
<string name="exif_tag_name_software">برمجية</string> <string name="exif_tag_name_software">برمجية</string>
<string name="media_location_permission_denied">رفض الوصول إلى موقع الوسائط</string>
<string name="share_text">ارفع الصور لويكيميديا ​​كومنز مباشرة من هاتفك. قم بتنزيل تطبيق كومنز الآن: %1$s</string> <string name="share_text">ارفع الصور لويكيميديا ​​كومنز مباشرة من هاتفك. قم بتنزيل تطبيق كومنز الآن: %1$s</string>
<string name="share_via">مشاركة التطبيق عبر...</string> <string name="share_via">مشاركة التطبيق عبر...</string>
<string name="image_info">معلومات الصورة</string> <string name="image_info">معلومات الصورة</string>
@ -766,4 +783,6 @@
<string name="storage_permissions_denied">رُفض إذن التخزين</string> <string name="storage_permissions_denied">رُفض إذن التخزين</string>
<string name="unable_to_share_upload_item">تعذر مشاركة هذا العنصر</string> <string name="unable_to_share_upload_item">تعذر مشاركة هذا العنصر</string>
<string name="permissions_are_required_for_functionality">الإذن مطلوب لهذه الوظيفة</string> <string name="permissions_are_required_for_functionality">الإذن مطلوب لهذه الوظيفة</string>
<string name="send_thanks_to_author">اشكر المؤلف</string>
<string name="error_sending_thanks">حدث خطأ أثناء إرسال الشكر للمؤلف.</string>
</resources> </resources>

View file

@ -659,4 +659,8 @@
<string name="edit_image">Muokkaa kuvaa</string> <string name="edit_image">Muokkaa kuvaa</string>
<string name="edit_location">Muokkaa sijaintia</string> <string name="edit_location">Muokkaa sijaintia</string>
<string name="send_thanks_to_author">Kiitä tekijää</string> <string name="send_thanks_to_author">Kiitä tekijää</string>
<plurals name="custom_picker_images_selected_title_appendix">
<item quantity="one">%d kuva valittu</item>
<item quantity="other">%d kuvaa valittu</item>
</plurals>
</resources> </resources>

View file

@ -192,6 +192,7 @@
<string name="write_storage_permission_rationale">Demandita permiso: Skribar en extera konservilo. La programo \'\'app\'\' ne povas acesar vua kamero/galerio sen to.</string> <string name="write_storage_permission_rationale">Demandita permiso: Skribar en extera konservilo. La programo \'\'app\'\' ne povas acesar vua kamero/galerio sen to.</string>
<string name="location_permission_title">Demandanta permiso pri lokizo</string> <string name="location_permission_title">Demandanta permiso pri lokizo</string>
<string name="in_app_camera_location_permission_title">Enrejistras la lokizo por imaji kaptita uzanta la programo (\'\'app\'\')</string> <string name="in_app_camera_location_permission_title">Enrejistras la lokizo por imaji kaptita uzanta la programo (\'\'app\'\')</string>
<string name="in_app_camera_location_switch_pref_summary">Kapabligez ca funciono por enrejistrar la lokizo di la fotografuri facita per \'\'app\'\', se la fotografilo qua uzesis ne enrejistris ta informo</string>
<string name="ok">O.K.</string> <string name="ok">O.K.</string>
<string name="warning">Averto</string> <string name="warning">Averto</string>
<string name="duplicate_file_name">Trovesis duopligita nomo di arkivo</string> <string name="duplicate_file_name">Trovesis duopligita nomo di arkivo</string>
@ -239,21 +240,33 @@
<string name="nearby_info_menu_wikidata_article">Arkivo de Wikidata</string> <string name="nearby_info_menu_wikidata_article">Arkivo de Wikidata</string>
<string name="nearby_info_menu_wikipedia_article">Artiklo di Wikipedio</string> <string name="nearby_info_menu_wikipedia_article">Artiklo di Wikipedio</string>
<string name="description_info">Voluntez deskriptar l\'artiklo tante kam posiblaː Ube vu obtenis ol? Qual esis la kuntexto? Deskriptez objekti o personi. Skribez informi qui povos esar facile verifikata, exemple la horo di la dio, se ol esas peizajo. Se l\'imajo montros ula diferanta kozo, explikez quo esas diferanta.</string> <string name="description_info">Voluntez deskriptar l\'artiklo tante kam posiblaː Ube vu obtenis ol? Qual esis la kuntexto? Deskriptez objekti o personi. Skribez informi qui povos esar facile verifikata, exemple la horo di la dio, se ol esas peizajo. Se l\'imajo montros ula diferanta kozo, explikez quo esas diferanta.</string>
<string name="caption_info">Skribez kurta deskripto pri ca imajo. L\'unesma subtexto uzesos kom titulo por l\'imajo. Limito: 255 literi.</string>
<string name="upload_problem_exist">Posibla problemi kun ta imajo:</string>
<string name="upload_problem_image_dark">L\'imajo esas multe obskura.</string> <string name="upload_problem_image_dark">L\'imajo esas multe obskura.</string>
<string name="upload_problem_image_blurry">L\'imajo esas nebuloza.</string> <string name="upload_problem_image_blurry">L\'imajo esas nebuloza.</string>
<string name="upload_problem_image_duplicate">L\'imajo ja existas che Commons.</string> <string name="upload_problem_image_duplicate">L\'imajo ja existas che Commons.</string>
<string name="upload_problem_different_geolocation">Ca imajo facesis en diferanta loko.</string> <string name="upload_problem_different_geolocation">Ca imajo facesis en diferanta loko.</string>
<string name="upload_problem_fbmd">Voluntez sendar nur imaji quin vu propra facis. Ne sendez imaji quin vu trovis en Facebook, che konti di altra personi.</string>
<string name="upload_problem_do_you_continue">Ka vu ankore deziras sendar l\'arkivo?</string> <string name="upload_problem_do_you_continue">Ka vu ankore deziras sendar l\'arkivo?</string>
<string name="upload_connection_error_alert_title">Eroro pri konekto</string> <string name="upload_connection_error_alert_title">Eroro pri konekto</string>
<string name="upload_connection_error_alert_detail">Por sendar arkivi l\'Interreto mustas esar konektata. Voluntez verifikar vua Interreto-konekto.</string> <string name="upload_connection_error_alert_detail">Por sendar arkivi l\'Interreto mustas esar konektata. Voluntez verifikar vua Interreto-konekto.</string>
<string name="upload_problem_image">Trovesis problemo en l\'imajo</string> <string name="upload_problem_image">Trovesis problemo en l\'imajo</string>
<string name="internet_downloaded">Atencez pri nur sendar imaji quin vu propra facis. Ne sendez imaji quin vu descharjis de Interreto.</string> <string name="internet_downloaded">Atencez pri nur sendar imaji quin vu propra facis. Ne sendez imaji quin vu descharjis de Interreto.</string>
<string name="login_to_your_account">Enirez en vua konto</string>
<string name="send_log_file">Sendez arkivo \'\'log\'\'</string> <string name="send_log_file">Sendez arkivo \'\'log\'\'</string>
<string name="null_url">Eroro! URL ne trovita</string>
<string name="nominate_deletion">Propozar efaco</string> <string name="nominate_deletion">Propozar efaco</string>
<string name="nominated_for_deletion">Ca imajo indikesis por efaco.</string>
<string name="nominated_see_more">Videz retpagino por detali</string> <string name="nominated_see_more">Videz retpagino por detali</string>
<string name="skip_login">Saltar</string> <string name="skip_login">Saltar</string>
<string name="navigation_item_login">Enirar</string>
<string name="skip_login_title">Ka vu deziras ne enirar?</string>
<string name="skip_login_message">Vu mustus facar \'\'log in\'\' por sendor imaji future.</string>
<string name="login_alert_message">Voluntez enirar por uzar ca utensilo</string>
<string name="copy_wikicode">Kopiez Wiki-texto a \'clipboard\'</string> <string name="copy_wikicode">Kopiez Wiki-texto a \'clipboard\'</string>
<string name="wikicode_copied">Wiki-texto kopiesis a \'clipboard\'</string> <string name="wikicode_copied">Wiki-texto kopiesis a \'clipboard\'</string>
<string name="nearby_location_not_available">Proximeso povas ne funcionar korekte, nam Lokizo ne esas disponebla.</string>
<string name="upload_location_access_denied">Aceso a lokizo ne permisita. Voluntez informar manuale vua lokizo por uzar ca resurso*.</string>
<string name="nearby_directions">Quale arivar</string> <string name="nearby_directions">Quale arivar</string>
<string name="nearby_wikidata">Wikidata</string> <string name="nearby_wikidata">Wikidata</string>
<string name="nearby_wikipedia">Wikipedio</string> <string name="nearby_wikipedia">Wikipedio</string>
@ -263,8 +276,10 @@
<string name="user_guide">Guidolibro por l\'uzero</string> <string name="user_guide">Guidolibro por l\'uzero</string>
<string name="welcome_skip_button">Saltez instrukti</string> <string name="welcome_skip_button">Saltez instrukti</string>
<string name="no_internet">Interreto ne funcionas</string> <string name="no_internet">Interreto ne funcionas</string>
<string name="no_notifications">Nula avizi trovita</string>
<string name="about_translate">Tradukar</string> <string name="about_translate">Tradukar</string>
<string name="about_translate_title">Lingui</string> <string name="about_translate_title">Lingui</string>
<string name="about_translate_message">Selektez l\'idiomo quan vu deziros sendar tradukuri</string>
<string name="about_translate_proceed">Durigar</string> <string name="about_translate_proceed">Durigar</string>
<string name="about_translate_cancel">Nuligar</string> <string name="about_translate_cancel">Nuligar</string>
<string name="retry">Probar itere</string> <string name="retry">Probar itere</string>
@ -305,12 +320,22 @@
<string name="selfie_answer">\'\'Selfie\'\'-imaji ne havas multa valoro che enciklopedio. Voluntez ne sendar imajo pri vu propra, ecepte se existas artiklo che Wikipedio pri vu.</string> <string name="selfie_answer">\'\'Selfie\'\'-imaji ne havas multa valoro che enciklopedio. Voluntez ne sendar imajo pri vu propra, ecepte se existas artiklo che Wikipedio pri vu.</string>
<string name="taj_mahal_answer">Imaji pri monumenti ed extera peizaji esas libera por sendar en la maxim multa landi. Savez ke tempal arto-instaluri facita en libera aero freque protektesas per autoroyuro. Do, li ne povas sendesar.</string> <string name="taj_mahal_answer">Imaji pri monumenti ed extera peizaji esas libera por sendar en la maxim multa landi. Savez ke tempal arto-instaluri facita en libera aero freque protektesas per autoroyuro. Do, li ne povas sendesar.</string>
<string name="screenshot_answer">Fotografuri de reto-pagini judikesas derivita verki, ed esas submisita a la sama autoroyuro kam la propra pagino. Ca imaji povas uzesar se l\'autoro permisas. Sen ca permiso, irga imajo quan vu kreos uzanta l\'imajo di la reto-pagino judikesas kom senlicenca kopiuro dil originala pagino.</string> <string name="screenshot_answer">Fotografuri de reto-pagini judikesas derivita verki, ed esas submisita a la sama autoroyuro kam la propra pagino. Ca imaji povas uzesar se l\'autoro permisas. Sen ca permiso, irga imajo quan vu kreos uzanta l\'imajo di la reto-pagino judikesas kom senlicenca kopiuro dil originala pagino.</string>
<string name="blurry_image_answer">Un ek la skopi di Commons esas asemblar imaji kun qualeso. Do, imaji nedicernebla ne devas sendesar. Probez fotografar sempre kun bona lumizo.</string>
<string name="construction_event_answer">Fotografuri pri teknologio o kultural aspekti esas sempre bonvenanta che Commons.</string>
<string name="congratulatory_message_quiz">Vu respondis korekte %1$s de la questioni. Gratuli!</string>
<string name="warning_for_no_answer">Selektez un ek la du opcioni por respondar la questiono</string>
<string name="user_not_logged_in">Sesiono di \'\'log in\'\' finis, voluntez enirar itere.</string>
<string name="quiz_result_share_message">Partigez vua quizo kun vua amiki!</string>
<string name="continue_message">Durigez</string> <string name="continue_message">Durigez</string>
<string name="correct">Korekta respondo</string> <string name="correct">Korekta respondo</string>
<string name="wrong">Nekorekta respondo</string> <string name="wrong">Nekorekta respondo</string>
<string name="quiz_screenshot_question">Ka ica skreno-kopiuro esas \'OK\' por sendar?</string> <string name="quiz_screenshot_question">Ka ica skreno-kopiuro esas \'OK\' por sendar?</string>
<string name="share_app_title">Partigez \'\'app\'\'</string> <string name="share_app_title">Partigez \'\'app\'\'</string>
<string name="rotate">Rotacar</string> <string name="rotate">Rotacar</string>
<string name="error_fetching_nearby_places">Eroro adportanta informi pri loki proxima.</string>
<string name="no_pictures_in_this_area">Nula pikturi en ca areo</string>
<string name="no_nearby_places_around">Nula loki proxima trovesis</string>
<string name="error_fetching_nearby_monuments">Eroro adportanta informi pri monumenti proxima.</string>
<string name="no_recent_searches">Nula recenta serchado</string> <string name="no_recent_searches">Nula recenta serchado</string>
<string name="delete_recent_searches_dialog">Ka tu fakte deziras efacar la historio-listo pri tua serchadi?</string> <string name="delete_recent_searches_dialog">Ka tu fakte deziras efacar la historio-listo pri tua serchadi?</string>
<string name="cancel_upload_dialog">Ka vu fakte deziras interuptar ca sendajo?</string> <string name="cancel_upload_dialog">Ka vu fakte deziras interuptar ca sendajo?</string>
@ -328,6 +353,7 @@
<string name="images_uploaded">Imaji sendita</string> <string name="images_uploaded">Imaji sendita</string>
<string name="image_reverts">Imaji ne reversionita</string> <string name="image_reverts">Imaji ne reversionita</string>
<string name="images_used_by_wiki">Imaji uzita</string> <string name="images_used_by_wiki">Imaji uzita</string>
<string name="achievements_share_message">Partigez vua sucesi kun vua amiki!</string>
<string name="achievements_revert_limit_message">minima quanto bezonata:</string> <string name="achievements_revert_limit_message">minima quanto bezonata:</string>
<string name="images_uploaded_explanation">Quanto di imaji quin vu sendis a Commons, uzanta irga softwaro* por sendar li</string> <string name="images_uploaded_explanation">Quanto di imaji quin vu sendis a Commons, uzanta irga softwaro* por sendar li</string>
<string name="images_reverted_explanation">La procento di imaji quin vu sendis a Commons, qui ne efacesis pose</string> <string name="images_reverted_explanation">La procento di imaji quin vu sendis a Commons, qui ne efacesis pose</string>
@ -341,6 +367,8 @@
<string name="notifications">Avizi</string> <string name="notifications">Avizi</string>
<string name="read_notifications">Avizi (lektita)</string> <string name="read_notifications">Avizi (lektita)</string>
<string name="list_sheet">Listo</string> <string name="list_sheet">Listo</string>
<string name="storage_permission">Permiso pri enmagazinigo</string>
<string name="step_count">Etapo %1$d de %2$d: %3$s</string>
<string name="next">Sequanta</string> <string name="next">Sequanta</string>
<string name="previous">Antea</string> <string name="previous">Antea</string>
<string name="upload_title_duplicate">Arkivo kun la nomo %1$s ja existas. Ka vu deziras durigar?\n\nNoto: Sufixo adequata adjuntesos automatale a la nomo dil imajo.</string> <string name="upload_title_duplicate">Arkivo kun la nomo %1$s ja existas. Ka vu deziras durigar?\n\nNoto: Sufixo adequata adjuntesos automatale a la nomo dil imajo.</string>

View file

@ -277,6 +277,7 @@
<string name="wrong">Falsch Äntwert</string> <string name="wrong">Falsch Äntwert</string>
<string name="share_app_title">App deelen</string> <string name="share_app_title">App deelen</string>
<string name="rotate">Dréinen</string> <string name="rotate">Dréinen</string>
<string name="no_pictures_in_this_area">Keng Biller an dëser Géigend</string>
<string name="nominate_delete">Nominéiere fir ze Läschen</string> <string name="nominate_delete">Nominéiere fir ze Läschen</string>
<string name="delete">Läschen</string> <string name="delete">Läschen</string>
<string name="Achievements">Realisatiounen</string> <string name="Achievements">Realisatiounen</string>

View file

@ -7,6 +7,7 @@
* MSClaudiu * MSClaudiu
* Minisarm * Minisarm
* Popetedenis * Popetedenis
* Rapiteanu
* Strainu * Strainu
* WebSourceContentRO * WebSourceContentRO
--> -->
@ -313,6 +314,7 @@
<string name="search_tab_title_depictions">Elemente</string> <string name="search_tab_title_depictions">Elemente</string>
<string name="explore_tab_title_featured">Recomandate</string> <string name="explore_tab_title_featured">Recomandate</string>
<string name="explore_tab_title_mobile">Încărcat de pe telefon</string> <string name="explore_tab_title_mobile">Încărcat de pe telefon</string>
<string name="explore_tab_title_map">Hartă</string>
<string name="successful_wikidata_edit">Imaginea adăugată la %1$s pe Wikidata!</string> <string name="successful_wikidata_edit">Imaginea adăugată la %1$s pe Wikidata!</string>
<string name="wikidata_edit_failure">Nu s-a actualizat entitatea corespunzătoare Wikidata!</string> <string name="wikidata_edit_failure">Nu s-a actualizat entitatea corespunzătoare Wikidata!</string>
<string name="menu_set_wallpaper">Setează ca Imagine de fundal</string> <string name="menu_set_wallpaper">Setează ca Imagine de fundal</string>
@ -583,4 +585,6 @@
<string name="leaderboard_nearby">În apropiere</string> <string name="leaderboard_nearby">În apropiere</string>
<string name="leaderboard_used">Utilizat</string> <string name="leaderboard_used">Utilizat</string>
<string name="leaderboard_my_rank_button_text">Rank-ul meu</string> <string name="leaderboard_my_rank_button_text">Rank-ul meu</string>
<string name="read_help_link">Citiți mai multe</string>
<string name="modify_location">Modifică locația</string>
</resources> </resources>

View file

@ -173,6 +173,8 @@
<string name="become_a_tester_title">Šatta betageahččaleaddji</string> <string name="become_a_tester_title">Šatta betageahččaleaddji</string>
<string name="logout_verification">Áiggutgo don duođaid čálihit olggos?</string> <string name="logout_verification">Áiggutgo don duođaid čálihit olggos?</string>
<string name="mediaimage_failed">Mediagovva ii lihkostuvvan</string> <string name="mediaimage_failed">Mediagovva ii lihkostuvvan</string>
<string name="no_subcategory_found">Ii oktage vuollekategoriija gávdnon</string>
<string name="no_parentcategory_found">Ii oktage badjekategoriija gávdnon</string>
<string name="cancel">Gaskkalduhte</string> <string name="cancel">Gaskkalduhte</string>
<string name="navigation_drawer_open">Raba</string> <string name="navigation_drawer_open">Raba</string>
<string name="navigation_drawer_close">Gidde</string> <string name="navigation_drawer_close">Gidde</string>
@ -183,6 +185,7 @@
<string name="navigation_item_logout">Čálit olggos</string> <string name="navigation_item_logout">Čálit olggos</string>
<string name="navigation_item_notification">Almmuhusat</string> <string name="navigation_item_notification">Almmuhusat</string>
<string name="navigation_item_review">Árvvoštala</string> <string name="navigation_item_review">Árvvoštala</string>
<string name="no_description_found">govvádus ii gávdnon</string>
<string name="nearby_info_menu_commons_article">Commons-fiilasiidu</string> <string name="nearby_info_menu_commons_article">Commons-fiilasiidu</string>
<string name="nearby_info_menu_wikipedia_article">Wikipedia-artihkal</string> <string name="nearby_info_menu_wikipedia_article">Wikipedia-artihkal</string>
<string name="login_to_your_account">Čálit sisa du dovddaldahkii</string> <string name="login_to_your_account">Čálit sisa du dovddaldahkii</string>
@ -195,6 +198,7 @@
<string name="about_translate">Jorgal</string> <string name="about_translate">Jorgal</string>
<string name="about_translate_title">Gielat</string> <string name="about_translate_title">Gielat</string>
<string name="about_translate_cancel">Gaskkalduhte</string> <string name="about_translate_cancel">Gaskkalduhte</string>
<string name="no_images_found">Ii oktage govva gávdnon!</string>
<string name="app_widget_heading">Beaivvi govva</string> <string name="app_widget_heading">Beaivvi govva</string>
<string name="menu_search_button">Oza</string> <string name="menu_search_button">Oza</string>
<string name="title_activity_search">Ohcan</string> <string name="title_activity_search">Ohcan</string>
@ -218,6 +222,7 @@
<string name="exif_tag_name_author">Vuoigŋadahkki</string> <string name="exif_tag_name_author">Vuoigŋadahkki</string>
<string name="exif_tag_name_location">Sadji</string> <string name="exif_tag_name_location">Sadji</string>
<string name="image_info">Govvadieđut</string> <string name="image_info">Govvadieđut</string>
<string name="no_categories_found">Ii oktage kategoriija gávdnon</string>
<string name="upload_cancelled">Fiilla vurkema gaskkalduhtton</string> <string name="upload_cancelled">Fiilla vurkema gaskkalduhtton</string>
<string name="delete_helper_show_deletion_title_failed">Ii lihkostuvvan</string> <string name="delete_helper_show_deletion_title_failed">Ii lihkostuvvan</string>
<string name="delete_helper_ask_reason_copyright_logo">Logo</string> <string name="delete_helper_ask_reason_copyright_logo">Logo</string>