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 var dialogDoMainChoose: DialogDoMainChoose? = null
override fun httpFailure(httpStatus: HttpStatus.Failure) { override fun httpFailure(httpStatus: HttpStatus.Failure) {
super.httpFailure(httpStatus) super.httpFailure(httpStatus)
@ -455,8 +456,49 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
R.id.tv_register -> { R.id.tv_register -> {
// val intent = Intent(applicationContext, RegisterActivity::class.java) // val intent = Intent(applicationContext, RegisterActivity::class.java)
// startActivityForResult(intent, LOGIN_TO_REGISTER_REQUEST_CODE) // startActivityForResult(intent, LOGIN_TO_REGISTER_REQUEST_CODE)
//
if (TextUtils.isEmpty(registerHost)) { if (TextUtils.isEmpty(registerHost)) {
if (BuildConfig.is_tz) {
getTzRegister()
} else {
if (BuildConfig.is_ym) {
getYmRegister()
} else {
getBzyRegister()
}
}
} 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)) {
if (BuildConfig.is_tz) {
getTzKefu(mmkvHost)
} else {
if (BuildConfig.is_ym) {
getYmKefu(mmkvHost)
} else {
getBzyKefu(mmkvHost)
}
}
} else {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(kefuHost)))
}
}
R.id.tv_forget_pwd -> {
val intent = Intent(applicationContext, ForGetPwdActivity::class.java)
startActivity(intent)
}
}
}
}
private fun getYmRegister() {
var mmkvHost = MMKV.defaultMMKV() var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "") .decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}") // com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
@ -473,8 +515,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} }
override fun err() { override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
if (TextUtils.isEmpty(mmkvHost)) {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -486,34 +527,84 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} }
}) })
} else {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(registerHost)))
} }
private fun getTzRegister() {
}
R.id.tv_kefu -> {
if (TextUtils.isEmpty(kefuHost)) {
var mmkvHost = MMKV.defaultMMKV() var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "") .decodeString(BZYConstants.MMKV_KEY_REGISTER_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}") // com.cncat.vpn.common.log.Log.d("mmkvHost==>${mmkvHost}")
loginViewMode.getKefuHost(object : AsyncBodyCallback { loginViewMode.getTzRegisterHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) { override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}") // com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) { if (str != mmkvHost) {
MMKV.defaultMMKV() MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_KEFU_HOST, str) .encode(BZYConstants.MMKV_KEY_REGISTER_HOST, str)
} }
// mmkvHost = 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 kefuHost = str
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str))) startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(str)))
} }
override fun err() { override fun err() {
if (!TextUtils.isEmpty(mmkvHost)) {
if (TextUtils.isEmpty(mmkvHost)) {
startActivity( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, Intent.ACTION_VIEW,
@ -521,22 +612,56 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
) )
) )
} }
} }
}) })
} else {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(kefuHost)))
}
} }
R.id.tv_forget_pwd -> { private fun getBzyKefu(mmkvHost: String?) {
val intent = Intent(applicationContext, ForGetPwdActivity::class.java) loginViewMode.getBzyKefuHost(object : AsyncBodyCallback {
startActivity(intent) 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?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

View File

@ -10,6 +10,7 @@ import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig import com.yingmao.clash.BuildConfig
import com.yingmao.clash.conf.BZYConstants import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.DomainRsp import com.yingmao.clash.entity.DomainRsp
import com.yingmao.clash.listener.AsyncBodyCallback
import com.yingmao.clash.listener.AsyncCallback import com.yingmao.clash.listener.AsyncCallback
import com.yingmao.clash.net.http.HttpReqType import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.util.AESUtil import com.yingmao.clash.util.AESUtil
@ -34,9 +35,9 @@ open class PublicViewMode : BaseViewMode() {
rt.getHost() rt.getHost()
} else if (BuildConfig.is_tz) { } else if (BuildConfig.is_tz) {
rt.getHostTZ() rt.getTzHostTZ()
} else { } else {
rt.getHostDef() rt.getBzyHostDef()
} }
// Log.e("data", "2:$host") // Log.e("data", "2:$host")
host?.takeIf { it.isNotEmpty() }?.let { host?.takeIf { it.isNotEmpty() }?.let {
@ -68,11 +69,11 @@ open class PublicViewMode : BaseViewMode() {
} }
BuildConfig.is_tz -> { BuildConfig.is_tz -> {
rt.getHostTZ() rt.getTzHostGithub()
} }
else -> { else -> {
rt.getHostDef() rt.getBzyHostGithub()
} }
} }
host?.takeIf { it.isNotEmpty() }?.let { host?.takeIf { it.isNotEmpty() }?.let {
@ -104,11 +105,11 @@ open class PublicViewMode : BaseViewMode() {
} }
BuildConfig.is_tz -> { BuildConfig.is_tz -> {
rt.getHostTZ() rt.getTzHostAWS()
} }
else -> { else -> {
rt.getHostDef() rt.getBzyHostAWS()
} }
} }
host?.takeIf { it.isNotEmpty() }?.let { 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.LossPreventionActivity
import com.yingmao.clash.act.ShareActivity import com.yingmao.clash.act.ShareActivity
import com.yingmao.clash.act.SplashActivity import com.yingmao.clash.act.SplashActivity
import com.yingmao.clash.act.SplashHelper
import com.yingmao.clash.act.UIMainActivity import com.yingmao.clash.act.UIMainActivity
import com.yingmao.clash.act.UIMainActivity.Companion.isSubed import com.yingmao.clash.act.UIMainActivity.Companion.isSubed
import com.yingmao.clash.act.UIMainActivity.Companion.newUuid 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.util.DataUtils.getAllFilePath
import com.yingmao.clash.view.RxToast import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.adapter.LanguageAdapter 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.DialogNotice
import com.yingmao.clash.view.dialog.RxDialogShapeLoading import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.vm.MainAtyVM import com.yingmao.clash.vm.MainAtyVM
@ -81,6 +83,7 @@ import com.yingmao.clash.webview.BZYWebViewKeFu
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File 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.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.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.tvSubApplicationProxy).text = requireActivity().resources.getString(R.string.source_switch)
view.findViewById<TextView>(R.id.tvSubApplicationProxyStr).text = requireActivity().resources.getString(R.string.SubApplicationProxyStr) 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.tvLanguageSwitching).text = requireActivity().resources.getString(R.string.LanguageSwitching)
view.findViewById<TextView>(R.id.tvLanguageSwitchingStr).text = requireActivity().resources.getString(R.string.LanguageSwitchingStr) 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 { clSubApplicationProxy.setOnClickListener {
startActivity(Intent(requireActivity(), InstallApplicationActivity::class.java)) //改成备用切换
// startActivity(Intent(requireActivity(), InstallApplicationActivity::class.java))
showDomainList()
} }
clApplicationLanguage.setOnClickListener { clApplicationLanguage.setOnClickListener {
val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "") val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "")
@ -430,7 +435,38 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
cleanUserInfo() 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") @SuppressLint("SimpleDateFormat")
fun setExpireDate() { fun setExpireDate() {
val isExpire = checkExpire() val isExpire = checkExpire()

View File

@ -169,17 +169,35 @@ interface HttpApi {
suspend fun getHostGithub(): String suspend fun getHostGithub(): String
//八爪鱼 //八爪鱼
@GET("/hostdef.txt") @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") @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") @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") @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( // @Headers(
// "User-Agent: Octopus_Android" // "User-Agent: Octopus_Android"
// ) // )

View File

@ -99,14 +99,7 @@ class LoginAtyVM : PublicViewMode() {
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/") NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) { doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃 try { //TODO bug 会引起崩溃
var host = rt.getYmRegister()
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")
callback.suc(host) callback.suc(host)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
@ -114,23 +107,12 @@ class LoginAtyVM : PublicViewMode() {
} }
} }
} }
fun getTzRegisterHost(callback: AsyncBodyCallback) {
fun getKefuHost(callback: AsyncBodyCallback) {
val rt = val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/") NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) { doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃 try { //TODO bug 会引起崩溃
var host = rt.getTzRegister()
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")
callback.suc(host) callback.suc(host)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() 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) { // fun getHost(function: () -> Job) {
NetService.instances // NetService.instances
val rt = // val rt =
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/") // NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
//
doAsyncNoNeedReturn(HttpReqType.GET_HOST) { // doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃 // try { //TODO bug 会引起崩溃
val host = if (BuildConfig.is_ym) { // val host = if (BuildConfig.is_ym) {
rt.getHost() // rt.getHost()
} else { // } else {
rt.getHostDef() // rt.getHostDef()
} // }
if (!TextUtils.isEmpty(host)) { // if (!TextUtils.isEmpty(host)) {
val hostSet = host.split("+").toSet() // val hostSet = host.split("+").toSet()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet) // MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
} // }
//
} catch (e: Exception) { // } catch (e: Exception) {
e.printStackTrace() // e.printStackTrace()
} // }
} // }
} // }

View File

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

View File

@ -85,13 +85,14 @@ class BZYWebViewKeFu : BaseActivity() {
// } // }
// } // }
if (BuildConfig.is_tz) { if (BuildConfig.is_tz) {
webView.loadUrl("file:///android_asset/TZKeFu.html") // webView.loadUrl("file:///android_asset/TZKeFu.html")
getTzKefu()
} else { } else {
if (BuildConfig.is_ym) { if (BuildConfig.is_ym) {
ymKefu() ymKefu()
} else { } 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() var mmkvHost = MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "") .decodeString(BZYConstants.MMKV_KEY_KEFU_HOST, "")
// com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}") // com.cncat.vpn.common.log.Log.d("mmkvHost kf ==>${mmkvHost}")
webViewAtyVM.getKefuHost(object : AsyncBodyCallback { webViewAtyVM.getYmKefuHost(object : AsyncBodyCallback {
override suspend fun suc(str: String) { override suspend fun suc(str: String) {
// com.cncat.vpn.common.log.Log.d("str==>${str}") // com.cncat.vpn.common.log.Log.d("str==>${str}")
if (str != mmkvHost) { if (str != mmkvHost) {
@ -125,7 +126,105 @@ class BZYWebViewKeFu : BaseActivity() {
} }
override fun err() { 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( startActivity(
Intent( Intent(
Intent.ACTION_VIEW, 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:id="@+id/tvSubApplicationProxy"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/SubApplicationProxy" android:text="@string/source_switch"
android:textColor="@color/gray_828282" android:textColor="@color/gray_828282"
android:textSize="14sp" android:textSize="14sp"
android:textStyle="bold" android:textStyle="bold"
@ -931,7 +931,7 @@
android:id="@+id/tvSubApplicationProxyStr" android:id="@+id/tvSubApplicationProxyStr"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/SubApplicationProxyStr" android:text="@string/source_switch_str"
android:maxLines="1" android:maxLines="1"
android:ellipsize="end" android:ellipsize="end"
android:textColor="@color/gray_828282" 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">八爪鱼</string>
<string name="app_name_backcn">波斯猫回国加速器</string> <string name="app_name_backcn">波斯猫回国加速器</string>
<string name="app_name_gz">影猫</string> <string name="app_name_gz">影猫</string>
<string name="app_name_gz2">影猫加速器</string>
<string name="app_name_taizi">太子VPN</string> <string name="app_name_taizi">太子VPN</string>
<string name="file">file</string> <string name="file">file</string>
<string name="rule">rule</string> <string name="rule">rule</string>
@ -106,6 +107,7 @@
<string name="reminder">reminder</string> <string name="reminder">reminder</string>
<string name="UploadErrorLog">Upload error log</string> <string name="UploadErrorLog">Upload error log</string>
<string name="SubApplicationProxy">Sub application proxy</string> <string name="SubApplicationProxy">Sub application proxy</string>
<string name="source_switch">Source switching</string>
<string name="SelectAll">Select All</string> <string name="SelectAll">Select All</string>
<string name="LanguageSwitching">Application language</string> <string name="LanguageSwitching">Application language</string>
<string name="LanguageChinese">Simplified Chinese</string> <string name="LanguageChinese">Simplified Chinese</string>
@ -160,6 +162,7 @@
<string name="downloadEmpty">The download address is empty</string> <string name="downloadEmpty">The download address is empty</string>
<string name="NewVersion">New version detected, please update</string> <string name="NewVersion">New version detected, please update</string>
<string name="downloading">Downloading</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="giveMyPermission">Please grant storage permission, otherwise the file cannot be downloaded</string>
<string name="CopyToClipboard">Copy to clipboard</string> <string name="CopyToClipboard">Copy to clipboard</string>
<string name="StopAccelerating">Stop accelerating</string> <string name="StopAccelerating">Stop accelerating</string>
@ -331,6 +334,7 @@ Service Description\n
<string name="SignIn">Sign in</string> <string name="SignIn">Sign in</string>
<string name="InitializationRepairStr">Repair application</string> <string name="InitializationRepairStr">Repair application</string>
<string name="SubApplicationProxyStr">Set proxy for 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="LanguageSwitchingStr">Switch application language</string>
<string name="TelegramStr">Join Telegram group</string> <string name="TelegramStr">Join Telegram group</string>
<string name="OnlineCustomerService">Customer Service</string> <string name="OnlineCustomerService">Customer Service</string>

View File

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

View File

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

View File

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