fix(AboutView): 调试解锁对话框改为普通Dialog,禁止点击外部关闭

- AlertDialog → Dialog + 自定义布局,绕过AlertController触摸干扰
- 添加 setCancelable(false) + setCanceledOnTouchOutside(false) 双重防护
- 移除DialogInterface.OnShowListener,改用按钮直接绑定OnClickListener
This commit is contained in:
2026-05-27 12:13:46 +08:00
parent 91841962f1
commit dc622003bd

View File

@@ -1,14 +1,14 @@
package cc.winboll.studio.libappbase.views;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
@@ -315,42 +315,58 @@ public class AboutView extends LinearLayout {
// ===================================== 调试解锁弹窗 =====================================
private void showDebugUnlockDialog() {
final AlertDialog dialog = new AlertDialog.Builder(mContext).create();
final Dialog dialog = new Dialog(mContext);
dialog.setTitle("应用调试解锁");
dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
LinearLayout layout = new LinearLayout(mContext);
layout.setOrientation(LinearLayout.VERTICAL);
int paddingPx = (int) (24 * mContext.getResources().getDisplayMetrics().density);
layout.setPadding(paddingPx, paddingPx, paddingPx, paddingPx);
final EditText etToken = new EditText(mContext);
etToken.setHint("请输入调试Token");
dialog.setView(etToken);
layout.addView(etToken);
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "调试解锁", (DialogInterface.OnClickListener) null);
dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "关闭", (DialogInterface.OnClickListener) null);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
LinearLayout buttonLayout = new LinearLayout(mContext);
buttonLayout.setOrientation(LinearLayout.HORIZONTAL);
buttonLayout.setGravity(Gravity.END);
Button closeButton = new Button(mContext);
closeButton.setText("关闭");
buttonLayout.addView(closeButton);
Button unlockButton = new Button(mContext);
unlockButton.setText("调试解锁");
buttonLayout.addView(unlockButton);
layout.addView(buttonLayout);
dialog.setContentView(layout);
unlockButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onShow(DialogInterface d) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String inputToken = etToken.getText().toString().trim();
String savedToken = DebugSwitchInfoImageView.getDebugToken();
if (savedToken != null && savedToken.equals(inputToken)) {
GlobalApplication.setIsDebugging(true);
GlobalApplication.saveDebugStatus(GlobalApplication.getInstance());
Toast.makeText(mContext, "调试解锁成功,重启应用后生效", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "调试Token不匹配", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
public void onClick(View v) {
String inputToken = etToken.getText().toString().trim();
String savedToken = DebugSwitchInfoImageView.getDebugToken();
if (savedToken != null && savedToken.equals(inputToken)) {
GlobalApplication.setIsDebugging(true);
GlobalApplication.saveDebugStatus(GlobalApplication.getInstance());
Toast.makeText(mContext, "调试解锁成功,重启应用后生效", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(mContext, "调试Token不匹配", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}
});
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}