Messaging: Replace permission requests with launchers
Change-Id: I0d12fd05fb0abaeb9bd64c8c77e0e776d5459e4d
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user