Merge pull request #4537 from 4D17Y4/master-update

[GSoC] Master rebase
This commit is contained in:
Nicolas Raoul 2021-08-09 23:29:05 +09:00 committed by GitHub
commit bc994d162d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
44 changed files with 1231 additions and 236 deletions

View file

@ -2,6 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="fr.free.nrw.commons">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

View file

@ -178,9 +178,13 @@ public class Utils {
public static Bitmap getScreenShot(View view) {
View screenView = view.getRootView();
screenView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(screenView.getDrawingCache());
screenView.setDrawingCacheEnabled(false);
return bitmap;
Bitmap drawingCache = screenView.getDrawingCache();
if (drawingCache != null) {
Bitmap bitmap = Bitmap.createBitmap(drawingCache);
screenView.setDrawingCacheEnabled(false);
return bitmap;
}
return null;
}
/*

View file

@ -70,7 +70,9 @@ class ContributionBoundaryCallback @Inject constructor(
}
)
}else {
compositeDisposable.clear()
if (compositeDisposable != null){
compositeDisposable.clear()
}
}
}

View file

@ -74,8 +74,8 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
@BindView(R.id.fab_custom_gallery)
FloatingActionButton fabCustomGallery;
@Inject
SystemThemeUtils systemThemeUtils;
@Inject
SystemThemeUtils systemThemeUtils;
@Inject
ContributionController controller;
@ -265,34 +265,34 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl
});
}
@OnClick(R.id.fab_custom_gallery)
void launchCustomSelector(){
controller.initiateCustomGalleryPickWithPermission(getActivity());
}
private void animateFAB(final boolean isFabOpen) {
this.isFabOpen = !isFabOpen;
if (fabPlus.isShown()) {
if (isFabOpen) {
fabPlus.startAnimation(rotate_backward);
fabCamera.startAnimation(fab_close);
fabGallery.startAnimation(fab_close);
fabCustomGallery.startAnimation(fab_close);
fabCamera.hide();
fabGallery.hide();
fabCustomGallery.hide();
} else {
fabPlus.startAnimation(rotate_forward);
fabCamera.startAnimation(fab_open);
fabGallery.startAnimation(fab_open);
fabCustomGallery.startAnimation(fab_open);
fabCamera.show();
fabGallery.show();
fabCustomGallery.show();
}
this.isFabOpen = !isFabOpen;
@OnClick(R.id.fab_custom_gallery)
void launchCustomSelector(){
controller.initiateCustomGalleryPickWithPermission(getActivity());
}
private void animateFAB(final boolean isFabOpen) {
this.isFabOpen = !isFabOpen;
if (fabPlus.isShown()) {
if (isFabOpen) {
fabPlus.startAnimation(rotate_backward);
fabCamera.startAnimation(fab_close);
fabGallery.startAnimation(fab_close);
fabCustomGallery.startAnimation(fab_close);
fabCamera.hide();
fabGallery.hide();
fabCustomGallery.hide();
} else {
fabPlus.startAnimation(rotate_forward);
fabCamera.startAnimation(fab_open);
fabGallery.startAnimation(fab_open);
fabCustomGallery.startAnimation(fab_open);
fabCamera.show();
fabGallery.show();
fabCustomGallery.show();
}
this.isFabOpen = !isFabOpen;
}
}
}
/**
* Shows welcome message if user has no contributions yet i.e. new user.

View file

@ -1,5 +1,7 @@
package fr.free.nrw.commons.logging;
import static org.acra.ACRA.getErrorReporter;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
@ -62,6 +64,8 @@ public abstract class LogsSender implements ReportSender {
final Uri logFileUri = getZippedLogFileUri(context, report);
if (logFileUri != null) {
sendEmail(context, logFileUri);
} else {
getErrorReporter().handleSilentException(null);
}
}

View file

@ -546,8 +546,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
image.getHierarchy().setFailureImage(R.drawable.image_placeholder);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setLowResImageRequest(ImageRequest.fromUri(media.getThumbUrl()))
.setImageRequest(ImageRequest.fromUri(media.getImageUrl()))
.setLowResImageRequest(ImageRequest.fromUri(media != null ? media.getThumbUrl() : null))
.setImageRequest(ImageRequest.fromUri(media != null ? media.getImageUrl() : null))
.setControllerListener(aspectRatioListener)
.setOldController(image.getController())
.build();

View file

@ -1,8 +1,20 @@
package fr.free.nrw.commons.profile;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.FileProvider;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.viewpager.widget.ViewPager;
@ -10,12 +22,18 @@ import butterknife.BindView;
import butterknife.ButterKnife;
import com.google.android.material.tabs.TabLayout;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.ViewPagerAdapter;
import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.profile.achievements.AchievementsFragment;
import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment;
import fr.free.nrw.commons.theme.BaseActivity;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
/**
* This activity will set two tabs, achievements and
@ -31,6 +49,12 @@ public class ProfileActivity extends BaseActivity {
@BindView(R.id.tab_layout)
TabLayout tabLayout;
@BindView(R.id.toolbar)
Toolbar toolbar;
@Inject
SessionManager sessionManager;
private ViewPagerAdapter viewPagerAdapter;
private AchievementsFragment achievementsFragment;
private LeaderboardFragment leaderboardFragment;
@ -40,7 +64,9 @@ public class ProfileActivity extends BaseActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
ButterKnife.bind(this);
setTitle(R.string.Profile);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(sessionManager.getUserName());
supportFragmentManager = getSupportFragmentManager();
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
@ -49,6 +75,16 @@ public class ProfileActivity extends BaseActivity {
setTabs();
}
/**
* Navigate up event
* @return boolean
*/
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
/**
* Creates a way to change current activity to AchievementActivity
* @param context
@ -75,10 +111,84 @@ public class ProfileActivity extends BaseActivity {
viewPagerAdapter.notifyDataSetChanged();
}
@Override
public void onDestroy() {
super.onDestroy();
compositeDisposable.clear();
}
/**
* To inflate menu
* @param menu Menu
* @return boolean
*/
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
final MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu_about, menu);
return super.onCreateOptionsMenu(menu);
}
/**
* To receive the id of selected item and handle further logic for that selected item
* @param item MenuItem
* @return boolean
*/
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
// take screenshot in form of bitmap and show it in Alert Dialog
if (item.getItemId() == R.id.share_app_icon) {
final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);
final Bitmap screenShot = Utils.getScreenShot(rootView);
showAlert(screenShot);
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* It displays the alertDialog with Image of screenshot
* @param screenshot screenshot of the present screen
*/
public void showAlert(final Bitmap screenshot) {
final AlertDialog.Builder alert = new AlertDialog.Builder(this);
final LayoutInflater factory = LayoutInflater.from(this);
final View view = factory.inflate(R.layout.image_alert_layout, null);
final ImageView screenShotImage = view.findViewById(R.id.alert_image);
screenShotImage.setImageBitmap(screenshot);
final TextView shareMessage = view.findViewById(R.id.alert_text);
shareMessage.setText(R.string.achievements_share_message);
alert.setView(view);
alert.setPositiveButton(R.string.about_translate_proceed, (dialog, which) -> shareScreen(screenshot));
alert.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel());
alert.show();
}
/**
* To take bitmap and store it temporary storage and share it
* @param bitmap bitmap of screenshot
*/
void shareScreen(final Bitmap bitmap) {
try {
final File file = new File(getExternalCacheDir(), "screen.png");
final FileOutputStream fileOutputStream = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
file.setReadable(true, false);
final Uri fileUri = FileProvider
.getUriForFile(getApplicationContext(),
getPackageName() + ".provider", file);
grantUriPermission(getPackageName(), fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("image/png");
startActivity(Intent.createChooser(intent, getString(R.string.share_image_via)));
} catch (final IOException e) {
e.printStackTrace();
}
}
}

View file

@ -3,14 +3,10 @@ package fr.free.nrw.commons.profile.achievements;
import android.accounts.Account;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@ -21,22 +17,11 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.FileProvider;
import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import com.dinuscxj.progressbar.CircleProgressBar;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Objects;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import com.dinuscxj.progressbar.CircleProgressBar;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.auth.SessionManager;
@ -46,6 +31,9 @@ import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import java.util.Objects;
import javax.inject.Inject;
import org.apache.commons.lang3.StringUtils;
import timber.log.Timber;
/**
@ -174,74 +162,6 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment {
return rootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
// Inflate the menu; this adds items to the action bar if it is present.
super.onCreateOptionsMenu(menu, menuInflater);
menuInflater.inflate(R.menu.menu_about, menu);
item = menu.getItem(0);
item.setVisible(false);
}
/**
* To receive the id of selected item and handle further logic for that selected item
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// take screenshot in form of bitmap and show it in Alert Dialog
if (id == R.id.share_app_icon) {
View rootView = getActivity().getWindow().getDecorView().findViewById(android.R.id.content);
Bitmap screenShot = Utils.getScreenShot(rootView);
showAlert(screenShot);
}
return super.onOptionsItemSelected(item);
}
/**
* It displays the alertDialog with Image of screenshot
* @param screenshot
*/
public void showAlert(Bitmap screenshot){
AlertDialog.Builder alertadd = new AlertDialog.Builder(getActivity());
LayoutInflater factory = LayoutInflater.from(getActivity());
final View view = factory.inflate(R.layout.image_alert_layout, null);
ImageView screenShotImage = view.findViewById(R.id.alert_image);
screenShotImage.setImageBitmap(screenshot);
TextView shareMessage = view.findViewById(R.id.alert_text);
shareMessage.setText(R.string.achievements_share_message);
alertadd.setView(view);
alertadd.setPositiveButton(R.string.about_translate_proceed, (dialog, which) -> shareScreen(screenshot));
alertadd.setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.cancel());
alertadd.show();
}
/**
* To take bitmap and store it temporary storage and share it
* @param bitmap
*/
void shareScreen(Bitmap bitmap) {
try {
File file = new File(getActivity().getExternalCacheDir(), "screen.png");
FileOutputStream fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
file.setReadable(true, false);
Uri fileUri = FileProvider
.getUriForFile(getActivity().getApplicationContext(), getActivity().getPackageName()+".provider", file);
getActivity().grantUriPermission(getActivity().getPackageName(), fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(Intent.EXTRA_STREAM, fileUri);
intent.setType("image/png");
startActivity(Intent.createChooser(intent, getString(R.string.share_image_via)));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* To invoke the AlertDialog on clicking info button
*/

View file

@ -45,6 +45,7 @@ import fr.free.nrw.commons.upload.license.MediaLicenseFragment;
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment;
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.UploadMediaDetailFragmentCallback;
import fr.free.nrw.commons.upload.worker.UploadWorker;
import fr.free.nrw.commons.utils.DialogUtil;
import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
@ -107,6 +108,10 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
private Place place;
private List<UploadableFile> uploadableFiles = Collections.emptyList();
private int currentSelectedPosition = 0;
/*
Checks for if multiple files selected
*/
private boolean isMultipleFilesSelected = false;
public static final String EXTRA_FILES = "commons_image_exta";
@ -399,12 +404,20 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
Timber.d("Received intent %s with action %s", intent.toString(), intent.getAction());
uploadableFiles = intent.getParcelableArrayListExtra(EXTRA_FILES);
isMultipleFilesSelected = uploadableFiles.size() > 1;
Timber.i("Received multiple upload %s", uploadableFiles.size());
place = intent.getParcelableExtra(PLACE_OBJECT);
resetDirectPrefs();
}
/**
* Returns if multiple files selected or not.
*/
public boolean getIsMultipleFilesSelected() {
return isMultipleFilesSelected;
}
public void resetDirectPrefs() {
directKvStore.remove(PLACE_OBJECT);
}
@ -502,4 +515,20 @@ public class UploadActivity extends BaseActivity implements UploadContract.View,
uploadCategoriesFragment.setCallback(null);
}
}
/**
* Overrides the back button to make sure the user is prepared to lose their progress
*/
@Override
public void onBackPressed() {
DialogUtil.showAlertDialog(this,
getString(R.string.back_button_warning),
getString(R.string.back_button_warning_desc),
getString(R.string.back_button_continue),
getString(R.string.back_button_warning),
null,
this::finish
);
}
}

View file

@ -13,7 +13,7 @@ import java.util.Collections;
import java.util.List;
public class UploadItem {
private final Uri mediaUri;
private final String mimeType;
private ImageCoordinates gpsCoords;
@ -26,24 +26,24 @@ public class UploadItem {
private final Uri contentUri;
@SuppressLint("CheckResult")
UploadItem(final Uri mediaUri,
final String mimeType,
final ImageCoordinates gpsCoords,
final Place place,
final long createdTimestamp,
final String createdTimestampSource,
final Uri contentUri) {
this.createdTimestampSource = createdTimestampSource;
uploadMediaDetails = new ArrayList<>(Collections.singletonList(new UploadMediaDetail()));
this.place = place;
this.mediaUri = mediaUri;
this.mimeType = mimeType;
this.gpsCoords = gpsCoords;
this.createdTimestamp = createdTimestamp;
this.contentUri = contentUri;
imageQuality = BehaviorSubject.createDefault(ImageUtils.IMAGE_WAIT);
}
@SuppressLint("CheckResult")
UploadItem(final Uri mediaUri,
final String mimeType,
final ImageCoordinates gpsCoords,
final Place place,
final long createdTimestamp,
final String createdTimestampSource,
final Uri contentUri) {
this.createdTimestampSource = createdTimestampSource;
uploadMediaDetails = new ArrayList<>(Collections.singletonList(new UploadMediaDetail()));
this.place = place;
this.mediaUri = mediaUri;
this.mimeType = mimeType;
this.gpsCoords = gpsCoords;
this.createdTimestamp = createdTimestamp;
this.contentUri = contentUri;
imageQuality = BehaviorSubject.createDefault(ImageUtils.IMAGE_WAIT);
}
public String getCreatedTimestampSource() {
return createdTimestampSource;
@ -69,11 +69,11 @@ public class UploadItem {
return imageQuality.getValue();
}
public Uri getContentUri() { return contentUri; }
public Uri getContentUri() { return contentUri; }
public void setImageQuality(final int imageQuality) {
this.imageQuality.onNext(imageQuality);
}
public void setImageQuality(final int imageQuality) {
this.imageQuality.onNext(imageQuality);
}
/**
* Sets the corresponding place to the uploadItem

View file

@ -123,8 +123,6 @@ public class UploadMediaDetailAdapter extends RecyclerView.Adapter<UploadMediaDe
eventListener.onPrimaryCaptionTextChange(value.length() != 0);
}
}));
captionItemEditText.setText(uploadMediaDetail.getCaptionText());
descItemEditText.setText(uploadMediaDetail.getDescriptionText());
if (position == 0) {
removeButton.setVisibility(View.GONE);

View file

@ -1,7 +1,9 @@
package fr.free.nrw.commons.upload.categories;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@ -22,6 +24,7 @@ import com.jakewharton.rxbinding2.view.RxView;
import com.jakewharton.rxbinding2.widget.RxTextView;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.category.CategoryItem;
import fr.free.nrw.commons.upload.UploadActivity;
import fr.free.nrw.commons.upload.UploadBaseFragment;
import fr.free.nrw.commons.utils.DialogUtil;
import io.reactivex.android.schedulers.AndroidSchedulers;
@ -36,6 +39,8 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.tv_subtitle)
TextView tvSubTitle;
@BindView(R.id.til_container_search)
TextInputLayout tilContainerEtSearch;
@BindView(R.id.et_search)
@ -68,7 +73,8 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate
private void init() {
tvTitle.setText(getString(R.string.step_count, callback.getIndexInViewFlipper(this) + 1,
callback.getTotalNumberOfSteps(), getString(R.string.categories_activity_title)));
callback.getTotalNumberOfSteps(), getString(R.string.categories_activity_title)));
setTvSubTitle();
tooltip.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@ -89,6 +95,20 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate
.subscribe(filter -> searchForCategory(filter.toString()), Timber::e);
}
/**
* Removes the tv subtitle If the activity is the instance of [UploadActivity] and
* if multiple files aren't selected.
*/
private void setTvSubTitle() {
final Activity activity = getActivity();
if (activity instanceof UploadActivity) {
final boolean isMultipleFileSelected = ((UploadActivity) activity).getIsMultipleFilesSelected();
if (!isMultipleFileSelected) {
tvSubTitle.setVisibility(View.GONE);
}
}
}
private void searchForCategory(String query) {
presenter.searchForCategories(query);
}

View file

@ -1,5 +1,6 @@
package fr.free.nrw.commons.upload.depicts;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -20,6 +21,7 @@ import com.google.android.material.textfield.TextInputLayout;
import com.jakewharton.rxbinding2.view.RxView;
import com.jakewharton.rxbinding2.widget.RxTextView;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.upload.UploadActivity;
import fr.free.nrw.commons.upload.UploadBaseFragment;
import fr.free.nrw.commons.upload.UploadModel;
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
@ -41,6 +43,8 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
@BindView(R.id.depicts_title)
TextView depictsTitle;
@BindView(R.id.depicts_subtitle)
TextView depictsSubTitle;
@BindView(R.id.depicts_search_container)
TextInputLayout depictsSearchContainer;
@BindView(R.id.depicts_search)
@ -76,7 +80,8 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
*/
private void init() {
depictsTitle.setText(getString(R.string.step_count, callback.getIndexInViewFlipper(this) + 1,
callback.getTotalNumberOfSteps(), getString(R.string.depicts_step_title)));
callback.getTotalNumberOfSteps(), getString(R.string.depicts_step_title)));
setDepictsSubTitle();
tooltip.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@ -88,6 +93,20 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra
addTextChangeListenerToSearchBox();
}
/**
* Removes the depicts subtitle If the activity is the instance of [UploadActivity] and
* if multiple files aren't selected.
*/
private void setDepictsSubTitle() {
final Activity activity = getActivity();
if (activity instanceof UploadActivity) {
final boolean isMultipleFileSelected = ((UploadActivity) activity).getIsMultipleFilesSelected();
if (!isMultipleFileSelected) {
depictsSubTitle.setVisibility(View.GONE);
}
}
}
/**
* Initialise recyclerView and set adapter
*/

View file

@ -1,5 +1,6 @@
package fr.free.nrw.commons.upload.license;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
@ -20,6 +21,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import fr.free.nrw.commons.upload.UploadActivity;
import fr.free.nrw.commons.utils.DialogUtil;
import java.util.List;
@ -38,6 +40,8 @@ public class MediaLicenseFragment extends UploadBaseFragment implements MediaLic
@BindView(R.id.tv_title)
TextView tvTitle;
@BindView(R.id.tv_subtitle)
TextView tvSubTitle;
@BindView(R.id.spinner_license_list)
Spinner spinnerLicenseList;
@BindView(R.id.tv_share_license_summary)
@ -72,7 +76,8 @@ public class MediaLicenseFragment extends UploadBaseFragment implements MediaLic
private void init() {
tvTitle.setText(getString(R.string.step_count, callback.getIndexInViewFlipper(this) + 1,
callback.getTotalNumberOfSteps(), getString(R.string.license_step_title)));
callback.getTotalNumberOfSteps(), getString(R.string.license_step_title)));
setTvSubTitle();
tooltip.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@ -84,6 +89,20 @@ public class MediaLicenseFragment extends UploadBaseFragment implements MediaLic
presenter.getLicenses();
}
/**
* Removes the tv Subtitle If the activity is the instance of [UploadActivity] and
* if multiple files aren't selected.
*/
private void setTvSubTitle() {
final Activity activity = getActivity();
if (activity instanceof UploadActivity) {
final boolean isMultipleFileSelected = ((UploadActivity) activity).getIsMultipleFilesSelected();
if (!isMultipleFileSelected) {
tvSubTitle.setVisibility(View.GONE);
}
}
}
private void initPresenter() {
presenter.onAttachView(this);
}

View file

@ -1,46 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/depicts_layout"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/depicts_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/depict_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:checkMark="?android:attr/textCheckMark"
android:checked="false"
android:gravity="center_vertical"
android:padding="@dimen/tiny_gap"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/depicted_image"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/depict_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkMark="?android:attr/textCheckMark"
android:checked="false"
android:gravity="center_vertical"
android:padding="@dimen/tiny_gap"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/depicted_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:paddingRight="@dimen/tiny_gap"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/depict_checkbox"
app:layout_constraintTop_toTopOf="parent"
app:placeholderImage="@drawable/ic_wikidata_logo_24dp" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/depicted_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:paddingRight="@dimen/tiny_gap"
app:layout_constraintLeft_toRightOf="@+id/depict_checkbox"
app:layout_constraintTop_toTopOf="parent"
app:placeholderImage="@drawable/ic_wikidata_logo_24dp"/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/depicted_image"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/depicts_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Label"
android:textStyle="bold"
app:layout_constraintLeft_toRightOf="@+id/depicted_image"
app:layout_constraintTop_toTopOf="parent"
/>
android:id="@+id/depicts_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Label"
android:textStyle="bold" />
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Description"
app:layout_constraintLeft_toRightOf="@+id/depicted_image"
app:layout_constraintTop_toBottomOf="@+id/depicts_label" />
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Description" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Envlh
* Fraxinus.cs
* Pupsik-ipa
* Андрей
-->
@ -86,4 +87,5 @@
<string name="navigation_item_settings">Архиарақәа</string>
<string name="navigation_item_logout">Иҭыҵтәуп</string>
<string name="no_description_found">ахҳаа ԥшаам</string>
<string name="back_button_warning">Аҭагалара аԥыхра</string>
</resources>

View file

@ -395,6 +395,9 @@
<string name="no_categories_selected_warning_desc">Bilder ohne Kategorien sind selten nutzbar. Bist du sicher, dass du ohne die Auswahl von Kategorien hochladen möchtest?</string>
<string name="no_depictions_selected">Keine Motive ausgewählt</string>
<string name="no_depictions_selected_warning_desc">Bilder mit Motive sind leichter zu finden und werden eher verwendet. Bist dusicher, dass du ohne Auswahl von Motiven fortfahren möchtest?</string>
<string name="back_button_warning">Hochladen abbrechen</string>
<string name="back_button_warning_desc">Wenn du den Zurück-Button verwendest, wird das Hochladen abgebrochen und du verlierst deine bisherigen Schritte</string>
<string name="back_button_continue">Hochladen fortsetzen</string>
<string name="upload_flow_all_images_in_set">(für alle Bilder im Satz)</string>
<string name="search_this_area">Diesen Bereich durchsuchen</string>
<string name="nearby_card_permission_title">Berechtigungsanfrage</string>

View file

@ -236,6 +236,7 @@
<string name="upload_problem_different_geolocation">Tämä kuva otettiin eri paikassa.</string>
<string name="upload_problem_fbmd">Tallenna vain kuvia, jotka olet itse ottanut. Älä tallenna kuvia, joita olet löytänyt muiden ihmisten Facebook-tileiltä.</string>
<string name="upload_problem_do_you_continue">Haluatko silti tallentaa tämän kuvan?</string>
<string name="upload_connection_error_alert_title">Yhteysvirhe</string>
<string name="upload_problem_image">Kuvasta löytyi ongelmia</string>
<string name="internet_downloaded">Tallenna vain kuvia, jotka olet itse ottanut. Älä tallenna kuvia, joita olet ladannut internetistä.</string>
<string name="use_external_storage">Tallenna sovelluksen sisäisiä otoksia</string>
@ -452,6 +453,7 @@
<string name="exif_tag_name_serialNumbers">Sarjanumerot</string>
<string name="exif_tag_name_software">Ohjelmisto</string>
<string name="share_text">Lähetä valokuvia suoraan Wikimedia Commonsiin puhelimestasi. Lataa Commons-appi nyt: %1$s</string>
<string name="share_via">Jaa sovellus...</string>
<string name="image_info">Kuvan tiedot</string>
<string name="no_categories_found">Luokkia ei löytynyt</string>
<string name="upload_cancelled">Peruutettu tallennus</string>
@ -479,6 +481,7 @@
</plurals>
<string name="category_edit_helper_edit_message_else">Ei voitu lisätä luokkia.</string>
<string name="category_edit_button_text">Päivitetään luokkia</string>
<string name="coordinates_edit_helper_show_edit_title_success">Onnistui</string>
<string name="share_image_via">Jaa kuva</string>
<string name="no_achievements_yet">Et ole vielä lahjoittanut mitään</string>
<string name="account_created">Käyttäjätunnus luotu!</string>
@ -501,6 +504,7 @@
<string name="theme_default_name">Käytä järjestelmän</string>
<string name="theme_dark_name">Tumma</string>
<string name="theme_light_name">Vaalea</string>
<string name="ask_to_turn_location_on">Ota sijainti käyttöön?</string>
<string name="load_more">Lataa lisää</string>
<string name="nearby_no_results">Paikkoja ei löytynyt, yritä vaihtaa hakuehtojasi.</string>
<string name="todo_improve">Ehdota parannuksia:</string>
@ -547,7 +551,15 @@
<string name="resuming_upload">Jatketaan lähettämistä...</string>
<string name="pausing_upload">Keskeytetään lähetys...</string>
<string name="depicts_step_title">Esittää</string>
<string name="license_step_title">Median lisenssi</string>
<string name="media_detail_step_title">Median tiedot</string>
<string name="menu_view_category_page">Näytä luokkasivu</string>
<string name="read_help_link">Lue lisää</string>
<string name="media_detail_in_all_languages">Kaikilla kielillä</string>
<string name="choose_a_location">Valitse sijainti</string>
<string name="select_location_location_picker">Valitse sijainti</string>
<string name="show_in_map_app">Näytä karttasovelluksessa</string>
<string name="modify_location">Muokkaa sijaintia</string>
<string name="image_location">Kuvan sijainti</string>
<string name="check_whether_location_is_correct">Tarkista, onko sijainti oikea</string>
</resources>

View file

@ -403,6 +403,9 @@
<string name="no_categories_selected_warning_desc">Les images sans catégories sont rarement utilisables. Voulez-vous vraiment continuer sans sélectionner des catégories appropriées?</string>
<string name="no_depictions_selected">Aucun élément représenté sélectionné</string>
<string name="no_depictions_selected_warning_desc">Les images avec des éléments représentés sont plus faciles à trouver et plus susceptibles dêtre utilisées. Voulez-vous vraiment continuer sans sélectionner des éléments représentés?</string>
<string name="back_button_warning">Annuler le téléchargement</string>
<string name="back_button_warning_desc">Lutilisation du bouton de retour annulera ce téléchargement et vous perdrez votre progression</string>
<string name="back_button_continue">Continuer le téléchargement</string>
<string name="upload_flow_all_images_in_set">(Pour toutes les images dans le jeu)</string>
<string name="search_this_area">Chercher dans cette zone</string>
<string name="nearby_card_permission_title">Demande dautorisation</string>

View file

@ -386,6 +386,8 @@
<string name="no_categories_selected_warning_desc">Le immagini senza categorie sono raramente utilizzabili. Sei sicuro di voler continuare senza selezionare le categorie?</string>
<string name="no_depictions_selected">Non sono stati selezionati elementi</string>
<string name="no_depictions_selected_warning_desc">Le immagini con descrizioni possono essere trovate più facilmente ed è più probabile il loro utilizzo. Davvero vuoi continuare senza selezionare elementi raffigurati?</string>
<string name="back_button_warning">Annulla caricamento</string>
<string name="back_button_continue">Continua caricamento</string>
<string name="upload_flow_all_images_in_set">(Per tutte le immagini nell\'insieme)</string>
<string name="search_this_area">Cerca in questa area</string>
<string name="nearby_card_permission_title">Richiesta di permesso</string>

View file

@ -406,6 +406,9 @@
<string name="no_categories_selected_warning_desc">תמונות ללא קטגוריות בדרך כלל אינן שימושיות. להמשיך ללא בחירת קטגוריות?</string>
<string name="no_depictions_selected">לא נבחרו מוצגים</string>
<string name="no_depictions_selected_warning_desc">קל יותר למצוא תמונות עם מוצגים ויש סיכוי גבוה יותר שמישהו ישתמש בהן. האם ברצונך באמת להמשיך בלי לבחור מוצגים?</string>
<string name="back_button_warning">ביטול ההעלאה</string>
<string name="back_button_warning_desc">שימוש בכתפור החזרה יבטל את ההעלאה הזאת וההתקדמות שלך תלך לאיבוד</string>
<string name="back_button_continue">נמשך ההעלאה</string>
<string name="upload_flow_all_images_in_set">(לכל התמונות בסדרה)</string>
<string name="search_this_area">חיפוש באזור הזה</string>
<string name="nearby_card_permission_title">בקשת הרשאה</string>

View file

@ -9,6 +9,7 @@
* Hinaloe
* Kkairri
* LaMagiaaa
* MathXplore
* Nicolas Raoul
* Omotecho
* Otokoume
@ -31,11 +32,11 @@
<item quantity="other">(%1$d)</item>
</plurals>
<string name="starting_uploads">アップロードを開始中です</string>
<plurals name="starting_multiple_uploads" fuzzy="true">
<item quantity="other">%1$d 件のアップロードを開始</item>
<plurals name="starting_multiple_uploads">
<item quantity="other">%d 件のアップロードを処理</item>
</plurals>
<plurals name="multiple_uploads_title" fuzzy="true">
<item quantity="other">%1$d 件のアップロード</item>
<plurals name="multiple_uploads_title">
<item quantity="other">%d 件のアップロード</item>
</plurals>
<plurals name="share_license_summary">
<item quantity="one">この画像は%1$sライセンスのもとにアップロードされます</item>
@ -73,7 +74,7 @@
<string name="uploading_queued">アップロードは待機中です(接続制限モードが有効)</string>
<string name="upload_completed_notification_title">%1$s をアップロードしました!</string>
<string name="upload_completed_notification_text">アップロードしたものを表示するにはタップしてください</string>
<string name="upload_progress_notification_title_start" fuzzy="true">%1$s のアップロードを開始中</string>
<string name="upload_progress_notification_title_start">%s のアップロードを開始中</string>
<string name="upload_progress_notification_title_in_progress">%1$s をアップロード中</string>
<string name="upload_progress_notification_title_finishing">%1$s のアップロードを完了中</string>
<string name="upload_failed_notification_title">%1$s のアップロードに失敗しました</string>
@ -241,6 +242,8 @@
<string name="upload_problem_different_geolocation">この画像の撮影地点は別の場所です。</string>
<string name="upload_problem_fbmd">あなた自身の撮影したがぞうに限定してアップロードしてください。他人のFacebookアカウントの画像をアップロードすることはやめてください。</string>
<string name="upload_problem_do_you_continue">それでもこの画像をアップロードしますか?</string>
<string name="upload_connection_error_alert_title">接続エラーが発生しました</string>
<string name="upload_connection_error_alert_detail">アップロードの過程にはインタネットアクセスへの接続が必要です。ネットワーク接続をご確認ください。</string>
<string name="upload_problem_image">画像に問題があります</string>
<string name="internet_downloaded">あなた自身の撮影した画像に限定してアップロードしてください。ウェブ上からダウンロードした画像はアップロードできません。</string>
<string name="use_external_storage">アプリの画面キャプチャを保存</string>
@ -388,6 +391,9 @@
<string name="no_categories_selected_warning_desc">カテゴリを指定しない画像は使用されることがほとんどありません。ほんとうにカテゴリを選択しないまま作業を続けますか?</string>
<string name="no_depictions_selected">描写を選択していません</string>
<string name="no_depictions_selected_warning_desc">描写を添えた画像はないものよりも探しやすく利用されやすくなります。描写を選ばないまま、先に進んでよいですか?</string>
<string name="back_button_warning">アップロードをキャンセル</string>
<string name="back_button_warning_desc">バックボタンを使うとこのアップロードはキャンセルされ、これまでの進行は消失します</string>
<string name="back_button_continue">アップロードを続ける</string>
<string name="upload_flow_all_images_in_set" fuzzy="true">(画像全点を組み写真にする場合)</string>
<string name="search_this_area">この地域を検索</string>
<string name="nearby_card_permission_title">許可を申請</string>
@ -583,4 +589,8 @@
<string name="license_step_title">メディアのライセンス</string>
<string name="media_detail_step_title">メディアの詳細</string>
<string name="menu_view_category_page">カテゴリのページを表示</string>
<string name="media_detail_in_all_languages">すべての言語</string>
<string name="show_in_map_app">地図アプリに表示</string>
<string name="modify_location">位置を編集</string>
<string name="check_whether_location_is_correct">場所が正しいかどうかを確認する</string>
</resources>

View file

@ -382,6 +382,8 @@
<string name="no_categories_selected">선택된 분류 없음</string>
<string name="no_categories_selected_warning_desc">분류가 없는 그림은 거의 유용하지 않습니다. 분류를 선택하지 않고 제출하시겠습니까?</string>
<string name="no_depictions_selected">선택된 서술 없음</string>
<string name="back_button_warning">올리기 취소</string>
<string name="back_button_continue">계속 올리기</string>
<string name="search_this_area">이 지역을 검색</string>
<string name="nearby_card_permission_title">권한 요청</string>
<string name="nearby_card_permission_explanation">사진이 필요한 주변 장소를 표시하기 위해 현재 위치를 사용하시겠습니까?</string>
@ -524,4 +526,8 @@
<string name="media_detail_in_all_languages">모든 언어</string>
<string name="choose_a_location">장소 선택하기</string>
<string name="select_location_location_picker">장소 선택</string>
<string name="show_in_map_app">맵 앱에 표시</string>
<string name="modify_location">위치 편집</string>
<string name="image_location">이미지 위치</string>
<string name="check_whether_location_is_correct">위치가 올바른지 확인</string>
</resources>

View file

@ -2,6 +2,7 @@
<!-- Authors:
* Askar Nazyrov
* Maksat
* NR Deblocked
-->
<resources>
<plurals name="uploads_pending_notification_indicator" fuzzy="true">
@ -93,4 +94,7 @@
<string name="detail_panel_cats_loading" fuzzy="true">Жүктөлүүдө…</string>
<string name="detail_panel_cats_none">Тандалган жок</string>
<string name="menu_refresh">Жаңылоо</string>
<string name="back_button_warning">Жүктөөнү жокко чыгаруу</string>
<string name="back_button_warning_desc">Артка баскычын колдонуу менен бул жүктөө жокко чыгарылат жана сиз ийгиликти жоготосуз</string>
<string name="back_button_continue">Жүктөөнү улантуу</string>
</resources>

View file

@ -376,6 +376,9 @@
<string name="no_categories_selected_warning_desc">Некатегоризираните слики се слабо употребливи. Дали сигурно сакате да продолжите без да ставите категории?</string>
<string name="no_depictions_selected">Немате избрано прикажувања</string>
<string name="no_depictions_selected_warning_desc">Сликите со прикажувања се полезни за наоѓање, со што е поголема веројатноста дека ќе бидат искористени. Дали сигурно сакате да продолжите без да изберете прикажувања?</string>
<string name="back_button_warning">Откажи подигање</string>
<string name="back_button_warning_desc">Ако стиснете на копчето за одење назад, со тоа ќе го откажете подигањето и ќе го изгубите досегашниот напредок</string>
<string name="back_button_continue">Продолжи со подигање</string>
<string name="upload_flow_all_images_in_set">(За сите слики во збирот)</string>
<string name="search_this_area">Пребарај на ова подрачје</string>
<string name="nearby_card_permission_title">Барање за дозвола</string>

View file

@ -13,6 +13,7 @@
* Optilete
* Patio
* Robin van der Linde
* Romaine
* Rots61
* Siebrand
* Sjoerddebruin
@ -24,20 +25,31 @@
<item quantity="one">%1$d bestand aan het uploaden</item>
<item quantity="other">%1$d bestanden aan het uploaden</item>
</plurals>
<plurals name="contributions_subtitle" fuzzy="true">
<item quantity="zero">\@string/contributions_subtitle_zero</item>
<item quantity="one">%1$d upload</item>
<item quantity="other">%1$d uploads</item>
<plurals name="contributions_subtitle">
<item quantity="one">(%1$d)</item>
<item quantity="other">(%1$d)</item>
</plurals>
<plurals name="starting_multiple_uploads" fuzzy="true">
<string name="starting_uploads">Uploaden starten</string>
<plurals name="starting_multiple_uploads">
<item quantity="one">Bezig met 1 upload</item>
<item quantity="other">Bezig met %1$d uploads</item>
</plurals>
<plurals name="multiple_uploads_title" fuzzy="true">
<plurals name="multiple_uploads_title">
<item quantity="one">%1$d upload</item>
<item quantity="other">%1$d uploads</item>
</plurals>
<string name="share_license_summary" fuzzy="true">Deze afbeelding wordt gelicenseerd onder %1$s</string>
<plurals name="share_license_summary">
<item quantity="one">Deze afbeelding wordt gelicenseerd onder %1$s</item>
<item quantity="other">Deze afbeeldingen worden gelicenseerd onder %1$s</item>
</plurals>
<plurals name="upload_count_title">
<item quantity="one">%1$d upload</item>
<item quantity="other">%1$d uploads</item>
</plurals>
<plurals name="receiving_shared_content">
<item quantity="one">Gedeelde inhoud wordt ontvangen. Het verwerken van de afbeelding kan enige tijd duren, afhankelijk van de grootte van de afbeelding en uw apparaat</item>
<item quantity="other">Gedeelde inhoud wordt ontvangen. Het verwerken van de afbeeldingen kan enige tijd duren, afhankelijk van de grootte van de afbeeldingen en uw apparaat</item>
</plurals>
<string name="navigation_item_explore">Verkennen</string>
<string name="preference_category_appearance">Uiterlijk</string>
<string name="preference_category_general">Algemeen</string>
@ -60,6 +72,7 @@
<string name="upload_failed">Bestand niet gevonden. Probeer een ander bestand.</string>
<string name="authentication_failed">Verifiëring is mislukt. Meld je opnieuw aan.</string>
<string name="uploading_started">Uploaden is begonnen</string>
<string name="uploading_queued">Uploaden in wachtrij (beperkte verbindingsmodus ingeschakeld)</string>
<string name="upload_completed_notification_title">%1$s geüpload</string>
<string name="upload_completed_notification_text">Wijs aan om uw upload te bekijken</string>
<string name="upload_progress_notification_title_start">Bestand wordt geüpload: %s</string>
@ -81,31 +94,38 @@
<string name="menu_share">Delen</string>
<string name="menu_view_file_page">Bestandspagina bekijken</string>
<string name="share_title_hint">Titel (verplicht)</string>
<string name="add_caption_toast">Geef een bijschrift op voor dit bestand</string>
<string name="share_description_hint">Beschrijving</string>
<string name="share_caption_hint">Bijschrift</string>
<string name="login_failed_network">Aanmelden niet mogelijk. Er is een probleem met het netwerk</string>
<string name="login_failed_throttled">U hebt te vaak geprobeerd aan te melden. Probeer het over een aantal minuten opnieuw.</string>
<string name="login_failed_blocked">Deze gebruiker is helaas geblokkeerd op Wikimedia Commons</string>
<string name="login_failed_2fa_needed">U moet uw tweefactorauthenticatiecode opgeven.</string>
<string name="login_failed_generic">Aanmelden mislukt</string>
<string name="share_upload_button">Uploaden</string>
<string name="multiple_share_base_title">Geef deze verzameling een naam</string>
<string name="provider_modifications">Wijzigingen</string>
<string name="menu_upload_single">Uploaden</string>
<string name="categories_search_text_hint">Categorieën zoeken</string>
<string name="depicts_search_text_hint">Zoek naar items die uw media weergeven (berg, Taj Mahal, enz.)</string>
<string name="menu_save_categories">Opslaan</string>
<string name="refresh_button">Vernieuwen</string>
<string name="display_list_button">Lijst</string>
<string name="contributions_subtitle_zero">(Nog geen uploads)</string>
<string name="categories_not_found">Er zijn geen categorieën met \"%1$s\" gevonden</string>
<string name="categories_skip_explanation" fuzzy="true">Voeg categorieën toe om uw afbeeldingen makkelijker te vinden te maken op Wikimedia Commons.\n\nBegin met het toevoegen van categorieën.\n\nKlik op dit bericht, of ga terug, om deze stap over te slaan.</string>
<string name="depictions_not_found">Geen Wikidata-items gevonden die overeenkomen met %1$s</string>
<string name="categories_skip_explanation">Voeg categorieën toe om uw afbeeldingen makkelijker te vinden te maken op Wikimedia Commons.\nBegin met typen om categorieën toe te voegen.</string>
<string name="categories_activity_title">Categorieën</string>
<string name="title_activity_settings">Instellingen</string>
<string name="title_activity_signup">Registreren</string>
<string name="title_activity_featured_images">Uitgelichte afbeelding</string>
<string name="title_activity_category_details">Categorie</string>
<string name="title_activity_review">Peer review</string>
<string name="menu_about">Over</string>
<string name="about_license" fuzzy="true">Opensourcesoftware vrijgegeven onder de &lt;a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\"&gt;Apache License v2&lt;/a&gt;. Wikimedia Commons en haar logo zijn handelsmerken van de Wikimedia Foundation en worden gebruikt met toestemming van de Wikimedia Foundation. We worden niet bekrachtigd door en zijn niet verbonden met de Wikimedia Foundation.</string>
<string name="about_license">De Wikimedia Commons-app is een open-source-app die is gemaakt en onderhouden door begunstigden en vrijwilligers van de Wikimedia-gemeenschap. De Wikimedia Foundation is niet betrokken bij het maken, ontwikkelen of onderhouden van de app.</string>
<string name="about_improve">&lt;a href=\"https://github.com/commons-app/apps-android-commons\"&gt;Broncode&lt;/a&gt; en &lt;a href=\"https://commons-app.github.io/\"&gt;website&lt;/a&gt; op GitHub. Maak een nieuwe &lt;a href=\"%1$s\"&gt;melding op GitHub&lt;/a&gt; voor bugs en suggesties.</string>
<string name="about_privacy_policy">Privacybeleid</string>
<string name="about_credits">Credits</string>
<string name="title_activity_about">Over</string>
<string name="menu_feedback">Terugkoppeling geven (via e-mail)</string>
<string name="no_email_client">Geen e-mail-client geïnstalleerd</string>
@ -114,6 +134,7 @@
<string name="no_uploads_yet">U hebt nog geen afbeeldingen geüpload.</string>
<string name="menu_retry_upload">Opnieuw proberen</string>
<string name="menu_cancel_upload">Annuleren</string>
<string name="media_upload_policy">Door deze foto in te dienen, verklaar ik dat dit mijn eigen werk is, dat het geen auteursrechtelijk beschermd materiaal of selfies bevat en dat het verder voldoet aan het &lt;a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\"&gt;Wikimedia Commons-beleid&lt;/a&gt;.</string>
<string name="menu_download">Downloaden</string>
<string name="preference_license">Standaard licentie</string>
<string name="use_previous">Gebruik vorige titel en omschrijving</string>
@ -131,10 +152,16 @@
<string name="tutorial_1_subtext">Uw afbeeldingen helpen mensen over de hele wereld met kennis opdoen!</string>
<string name="tutorial_2_text">Upload alstublieft alleen afbeeldingen die volledig door uzelf gemaakt zijn:</string>
<string name="tutorial_2_subtext_1">Natuurlijke voorwerpen (bloemen, dieren, bergen)</string>
<string name="tutorial_2_subtext_2">Nuttige objecten (fietsen, treinstations)</string>
<string name="tutorial_2_subtext_3">Bekende mensen (uw burgemeester, olympische atleten die u ontmoet heeft)</string>
<string name="tutorial_3_text">Gelieve NIET te uploaden:</string>
<string name="tutorial_3_subtext_1">Selfies of foto\'s van uw vrienden</string>
<string name="tutorial_3_subtext_2">Foto\'s die u van internet heeft gedownload</string>
<string name="tutorial_3_subtext_3">Schermfoto\'s van oorspronkelijke toepassingen</string>
<string name="tutorial_4_text">Voorbeeld van een upload:</string>
<string name="tutorial_4_subtext_1">Titel: Opera van Sydney</string>
<string name="tutorial_4_subtext_2">Beschrijving: Sydney Opera House gezien vanaf de overkant van de baai</string>
<string name="tutorial_4_subtext_3">Categorieën: Sydney Opera House from the west, Sydney Opera House remote views</string>
<string name="welcome_wikipedia_text">Draag uw afbeelding bij. Help pagina\'s in Wikipedia tot leven te laten komen!</string>
<string name="welcome_wikipedia_subtext">Afbeeldingen op Wikipedia komen van Wikimedia Commons.</string>
<string name="welcome_copyright_text">Uw afbeeldingen helpen mensen van over de hele wereld te leren.</string>
@ -145,16 +172,24 @@
<string name="detail_panel_cats_label">Categorieën</string>
<string name="detail_panel_cats_loading">Laden...</string>
<string name="detail_panel_cats_none">Geen selectie</string>
<string name="detail_caption_empty">Geen onderschrift</string>
<string name="detail_description_empty">Geen beschrijving</string>
<string name="detail_discussion_empty">Geen overleg</string>
<string name="detail_license_empty">Onbekende licentie</string>
<string name="menu_refresh">Vernieuwen</string>
<string name="storage_permission_title">Opslagtoestemming aanvragen</string>
<string name="read_storage_permission_rationale">Benodigde toestemming: Lees externe opslag. Zonder toestemming kan de app uw foto galerij niet bekijken.</string>
<string name="write_storage_permission_rationale">Vereiste toestemming: externe opslag schrijven. Zonder dit heeft de app geen toegang tot uw camera/galerij.</string>
<string name="location_permission_title">Locatietoestemming aanvragen</string>
<string name="ok">OK</string>
<string name="warning">Waarschuwing</string>
<string name="duplicate_image_found">Dubbele afbeelding gevonden</string>
<string name="upload">Uploaden</string>
<string name="yes">Ja</string>
<string name="no">Nee</string>
<string name="media_detail_caption">Onderschrift</string>
<string name="media_detail_title">Titel</string>
<string name="media_detail_depiction">Beschrijvingen</string>
<string name="media_detail_description">Beschrijving</string>
<string name="media_detail_discussion">Overleg</string>
<string name="media_detail_author">Auteur</string>
@ -163,12 +198,23 @@
<string name="media_detail_coordinates">Coördinaten</string>
<string name="media_detail_coordinates_empty">Niet opgegeven</string>
<string name="become_a_tester_title">Word een bèta tester</string>
<string name="become_a_tester_description">Meld u aan voor ons bètakanaal op Google Play en krijg vroege toegang tot nieuwe functies en bugfixes</string>
<string name="_2fa_code">2FA-code</string>
<string name="logout_verification">Wilt u echt uitloggen?</string>
<string name="commons_logo">Commons logo</string>
<string name="commons_website">Commons website</string>
<string name="commons_facebook">Commons Facebookpagina</string>
<string name="commons_github">Commons Github-broncode</string>
<string name="mediaimage_failed">Media-afbeelding is mislukt</string>
<string name="no_subcategory_found">Geen subcategorieën gevonden</string>
<string name="no_parentcategory_found">Geen bovenliggende categorieën gevonden</string>
<string name="welcome_image_mount_zao">Mount Zao</string>
<string name="welcome_image_llamas">Lama\'s</string>
<string name="welcome_image_rainbow_bridge">Rainbow Bridge</string>
<string name="welcome_image_tulip">Tulp</string>
<string name="welcome_image_welcome_wikipedia">Welkom op Wikipedia</string>
<string name="welcome_image_welcome_copyright">Welkom Auteursrecht</string>
<string name="welcome_image_sydney_opera_house">Sydney Opera House</string>
<string name="cancel">Annuleren</string>
<string name="navigation_drawer_open">Openen</string>
<string name="navigation_drawer_close">Sluiten</string>
@ -181,19 +227,29 @@
<string name="navigation_item_logout">Afmelden</string>
<string name="navigation_item_info">Zelfstudie</string>
<string name="navigation_item_notification">Meldingen</string>
<string name="navigation_item_review">Beoordeling</string>
<string name="no_description_found">geen beschrijving gevonden</string>
<string name="nearby_info_menu_commons_article">Commons-bestandspagina</string>
<string name="nearby_info_menu_wikidata_article">Wikidata-item</string>
<string name="nearby_info_menu_wikipedia_article">Wikipedia-artikel</string>
<string name="description_info">Beschrijf de media zo veel mogelijk: Waar is de opname gemaakt? Wat laat het zien? Wat is de context? Beschrijf de objecten of personen. Onthul informatie die niet gemakkelijk te raden is, bijvoorbeeld het tijdstip van de dag als het een landschap is. Als de media iets ongewoons laat zien, leg dan uit wat het ongebruikelijk maakt.</string>
<string name="caption_info">Geef een korte beschrijving van de afbeelding. Het eerste bijschrift zou worden gebruikt als de titel voor de afbeelding. Beperk tot 255 tekens.</string>
<string name="upload_problem_exist">Mogelijke problemen met deze afbeelding:</string>
<string name="upload_problem_image_dark">Afbeelding is te donker.</string>
<string name="upload_problem_image_blurry">Afbeelding is onscherp.</string>
<string name="upload_problem_image_duplicate">Afbeelding staat al in Commons.</string>
<string name="upload_problem_different_geolocation">Deze foto is op een andere locatie genomen.</string>
<string name="upload_problem_fbmd">Upload alleen foto\'s die je zelf hebt genomen. Upload geen foto\'s die je op Facebookaccounts van anderen hebt gevonden.</string>
<string name="upload_problem_do_you_continue">Wil je deze afbeelding nog steeds uploaden?</string>
<string name="upload_connection_error_alert_title">Verbindingsfout</string>
<string name="upload_connection_error_alert_detail">Het uploadproces vereist een actieve internettoegang. Controleer uw netwerkverbinding.</string>
<string name="upload_problem_image">Problemen gevonden in afbeelding</string>
<string name="internet_downloaded">Upload alleen foto\'s die je zelf hebt genomen. Upload geen foto\'s die je van internet hebt gedownload.</string>
<string name="use_external_storage">In-app opnamen opslaan</string>
<string name="use_external_storage_summary">Foto\'s die met de in-app-camera zijn gemaakt, opslaan in de opslag van uw apparaat</string>
<string name="login_to_your_account">Aanmelden bij je profiel</string>
<string name="send_log_file">Logboekbestand verzenden</string>
<string name="send_log_file_description">Stuur een logbestand via e-mail naar ontwikkelaars om problemen met de app op te lossen. Opmerking: logboeken kunnen mogelijk identificerende informatie bevatten</string>
<string name="no_web_browser">Geen webbrowser gevonden om URL te openen</string>
<string name="null_url">Fout! URL niet gevonden</string>
<string name="nominate_deletion">Nomineer voor Verwijdering</string>
@ -217,6 +273,7 @@
<string name="welcome_skip_button">Zelfstudie overslaan</string>
<string name="no_internet">Geen internet</string>
<string name="error_notifications">Fout bij ophalen berichten.</string>
<string name="error_review">Fout bij ophalen van afbeelding voor beoordeling. Druk op vernieuwen om het opnieuw te proberen.</string>
<string name="no_notifications">Geen berichten.</string>
<string name="about_translate">Vertalen</string>
<string name="about_translate_title">Talen</string>
@ -224,68 +281,329 @@
<string name="about_translate_proceed">Ga door</string>
<string name="about_translate_cancel">Annuleren</string>
<string name="retry">Opnieuw proberen</string>
<string name="showcase_view_whole_nearby_activity">Dit zijn de plaatsen bij u in de buurt die foto\'s nodig hebben om bijbehorende Wikipedia-artikelen te illustreren.\n\nHet klikken op \'ZOEK IN DIT GEBIED\' vergrendelt de kaart en start een zoekopdracht in de buurt rond die locatie.</string>
<string name="showcase_view_needs_photo">Deze plaats heeft een foto nodig.</string>
<string name="showcase_view_has_photo">Deze plaats heeft al een foto.</string>
<string name="showcase_view_no_longer_exists">Deze plek bestaat niet meer.</string>
<string name="no_images_found">Geen afbeeldingen gevonden!</string>
<string name="error_loading_images">Er is een fout opgetreden tijdens het laden van de afbeeldingen.</string>
<string name="image_uploaded_by">Geüpload door: %1$s</string>
<string name="block_notification_title">Geblokkeerd</string>
<string name="block_notification">U bent geblokkeerd voor het bewerken van Commons</string>
<string name="appwidget_img">Afbeelding van de dag</string>
<string name="app_widget_heading">Afbeelding van de dag</string>
<string name="menu_search_button">Zoeken</string>
<string name="search_commons">Commons doorzoeken</string>
<string name="title_activity_search">Zoeken</string>
<string name="search_recent_header">Recente zoekopdrachten:</string>
<string name="provider_searches">Recente zoekopdrachten</string>
<string name="error_loading_categories">Er is een fout opgetreden bij het laden van categorieën.</string>
<string name="error_loading_depictions">Er is een fout opgetreden tijdens het laden van de beschrijvingen.</string>
<string name="search_tab_title_media">Media</string>
<string name="search_tab_title_categories">Categorieën</string>
<string name="search_tab_title_depictions">Items</string>
<string name="explore_tab_title_featured">Uitgelicht</string>
<string name="explore_tab_title_mobile">Geüpload via mobiel</string>
<string name="successful_wikidata_edit">Afbeelding toegevoegd aan %1$s op Wikidata!</string>
<string name="wikidata_edit_failure">Het bijwerken van corresponderende Wikidata-entiteit is mislukt!</string>
<string name="menu_set_wallpaper">Stel in als achtergrond</string>
<string name="wallpaper_set_successfully">Achtergrond succesvol ingesteld!</string>
<string name="quiz">Vragenspel</string>
<string name="quiz_question_string">Kan je afbeelding worden geplaatst?</string>
<string name="question">Vraag</string>
<string name="result">Uitslag</string>
<string name="quiz_back_button">Als u doorgaat met het uploaden van afbeeldingen die moeten worden verwijderd, wordt uw account waarschijnlijk geblokkeerd. Weet u zeker dat u de quiz wilt beëindigen?</string>
<string name="quiz_alert_message">Meer dan %1$s van de afbeeldingen die u heeft geüpload, zijn verwijderd. Als u doorgaat met het uploaden van afbeeldingen die moeten worden verwijderd, wordt uw account waarschijnlijk geblokkeerd.\n\nWilt u de tutorial opnieuw bekijken en vervolgens een quiz doen om u te helpen te leren welk type afbeeldingen u wel of niet moet uploaden?</string>
<string name="selfie_answer">Selfies hebben niet veel encyclopedische waarde. Upload geen foto van uzelf, tenzij u al een Wikipedia-artikel over uzelf heeft.</string>
<string name="taj_mahal_answer">Foto\'s van monumenten en landschappen buiten kunnen in de meeste landen worden geüpload. Houd er rekening mee dat tijdelijke kunstinstallaties buiten vaak auteursrechtelijk beschermd zijn en niet OK zijn om te uploaden.</string>
<string name="screenshot_answer">Screenshots van websites worden beschouwd als afgeleide werken en vallen onder het auteursrecht van de website zelf. Deze kunnen gebruikt worden na toestemming van de auteur. Zonder dergelijke toestemming wordt elke kunst die u maakt op basis van hun werk wettelijk beschouwd als een kopie zonder licentie die eigendom is van de oorspronkelijke auteur.</string>
<string name="blurry_image_answer">Een van de doelen van Commons is het verzamelen van kwaliteitsafbeeldingen. Daarom mogen wazige afbeeldingen niet worden geüpload. Probeer altijd mooie foto\'s te maken met goede belichting.</string>
<string name="construction_event_answer">Foto\'s met technologie of cultuur zijn van harte welkom op Commons.</string>
<string name="congratulatory_message_quiz">U heeft %1$s van de antwoorden goed. Gefeliciteerd!</string>
<string name="warning_for_no_answer">Selecteer een van de twee opties om de vraag te beantwoorden</string>
<string name="user_not_logged_in">Inlogsessie verlopen, log opnieuw in.</string>
<string name="quiz_result_share_message">Deel je quiz met je vrienden!</string>
<string name="continue_message">Doorgaan</string>
<string name="correct">Correct antwoord</string>
<string name="wrong">Fout antwoord</string>
<string name="quiz_screenshot_question">Is deze screenshot OK om te uploaden?</string>
<string name="share_app_title">Toepassing delen</string>
<string name="error_fetching_nearby_places">Fout bij het ophalen van plaatsen in de buurt.</string>
<string name="no_recent_searches">Geen recente zoekopdrachten</string>
<string name="delete_recent_searches_dialog">Weet u zeker dat u uw zoekgeschiedenis wilt wissen?</string>
<string name="delete_search_dialog">Wilt u deze zoekopdracht verwijderen?</string>
<string name="search_history_deleted">Zoekgeschiedenis verwijderd</string>
<string name="nominate_delete">Nomineer voor verwijdering</string>
<string name="delete">Verwijderen</string>
<string name="Achievements">Prestaties</string>
<string name="Profile">Profiel</string>
<string name="statistics">Statistieken</string>
<string name="statistics_thanks">Ontvangen bedankjes</string>
<string name="statistics_featured">Uitgelichte afbeeldingen</string>
<string name="statistics_wikidata_edits">Afbeeldingen via \"Plaatsen in de buurt\"</string>
<string name="level">Niveau</string>
<string name="images_uploaded">Geüploade afbeeldingen</string>
<string name="image_reverts">Afbeeldingen niet teruggedraaid</string>
<string name="images_used_by_wiki">Gebruikte afbeeldingen</string>
<string name="achievements_share_message">Deel u prestaties met uw vrienden!</string>
<string name="achievements_info_message">Uw niveau neemt toe naarmate u aan deze vereisten voldoet. Items in de sectie \'statistieken\' tellen niet mee voor uw niveau.</string>
<string name="achievements_revert_limit_message">minimum vereist:</string>
<string name="images_uploaded_explanation">Het aantal afbeeldingen dat u naar Commons heeft geüpload, via uploadsoftware</string>
<string name="images_reverted_explanation">Het percentage afbeeldingen dat u naar Commons heeft geüpload en dat niet is verwijderd</string>
<string name="images_used_explanation">Het aantal afbeeldingen dat u naar Commons heeft geüpload en dat in Wikimedia-artikelen is gebruikt</string>
<string name="error_occurred">Fout opgetreden!</string>
<string name="notifications_channel_name_all">Commons-melding</string>
<string name="preference_author_name_toggle">Gebruik aangepaste auteursnaam</string>
<string name="preference_author_name_toggle_summary">Gebruik een aangepaste auteursnaam in plaats van uw gebruikersnaam tijdens het uploaden van foto\'s</string>
<string name="preference_author_name">Aangepaste auteursnaam</string>
<string name="contributions_fragment">Bijdragen</string>
<string name="nearby_fragment">Dichtbij</string>
<string name="notifications">Meldingen</string>
<string name="read_notifications">Meldingen (gelezen)</string>
<string name="display_nearby_notification">Meldingen dichtbij weergeven</string>
<string name="display_nearby_notification_summary">Toon in-app-melding voor de dichtstbijzijnde plaats die foto\'s nodig heeft</string>
<string name="list_sheet">Lijst</string>
<string name="storage_permission">Toestemming om op te slaan</string>
<string name="write_storage_permission_rationale_for_image_share">We hebben uw toestemming nodig om toegang te krijgen tot de externe opslag van uw apparaat om afbeeldingen te uploaden.</string>
<string name="nearby_notification_dismiss_message">U zult de dichtstbijzijnde plaats die foto\'s nodig heeft niet meer zien. U kunt deze melding desgewenst echter opnieuw inschakelen in de Instellingen.</string>
<string name="step_count">Stap %1$d van %2$d: %3$s</string>
<string name="next">Volgende</string>
<string name="previous">Vorige</string>
<string name="submit">Verzenden</string>
<string name="upload_title_duplicate">Er bestaat een bestand met de bestandsnaam %1$s . Weet u zeker dat u door wilt gaan?\n\nOpmerking: Er wordt automatisch een geschikt achtervoegsel aan de bestandsnaam toegevoegd.</string>
<string name="map_application_missing">Er is geen compatibele kaarttoepassing gevonden op uw apparaat. Installeer een kaarttoepassing om deze functie te gebruiken.</string>
<string name="title_page_bookmarks_pictures">Afbeeldingen</string>
<string name="title_page_bookmarks_locations">Locaties</string>
<string name="menu_bookmark">Toevoegen/verwijderen van bladwijzers</string>
<string name="provider_bookmarks">Bladwijzers</string>
<string name="bookmark_empty">U hebt geen bladwijzers toegevoegd</string>
<string name="provider_bookmarks_location">Bladwijzers</string>
<string name="log_collection_started">Logboekverzameling is gestart. Start de app opnieuw op, voer de actie uit die u wilt loggen en tik vervolgens nogmaals op \'Logboekbestand verzenden\'</string>
<string name="deletion_reason_uploaded_by_mistake">Ik heb het per ongeluk geüpload</string>
<string name="deletion_reason_publicly_visible">Ik wist niet dat het publiekelijk zichtbaar zou zijn</string>
<string name="deletion_reason_bad_for_my_privacy">Ik realiseerde me dat het slecht is voor mijn privacy.</string>
<string name="deletion_reason_no_longer_want_public">Ik ben van gedachten veranderd, ik wil niet dat het nog publiekelijk zichtbaar is.</string>
<string name="deletion_reason_not_interesting">Sorry, deze foto is niet interessant voor een encyclopedie</string>
<string name="uploaded_by_myself">Geüpload door mijzelf op %1$s, gebruikt in %2$d artikel(en).</string>
<string name="no_uploads">Welkom bij Commons!\n\nUpload je eerste media door op de knop Toevoegen te klikken.</string>
<string name="no_categories_selected">Geen categorieën geselecteerd</string>
<string name="no_categories_selected_warning_desc">Afbeeldingen zonder categorieën zijn zelden bruikbaar. Weet je zeker dat je verder wilt gaan zonder categorieën te selecteren?</string>
<string name="no_depictions_selected">Geen beschrijvingen geselecteerd</string>
<string name="no_depictions_selected_warning_desc">Afbeeldingen met beschrijvingen zijn gemakkelijker te vinden en zullen eerder worden gebruikt. Weet u zeker dat u wilt doorgaan zonder beschrijvingen te selecteren?</string>
<string name="upload_flow_all_images_in_set">(Voor alle afbeelding(en) in set)</string>
<string name="search_this_area">Zoek in dit gebied</string>
<string name="nearby_card_permission_title">Machtigingsverzoek</string>
<string name="nearby_card_permission_explanation">Wilt u dat wij uw huidige locatie gebruiken om de dichtstbijzijnde plaats weer te geven die foto\'s nodig heeft?</string>
<string name="unable_to_display_nearest_place">Kan zonder locatierechten de dichtstbijzijnde plaats waarvoor foto\'s nodig zijn niet weergeven</string>
<string name="never_ask_again">Niet meer vragen</string>
<string name="display_location_permission_title">Machtiging voor locatie vragen</string>
<string name="display_location_permission_explanation">Naar machtiging voor locatie vragen als dat nodig is voor de functie meldingskaart dichtbij weergeven.</string>
<string name="achievements_fetch_failed">Er is iets misgegaan, we konden uw prestaties niet ophalen</string>
<string name="achievements_fetch_failed_ultimate_achievement">U heeft zoveel bijdragen geleverd dat ons prestatieberekeningssysteem het niet aankan. Dit is de ultieme prestatie.</string>
<string name="ends_on">Eindigt op:</string>
<string name="display_campaigns">Campagnes weergeven</string>
<string name="display_campaigns_explanation">Bekijk de lopende campagnes</string>
<string name="nearby_campaign_dismiss_message">U ziet de campagnes niet meer. U kunt deze melding desgewenst echter opnieuw inschakelen in de Instellingen.</string>
<string name="this_function_needs_network_connection">Voor deze functie is een netwerkverbinding vereist, controleer uw verbindingsinstellingen.</string>
<string name="error_processing_image">Er is een fout opgetreden tijdens het verwerken van de afbeelding. Probeer het opnieuw!</string>
<string name="getting_edit_token">Token ophalen om te bewerken</string>
<string name="check_category_adding_template">Sjabloon toevoegen voor categoriecontrole</string>
<string name="check_category_notification_title">Categoriecontrole aanvragen voor %1$s</string>
<string name="check_category_edit_summary">Categoriecontrole wordt aangevraagd</string>
<string name="check_category_success_title">Categoriecontrole aangevraagd</string>
<string name="check_category_failure_title">Verzoek om categoriecontrole werkte niet</string>
<string name="check_category_success_message">Categoriecontrole aangevraagd voor %1$s</string>
<string name="check_category_failure_message">Kan categoriecontrole niet aanvragen voor %1$s</string>
<string name="check_category_toast">Categoriecontrole aanvragen voor %1$s</string>
<string name="nominate_for_deletion_done">Afgerond</string>
<string name="send_thank_success_title">Verzending bedankje is gelukt</string>
<string name="send_thank_success_message">Bedankje succesvol verzonden naar %1$s</string>
<string name="send_thank_failure_message">Verzending bedankje naar %1$s is mislukt</string>
<string name="send_thank_failure_title">Verzending bedankje is mislukt</string>
<string name="send_thank_toast">Verstuur een bedankje voor %1$s</string>
<string name="review_copyright">Voldoet dit aan de regels van het auteursrecht?</string>
<string name="review_category">Is dit correct gecategoriseerd?</string>
<string name="review_spam">Valt dit binnen de scope?</string>
<string name="review_thanks">Wilt u de bijdrager bedanken?</string>
<string name="review_spam_explanation">Klik op NEE om deze afbeelding te nomineren voor verwijdering als deze helemaal niet nuttig is.</string>
<string name="review_copyright_explanation">Logo\'s, screenshots, filmposters zijn vaak auteursrechtschendingen.\nKlik NEE om deze afbeelding te nomineren voor verwijdering</string>
<string name="review_thanks_explanation">%1$s zal worden aangemoedigd door uw waardering</string>
<string name="review_no_category">Oh, dit is niet eens gecategoriseerd!</string>
<string name="review_category_explanation">Deze afbeelding valt onder %1$s categorieën.</string>
<string name="review_spam_report_question">Het valt buiten de scope want het is</string>
<string name="review_c_violation_report_question">Het is schending van het auteursrecht omdat het</string>
<string name="review_thanks_yes_button_text">Volgende afbeelding</string>
<string name="review_thanks_no_button_text">Ja, waarom niet</string>
<string name="skip_image_explanation">Als u op deze knop klikt, krijgt u nog een recent geüploade afbeelding van Wikimedia Commons</string>
<string name="review_image_explanation">U kunt afbeeldingen bekijken en de kwaliteit van Wikimedia Commons verbeteren.\n De vier beoordelingsparameters zijn: \n - Valt deze afbeelding binnen de scope? \n - Voldoet deze afbeelding aan de regels van het auteursrecht? \n - Is deze afbeelding correct gecategoriseerd? \n - Als alles goed gaat kunt u ook de inzender bedanken.</string>
<string name="no_image">Geen afbeeldingen gebruikt</string>
<string name="no_image_reverted">Geen afbeeldingen teruggedraaid</string>
<string name="no_image_uploaded">Geen afbeeldingen geüpload</string>
<string name="no_notification">Je heeft geen ongelezen meldingen</string>
<string name="no_read_notification">U hebt geen gelezen melding</string>
<string name="share_logs_using">Logboeken delen via</string>
<string name="menu_option_read">Bekijk gelezen</string>
<string name="menu_option_unread">Ongelezen bekijken</string>
<string name="error_occurred_in_picking_images">Er is een fout opgetreden bij het kiezen van afbeeldingen</string>
<string name="please_wait">Een ogenblik geduld…</string>
<string name="images_featured_explanation">Uitgelichte afbeeldingen zijn afbeeldingen van zeer bekwame fotografen en illustratoren op de site die door de Wikimedia Commons-gemeenschap zijn gekozen als de hoogste kwaliteit.</string>
<string name="images_via_nearby_explanation">Afbeeldingen die zijn geüpload via Plaatsen in de buurt zijn de afbeeldingen die worden geüpload door plaatsen op de kaart te ontdekken.</string>
<string name="thanks_received_explanation">Met deze functie kunnen redacteuren een bedankbericht sturen naar gebruikers die nuttige bewerkingen uitvoeren - door een kleine bedanklink op de geschiedenispagina of diff-pagina te gebruiken.</string>
<string name="copy_image_caption_description">Kopiëren naar volgende media</string>
<string name="copied_successfully">Gekopieerd</string>
<string name="welcome_do_upload_content_description">Voorbeelden van goede afbeeldingen om te uploaden naar Commons</string>
<string name="welcome_dont_upload_content_description">Voorbeelden van afbeeldingen die niet mogen worden geüpload</string>
<string name="skip_image">Sla deze afbeelding over</string>
<string name="download_failed_we_cannot_download_the_file_without_storage_permission">Download mislukt!!. We kunnen het bestand niet downloaden zonder toestemming voor externe opslag.</string>
<string name="manage_exif_tags">EXIF-tags beheren</string>
<string name="manage_exif_tags_summary">Selecteer welke EXIF-tags in uploads moeten worden behouden</string>
<string name="exif_tag_name_author">Auteur</string>
<string name="exif_tag_name_copyright">Auteursrechten</string>
<string name="exif_tag_name_location">Locatie</string>
<string name="exif_tag_name_cameraModel">Cameramodel</string>
<string name="exif_tag_name_lensModel">Lensmodel</string>
<string name="exif_tag_name_serialNumbers">Serienummers</string>
<string name="exif_tag_name_software">Software</string>
<string name="share_text">Upload foto\'s rechtstreeks vanaf uw telefoon naar Wikimedia Commons. Download de Commons-app nu: %1$s</string>
<string name="share_via">App delen via...</string>
<string name="image_info">Afbeeldingsinfo</string>
<string name="no_categories_found">Geen categorieën gevonden</string>
<string name="no_depiction_found">Geen beschrijvingen gevonden</string>
<string name="upload_cancelled">Uploaden geannuleerd</string>
<string name="previous_image_title_description_not_found">Er zijn geen gegevens voor de titel of beschrijving van de vorige afbeelding</string>
<string name="dialog_box_text_nomination">Waarom moet %1$s worden verwijderd?</string>
<string name="review_is_uploaded_by">%1$s is geüpload door %2$s</string>
<string name="default_description_language">Standaard beschrijvingstaal</string>
<string name="delete_helper_show_deletion_title">Nomineren voor verwijdering</string>
<string name="delete_helper_show_deletion_title_success">Afgerond</string>
<string name="delete_helper_show_deletion_message_if">%1$s genomineerd voor verwijdering.</string>
<string name="delete_helper_show_deletion_title_failed">Mislukt</string>
<string name="delete_helper_show_deletion_message_else">Kan verwijdering niet aanvragen.</string>
<string name="delete_helper_ask_spam_selfie">Een selfie</string>
<string name="delete_helper_ask_spam_blurry">Wazig</string>
<string name="delete_helper_ask_spam_nonsense">Onzin</string>
<string name="delete_helper_ask_reason_copyright_press_photo">Persfoto</string>
<string name="delete_helper_ask_reason_copyright_internet_photo">Willekeurige foto van internet</string>
<string name="delete_helper_ask_reason_copyright_logo">Logo</string>
<string name="delete_helper_ask_alert_set_positive_button_reason">Want het is</string>
<string name="category_edit_helper_make_edit_toast">Ik probeer categorieën bij te werken.</string>
<string name="category_edit_helper_show_edit_title">Categorie-update</string>
<string name="category_edit_helper_show_edit_title_success">Afgerond</string>
<plurals name="category_edit_helper_show_edit_message_if">
<item quantity="one">Categorie %1$s is toegevoegd.</item>
<item quantity="other">Categorieën %1$s zijn toegevoegd.</item>
</plurals>
<string name="category_edit_helper_edit_message_else">Kan geen categorieën toevoegen.</string>
<string name="category_edit_button_text">Categorieën bijwerken</string>
<string name="coordinates_edit_helper_make_edit_toast">Ik probeer de coördinaten bij te werken.</string>
<string name="coordinates_edit_helper_show_edit_title">Coördinaten bijwerken</string>
<string name="coordinates_edit_helper_show_edit_title_success">Afgerond</string>
<string name="coordinates_edit_helper_show_edit_message">Coördinaten %1$s zijn toegevoegd.</string>
<string name="coordinates_edit_helper_edit_message_else">Kan geen coördinaten toevoegen.</string>
<string name="coordinates_picking_unsuccessful">Kan coördinaten niet opvragen.</string>
<string name="share_image_via">Deel afbeelding via</string>
<string name="no_achievements_yet">U heeft nog geen bijdragen gedaan</string>
<string name="account_created">Profiel gemaakt!</string>
<string name="text_copy">De tekst is gekopieerd naar het klembord.</string>
<string name="notification_mark_read">Melding gemarkeerd als gelezen</string>
<string name="some_error">Er is een fout opgetreden!</string>
<string name="place_state">Plaatsstatus:</string>
<string name="place_state_exists">Bestaat</string>
<string name="place_state_needs_photo">Heeft foto nodig</string>
<string name="place_type">Plaatstype:</string>
<string name="nearby_search_hint">Brug, museum, hotel, enz.</string>
<string name="you_must_reset_your_passsword">Er is iets misgegaan met inloggen, u moet uw wachtwoord opnieuw instellen !!</string>
<string name="title_for_media">MEDIA</string>
<string name="upload_nearby_place_found_title">Plaats in de buurt gevonden</string>
<string name="upload_nearby_place_found_description">Is dit een foto van plaats %1$s?</string>
<string name="title_app_shortcut_bookmark">Bladwijzers</string>
<string name="title_app_shortcut_setting">Instellingen</string>
<string name="remove_bookmark">Bladwijzer verwijderd</string>
<string name="add_bookmark">Als bladwijzer toegevoegd</string>
<string name="wallpaper_set_unsuccessfully">Er is iets fout gegaan. Kan de achtergrond niet instellen</string>
<string name="setting_wallpaper_dialog_title">Instellen als achtergrond</string>
<string name="setting_wallpaper_dialog_message">Wordt ingesteld als achtergrond. Een ogenblik geduld...</string>
<string name="theme_default_name">Volgsysteem</string>
<string name="theme_dark_name">Donker</string>
<string name="theme_light_name">Licht</string>
<string name="cannot_open_location_settings">Kan locatie-instellingen niet openen. Schakel locatie handmatig in</string>
<string name="recommend_high_accuracy_mode">Kies voor de beste resultaten de modus van hoge nauwkeurigheid.</string>
<string name="ask_to_turn_location_on">Locatie inschakelen?</string>
<string name="nearby_needs_location">In de buurt heeft locatie nodig om correct te werken</string>
<string name="use_location_from_similar_image">Heeft u deze twee foto\'s op dezelfde plek gemaakt? Wilt u de breedtegraad/lengtegraad van de afbeelding rechts gebruiken?</string>
<string name="load_more">Laad meer</string>
<string name="nearby_no_results">Geen plaatsen gevonden, probeer uw zoekcriteria te wijzigen.</string>
<string name="todo_improve">Voorgestelde verbeteringen:</string>
<string name="missing_category">- Voeg categorieën toe aan deze afbeelding om de bruikbaarheid te verbeteren.</string>
<string name="missing_article">- Voeg deze afbeelding toe aan het bijbehorende Wikipedia-artikel dat geen afbeeldingen heeft.</string>
<string name="add_picture_to_wikipedia_article_title">Afbeelding toevoegen aan Wikipedia</string>
<string name="add_picture_to_wikipedia_article_desc">Wil je deze afbeelding toevoegen aan het Wikipedia-artikel in het %1$</string>
<string name="confirm">Bevestigen</string>
<string name="instructions_title">Instructies</string>
<string name="wikipedia_instructions_step_1">1. Gebruik de volgende wikitekst:</string>
<string name="wikipedia_instructions_step_2">2. Als u op Bevestigen klikt, wordt het Wikipedia-artikel geopend</string>
<string name="wikipedia_instructions_step_3">3. Zoek een geschikte sectie in het artikel voor uw afbeelding</string>
<string name="wikipedia_instructions_step_4">4. Klik op het pictogram Bewerken (zoals een potlood) voor die sectie.</string>
<string name="wikipedia_instructions_step_5">5. Plak de wikitekst op de juiste plaats.</string>
<string name="wikipedia_instructions_step_7">7. Publiceer het artikel</string>
<string name="copy_wikicode_to_clipboard">Kopieer wikicode naar klembord</string>
<string name="pause">pauzeren</string>
<string name="resume">hervatten</string>
<string name="paused">Gepauzeerd</string>
<string name="more">Meer</string>
<string name="favorites">Favorieten</string>
<string name="achievements_tab_title">Prestaties</string>
<string name="leaderboard_tab_title">Scorebord</string>
<string name="rank_prefix">Ranking:</string>
<string name="count_prefix">Aantal:</string>
<string name="leaderboard_column_rank">Ranking</string>
<string name="leaderboard_column_user">Gebruiker</string>
<string name="leaderboard_column_count">Aantal</string>
<string name="setting_avatar_dialog_title">Instellen als leaderboard-avatar</string>
<string name="setting_avatar_dialog_message">Instellen als avatar, even geduld aub</string>
<string name="avatar_set_successfully">Avatar ingesteld</string>
<string name="avatar_set_unsuccessfully">Fout bij instellen nieuwe avatar, probeer het opnieuw</string>
<string name="menu_set_avatar">Instellen als avatar</string>
<string name="leaderboard_yearly">Jaarlijks</string>
<string name="leaderboard_weekly">Wekelijks</string>
<string name="leaderboard_all_time">Alle tijden</string>
<string name="leaderboard_upload">Uploaden</string>
<string name="leaderboard_nearby">In de buurt</string>
<string name="leaderboard_used">Gebruikt</string>
<string name="leaderboard_my_rank_button_text">Mijn ranking</string>
<string name="mapbox_telemetry">Mapbox-telemetrie</string>
<string name="telemetry_opt_out_summary">Stuur geanonimiseerde locatie- en gebruiksgegevens naar Mapbox bij gebruik van de functie In de buurt</string>
<string name="map_attribution">&amp;#169; &lt;a href=\"https://www.mapbox.com/about/maps/\"&gt;Mapbox&lt;/a&gt; &amp;#169; &lt;a href=\"https://www.openstreetmap.org/copyright\"&gt;OpenStreetMap&lt;/a&gt; &lt;a href=\"https://www.mapbox.com/map-feedback/\"&gt;Verbeter deze kaart&lt;/a&gt;</string>
<string name="limited_connection_enabled">Beperkte verbindingsmodus ingeschakeld!</string>
<string name="limited_connection_disabled">Beperkte verbindingsmodus uitgeschakeld. Uploads die in behandeling zijn, worden nu hervat.</string>
<string name="limited_connection_mode">Beperkte verbindingsmodus</string>
<string name="statistics_quality">Kwaliteitsafbeeldingen</string>
<string name="quality_images_info">Kwaliteitsafbeeldingen zijn diagrammen of foto\'s die voldoen aan bepaalde kwaliteitsnormen (die meestal technisch van aard zijn) en waardevol zijn voor Wikimedia-projecten</string>
<string name="resuming_upload">Uploaden hervatten…</string>
<string name="pausing_upload">Uploaden onderbreken…</string>
<string name="limited_connection_explanation">U hebt de beperkte verbindingsmodus ingeschakeld. Alle uploads worden gepauzeerd en worden hervat zodra u deze modus uitschakelt.</string>
<string name="limited_connection_is_on">Beperkte verbindingsmodus is ingeschakeld.</string>
<string name="media_details_tooltip">Schrijf een kort bijschrift dat zegt wat uw foto laat zien. Geef in de beschrijving aan wat de foto interessant of typisch of zeldzaam maakt en leg de context uit, zichtbaar of niet. Gebruik zoveel mogelijk exacte terminologie.</string>
<string name="depicts_tooltip">Zoek en selecteer alle concepten die deze afbeelding uitbeeldt. Wees zo specifiek mogelijk. Als de afbeelding meerdere items weergeeft, kies ze dan allemaal binnen redelijke grenzen. Kies geen generieke tags als er meer specifieke tags beschikbaar zijn.</string>
<string name="categories_tooltip">Selecteer de juiste categorieën. In tegenstelling tot afbeeldingen zijn categorieën alleen in het Engels.</string>
<string name="license_tooltip">Commons maakt uw foto\'s herbruikbaar en aangepasbaar voor iedereen. Wilt u afstand doen van alle rechten? Wilt u worden toegeschreven? Wilt u dat aanpassingen dezelfde licentie gebruiken?</string>
<string name="depicts_step_title">Beeldt af</string>
<string name="license_step_title">Medialicentie</string>
<string name="media_detail_step_title">Mediadetails</string>
<string name="menu_view_category_page">Categoriepagina bekijken</string>
<string name="menu_view_item_page">Itempagina bekijken</string>
<string name="app_ui_language">Taal van de gebruikersinterface van de app</string>
<string name="remove">Verwijdert onderschrift en beschrijving</string>
<string name="read_help_link">Meer lezen</string>
<string name="media_detail_in_all_languages">In alle talen</string>
<string name="choose_a_location">Kies een locatie</string>
<string name="pan_and_zoom_to_adjust">Pannen en zoomen om aan te passen</string>
<string name="exit_location_picker">Locatiekiezer afsluiten</string>
<string name="select_location_location_picker">Selecteer locatie</string>
<string name="show_in_map_app">Toon in kaart-app</string>
<string name="modify_location">Locatie bewerken</string>
<string name="location_picker_image_view">De afbeeldingsweergave van de locatiekiezer</string>
<string name="location_picker_image_view_shadow">De schaduw van de afbeeldingsweergave van de locatiekiezer</string>
<string name="image_location">Afbeeldingslocatie</string>
<string name="check_whether_location_is_correct">Controleer of de locatie correct is</string>
</resources>

View file

@ -37,7 +37,7 @@
<string name="uploading_started">ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߘߊߡߌ߬ߣߊ߬߹</string>
<string name="upload_completed_notification_title">%1$s ߟߊ߬ߦߟߍ߬ߟߌ</string>
<string name="upload_completed_notification_text">ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߴߌ ߟߊ߫ ߟߊ߬ߦߟߍ߬ߣߍ߲ ߠߎ߬ ߘߐߜߍ߫</string>
<string name="upload_progress_notification_title_start" fuzzy="true"> %1$s ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߘߊߡߌ߬ߣߊ߫</string>
<string name="upload_progress_notification_title_start"> %1$s ߟߊ߬ߦߟߍ ߦߴߌ ߘߐ߫</string>
<string name="upload_progress_notification_title_in_progress"> %1$s ߟߊ߬ߦߟߍ߬ߟߌ ߦߋ߫ ߛߋ߲߬ߠߊ߫</string>
<string name="upload_progress_notification_title_finishing"> %1$s ߟߊ߬ߦߟߍ߬ߟߌ ߞߎ߲߬ߘߏ߲߬ߠߌ߲ ߦߴߌ ߘߐ߫</string>
<string name="upload_failed_notification_title"> %1$s ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫</string>
@ -53,6 +53,7 @@
<string name="menu_nearby">ߛߌ߬ߢߐ߲߮</string>
<string name="provider_contributions">ߒ ߠߊ߫ ߟߊ߬ߦߟߍ߬ߣߍ߲ ߠߎ߬</string>
<string name="menu_share">ߊ߬ ߟߊߖߍ߲ߛߍ߲߫</string>
<string name="menu_view_file_page">ߞߐߕߐ߮ ߞߐߜߍ ߦߋ߫</string>
<string name="share_title_hint">ߝߍ߬ߛߓߍߟߌ (ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ߣߍ߲)</string>
<string name="add_caption_toast">ߝߍ߬ߛߓߍߟߌ ߘߏ߫ ߡߊߛߐ߫ ߞߐߕߐ߮ ߣߌ߲߬ ߠߊ߫ ߖߊ߰ߣߌ߲߫</string>
<string name="share_description_hint">ߞߊ߲߬ߛߓߍߟߌ</string>

View file

@ -407,6 +407,9 @@
<string name="no_categories_selected_warning_desc">Obrazy bez kategorii rzadko nadają się do użycia. Czy na pewno chcesz kontynuować bez wybierania kategorii?</string>
<string name="no_depictions_selected">Nie wybrano żadnych obrazów</string>
<string name="no_depictions_selected_warning_desc">Obrazy ze wskazanymi przedstawieniami są łatwiejsze do znalezienia i częściej używane. Czy na pewno chcesz kontynuować bez wybierania przedstawień?</string>
<string name="back_button_warning">Anuluj przesyłanie</string>
<string name="back_button_warning_desc">Użycie przycisku „Wstecz” spowoduje anulowanie przesyłania i utratę postępów</string>
<string name="back_button_continue">Kontynuuj przesyłanie</string>
<string name="upload_flow_all_images_in_set">(Dla wszystkich obrazów w zestawie)</string>
<string name="search_this_area">Przeszukaj ten obszar</string>
<string name="nearby_card_permission_title">Prośba o pozwolenie</string>

View file

@ -374,6 +374,9 @@
<string name="no_categories_selected_warning_desc">Le plance sensa categorìa, a so da ràir dovràbij. É-lo sigur ëd vorèj continué sensa serne dle categorìe?</string>
<string name="no_depictions_selected">Gnun-e descrission selessionà</string>
<string name="no_depictions_selected_warning_desc">Le plance con dle descrission a l\'é pi bel fé troveje e a l\'é pi probàbil ch\'as deuvro. É-lo sigur ëd vorèj continué sensa selessioné dla descrission?</string>
<string name="back_button_warning">Anulé ël cariament</string>
<string name="back_button_warning_desc">An sgnacand an sël boton andré, ës cariament a sarà anulà e chiel a perdrà ij sò progress</string>
<string name="back_button_continue">Andé anans a carié</string>
<string name="upload_flow_all_images_in_set">(Për tute le plance dl\'ansem)</string>
<string name="search_this_area">Arserché an costa zòna</string>
<string name="nearby_card_permission_title">Arcesta d\'autorisassion</string>

View file

@ -390,6 +390,9 @@
<string name="no_categories_selected_warning_desc">Imagens sem categorias raramente são utilizáveis. Tem certeza de que deseja continuar sem selecionar categorias?</string>
<string name="no_depictions_selected">Nenhuma representação selecionada</string>
<string name="no_depictions_selected_warning_desc">Imagens com representações são mais facilmente encontradas e mais propensas a serem usadas. Tem certeza de que deseja continuar sem selecionar representações?</string>
<string name="back_button_warning">Cancelar carregamento</string>
<string name="back_button_warning_desc">Usar o botão Voltar cancelará este carregamento e você perderá seu progresso</string>
<string name="back_button_continue">Continuar carregamento</string>
<string name="upload_flow_all_images_in_set">(Para todas as imagens no conjunto)</string>
<string name="search_this_area">Pesquisar nesta área</string>
<string name="nearby_card_permission_title">Pedido de Permissão</string>

View file

@ -23,6 +23,7 @@
* Patriccck
* Redredsonia
* Rubin16
* Thothsum
* Vlad5250
* VoxelJ
* Wikisaurus
@ -418,6 +419,9 @@
<string name="no_categories_selected_warning_desc">Изображения без категорий используются редко. Вы уверены, что хотите продолжить, не выбрав категории?</string>
<string name="no_depictions_selected">Описания не выбраны</string>
<string name="no_depictions_selected_warning_desc">Изображения с описаниями будет проще найти и использовать. Вы уверены, что хотите продолжить без выбора описаний?</string>
<string name="back_button_warning">Отменить загрузку</string>
<string name="back_button_warning_desc">Использование кнопки «Назад» отменит эту загрузку</string>
<string name="back_button_continue">Продолжить загрузку</string>
<string name="upload_flow_all_images_in_set">(Для всех изображений в наборе)</string>
<string name="search_this_area">Искать в этой области</string>
<string name="nearby_card_permission_title">Запрос разрешения</string>
@ -634,5 +638,7 @@
<string name="exit_location_picker">Выйти из окна выбора местоположения</string>
<string name="select_location_location_picker">Выберите местоположение</string>
<string name="show_in_map_app">Показать в приложении карты</string>
<string name="modify_location">Изменить местоположение</string>
<string name="image_location">Расположение изображения</string>
<string name="check_whether_location_is_correct">Проверьте правильность местоположения</string>
</resources>

View file

@ -395,6 +395,9 @@
<string name="no_categories_selected_warning_desc">Obrázky bez kategórií sú zriedka použiteľné. Naozaj chcete nahrať obrázok bez výberu kategórií?</string>
<string name="no_depictions_selected">Neboli zvolené žiadne zobrazenia</string>
<string name="no_depictions_selected_warning_desc">Kreslené alebo maľované obrázky je ľahšie nájsť a použiť. Chcete naozaj pokračovať bez zadania spôsobu vykresľovania obrázkov?</string>
<string name="back_button_warning">Zrušiť nahrávanie</string>
<string name="back_button_warning_desc">Použitím tlačidla späť zrušíte toto nahrávanie aj celý pokrok nahrávania</string>
<string name="back_button_continue">Pokračujte v nahrávaní</string>
<string name="upload_flow_all_images_in_set">(Pre všetky obrázky v sade)</string>
<string name="search_this_area">Prehľadať túto oblasť</string>
<string name="nearby_card_permission_title">Je požadované oprávnenie</string>

View file

@ -381,6 +381,9 @@
<string name="no_categories_selected_warning_desc">Bilder utan kategorier används sällan. Är du säker på att du vill fortsätta utan att välja kategorier?</string>
<string name="no_depictions_selected">Inga beskrivningar har valts</string>
<string name="no_depictions_selected_warning_desc">Bilder med beskrivningar kan hittas lättare och kommer mer sannolikt användas. Är du säker på att du vill fortsätta utan att välja beskrivningar?</string>
<string name="back_button_warning">Avbryt uppladdning</string>
<string name="back_button_warning_desc">Bakåtknappen avbryter denna uppladdning och du förlorar dina framsteg</string>
<string name="back_button_continue">Fortsätt uppladdning</string>
<string name="upload_flow_all_images_in_set">(För alla bilder i uppsättningen)</string>
<string name="search_this_area">Sök i detta område</string>
<string name="nearby_card_permission_title">Begäran om behörighet</string>

View file

@ -1,7 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* Gurulenin
* Yuvipanda
-->
<resources>
<string name="crash_dialog_title">பொதுவகம் செயலிழந்தது</string>
<string name="crash_dialog_text">ஏதோ தவறாகியுள்ளது!</string>
<string name="crash_dialog_comment_prompt">நீங்கள் என்ன செய்கிறீர்கள் என்று எங்களிடம் கூறுங்கள், பின்னர் அதை எங்களுக்கு மின்னஞ்சல் மூலம் பகிரவும். அதை சரிசெய்ய எங்களுக்கு உதவும்!</string>
<string name="crash_dialog_ok_toast">நன்றி!</string>
</resources>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* ElangoRamanujam
* Gurulenin
* Kaartic
* Sank
* Yuvipanda
@ -10,27 +11,41 @@
<item quantity="one">%1$d கோப்பு தரவேற்றப்படுகிறது</item>
<item quantity="other">%1$d கோப்புகள் தரவேற்றப்படுகின்றன</item>
</plurals>
<string name="starting_uploads">பதிவேற்றங்களைத் தொடங்குகிறது</string>
<string name="navigation_item_explore">சுற்றிப்பார்</string>
<string name="preference_category_appearance">தோற்றம்</string>
<string name="preference_category_general">பொது</string>
<string name="preference_category_feedback">பின்னூட்டம்</string>
<string name="preference_category_privacy">தகவல் பாதுகாப்பு</string>
<string name="app_name">காமன்சு</string>
<string name="bullet"></string>
<string name="menu_settings">அமைப்புகள்</string>
<string name="intent_share_upload_label">பொதுவகத்துக்கு பதிவேற்றுக</string>
<string name="username">பயனர் பெயர்</string>
<string name="password">கடவுச்சொல்</string>
<string name="login_credential">உங்கள் காமன்ஸ் பீட்டா கணக்கில் உள்நுழைக</string>
<string name="login">புகுபதிகை</string>
<string name="forgot_password">கடவுச்சொல் மறந்துவிட்டதா?</string>
<string name="signup">கணக்குத் தொடங்கு</string>
<string name="logging_in_title">உள்நுழையப் படுகிறது...</string>
<string name="logging_in_message">தயவுசெய்து காத்திருங்கள்…</string>
<string name="login_success">புகுபதிகை வெற்றி</string>
<string name="login_failed">புகுபதிகை தோல்வியடைந்தது</string>
<string name="upload_failed">கோப்பு கிடைக்கவில்லை. மற்றொரு கோப்பை முயற்சிக்கவும்.</string>
<string name="authentication_failed">அங்கீகாரம் தோல்வியுற்றது, தயவுசெய்து மீண்டும் உள்நுழைக</string>
<string name="uploading_started">தரவேற்றம் துவங்கியது!</string>
<string name="uploading_queued">பதிவேற்றம் வரிசைப்படுத்தப்பட்டது (வரையறுக்கப்பட்ட இணைப்பு முறை இயக்கப்பட்டது)</string>
<string name="upload_completed_notification_title">%1$s பதிவேற்றப்பட்டது!</string>
<string name="upload_completed_notification_text">உங்களது தரவேற்றதை காண தட்டவும்</string>
<string name="upload_progress_notification_title_start" fuzzy="true">%1$s தரவேற்றம் ஆரம்பமாகிறது</string>
<string name="upload_progress_notification_title_start">கோப்பை பதிவேற்றுகிறது: %s</string>
<string name="upload_progress_notification_title_in_progress">%1$s தரவேற்றப்படுகிறது</string>
<string name="upload_progress_notification_title_finishing">%1$s தரவேற்றம் முடிக்கப்படுகிறது</string>
<string name="upload_failed_notification_title">%1$s பதிவேற்றுவது தோல்வியுற்றது</string>
<string name="upload_failed_notification_subtitle">காண்பதற்கு தட்டுக</string>
<string name="upload_paused_notification_subtitle">காண்பதற்கு தட்டுக</string>
<string name="title_activity_contributions">எனது தற்போதய பதிவேற்றங்கள்</string>
<string name="contribution_state_queued">வரிசையிடப்பட்டது</string>
<string name="contribution_state_failed">தோல்வியடைந்தது</string>
<string name="contribution_state_in_progress">%1$d%% முடின்துள்ளத்து</string>
<string name="contribution_state_starting">பதிவேற்றப்படுகிறது</string>
<string name="menu_from_gallery">காட்சியகத்திலிருந்து</string>
@ -38,21 +53,65 @@
<string name="menu_nearby">அருகிலுள்ள</string>
<string name="provider_contributions">எனது பதிவேற்றங்கள்</string>
<string name="menu_share">பகிர்</string>
<string name="share_title_hint" fuzzy="true">தலைப்பு (தேவை)</string>
<string name="menu_view_file_page">கோப்புப் பக்கத்தை காண்க</string>
<string name="share_title_hint">தலைப்பு (தேவை)</string>
<string name="add_caption_toast">இந்தக் கோப்பிற்கு ஒரு தலைப்பை வழங்கவும்</string>
<string name="share_description_hint">விளக்கம்</string>
<string name="share_caption_hint">தலைப்பு</string>
<string name="login_failed_network">உள்நுழைய இயலவில்லை - பிணைய செயலிழப்பு</string>
<string name="login_failed_throttled">பல தோல்வியுற்ற முயற்சிகள். சில நிமிடங்களில் மீண்டும் முயற்சிக்கவும்.</string>
<string name="login_failed_blocked">மன்னிக்கவும், இந்த பயனர் காமன்ஸில் தடுக்கப்பட்டுள்ளார்</string>
<string name="login_failed_2fa_needed">உங்கள் இரண்டு காரணி அங்கீகாரக் குறியீட்டை நீங்கள் வழங்க வேண்டும்.</string>
<string name="login_failed_generic">புகுபதிகை தோல்வியடைந்தது</string>
<string name="share_upload_button">பதிவேற்று</string>
<string name="multiple_share_base_title">இந்த தொகுப்பிற்கு பெயரிடுக</string>
<string name="provider_modifications">மாற்றங்கள்</string>
<string name="menu_upload_single">பதிவேற்று</string>
<string name="categories_search_text_hint">தேடல் பிரிவுகள்</string>
<string name="depicts_search_text_hint">உங்கள் ஊடகங்கள் சித்தரிக்கும் உருப்படிகளைத் தேடுங்கள் (மலை, தாஜ்மஹால் போன்றவை)</string>
<string name="menu_save_categories">சேமி</string>
<string name="refresh_button">புதுப்பி</string>
<string name="display_list_button">பட்டியல்</string>
<string name="contributions_subtitle_zero">(இதுவரை பதிவேற்றங்கள் இல்லை)</string>
<string name="categories_not_found">%1$s பொருந்தக்கூடிய வகைகள் எதுவும் காணப்படவில்லை</string>
<string name="depictions_not_found">%1$s பொருந்தக்கூடிய விக்கிடேட்டா உருப்படிகள் எதுவும் கிடைக்கவில்லை</string>
<string name="categories_activity_title">பகுப்புகள்</string>
<string name="title_activity_settings">அமைப்புகள்</string>
<string name="title_activity_signup">கணக்கை உருவாக்கு</string>
<string name="title_activity_featured_images">சிறப்புப் படம்</string>
<string name="title_activity_category_details">பகுப்பு</string>
<string name="menu_about">இதுபற்றி</string>
<string name="about_privacy_policy">தனியுரிமைக் கொள்கை</string>
<string name="about_credits">அங்கீகாரங்கள்</string>
<string name="title_activity_about">இதுபற்றி</string>
<string name="menu_feedback">பின்னூட்டம் அனுப்பவும் (மின்னஞ்சல் வழியாக)</string>
<string name="no_email_client">மின்னஞ்சல் பயன்பாடு நிறுவப்படவில்லை</string>
<string name="provider_categories">சமீபத்தில் பயன்படுத்தப்பட்ட வகைகள்</string>
<string name="waiting_first_sync">முதல் ஒத்திசைவுக்காக காத்திருக்கிறது ...</string>
<string name="no_uploads_yet">நீங்கள் இன்னும் எந்தப் புகைப்படத்தையும் பதிவேற்றவில்லை.</string>
<string name="menu_retry_upload">மறு முயற்சி செய்</string>
<string name="menu_cancel_upload">ரத்து செய்</string>
<string name="menu_download">பதிவிறக்கு</string>
<string name="preference_license">இயல்பான உரிமம்</string>
<string name="use_previous">முந்தைய தலைப்பு மற்றும் விளக்கத்தைப் பயன்படுத்தவும்</string>
<string name="preference_theme">கருப்பொருள்</string>
<string name="license_name_cc0">CC0</string>
<string name="license_name_cc_by_sa_3_0">CC BY-SA 3.0</string>
<string name="license_name_cc_by_3_0">CC BY 3.0</string>
<string name="license_name_cc_by_sa_4_0">CC BY-SA 4.0</string>
<string name="tutorial_1_text">விக்கிபீடியாவில் பயன்படுத்தப்படும் பெரும்பாலான படங்களை விக்கிமீடியா காமன்ஸ் வழங்குகிறது.</string>
<string name="tutorial_1_subtext">உலகெங்கிலும் உள்ள மக்களுக்கு கல்வி கற்பதற்கு உங்கள் படங்கள் உதவுகின்றன!</string>
<string name="tutorial_2_text">தயவுசெய்து நீங்களே எடுத்த அல்லது முழுமையாக உருவாக்கிய படங்களை பதிவேற்றவும்:</string>
<string name="tutorial_2_subtext_1">இயற்கை பொருட்கள் (மலர்கள், விலங்குகள், மலைகள்)</string>
<string name="tutorial_2_subtext_2">பயனுள்ள பொருட்கள் (மிதிவண்டிகள், ரயில் நிலையங்கள்)</string>
<string name="tutorial_2_subtext_3">பிரபலமான நபர்கள் (உங்கள் நகரத்தலைவர், நீங்கள் சந்தித்த ஒலிம்பிக் விளையாட்டு வீரர்கள்)</string>
<string name="tutorial_3_text">அருள்கூர்ந்து பதிவேற்றவேண்டாம்:</string>
<string name="tutorial_3_subtext_1">உங்கள் நண்பர்களின் சுயபடங்கள் அல்லது படங்கள்</string>
<string name="tutorial_3_subtext_2">நீங்கள் இணையத்திலிருந்து பதிவிறக்கம் செய்த படங்கள்</string>
<string name="tutorial_3_subtext_3">தனியுடைமையுடைய மென்பொருட்களின் திரைக்காட்சிகள்</string>
<string name="tutorial_4_text">எடுத்துக்காட்டு பதிவேற்றம்:</string>
<string name="tutorial_4_subtext_1">தலைப்பு: சிட்னி ஒப்பேரா மாளிகை</string>
<string name="tutorial_4_subtext_2">விளக்கம்: விரிகுடாவின் குறுக்கே சிட்னி ஒப்பேரா மாளிகை பார்க்கப்படுகிறது</string>
<string name="welcome_final_button_text">ஆம்!</string>
<string name="welcome_help_button_text" fuzzy="true">&lt;u&gt;மேலதிக விவரம்&lt;/u&gt;</string>
<string name="detail_panel_cats_label">பகுப்புகள்</string>

View file

@ -396,6 +396,9 @@
<string name="no_categories_selected_warning_desc">Kategorisiz görüntüler nadiren kullanılabilir. Kategori seçmeden devam etmek istediğinizden emin misiniz?</string>
<string name="no_depictions_selected">Hiçbir Tasvir Seçilmedi</string>
<string name="no_depictions_selected_warning_desc">Tasvirleri olan resimler daha kolay bulunur ve kullanılması daha olasıdır. Tasvirleri seçmeden devam etmek istediğinizden emin misiniz?</string>
<string name="back_button_warning">Yüklemeyi İptal Et</string>
<string name="back_button_warning_desc">Geri düğmesini kullanmak, bu yüklemeyi iptal eder ve ilerlemenizi kaybedersiniz</string>
<string name="back_button_continue">Yüklemeye Devam Et</string>
<string name="upload_flow_all_images_in_set">(Setteki tüm görüntü(ler) için)</string>
<string name="search_this_area">Bu alanı ara</string>
<string name="nearby_card_permission_title">Yetki İsteği</string>

View file

@ -400,6 +400,9 @@
<string name="no_categories_selected_warning_desc">Зображення без категорій рідко використовуються. Ви впевнені, що хочете продовжити без вказаних категорій?</string>
<string name="no_depictions_selected">Описів зображеного не вибрано</string>
<string name="no_depictions_selected_warning_desc">Медіа, у яких вказані зображувані об\'єкти, можуть бути легше знайдені та використані надалі. Ви впевнені, що хочете продовжити не вказавши що саме тут зображено?</string>
<string name="back_button_warning">Скасувати завантаження</string>
<string name="back_button_warning_desc">Використання кнопки \"Назад\" скасує це завантаження</string>
<string name="back_button_continue">Продовжити завантаження</string>
<string name="upload_flow_all_images_in_set">(Для всіх зображень у наборі)</string>
<string name="search_this_area">Шукати в цій зоні</string>
<string name="nearby_card_permission_title">Запит на дозвіл</string>

View file

@ -388,6 +388,9 @@
<string name="no_categories_selected_warning_desc">不帶分類的圖片很難有機會被利用到,您確定您要不選擇分類來繼續嗎?</string>
<string name="no_depictions_selected">沒有選擇描寫</string>
<string name="no_depictions_selected_warning_desc">帶有描寫的圖片會更容易被找到,並且更可能被拿來使用。您確定您要不選擇描寫來繼續嗎?</string>
<string name="back_button_warning">取消上傳</string>
<string name="back_button_warning_desc">使用倒退按鈕將會取消此上傳,您並且會失去您的進度</string>
<string name="back_button_continue">繼續上傳</string>
<string name="upload_flow_all_images_in_set">(在集合的所有圖片)</string>
<string name="search_this_area">搜尋此區域</string>
<string name="nearby_card_permission_title">權限請求</string>

View file

@ -6,6 +6,7 @@
* A Retired User
* Aefgh39622
* Angrydog001
* Crowley666
* D41D8CD98F
* Deathkon
* GuoPC
@ -406,6 +407,8 @@
<string name="no_categories_selected_warning_desc">没有类别的图像很少可用。确实要继续而不选择类别吗?</string>
<string name="no_depictions_selected">没有选择描写</string>
<string name="no_depictions_selected_warning_desc">带有描述的图像更容易被发现并且更可能被使用。您确定不选择描述继续吗?</string>
<string name="back_button_warning">取消上传</string>
<string name="back_button_continue">继续上传</string>
<string name="upload_flow_all_images_in_set">(对于设置中的所有图像)</string>
<string name="search_this_area">搜索这个区域</string>
<string name="nearby_card_permission_title">需要许可</string>
@ -619,6 +622,10 @@
<string name="pan_and_zoom_to_adjust">放大和做小来调整</string>
<string name="exit_location_picker">退出位置拾取器</string>
<string name="select_location_location_picker">选择地点</string>
<string name="show_in_map_app">在地图应用中显示</string>
<string name="modify_location">编辑位置</string>
<string name="location_picker_image_view">位置拾取器的图像视图</string>
<string name="location_picker_image_view_shadow">地点拾取器的照片观测视野的阴影。</string>
<string name="image_location">图像位置</string>
<string name="check_whether_location_is_correct">检查位置是否正确</string>
</resources>

View file

@ -48,9 +48,9 @@
<attr name="contributionsListTextPrimary" format="reference"/>
<attr name="menu_item_tint" format="reference"/>
<attr name="search_icon" format="reference"/>
<attr name="caption_description_text_color" format="reference" />
<attr name="custom_selector_done" format="reference"/>
<attr name="custom_selector_back" format="reference"/>
<attr name="caption_description_text_color" format="reference" />
<declare-styleable name="Badge">
<attr name="boundary" format="color"/>

View file

@ -391,11 +391,15 @@
Upload your first media by tapping on the add button.</string>
<string name="no_categories_selected">No Categories Selected</string>
<string name="no_categories_selected_warning_desc">Images without categories are rarely usable. Are you sure you want to continue without selecting categories?</string>
<string name="no_depictions_selected">No Depictions Selected</string>
<string name="no_depictions_selected">No Depictions Selected</string>
<string name="no_depictions_selected_warning_desc">Images with depictions are more easily found and more likely to be used. Are you sure you want to continue without selecting depictions?</string>
<string name="back_button_warning">Cancel Upload</string>
<string name="back_button_warning_desc">Using the back button will cancel this upload and you will lose your progress</string>
<string name="back_button_continue">Continue Upload</string>
<string name="upload_flow_all_images_in_set">(For all image(s) in set)</string>
<string name="search_this_area">Search this area</string>
<string name="nearby_card_permission_title">Permission Request</string>
@ -622,8 +626,6 @@ Upload your first media by tapping on the add button.</string>
<string name="app_ui_language">App user interface language</string>
<string name="remove">Removes a caption and description</string>
<string name="read_help_link">Read more</string>
<string name="custom_selector_title">Custom Selector</string>
<string name="custom_selector_empty_text">No Images</string>
<string name="media_detail_in_all_languages">In all languages</string>
<string name="choose_a_location">Choose a location</string>
<string name="pan_and_zoom_to_adjust">Pan and zoom to adjust</string>
@ -636,6 +638,8 @@ Upload your first media by tapping on the add button.</string>
The shadow of the image view of the location picker</string>
<string name="image_location">Image Location</string>
<string name="check_whether_location_is_correct">Check whether location is correct</string>
<string name="custom_selector_title">Custom Selector</string>
<string name="custom_selector_empty_text">No Images</string>
<string name="done">Done</string>
<string name="back">Back</string>

View file

@ -0,0 +1,353 @@
package fr.free.nrw.commons.contributions
import android.content.Context
import android.content.res.Configuration
import android.os.Bundle
import android.os.Looper
import android.view.LayoutInflater
import android.widget.LinearLayout
import android.widget.ProgressBar
import android.widget.TextView
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.upload.WikidataPlace
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class)
@LooperMode(LooperMode.Mode.PAUSED)
class ContributionsListFragmentUnitTests {
private lateinit var activity: MainActivity
private lateinit var fragment: ContributionsListFragment
private lateinit var context: Context
private lateinit var layoutInflater: LayoutInflater
@Mock
private lateinit var savedInstanceState: Bundle
@Mock
private lateinit var rvContributionsList: RecyclerView
@Mock
private lateinit var adapter: ContributionsListAdapter
@Mock
private lateinit var contribution: Contribution
@Mock
private lateinit var media: Media
@Mock
private lateinit var wikidataPlace: WikidataPlace
@Mock
private lateinit var callback: ContributionsListFragment.Callback
@Mock
private lateinit var layoutManager: RecyclerView.LayoutManager
@Mock
private lateinit var gridLayoutManager: GridLayoutManager
@Mock
private lateinit var noContributionsYet: TextView
@Mock
private lateinit var progressBar: ProgressBar
@Mock
private lateinit var fabPlus: FloatingActionButton
@Mock
private lateinit var fabCamera: FloatingActionButton
@Mock
private lateinit var fabGallery: FloatingActionButton
@Mock
private lateinit var newConfig: Configuration
@Mock
private lateinit var fabLayout: LinearLayout
@Mock
private lateinit var contributionsListPresenter: ContributionsListPresenter
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter())
context = RuntimeEnvironment.application.applicationContext
activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
layoutInflater = LayoutInflater.from(activity)
fragment = ContributionsListFragment()
val fragmentManager: FragmentManager = activity.supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(fragment, null)
fragmentTransaction.commit()
Whitebox.setInternalState(fragment, "rvContributionsList", rvContributionsList)
Whitebox.setInternalState(fragment, "adapter", adapter)
Whitebox.setInternalState(fragment, "callback", callback)
Whitebox.setInternalState(fragment, "noContributionsYet", noContributionsYet)
Whitebox.setInternalState(fragment, "progressBar", progressBar)
Whitebox.setInternalState(fragment, "fabPlus", fabPlus)
Whitebox.setInternalState(fragment, "fabCamera", fabCamera)
Whitebox.setInternalState(fragment, "fabGallery", fabGallery)
Whitebox.setInternalState(fragment, "fab_layout", fabLayout)
Whitebox.setInternalState(
fragment,
"contributionsListPresenter",
contributionsListPresenter
)
}
@Test
@Throws(Exception::class)
fun checkFragmentNotNull() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
Assert.assertNotNull(fragment)
}
@Test
@Throws(Exception::class)
fun testOnCreateView() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.onCreateView(layoutInflater, null, savedInstanceState)
}
@Test
@Throws(Exception::class)
fun testOnDetach() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.onDetach()
}
@Test
@Throws(Exception::class)
fun testGetContributionStateAt() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(contribution)
fragment.getContributionStateAt(0)
}
@Test
@Throws(Exception::class)
fun testOnConfirmClicked() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(contribution.media).thenReturn(media)
`when`(media.wikiCode).thenReturn("")
`when`(contribution.wikidataPlace).thenReturn(wikidataPlace)
fragment.onConfirmClicked(contribution, true)
}
@Test
@Throws(Exception::class)
fun testGetTotalMediaCount() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.totalMediaCount
}
@Test
@Throws(Exception::class)
fun testGetMediaAtPositionCaseNonNull() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(contribution)
`when`(contribution.media).thenReturn(media)
fragment.getMediaAtPosition(0)
}
@Test
@Throws(Exception::class)
fun testGetMediaAtPositionCaseNull() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(adapter.getContributionForPosition(anyInt())).thenReturn(null)
fragment.getMediaAtPosition(0)
}
@Test
@Throws(Exception::class)
fun testShowAddImageToWikipediaInstructions() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"showAddImageToWikipediaInstructions",
Contribution::class.java
)
method.isAccessible = true
method.invoke(fragment, contribution)
}
@Test
@Throws(Exception::class)
fun testResumeUpload() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.resumeUpload(contribution)
}
@Test
@Throws(Exception::class)
fun testPauseUpload() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.pauseUpload(contribution)
}
@Test
@Throws(Exception::class)
fun testAddImageToWikipedia() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.addImageToWikipedia(contribution)
}
@Test
@Throws(Exception::class)
fun testOpenMediaDetail() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.openMediaDetail(0, true)
}
@Test
@Throws(Exception::class)
fun testDeleteUpload() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.deleteUpload(contribution)
}
@Test
@Throws(Exception::class)
fun testRetryUpload() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.retryUpload(contribution)
}
@Test
@Throws(Exception::class)
fun testOnViewStateRestored() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(rvContributionsList.layoutManager).thenReturn(layoutManager)
fragment.onViewStateRestored(savedInstanceState)
}
@Test
@Throws(Exception::class)
fun testOnSaveInstanceState() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(rvContributionsList.layoutManager).thenReturn(gridLayoutManager)
fragment.onSaveInstanceState(savedInstanceState)
}
@Test
@Throws(Exception::class)
fun testShowNoContributionsUI() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.showNoContributionsUI(true)
}
@Test
@Throws(Exception::class)
fun testShowProgress() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.showProgress(true)
}
@Test
@Throws(Exception::class)
fun testShowWelcomeTip() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.showWelcomeTip(true)
}
@Test
@Throws(Exception::class)
fun testAnimateFAB() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(fabPlus.isShown).thenReturn(false)
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"animateFAB",
Boolean::class.java
)
method.isAccessible = true
method.invoke(fragment, true)
}
@Test
@Throws(Exception::class)
fun testAnimateFABCaseShownAndOpen() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(fabPlus.isShown).thenReturn(true)
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"animateFAB",
Boolean::class.java
)
method.isAccessible = true
method.invoke(fragment, true)
}
@Test
@Throws(Exception::class)
fun testAnimateFABCaseShownAndClose() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(fabPlus.isShown).thenReturn(true)
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"animateFAB",
Boolean::class.java
)
method.isAccessible = true
method.invoke(fragment, false)
}
@Test
@Throws(Exception::class)
fun testSetListeners() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"setListeners"
)
method.isAccessible = true
method.invoke(fragment)
}
@Test
@Throws(Exception::class)
fun testInitializeAnimations() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
val method: Method = ContributionsListFragment::class.java.getDeclaredMethod(
"initializeAnimations"
)
method.isAccessible = true
method.invoke(fragment)
}
@Test
@Throws(Exception::class)
fun testOnConfigurationChanged() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
newConfig.orientation = Configuration.ORIENTATION_LANDSCAPE
fragment.onConfigurationChanged(newConfig)
}
}

View file

@ -1,30 +1,46 @@
package fr.free.nrw.commons.profile
import android.content.Context
import android.graphics.Bitmap
import android.os.Looper
import android.view.Menu
import android.view.MenuItem
import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestCommonsApplication
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.powermock.api.mockito.PowerMockito
import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows
import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem
import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class)
class ProfileActivityTest {
@Mock
private lateinit var activity: ProfileActivity
private lateinit var profileActivity: ProfileActivity
@Mock
private lateinit var mockContext: Context
@Mock
private lateinit var bitmap: Bitmap
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
mockContext = PowerMockito.mock(Context::class.java)
profileActivity = PowerMockito.mock(ProfileActivity::class.java)
mockContext = RuntimeEnvironment.application.applicationContext
}
@Test
@ -41,8 +57,53 @@ class ProfileActivityTest {
@Test
@Throws(Exception::class)
fun testStartYourself() {
ProfileActivity.startYourself(mockContext)
fun testOnCreateOptionsMenu() {
val menu: Menu = RoboMenu(mockContext)
activity.onCreateOptionsMenu(menu)
}
@Test
@Throws(Exception::class)
fun testOnOptionsItemSelected() {
val menuItem: MenuItem = RoboMenuItem(R.menu.menu_about)
Shadows.shadowOf(Looper.getMainLooper()).idle()
activity.onOptionsItemSelected(menuItem)
}
@Test
@Throws(Exception::class)
fun testOnOptionsShareItemSelected() {
val menuItemShare: MenuItem = RoboMenuItem(R.id.share_app_icon)
activity.onOptionsItemSelected(menuItemShare)
}
@Test
@Throws(Exception::class)
fun testStartYourself() {
ProfileActivity.startYourself(activity)
}
@Test
@Throws(Exception::class)
fun testShowAlert() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
activity.showAlert(bitmap)
}
@Test
@Throws(Exception::class)
fun testShareScreen() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
val method: Method = ProfileActivity::class.java.getDeclaredMethod(
"shareScreen", Bitmap::class.java
)
method.isAccessible = true
method.invoke(activity, bitmap)
}
@Test
@Throws(Exception::class)
fun testOnSupportNavigateUp() {
activity.onSupportNavigateUp()
}
}

View file

@ -1,7 +1,6 @@
package fr.free.nrw.commons.profile.achievements
import android.content.Context
import android.graphics.Bitmap
import android.os.Looper
import android.view.MenuItem
import android.widget.ImageView
@ -83,9 +82,6 @@ class AchievementsFragmentUnitTests {
@Mock
private lateinit var imageUploadedText: TextView
@Mock
private lateinit var bitmap: Bitmap
@Mock
private lateinit var progressBar: ProgressBar
@ -143,14 +139,6 @@ class AchievementsFragmentUnitTests {
Assert.assertNotNull(fragment)
}
@Test
@Throws(Exception::class)
fun testShowAlert() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
fragment.showAlert(bitmap)
}
@Test
@Throws(Exception::class)
fun testShowInfoDialog() {
@ -329,16 +317,4 @@ class AchievementsFragmentUnitTests {
method.isAccessible = true
method.invoke(fragment)
}
@Test
@Throws(Exception::class)
fun testShareScreen() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
val method: Method = AchievementsFragment::class.java.getDeclaredMethod(
"shareScreen", Bitmap::class.java
)
method.isAccessible = true
method.invoke(fragment, bitmap)
}
}