Skip to content

Commit

Permalink
avoid infinite loop in premission checking on API 33
Browse files Browse the repository at this point in the history
  • Loading branch information
or-else committed Jun 26, 2023
1 parent 140fdf0 commit 8cddc76
Showing 1 changed file with 26 additions and 22 deletions.
48 changes: 26 additions & 22 deletions app/src/main/java/co/tinode/tindroid/MessagesFragment.java
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ public class MessagesFragment extends Fragment implements MenuProvider {
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
// Check if permission is granted.
if (isGranted) {
openFileSelector(requireActivity());
openFileSelector(requireActivity(), false);
}
});

Expand All @@ -179,7 +179,7 @@ public class MessagesFragment extends Fragment implements MenuProvider {
}

// Try to open the image selector again.
openMediaSelector(requireActivity());
openMediaSelector(requireActivity(), false);
});

private final ActivityResultLauncher<String[]> mAudioRecorderPermissionLauncher =
Expand Down Expand Up @@ -358,10 +358,10 @@ public PromisedReply<ServerMessage> onFailure(Exception err) {
doneEditing.setOnClickListener(v -> sendText(activity));

// Send image button
view.findViewById(R.id.attachImage).setOnClickListener(v -> openMediaSelector(activity));
view.findViewById(R.id.attachImage).setOnClickListener(v -> openMediaSelector(activity, true));

// Send file button
view.findViewById(R.id.attachFile).setOnClickListener(v -> openFileSelector(activity));
view.findViewById(R.id.attachFile).setOnClickListener(v -> openFileSelector(activity, true));

// Cancel reply preview button.
view.findViewById(R.id.cancelPreview).setOnClickListener(v -> cancelPreview(activity));
Expand Down Expand Up @@ -1162,15 +1162,17 @@ void notifyDataSetChanged(boolean meta) {
}
}

private void openFileSelector(@NonNull Activity activity) {
private void openFileSelector(@NonNull Activity activity, boolean checkPermissions) {
if (activity.isFinishing() || activity.isDestroyed()) {
return;
}

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU &&
!UiUtils.isPermissionGranted(activity, Manifest.permission.READ_EXTERNAL_STORAGE)) {
mFileOpenerRequestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
return;
if (checkPermissions) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU &&
!UiUtils.isPermissionGranted(activity, Manifest.permission.READ_EXTERNAL_STORAGE)) {
mFileOpenerRequestPermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE);
return;
}
}

try {
Expand All @@ -1181,23 +1183,25 @@ private void openFileSelector(@NonNull Activity activity) {
}
}

private void openMediaSelector(@NonNull final Activity activity) {
private void openMediaSelector(@NonNull final Activity activity, boolean checkPermissions) {
if (activity.isFinishing() || activity.isDestroyed()) {
return;
}

LinkedList<String> permissions = new LinkedList<>();
permissions.add(Manifest.permission.CAMERA);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} else {
permissions.add(Manifest.permission.READ_MEDIA_VIDEO);
permissions.add(Manifest.permission.READ_MEDIA_IMAGES);
}
LinkedList<String> missing = UiUtils.getMissingPermissions(activity, permissions.toArray(new String[]{}));
if (!missing.isEmpty()) {
mImagePickerRequestPermissionLauncher.launch(missing.toArray(new String[]{}));
return;
if (checkPermissions) {
LinkedList<String> permissions = new LinkedList<>();
permissions.add(Manifest.permission.CAMERA);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
} else {
permissions.add(Manifest.permission.READ_MEDIA_VIDEO);
permissions.add(Manifest.permission.READ_MEDIA_IMAGES);
}
LinkedList<String> missing = UiUtils.getMissingPermissions(activity, permissions.toArray(new String[]{}));
if (!missing.isEmpty()) {
mImagePickerRequestPermissionLauncher.launch(missing.toArray(new String[]{}));
return;
}
}

mMediaPickerLauncher.launch(null);
Expand Down

0 comments on commit 8cddc76

Please sign in to comment.