165 lines
6.0 KiB
Java
165 lines
6.0 KiB
Java
package com.xscm.moduleutil.dialog;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.app.Dialog;
|
|
import android.content.Context;
|
|
import android.os.Bundle;
|
|
import android.os.CountDownTimer;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.view.Window;
|
|
import android.widget.Button;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
|
|
|
import com.xscm.moduleutil.R;
|
|
import com.xscm.moduleutil.color.ThemeableDrawableUtils;
|
|
import com.xscm.moduleutil.utils.ColorManager;
|
|
|
|
/**
|
|
*@author qx
|
|
*@data 2025/6/16
|
|
*@description: 确认弹框,使用在动态删除评论
|
|
*/
|
|
public class ConfirmDialog extends Dialog {
|
|
|
|
private String title;
|
|
private String message;
|
|
private String positiveButtonText;
|
|
private String negativeButtonText;
|
|
private View.OnClickListener positiveButtonClickListener;
|
|
private View.OnClickListener negativeButtonClickListener;
|
|
private boolean isCountdownEnabled = false; // 是否启用倒计时
|
|
private int countdownSeconds = 0; // 倒计时秒数
|
|
private CountDownTimer countDownTimer; // 倒计时对象
|
|
|
|
|
|
public ConfirmDialog(Context context, String title, String message,
|
|
String positiveButtonText, String negativeButtonText,
|
|
View.OnClickListener positiveButtonClickListener,
|
|
View.OnClickListener negativeButtonClickListener,
|
|
boolean isCountdownEnabled, int countdownSeconds) {
|
|
super(context);
|
|
this.title = title;
|
|
this.message = message;
|
|
this.positiveButtonText = positiveButtonText;
|
|
this.negativeButtonText = negativeButtonText;
|
|
this.positiveButtonClickListener = positiveButtonClickListener;
|
|
this.negativeButtonClickListener = negativeButtonClickListener;
|
|
this.isCountdownEnabled = isCountdownEnabled;
|
|
this.countdownSeconds = countdownSeconds;
|
|
}
|
|
|
|
private void init() {
|
|
Window window = getWindow();
|
|
if (window != null) {
|
|
window.setGravity(Gravity.CENTER); // 居中显示
|
|
window.setBackgroundDrawableResource(R.drawable.bg_r16_fff); // 透明背景
|
|
}
|
|
}
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.dialog_confirm);
|
|
init();
|
|
// 动态设置背景
|
|
// getWindow().setBackgroundDrawableResource(R.drawable.bg_r16_fff);
|
|
|
|
// 初始化视图
|
|
TextView tvTitle = findViewById(R.id.tv_title);
|
|
TextView tvMessage = findViewById(R.id.tv_message);
|
|
Button btnPositive = findViewById(R.id.btn_positive);
|
|
Button btnNegative = findViewById(R.id.btn_negative);
|
|
@SuppressLint({"MissingInflatedId", "LocalSuppress"})
|
|
ConstraintLayout rootView =(ConstraintLayout) findViewById(R.id.root_view);
|
|
|
|
// 设置文本
|
|
tvTitle.setText(title);
|
|
tvMessage.setText(message);
|
|
btnPositive.setText(positiveButtonText);
|
|
btnNegative.setText(negativeButtonText);
|
|
|
|
// 设置点击监听器
|
|
btnPositive.setOnClickListener(v -> {
|
|
isCountdownCancelled = true; // 标记倒计时被取消
|
|
if (countDownTimer != null) {
|
|
countDownTimer.cancel(); // 取消倒计时
|
|
countDownTimer = null;
|
|
}
|
|
if (positiveButtonClickListener != null) {
|
|
positiveButtonClickListener.onClick(v);
|
|
}
|
|
dismiss();
|
|
});
|
|
|
|
// 判断是否需要显示取消按钮
|
|
if (negativeButtonText != null && !negativeButtonText.isEmpty()) {
|
|
btnNegative.setText(negativeButtonText);
|
|
btnNegative.setVisibility(View.VISIBLE);
|
|
|
|
btnNegative.setOnClickListener(v -> {
|
|
if (negativeButtonClickListener != null) {
|
|
negativeButtonClickListener.onClick(v);
|
|
}
|
|
dismiss();
|
|
});
|
|
|
|
// 倒计时逻辑
|
|
if (isCountdownEnabled && countdownSeconds > 0) {
|
|
startCountdown(btnNegative);
|
|
}
|
|
} else {
|
|
// 隐藏取消按钮
|
|
btnNegative.setVisibility(View.GONE);
|
|
}
|
|
// 倒计时逻辑
|
|
if (isCountdownEnabled && countdownSeconds > 0) {
|
|
startCountdown(btnNegative);
|
|
}
|
|
|
|
ThemeableDrawableUtils.setThemeableRoundedBackground(btnPositive, ColorManager.getInstance().getPrimaryColorInt(), 53);
|
|
btnPositive.setTextColor(ColorManager.getInstance().getButtonColorInt());
|
|
|
|
// 找到根布局并应用动画
|
|
|
|
// if (rootView != null) {
|
|
// Animation slideDown = AnimationUtils.loadAnimation(context, R.anim.slide_down);
|
|
// Animation shake = AnimationUtils.loadAnimation(context, R.anim.shake);
|
|
//
|
|
// rootView.startAnimation(slideDown);
|
|
// rootView.startAnimation(shake);
|
|
// }
|
|
}
|
|
private boolean isCountdownCancelled = false; // 添加标志位
|
|
private void startCountdown(Button btnNegative) {
|
|
countDownTimer = new CountDownTimer(countdownSeconds * 1000L, 1000) {
|
|
@Override
|
|
public void onTick(long millisUntilFinished) {
|
|
int secondsLeft = (int) (millisUntilFinished / 1000);
|
|
btnNegative.setText(negativeButtonText + " (" + secondsLeft + "s)");
|
|
}
|
|
|
|
@Override
|
|
public void onFinish() {
|
|
// 检查是否被主动取消
|
|
if (!isCountdownCancelled) {
|
|
btnNegative.setText(negativeButtonText);
|
|
if (negativeButtonClickListener != null) {
|
|
negativeButtonClickListener.onClick(btnNegative); // 自动触发取消
|
|
}
|
|
dismiss();
|
|
}
|
|
}
|
|
}.start();
|
|
}
|
|
@Override
|
|
public void dismiss() {
|
|
if (countDownTimer != null) {
|
|
countDownTimer.cancel(); // 取消倒计时
|
|
countDownTimer = null;
|
|
}
|
|
super.dismiss();
|
|
}
|
|
}
|