1.一键连跟换内核

2.在启动时不能更换选择模式
This commit is contained in:
level 2025-09-22 17:59:24 +08:00
parent 6975284835
commit cb9217cea8
14 changed files with 79 additions and 46 deletions

View File

@ -15,7 +15,7 @@ dependencies {
implementation(fileTree(mapOf("dir" to "src/main/libs", "include" to listOf("*.aar")))) implementation(fileTree(mapOf("dir" to "src/main/libs", "include" to listOf("*.aar"))))
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
// implementation(files("src\\main\\libs\\Baidu_ocpc_action_2_7_2.aar")) // implementation(files("src\\main\\libs\\Baidu_ocpc_action_2_7_2.aar"))
implementation(files("src\\main\\libs\\OpenInstall.jar")) // implementation(files("src\\main\\libs\\OpenInstall.jar"))
// implementation("com.google.firebase:firebase-crashlytics-buildtools:3.0.2") // implementation("com.google.firebase:firebase-crashlytics-buildtools:3.0.2")
// implementation(files("src/main/libs/openinstall.jar")) // implementation(files("src/main/libs/openinstall.jar"))

View File

@ -38,6 +38,7 @@ import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.ClashNodebBean import com.yingmao.clash.entity.ClashNodebBean
import com.yingmao.clash.fragment.NewAccFragment import com.yingmao.clash.fragment.NewAccFragment
import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE
import com.yingmao.clash.fragment.NewAccFragment.Companion.clashRunning
import com.yingmao.clash.fragment.NewAccFragment.Companion.isGlo import com.yingmao.clash.fragment.NewAccFragment.Companion.isGlo
import com.yingmao.clash.remote.Resource import com.yingmao.clash.remote.Resource
import com.yingmao.clash.util.Utils import com.yingmao.clash.util.Utils
@ -126,13 +127,23 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener {
tvProA.setOnClickListener { tvProA.setOnClickListener {
if(!clashRunning){
setBackground(ProxyMode.PAC) setBackground(ProxyMode.PAC)
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false) MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
}else{
RxToast.info(resources.getString(R.string.closeRunningChoose))
}
} }
tvProj.setOnClickListener { tvProj.setOnClickListener {
if(!clashRunning){
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, true) MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, true)
setBackground(ProxyMode.GLOBAL) setBackground(ProxyMode.GLOBAL)
}else{
RxToast.info(resources.getString(R.string.closeRunningChoose))
}
} }
aiBack.setOnClickListener { aiBack.setOnClickListener {
@ -434,7 +445,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener {
} }
override fun cancelButton() { override fun cancelButton() {
doProfile(false) // doProfile(false)
} }
}) })

View File

@ -332,7 +332,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} }
} }
private fun initUserAgreementView(textView: TextView) { private fun initUserAgreementView(userAgreementCB: CheckBox) {
val config = resources.configuration val config = resources.configuration
val language = config.locale.language val language = config.locale.language
if (language.equals("en")) { if (language.equals("en")) {
@ -346,7 +346,8 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
24, 24,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
userAgreementCB.isChecked=true
val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java) val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java)
intent.putExtra( intent.putExtra(
BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_KEY_AGREEMENT,
@ -365,7 +366,8 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
resources.getString(R.string.AgreeAgreement).length, resources.getString(R.string.AgreeAgreement).length,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
userAgreementCB.isChecked=true
val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java) val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java)
intent.putExtra( intent.putExtra(
BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_KEY_AGREEMENT,
@ -380,8 +382,8 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
resources.getString(R.string.AgreeAgreement).length, resources.getString(R.string.AgreeAgreement).length,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
textView.movementMethod = LinkMovementMethod.getInstance() userAgreementCB.movementMethod = LinkMovementMethod.getInstance()
} else { } else {
val spannableStringBuilder = val spannableStringBuilder =
SpannableStringBuilder(resources.getString(R.string.AgreeAgreement)) SpannableStringBuilder(resources.getString(R.string.AgreeAgreement))
@ -389,11 +391,12 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
override fun onClick(view: View) { override fun onClick(view: View) {
spannableStringBuilder.setSpan( spannableStringBuilder.setSpan(
null, null,
2,
8, 8,
13,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
userAgreementCB.isChecked=true
val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java) val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java)
intent.putExtra( intent.putExtra(
BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_KEY_AGREEMENT,
@ -402,17 +405,18 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
startActivity(intent) startActivity(intent)
} }
} }
spannableStringBuilder.setSpan(clickableSpan, 2, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE) spannableStringBuilder.setSpan(clickableSpan, 8, 13, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
val privacyClickableSpan: MyClickableSpan = object : MyClickableSpan() { val privacyClickableSpan: MyClickableSpan = object : MyClickableSpan() {
override fun onClick(view: View) { override fun onClick(view: View) {
spannableStringBuilder.setSpan( spannableStringBuilder.setSpan(
null, null,
9, 14,
15, resources.getString(R.string.AgreeAgreement).length,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
userAgreementCB.isChecked=true
val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java) val intent = Intent(this@LoginActivity, AgreementAndPrivacyActivity::class.java)
intent.putExtra( intent.putExtra(
BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_KEY_AGREEMENT,
@ -423,12 +427,12 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} }
spannableStringBuilder.setSpan( spannableStringBuilder.setSpan(
privacyClickableSpan, privacyClickableSpan,
9, 14,
15, resources.getString(R.string.AgreeAgreement).length,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE Spannable.SPAN_EXCLUSIVE_INCLUSIVE
) )
textView.text = spannableStringBuilder userAgreementCB.text = spannableStringBuilder
textView.movementMethod = LinkMovementMethod.getInstance() userAgreementCB.movementMethod = LinkMovementMethod.getInstance()
} }
} }

View File

@ -1217,5 +1217,6 @@ class NewMainActivity : BaseActivity() {
} }
} }
clashBinder?.setLogObserver(null)
} }
} }

View File

@ -75,6 +75,17 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
const val CLASH_STOP = 33 const val CLASH_STOP = 33
var isGlo: Boolean = false var isGlo: Boolean = false
var clashRunning: Boolean = false var clashRunning: Boolean = false
var clashRec: BroadcastReceiver? = null
fun cleanRec(context: Context) {
clashRec?.let {
try {
context.unregisterReceiver(clashRec)
}catch (e: Exception){
e.printStackTrace()
}
}
}
} }
lateinit var accelerateViewModel: AccelerateViewModel lateinit var accelerateViewModel: AccelerateViewModel
@ -128,13 +139,14 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
intentFilter.addAction(Intents.ACTION_CLASH_REQUEST_STOP) intentFilter.addAction(Intents.ACTION_CLASH_REQUEST_STOP)
intentFilter.addAction(Intents.ACTION_Glo_Mode) intentFilter.addAction(Intents.ACTION_Glo_Mode)
intentFilter.addAction(Intents.ACTION_OVERRIDE_CHANGED) intentFilter.addAction(Intents.ACTION_OVERRIDE_CHANGED)
clashRec=ClashBP()
if (Build.VERSION.SDK_INT >= 34 && requireContext().applicationInfo.targetSdkVersion >= 34) { if (Build.VERSION.SDK_INT >= 34 && requireContext().applicationInfo.targetSdkVersion >= 34) {
requireContext().registerReceiver( requireContext().registerReceiver(
ClashBP(), intentFilter, Context.RECEIVER_EXPORTED clashRec, intentFilter, Context.RECEIVER_EXPORTED
) )
} else { } else {
requireContext().registerReceiver( requireContext().registerReceiver(
ClashBP(), intentFilter clashRec, intentFilter
) )
} }
} }
@ -721,4 +733,8 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
newMain.goBackupRechargeWeb() newMain.goBackupRechargeWeb()
} }
} }
override fun onDestroy() {
super.onDestroy()
cleanRec(requireContext())
}
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -421,5 +421,5 @@ In order to implement and strengthen awareness of personal information security
<string name="OrderDate">Order Date</string> <string name="OrderDate">Order Date</string>
<string name="MembershipValidityPeriod">Membership Validity Period:</string> <string name="MembershipValidityPeriod">Membership Validity Period:</string>
<string name="Gift">Gift</string> <string name="Gift">Gift</string>
<string name="closeRunningChoose">Please disconnect and switch modes</string>
</resources> </resources>

View File

@ -405,13 +405,13 @@
<string name="checkStr">請勾選復選框表明你同意刪除賬號</string> <string name="checkStr">請勾選復選框表明你同意刪除賬號</string>
<string name="WebPayment">Web Payment</string> <string name="WebPayment">網頁付款</string>
<string name="OrderNumber">Order Number:</string> <string name="OrderNumber">訂單號碼:</string>
<string name="DayVip">DayVip</string> <string name="DayVip">Vip</string>
<string name="hourVip">HourVip</string> <string name="hourVip">小时Vip</string>
<string name="PaymentMethods">Payment Methods:</string> <string name="PaymentMethods">付款方式:</string>
<string name="OrderDate">Order Date</string> <string name="OrderDate">訂單日期</string>
<string name="MembershipValidityPeriod">Membership Validity Period:</string> <string name="MembershipValidityPeriod">會員有效期限:</string>
<string name="Gift">Gift</string> <string name="Gift">禮品</string>
<string name="closeRunningChoose">請斷開連線後在進行模式切換</string>
</resources> </resources>

View File

@ -403,13 +403,13 @@
<string name="checkStr">請勾選復選框表明你同意刪除賬號</string> <string name="checkStr">請勾選復選框表明你同意刪除賬號</string>
<string name="WebPayment">Web Payment</string> <string name="WebPayment">網頁付款</string>
<string name="OrderNumber">Order Number:</string> <string name="OrderNumber">訂單號碼:</string>
<string name="DayVip">DayVip</string> <string name="DayVip">Vip</string>
<string name="hourVip">HourVip</string> <string name="hourVip">小时Vip</string>
<string name="PaymentMethods">Payment Methods:</string> <string name="PaymentMethods">付款方式:</string>
<string name="OrderDate">Order Date</string> <string name="OrderDate">訂單日期</string>
<string name="MembershipValidityPeriod">Membership Validity Period:</string> <string name="MembershipValidityPeriod">會員有效期限:</string>
<string name="Gift">Gift</string> <string name="Gift">禮品</string>
<string name="closeRunningChoose">請斷開連線後在進行模式切換</string>
</resources> </resources>

View File

@ -130,7 +130,7 @@
<string name="LoginFailed">登录失败</string> <string name="LoginFailed">登录失败</string>
<string name="CheckLoginFailure">检查登录失败</string> <string name="CheckLoginFailure">检查登录失败</string>
<string name="LoginException">登录异常</string> <string name="LoginException">登录异常</string>
<string name="AgreeAgreement">同意《隐私协议》和《用户协议》</string> <string name="AgreeAgreement">我已知晓并同意《隐私协议》和《用户协议》</string>
<string name="AgreeAgreement2">请您充分阅读并理解《隐私政策》和《用户协议》我们非常重视您的隐私和个人信息,在您使用过程中,我们会收集部分个人信息。例如,会申请设备信息等。您可以点击《用户协议》和《隐私政策》查看详细内容。您可以选择“同意”继续使用我们的服务,或者选择“不同意”退出。</string> <string name="AgreeAgreement2">请您充分阅读并理解《隐私政策》和《用户协议》我们非常重视您的隐私和个人信息,在您使用过程中,我们会收集部分个人信息。例如,会申请设备信息等。您可以点击《用户协议》和《隐私政策》查看详细内容。您可以选择“同意”继续使用我们的服务,或者选择“不同意”退出。</string>
<string name="ReadAgreement">请仔细阅读并同意《隐私协议》和《用户协议》</string> <string name="ReadAgreement">请仔细阅读并同意《隐私协议》和《用户协议》</string>
<string name="loginTips">小提示:自动注册初始密码为 123456手动注册请忽略</string> <string name="loginTips">小提示:自动注册初始密码为 123456手动注册请忽略</string>
@ -437,4 +437,5 @@
<string name="OrderDate">订单日期</string> <string name="OrderDate">订单日期</string>
<string name="MembershipValidityPeriod">会员有效期:</string> <string name="MembershipValidityPeriod">会员有效期:</string>
<string name="Gift">赠送</string> <string name="Gift">赠送</string>
<string name="closeRunningChoose">请断开连接后在进行模式切换</string>
</resources> </resources>

View File

@ -93,7 +93,7 @@ subprojects {
} }
productFlavors { productFlavors {
flavorDimensions("feature") flavorDimensions("feature")
create("8279") { create("5555") {
isDefault = true isDefault = true
dimension = flavorDimensionList[0] dimension = flavorDimensionList[0]
buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")") buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
@ -101,7 +101,7 @@ subprojects {
buildConfigField("boolean", "is_back_cn", "false") buildConfigField("boolean", "is_back_cn", "false")
buildConfigField("String", "applicationId", "\"com.jsq.wufu\"") buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"") buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
buildConfigField("String", "productId", "\"8279\"") buildConfigField("String", "productId", "\"5555\"")
manifestPlaceholders( manifestPlaceholders(
mapOf( mapOf(
"APP_NAME" to "@string/wf", "APP_NAME" to "@string/wf",
@ -112,7 +112,7 @@ subprojects {
} }
sourceSets { sourceSets {
getByName("8279") { getByName("5555") {
java.srcDirs("src/foss/java") java.srcDirs("src/foss/java")
} }
} }