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; package com.android.messaging.ui.mediapicker;
import android.Manifest; import android.Manifest;
import android.content.pm.PackageManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import com.android.messaging.R; import com.android.messaging.R;
import com.android.messaging.datamodel.data.MessagePartData; import com.android.messaging.datamodel.data.MessagePartData;
import com.android.messaging.util.OsUtil; import com.android.messaging.util.OsUtil;
@@ -34,9 +36,18 @@ class AudioMediaChooser extends MediaChooser implements
AudioRecordView.HostInterface { AudioRecordView.HostInterface {
private View mEnabledView; private View mEnabledView;
private View mMissingPermissionView; private View mMissingPermissionView;
private final ActivityResultLauncher<String> mRequestPermissionLauncher;
AudioMediaChooser(final MediaPicker mediaPicker) { AudioMediaChooser(final MediaPicker mediaPicker) {
super(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 @Override
@@ -115,21 +126,6 @@ class AudioMediaChooser extends MediaChooser implements
} }
private void requestRecordAudioPermission() { private void requestRecordAudioPermission() {
mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, mRequestPermissionLauncher.launch(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);
}
} }
} }
@@ -48,6 +48,7 @@ class CameraMediaChooser extends MediaChooser {
private View mMissingPermissionView; private View mMissingPermissionView;
private final ActivityResultLauncher<Uri> mPictureLauncher; private final ActivityResultLauncher<Uri> mPictureLauncher;
private final ActivityResultLauncher<Uri> mVideoLauncher; private final ActivityResultLauncher<Uri> mVideoLauncher;
private final ActivityResultLauncher<String> mRequestPermissionLauncher;
private final DocumentImagePicker mDocumentImagePicker; private final DocumentImagePicker mDocumentImagePicker;
private Uri mOutputUri; private Uri mOutputUri;
@@ -83,6 +84,10 @@ class CameraMediaChooser extends MediaChooser {
true /* dismissMediaPicker */); true /* dismissMediaPicker */);
} }
}); });
mRequestPermissionLauncher = mediaPicker.registerForActivityResult(
new ActivityResultContracts.RequestPermission(), granted -> {
updateForPermissionState(granted);
});
} }
@Override @Override
@@ -152,22 +157,11 @@ class CameraMediaChooser extends MediaChooser {
} }
private void requestCameraPermission() { private void requestCameraPermission() {
mMediaPicker.requestPermissions(new String[] { Manifest.permission.CAMERA }, mRequestPermissionLauncher.launch(Manifest.permission.CAMERA);
MediaPicker.CAMERA_PERMISSION_REQUEST_CODE);
} }
private void requestRecordAudioPermission() { private void requestRecordAudioPermission() {
mMediaPicker.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO }, mRequestPermissionLauncher.launch(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);
}
} }
private void updateForPermissionState(final boolean granted) { private void updateForPermissionState(final boolean granted) {