1.添加太子和八爪鱼客服源

2.添加手动切换备用源
This commit is contained in:
cyh 2025-04-01 15:52:05 +08:00
parent 3927e4537c
commit 7839eee793
19 changed files with 470 additions and 139 deletions

View File

@ -152,6 +152,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
}
}
}
var dialogDoMainChoose: DialogDoMainChoose? = null
override fun httpFailure(httpStatus: HttpStatus.Failure) {
super.httpFailure(httpStatus)
@ -159,10 +160,10 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
SplashHelper(splashAtyVM).getHostWithFallback { success ->
MainScope().launch {
if (success) {
if (dialogDoMainChoose==null) {
if (dialogDoMainChoose == null) {
dialogDoMainChoose = DialogDoMainChoose(this@LoginActivity)
}
if (dialogDoMainChoose?.isShowing==false) {
if (dialogDoMainChoose?.isShowing == false) {
dialogDoMainChoose?.setOnTryButtonListener(object :
DialogDoMainChoose.OnTryButtonListener {
override fun tryButton() {
@ -179,7 +180,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
})
dialogDoMainChoose?.show()
}
}else{
} else {
if (::rxDialogShapeLoading.isInitialized && rxDialogShapeLoading.isShowing) {
rxDialogShapeLoading.cancel()
}
@ -455,76 +456,34 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
R.id.tv_register -> {
// val intent = Intent(applicationContext, RegisterActivity::class.java)
// startActivityForResult(intent, LOGIN_TO_REGISTER_REQUEST_CODE)
//
if (TextUtils.isEmpty(registerHost)) {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
loginViewMode.getRegisterHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_REGISTER_HOST, str)
}
// mmkvHost = str
registerHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
if (BuildConfig.is_tz) {
getTzRegister()
} else {
if (BuildConfig.is_ym) {
getYmRegister()
} else {
getBzyRegister()
}
override fun err() {
if (TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
} else {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(registerHost)))
}
}
R.id.tv_kefu -> {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
if (TextUtils.isEmpty(kefuHost)) {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
loginViewMode.getKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
// mmkvHost = str
kefuHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
if (BuildConfig.is_tz) {
getTzKefu(mmkvHost)
} else {
if (BuildConfig.is_ym) {
getYmKefu(mmkvHost)
} else {
getBzyKefu(mmkvHost)
}
override fun err() {
if (TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
} else {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(kefuHost)))
}
@ -539,6 +498,172 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
}
private fun getYmRegister() {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
loginViewMode.getRegisterHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_REGISTER_HOST, str)
}
// mmkvHost = str
registerHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
private fun getTzRegister() {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
loginViewMode.getTzRegisterHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_REGISTER_HOST, str)
}
// mmkvHost = str
registerHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
private fun getBzyRegister() {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
loginViewMode.getBzyRegisterHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_REGISTER_HOST, str)
}
// mmkvHost = str
registerHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
private fun getYmKefu(mmkvHost: String?) {
loginViewMode.getYmKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
kefuHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
private fun getBzyKefu(mmkvHost: String?) {
loginViewMode.getBzyKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
kefuHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
private fun getTzKefu(mmkvHost: String?) {
loginViewMode.getTzKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
kefuHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost)
)
)
}
}
})
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == LOGIN_TO_REGISTER_REQUEST_CODE) {

View File

@ -10,6 +10,7 @@ import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.DomainRsp
import com.yingmao.clash.listener.AsyncBodyCallback
import com.yingmao.clash.listener.AsyncCallback
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.util.AESUtil
@ -34,9 +35,9 @@ open class PublicViewMode : BaseViewMode() {
rt.getHost()
} else if (BuildConfig.is_tz) {
rt.getHostTZ()
rt.getTzHostTZ()
} else {
rt.getHostDef()
rt.getBzyHostDef()
}
// Log.e("data", "2:$host")
host?.takeIf { it.isNotEmpty() }?.let {
@ -68,11 +69,11 @@ open class PublicViewMode : BaseViewMode() {
}
BuildConfig.is_tz -> {
rt.getHostTZ()
rt.getTzHostGithub()
}
else -> {
rt.getHostDef()
rt.getBzyHostGithub()
}
}
host?.takeIf { it.isNotEmpty() }?.let {
@ -104,11 +105,11 @@ open class PublicViewMode : BaseViewMode() {
}
BuildConfig.is_tz -> {
rt.getHostTZ()
rt.getTzHostAWS()
}
else -> {
rt.getHostDef()
rt.getBzyHostAWS()
}
}
host?.takeIf { it.isNotEmpty() }?.let {
@ -181,4 +182,45 @@ open class PublicViewMode : BaseViewMode() {
// }
}
}
fun getYmKefuHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getYingMaoKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getTzKefuHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getTaiZiKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getBzyKefuHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getBzyKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
}

View File

@ -50,6 +50,7 @@ import com.yingmao.clash.act.LoginActivity
import com.yingmao.clash.act.LossPreventionActivity
import com.yingmao.clash.act.ShareActivity
import com.yingmao.clash.act.SplashActivity
import com.yingmao.clash.act.SplashHelper
import com.yingmao.clash.act.UIMainActivity
import com.yingmao.clash.act.UIMainActivity.Companion.isSubed
import com.yingmao.clash.act.UIMainActivity.Companion.newUuid
@ -74,6 +75,7 @@ import com.yingmao.clash.util.DataUtils
import com.yingmao.clash.util.DataUtils.getAllFilePath
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.adapter.LanguageAdapter
import com.yingmao.clash.view.dialog.DialogDoMainChoose
import com.yingmao.clash.view.dialog.DialogNotice
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.vm.MainAtyVM
@ -81,6 +83,7 @@ import com.yingmao.clash.webview.BZYWebViewKeFu
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File
@ -171,8 +174,8 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
view.findViewById<TextView>(R.id.tvUploadErrorLog).text = requireActivity().resources.getString(R.string.UploadErrorLog)
view.findViewById<TextView>(R.id.tvUploadErrorLogStr).text = requireActivity().resources.getString(R.string.UploadErrorLog)
view.findViewById<TextView>(R.id.tvSubApplicationProxy).text = requireActivity().resources.getString(R.string.SubApplicationProxy)
view.findViewById<TextView>(R.id.tvSubApplicationProxyStr).text = requireActivity().resources.getString(R.string.SubApplicationProxyStr)
view.findViewById<TextView>(R.id.tvSubApplicationProxy).text = requireActivity().resources.getString(R.string.source_switch)
view.findViewById<TextView>(R.id.tvSubApplicationProxyStr).text = requireActivity().resources.getString(R.string.source_switch_str)
view.findViewById<TextView>(R.id.tvLanguageSwitching).text = requireActivity().resources.getString(R.string.LanguageSwitching)
view.findViewById<TextView>(R.id.tvLanguageSwitchingStr).text = requireActivity().resources.getString(R.string.LanguageSwitchingStr)
@ -332,7 +335,9 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
}
}
clSubApplicationProxy.setOnClickListener {
startActivity(Intent(requireActivity(), InstallApplicationActivity::class.java))
//改成备用切换
// startActivity(Intent(requireActivity(), InstallApplicationActivity::class.java))
showDomainList()
}
clApplicationLanguage.setOnClickListener {
val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "")
@ -430,7 +435,38 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
cleanUserInfo()
}
}
var dialogDoMainChoose:DialogDoMainChoose? =null
private fun showDomainList() {
try {
SplashHelper(mainAtyVM).getHostWithFallback { success ->
MainScope().launch {
if (success) {
if (dialogDoMainChoose==null) {
dialogDoMainChoose = DialogDoMainChoose(activity)
}
if (dialogDoMainChoose?.isShowing==false) {
dialogDoMainChoose?.setOnTryButtonListener(object :
DialogDoMainChoose.OnTryButtonListener {
override fun tryButton() {
RxToast.info(getString(R.string.StorageSuccessful))
dialogDoMainChoose?.dismiss()
}
override fun cancel() {
dialogDoMainChoose?.dismiss()
}
})
dialogDoMainChoose?.show()
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
@SuppressLint("SimpleDateFormat")
fun setExpireDate() {
val isExpire = checkExpire()

View File

@ -169,17 +169,35 @@ interface HttpApi {
suspend fun getHostGithub(): String
//八爪鱼
@GET("/hostdef.txt")
suspend fun getHostDef(): String
suspend fun getBzyHostDef(): String
@GET("/hostdef.txt")
suspend fun getBzyHostAWS(): String
@GET("/ym-source/ym/main/hostdef.txt")
suspend fun getBzyHostGithub(): String
//太子
@GET("/hosttaizi.txt")
suspend fun getHostTZ(): String
suspend fun getTzHostTZ(): String
@GET("/hosttaizi.txt")
suspend fun getTzHostAWS(): String
@GET("/ym-source/ym/main/hosttaizi.txt")
suspend fun getTzHostGithub(): String
//注册链接
@GET("/ymregister.txt")
suspend fun getRegister(): String
suspend fun getYmRegister(): String
@GET("/taiziregister.txt")
suspend fun getTzRegister(): String
@GET("/bzyregister.txt")
suspend fun getBzyRegister(): String
//客服链接
@GET("/ymkefu.txt")
suspend fun getKefuHost(): String
suspend fun getYingMaoKefuHost(): String
@GET("/taizi_kefu.txt")
suspend fun getTaiZiKefuHost(): String
@GET("/bzy_kefu.txt")
suspend fun getBzyKefuHost(): String
// @Headers(
// "User-Agent: Octopus_Android"
// )

View File

@ -99,14 +99,7 @@ class LoginAtyVM : PublicViewMode() {
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getRegister()
// Log.e("data", "2:$host")
// if (!TextUtils.isEmpty(host)) {
// MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_REGISTER_HOST, host)
// }
// Log.e("data", "22:$host")
var host = rt.getYmRegister()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
@ -114,23 +107,12 @@ class LoginAtyVM : PublicViewMode() {
}
}
}
fun getKefuHost(callback: AsyncBodyCallback) {
fun getTzRegisterHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getKefuHost()
// Log.e("data", "2:$host")
// if (!TextUtils.isEmpty(host)) {
//
// MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_REGISTER_HOST, host)
// }
// Log.e("data", "22:$host")
var host = rt.getTzRegister()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
@ -138,4 +120,19 @@ class LoginAtyVM : PublicViewMode() {
}
}
}
fun getBzyRegisterHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getBzyRegister()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
}

View File

@ -43,28 +43,28 @@ class SplashAtyVM : PublicViewMode() {
}
}
fun getHost(function: () -> Job) {
NetService.instances
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
val host = if (BuildConfig.is_ym) {
rt.getHost()
} else {
rt.getHostDef()
}
if (!TextUtils.isEmpty(host)) {
val hostSet = host.split("+").toSet()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
// fun getHost(function: () -> Job) {
// NetService.instances
// val rt =
// NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
//
// doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
// try { //TODO bug 会引起崩溃
// val host = if (BuildConfig.is_ym) {
// rt.getHost()
// } else {
// rt.getHostDef()
// }
// if (!TextUtils.isEmpty(host)) {
// val hostSet = host.split("+").toSet()
// MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
// }
//
// } catch (e: Exception) {
// e.printStackTrace()
// }
// }
// }

View File

@ -27,17 +27,17 @@ import retrofit2.Callback
import retrofit2.Response
class WebViewAtyVM : PublicViewMode() {
fun getKefuHost(callback: AsyncBodyCallback) {
val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = rt.getKefuHost()
callback.suc(host)
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
// fun getKefuHost(callback: AsyncBodyCallback) {
// val rt =
// NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
// doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
// try { //TODO bug 会引起崩溃
// var host = rt.getYingMaoKefuHost()
// callback.suc(host)
// } catch (e: Exception) {
// e.printStackTrace()
// callback.err()
// }
// }
// }
}

View File

@ -85,13 +85,14 @@ class BZYWebViewKeFu : BaseActivity() {
// }
// }
if (BuildConfig.is_tz) {
webView.loadUrl("file:///android_asset/TZKeFu.html")
// webView.loadUrl("file:///android_asset/TZKeFu.html")
getTzKefu()
} else {
if (BuildConfig.is_ym) {
ymKefu()
} else {
webView.loadUrl("file:///android_asset/kefu.html")
// webView.loadUrl("file:///android_asset/kefu.html")
getBzyKefu()
}
}
@ -106,7 +107,7 @@ class BZYWebViewKeFu : BaseActivity() {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
webViewAtyVM.getKefuHost(object : AsyncBodyCallback {
webViewAtyVM.getYmKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
@ -125,7 +126,105 @@ class BZYWebViewKeFu : BaseActivity() {
}
override fun err() {
if (TextUtils.isEmpty(mmkvHost)) {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost + "&app_account=${enNmae}")
)
)
finish()
}
}
})
} else {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(kefuHost + "&app_account=${enNmae}")
)
)
finish()
}
}
private fun getBzyKefu(){
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")
var enNmae = URLEncoder.encode(userName, "UTF-8")
Log.d("enNmae==>${enNmae}")
if (TextUtils.isEmpty(kefuHost)) {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
webViewAtyVM.getBzyKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
// mmkvHost = str
kefuHost = str
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(str + "&app_account=${enNmae}")
)
)
finish()
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(mmkvHost + "&app_account=${enNmae}")
)
)
finish()
}
}
})
} else {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(kefuHost + "&app_account=${enNmae}")
)
)
finish()
}
}
private fun getTzKefu(){
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")
var enNmae = URLEncoder.encode(userName, "UTF-8")
Log.d("enNmae==>${enNmae}")
if (TextUtils.isEmpty(kefuHost)) {
var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
webViewAtyVM.getTzKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str)
}
// mmkvHost = str
kefuHost = str
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(str + "&app_account=${enNmae}")
)
)
finish()
}
override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
startActivity(
Intent(
Intent.ACTION_VIEW,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

After

Width:  |  Height:  |  Size: 261 KiB

View File

@ -922,7 +922,7 @@
android:id="@+id/tvSubApplicationProxy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/SubApplicationProxy"
android:text="@string/source_switch"
android:textColor="@color/gray_828282"
android:textSize="14sp"
android:textStyle="bold"
@ -931,7 +931,7 @@
android:id="@+id/tvSubApplicationProxyStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/SubApplicationProxyStr"
android:text="@string/source_switch_str"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/gray_828282"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -2,6 +2,7 @@
<string name="app_name">八爪鱼</string>
<string name="app_name_backcn">波斯猫回国加速器</string>
<string name="app_name_gz">影猫</string>
<string name="app_name_gz2">影猫加速器</string>
<string name="app_name_taizi">太子VPN</string>
<string name="file">file</string>
<string name="rule">rule</string>
@ -106,6 +107,7 @@
<string name="reminder">reminder</string>
<string name="UploadErrorLog">Upload error log</string>
<string name="SubApplicationProxy">Sub application proxy</string>
<string name="source_switch">Source switching</string>
<string name="SelectAll">Select All</string>
<string name="LanguageSwitching">Application language</string>
<string name="LanguageChinese">Simplified Chinese</string>
@ -160,6 +162,7 @@
<string name="downloadEmpty">The download address is empty</string>
<string name="NewVersion">New version detected, please update</string>
<string name="downloading">Downloading</string>
<string name="download">Downloading</string>
<string name="giveMyPermission">Please grant storage permission, otherwise the file cannot be downloaded</string>
<string name="CopyToClipboard">Copy to clipboard</string>
<string name="StopAccelerating">Stop accelerating</string>
@ -331,6 +334,7 @@ Service Description\n
<string name="SignIn">Sign in</string>
<string name="InitializationRepairStr">Repair application</string>
<string name="SubApplicationProxyStr">Set proxy for application</string>
<string name="source_switch_str">Fix network anomalies</string>
<string name="LanguageSwitchingStr">Switch application language</string>
<string name="TelegramStr">Join Telegram group</string>
<string name="OnlineCustomerService">Customer Service</string>

View File

@ -2,6 +2,7 @@
<string name="app_name">八爪魚</string>
<string name="app_name_backcn">波斯貓回國加速器</string>
<string name="app_name_gz">影貓</string>
<string name="app_name_gz2">影猫加速器</string>
<string name="app_name_taizi">太子VPN</string>
<string name="file">文件</string>
<string name="rule">規則</string>
@ -106,6 +107,7 @@
<string name="reminder">温馨提示</string>
<string name="UploadErrorLog">上傳錯誤日志</string>
<string name="SubApplicationProxy">分應用代理</string>
<string name="source_switch">源切換</string>
<string name="SelectAll">全部選取</string>
<string name="LanguageSwitching">應用語言</string>
<string name="LanguageChinese">簡體中文</string>
@ -159,6 +161,7 @@
<string name="downloadEmpty">下載地址爲空</string>
<string name="NewVersion">檢測到新版本,請更新.</string>
<string name="downloading">正在下載...</string>
<string name="download">正在下載</string>
<string name="giveMyPermission">請授予存儲權限,否則無法下載文件</string>
<string name="CopyToClipboard">已複製到剪切闆</string>
<string name="StopAccelerating">停止加速?</string>
@ -321,6 +324,7 @@
<string name="SignIn">簽到</string>
<string name="InitializationRepairStr">修復應用</string>
<string name="SubApplicationProxyStr">為應用設置代理</string>
<string name="source_switch_str">修復網絡异常</string>
<string name="LanguageSwitchingStr">切換應用語言</string>
<string name="TelegramStr">加入電報群</string>
<string name="OnlineCustomerService">在線客服</string>

View File

@ -3,6 +3,7 @@
<string name="app_name_backcn">波斯貓回國加速器</string>
<string name="app_name_gz">影貓</string>
<string name="app_name_gz2">影猫加速器</string>
<string name="app_name_taizi">太子</string>
<string name="file">文件</string>
<string name="rule">規則</string>
@ -107,6 +108,7 @@
<string name="reminder">温馨提示</string>
<string name="UploadErrorLog">上傳錯誤日志</string>
<string name="SubApplicationProxy">分應用代理</string>
<string name="source_switch">源切換</string>
<string name="SelectAll">全部選取</string>
<string name="LanguageSwitching">應用語言</string>
<string name="LanguageChinese">簡體中文</string>
@ -160,6 +162,7 @@
<string name="downloadEmpty">下載地址爲空</string>
<string name="NewVersion">檢測到新版本,請更新.</string>
<string name="downloading">正在下載...</string>
<string name="download">正在下載</string>
<string name="giveMyPermission">請授予存儲權限,否則無法下載文件</string>
<string name="CopyToClipboard">已複製到剪切闆</string>
<string name="StopAccelerating">停止加速?</string>
@ -320,6 +323,7 @@
<string name="SignIn">簽到</string>
<string name="InitializationRepairStr">修復應用</string>
<string name="SubApplicationProxyStr">為應用設置代理</string>
<string name="source_switch_str">修復網絡异常</string>
<string name="LanguageSwitchingStr">切換應用語言</string>
<string name="TelegramStr">加入電報群</string>
<string name="OnlineCustomerService">在線客服</string>

View File

@ -108,6 +108,7 @@
<string name="reminder">温馨提示</string>
<string name="UploadErrorLog">上传错误日志</string>
<string name="SubApplicationProxy">分应用代理</string>
<string name="source_switch">源切换</string>
<string name="SelectAll">全部选取</string>
<string name="LanguageSwitching">应用语言</string>
<string name="LanguageChinese">简体中文</string>
@ -339,6 +340,7 @@
<string name="SignIn">签到</string>
<string name="InitializationRepairStr">修复应用</string>
<string name="SubApplicationProxyStr">为应用设置代理</string>
<string name="source_switch_str">修复网络异常</string>
<string name="LanguageSwitchingStr">切换应用语言</string>
<string name="TelegramStr">加入电报群</string>
<string name="OnlineCustomerService">在线客服</string>