diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
index 347a51735..62f5ec1a9 100644
--- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
+++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java
@@ -147,10 +147,10 @@ public class CommonsApplication extends Application {
* @return Account|null
*/
public Account getCurrentAccount() {
- if(currentAccount == null) {
+ if (currentAccount == null) {
AccountManager accountManager = AccountManager.get(this);
Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType());
- if(allAccounts.length != 0) {
+ if (allAccounts.length != 0) {
currentAccount = allAccounts[0];
}
}
@@ -161,7 +161,7 @@ public class CommonsApplication extends Application {
AccountManager accountManager = AccountManager.get(this);
Account curAccount = getCurrentAccount();
- if(curAccount == null) {
+ if (curAccount == null) {
return false; // This should never happen
}
@@ -224,11 +224,13 @@ public class CommonsApplication extends Application {
if (getIndex() == allAccounts.length) {
Timber.d("All accounts have been removed");
//TODO: fix preference manager
- PreferenceManager.getDefaultSharedPreferences(getInstance()).edit().clear().commit();
+ PreferenceManager.getDefaultSharedPreferences(getInstance())
+ .edit().clear().commit();
SharedPreferences preferences = context
.getSharedPreferences("fr.free.nrw.commons", MODE_PRIVATE);
preferences.edit().clear().commit();
- context.getSharedPreferences("prefs", Context.MODE_PRIVATE).edit().clear().commit();
+ context.getSharedPreferences("prefs", Context.MODE_PRIVATE)
+ .edit().clear().commit();
preferences.edit().putBoolean("firstrun", false).apply();
updateAllDatabases();
currentAccount = null;
diff --git a/app/src/main/java/fr/free/nrw/commons/License.java b/app/src/main/java/fr/free/nrw/commons/License.java
index d1aea6269..797e0f50c 100644
--- a/app/src/main/java/fr/free/nrw/commons/License.java
+++ b/app/src/main/java/fr/free/nrw/commons/License.java
@@ -3,10 +3,10 @@ package fr.free.nrw.commons;
import android.support.annotation.Nullable;
public class License {
- String key;
- String template;
- String url;
- String name;
+ private String key;
+ private String template;
+ private String url;
+ private String name;
public License(String key, String template, String url, String name) {
if (key == null) {
diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java
index ebebd4891..0ccdaf724 100644
--- a/app/src/main/java/fr/free/nrw/commons/Utils.java
+++ b/app/src/main/java/fr/free/nrw/commons/Utils.java
@@ -242,9 +242,9 @@ public class Utils {
public static boolean xmlFastForward(XmlPullParser parser, String namespace, String element) {
try {
while (parser.next() != XmlPullParser.END_DOCUMENT) {
- if (parser.getEventType() == XmlPullParser.START_TAG &&
- parser.getNamespace().equals(namespace) &&
- parser.getName().equals(element)) {
+ if (parser.getEventType() == XmlPullParser.START_TAG
+ && parser.getNamespace().equals(namespace)
+ && parser.getName().equals(element)) {
// We found it!
return true;
}
@@ -267,7 +267,8 @@ public class Utils {
extension = "jpg";
}
title = jpegPattern.matcher(title).replaceFirst(".jpg");
- if (extension != null && !title.toLowerCase(Locale.getDefault()).endsWith("." + extension.toLowerCase(Locale.ENGLISH))) {
+ if (extension != null && !title.toLowerCase(Locale.getDefault())
+ .endsWith("." + extension.toLowerCase(Locale.ENGLISH))) {
title += "." + extension;
}
return title;
diff --git a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java
index 4bd608917..5b483c328 100644
--- a/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/auth/AuthenticatedActivity.java
@@ -14,7 +14,7 @@ import timber.log.Timber;
public abstract class AuthenticatedActivity extends NavigationBaseActivity {
- String accountType;
+ private String accountType;
CommonsApplication app;
private String authCookie;
diff --git a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java
index 72b16f223..4da090531 100644
--- a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.java
@@ -25,7 +25,8 @@ public class SignupActivity extends BaseActivity {
webView.setWebViewClient(new MyWebViewClient());
WebSettings webSettings = webView.getSettings();
- //Needed to refresh Captcha. Might introduce XSS vulnerabilities, but we can trust Wikimedia's site... right?
+ /*Needed to refresh Captcha. Might introduce XSS vulnerabilities, but we can
+ trust Wikimedia's site... right?*/
webSettings.setJavaScriptEnabled(true);
webView.loadUrl(BuildConfig.SIGNUP_LANDING_URL);
diff --git a/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java b/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java
index 85f545567..ff6ceece4 100644
--- a/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java
+++ b/app/src/main/java/fr/free/nrw/commons/caching/CacheController.java
@@ -32,7 +32,7 @@ public class CacheController {
public void cacheCategory() {
List pointCatList = new ArrayList<>();
if (MwVolleyApi.GpsCatExists.getGpsCatExists()) {
- pointCatList.addAll(MwVolleyApi.getGpsCat());
+ pointCatList.addAll(MwVolleyApi.getGpsCat());
Timber.d("Categories being cached: %s", pointCatList);
} else {
Timber.d("No categories found, so no categories cached");
diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
index 20802f6b7..1a70bc57c 100644
--- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java
@@ -197,7 +197,7 @@ public class CategorizationFragment extends Fragment {
.concatWith(
searchAll(filter)
.mergeWith(searchCategories(filter))
- .concatWith( TextUtils.isEmpty(filter)
+ .concatWith(TextUtils.isEmpty(filter)
? defaultCategories() : Observable.empty())
)
.filter(categoryItem -> !containsYear(categoryItem.getName()))
diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java
index 59db22230..9fd125b7d 100644
--- a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java
+++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java
@@ -142,11 +142,13 @@ public class CategoryContentProvider extends ContentProvider {
public int update(@NonNull Uri uri, ContentValues contentValues, String selection,
String[] selectionArgs) {
/*
- SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false")
- Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues
+ SQL Injection warnings: First, note that we're not exposing this to the
+ outside world (exported="false"). Even then, we should make sure to sanitize
+ all user input appropriately. Input that passes through ContentValues
should be fine. So only issues are those that pass in via concating.
- In here, the only concat created argument is for id. It is cast to an int, and will error out otherwise.
+ In here, the only concat created argument is for id. It is cast to an int,
+ and will error out otherwise.
*/
int uriType = uriMatcher.match(uri);
SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java
index ec1f02028..aae9fa3bc 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java
@@ -154,10 +154,12 @@ public class ContributionsContentProvider extends ContentProvider {
public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) {
/*
SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false")
- Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues
- should be fine. So only issues are those that pass in via concating.
+ Even then, we should make sure to sanitize all user input appropriately.
+ Input that passes through ContentValuesshould be fine. So only issues are those that pass
+ in via concating.
- In here, the only concat created argument is for id. It is cast to an int, and will error out otherwise.
+ In here, the only concat created argument is for id. It is cast to an int, and will
+ error out otherwise.
*/
int uriType = uriMatcher.match(uri);
CommonsApplication app = (CommonsApplication) getContext().getApplicationContext();
diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java
index f2accfd51..36012e55e 100644
--- a/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java
+++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModifierSequence.java
@@ -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)));
}
}
@@ -41,7 +41,7 @@ public class ModifierSequence {
}
public String executeModifications(String pageName, String pageContents) {
- for(PageModifier modifier: modifiers) {
+ for (PageModifier modifier: modifiers) {
pageContents = modifier.doModification(pageName, pageContents);
}
return pageContents;
@@ -60,7 +60,7 @@ public class ModifierSequence {
JSONObject data = new JSONObject();
try {
JSONArray modifiersJSON = new JSONArray();
- for(PageModifier modifier: modifiers) {
+ for (PageModifier modifier: modifiers) {
modifiersJSON.put(modifier.toJSON());
}
data.put("modifiers", modifiersJSON);
@@ -81,7 +81,8 @@ public class ModifierSequence {
// Hardcoding column positions!
ModifierSequence ms = null;
try {
- ms = new ModifierSequence(Uri.parse(cursor.getString(1)), new JSONObject(cursor.getString(2)));
+ ms = new ModifierSequence(Uri.parse(cursor.getString(1)),
+ new JSONObject(cursor.getString(2)));
} catch (JSONException e) {
throw new RuntimeException(e);
}
diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
index 47a91acfb..4cbfe7c3a 100644
--- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
+++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java
@@ -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")) {
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java
index d58eb3566..d0322a187 100644
--- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java
@@ -3,12 +3,14 @@ package fr.free.nrw.commons.nearby;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.LocationManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
@@ -42,28 +44,46 @@ public class NearbyActivity extends NavigationBaseActivity {
@BindView(R.id.progressBar)
ProgressBar progressBar;
- private boolean isMapViewActive = false;
private static final int LOCATION_REQUEST = 1;
+ private static final String MAP_LAST_USED_PREFERENCE = "mapLastUsed";
private LocationServiceManager locationManager;
private LatLng curLatLang;
private Bundle bundle;
private NearbyAsyncTask nearbyAsyncTask;
+ private SharedPreferences sharedPreferences;
+ private NearbyActivityMode viewMode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
setContentView(R.layout.activity_nearby);
ButterKnife.bind(this);
checkLocationPermission();
bundle = new Bundle();
initDrawer();
+ initViewState();
+ }
+
+ private void initViewState() {
+ if (sharedPreferences.getBoolean(MAP_LAST_USED_PREFERENCE, false)) {
+ viewMode = NearbyActivityMode.MAP;
+ } else {
+ viewMode = NearbyActivityMode.LIST;
+ }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_nearby, menu);
+
+ if (viewMode.isMap()) {
+ MenuItem item = menu.findItem(R.id.action_toggle_view);
+ item.setIcon(viewMode.getIcon());
+ }
+
return super.onCreateOptionsMenu(menu);
}
@@ -74,13 +94,10 @@ public class NearbyActivity extends NavigationBaseActivity {
case R.id.action_refresh:
refreshView();
return true;
- case R.id.action_map:
- showMapView();
- if (isMapViewActive) {
- item.setIcon(R.drawable.ic_list_white_24dp);
- } else {
- item.setIcon(R.drawable.ic_map_white_24dp);
- }
+ case R.id.action_toggle_view:
+ viewMode = viewMode.toggle();
+ item.setIcon(viewMode.getIcon());
+ toggleView();
return true;
default:
return super.onOptionsItemSelected(item);
@@ -158,15 +175,30 @@ public class NearbyActivity extends NavigationBaseActivity {
if (progressBar != null) {
progressBar.setVisibility(View.GONE);
}
- FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
- Fragment noPermissionsFragment = new NoPermissionsFragment();
- fragmentTransaction.replace(R.id.container, noPermissionsFragment);
- fragmentTransaction.commit();
+
+ showLocationPermissionDeniedErrorDialog();
}
}
}
}
+ private void showLocationPermissionDeniedErrorDialog() {
+ new AlertDialog.Builder(this)
+ .setMessage(R.string.nearby_needs_permissions)
+ .setCancelable(false)
+ .setPositiveButton(R.string.give_permission, (dialog, which) -> {
+ //will ask for the location permission again
+ checkLocationPermission();
+ })
+ .setNegativeButton(R.string.cancel, (dialog, which) -> {
+ //dismiss dialog and finish activity
+ dialog.cancel();
+ finish();
+ })
+ .create()
+ .show();
+ }
+
private void checkGps() {
LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
@@ -198,20 +230,16 @@ public class NearbyActivity extends NavigationBaseActivity {
}
}
- private void showMapView() {
+ private void toggleView() {
if (nearbyAsyncTask != null) {
- if (!isMapViewActive) {
- isMapViewActive = true;
- if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) {
+ if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) {
+ if (viewMode.isMap()) {
setMapFragment();
- }
-
- } else {
- isMapViewActive = false;
- if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) {
+ } else {
setListFragment();
}
}
+ sharedPreferences.edit().putBoolean(MAP_LAST_USED_PREFERENCE, viewMode.isMap()).apply();
}
}
@@ -287,7 +315,7 @@ public class NearbyActivity extends NavigationBaseActivity {
bundle.putString("CurLatLng", gsonCurLatLng);
// Begin the transaction
- if (isMapViewActive) {
+ if (viewMode.isMap()) {
setMapFragment();
} else {
setListFragment();
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivityMode.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivityMode.java
new file mode 100644
index 000000000..e46f53f66
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivityMode.java
@@ -0,0 +1,30 @@
+package fr.free.nrw.commons.nearby;
+
+import android.support.annotation.DrawableRes;
+
+import fr.free.nrw.commons.R;
+
+enum NearbyActivityMode {
+ MAP(R.drawable.ic_list_white_24dp),
+ LIST(R.drawable.ic_map_white_24dp);
+
+ @DrawableRes
+ private final int icon;
+
+ NearbyActivityMode(int icon) {
+ this.icon = icon;
+ }
+
+ @DrawableRes
+ public int getIcon() {
+ return icon;
+ }
+
+ public NearbyActivityMode toggle() {
+ return isMap() ? LIST : MAP;
+ }
+
+ public boolean isMap() {
+ return MAP.equals(this);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java
index 680264ab3..e57ce4e44 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java
@@ -63,7 +63,7 @@ public class MultipleShareActivity
@Override
public int getTotalMediaCount() {
- if(photosList == null) {
+ if (photosList == null) {
return 0;
}
return photosList.size();
@@ -71,7 +71,7 @@ public class MultipleShareActivity
@Override
public void notifyDatasetChanged() {
- if(uploadsList != null) {
+ if (uploadsList != null) {
uploadsList.notifyDatasetChanged();
}
}
@@ -145,7 +145,7 @@ public class MultipleShareActivity
uploadsList.setImageOnlyMode(true);
categorizationFragment = (CategorizationFragment) getSupportFragmentManager().findFragmentByTag("categorization");
- if(categorizationFragment == null) {
+ if (categorizationFragment == null) {
categorizationFragment = new CategorizationFragment();
}
// FIXME: Stops the keyboard from being shown 'stale' while moving out of this fragment into the next
@@ -162,7 +162,7 @@ public class MultipleShareActivity
@Override
public void onCategoriesSave(List categories) {
- if(categories.size() > 0) {
+ if (categories.size() > 0) {
ContentProviderClient client = getContentResolver().acquireContentProviderClient(ModificationsContentProvider.AUTHORITY);
for(Contribution contribution: photosList) {
ModifierSequence categoriesSequence = new ModifierSequence(contribution.getContentUri());
@@ -191,7 +191,7 @@ public class MultipleShareActivity
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case android.R.id.home:
- if(mediaDetails.isVisible()) {
+ if (mediaDetails.isVisible()) {
getSupportFragmentManager().popBackStack();
}
return true;
@@ -209,7 +209,7 @@ public class MultipleShareActivity
ButterKnife.bind(this);
initDrawer();
- if(savedInstanceState != null) {
+ if (savedInstanceState != null) {
photosList = savedInstanceState.getParcelableArrayList("uploadsList");
}
@@ -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()
@@ -248,8 +248,8 @@ public class MultipleShareActivity
app.getMWApi().setAuthCookie(authCookie);
Intent intent = getIntent();
- if(intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {
- if(photosList == null) {
+ if (intent.getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {
+ if (photosList == null) {
photosList = new ArrayList<>();
ArrayList urisList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
for(int i=0; i < urisList.size(); i++) {
@@ -265,7 +265,7 @@ public class MultipleShareActivity
}
uploadsList = (MultipleUploadListFragment) getSupportFragmentManager().findFragmentByTag("uploadsList");
- if(uploadsList == null) {
+ if (uploadsList == null) {
uploadsList = new MultipleUploadListFragment();
getSupportFragmentManager()
.beginTransaction()
@@ -287,7 +287,7 @@ public class MultipleShareActivity
@Override
public void onBackPressed() {
super.onBackPressed();
- if(categorizationFragment != null && categorizationFragment.isVisible()) {
+ if (categorizationFragment != null && categorizationFragment.isVisible()) {
EventLog.schema(CommonsApplication.EVENT_CATEGORIZATION_ATTEMPT)
.param("username", app.getCurrentAccount().name)
.param("categories-count", categorizationFragment.getCurrentSelectedCount())
@@ -307,7 +307,7 @@ public class MultipleShareActivity
@Override
public void onBackStackChanged() {
- if(mediaDetails != null && mediaDetails.isVisible()) {
+ if (mediaDetails != null && mediaDetails.isVisible()) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java
index b3ac11f30..579352991 100644
--- a/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java
+++ b/app/src/main/java/fr/free/nrw/commons/upload/SingleUploadFragment.java
@@ -86,7 +86,8 @@ public class SingleUploadFragment extends Fragment {
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_single_upload, container, false);
ButterKnife.bind(this, rootView);
diff --git a/app/src/main/res/menu/menu_nearby.xml b/app/src/main/res/menu/menu_nearby.xml
index f7f5d8acc..0143b9ef1 100644
--- a/app/src/main/res/menu/menu_nearby.xml
+++ b/app/src/main/res/menu/menu_nearby.xml
@@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
आपके डिवाइस में जीपीएस अक्षम है। क्या आप इसे सक्षम करना चाहेंगे?जीपीएस सक्षम करेंअभी तक कोई अपलोड नहीं
- {{PLURAL | शून्य = @ स्ट्रिंग / योगदान_उपशीर्षक_शुन्य | एक =% d अपलोड |% d अपलोड्स}}
+
+ %d अपलोड
+ %d अपलोड्स
+ %d अपलोड शुरू%d अपलोड शुरू
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ac71f786a..ba5cd955f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -77,10 +77,10 @@ Tap this message (or hit back) to skip this step.SettingsSign UpAbout
- Open Source software released under the <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s and its logo are trademarks of the Wikimedia Foundation and are used with the permission of the Wikimedia Foundation. We are not endorsed by or affiliated with the Wikimedia Foundation.
+ The Wikimedia Commons app is an open-source app created and maintained by grantees and volunteers of the Wikimedia community. The Wikimedia Foundation is not involved in the creation, development, or maintenance of the app. Wikimedia Commons<a href=\"https://github.com/commons-app/apps-android-commons\">Source</a> and <a href=\"https://commons-app.github.io/\">website</a> on GitHub. Create a new <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> for bug reports and suggestions.
- <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Privacy policy</a>
+ <a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privacy policy</a><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Credits</a>AboutSend Feedback (via Email)
@@ -204,6 +204,7 @@ Tap this message (or hit back) to skip this step.
Error while caching picturesA unique descriptive title for the file, which will serve as a filename. You may use plain language with spaces. Do not include the file extensionPlease describe the media as much as possible: Where was it taken? What does it show? What is the context? Please describe the objects or persons. Reveal information that can not be easily guessed, for instance the time of day if it is a landscape. If the media shows something unusual, please explain what makes it unusual.
+ Give permissionUse external storageSave pictures taken with the in-app camera on your deviceLogin to your account
diff --git a/design/Commons-logo.svg b/design/Commons-logo.svg
new file mode 100644
index 000000000..6496dec84
--- /dev/null
+++ b/design/Commons-logo.svg
@@ -0,0 +1,22 @@
+
+
\ No newline at end of file
diff --git a/design/adaptive-icon-bg.png b/design/adaptive-icon-bg.png
new file mode 100644
index 000000000..41a49cb9f
Binary files /dev/null and b/design/adaptive-icon-bg.png differ
diff --git a/design/adaptive-icon-fg.png b/design/adaptive-icon-fg.png
new file mode 100644
index 000000000..9dea97331
Binary files /dev/null and b/design/adaptive-icon-fg.png differ