From 428995e243fdf4a822c2e93935c75d0873b38434 Mon Sep 17 00:00:00 2001 From: level <1364007522@qq.com> Date: Wed, 18 Jun 2025 12:28:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=80=E9=94=AE=E8=BF=9E=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yingmao/clash/act/NewMainActivity.kt | 93 ++++++++++--------- .../com/yingmao/clash/act/SettingActivity.kt | 58 ++++++++++++ .../com/yingmao/clash/base/PublicViewMode.kt | 2 +- .../yingmao/clash/fragment/NewAccFragment.kt | 2 +- .../com/yingmao/clash/net/http/NetService.kt | 8 +- app/src/main/res/drawable/ic_refresh.xml | 9 ++ app/src/main/res/layout/activity_setting.xml | 62 +++++++++++-- .../main/res/layout/fragment_accelerate.xml | 7 +- app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 12 files changed, 187 insertions(+), 58 deletions(-) create mode 100644 app/src/main/res/drawable/ic_refresh.xml diff --git a/app/src/main/java/com/yingmao/clash/act/NewMainActivity.kt b/app/src/main/java/com/yingmao/clash/act/NewMainActivity.kt index 9015af0..5a2e049 100644 --- a/app/src/main/java/com/yingmao/clash/act/NewMainActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/NewMainActivity.kt @@ -31,7 +31,16 @@ import androidx.viewpager2.widget.ViewPager2 import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.customview.customView import com.afollestad.materialdialogs.customview.getCustomView -import com.airbnb.lottie.LottieAnimationView +import com.cncat.vpn.common.log.Log +import com.cncat.vpn.core.model.LogMessage +import com.cncat.vpn.service.ClashManager +import com.cncat.vpn.service.ProfileManager +import com.cncat.vpn.service.model.Profile +import com.cncat.vpn.service.remote.IClashManager +import com.cncat.vpn.service.remote.ILogObserver +import com.cncat.vpn.service.remote.IProfileManager +import com.cncat.vpn.service.remote.wrap +import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.gson.Gson import com.google.gson.JsonArray import com.google.gson.JsonObject @@ -41,14 +50,13 @@ import com.yingmao.clash.BuildConfig import com.yingmao.clash.R import com.yingmao.clash.app.MainApplication import com.yingmao.clash.base.BaseActivity -import com.cncat.vpn.common.log.Log import com.yingmao.clash.conf.BZYConstants import com.yingmao.clash.conf.Conf -import com.cncat.vpn.core.model.LogMessage +import com.yingmao.clash.entity.BannerImgBean import com.yingmao.clash.entity.CheckLoginRsp import com.yingmao.clash.fragment.NewAccFragment +import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE import com.yingmao.clash.fragment.mine.MineFragment -import com.yingmao.clash.fragment.recharge.BackupRechargeActivity import com.yingmao.clash.listener.DownLoadListener import com.yingmao.clash.net.http.HttpApi import com.yingmao.clash.net.http.HttpReqType @@ -58,35 +66,21 @@ import com.yingmao.clash.net.http.entity.AppVersionCheckRsp import com.yingmao.clash.net.http.entity.GetActivityRsp import com.yingmao.clash.net.http.entity.HeartBeatRsp import com.yingmao.clash.net.http.entity.PhDownloadUrlRsp +import com.yingmao.clash.net.http.entity.ShowNode import com.yingmao.clash.net.http.entity.SubscriptionRsp import com.yingmao.clash.net.http.entity.VipSignRsp import com.yingmao.clash.remote.Remote -import com.cncat.vpn.service.ClashManager -import com.cncat.vpn.service.ProfileManager -import com.cncat.vpn.service.model.Profile -import com.cncat.vpn.service.remote.IClashManager -import com.cncat.vpn.service.remote.ILogObserver -import com.cncat.vpn.service.remote.IProfileManager -import com.cncat.vpn.service.remote.wrap -import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.yingmao.clash.entity.BannerImgBean -import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE -import com.yingmao.clash.net.http.entity.ExpensesRecordRsp -import com.yingmao.clash.net.http.entity.ShowNode import com.yingmao.clash.util.AESUtil import com.yingmao.clash.util.CommonUtils import com.yingmao.clash.util.Utils import com.yingmao.clash.view.RxToast import com.yingmao.clash.view.adapter.MainVPAdapter import com.yingmao.clash.view.dialog.ActivityViewDialog -import com.yingmao.clash.view.dialog.ActivityViewDialog.OnDialogClickListener import com.yingmao.clash.view.dialog.DialogAppVersion import com.yingmao.clash.view.dialog.DialogBandChoose -import com.yingmao.clash.view.dialog.DialogNotice import com.yingmao.clash.view.dialog.HomeActivityDialog import com.yingmao.clash.view.dialog.RxDialogShapeLoading import com.yingmao.clash.vm.MainAtyVM -import com.yingmao.clash.webview.BZYWebViewKeFu import com.yingmao.clash.webview.BZYWebViewNormal import com.yingmao.clash.webview.CustomerServiceWebView import kotlinx.coroutines.Dispatchers @@ -133,10 +127,14 @@ class NewMainActivity : BaseActivity() { private var u_timerTask: TimerTask? = null private lateinit var clDeepSeek:ConstraintLayout private lateinit var floating:FloatingActionButton + var payResultLoading: RxDialogShapeLoading? = null + private var timerJob: Job? = null + private var loadingTimeoutNum = 3 companion object { //记录心跳失败次数 var HEART_BEAT_FAILURE_FREQUENCY = 0 const val REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY = 1000 + var isSubbed = false var isSubed = false var newUuid: String? = null var subUrl: String? = null @@ -495,8 +493,6 @@ class NewMainActivity : BaseActivity() { checkPayResultDia?.dismiss() mainAtyVM.getAirNodes() RxToast.info(resources.getString(R.string.SuccessfullyUpdatedUserInformation)) - - } else { // RxToast.info(resources.getString(R.string.PaymentResultsStr)) } @@ -983,9 +979,6 @@ class NewMainActivity : BaseActivity() { dialog.show() } - var payResultLoading: RxDialogShapeLoading? = null - private var timerJob: Job? = null - private var loadingTimeoutNum = 3 private fun showLoadingDialog(msg: String) { payResultLoading = RxDialogShapeLoading(this) payResultLoading!!.setMessage(msg) @@ -1199,42 +1192,58 @@ class NewMainActivity : BaseActivity() { startActivity(intent) } - public suspend fun setSub2(url: String) { - Log.d("setSub2 2") + private suspend fun setSub2(url: String) { profileBinder?.let { pm -> - Log.d("setSub2 3") pm.queryAll().forEach { itemPro -> - Log.d("setSub2 itemPro ==>${itemPro}") if (itemPro.name != Conf.getClashConfName(this@NewMainActivity.applicationContext)) { - Log.d("setSub2 delete ==>${itemPro.name}") pm.delete(itemPro.uuid) } } val pro = pm.queryActive() - Log.d("setSub2 4") + pro?.let { - var actname = it.name - Log.d("new main actname==>" + actname) - Log.d("setSub2 pro 已存在 ==>") pm.setActive(it) delay(500) + //判断配置文件source if (!TextUtils.isEmpty(pro.source)) { -// Log.d("setSub2 pro.source==>${pro.source}, url==>${url}") + Log.d("setSub2 pro.source==>${pro.source}, url==>${url}") + //订阅链接不同就更换 if (pro.source != url) { - Log.d("setSub2 patch") - pm.patch(pro.uuid, pro.name, url, 1800000L) + pm.patch( + pro.uuid, pro.name, + url, 1800000L + ) pm.commit(pro.uuid) { status -> - Log.d("setSub2 updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress) + android.util.Log.d( + Conf.TAG, + "new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress + ) } } } pm.update(it.uuid) - - newUuid = pro.uuid.toString(); - isSubed = true - Log.d("setSub2 setActive end") + newUuid = pro.uuid.toString() + isSubbed = true } ?: run { - createMyProfile(pm, url) + val uuid: UUID = pm.create( + Profile.Type.Url, Conf.getClashConfName(this@NewMainActivity.applicationContext) + ) + delay(500) + pm.queryByUUID(uuid)?.let { qPro -> + pm.setActive(qPro) + pm.patch( + qPro.uuid, qPro.name, + url, 1800000L + ) + pm.commit(qPro.uuid) { status -> + android.util.Log.d( + Conf.TAG, + "new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress + ) + } + newUuid = qPro.uuid.toString() + isSubbed = true + } } } } diff --git a/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt b/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt index a601c48..e8d2eb3 100644 --- a/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt @@ -54,11 +54,13 @@ 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.RxDialogShapeLoading import com.yingmao.clash.view.popwindow.CommonPopupWindow import com.yingmao.clash.vm.MainAtyVM import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.MainScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import java.io.File @@ -83,9 +85,11 @@ class SettingActivity : BaseActivity() { private lateinit var clyszc: ConstraintLayout private lateinit var clApplicationModeTitleStr: ConstraintLayout private lateinit var llControlApplication: ConstraintLayout + private lateinit var clSwitching:ConstraintLayout private lateinit var TVApplicationModeTxt:TextView private var popupWindow: CommonPopupWindow? = null private var layoutGravity: CommonPopupWindow.LayoutGravity? = null + var dialogDoMainChoose: DialogDoMainChoose? = null @RequiresApi(Build.VERSION_CODES.R) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -106,6 +110,13 @@ class SettingActivity : BaseActivity() { clApplicationModeTitleStr=findViewById(R.id.clApplicationModeTitleStr) llControlApplication=findViewById(R.id.llControlApplication) TVApplicationModeTxt=findViewById(R.id.TVApplicationModeTxt) + clSwitching=findViewById(R.id.clSwitching) + + clSwitching.setOnClickListener { + RxToast.info(getString(R.string.Switching)) + showDomainList() + } + clApplicationModeTitleStr.setOnClickListener { if (NewAccFragment.clashRunning) { RxToast.info("请关闭加速后再选择.") @@ -731,4 +742,51 @@ class SettingActivity : BaseActivity() { } + private fun showDomainList() { + try { + SplashHelper(mainAtyVM).getHostWithFallback { success -> + MainScope().launch { + if (success) { + if (dialogDoMainChoose == null) { + dialogDoMainChoose = DialogDoMainChoose(this@SettingActivity) + } + if (dialogDoMainChoose?.isShowing == false) { + dialogDoMainChoose?.setOnTryButtonListener(object : + DialogDoMainChoose.OnTryButtonListener { + override fun tryButton() { + RxToast.info(getString(R.string.ModificationFailed)) + dialogDoMainChoose?.dismiss() + } + + override fun cancel() { + dialogDoMainChoose?.dismiss() + } + }) + dialogDoMainChoose?.setOnListItemListener(object : + DialogDoMainChoose.OnListItemListener { + override fun listItemClick() { + RxToast.info(getString(R.string.StorageSuccessful)) + + MainApplication.restartApp(this@SettingActivity,object:MainApplication.OnRestartButtonListener{ + + override fun enterButton() { + + } + + override fun cancelButton() { + dialogDoMainChoose?.dismiss() + } + }) + } + + }) + dialogDoMainChoose?.show() + } + } + } + } + } catch (e: Exception) { + e.printStackTrace() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yingmao/clash/base/PublicViewMode.kt b/app/src/main/java/com/yingmao/clash/base/PublicViewMode.kt index 247f2bf..29ddd95 100644 --- a/app/src/main/java/com/yingmao/clash/base/PublicViewMode.kt +++ b/app/src/main/java/com/yingmao/clash/base/PublicViewMode.kt @@ -21,7 +21,7 @@ import java.util.ArrayList open class PublicViewMode : BaseViewMode() { fun getHost(callback: AsyncCallback) { val rt = - NetService.instances.createFreeBaseUrl("https://pubtofile.oss-cn-hongkong.aliyuncs.com/app_host/") + NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/") doAsyncNoNeedReturn(HttpReqType.GET_HOST) { try { //TODO bug 会引起崩溃 val host = when { diff --git a/app/src/main/java/com/yingmao/clash/fragment/NewAccFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/NewAccFragment.kt index 33f93ad..8c25652 100644 --- a/app/src/main/java/com/yingmao/clash/fragment/NewAccFragment.kt +++ b/app/src/main/java/com/yingmao/clash/fragment/NewAccFragment.kt @@ -152,7 +152,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis accelerateIv.setOnClickListener(this) refreshExpireIv=view.findViewById(R.id.refresh_expire_iv) tvDelayMs=view.findViewById(R.id.tvDelayMs) - refreshExpireIv.setOnClickListener { + tvEndTime.setOnClickListener { updateUserInfo() } setExpireDate() diff --git a/app/src/main/java/com/yingmao/clash/net/http/NetService.kt b/app/src/main/java/com/yingmao/clash/net/http/NetService.kt index 2940309..e05d3fa 100644 --- a/app/src/main/java/com/yingmao/clash/net/http/NetService.kt +++ b/app/src/main/java/com/yingmao/clash/net/http/NetService.kt @@ -93,10 +93,10 @@ class NetService private constructor() : INetService { // .sslSocketFactory(getSSLSocketFactory(), CustomTrustManager())//信任所有证书 .sslSocketFactory(getSSLSocketFactory(), trustAllCerts[0] as X509TrustManager) .hostnameVerifier(getHostnameVerifier()!!) -// if (BuildConfig.DEBUG) { -// builder.addInterceptor(loggingInterceptor) -// } - builder.addInterceptor(loggingInterceptor) + if (BuildConfig.DEBUG) { + builder.addInterceptor(loggingInterceptor) + } +// builder.addInterceptor(loggingInterceptor) return builder.build() } diff --git a/app/src/main/res/drawable/ic_refresh.xml b/app/src/main/res/drawable/ic_refresh.xml new file mode 100644 index 0000000..491c689 --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 0996732..881be51 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -114,9 +114,8 @@ app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="21dp" android:layout_marginEnd="21dp" - android:layout_marginTop="22dp" - android:layout_marginBottom="22dp" - app:layout_constraintBottom_toBottomOf="parent" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" > + + + + + + diff --git a/app/src/main/res/layout/fragment_accelerate.xml b/app/src/main/res/layout/fragment_accelerate.xml index 4ed2a34..8540024 100644 --- a/app/src/main/res/layout/fragment_accelerate.xml +++ b/app/src/main/res/layout/fragment_accelerate.xml @@ -55,14 +55,17 @@ android:layout_marginStart="10dp" android:textColor="@color/orange_FF8A04" android:textSize="16sp" - android:textStyle="bold" /> + android:textStyle="bold" + android:drawableRight="@drawable/ic_refresh" + android:drawablePadding="5dp" + /> Recommended route Route timeout AI Chat + Switching, please wait \ No newline at end of file diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index b0d5f79..d39cd69 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -385,4 +385,5 @@ 推薦線路 線路超時 AI 聊天 + 切換中,請稍後 \ No newline at end of file diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 4178ad0..0350e5c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -383,4 +383,5 @@ 推薦線路 線路超時 AI 聊天 + 切換中,請稍後 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 434c1ef..26f2554 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -409,4 +409,5 @@ 推荐线路 线路超时 AI聊天 + 切换中,请稍后 \ No newline at end of file