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