mirror of
https://gitee.com/willfree/min-vpn-client_v2.git
synced 2026-10-04 19:42:00 +08:00
CUTV终版
This commit is contained in:
1 parent
bb8a79df9d
commit
c9ece862a4
9 files changed
+475
-449
No files matched your search
@@ -17,5 +17,5 @@ public class GlobalSetting {
|
||||
public static boolean openFirewall = true;
|
||||
|
||||
// 控制是否打开签名
|
||||
public static boolean openSig = true;
|
||||
public static boolean openSig = false;
|
||||
}
|
||||
@@ -104,8 +104,8 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
imageView_imgLogo=findViewById(R.id.imgLogo);
|
||||
savePasswordBox=findViewById(R.id.savePasswordBox);
|
||||
// tvLoginWithSMS = findViewById(R.id.tvLoginWithSMS);
|
||||
tvRegisterNow=findViewById(R.id.tvRegisterNow);
|
||||
tvResetNow=findViewById(R.id.tvResetNow);
|
||||
// tvRegisterNow=findViewById(R.id.tvRegisterNow);
|
||||
// tvResetNow=findViewById(R.id.tvResetNow);
|
||||
etUsername=findViewById(R.id.etUsername);
|
||||
btnLogin=findViewById(R.id.btnLogin);
|
||||
etPassword=findViewById(R.id.etPassword);
|
||||
@@ -158,16 +158,16 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
// });
|
||||
|
||||
// 监听注册按钮
|
||||
tvRegisterNow.setOnClickListener(v -> {
|
||||
System.out.println("即将跳转到注册界面");
|
||||
ContextExtensionKt.jumpTo(this, RegisterActivity.class);
|
||||
});
|
||||
// tvRegisterNow.setOnClickListener(v -> {
|
||||
// System.out.println("即将跳转到注册界面");
|
||||
// ContextExtensionKt.jumpTo(this, RegisterActivity.class);
|
||||
// });
|
||||
|
||||
// 监听重置密码按钮
|
||||
tvResetNow.setOnClickListener(v -> {
|
||||
System.out.println("即将跳转到重置界面");
|
||||
ContextExtensionKt.jumpTo(this, ResetActivity.class);
|
||||
});
|
||||
// tvResetNow.setOnClickListener(v -> {
|
||||
// System.out.println("即将跳转到重置界面");
|
||||
// ContextExtensionKt.jumpTo(this, ResetActivity.class);
|
||||
// });
|
||||
|
||||
// 显示账号
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
@@ -215,6 +215,7 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
|
||||
// 2. 解密身份数据
|
||||
byte[] prikeyRawByte = IdentityEncryptedUtil.hexDecodeString(identityInfo.getString("PrikeyEncrypted"));
|
||||
// byte[] prikeyRawByte = IdentityEncryptedUtil.decryptedIdentity(rawUsername,rawUsername,identityInfo.getBytes("encryptedIdentityData"));
|
||||
System.out.println("十六进制转换后字符串:"+new String(prikeyRawByte));
|
||||
Identity identity = new Identity();
|
||||
identity.setName(identityInfo.getString("IdentityIdentifier"));
|
||||
@@ -248,7 +249,6 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
if(isSuccess)break;
|
||||
}catch (Exception e){
|
||||
System.out.println("解密出现异常!!!");
|
||||
// e.printStackTrace();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -257,11 +257,13 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
System.out.println("身份unLock失败!");
|
||||
return;
|
||||
}
|
||||
System.out.println("unlock身份成功!");
|
||||
}
|
||||
|
||||
//4. 保存身份至本地
|
||||
try {
|
||||
KeyManager.INSTANCE.getKeyChain().getIdentifyManager().saveIdentity(identity,true,false);
|
||||
System.out.println("成功保存至本地");
|
||||
} catch (Exception e) {
|
||||
System.out.println("保存身份失败!!");
|
||||
}
|
||||
@@ -269,6 +271,8 @@ public class LoginActivity extends MINVpnBaseActivity<LoginActivityPresenter>
|
||||
|
||||
boolean testFlag=false;
|
||||
String password = "YouAreTesting!";
|
||||
|
||||
|
||||
if(!testFlag){
|
||||
if (rawUsername.isEmpty() || rawPassword.isEmpty()) {
|
||||
showWarning("请将信息填写完整");
|
||||
|
||||
@@ -56,8 +56,8 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
private TextView VPNstatus;
|
||||
private RadioGroup etProxyMode;
|
||||
// private RadioButton ruleProxy;
|
||||
private RadioButton globalProxy;
|
||||
private RadioButton serverSettingProxy;
|
||||
// private RadioButton globalProxy;
|
||||
// private RadioButton serverSettingProxy;
|
||||
private SpinKitView spinKit;
|
||||
private TinImageView btnConnect;
|
||||
|
||||
@@ -70,8 +70,8 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
VPNstatus=findViewById(R.id.VPNstatus);
|
||||
etProxyMode=findViewById(R.id.etProxyMode);
|
||||
// ruleProxy=findViewById(R.id.ruleProxy);
|
||||
globalProxy=findViewById(R.id.globalProxy);
|
||||
serverSettingProxy=findViewById(R.id.serverSettingProxy);
|
||||
// globalProxy=findViewById(R.id.globalProxy);
|
||||
// serverSettingProxy=findViewById(R.id.serverSettingProxy);
|
||||
spinKit=findViewById(R.id.spinKit);
|
||||
btnConnect=findViewById(R.id.btnConnect);
|
||||
|
||||
@@ -108,11 +108,11 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
|
||||
// 根据MINVpnAPI显示当前VPN的模式
|
||||
int flag= MINVpnSettingAPI.INSTANCE.getProxyMode();
|
||||
if(flag==1){
|
||||
etProxyMode.check(globalProxy.getId()); // 全局,外网
|
||||
}else if(flag==2){
|
||||
etProxyMode.check(serverSettingProxy.getId());// 服务器设定,内网
|
||||
}
|
||||
// if(flag==1){
|
||||
// etProxyMode.check(globalProxy.getId()); // 全局,外网
|
||||
// }else if(flag==2){
|
||||
// etProxyMode.check(serverSettingProxy.getId());// 服务器设定,内网
|
||||
// }
|
||||
|
||||
etProxyMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
|
||||
@Override
|
||||
@@ -139,12 +139,12 @@ public class MainActivity extends MINVpnBaseActivity<MainActivityPresenter>
|
||||
// 执行连接流程
|
||||
connectVpn();
|
||||
// 更新选定的模式
|
||||
int cacheflag=etProxyMode.getCheckedRadioButtonId();
|
||||
if(cacheflag==globalProxy.getId()){
|
||||
MINVpnSettingAPI.INSTANCE.updateProxyMode(1); // 全局
|
||||
}else if(cacheflag==serverSettingProxy.getId()){
|
||||
MINVpnSettingAPI.INSTANCE.updateProxyMode(2);// 服务器设定
|
||||
}
|
||||
// int cacheflag=etProxyMode.getCheckedRadioButtonId();
|
||||
// if(cacheflag==globalProxy.getId()){
|
||||
// MINVpnSettingAPI.INSTANCE.updateProxyMode(1); // 全局
|
||||
// }else if(cacheflag==serverSettingProxy.getId()){
|
||||
// MINVpnSettingAPI.INSTANCE.updateProxyMode(2);// 服务器设定
|
||||
// }
|
||||
}else{
|
||||
// 执行断开流程
|
||||
disconnectVpn();
|
||||
|
||||
+128
-128
@@ -35,21 +35,21 @@ public class SettingActivity extends MINVpnBaseActivity<SettingActivityPresenter
|
||||
// 第一跳路由
|
||||
private ClearAbleEditText etIpAddress;
|
||||
private ClearAbleEditText etPort;
|
||||
private ClearAbleEditText etFirstRouterPrefix;
|
||||
private ClearAbleEditText etIpAddress_Extra;
|
||||
private ClearAbleEditText etPort_Extra;
|
||||
private ClearAbleEditText etFirstRouterPrefix_Extra;
|
||||
// VPN Server
|
||||
private ClearAbleEditText etServicePrefix;
|
||||
private ClearAbleEditText etServicePrefix_Extra;
|
||||
// VMS
|
||||
private ClearAbleEditText etBlockChainIp;
|
||||
private ClearAbleEditText etVMSTCPPort;
|
||||
private ClearAbleEditText etVMSSSLPort;
|
||||
// MIS
|
||||
private ClearAbleEditText etMISIp;
|
||||
private ClearAbleEditText etMISTCPPort;
|
||||
private ClearAbleEditText etMISSSLPort;
|
||||
// private ClearAbleEditText etFirstRouterPrefix;
|
||||
// private ClearAbleEditText etIpAddress_Extra;
|
||||
// private ClearAbleEditText etPort_Extra;
|
||||
// private ClearAbleEditText etFirstRouterPrefix_Extra;
|
||||
// // VPN Server
|
||||
// private ClearAbleEditText etServicePrefix;
|
||||
// private ClearAbleEditText etServicePrefix_Extra;
|
||||
// // VMS
|
||||
// private ClearAbleEditText etBlockChainIp;
|
||||
// private ClearAbleEditText etVMSTCPPort;
|
||||
// private ClearAbleEditText etVMSSSLPort;
|
||||
// // MIS
|
||||
// private ClearAbleEditText etMISIp;
|
||||
// private ClearAbleEditText etMISTCPPort;
|
||||
// private ClearAbleEditText etMISSSLPort;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -61,21 +61,21 @@ public class SettingActivity extends MINVpnBaseActivity<SettingActivityPresenter
|
||||
// 第一跳路由
|
||||
etIpAddress=findViewById(R.id.etIpAddress);
|
||||
etPort=findViewById(R.id.etPort);
|
||||
etFirstRouterPrefix=findViewById(R.id.etFirstRouterPrefix);
|
||||
etIpAddress_Extra=findViewById(R.id.etIpAddressExtranet);
|
||||
etPort_Extra=findViewById(R.id.etPortExtranet);
|
||||
etFirstRouterPrefix_Extra=findViewById(R.id.etFirstRouterPrefixExtranet);
|
||||
// VPN Server
|
||||
etServicePrefix=findViewById(R.id.etServicePrefix);
|
||||
etServicePrefix_Extra=findViewById(R.id.etServicePrefixExtranet);
|
||||
// VMS
|
||||
etBlockChainIp=findViewById(R.id.etBlockChainIp);
|
||||
etVMSTCPPort=findViewById(R.id.etVMSTCPPort);
|
||||
etVMSSSLPort=findViewById(R.id.etVMSSSLPort);
|
||||
// MIS
|
||||
etMISIp=findViewById(R.id.etMISIp);
|
||||
etMISTCPPort=findViewById(R.id.etMISTCPPort);
|
||||
etMISSSLPort=findViewById(R.id.etMISSSLPort);
|
||||
// etFirstRouterPrefix=findViewById(R.id.etFirstRouterPrefix);
|
||||
// etIpAddress_Extra=findViewById(R.id.etIpAddressExtranet);
|
||||
// etPort_Extra=findViewById(R.id.etPortExtranet);
|
||||
// etFirstRouterPrefix_Extra=findViewById(R.id.etFirstRouterPrefixExtranet);
|
||||
// // VPN Server
|
||||
// etServicePrefix=findViewById(R.id.etServicePrefix);
|
||||
// etServicePrefix_Extra=findViewById(R.id.etServicePrefixExtranet);
|
||||
// // VMS
|
||||
// etBlockChainIp=findViewById(R.id.etBlockChainIp);
|
||||
// etVMSTCPPort=findViewById(R.id.etVMSTCPPort);
|
||||
// etVMSSSLPort=findViewById(R.id.etVMSSSLPort);
|
||||
// // MIS
|
||||
// etMISIp=findViewById(R.id.etMISIp);
|
||||
// etMISTCPPort=findViewById(R.id.etMISTCPPort);
|
||||
// etMISSSLPort=findViewById(R.id.etMISSSLPort);
|
||||
|
||||
initView();
|
||||
}
|
||||
@@ -101,19 +101,19 @@ public class SettingActivity extends MINVpnBaseActivity<SettingActivityPresenter
|
||||
// 获取本地设置数据,填充到文本框
|
||||
etIpAddress.setText(MINVpnSettingAPI.INSTANCE.getMirIpAddress());
|
||||
etPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getMirPort()));
|
||||
etFirstRouterPrefix.setText(MINVpnSettingAPI.INSTANCE.getFirstRouterPrefix());
|
||||
etServicePrefix.setText(MINVpnSettingAPI.INSTANCE.getServicePrefix());
|
||||
// 外访
|
||||
etIpAddress_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetMirIpAddress());
|
||||
etPort_Extra.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getExtranetMirPort()));
|
||||
etFirstRouterPrefix_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetFirstRouterPrefix());
|
||||
etServicePrefix_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetServicePrefix());
|
||||
etBlockChainIp.setText(MINVpnSettingAPI.INSTANCE.getBlockChainIpAddress());
|
||||
etVMSTCPPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getBcTcpPort()));
|
||||
etVMSSSLPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getBcSslPort()));
|
||||
etMISIp.setText(MINVpnSettingAPI.INSTANCE.getMisIpAddress());
|
||||
etMISTCPPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getMisTcpPort()));
|
||||
etMISSSLPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getMisSslPort()));
|
||||
// etFirstRouterPrefix.setText(MINVpnSettingAPI.INSTANCE.getFirstRouterPrefix());
|
||||
// etServicePrefix.setText(MINVpnSettingAPI.INSTANCE.getServicePrefix());
|
||||
// // 外访
|
||||
// etIpAddress_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetMirIpAddress());
|
||||
// etPort_Extra.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getExtranetMirPort()));
|
||||
// etFirstRouterPrefix_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetFirstRouterPrefix());
|
||||
// etServicePrefix_Extra.setText(MINVpnSettingAPI.INSTANCE.getExtranetServicePrefix());
|
||||
// etBlockChainIp.setText(MINVpnSettingAPI.INSTANCE.getBlockChainIpAddress());
|
||||
// etVMSTCPPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getBcTcpPort()));
|
||||
// etVMSSSLPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getBcSslPort()));
|
||||
// etMISIp.setText(MINVpnSettingAPI.INSTANCE.getMisIpAddress());
|
||||
// etMISTCPPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getMisTcpPort()));
|
||||
// etMISSSLPort.setText(String.valueOf(MINVpnSettingAPI.INSTANCE.getMisSslPort()));
|
||||
|
||||
// 设置按钮的监听(点击动作)
|
||||
btnSaveSetting.setOnClickListener(v->{
|
||||
@@ -131,97 +131,97 @@ public class SettingActivity extends MINVpnBaseActivity<SettingActivityPresenter
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String firstPrefix= Objects.requireNonNull(etFirstRouterPrefix.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(firstPrefix)){
|
||||
showWarning("请输入有效的MIN接入服务前缀");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String servicePrefix= Objects.requireNonNull(etServicePrefix.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(servicePrefix)){
|
||||
showWarning("请输入有效的VPN服务前缀");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
// --- 外网
|
||||
String mirIpAddressExtra= Objects.requireNonNull(etIpAddress_Extra.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(mirIpAddressExtra)){
|
||||
showWarning("请输入有效的外网接入IP地址");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String mirPortExtra= Objects.requireNonNull(etPort_Extra.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isPort(mirPortExtra)){
|
||||
showWarning("请输入有效的外网接入端口号");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String firstPrefixExtra = Objects.requireNonNull(etFirstRouterPrefix_Extra.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(firstPrefixExtra)){
|
||||
showWarning("请输入有效的MIN外网接入服务前缀");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String servicePrefixExtra= Objects.requireNonNull(etServicePrefix_Extra.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(servicePrefixExtra)){
|
||||
showWarning("请输入有效的外网VPN服务前缀");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String blockChainIpAddress = Objects.requireNonNull(etBlockChainIp.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(blockChainIpAddress)){
|
||||
showWarning("请输入有效的VMS-IP地址");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String tcpPort= Objects.requireNonNull(etVMSTCPPort.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isPort(tcpPort)){
|
||||
showWarning("请输入有效的VMS-TCP端口号");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String sslPort= Objects.requireNonNull(etVMSSSLPort.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isPort(sslPort)){
|
||||
showWarning("请输入有效的VMS-SSL端口号");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String misIpAddress = Objects.requireNonNull(etMISIp.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(misIpAddress)){
|
||||
showWarning("请输入有效的MIS-IP地址");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String mistcpPort= Objects.requireNonNull(etMISTCPPort.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isPort(mistcpPort)){
|
||||
showWarning("请输入有效的MIS-TCP端口号");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
String missslPort= Objects.requireNonNull(etMISSSLPort.getText()).toString();
|
||||
if(!AccountValidatorRegexUtil.INSTANCE.isPort(missslPort)){
|
||||
showWarning("请输入有效的MIS-SSL端口号");
|
||||
btnSaveSetting.revertAnimation();
|
||||
return;
|
||||
}
|
||||
// String firstPrefix= Objects.requireNonNull(etFirstRouterPrefix.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(firstPrefix)){
|
||||
// showWarning("请输入有效的MIN接入服务前缀");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String servicePrefix= Objects.requireNonNull(etServicePrefix.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(servicePrefix)){
|
||||
// showWarning("请输入有效的VPN服务前缀");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// // --- 外网
|
||||
// String mirIpAddressExtra= Objects.requireNonNull(etIpAddress_Extra.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(mirIpAddressExtra)){
|
||||
// showWarning("请输入有效的外网接入IP地址");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String mirPortExtra= Objects.requireNonNull(etPort_Extra.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isPort(mirPortExtra)){
|
||||
// showWarning("请输入有效的外网接入端口号");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String firstPrefixExtra = Objects.requireNonNull(etFirstRouterPrefix_Extra.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(firstPrefixExtra)){
|
||||
// showWarning("请输入有效的MIN外网接入服务前缀");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String servicePrefixExtra= Objects.requireNonNull(etServicePrefix_Extra.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isndnPrefix(servicePrefixExtra)){
|
||||
// showWarning("请输入有效的外网VPN服务前缀");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String blockChainIpAddress = Objects.requireNonNull(etBlockChainIp.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(blockChainIpAddress)){
|
||||
// showWarning("请输入有效的VMS-IP地址");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String tcpPort= Objects.requireNonNull(etVMSTCPPort.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isPort(tcpPort)){
|
||||
// showWarning("请输入有效的VMS-TCP端口号");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String sslPort= Objects.requireNonNull(etVMSSSLPort.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isPort(sslPort)){
|
||||
// showWarning("请输入有效的VMS-SSL端口号");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String misIpAddress = Objects.requireNonNull(etMISIp.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isIPAddr(misIpAddress)){
|
||||
// showWarning("请输入有效的MIS-IP地址");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String mistcpPort= Objects.requireNonNull(etMISTCPPort.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isPort(mistcpPort)){
|
||||
// showWarning("请输入有效的MIS-TCP端口号");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
// String missslPort= Objects.requireNonNull(etMISSSLPort.getText()).toString();
|
||||
// if(!AccountValidatorRegexUtil.INSTANCE.isPort(missslPort)){
|
||||
// showWarning("请输入有效的MIS-SSL端口号");
|
||||
// btnSaveSetting.revertAnimation();
|
||||
// return;
|
||||
// }
|
||||
boolean isEncrypted=true;
|
||||
|
||||
// 将属性字段更新到MINVpnAPI
|
||||
MINVpnSettingAPI.INSTANCE.updateMirIpAddress(mirIpAddress);
|
||||
MINVpnSettingAPI.INSTANCE.updateMirPort(Integer.parseInt(mirPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateFirstRouterPrefix(firstPrefix);
|
||||
MINVpnSettingAPI.INSTANCE.updateServicePrefix(servicePrefix);
|
||||
// MINVpnSettingAPI.INSTANCE.updateFirstRouterPrefix(firstPrefix);
|
||||
// MINVpnSettingAPI.INSTANCE.updateServicePrefix(servicePrefix);
|
||||
// 外网
|
||||
MINVpnSettingAPI.INSTANCE.updateExtranetMirIpAddress(mirIpAddressExtra);
|
||||
MINVpnSettingAPI.INSTANCE.updateExtranetMirPort(Integer.parseInt(mirPortExtra));
|
||||
MINVpnSettingAPI.INSTANCE.updateExtranetFirstRouterPrefix(firstPrefixExtra);
|
||||
MINVpnSettingAPI.INSTANCE.updateExtranetServicePrefix(servicePrefixExtra);
|
||||
MINVpnSettingAPI.INSTANCE.updateBlockChainIpAddress(blockChainIpAddress);
|
||||
MINVpnSettingAPI.INSTANCE.updateBcTcpPort(Integer.parseInt(tcpPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateBcSslPort(Integer.parseInt(sslPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateMisIpAddress(blockChainIpAddress);
|
||||
MINVpnSettingAPI.INSTANCE.updateMisTcpPort(Integer.parseInt(mistcpPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateMisSslPort(Integer.parseInt(missslPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateExtranetMirIpAddress(mirIpAddress);
|
||||
// MINVpnSettingAPI.INSTANCE.updateExtranetMirPort(Integer.parseInt(mirPortExtra));
|
||||
// MINVpnSettingAPI.INSTANCE.updateExtranetFirstRouterPrefix(firstPrefixExtra);
|
||||
// MINVpnSettingAPI.INSTANCE.updateExtranetServicePrefix(servicePrefixExtra);
|
||||
MINVpnSettingAPI.INSTANCE.updateBlockChainIpAddress(mirIpAddress);
|
||||
// MINVpnSettingAPI.INSTANCE.updateBcTcpPort(Integer.parseInt(tcpPort));
|
||||
// MINVpnSettingAPI.INSTANCE.updateBcSslPort(Integer.parseInt(sslPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateMisIpAddress(mirIpAddress);
|
||||
// MINVpnSettingAPI.INSTANCE.updateMisTcpPort(Integer.parseInt(mistcpPort));
|
||||
// MINVpnSettingAPI.INSTANCE.updateMisSslPort(Integer.parseInt(missslPort));
|
||||
MINVpnSettingAPI.INSTANCE.updateEncryptedConfig(isEncrypted);
|
||||
System.out.println(MINVpnSettingAPI.INSTANCE);
|
||||
|
||||
|
||||
@@ -119,6 +119,7 @@ public enum MISRequestAPI {
|
||||
public JSONObject getValidIdentityMIS(MISGetValidIdentityRequest request){
|
||||
// 1. 调用MIS-api,发送请求到MIS:ip tcpPort sslPort MISPubkey(可选,有默认key)
|
||||
AtomicReference<NetworkResponse> networkResponse = new AtomicReference<>();
|
||||
System.out.println("mis主机ip:"+MINVpnSettingAPI.INSTANCE.getMisIpAddress());
|
||||
Thread netRequestThread = new Thread(() -> {
|
||||
MIS_API mis_api = new MIS_API(MINVpnSettingAPI.INSTANCE.getMisIpAddress(),
|
||||
MINVpnSettingAPI.INSTANCE.getMisTcpPort(), MINVpnSettingAPI.INSTANCE.getMisSslPort());
|
||||
@@ -165,6 +166,7 @@ public enum MISRequestAPI {
|
||||
System.out.println("加密身份:"+jsonObject.getString("PrikeyEncrypted"));
|
||||
// base64解码
|
||||
byte[] encryptedIdentity= Base64Helper.Base64BasicDecode(resIdentity);
|
||||
jsonObject.put("encryptedIdentity",encryptedIdentity);
|
||||
return jsonObject;
|
||||
|
||||
//
|
||||
|
||||
@@ -24,6 +24,8 @@ import com.pkusz.min_vpn_client.utils.KeyManager;
|
||||
import com.pkusz.min_vpn_client.utils.SM2HelperForConnection;
|
||||
import com.pkusz.min_vpn_client.utils.SM3HelperForConnection;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
@@ -318,6 +320,7 @@ public class VpnIntranetPreparation implements VpnPreparationInterface{
|
||||
break;
|
||||
case 'd': // dns服务器
|
||||
builder.addDnsServer(fields[1]);
|
||||
// addRoutesExcept(builder, fields[1], 32);
|
||||
break;
|
||||
case 's':
|
||||
builder.addSearchDomain(fields[1]);
|
||||
@@ -364,6 +367,23 @@ public class VpnIntranetPreparation implements VpnPreparationInterface{
|
||||
return vpnInterface;
|
||||
}
|
||||
|
||||
private void addRoutesExcept(VpnService.Builder builder, String address, int prefixLength) {
|
||||
try {
|
||||
byte[] bytes = InetAddress.getByName(address).getAddress();
|
||||
for (int i = 0; i < prefixLength; i++) { // each entry
|
||||
byte[] res = new byte[bytes.length];
|
||||
for (int j = 0; j <= i; j++) { // each prefix bit
|
||||
res[j / 8] = (byte) (res[j / 8] | (bytes[j / 8] & (1 << (7 - (j % 8)))));
|
||||
}
|
||||
res[i / 8] ^= (1 << (7 - (i % 8)));
|
||||
|
||||
builder.addRoute(InetAddress.getByAddress(res), i + 1);
|
||||
}
|
||||
} catch (UnknownHostException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成一个连接指定服务器地址的TCP LogicFace,并进行标识注册
|
||||
* @param hostIP
|
||||
|
||||
@@ -72,29 +72,29 @@
|
||||
app:right_drawable="@drawable/delete"
|
||||
app:tinColor="@color/light_grey" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvRegisterNow"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="35dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:padding="5dp"
|
||||
android:text="@string/register_now"
|
||||
android:textColor="@color/colorPrimary"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvRegisterNow"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:layout_marginStart="35dp"-->
|
||||
<!-- android:layout_marginBottom="15dp"-->
|
||||
<!-- android:padding="5dp"-->
|
||||
<!-- android:text="@string/register_now"-->
|
||||
<!-- android:textColor="@color/colorPrimary"-->
|
||||
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tvResetNow"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="35dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
android:padding="5dp"
|
||||
android:text="@string/reset"
|
||||
android:textColor="@color/colorPrimary"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvResetNow"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:layout_marginEnd="35dp"-->
|
||||
<!-- android:layout_marginBottom="15dp"-->
|
||||
<!-- android:padding="5dp"-->
|
||||
<!-- android:text="@string/reset"-->
|
||||
<!-- android:textColor="@color/colorPrimary"-->
|
||||
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
|
||||
<!-- app:layout_constraintEnd_toEndOf="parent" />-->
|
||||
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvForgetPassword"-->
|
||||
|
||||
@@ -79,21 +79,21 @@
|
||||
<!-- app:layout_constraintLeft_toLeftOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent" />-->
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/globalProxy"
|
||||
android:layout_width="@dimen/dp_120"
|
||||
android:layout_height="@dimen/dp_50"
|
||||
android:hint="外访模式"
|
||||
android:textColorHint="@color/colorPrimary"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<!-- <RadioButton-->
|
||||
<!-- android:id="@+id/globalProxy"-->
|
||||
<!-- android:layout_width="@dimen/dp_120"-->
|
||||
<!-- android:layout_height="@dimen/dp_50"-->
|
||||
<!-- android:hint="外访模式"-->
|
||||
<!-- android:textColorHint="@color/colorPrimary"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent" />-->
|
||||
|
||||
<RadioButton
|
||||
android:id="@+id/serverSettingProxy"
|
||||
android:layout_width="@dimen/dp_120"
|
||||
android:layout_height="@dimen/dp_50"
|
||||
android:hint="内访模式"
|
||||
android:textColorHint="@color/colorPrimary"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
<!-- <RadioButton-->
|
||||
<!-- android:id="@+id/serverSettingProxy"-->
|
||||
<!-- android:layout_width="@dimen/dp_120"-->
|
||||
<!-- android:layout_height="@dimen/dp_50"-->
|
||||
<!-- android:hint="内访模式"-->
|
||||
<!-- android:textColorHint="@color/colorPrimary"-->
|
||||
<!-- app:layout_constraintTop_toTopOf="parent" />-->
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
|
||||
@@ -63,293 +63,293 @@
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration2" />
|
||||
|
||||
<!-- VPNServer 第一跳路由 服务前缀 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration3"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etPort" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration3"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etPort" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle3"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_firstrouter_service_prefix"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration3"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration3"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration3" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle3"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_firstrouter_service_prefix"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration3"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration3"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration3" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etFirstRouterPrefix"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_service_firstrouter_prefix_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle3"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration3" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etFirstRouterPrefix"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_service_firstrouter_prefix_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle3"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration3" />-->
|
||||
|
||||
<!-- VPNServer 服务前缀 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration4"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etFirstRouterPrefix" />
|
||||
<!-- <!– VPNServer 服务前缀 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration4"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etFirstRouterPrefix" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle4"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_service_prefix"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration4"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration4"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration4" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle4"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_service_prefix"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration4"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration4"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration4" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etServicePrefix"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_service_prefix_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle4"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration4" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etServicePrefix"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_service_prefix_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle4"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration4" />-->
|
||||
|
||||
<!-- 外网的IP 端口号 第一跳前缀 服务器前缀(通常第二跳) -->
|
||||
<!-- 外网 VPNServer 第一跳路由 IP地址 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration21"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etServicePrefix" />
|
||||
<!-- <!– 外网的IP 端口号 第一跳前缀 服务器前缀(通常第二跳) –>-->
|
||||
<!-- <!– 外网 VPNServer 第一跳路由 IP地址 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration21"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etServicePrefix" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle21"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_access_ip_address_extra"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration21"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration21"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration21" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle21"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_access_ip_address_extra"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration21"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration21"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration21" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etIpAddressExtranet"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_ip_address_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle21"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration21" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etIpAddressExtranet"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_ip_address_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle21"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration21" />-->
|
||||
|
||||
<!-- 外网 VPNServer 第一跳路由 端口号 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration22"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etIpAddressExtranet" />
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle22"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_access_port_extra"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration22"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration22"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration22" />
|
||||
<!-- <!– 外网 VPNServer 第一跳路由 端口号 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration22"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etIpAddressExtranet" />-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle22"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_access_port_extra"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration22"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration22"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration22" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etPortExtranet"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_port_example"
|
||||
android:inputType="number"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle22"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration22" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etPortExtranet"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_port_example"-->
|
||||
<!-- android:inputType="number"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle22"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration22" />-->
|
||||
|
||||
<!-- 外网 VPNServer 第一跳路由 服务前缀 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration23"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etPortExtranet" />
|
||||
<!-- <!– 外网 VPNServer 第一跳路由 服务前缀 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration23"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etPortExtranet" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle23"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_firstrouter_service_prefix_extra"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration23"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration23"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration23" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle23"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_firstrouter_service_prefix_extra"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration23"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration23"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration23" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etFirstRouterPrefixExtranet"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_service_firstrouter_prefix_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle23"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration23" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etFirstRouterPrefixExtranet"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_service_firstrouter_prefix_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle23"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration23" />-->
|
||||
|
||||
<!-- 外网 VPNServer 服务前缀 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration24"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etFirstRouterPrefixExtranet" />
|
||||
<!-- <!– 外网 VPNServer 服务前缀 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration24"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etFirstRouterPrefixExtranet" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle24"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_service_prefix_extra"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration24"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration24"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration24" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle24"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_service_prefix_extra"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration24"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration24"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration24" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etServicePrefixExtranet"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_service_prefix_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle24"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration24" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etServicePrefixExtranet"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_service_prefix_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle24"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration24" />-->
|
||||
|
||||
<!-- VMS IP地址 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration5"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etServicePrefixExtranet" />
|
||||
<!-- <!– VMS IP地址 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration5"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etServicePrefixExtranet" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle5"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_block_chain_ip_address"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration5"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration5"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration5" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle5"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_block_chain_ip_address"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration5"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration5"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration5" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etBlockChainIp"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_block_chain_ip_address_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle5"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration5" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etBlockChainIp"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_block_chain_ip_address_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle5"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration5" />-->
|
||||
|
||||
<!-- VMS TCP 端口号 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration6"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etBlockChainIp" />
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle6"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_vms_tcp_port"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration6"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration6"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration6" />
|
||||
<!-- <!– VMS TCP 端口号 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration6"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etBlockChainIp" />-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle6"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_vms_tcp_port"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration6"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration6"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration6" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etVMSTCPPort"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_block_chain_tcp_port_example"
|
||||
android:inputType="number"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle6"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration6" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etVMSTCPPort"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_block_chain_tcp_port_example"-->
|
||||
<!-- android:inputType="number"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle6"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration6" />-->
|
||||
|
||||
<!-- VMS SSL 端口号 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration7"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etVMSTCPPort" />
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle7"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_vms_ssl_port"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration7"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration7"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration7" />
|
||||
<!-- <!– VMS SSL 端口号 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration7"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etVMSTCPPort" />-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle7"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_vms_ssl_port"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration7"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration7"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration7" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etVMSSSLPort"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_block_chain_ssl_port_example"
|
||||
android:inputType="number"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle7"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration7" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etVMSSSLPort"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_block_chain_ssl_port_example"-->
|
||||
<!-- android:inputType="number"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle7"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration7" />-->
|
||||
|
||||
<!-- MIS IP地址 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration8"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etVMSSSLPort" />
|
||||
<!-- <!– MIS IP地址 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration8"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etVMSSSLPort" />-->
|
||||
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle8"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_mis_ip_address"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration8"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration8"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration8" />
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle8"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_mis_ip_address"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration8"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration8"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration8" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etMISIp"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_block_chain_ip_address_example"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle8"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration8" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etMISIp"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_block_chain_ip_address_example"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle8"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration8" />-->
|
||||
|
||||
<!-- MIS TCP 端口号 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration9"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etMISIp" />
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle9"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_mis_tcp_port"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration9"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration9"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration9" />
|
||||
<!-- <!– MIS TCP 端口号 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration9"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etMISIp" />-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle9"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_mis_tcp_port"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration9"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration9"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration9" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etMISTCPPort"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_mis_tcp_port_example"
|
||||
android:inputType="number"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle9"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration9" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etMISTCPPort"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_mis_tcp_port_example"-->
|
||||
<!-- android:inputType="number"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle9"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration9" />-->
|
||||
|
||||
<!-- MIS SSL 端口号 -->
|
||||
<TextView
|
||||
android:id="@+id/tvDecoration10"
|
||||
style="@style/setting_title_decoration"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/etMISTCPPort" />
|
||||
<TextView
|
||||
android:id="@+id/settingTvTitle10"
|
||||
style="@style/setting_title"
|
||||
android:text="@string/setting_title_mis_ssl_port"
|
||||
app:layout_constraintBottom_toTopOf="@+id/tvDecoration10"
|
||||
app:layout_constraintStart_toEndOf="@+id/tvDecoration10"
|
||||
app:layout_constraintTop_toBottomOf="@+id/tvDecoration10" />
|
||||
<!-- <!– MIS SSL 端口号 –>-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/tvDecoration10"-->
|
||||
<!-- style="@style/setting_title_decoration"-->
|
||||
<!-- app:layout_constraintStart_toStartOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/etMISTCPPort" />-->
|
||||
<!-- <TextView-->
|
||||
<!-- android:id="@+id/settingTvTitle10"-->
|
||||
<!-- style="@style/setting_title"-->
|
||||
<!-- android:text="@string/setting_title_mis_ssl_port"-->
|
||||
<!-- app:layout_constraintBottom_toTopOf="@+id/tvDecoration10"-->
|
||||
<!-- app:layout_constraintStart_toEndOf="@+id/tvDecoration10"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@+id/tvDecoration10" />-->
|
||||
|
||||
<cn.qjm253.quick_android_custom_view.other.ClearAbleEditText
|
||||
android:id="@+id/etMISSSLPort"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setting_mis_ssl_port_example"
|
||||
android:inputType="number"
|
||||
app:layout_constraintLeft_toLeftOf="@id/settingTvTitle10"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/tvDecoration10" />
|
||||
<!-- <cn.qjm253.quick_android_custom_view.other.ClearAbleEditText-->
|
||||
<!-- android:id="@+id/etMISSSLPort"-->
|
||||
<!-- android:layout_width="0dp"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- android:hint="@string/setting_mis_ssl_port_example"-->
|
||||
<!-- android:inputType="number"-->
|
||||
<!-- app:layout_constraintLeft_toLeftOf="@id/settingTvTitle10"-->
|
||||
<!-- app:layout_constraintRight_toRightOf="parent"-->
|
||||
<!-- app:layout_constraintTop_toBottomOf="@id/tvDecoration10" />-->
|
||||
|
||||
<br.com.simplepass.loadingbutton.customViews.CircularProgressButton
|
||||
android:id="@+id/btnSaveSetting"
|
||||
@@ -366,7 +366,7 @@
|
||||
app:initialCornerAngle="0dp"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/etMISSSLPort"
|
||||
app:layout_constraintTop_toBottomOf="@id/etPort"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:spinning_bar_color="#FFFFFF"
|
||||
app:spinning_bar_padding="4dp"
|
||||
|
||||
Reference in new issue
Block a user