Messaging: Replace permission requests with launchers

Change-Id: I0d12fd05fb0abaeb9bd64c8c77e0e776d5459e4d
This commit is contained in:
Michael W
2024-12-26 15:54:37 +01:00
parent 7f464b401c
commit c73fdc5064
2 changed files with 20 additions and 30 deletions
@@ -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<String> 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);
}
}
@@ -48,6 +48,7 @@ class CameraMediaChooser extends MediaChooser {
private View mMissingPermissionView;
private final ActivityResultLauncher<Uri> mPictureLauncher;
private final ActivityResultLauncher<Uri> mVideoLauncher;
private final ActivityResultLauncher<String> 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) {