mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 09:20:19 +01:00
Update microphone permission UI for voice messages.
This commit is contained in:
committed by
Greyson Parrelli
parent
69c40a6835
commit
c5c0c432c4
@@ -73,6 +73,8 @@ public class Permissions {
|
||||
|
||||
private @DrawableRes int[] rationalDialogHeader;
|
||||
private String rationaleDialogMessage;
|
||||
private String rationaleDialogTitle;
|
||||
private String rationaleDialogDetails;
|
||||
private boolean rationaleDialogCancelable;
|
||||
|
||||
private boolean ifNecesary;
|
||||
@@ -104,8 +106,18 @@ public class Permissions {
|
||||
}
|
||||
|
||||
public PermissionsBuilder withRationaleDialog(@NonNull String message, boolean cancelable, @NonNull @DrawableRes int... headers) {
|
||||
return withRationaleDialog(message, null, null, cancelable, headers);
|
||||
}
|
||||
|
||||
public PermissionsBuilder withRationaleDialog(@NonNull String title, @NonNull String details, @NonNull @DrawableRes int... headers) {
|
||||
return withRationaleDialog(null, title, details, true, headers);
|
||||
}
|
||||
|
||||
public PermissionsBuilder withRationaleDialog(@Nullable String message, @Nullable String title, @Nullable String details, boolean cancelable, @NonNull @DrawableRes int... headers) {
|
||||
this.rationalDialogHeader = headers;
|
||||
this.rationaleDialogMessage = message;
|
||||
this.rationaleDialogTitle = title;
|
||||
this.rationaleDialogDetails = details;
|
||||
this.rationaleDialogCancelable = cancelable;
|
||||
return this;
|
||||
}
|
||||
@@ -164,7 +176,8 @@ public class Permissions {
|
||||
|
||||
if (ifNecesary && (permissionObject.hasAll(requestedPermissions) || !condition)) {
|
||||
executePreGrantedPermissionsRequest(request);
|
||||
} else if (rationaleDialogMessage != null && rationalDialogHeader != null) {
|
||||
} else if ((rationaleDialogMessage != null || (rationaleDialogTitle != null && rationaleDialogDetails != null))
|
||||
&& rationalDialogHeader != null) {
|
||||
executePermissionsRequestWithRationale(request);
|
||||
} else {
|
||||
executePermissionsRequest(request);
|
||||
@@ -180,13 +193,17 @@ public class Permissions {
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void executePermissionsRequestWithRationale(PermissionsRequest request) {
|
||||
RationaleDialog.createFor(permissionObject.getContext(), rationaleDialogMessage, rationalDialogHeader)
|
||||
.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> executePermissionsRequest(request))
|
||||
.setNegativeButton(R.string.Permissions_not_now, (dialog, which) -> executeNoPermissionsRequest(request))
|
||||
.setCancelable(rationaleDialogCancelable)
|
||||
.show()
|
||||
.getWindow()
|
||||
.setLayout((int)(permissionObject.getWindowWidth() * .75), ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
MaterialAlertDialogBuilder builder = (rationaleDialogMessage != null)
|
||||
? RationaleDialog.createFor(permissionObject.getContext(), rationaleDialogMessage, rationalDialogHeader)
|
||||
: RationaleDialog.createFor(permissionObject.getContext(), rationaleDialogTitle, rationaleDialogDetails, rationalDialogHeader);
|
||||
builder.setPositiveButton(R.string.Permissions_continue, (dialog, which) -> executePermissionsRequest(request))
|
||||
.setNegativeButton(R.string.Permissions_not_now, (dialog, which) -> executeNoPermissionsRequest(request))
|
||||
.setCancelable(rationaleDialogCancelable);
|
||||
if (rationaleDialogMessage != null) {
|
||||
builder.show().getWindow().setLayout((int)(permissionObject.getWindowWidth() * .75), ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
} else {
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
private void executePermissionsRequest(PermissionsRequest request) {
|
||||
|
||||
@@ -29,6 +29,44 @@ import java.util.Objects;
|
||||
|
||||
public class RationaleDialog {
|
||||
|
||||
public static MaterialAlertDialogBuilder createFor(@NonNull Context context, @NonNull String title, @NonNull String details, @DrawableRes int... drawables) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.permission_allow_dialog, null);
|
||||
ViewGroup header = view.findViewById(R.id.permission_header_container);
|
||||
TextView titleText = view.findViewById(R.id.permission_title);
|
||||
TextView detailsText = view.findViewById(R.id.permission_details);
|
||||
int iconSize = (int) DimensionUnit.DP.toPixels(32);
|
||||
|
||||
for (int i = 0; i < drawables.length; i++) {
|
||||
Drawable drawable = Objects.requireNonNull(ContextCompat.getDrawable(context, drawables[i]));
|
||||
DrawableCompat.setTint(drawable, ContextCompat.getColor(context, R.color.signal_colorOnPrimaryContainer));
|
||||
|
||||
ImageView imageView = new ImageView(context);
|
||||
imageView.setImageDrawable(drawable);
|
||||
imageView.setLayoutParams(new LayoutParams(iconSize, iconSize));
|
||||
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
|
||||
|
||||
header.addView(imageView);
|
||||
|
||||
if (i != drawables.length - 1) {
|
||||
TextView plus = new TextView(context);
|
||||
plus.setText("+");
|
||||
plus.setTextSize(TypedValue.COMPLEX_UNIT_SP, 40);
|
||||
plus.setTextColor(Color.WHITE);
|
||||
|
||||
LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
|
||||
layoutParams.setMargins(ViewUtil.dpToPx(context, 20), 0, ViewUtil.dpToPx(context, 20), 0);
|
||||
|
||||
plus.setLayoutParams(layoutParams);
|
||||
header.addView(plus);
|
||||
}
|
||||
}
|
||||
|
||||
titleText.setText(title);
|
||||
detailsText.setText(details);
|
||||
|
||||
return new MaterialAlertDialogBuilder(context).setView(view);
|
||||
}
|
||||
|
||||
public static MaterialAlertDialogBuilder createFor(@NonNull Context context, @NonNull String message, @DrawableRes int... drawables) {
|
||||
View view = LayoutInflater.from(context).inflate(R.layout.permissions_rationale_dialog, null);
|
||||
ViewGroup header = view.findViewById(R.id.header_container);
|
||||
|
||||
Reference in New Issue
Block a user