killapp/Assets/Scripts/UI/Pages/Login/SubPages/LoginPasswordPanel.cs
“虞渠成” 6fa5a6c175 feat(login): 新增谷歌密码自动填充的隐形原生输入桥
新增 AutofillBridge.java:隐形原生 EditText(低透明度伪可见)设置 autofillHints,支持填充建议与保存提示,commit 采用反射调用规避符号解析问题

新增 AutofillBridge.cs:拦截 InputField 点击改由原生框承接输入,屏幕坐标换算、文本实时同步回显;登录邮箱/密码框接入

登录点击时先 commit 触发保存密码再隐藏;失焦/键盘完成时软隐藏(视图保留树上供快照采集),hide 防重入修复 NPE;proguard-user.txt 添加 keep 规则防 R8 剥离

状态:待真机验证填充与保存提示,已加 autofill 会话诊断日志
2026-09-11 09:46:33 +08:00

89 lines
3.0 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using Kill.Managers;
using Kill.Utils;
using Kill.Network;
using Kill.UI.Components;
namespace Kill.UI.Pages
{
public class LoginPasswordPanel : LoginSubPageBase
{
public InputField passwordInput;
public Text errorText;
public Button loginBtn;
public Button forgotPasswordBtn;
public Button toRegisterBtn;
protected override void OnInitialize()
{
// 谷歌密码自动填充:密码框改由隐形原生输入桥承接
AutofillBridge.Attach(passwordInput, AutofillHint.Password);
if (loginBtn != null)
loginBtn.onClick.AddListener(OnLoginClick);
if (forgotPasswordBtn != null)
forgotPasswordBtn.onClick.AddListener(OnForgotPassword);
if (toRegisterBtn != null)
toRegisterBtn.onClick.AddListener(() => ShowPage(LoginPageCtrl.SubPageType.Register));
}
protected override void OnShow()
{
// 清空密码和错误
if (passwordInput != null)
passwordInput.text = "";
if (errorText != null)
errorText.text = "";
// 配套账号用于保存凭据时账号密码成对
AutofillBridge.CompanionUsername = LoginPageCtrl.Instance.GetCurrentEmail();
AutofillBridge.Hide();
}
private void OnLoginClick()
{
string password = passwordInput != null ? passwordInput.text : "";
if (string.IsNullOrEmpty(password))
{
errorText.text = LanguageManager.Instance.GetLanguage("100040");
return;
}
// 触发谷歌密码管理器的"保存密码"提示(需在输入桥隐藏前调用)
AutofillBridge.CommitAndHide();
string email = LoginPageCtrl.Instance.GetCurrentEmail();
// 使用自定义错误版本,在输入框下方显示错误
LoginPageCtrl.Instance.Login(email, password,
onSuccess: (data) =>
{
// 登录成功
Debug.Log("登录成功,准备跳转主页");
UIManager.Instance.OpenPage(UIManager.PageName.homePage,null,true);
},
onError: (code, message) =>
{
// 在输入框下方显示错误
errorText.text = LanguageManager.Instance.GetLanguage("100040");
}
);
}
private void OnForgotPassword()
{
// 跳转到验证码页,设置为重置密码场景
var verifyPanel = GetSubPage(LoginPageCtrl.SubPageType.VerificationCode) as VerificationCodePanel;
if (verifyPanel != null)
{
verifyPanel.SetSceneType(VerificationCodePanel.CodeSceneType.ResetPassword);
}
ShowPage(LoginPageCtrl.SubPageType.VerificationCode);
}
}
}