Merge branch 'master' of ssh://gitea.ttstd.com:2222/tt/VibeCoding

# Conflicts:
#	WebRTCController/app/src/main/res/layout/activity_main.xml
This commit is contained in:
2026-07-23 12:04:04 +08:00
13 changed files with 206 additions and 54 deletions

View File

@@ -61,6 +61,7 @@ public class MainActivity extends AppCompatActivity {
private TextView tvStatusControl;
private TextView tvStats;
private Spinner spinnerResolution;
private Button btnDisconnectControl;
// 屏幕串流"自编码"模式相关 UI 与解码器
private Switch switchStreamMode;
@@ -114,6 +115,7 @@ public class MainActivity extends AppCompatActivity {
tvStatusControl = findViewById(R.id.tv_status_control);
tvStats = findViewById(R.id.tv_stats);
spinnerResolution = findViewById(R.id.spinner_resolution);
btnDisconnectControl = findViewById(R.id.btn_disconnect_control);
// 默认服务器地址
etServerUrl.setText("ws://175.178.213.60:8088/ws/signal");
@@ -123,6 +125,7 @@ public class MainActivity extends AppCompatActivity {
btnConnect.setOnClickListener(v -> showAuthDialog());
btnDisconnect.setOnClickListener(v -> disconnect());
btnDisconnectControl.setOnClickListener(v -> disconnect());
// 初始化 EGL 和远端视频渲染
eglBase = EglBase.create();
@@ -228,7 +231,7 @@ public class MainActivity extends AppCompatActivity {
});
}
/** 弹出鉴权输入对话框:选择动态验证码或固定密码,输入后发起连接。 */
/** 弹出鉴权输入对话框:选择免密连接、动态验证码或固定密码,输入后发起连接。 */
private void showAuthDialog() {
String serverUrl = etServerUrl.getText().toString().trim();
String target = etTargetDeviceId.getText().toString().trim();
@@ -243,13 +246,22 @@ public class MainActivity extends AppCompatActivity {
EditText et = view.findViewById(R.id.et_auth_value);
TextView tip = view.findViewById(R.id.tv_auth_tip);
// 根据选中的鉴权方式切换输入框与提示文案。默认选中“免密连接”,输入框隐藏。
rg.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == R.id.rb_password) {
et.setHint("请输入固定密码");
tip.setText("固定密码为被控端设置的固定密码");
if (checkedId == R.id.rb_none) {
et.setVisibility(View.GONE);
tip.setVisibility(View.VISIBLE);
tip.setText(R.string.auth_none_tip);
} else if (checkedId == R.id.rb_password) {
et.setVisibility(View.VISIBLE);
et.setHint(R.string.auth_password_hint);
tip.setVisibility(View.VISIBLE);
tip.setText(R.string.auth_password_tip);
} else {
et.setHint("请输入动态验证码");
tip.setText("动态验证码为被控端界面显示的 6 位大小写字母与数字组合");
et.setVisibility(View.VISIBLE);
et.setHint(R.string.auth_code_hint);
tip.setVisibility(View.VISIBLE);
tip.setText(R.string.auth_code_tip);
}
});
@@ -263,15 +275,22 @@ public class MainActivity extends AppCompatActivity {
// 校验失败时不关闭对话框,引导用户重新输入
dialog.setOnShowListener(d -> dialog.getButton(AlertDialog.BUTTON_POSITIVE)
.setOnClickListener(v -> {
boolean isPassword = (rg.getCheckedRadioButtonId() == R.id.rb_password);
String authType = isPassword ? "PASSWORD" : "CODE";
String authValue = et.getText().toString().trim();
if (authValue.isEmpty()) {
Toast.makeText(MainActivity.this, "请输入验证码或密码", Toast.LENGTH_SHORT).show();
return;
int checkedId = rg.getCheckedRadioButtonId();
// 免密连接NONE无需输入验证码/密码
if (checkedId == R.id.rb_none) {
pendingAuthType = "NONE";
pendingAuthValue = "";
} else {
boolean isPassword = (checkedId == R.id.rb_password);
String authType = isPassword ? "PASSWORD" : "CODE";
String authValue = et.getText().toString().trim();
if (authValue.isEmpty()) {
Toast.makeText(MainActivity.this, "请输入验证码或密码", Toast.LENGTH_SHORT).show();
return;
}
pendingAuthType = authType;
pendingAuthValue = authValue;
}
pendingAuthType = authType;
pendingAuthValue = authValue;
dialog.dismiss();
connectToControlled();
}));