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