CUTV终版

This commit is contained in:
ZhanG committed 2023-12-27 15:36:45 +08:00
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();
@@ -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
+22 -22
View File
@@ -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"-->
+14 -14
View File
@@ -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>
+258 -258
View File
@@ -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" />
<!-- &lt;!&ndash; VPNServer 服务前缀 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; 外网的IP 端口号 第一跳前缀 服务器前缀(通常第二跳) &ndash;&gt;-->
<!-- &lt;!&ndash; 外网 VPNServer 第一跳路由 IP地址 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; 外网 VPNServer 第一跳路由 端口号 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; 外网 VPNServer 第一跳路由 服务前缀 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; 外网 VPNServer 服务前缀 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; VMS IP地址 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; VMS TCP 端口号 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; VMS SSL 端口号 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; MIS IP地址 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; MIS TCP 端口号 &ndash;&gt;-->
<!-- <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" />
<!-- &lt;!&ndash; MIS SSL 端口号 &ndash;&gt;-->
<!-- <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"