Bugfix: Android 13 couldn't open Gallery.

Fixes #1620.
This commit is contained in:
Dennis Guse
2023-06-27 19:07:13 +02:00
parent 0fc2209ceb
commit 336b9eaa9f
@@ -22,10 +22,8 @@ import android.content.pm.PackageManager;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.Menu; import android.view.Menu;
@@ -35,6 +33,7 @@ import android.widget.ArrayAdapter;
import android.widget.Toast; import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.PickVisualMediaRequest;
import androidx.activity.result.contract.ActivityResultContracts; import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
@@ -71,7 +70,7 @@ public class MarkerEditActivity extends AbstractActivity {
private Uri cameraPhotoUri; private Uri cameraPhotoUri;
private ActivityResultLauncher<Intent> takePictureFromCamera; private ActivityResultLauncher<Intent> takePictureFromCamera;
private ActivityResultLauncher<Intent> takePictureFromGallery; private ActivityResultLauncher<PickVisualMediaRequest> takePictureFromGallery;
private MarkerEditViewModel viewModel; private MarkerEditViewModel viewModel;
@@ -139,10 +138,10 @@ public class MarkerEditActivity extends AbstractActivity {
takePictureFromCamera = registerForActivityResult( takePictureFromCamera = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), new ActivityResultContracts.StartActivityForResult(),
result -> { result -> {
if (result.getResultCode() == RESULT_CANCELED) { switch (result.getResultCode()) {
Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show(); case RESULT_CANCELED ->
} else if (result.getResultCode() == RESULT_OK) { Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show();
viewModel.onNewCameraPhoto(cameraPhotoUri, case RESULT_OK -> viewModel.onNewCameraPhoto(cameraPhotoUri,
viewBinding.markerEditName.getText().toString(), viewBinding.markerEditName.getText().toString(),
viewBinding.markerEditMarkerType.getText().toString(), viewBinding.markerEditMarkerType.getText().toString(),
viewBinding.markerEditDescription.getText().toString()); viewBinding.markerEditDescription.getText().toString());
@@ -150,12 +149,12 @@ public class MarkerEditActivity extends AbstractActivity {
}); });
takePictureFromGallery = registerForActivityResult( takePictureFromGallery = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(), new ActivityResultContracts.PickVisualMedia(),
result -> { uri -> {
if (result.getResultCode() == RESULT_CANCELED) { if (uri == null) {
Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show(); Toast.makeText(this, R.string.marker_add_photo_canceled, Toast.LENGTH_LONG).show();
} else if (result.getResultCode() == RESULT_OK) { } else {
viewModel.onNewGalleryPhoto(result.getData().getData(), viewModel.onNewGalleryPhoto(uri,
viewBinding.markerEditName.getText().toString(), viewBinding.markerEditName.getText().toString(),
viewBinding.markerEditMarkerType.getText().toString(), viewBinding.markerEditMarkerType.getText().toString(),
viewBinding.markerEditDescription.getText().toString()); viewBinding.markerEditDescription.getText().toString());
@@ -256,16 +255,11 @@ public class MarkerEditActivity extends AbstractActivity {
} }
private void createMarkerWithGalleryImage() { private void createMarkerWithGalleryImage() {
Intent intent; PickVisualMediaRequest request = new PickVisualMediaRequest.Builder()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE)
intent = new Intent(MediaStore.ACTION_PICK_IMAGES); .build();
intent.putExtra(MediaStore.EXTRA_PICK_IMAGES_MAX, 1);
} else {
intent = new Intent(Intent.ACTION_GET_CONTENT);
}
intent.setType("image/*");
try { try {
takePictureFromGallery.launch(intent); takePictureFromGallery.launch(request);
} catch (ActivityNotFoundException e) { } catch (ActivityNotFoundException e) {
Toast.makeText(this, R.string.no_compatible_gallery_installed, Toast.LENGTH_LONG).show(); Toast.makeText(this, R.string.no_compatible_gallery_installed, Toast.LENGTH_LONG).show();
} }