diff --git a/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java b/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java index e37391d..9236552 100644 --- a/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java +++ b/src/com/android/messaging/ui/mediapicker/AudioMediaChooser.java @@ -18,11 +18,13 @@ package com.android.messaging.ui.mediapicker; import android.Manifest; -import android.content.pm.PackageManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; + import com.android.messaging.R; import com.android.messaging.datamodel.data.MessagePartData; import com.android.messaging.util.OsUtil; @@ -34,9 +36,18 @@ class AudioMediaChooser extends MediaChooser implements AudioRecordView.HostInterface { private View mEnabledView; private View mMissingPermissionView; + private final ActivityResultLauncher mRequestPermissionLauncher; AudioMediaChooser(final MediaPicker mediaPicker) { super(mediaPicker); + mRequestPermissionLauncher = mediaPicker.registerForActivityResult( + new ActivityResultContracts.RequestPermission(), granted -> { + if (mEnabledView == null) { + return; + } + mEnabledView.setVisibility(granted ? View.VISIBLE : View.GONE); + mMissingPermissionView.setVisibility(granted ? View.GONE : View.VISIBLE); + }); } @Override @@ -115,21 +126,6 @@ class AudioMediaChooser extends MediaChooser implements } private void requestRecordAudioPermission() { - mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, - MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE); - } - - @Override - protected void onRequestPermissionsResult( - final int requestCode, final String[] permissions, final int[] grantResults) { - if (requestCode == MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE) { - final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED; - // onRequestPermissionsResult can sometimes get called before createView(). - if (mEnabledView == null) { - return; - } - mEnabledView.setVisibility(permissionGranted ? View.VISIBLE : View.GONE); - mMissingPermissionView.setVisibility(permissionGranted ? View.GONE : View.VISIBLE); - } + mRequestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO); } } diff --git a/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java b/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java index fde1f11..15af581 100644 --- a/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java +++ b/src/com/android/messaging/ui/mediapicker/CameraMediaChooser.java @@ -48,6 +48,7 @@ class CameraMediaChooser extends MediaChooser { private View mMissingPermissionView; private final ActivityResultLauncher mPictureLauncher; private final ActivityResultLauncher mVideoLauncher; + private final ActivityResultLauncher mRequestPermissionLauncher; private final DocumentImagePicker mDocumentImagePicker; private Uri mOutputUri; @@ -83,6 +84,10 @@ class CameraMediaChooser extends MediaChooser { true /* dismissMediaPicker */); } }); + mRequestPermissionLauncher = mediaPicker.registerForActivityResult( + new ActivityResultContracts.RequestPermission(), granted -> { + updateForPermissionState(granted); + }); } @Override @@ -152,22 +157,11 @@ class CameraMediaChooser extends MediaChooser { } private void requestCameraPermission() { - mMediaPicker.requestPermissions(new String[] { Manifest.permission.CAMERA }, - MediaPicker.CAMERA_PERMISSION_REQUEST_CODE); + mRequestPermissionLauncher.launch(Manifest.permission.CAMERA); } private void requestRecordAudioPermission() { - mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, - MediaPicker.RECORD_AUDIO_PERMISSION_REQUEST_CODE); - } - - @Override - protected void onRequestPermissionsResult( - final int requestCode, final String[] permissions, final int[] grantResults) { - if (requestCode == MediaPicker.CAMERA_PERMISSION_REQUEST_CODE) { - final boolean permissionGranted = grantResults[0] == PackageManager.PERMISSION_GRANTED; - updateForPermissionState(permissionGranted); - } + mRequestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO); } private void updateForPermissionState(final boolean granted) {