Skip to content

Commit 1294d90

Browse files
committed
Android 13 permission related fixes
1 parent f577053 commit 1294d90

12 files changed

+167
-125
lines changed

app/src/main/AndroidManifest.xml

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
1515
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
1616
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
17+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
18+
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
19+
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
20+
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
1721
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS" />
1822
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
1923
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void initiateCameraPick(Activity activity) {
5656
}
5757

5858
PermissionUtils.checkPermissionsAndPerformAction(activity,
59-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
59+
PermissionUtils.PERMISSIONS_STORAGE,
6060
() -> {
6161
if (defaultKvStore.getBoolean("inAppCameraFirstRun")) {
6262
defaultKvStore.putBoolean("inAppCameraFirstRun", false);
@@ -159,7 +159,7 @@ public void initiateCustomGalleryPickWithPermission(final Activity activity) {
159159
setPickerConfiguration(activity,true);
160160

161161
PermissionUtils.checkPermissionsAndPerformAction(activity,
162-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
162+
PermissionUtils.PERMISSIONS_STORAGE,
163163
() -> FilePicker.openCustomSelector(activity, 0),
164164
R.string.storage_permission_title,
165165
R.string.write_storage_permission_rationale);

app/src/main/java/fr/free/nrw/commons/contributions/ContributionsFragment.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ public void onResume() {
439439
}
440440

441441
private void checkPermissionsAndShowNearbyCardView() {
442-
if (PermissionUtils.hasPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
442+
if (PermissionUtils.hasPermission(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION})) {
443443
onLocationPermissionGranted();
444444
} else if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)
445445
&& store.getBoolean("displayLocationPermissionForCardView", true)
@@ -452,7 +452,7 @@ private void checkPermissionsAndShowNearbyCardView() {
452452

453453
private void requestLocationPermission() {
454454
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
455-
Manifest.permission.ACCESS_FINE_LOCATION,
455+
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
456456
this::onLocationPermissionGranted,
457457
this::displayYouWontSeeNearbyMessage,
458458
-1,

app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public void onCreate(Bundle savedInstanceState) {
165165
if (VERSION.SDK_INT >= VERSION_CODES.Q) {
166166
PermissionUtils.checkPermissionsAndPerformAction(
167167
this,
168-
permission.ACCESS_MEDIA_LOCATION,
168+
new String[]{permission.ACCESS_MEDIA_LOCATION},
169169
() -> {},
170170
R.string.media_location_permission_denied,
171171
R.string.add_location_manually

app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ private void registerNetworkReceiver() {
263263
private void performMapReadyActions() {
264264
if (isMapBoxReady) {
265265
if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false) ||
266-
PermissionUtils.hasPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)){
266+
PermissionUtils.hasPermission(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION})){
267267
checkPermissionsAndPerformAction();
268268
}else{
269269
isPermissionDenied = true;
@@ -404,8 +404,8 @@ private void showErrorMessage(final String message) {
404404
public void checkPermissionsAndPerformAction() {
405405
Timber.d("Checking permission and perfoming action");
406406
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
407-
Manifest.permission.ACCESS_FINE_LOCATION,
408-
() -> locationPermissionGranted(),
407+
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
408+
this::locationPermissionGranted,
409409
() -> isPermissionDenied = true,
410410
R.string.location_permission_title,
411411
R.string.location_permission_rationale_nearby);

app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ private void requestForLocationAccess(
5656
Dialog locationOffDialog
5757
) {
5858
PermissionUtils.checkPermissionsAndPerformAction(activity,
59-
permission.ACCESS_FINE_LOCATION,
59+
new String[]{permission.ACCESS_FINE_LOCATION},
6060
() -> {
6161
if(!isLocationAccessToAppsTurnedOn()) {
6262
showLocationOffDialog(locationOffDialog);

app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -362,15 +362,12 @@ public void run() {
362362

363363
@OnClick(R.id.mediaDetailImageViewSpacer)
364364
public void launchZoomActivity(final View view) {
365-
final boolean permission = PermissionUtils.
366-
hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE);
367-
368-
if (permission) {
365+
final boolean hasPermission = PermissionUtils.hasPermission(getActivity(), PermissionUtils.PERMISSIONS_STORAGE);
366+
if (hasPermission) {
369367
launchZoomActivityAfterPermissionCheck(view);
370-
}
371-
else {
368+
} else {
372369
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
373-
Manifest.permission.READ_EXTERNAL_STORAGE,
370+
PermissionUtils.PERMISSIONS_STORAGE,
374371
() -> {
375372
launchZoomActivityAfterPermissionCheck(view);
376373
},
@@ -1076,7 +1073,7 @@ public void onActivityResult(final int requestCode, final int resultCode,
10761073

10771074
} else if (requestCode == REQUEST_CODE && resultCode == RESULT_CANCELED) {
10781075
viewUtil.showShortToast(getContext(),
1079-
Objects.requireNonNull(getContext())
1076+
requireContext()
10801077
.getString(R.string.coordinates_picking_unsuccessful));
10811078

10821079
} else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_CANCELED) {

app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ private void addCheckBoxCallback() {
441441
private void performMapReadyActions() {
442442
if (((MainActivity)getActivity()).activeFragment == ActiveFragment.NEARBY && isMapBoxReady) {
443443
if(!applicationKvStore.getBoolean("doNotAskForLocationPermission", false) ||
444-
PermissionUtils.hasPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)){
444+
PermissionUtils.hasPermission(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION})){
445445
checkPermissionsAndPerformAction();
446446
}else{
447447
isPermissionDenied = true;
@@ -1215,8 +1215,8 @@ public void setTabItemContributions() {
12151215
public void checkPermissionsAndPerformAction() {
12161216
Timber.d("Checking permission and perfoming action");
12171217
PermissionUtils.checkPermissionsAndPerformAction(getActivity(),
1218-
Manifest.permission.ACCESS_FINE_LOCATION,
1219-
() -> locationPermissionGranted(),
1218+
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1219+
this::locationPermissionGranted,
12201220
() -> isPermissionDenied = true,
12211221
R.string.location_permission_title,
12221222
R.string.location_permission_rationale_nearby);

app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java

+27-13
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
2929
import androidx.preference.PreferenceViewHolder;
3030
import androidx.recyclerview.widget.RecyclerView.Adapter;
3131
import com.karumi.dexter.Dexter;
32+
import com.karumi.dexter.MultiplePermissionsReport;
33+
import com.karumi.dexter.PermissionToken;
3234
import com.karumi.dexter.listener.PermissionGrantedResponse;
35+
import com.karumi.dexter.listener.PermissionRequest;
36+
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
3337
import com.karumi.dexter.listener.single.BasePermissionListener;
3438
import fr.free.nrw.commons.R;
3539
import fr.free.nrw.commons.Utils;
@@ -371,7 +375,7 @@ public void onItemClick(AdapterView<?> adapterView, View view, int i,
371375
Locale defLocale = new Locale(languageCode);
372376
if(keyListPreference.equals("appUiDefaultLanguagePref")) {
373377
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
374-
setLocale(Objects.requireNonNull(getActivity()), languageCode);
378+
setLocale(requireActivity(), languageCode);
375379
getActivity().recreate();
376380
final Intent intent = new Intent(getActivity(), MainActivity.class);
377381
startActivity(intent);
@@ -410,8 +414,8 @@ private void setUpRecentLanguagesSection(List<Language> recentLanguages,
410414
separator.setVisibility(View.VISIBLE);
411415
final RecentLanguagesAdapter recentLanguagesAdapter
412416
= new RecentLanguagesAdapter(
413-
getActivity(),
414-
recentLanguagesDao.getRecentLanguages(),
417+
getActivity(),
418+
recentLanguagesDao.getRecentLanguages(),
415419
selectedLanguages);
416420
languageHistoryListView.setAdapter(recentLanguagesAdapter);
417421
}
@@ -436,7 +440,7 @@ private void onRecentLanguageClicked(String keyListPreference, Dialog dialog, Ad
436440
final Locale defLocale = new Locale(recentLanguageCode);
437441
if (keyListPreference.equals("appUiDefaultLanguagePref")) {
438442
appUiLanguageListPreference.setSummary(defLocale.getDisplayLanguage(defLocale));
439-
setLocale(Objects.requireNonNull(getActivity()), recentLanguageCode);
443+
setLocale(requireActivity(), recentLanguageCode);
440444
getActivity().recreate();
441445
final Intent intent = new Intent(getActivity(), MainActivity.class);
442446
startActivity(intent);
@@ -506,24 +510,34 @@ private String getCurrentLanguageCode(final String preferenceKey) {
506510
* First checks for external storage permissions and then sends logs via email
507511
*/
508512
private void checkPermissionsAndSendLogs() {
509-
if (PermissionUtils.hasPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
513+
if (PermissionUtils.hasPermission(getActivity(), PermissionUtils.PERMISSIONS_STORAGE)) {
510514
commonsLogSender.send(getActivity(), null);
511515
} else {
512516
requestExternalStoragePermissions();
513517
}
514518
}
515519

516520
/**
517-
* Requests external storage permissions and shows a toast stating that log collection has started
521+
* Requests external storage permissions and shows a toast stating that log collection has
522+
* started
518523
*/
519524
private void requestExternalStoragePermissions() {
520525
Dexter.withActivity(getActivity())
521-
.withPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
522-
.withListener(new BasePermissionListener() {
523-
@Override
524-
public void onPermissionGranted(PermissionGrantedResponse response) {
525-
ViewUtil.showLongToast(getActivity(), getResources().getString(R.string.log_collection_started));
526-
}
527-
}).check();
526+
.withPermissions(PermissionUtils.PERMISSIONS_STORAGE)
527+
.withListener(new MultiplePermissionsListener() {
528+
@Override
529+
public void onPermissionsChecked(MultiplePermissionsReport report) {
530+
ViewUtil.showLongToast(getActivity(),
531+
getResources().getString(R.string.log_collection_started));
532+
}
533+
534+
@Override
535+
public void onPermissionRationaleShouldBeShown(
536+
List<PermissionRequest> permissions, PermissionToken token) {
537+
538+
}
539+
})
540+
.onSameThread()
541+
.check();
528542
}
529543
}

app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java

+30-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package fr.free.nrw.commons.upload;
22

33
import static fr.free.nrw.commons.contributions.ContributionController.ACTION_INTERNAL_UPLOADS;
4+
import static fr.free.nrw.commons.utils.PermissionUtils.PERMISSIONS_STORAGE;
45
import static fr.free.nrw.commons.wikidata.WikidataConstants.PLACE_OBJECT;
56

67
import android.Manifest;
@@ -56,6 +57,7 @@
5657
import io.reactivex.android.schedulers.AndroidSchedulers;
5758
import io.reactivex.disposables.CompositeDisposable;
5859
import io.reactivex.schedulers.Schedulers;
60+
import java.security.Permission;
5961
import java.util.ArrayList;
6062
import java.util.Collections;
6163
import java.util.HashMap;
@@ -146,20 +148,19 @@ protected void onCreate(Bundle savedInstanceState) {
146148
compositeDisposable = new CompositeDisposable();
147149
init();
148150
nearbyPopupAnswers = new HashMap<>();
149-
150151
PermissionUtils.checkPermissionsAndPerformAction(this,
151-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
152-
this::receiveSharedItems,
153-
R.string.storage_permission_title,
154-
R.string.write_storage_permission_rationale_for_image_share);
152+
PERMISSIONS_STORAGE,
153+
this::receiveSharedItems,
154+
R.string.storage_permission_title,
155+
R.string.write_storage_permission_rationale_for_image_share);
155156
//getting the current dpi of the device and if it is less than 320dp i.e. overlapping
156157
//threshold, thumbnails automatically minimizes
157158
DisplayMetrics metrics = getResources().getDisplayMetrics();
158159
float dpi = (metrics.widthPixels)/(metrics.density);
159160
if (dpi<=321) {
160161
onRlContainerTitleClicked();
161162
}
162-
if (PermissionUtils.hasPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
163+
if (PermissionUtils.hasPermission(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION})) {
163164
locationManager.registerLocationManager();
164165
}
165166
locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER);
@@ -181,7 +182,7 @@ private void initProgressDialog() {
181182

182183
private void initThumbnailsRecyclerView() {
183184
rvThumbnails.setLayoutManager(new LinearLayoutManager(this,
184-
LinearLayoutManager.HORIZONTAL, false));
185+
LinearLayoutManager.HORIZONTAL, false));
185186
thumbnailsAdapter = new ThumbnailsAdapter(() -> currentSelectedPosition);
186187
rvThumbnails.setAdapter(thumbnailsAdapter);
187188

@@ -193,7 +194,7 @@ private void initViewPager() {
193194
vpUpload.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
194195
@Override
195196
public void onPageScrolled(int position, float positionOffset,
196-
int positionOffsetPixels) {
197+
int positionOffsetPixels) {
197198

198199
}
199200

@@ -238,29 +239,31 @@ protected void onResume() {
238239
*/
239240
protected void checkBlockStatus() {
240241
compositeDisposable.add(userClient.isUserBlockedFromCommons()
241-
.subscribeOn(Schedulers.io())
242-
.observeOn(AndroidSchedulers.mainThread())
243-
.filter(result -> result)
244-
.subscribe(result -> DialogUtil.showAlertDialog(
245-
this,
246-
getString(R.string.block_notification_title),
247-
getString(R.string.block_notification),
248-
getString(R.string.ok),
249-
this::finish,
250-
true)));
242+
.subscribeOn(Schedulers.io())
243+
.observeOn(AndroidSchedulers.mainThread())
244+
.filter(result -> result)
245+
.subscribe(result -> DialogUtil.showAlertDialog(
246+
this,
247+
getString(R.string.block_notification_title),
248+
getString(R.string.block_notification),
249+
getString(R.string.ok),
250+
this::finish,
251+
true)));
251252
}
252253

253254
private void checkStoragePermissions() {
254-
PermissionUtils.checkPermissionsAndPerformAction(this,
255-
Manifest.permission.WRITE_EXTERNAL_STORAGE,
255+
final boolean hasAllPermissions = PermissionUtils.hasPermission(this, PERMISSIONS_STORAGE);
256+
if (!hasAllPermissions) {
257+
PermissionUtils.checkPermissionsAndPerformAction(this,
258+
PERMISSIONS_STORAGE,
256259
() -> {
257260
//TODO handle this
258261
},
259262
R.string.storage_permission_title,
260263
R.string.write_storage_permission_rationale_for_image_share);
264+
}
261265
}
262266

263-
264267
@Override
265268
protected void onStop() {
266269
super.onStop();
@@ -328,7 +331,7 @@ public void onUploadMediaDeleted(int index) {
328331
@Override
329332
public void updateTopCardTitle() {
330333
tvTopCardTitle.setText(getResources()
331-
.getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size()));
334+
.getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size()));
332335
}
333336

334337
@Override
@@ -370,13 +373,13 @@ private void receiveSharedItems() {
370373
} else {
371374
//Show thumbnails
372375
if (uploadableFiles.size()
373-
> 1) {//If there is only file, no need to show the image thumbnails
376+
> 1) {//If there is only file, no need to show the image thumbnails
374377
thumbnailsAdapter.setUploadableFiles(uploadableFiles);
375378
} else {
376379
llContainerTopCard.setVisibility(View.GONE);
377380
}
378381
tvTopCardTitle.setText(getResources()
379-
.getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size()));
382+
.getQuantityString(R.plurals.upload_count_title, uploadableFiles.size(), uploadableFiles.size()));
380383

381384
fragments = new ArrayList<>();
382385
/* Suggest users to turn battery optimisation off when uploading more than a few files.
@@ -419,7 +422,7 @@ private void receiveSharedItems() {
419422
UploadMediaDetailFragment uploadMediaDetailFragment = new UploadMediaDetailFragment();
420423

421424
LocationPermissionsHelper locationPermissionsHelper = new LocationPermissionsHelper(
422-
this, locationManager, null);
425+
this, locationManager, null);
423426
if (locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) {
424427
currLocation = locationManager.getLastLocation();
425428
}
@@ -525,8 +528,8 @@ private float getLocationDifference(LatLng currLocation, LatLng prevLocation) {
525528
}
526529
float[] distance = new float[2];
527530
Location.distanceBetween(
528-
currLocation.getLatitude(), currLocation.getLongitude(),
529-
prevLocation.getLatitude(), prevLocation.getLongitude(), distance);
531+
currLocation.getLatitude(), currLocation.getLongitude(),
532+
prevLocation.getLatitude(), prevLocation.getLongitude(), distance);
530533
return distance[0];
531534
}
532535

@@ -670,5 +673,4 @@ public void onBackPressed() {
670673
this::finish
671674
);
672675
}
673-
674676
}

app/src/main/java/fr/free/nrw/commons/utils/DownloadUtils.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ object DownloadUtils {
3838
}
3939
PermissionUtils.checkPermissionsAndPerformAction(
4040
activity,
41-
permission.WRITE_EXTERNAL_STORAGE,
41+
PermissionUtils.PERMISSIONS_STORAGE,
4242
{ enqueueRequest(activity, req) },
4343
{
4444
Toast.makeText(

0 commit comments

Comments
 (0)