diff --git a/app/build.gradle b/app/build.gradle
index ea2887e83..34f58cbae 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,7 +139,7 @@ dependencies {
implementation "androidx.multidex:multidex:$MULTIDEX_VERSION"
- def work_version = "2.4.0"
+ def work_version = "2.6.0"
// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"
testImplementation "androidx.work:work-testing:$work_version"
@@ -150,7 +150,7 @@ dependencies {
}
android {
- compileSdkVersion 29
+ compileSdkVersion 30
defaultConfig {
//applicationId 'fr.free.nrw.commons'
@@ -160,7 +160,7 @@ android {
setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName())
minSdkVersion 19
- targetSdkVersion 29
+ targetSdkVersion 30
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments clearPackageData: 'true'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea6de5738..4048abca0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,6 +17,8 @@
+
+
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java
index 10075ac90..a921d420f 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java
@@ -1,9 +1,13 @@
package fr.free.nrw.commons.contributions;
+import android.Manifest.permission;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.os.Build.VERSION;
+import android.os.Build.VERSION_CODES;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
@@ -42,6 +46,7 @@ import fr.free.nrw.commons.quiz.QuizChecker;
import fr.free.nrw.commons.settings.SettingsFragment;
import fr.free.nrw.commons.theme.BaseActivity;
import fr.free.nrw.commons.upload.worker.UploadWorker;
+import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtilWrapper;
import javax.inject.Inject;
import javax.inject.Named;
@@ -138,15 +143,31 @@ public class MainActivity extends BaseActivity
private void setUpPager() {
tabLayout.setOnNavigationItemSelectedListener(item -> {
+ if (VERSION.SDK_INT >= VERSION_CODES.M) {
+ if (item.getTitle().equals(getString(R.string.nearby_fragment))
+ && checkSelfPermission(permission.READ_PHONE_STATE)
+ != PackageManager.PERMISSION_GRANTED) {
+ requestPhoneStatePermission(() -> {
+ tabLayout.setSelectedItemId(NavTab.NEARBY.code());
+ });
+ return false;
+ }
+ }
if (!item.getTitle().equals(getString(R.string.more))) {
// do not change title for more fragment
setTitle(item.getTitle());
}
Fragment fragment = NavTab.of(item.getOrder()).newInstance();
- return loadFragment(fragment,true);
+ return loadFragment(fragment, true);
});
}
+ private void requestPhoneStatePermission(final Runnable runnable) {
+ PermissionUtils.checkPermissionsAndPerformAction(this,
+ android.Manifest.permission.READ_PHONE_STATE, (Runnable) runnable::run, (Runnable) () -> {
+ }, R.string.need_permission, R.string.read_phone_state_permission_message);
+ }
+
private void setUpLoggedOutPager() {
loadFragment(ExploreFragment.newInstance(),false);
tabLayout.setOnNavigationItemSelectedListener(item -> {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 841950697..c6a7cab59 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -657,6 +657,9 @@ Upload your first media by tapping on the add button.
LEARN MORE
Wiki Loves Monuments
Wiki Loves Monuments is an international photo contest for monuments organised by Wikimedia
+ Need Permission
+ Nearby maps need to read PHONE STATE to function properly
+
Contributions of User: %s
Achievements of User: %s
View user page