diff --git a/app/build.gradle b/app/build.gradle
index 689a3ae19..a8d3d9ca2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,13 +139,13 @@ 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"
}
android {
- compileSdkVersion 28
+ compileSdkVersion 30
defaultConfig {
//applicationId 'fr.free.nrw.commons'
@@ -155,7 +155,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 cc6576aad..7c8d583b9 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,6 +19,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 c973be361..e68feb883 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("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 a8187becc..8ef0b67cf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -646,5 +646,7 @@ 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