Merge remote-tracking branch 'projet_original_master/master'
"synchronisation with the original project"
|
|
@ -17,14 +17,17 @@ jdk:
|
|||
|
||||
android:
|
||||
components:
|
||||
- platform-tools
|
||||
- tools
|
||||
- platform-tools
|
||||
- build-tools-26.0.1
|
||||
- extra-google-m2repository
|
||||
- extra-android-m2repository
|
||||
- ${ANDROID_TARGET}
|
||||
- android-25
|
||||
- android-26
|
||||
- sys-img-${ANDROID_ABI}-${ANDROID_TARGET}
|
||||
licenses:
|
||||
- 'android-sdk-license-.+'
|
||||
|
||||
before_script:
|
||||
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
|
||||
|
|
|
|||
1
CREDITS
|
|
@ -29,6 +29,7 @@ their contribution to the product.
|
|||
* Jan Piotrowski
|
||||
* Bruke Mekuria Mulugeta
|
||||
* Paul Hawke
|
||||
* Vishan Seru
|
||||
|
||||
3rd party open source libraries used:
|
||||
* Butterknife
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
|
||||
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
|
||||
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS"/>
|
||||
<uses-permission android:name="android.permission.READ_LOGS"/>
|
||||
|
||||
<application
|
||||
android:name=".CommonsApplication"
|
||||
|
|
|
|||
|
|
@ -178,8 +178,8 @@ public class CommonsApplication extends Application {
|
|||
|
||||
public boolean deviceHasCamera() {
|
||||
PackageManager pm = getPackageManager();
|
||||
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) ||
|
||||
pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
|
||||
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
|
||||
|| pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
|
||||
}
|
||||
|
||||
public void clearApplicationData(Context context, LogoutListener logoutListener) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,6 @@ public class MediaDataExtractor {
|
|||
private String filename;
|
||||
private ArrayList<String> categories;
|
||||
private Map<String, String> descriptions;
|
||||
private Date date;
|
||||
private String license;
|
||||
private @Nullable LatLng coordinates;
|
||||
private LicenseList licenseList;
|
||||
|
|
@ -153,7 +152,7 @@ public class MediaDataExtractor {
|
|||
}
|
||||
|
||||
private Node findTemplate(Element parentNode, String title_) throws IOException {
|
||||
String title= new PageTitle(title_).getDisplayText();
|
||||
String title = new PageTitle(title_).getDisplayText();
|
||||
NodeList nodes = parentNode.getChildNodes();
|
||||
for (int i = 0, length = nodes.getLength(); i < length; i++) {
|
||||
Node node = nodes.item(i);
|
||||
|
|
@ -179,7 +178,7 @@ public class MediaDataExtractor {
|
|||
}
|
||||
|
||||
private static abstract class TemplateChildNodeComparator {
|
||||
abstract public boolean match(Node node);
|
||||
public abstract boolean match(Node node);
|
||||
}
|
||||
|
||||
private Node findTemplateParameter(Node templateNode, String name) throws IOException {
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public class MediaWikiImageView extends SimpleDraweeView {
|
|||
if (currentThumbnailTask != null) {
|
||||
currentThumbnailTask.cancel(true);
|
||||
}
|
||||
if(media == null) {
|
||||
if (media == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,8 +13,10 @@ import org.xmlpull.v1.XmlPullParser;
|
|||
import org.xmlpull.v1.XmlPullParserException;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.StringWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigInteger;
|
||||
|
|
@ -281,4 +283,37 @@ public class Utils {
|
|||
public static boolean isDarkTheme(Context context) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme", false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be used to fetch the logs generated by the app ever since the beginning of times....
|
||||
* i.e. since the time the app started.
|
||||
*
|
||||
* @return String containing all the logs since the time the app started
|
||||
*/
|
||||
public static String getAppLogs() {
|
||||
final String processId = Integer.toString(android.os.Process.myPid());
|
||||
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
try {
|
||||
String[] command = new String[] {"logcat","-d","-v","threadtime"};
|
||||
|
||||
Process process = Runtime.getRuntime().exec(command);
|
||||
|
||||
BufferedReader bufferedReader = new BufferedReader(
|
||||
new InputStreamReader(process.getInputStream())
|
||||
);
|
||||
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
if (line.contains(processId)) {
|
||||
stringBuilder.append(line);
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
Timber.e("getAppLogs failed", ioe);
|
||||
}
|
||||
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -248,8 +248,8 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
|||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
boolean enabled = usernameEdit.getText().length() != 0 && passwordEdit.getText().length() != 0 &&
|
||||
(BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE);
|
||||
boolean enabled = usernameEdit.getText().length() != 0 && passwordEdit.getText().length() != 0
|
||||
&& (BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE);
|
||||
loginButton.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -238,6 +238,8 @@ public class ContributionsActivity extends AuthenticatedActivity
|
|||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
|
||||
contributionsList.changeProgressBarVisibility(false);
|
||||
|
||||
if (contributionsList.getAdapter() == null) {
|
||||
contributionsList.setAdapter(new ContributionsListAdapter(getApplicationContext(),
|
||||
cursor, 0));
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class ContributionsListAdapter extends CursorAdapter {
|
|||
views.seqNumView.setText(String.valueOf(cursor.getPosition() + 1));
|
||||
views.seqNumView.setVisibility(View.VISIBLE);
|
||||
|
||||
switch(contribution.getState()) {
|
||||
switch (contribution.getState()) {
|
||||
case Contribution.STATE_COMPLETED:
|
||||
views.stateView.setVisibility(View.GONE);
|
||||
views.progressView.setVisibility(View.GONE);
|
||||
|
|
@ -50,7 +50,7 @@ class ContributionsListAdapter extends CursorAdapter {
|
|||
views.progressView.setVisibility(View.VISIBLE);
|
||||
long total = contribution.getDataLength();
|
||||
long transferred = contribution.getTransferred();
|
||||
if(transferred == 0 || transferred >= total) {
|
||||
if (transferred == 0 || transferred >= total) {
|
||||
views.progressView.setIndeterminate(true);
|
||||
} else {
|
||||
views.progressView.setProgress((int)(((double)transferred / (double)total) * 100));
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ import android.view.ViewGroup;
|
|||
import android.widget.AdapterView;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
|
@ -41,8 +42,9 @@ public class ContributionsListFragment extends Fragment {
|
|||
GridView contributionsList;
|
||||
@BindView(R.id.waitingMessage)
|
||||
TextView waitingMessage;
|
||||
@BindView(R.id.emptyMessage)
|
||||
TextView emptyMessage;
|
||||
@BindView(R.id.loadingContributionsProgressBar)
|
||||
ProgressBar progressBar;
|
||||
|
||||
private ContributionController controller;
|
||||
|
||||
@Override
|
||||
|
|
@ -67,6 +69,7 @@ public class ContributionsListFragment extends Fragment {
|
|||
waitingMessage.setVisibility(GONE);
|
||||
}
|
||||
|
||||
changeProgressBarVisibility(true);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
|
@ -78,6 +81,10 @@ public class ContributionsListFragment extends Fragment {
|
|||
this.contributionsList.setAdapter(adapter);
|
||||
}
|
||||
|
||||
public void changeProgressBarVisibility(boolean isVisible) {
|
||||
this.progressBar.setVisibility(isVisible ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
if (outState == null) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
|||
import fr.free.nrw.commons.contributions.Contribution;
|
||||
import fr.free.nrw.commons.modifications.ModifierSequence;
|
||||
|
||||
public class DBOpenHelper extends SQLiteOpenHelper{
|
||||
public class DBOpenHelper extends SQLiteOpenHelper {
|
||||
|
||||
private static final String DATABASE_NAME = "commons.db";
|
||||
private static final int DATABASE_VERSION = 6;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ public class LatLng {
|
|||
* @param longitude double value
|
||||
*/
|
||||
public LatLng(double latitude, double longitude, float accuracy) {
|
||||
if(-180.0D <= longitude && longitude < 180.0D) {
|
||||
if (-180.0D <= longitude && longitude < 180.0D) {
|
||||
this.longitude = longitude;
|
||||
} else {
|
||||
this.longitude = ((longitude - 180.0D) % 360.0D + 360.0D) % 360.0D - 180.0D;
|
||||
|
|
@ -33,9 +33,9 @@ public class LatLng {
|
|||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if(this == o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
} else if(!(o instanceof LatLng)) {
|
||||
} else if (!(o instanceof LatLng)) {
|
||||
return false;
|
||||
} else {
|
||||
LatLng var2 = (LatLng)o;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ public class CategoryModifier extends PageModifier {
|
|||
public CategoryModifier(String... categories) {
|
||||
super(MODIFIER_NAME);
|
||||
JSONArray categoriesArray = new JSONArray();
|
||||
for(String category: categories) {
|
||||
for (String category: categories) {
|
||||
categoriesArray.put(category);
|
||||
}
|
||||
try {
|
||||
|
|
@ -34,7 +34,7 @@ public class CategoryModifier extends PageModifier {
|
|||
categories = params.optJSONArray(PARAM_CATEGORIES);
|
||||
|
||||
StringBuilder categoriesString = new StringBuilder();
|
||||
for(int i=0; i < categories.length(); i++) {
|
||||
for (int i = 0; i < categories.length(); i++) {
|
||||
String category = categories.optString(i);
|
||||
categoriesString.append("\n[[Category:").append(category).append("]]");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import android.text.TextUtils;
|
|||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class ModificationsContentProvider extends ContentProvider{
|
||||
public class ModificationsContentProvider extends ContentProvider {
|
||||
|
||||
private static final int MODIFICATIONS = 1;
|
||||
private static final int MODIFICATIONS_ID = 2;
|
||||
|
|
@ -46,7 +46,7 @@ public class ModificationsContentProvider extends ContentProvider{
|
|||
|
||||
int uriType = uriMatcher.match(uri);
|
||||
|
||||
switch(uriType) {
|
||||
switch (uriType) {
|
||||
case MODIFICATIONS:
|
||||
break;
|
||||
default:
|
||||
|
|
@ -107,7 +107,7 @@ public class ModificationsContentProvider extends ContentProvider{
|
|||
sqlDB.beginTransaction();
|
||||
switch (uriType) {
|
||||
case MODIFICATIONS:
|
||||
for(ContentValues value: values) {
|
||||
for (ContentValues value: values) {
|
||||
Timber.d("Inserting! %s", value);
|
||||
sqlDB.insert(ModifierSequence.Table.TABLE_NAME, null, value);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public class ModifierSequence {
|
|||
public ModifierSequence(Uri mediaUri, JSONObject data) {
|
||||
this(mediaUri);
|
||||
JSONArray modifiersJSON = data.optJSONArray("modifiers");
|
||||
for (int i=0; i< modifiersJSON.length(); i++) {
|
||||
for (int i = 0; i < modifiersJSON.length(); i++) {
|
||||
modifiers.add(PageModifier.fromJSON(modifiersJSON.optJSONObject(i)));
|
||||
}
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ public class ModifierSequence {
|
|||
|
||||
public String getEditSummary() {
|
||||
StringBuilder editSummary = new StringBuilder();
|
||||
for(PageModifier modifier: modifiers) {
|
||||
for (PageModifier modifier: modifiers) {
|
||||
editSummary.append(modifier.getEditSumary()).append(" ");
|
||||
}
|
||||
editSummary.append("Via Commons Mobile App");
|
||||
|
|
@ -93,12 +93,12 @@ public class ModifierSequence {
|
|||
|
||||
public void save() {
|
||||
try {
|
||||
if(contentUri == null) {
|
||||
if (contentUri == null) {
|
||||
contentUri = client.insert(ModificationsContentProvider.BASE_URI, this.toContentValues());
|
||||
} else {
|
||||
client.update(contentUri, toContentValues(), null, null);
|
||||
}
|
||||
} catch(RemoteException e) {
|
||||
} catch (RemoteException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,9 @@ public abstract class PageModifier {
|
|||
|
||||
public static PageModifier fromJSON(JSONObject data) {
|
||||
String name = data.optString("name");
|
||||
if(name.equals(CategoryModifier.MODIFIER_NAME)) {
|
||||
if (name.equals(CategoryModifier.MODIFIER_NAME)) {
|
||||
return new CategoryModifier(data.optJSONObject("data"));
|
||||
} else if(name.equals(TemplateRemoveModifier.MODIFIER_NAME)) {
|
||||
} else if (name.equals(TemplateRemoveModifier.MODIFIER_NAME)) {
|
||||
return new TemplateRemoveModifier(data.optJSONObject("data"));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,18 +41,18 @@ public class TemplateRemoveModifier extends PageModifier {
|
|||
Pattern templateStartPattern = Pattern.compile("\\{\\{" + templateNormalized, Pattern.CASE_INSENSITIVE);
|
||||
Matcher matcher = templateStartPattern.matcher(pageContents);
|
||||
|
||||
while(matcher.find()) {
|
||||
while (matcher.find()) {
|
||||
int braceCount = 1;
|
||||
int startIndex = matcher.start();
|
||||
int curIndex = matcher.end();
|
||||
Matcher openMatch = PATTERN_TEMPLATE_OPEN.matcher(pageContents);
|
||||
Matcher closeMatch = PATTERN_TEMPLATE_CLOSE.matcher(pageContents);
|
||||
|
||||
while(curIndex < pageContents.length()) {
|
||||
while (curIndex < pageContents.length()) {
|
||||
boolean openFound = openMatch.find(curIndex);
|
||||
boolean closeFound = closeMatch.find(curIndex);
|
||||
|
||||
if(openFound && (!closeFound || openMatch.start() < closeMatch.start())) {
|
||||
if (openFound && (!closeFound || openMatch.start() < closeMatch.start())) {
|
||||
braceCount++;
|
||||
curIndex = openMatch.end();
|
||||
} else if (closeFound) {
|
||||
|
|
@ -71,8 +71,8 @@ public class TemplateRemoveModifier extends PageModifier {
|
|||
}
|
||||
|
||||
// Strip trailing whitespace
|
||||
while(curIndex < pageContents.length()) {
|
||||
if(pageContents.charAt(curIndex) == ' ' || pageContents.charAt(curIndex) == '\n') {
|
||||
while (curIndex < pageContents.length()) {
|
||||
if (pageContents.charAt(curIndex) == ' ' || pageContents.charAt(curIndex) == '\n') {
|
||||
curIndex++;
|
||||
} else {
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
|
|||
public UploadResult uploadFile(String filename, InputStream file, long dataLength, String pageContents, String editSummary, final ProgressListener progressListener) throws IOException {
|
||||
ApiResult result = api.upload(filename, file, dataLength, pageContents, editSummary, progressListener::onProgress);
|
||||
|
||||
Log.e("WTF", "Result: " +result.toString());
|
||||
Log.e("WTF", "Result: " + result.toString());
|
||||
|
||||
String resultStatus = result.getString("/api/upload/@result");
|
||||
if (!resultStatus.equals("Success")) {
|
||||
|
|
|
|||
|
|
@ -258,6 +258,8 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
}
|
||||
|
||||
private void refreshView() {
|
||||
curLatLang = locationManager.getLatestLocation();
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
nearbyAsyncTask = new NearbyAsyncTask(this);
|
||||
nearbyAsyncTask.execute();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class NearbyPlaces {
|
|||
|
||||
try {
|
||||
// increase the radius gradually to find a satisfactory number of nearby places
|
||||
while (radius < MAX_RADIUS) {
|
||||
while (radius <= MAX_RADIUS) {
|
||||
places = getFromWikidataQuery(curLatLng, lang, radius);
|
||||
Timber.d("%d results at radius: %f", places.size(), radius);
|
||||
if (places.size() >= MIN_RESULTS) {
|
||||
|
|
@ -62,6 +62,11 @@ public class NearbyPlaces {
|
|||
Timber.d("back to initial radius: %f", radius);
|
||||
radius = INITIAL_RADIUS;
|
||||
}
|
||||
// make sure we will be able to send at least one request next time
|
||||
if (radius > MAX_RADIUS) {
|
||||
radius = MAX_RADIUS;
|
||||
}
|
||||
|
||||
return places;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,39 @@
|
|||
package fr.free.nrw.commons.settings;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import fr.free.nrw.commons.BuildConfig;
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.utils.FileUtils;
|
||||
|
||||
public class SettingsFragment extends PreferenceFragment {
|
||||
|
||||
private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 100;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
@ -66,6 +86,63 @@ public class SettingsFragment extends PreferenceFragment {
|
|||
return true;
|
||||
});
|
||||
|
||||
Preference sendLogsPreference = findPreference("sendLogFile");
|
||||
sendLogsPreference.setOnPreferenceClickListener(preference -> {
|
||||
//first we need to check if we have the necessary permissions
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(
|
||||
getActivity(),
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
==
|
||||
PackageManager.PERMISSION_GRANTED) {
|
||||
sendAppLogsViaEmail();
|
||||
} else {
|
||||
//first get the necessary permission
|
||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
} else {
|
||||
sendAppLogsViaEmail();
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
sendAppLogsViaEmail();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendAppLogsViaEmail() {
|
||||
String appLogs = Utils.getAppLogs();
|
||||
File appLogsFile = FileUtils.createAndGetAppLogsFile(appLogs);
|
||||
|
||||
Context applicationContext = getActivity().getApplicationContext();
|
||||
Uri appLogsFilePath = FileProvider.getUriForFile(
|
||||
getActivity(),
|
||||
applicationContext.getPackageName() + ".provider",
|
||||
appLogsFile
|
||||
);
|
||||
|
||||
Intent feedbackIntent = new Intent(Intent.ACTION_SEND);
|
||||
feedbackIntent.setType("message/rfc822");
|
||||
feedbackIntent.putExtra(Intent.EXTRA_EMAIL,
|
||||
new String[]{CommonsApplication.FEEDBACK_EMAIL});
|
||||
feedbackIntent.putExtra(Intent.EXTRA_SUBJECT,
|
||||
String.format(CommonsApplication.FEEDBACK_EMAIL_SUBJECT,
|
||||
BuildConfig.VERSION_NAME));
|
||||
feedbackIntent.putExtra(Intent.EXTRA_STREAM,appLogsFilePath);
|
||||
|
||||
try {
|
||||
startActivity(feedbackIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getActivity(), R.string.no_email_client, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public class BaseActivity extends AppCompatActivity {
|
|||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
if(Utils.isDarkTheme(this)){
|
||||
if (Utils.isDarkTheme(this)) {
|
||||
currentTheme = true;
|
||||
setTheme(R.style.DarkAppTheme);
|
||||
} else {
|
||||
|
|
@ -28,7 +28,7 @@ public class BaseActivity extends AppCompatActivity {
|
|||
protected void onResume() {
|
||||
// Restart activity if theme is changed
|
||||
boolean newTheme = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("theme",false);
|
||||
if(currentTheme!=newTheme){ //is activity theme changed
|
||||
if (currentTheme != newTheme) { //is activity theme changed
|
||||
Intent intent = getIntent();
|
||||
finish();
|
||||
startActivity(intent);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package fr.free.nrw.commons.theme;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
|
|
@ -9,7 +11,9 @@ import android.support.v7.app.ActionBarDrawerToggle;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
|
@ -18,6 +22,7 @@ import fr.free.nrw.commons.BuildConfig;
|
|||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.WelcomeActivity;
|
||||
import fr.free.nrw.commons.auth.AccountUtil;
|
||||
import fr.free.nrw.commons.auth.LoginActivity;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.nearby.NearbyActivity;
|
||||
|
|
@ -47,6 +52,22 @@ public abstract class NavigationBaseActivity extends BaseActivity
|
|||
toggle.setDrawerIndicatorEnabled(true);
|
||||
toggle.syncState();
|
||||
setDrawerPaneWidth();
|
||||
setUserName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the username in navigationHeader.
|
||||
*/
|
||||
private void setUserName() {
|
||||
|
||||
View navHeaderView = navigationView.getHeaderView(0);
|
||||
TextView username = (TextView) navHeaderView.findViewById(R.id.username);
|
||||
|
||||
AccountManager accountManager = AccountManager.get(this);
|
||||
Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType());
|
||||
if (allAccounts.length != 0) {
|
||||
username.setText(allAccounts[0].name);
|
||||
}
|
||||
}
|
||||
|
||||
public void initBackButton() {
|
||||
|
|
|
|||
|
|
@ -123,8 +123,9 @@ public class FileUtils {
|
|||
} catch (IllegalArgumentException e) {
|
||||
Timber.d(e);
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@ public class GPSExtractor {
|
|||
return decimalCoords;
|
||||
}
|
||||
|
||||
private double convertToDegree(String stringDMS){
|
||||
private double convertToDegree(String stringDMS) {
|
||||
double result;
|
||||
String[] DMS = stringDMS.split(",", 3);
|
||||
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ public class MultipleShareActivity
|
|||
dialog.setTitle(getResources().getQuantityString(R.plurals.starting_multiple_uploads, photosList.size(), photosList.size()));
|
||||
dialog.show();
|
||||
|
||||
for(int i = 0; i < photosList.size(); i++) {
|
||||
for (int i = 0; i < photosList.size(); i++) {
|
||||
Contribution up = photosList.get(i);
|
||||
final int uploadCount = i + 1; // Goddamn Java
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ public class MultipleShareActivity
|
|||
public void onCategoriesSave(List<String> categories) {
|
||||
if (categories.size() > 0) {
|
||||
ContentProviderClient client = getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY);
|
||||
for(Contribution contribution: photosList) {
|
||||
for (Contribution contribution: photosList) {
|
||||
ModifierSequence categoriesSequence = new ModifierSequence(contribution.getContentUri());
|
||||
|
||||
categoriesSequence.queueModifier(new CategoryModifier(categories.toArray(new String[]{})));
|
||||
|
|
@ -189,7 +189,7 @@ public class MultipleShareActivity
|
|||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch(item.getItemId()) {
|
||||
switch (item.getItemId()) {
|
||||
case android.R.id.home:
|
||||
if (mediaDetails.isVisible()) {
|
||||
getSupportFragmentManager().popBackStack();
|
||||
|
|
@ -225,7 +225,7 @@ public class MultipleShareActivity
|
|||
}
|
||||
|
||||
private void showDetail(int i) {
|
||||
if (mediaDetails == null ||!mediaDetails.isVisible()) {
|
||||
if (mediaDetails == null || !mediaDetails.isVisible()) {
|
||||
mediaDetails = new MediaDetailPagerFragment(true);
|
||||
getSupportFragmentManager()
|
||||
.beginTransaction()
|
||||
|
|
@ -252,7 +252,7 @@ public class MultipleShareActivity
|
|||
if (photosList == null) {
|
||||
photosList = new ArrayList<>();
|
||||
ArrayList<Uri> urisList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
|
||||
for(int i=0; i < urisList.size(); i++) {
|
||||
for (int i = 0; i < urisList.size(); i++) {
|
||||
Contribution up = new Contribution();
|
||||
Uri uri = urisList.get(i);
|
||||
up.setLocalUri(uri);
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public class MwVolleyApi {
|
|||
* @param coords Coordinates to build query with
|
||||
* @return URL for API query
|
||||
*/
|
||||
private String buildUrl (String coords){
|
||||
private String buildUrl(String coords) {
|
||||
|
||||
Uri.Builder builder = Uri.parse(MWURL).buildUpon();
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public class UploadController {
|
|||
}
|
||||
|
||||
public void cleanup() {
|
||||
if(isUploadServiceConnected) {
|
||||
if (isUploadServiceConnected) {
|
||||
app.unbindService(uploadServiceConnection);
|
||||
}
|
||||
}
|
||||
|
|
@ -82,11 +82,11 @@ public class UploadController {
|
|||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(app);
|
||||
|
||||
//Set creator, desc, and license
|
||||
if(TextUtils.isEmpty(contribution.getCreator())) {
|
||||
if (TextUtils.isEmpty(contribution.getCreator())) {
|
||||
contribution.setCreator(app.getCurrentAccount().name);
|
||||
}
|
||||
|
||||
if(contribution.getDescription() == null) {
|
||||
if (contribution.getDescription() == null) {
|
||||
contribution.setDescription("");
|
||||
}
|
||||
|
||||
|
|
@ -103,11 +103,11 @@ public class UploadController {
|
|||
protected Contribution doInBackground(Void... voids /* stare into you */) {
|
||||
long length;
|
||||
try {
|
||||
if(contribution.getDataLength() <= 0) {
|
||||
if (contribution.getDataLength() <= 0) {
|
||||
length = app.getContentResolver()
|
||||
.openAssetFileDescriptor(contribution.getLocalUri(), "r")
|
||||
.getLength();
|
||||
if(length == -1) {
|
||||
if (length == -1) {
|
||||
// Let us find out the long way!
|
||||
length = Utils.countBytes(app.getContentResolver()
|
||||
.openInputStream(contribution.getLocalUri()));
|
||||
|
|
|
|||
|
|
@ -15,6 +15,6 @@ public class ExecutorUtils {
|
|||
}
|
||||
};
|
||||
|
||||
public static Executor uiExecutor () { return uiExecutor;}
|
||||
public static Executor uiExecutor() { return uiExecutor; }
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
package fr.free.nrw.commons.utils;
|
||||
|
||||
import android.os.Environment;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class FileUtils {
|
||||
/**
|
||||
|
|
@ -53,5 +59,32 @@ public class FileUtils {
|
|||
return deletedAll;
|
||||
}
|
||||
|
||||
public static File createAndGetAppLogsFile(String logs) {
|
||||
try {
|
||||
File commonsAppDirectory = new File(Environment.getExternalStorageDirectory().toString() + "/CommonsApp");
|
||||
if (!commonsAppDirectory.exists()) {
|
||||
commonsAppDirectory.mkdir();
|
||||
}
|
||||
|
||||
File logsFile = new File(commonsAppDirectory,"logs.txt");
|
||||
if (logsFile.exists()) {
|
||||
//old logs file is useless
|
||||
logsFile.delete();
|
||||
}
|
||||
|
||||
logsFile.createNewFile();
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream(logsFile);
|
||||
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
|
||||
outputStreamWriter.append(logs);
|
||||
outputStreamWriter.close();
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
|
||||
return logsFile;
|
||||
} catch (IOException ioe) {
|
||||
Timber.e(ioe);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ public class FragmentUtils {
|
|||
.commitNow();
|
||||
return true;
|
||||
} catch (IllegalStateException e) {
|
||||
Timber.e(e, "Could not add & commit fragment. " +
|
||||
"Did you mean to call commitAllowingStateLoss?");
|
||||
Timber.e(e, "Could not add & commit fragment. "
|
||||
+ "Did you mean to call commitAllowingStateLoss?");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 37 KiB |
BIN
app/src/main/res/drawable-hdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-hdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 17 KiB |
BIN
app/src/main/res/drawable-ldpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
BIN
app/src/main/res/drawable-ldpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-mdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
BIN
app/src/main/res/drawable-mdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 41 KiB |
BIN
app/src/main/res/drawable-xhdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-xhdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 864 B |
BIN
app/src/main/res/drawable/empty_photo.webp
Normal file
|
After Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 21 KiB |
BIN
app/src/main/res/drawable/llamas.webp
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/mount_zao.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/rainbow_bridge.webp
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/selfie_x.webp
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 83 KiB |
BIN
app/src/main/res/drawable/sydney_opera_house.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable/tulip.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -1,8 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@android:color/darker_gray">
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/pictureOfTheDay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="172dp"
|
||||
android:background="@android:color/darker_gray"
|
||||
android:padding="16dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:src="@drawable/commons_logo_large"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/username"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TextView"
|
||||
android:textColor="@color/item_white_background"
|
||||
android:textSize="22sp"
|
||||
android:layout_below="@+id/pictureOfTheDay"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:paddingBottom="5dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
|
@ -13,15 +14,14 @@
|
|||
android:id="@+id/waitingMessage"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:layout_centerHorizontal="true"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/no_uploads_yet"
|
||||
android:id="@+id/emptyMessage"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:layout_centerInParent="true"
|
||||
android:id="@+id/loadingContributionsProgressBar"
|
||||
/>
|
||||
|
||||
<GridView
|
||||
|
|
@ -36,4 +36,4 @@
|
|||
android:fastScrollEnabled="true"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
|
@ -73,9 +73,9 @@
|
|||
<string name="title_activity_settings">Configuración</string>
|
||||
<string name="title_activity_signup">Date d\'alta</string>
|
||||
<string name="menu_about">Tocante a</string>
|
||||
<string name="about_license" fuzzy="true">Software de códigu abiertu lliberáu baxo la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Llicencia Apache v2</a>. %1$s ya\'l so logotipu son marques rexistraes de la Fundación Wikimedia y utilícense col so permisu. Nun tamos acreditaos pola Fundación Wikimedia nin tamos afiliaos con ella.</string>
|
||||
<string name="about_license">La app de Wikimedia Commons ye software de códigu abiertu, creáu y calteníu por becaos y voluntarios de la comunidá de Wikimedia. La Fundación Wikimedia nun participa na creación, desendolcu nin caltenimientu de la app.</string>
|
||||
<string name="about_improve">El <a href=\"https://github.com/commons-app/apps-android-commons\">códigu fonte</a> ya\'l <a href=\"https://commons-app.github.io/\">sitiu web</a> tán en GitHub. Crea una nueva <a href=\"https://github.com/commons-app/apps-android-commons/issues\">incidencia en GitHub</a> pa informar de problemes y suxerencies.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true">Wikimedia:Commons-android-strings-about privacy policy/ast</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Política d\'intimidá</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a></string>
|
||||
<string name="title_activity_about">Tocante a</string>
|
||||
<string name="menu_feedback">Unviar comentarios (per corréu)</string>
|
||||
|
|
@ -198,4 +198,5 @@
|
|||
<string name="give_permission">Dar permisu</string>
|
||||
<string name="use_external_storage">Usar almacenamientu esternu</string>
|
||||
<string name="use_external_storage_summary">Guardar nel preséu les imaxes tomaes cola cámara de la app</string>
|
||||
<string name="login_to_your_account">Anicia sesión na to cuenta</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Giv tilladelse</string>
|
||||
<string name="use_external_storage">Brug eksternt lager</string>
|
||||
<string name="use_external_storage_summary">Gem billeder taget med din enheds program på kameraet</string>
|
||||
<string name="send_log_file">Send logfil</string>
|
||||
<string name="send_log_file_description">Send logfil til udviklerne via e-post</string>
|
||||
<string name="login_to_your_account">Log ind på din konto</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Berechtigung geben</string>
|
||||
<string name="use_external_storage">Externen Speicher verwenden</string>
|
||||
<string name="use_external_storage_summary">Mit der In-App-Kamera aufgenommene Bilder auf deinem Gerät speichern</string>
|
||||
<string name="send_log_file">Logdatei senden</string>
|
||||
<string name="send_log_file_description">Logdatei an die Entwickler per E-Mail senden</string>
|
||||
<string name="login_to_your_account">Bei deinem Benutzerkonto anmelden</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Otorgar permiso</string>
|
||||
<string name="use_external_storage">Utilizar almacenamiento externo</string>
|
||||
<string name="use_external_storage_summary">Guardar en el dispositivo imágenes capturadas con la cámara de la aplicación</string>
|
||||
<string name="send_log_file">Enviar archivo de registro</string>
|
||||
<string name="send_log_file_description">Enviar archivo de registro a los desarrolladores por correo electrónico</string>
|
||||
<string name="login_to_your_account">Accede a tu cuenta</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Accorder le droit</string>
|
||||
<string name="use_external_storage">Utiliser le stockage externe</string>
|
||||
<string name="use_external_storage_summary">Enregistrer les images prises avec l’appareil photo de votre appareil</string>
|
||||
<string name="send_log_file">Envoyer le fichier de log</string>
|
||||
<string name="send_log_file_description">Envoyer le fichier de log aux développeurs par courriel</string>
|
||||
<string name="login_to_your_account">Connectez-vous à votre compte</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<string name="menu_about">Névjegy</string>
|
||||
<string name="about_license">A Wikimedia Commons applikáció egy nyílt forráskódú szoftver, amit a Wikimedia-közösség önkéntesei készítettek és tartanak karban. A Wikimédia Alapítvány nem vesz részt az applikáció megalkotásában, fejlesztésében és üzemeltetésében.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Forráskód</a> és <a href=\"https://commons-app.github.io/\">weboldal</a> a GitHubon. Nyiss egy új <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-problémát</a> hibabejelentéssel vagy fejlesztési javaslattal.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Adatvédelmi_irányelv\">Adatvédelmi irányelvek</a></string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Adatvédelmi irányelvek</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Köszönetnyilvánítás</a></string>
|
||||
<string name="title_activity_about">Névjegy</string>
|
||||
<string name="menu_feedback">Visszajelzés küldése (e-mailben)</string>
|
||||
|
|
@ -190,6 +190,7 @@
|
|||
<string name="no_description_found">nincs leírás</string>
|
||||
<string name="nearby_info_menu_commons_article">Commons leírólap</string>
|
||||
<string name="nearby_info_menu_wikidata_article">Wikidata-elem</string>
|
||||
<string name="title_info">Egy egyedi, leíró cím a fájlnak, ami fájlnévként fog szolgálni. Egyszerű nyelvezetet használhatsz szóközökkel. Ne tedd bele a kiterjesztést.</string>
|
||||
<string name="description_info">Kérlek a lehető legteljesebb módon írd le a fájlt: hol készült, mit ábrázol, mi a kontextus? Kérlek add meg az objektumokat vagy személyeket a képen, valamint a nehezen kitalálható információkat (például a kép készítésének dátumát, ha az egy tájkép). Amennyiben a média valami szokatlant ábrázol, kérlek fejtsd ki, hogy mi teszi szokatlanná.</string>
|
||||
<string name="give_permission">Engedély adása</string>
|
||||
<string name="use_external_storage">Külső tárhely használata</string>
|
||||
|
|
|
|||
|
|
@ -72,9 +72,9 @@
|
|||
<string name="title_activity_settings">הגדרות</string>
|
||||
<string name="title_activity_signup">רישום</string>
|
||||
<string name="menu_about">אודות</string>
|
||||
<string name="about_license" fuzzy="true">תכנת קוד פתוח המתפרסמת לפי תנאי <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. השם %1$s והסמל שמשויך אליו הם סימני מסחר של קרן ויקימדיה ומשמשים באישור קרן ויקימדיה. איננו נתמכים על־ידי קרן ויקימדיה או קשורים אליה בשותפות.</string>
|
||||
<string name="about_license">יישום ויקישיתוף (Wikimedia Commons app) הוא יישום קוד פתוח שמפותח ומתוחזק על־ידי מקבלי מלגות ומתנדבים של קהילת ויקימדיה. קרן ויקימדיה אינה מעורבת ביצירה, פיתוח, או תחזוקה של היישום.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">קוד מקור</a> ו<a href=\"https://commons-app.github.io/\">אתר</a> בגיטהאב. נא ליצור <a href=\"https://github.com/commons-app/apps-android-commons/issues\">דיווח בגיטהאב</a> בשביל באגים והצעות.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"/>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">מדיניות פרטיות</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">יוצרים</a></string>
|
||||
<string name="title_activity_about">אודות</string>
|
||||
<string name="menu_feedback">שליחת משוב (בדוא\"ל)</string>
|
||||
|
|
@ -172,6 +172,7 @@
|
|||
<string name="welcome_image_tulip">צבעוני</string>
|
||||
<string name="welcome_image_no_selfies">בלי תמונות סלפי</string>
|
||||
<string name="welcome_image_proprietary">תמונה קניינית</string>
|
||||
<string name="welcome_image_welcome_wikipedia">ברוך בואך ויקיפדיה</string>
|
||||
<string name="welcome_image_sydney_opera_house">בית האופרה של סידני</string>
|
||||
<string name="cancel">ביטול</string>
|
||||
<string name="navigation_drawer_open">פתיחה</string>
|
||||
|
|
@ -191,6 +192,8 @@
|
|||
<string name="error_while_cache">שגיאה במשירת תמונות במטמון</string>
|
||||
<string name="title_info">כותרת מתארת ייחודית לקובץ, שתשמש שם קובץ. אפשר להשתמש בשפה פשוטה עם רווחים. אין לכלול סיומת קובץ</string>
|
||||
<string name="description_info">נא לתאר את המדיה כמה שיותר: איפה היא נוצרה? מה היא מראה? מה ההקשר? נא לתאר את העצמים או את האנשים. נא לחשוף מידע שאי־אפשר לנחש בקלות, למשל, הזמן ביום אם זאת תמונת נוף. אם המדיה מציגה משהו בלתי־רגיל, נא להסביר מה מיוחד בה.</string>
|
||||
<string name="give_permission">לתת הרשאה</string>
|
||||
<string name="use_external_storage">להשתמש באחסון חיצוני</string>
|
||||
<string name="use_external_storage_summary">שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום במכשיר שלך</string>
|
||||
<string name="login_to_your_account">כניסה לחשבון שלך</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
<string name="title_activity_settings">설정</string>
|
||||
<string name="title_activity_signup">가입하기</string>
|
||||
<string name="menu_about">정보</string>
|
||||
<string name="about_license" fuzzy="true">오픈 소스 소프트웨어는 <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">아파치 라이선스 v2</a>에 따라 공개됩니다. %1$s 및 관련 로고는 위키미디어 재단의 상표이며 위키미디어 재단의 허가를 통해 사용될 수 있습니다. 저희는 위키미디어 재단에 의해 보증되거나 제휴되어 있지 않습니다.</string>
|
||||
<string name="about_license">위키미디어 공용 앱은 오픈 소스 애플리케이션이며 위키미디어 공동체 내의 자원봉사자에 의해 유지됩니다. 위키미디어 재단은 애플리케이션의 생성, 개발, 유지보수에 관여하지 않습니다.</string>
|
||||
<string name="about_improve">소스 코드는 <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>에 있으며, 웹사이트는 <a href=\"https://commons-app.github.io/\">GitHub</a>에 있습니다. 버그나 기타 제안은 <a href=\" https://github.com/commons-app/apps-android-commons/issues\">GitHub</a>에 보고해주세요.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">개인정보 정책</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">제작진</a></string>
|
||||
|
|
@ -195,5 +195,7 @@
|
|||
<string name="give_permission">권한 부여</string>
|
||||
<string name="use_external_storage">외부 저장소 사용하기</string>
|
||||
<string name="use_external_storage_summary">장치의 인앱 카메라로 찍은 사진 저장하기</string>
|
||||
<string name="send_log_file">로그 파일 보내기</string>
|
||||
<string name="send_log_file_description">이메일로 개발자에게 로그 파일 보내기</string>
|
||||
<string name="login_to_your_account">자신의 계정으로 로그인</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
<string name="title_activity_settings">Astellungen</string>
|
||||
<string name="title_activity_signup">Mellt Iech un</string>
|
||||
<string name="menu_about">Iwwer</string>
|
||||
<string name="about_license" fuzzy="true">\'Open-Source-Software\' verëffentlecht ënner der <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache Lizenz v2</a>. %1$s a säi Logo si Markenzeeche vun der Wikimedia Foundation a gi mat der Autorisatioun vun der Wikimedia Foundation benotzt. Mir sinn net confirméiert vun oder liéiert mat der Wikimedia Foundation.</string>
|
||||
<string name="about_license">D\'App Wikimedia Commons ass eng \'Open-Source-App\' déi vu Fräiwëllege vun der Wikimedia Foundation entwéckelt gouf an och vun hinnen ënnerhal gëtt. D\'Wikimedia Foundation ass net an d\'Entwécklung oder den Ënnerhalt vun der App implizéiert.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Quell</a> an <a href=\"https://commons-app.github.io/\">Internetsite</a> vu GitHub.\nLeet w.e.g. <a href=\"https://github.com/commons-app/apps-android-commons/issues\"> e GitHub Problem</a> fir Problemer ze mellen a Proposen ze maachen.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Dateschutzerklärung</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Merci</a></string>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Дај дозвола</string>
|
||||
<string name="use_external_storage">Користи надворешен склад</string>
|
||||
<string name="use_external_storage_summary">Зачувување на направените слики во прилогот со камерата на вашиот уред</string>
|
||||
<string name="send_log_file">Испрати дневничка податотека</string>
|
||||
<string name="send_log_file_description">Испрати дневничка податотека на разработувачите по е-пошта</string>
|
||||
<string name="login_to_your_account">Најавете се со вашата сметка</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Gi tillatelse</string>
|
||||
<string name="use_external_storage">Bruk ekstern lagring</string>
|
||||
<string name="use_external_storage_summary">Lagre bilder som er tatt med kameraet i appen på enheten din</string>
|
||||
<string name="send_log_file">Send loggfil</string>
|
||||
<string name="send_log_file_description">Send loggfil til utviklerne via epost</string>
|
||||
<string name="login_to_your_account">Logg inn med kontoen din</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Dé ël përmess</string>
|
||||
<string name="use_external_storage">Dovré n\'anmagasinament estern</string>
|
||||
<string name="use_external_storage_summary">Argistré le plance pijà con la màchina fòto ëd sò angign</string>
|
||||
<string name="send_log_file">Mandé l\'archivi d\'argistr</string>
|
||||
<string name="send_log_file_description">Mandé l\'archivi d\'argistr ai dësvlupator për pòsta eletrònica</string>
|
||||
<string name="login_to_your_account">Ch\'as colega a sò cont</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
<string name="title_activity_settings">Настройки</string>
|
||||
<string name="title_activity_signup">Зарегистрироваться</string>
|
||||
<string name="menu_about">О приложении</string>
|
||||
<string name="about_license" fuzzy="true">Приложение с открытым исходным кодом, выпущено по лицензии <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s и его логотип являются товарными знаками Фонда Викимедиа и используются с разрешения Фонда Викимедиа. Мы не поддерживаемся и не связаны с Фондом Викимедиа.</string>
|
||||
<string name="about_license">Приложение «Викисклад» - это программа с открытым кодом, которую создали волонтёры и участники грантов Викимедиа. Фонд Викимедиа не участвует в создании, разработке или обслуживании этого приложения.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Исходный код</a> и <a href=\"https://commons-app.github.io/\">сайт</a> на GitHub. Создайте новый <a href=\"https://github.com/commons-app/apps-android-commons/issues\">запрос на GitHub</a>, чтоб сообщить об ошибке или внести предложение.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Политика конфиденциальности</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Благодарности</a></string>
|
||||
|
|
@ -90,6 +90,7 @@
|
|||
<string name="menu_retry_upload">Повторить</string>
|
||||
<string name="menu_cancel_upload">Отмена</string>
|
||||
<string name="share_license_summary">Это изображение будет лицензировано под %1$s</string>
|
||||
<string name="media_upload_policy">Отправляя это изображение, я подтверждаю, что это моя собственная работа, которая не содержит защищённых авторским правом материалов или селфи, а также отвечает <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/ru\">правилам Викисклада</a>.</string>
|
||||
<string name="menu_download">Скачать</string>
|
||||
<string name="preference_license">Лицензия</string>
|
||||
<string name="use_previous">Использовать предыдущие заголовок/описание</string>
|
||||
|
|
@ -196,7 +197,10 @@
|
|||
<string name="nearby_info_menu_commons_article">Страница файла на Викискладе</string>
|
||||
<string name="nearby_info_menu_wikidata_article">Элемент Викиданных</string>
|
||||
<string name="error_while_cache">Ошибка при кэшировании картинок</string>
|
||||
<string name="title_info">Уникальное описание, которое будет сохранено как имя файла. Вы можете использовать естественный язык, разделяя слова пробелами. Пожалуйста, не указывайте расширение файла.</string>
|
||||
<string name="description_info">Пожалуйста, подробно опишите загружаемый файл: где он был снят? что на нём изображено? каков его контекст? Пожалуйста опишите изображённых персон или объекты. Добавьте информацию, о которой нельзя легко догадаться, например, время суток, когда снимался файл. Если снято что-то необычное, постарайтесь пояснить, что именно в этом необычного.</string>
|
||||
<string name="give_permission">Дать разрешение</string>
|
||||
<string name="use_external_storage">Использовать внешнее хранилище</string>
|
||||
<string name="use_external_storage_summary">Сохранять изображения, сделанные с помощью встроенной камеры на устройстве</string>
|
||||
<string name="login_to_your_account">Войдите в свою учётную запись</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,4 +198,5 @@
|
|||
<string name="give_permission">Давање дозволе</string>
|
||||
<string name="use_external_storage">Употреба спољашњег складишта</string>
|
||||
<string name="use_external_storage_summary">Спремање слика направљених камером апликације на Вашем уређају</string>
|
||||
<string name="login_to_your_account">Пријавите се на свој налог</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Ge behörighet</string>
|
||||
<string name="use_external_storage">Använd extern lagring</string>
|
||||
<string name="use_external_storage_summary">Spara bilder som tas med kameran i appen på din enhet</string>
|
||||
<string name="send_log_file">Skicka loggfil</string>
|
||||
<string name="send_log_file_description">Skicka loggfilen till utvecklarna via e-post</string>
|
||||
<string name="login_to_your_account">Logga in på ditt konto</string>
|
||||
</resources>
|
||||
|
|
|
|||
121
app/src/main/res/values-ur/strings.xml
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">کامنز</string>
|
||||
<string name="menu_settings">ترتیبات</string>
|
||||
<string name="username">صارف نام</string>
|
||||
<string name="password">پاس ورڈ</string>
|
||||
<string name="login">داخل ہوں</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="upload_completed_notification_title">%1$s اپلوڈ شد!</string>
|
||||
<string name="upload_completed_notification_text">اپنی اپلوڈ دیکھنے کے لیے ٹیپ کریں۔</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>
|
||||
<string name="upload_failed_notification_subtitle">دیکھنے کے لیے ٹیپ کریں</string>
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">%d فائل اپلوڈ ہورہی ہے</item>
|
||||
<item quantity="other">%d فائلیں اپلوڈ ہورہی ہے</item>
|
||||
</plurals>
|
||||
<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>
|
||||
<string name="menu_from_camera">تصویر لیں</string>
|
||||
<string name="menu_nearby">قریبی</string>
|
||||
<string name="provider_contributions">میری اپلوڈ</string>
|
||||
<string name="menu_share">شیئر</string>
|
||||
<string name="menu_open_in_browser">براؤزر میں کھولیں</string>
|
||||
<string name="share_title_hint">عنوان</string>
|
||||
<string name="share_description_hint">وضاحت</string>
|
||||
<string name="login_failed_network">لاگ ان ہونے میں ناکام - نیٹ ورک ناکامی</string>
|
||||
<string name="login_failed_username">لاگ ان ہونے میں ناکام - براہ مہربانی اپنا صارف نام کی جانچ کریں</string>
|
||||
<string name="login_failed_password">لاگ ان ہونے میں ناکام - براہ مہربانی - اپنے پاس ورڈ کی جانچ کریں</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="menu_save_categories">محفوظ کریں</string>
|
||||
<string name="refresh_button">تازہ کریں</string>
|
||||
<string name="gps_disabled">جی پی ایس آپ کے آلے میں غیر فعال ہے۔ آپ اس کو فعال کرنا چاہینگے؟</string>
|
||||
<string name="enable_gps">جی پی ایس فعال کریں</string>
|
||||
<string name="contributions_subtitle_zero">ابھی تک کوئی اپلوڈ نہیں</string>
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%d اپلوڈ</item>
|
||||
<item quantity="other">%d اپلوڈ</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">شروع %d اپلوڈ</item>
|
||||
<item quantity="other">شروع %d اپلوڈ</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">%d اپلوڈ</item>
|
||||
<item quantity="other">%d اپلوڈ</item>
|
||||
</plurals>
|
||||
<string name="categories_not_found">%1$s سے کوئی زمرہ جات میل نہیں کھاتے</string>
|
||||
<string name="categories_skip_explanation">ویکیمیڈیا کامنز پر اپنی تصاویر کو قابل دریافت بنانے کے لیے زمرے شامل کریں۔\n\nزمرے شامل کرنے کے لیے لکھنا شروع کریں۔\n\nاس مرحلے کو نظر انداز کرنے کے لیے اس پیغام یا (یا پیچھے) پر ٹیپ کریں۔</string>
|
||||
<string name="categories_activity_title">زمرہ جات</string>
|
||||
<string name="title_activity_settings">ترتیبات</string>
|
||||
<string name="title_activity_signup">کھاتہ بنائیں</string>
|
||||
<string name="menu_about">بابت</string>
|
||||
<string name="about_license">ویکیمیڈیا کامنز ایپ ایک اوپن سورس ایپ ہے جو موہوب الیہ اور رضاکاروں کی جانب سے برقرار رکھی جاتی اور بنائی گئی ہے۔ ویکیمیڈیا فاؤنڈیش کا اس ایپ کی برقراری اور تخلیق سے کوئی واسطہ نہیں ہے۔</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">ماخذ</a> اور <a href=\"https://commons-app.github.io/\">ویب سائٹ</a> در گٹ ہب۔<a href=\"https://github.com/commons-app/apps-android-commons/issues\">نیا گٹ ہب اجرا بنائیں</a> تاکہ آپ bug شکایتیں اور تجایز دیں سکیں</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">سرگرمی کی تدبیر</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">کریڈٹ</a></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">سب سے پہلے sync کے انتظار میں۔۔۔</string>
|
||||
<string name="no_uploads_yet">آپ نے ابھی تک کوئی تصاویر اپلوڈ نہیں کی ہے۔</string>
|
||||
<string name="menu_retry_upload">دوبارہ کوشش کریں</string>
|
||||
<string name="menu_cancel_upload">منسوخ</string>
|
||||
<string name="share_license_summary">%1$s تلے یہ تصویر لائسنس یافتہ ہو گی</string>
|
||||
<string name="media_upload_policy">اس تصویر کو درج کر کے، میں اقرار کرتا ہوں کہ یہ میرا اپنا کام ہے، اس ميں کاپی رائٹ مواد یا سیلفیاں نہیں ہیں، اور بصورت دیگر میں <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">ویکیمیڈیا کامنز پالیسیوں</a> کا پابند ہوں۔</string>
|
||||
<string name="menu_download">ڈاؤنلوڈ</string>
|
||||
<string name="preference_license">اجازت نامہ</string>
|
||||
<string name="use_previous">گزشتہ عنوان/وضاحت استعمال کریں</string>
|
||||
<string name="allow_gps">خودکارانہ طریقے سے حالیہ جگہ حاصل کریں</string>
|
||||
<string name="preference_theme">نائٹ موڈ</string>
|
||||
<string name="preference_theme_summary">کالا تھیم استعمال کریں</string>
|
||||
<string name="license_name_cc_by_sa_3_0_at">CC BY-SA 3.0 (آسٹریا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_de">CC BY-SA 3.0 (جرمنی)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_ee">CC BY-SA 3.0 (اسٹونیا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_es">CC BY-SA 3.0 (اسپین)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_hr">CC BY-SA 3.0 (کرویئشا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_lu">CC BY-SA 3.0 (لکسمبرگ)</string>
|
||||
<string name="welcome_final_button_text">ہاں!</string>
|
||||
<string name="detail_panel_cats_label">زمرہ جات</string>
|
||||
<string name="detail_panel_cats_loading">لوڈ ہو رہا ہے۔۔۔</string>
|
||||
<string name="detail_panel_cats_none">غیر منتخب</string>
|
||||
<string name="detail_description_empty">کوئی وضاحت نہیں</string>
|
||||
<string name="detail_license_empty">نامعلوم اجازت نامہ</string>
|
||||
<string name="menu_refresh">ریفریش کریں</string>
|
||||
<string name="ok">ٹھیک ہے</string>
|
||||
<string name="yes">جی</string>
|
||||
<string name="no">نہیں</string>
|
||||
<string name="media_detail_license">اجازت نامہ</string>
|
||||
<string name="media_detail_coordinates">متناسقات</string>
|
||||
<string name="commons_logo">کامنز لوگو</string>
|
||||
<string name="welcome_image_no_selfies">کوئی سیلفی نہیں</string>
|
||||
<string name="navigation_item_about">تعارف</string>
|
||||
<string name="navigation_item_settings">ترتیبات</string>
|
||||
<string name="navigation_item_feedback">آپ کی رائے</string>
|
||||
<string name="navigation_item_logout">لاگ آوٹ</string>
|
||||
<string name="navigation_item_info">معلمی</string>
|
||||
</resources>
|
||||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">給予權限</string>
|
||||
<string name="use_external_storage">使用外部存儲裝置</string>
|
||||
<string name="use_external_storage_summary">在您的裝置上使用照相機應用程式來儲存照片</string>
|
||||
<string name="send_log_file">寄送日誌檔案</string>
|
||||
<string name="send_log_file_description">經由電子郵件寄送日誌檔案給開發人員</string>
|
||||
<string name="login_to_your_account">登入您的帳號</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">提供权限</string>
|
||||
<string name="use_external_storage">使用外部存储</string>
|
||||
<string name="use_external_storage_summary">在您的设备上,使用应用中的照相机保存照片</string>
|
||||
<string name="send_log_file">发送日志文件</string>
|
||||
<string name="send_log_file_description">通过电子邮件将日志文件发送给开发人员</string>
|
||||
<string name="login_to_your_account">登录您的账户</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -207,5 +207,7 @@ Tap this message (or hit back) to skip this step.</string>
|
|||
<string name="give_permission">Give permission</string>
|
||||
<string name="use_external_storage">Use external storage</string>
|
||||
<string name="use_external_storage_summary">Save pictures taken with the in-app camera on your device</string>
|
||||
<string name="login_to_your_account">Login to your account</string>
|
||||
<string name="send_log_file">Send log file</string>
|
||||
<string name="send_log_file_description">Send log file to developers via email</string>
|
||||
<string name="login_to_your_account">Login to your account</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -53,4 +53,9 @@
|
|||
android:summary="@string/use_external_storage_summary"
|
||||
/>
|
||||
|
||||
<Preference
|
||||
android:key="sendLogFile"
|
||||
android:title="@string/send_log_file"
|
||||
android:summary="@string/send_log_file_description"/>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<cache-path name="images" path="images/" />
|
||||
<external-path name="logs"/>
|
||||
</paths>
|
||||