From ed7ba9068382a522a35f1671a08ff8ec2865648d Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Sat, 27 Dec 2025 14:59:55 +0800
Subject: [PATCH 1/6] =?UTF-8?q?=E6=9B=B4=E6=94=B9VPN=E6=9C=AA=E8=8E=B7?=
=?UTF-8?q?=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../clash/fragment/home/HomeFragment.kt | 12 +-
.../clash/fragment/setting/SettingFragment.kt | 2 +-
build.gradle.kts | 225 +-----------------
3 files changed, 10 insertions(+), 229 deletions(-)
diff --git a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
index b8b10b9..90788a9 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
@@ -446,23 +446,23 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
withContext(Dispatchers.Main){
hideLoading()
stateChanged(CLASH_STOP, false)
+ ivAccelerate.setImageResource(R.mipmap.yjl_home_clink_bg)
RxToast.info(resources.getString(R.string.vpnStartingError))
AppLog.i("NewAccFragment", "vpnRequest::VPN权限点击取消")
}
}
} else {
+ withContext(Dispatchers.Main) {
+ tvClick.text=resources.getString(R.string.Accelerating)
+ ivAccelerate.setImageResource(R.mipmap.yjl_home_clink_select_bg)
+ hideLoading()
+ }
accelerateViewModel.appStartupStatus()
}
} catch (e: Exception) {
stopUTimer()
e.printStackTrace()
}
- withContext(Dispatchers.Main) {
- tvClick.text=resources.getString(R.string.Accelerating)
- ivAccelerate.setImageResource(R.mipmap.yjl_home_clink_select_bg)
- hideLoading()
-// checkGlo()
- }
}
}
diff --git a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
index 509cfc2..a8927fe 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
@@ -226,7 +226,7 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
settingPageList.add(singItem)
settingPageList.add(serviceTermsItem)
settingPageList.add(sourceSwitchItem)
- settingPageList.add(upLoadData)
+// settingPageList.add(upLoadData)
settingPageList.add(privacyPolicyItem)
settingPageList.add(initializationItem)
settingPageList.add(customItem)
diff --git a/build.gradle.kts b/build.gradle.kts
index 18035cb..66f7c76 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -93,7 +93,7 @@ subprojects {
}
productFlavors {
flavorDimensions("feature")
- create("0000") {
+ create("0168") {
isDefault = true
dimension = flavorDimensionList[0]
buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
@@ -101,7 +101,7 @@ subprojects {
buildConfigField("boolean", "is_back_cn", "false")
buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"0000\"")
+ buildConfigField("String", "productId", "\"0168\"")
manifestPlaceholders(
mapOf(
"APP_NAME" to "@string/wf",
@@ -109,228 +109,9 @@ subprojects {
)
)
}
- create("1111") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"1111\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
- create("6666") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"6666\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
- create("7077") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"7077\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("5555") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"5555\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("2222") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"2222\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("9999") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"9999\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("11111") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"11111\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("2211") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"2211\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
- create("8088") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"8088\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("0214") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"0214\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
- create("9099") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"9099\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
- create("7777") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"7777\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
- create("2210") {
- isDefault = true
- dimension = flavorDimensionList[0]
- buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
- buildConfigField("boolean", "is_free", "false")
- buildConfigField("boolean", "is_back_cn", "false")
- buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
- buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"2210\"")
- manifestPlaceholders(
- mapOf(
- "APP_NAME" to "@string/wf",
- "APP_ICON" to "@mipmap/oneclickconnection"
- )
- )
- }
-
-
-
-
}
sourceSets {
- getByName("2211") {
+ getByName("0168") {
java.srcDirs("src/foss/java")
}
}
From 2a81375282890f539621b409899f3eba438b3c4a Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Mon, 29 Dec 2025 17:45:29 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=BA=90=E5=88=87?=
=?UTF-8?q?=E6=8D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/com/yingmao/clash/act/SplashActivity.kt | 2 +-
build.gradle.kts | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
index cee7254..7ad3dba 100644
--- a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
+++ b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
@@ -195,7 +195,7 @@ class SplashActivity : BaseActivity() {
}
// //对源地址加密操作
// val byteArrayToHexStr =
-// AESUtil.byteArrayToHexStr(AESUtil.encrypt("https://api.yijianlianjsq.com+https://yjl.kuaifei.net+https://api.onetouchjsq.com+https://yjlapi.anxuan009.com+https://yjl.jimao.xyz"))
+// AESUtil.byteArrayToHexStr(AESUtil.encrypt("https://api.yijianlianjsq.com+https://api.onetouchjsq.com+https://yjlapi.anxuan009.com"))
// android.util.Log.i("AAAAAAAAAAA","data:::"+byteArrayToHexStr)
}
diff --git a/build.gradle.kts b/build.gradle.kts
index 66f7c76..7da4385 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -93,7 +93,7 @@ subprojects {
}
productFlavors {
flavorDimensions("feature")
- create("0168") {
+ create("7788") {
isDefault = true
dimension = flavorDimensionList[0]
buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
@@ -101,7 +101,7 @@ subprojects {
buildConfigField("boolean", "is_back_cn", "false")
buildConfigField("String", "applicationId", "\"com.jsq.wufu\"")
buildConfigField("String", "service_url", "\"https://api.yijianlianjsq.com/\"")
- buildConfigField("String", "productId", "\"0168\"")
+ buildConfigField("String", "productId", "\"7788\"")
manifestPlaceholders(
mapOf(
"APP_NAME" to "@string/wf",
@@ -111,7 +111,7 @@ subprojects {
}
}
sourceSets {
- getByName("0168") {
+ getByName("7788") {
java.srcDirs("src/foss/java")
}
}
From 39e847335c16d47884244ee99f10acf4e0b9dc1a Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Tue, 30 Dec 2025 20:35:41 +0800
Subject: [PATCH 3/6] =?UTF-8?q?=E4=B8=80=E9=94=AE=E8=BF=9E=20=E6=97=A5?=
=?UTF-8?q?=E5=BF=97=E4=B8=8A=E4=BC=A0=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/MainActivity.kt | 23 +++--
.../clash/fragment/home/HomeFragment.kt | 30 ++++++-
.../clash/fragment/setting/SettingFragment.kt | 72 +++++-----------
.../java/com/yingmao/clash/levellog/AppLog.kt | 2 +-
.../yingmao/clash/levellog/LogcatService.kt | 83 +------------------
.../main/java/com/yingmao/clash/util/Utils.kt | 4 +
app/src/main/res/values/strings.xml | 4 +-
7 files changed, 74 insertions(+), 144 deletions(-)
diff --git a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
index 9800686..5045069 100644
--- a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
+++ b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
@@ -46,7 +46,6 @@ import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.CheckLoginRsp
-import com.yingmao.clash.entity.NodeGroupItem
import com.yingmao.clash.fragment.home.HomeFragment
import com.yingmao.clash.fragment.setting.SettingFragment
import com.yingmao.clash.fragment.vip.vipFragment
@@ -130,6 +129,7 @@ class MainActivity : BaseActivity() {
private var mainBroadcastReceiver: BroadcastReceiver? = null
val trafficStatisticsData = MutableLiveData()
suspend fun setSub2(url: String) {
+ try {
profileBinder?.let { pm ->
pm.queryAll().forEach { itemPro ->
if (itemPro.name != Conf.getClashConfName(MainApplication.getApp()?.applicationContext)) {
@@ -186,6 +186,9 @@ class MainActivity : BaseActivity() {
}
}
}
+ }catch (e: Exception){
+ AppLog.e("HomeFragment", "setSub2() Error===>",e)
+ }
}
}
@@ -233,8 +236,6 @@ class MainActivity : BaseActivity() {
requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
}
}
- //初始进入 将日志采集开关变为不开启
- MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, false)
}
inner class NodeListBR : BroadcastReceiver() {
@@ -285,7 +286,10 @@ class MainActivity : BaseActivity() {
aivHome.setImageResource(R.drawable.yjl_home_page_choose)
aivCenter.setImageResource(R.drawable.yjl_user_page)
aivVip.setImageResource(R.drawable.yjl_vip_page)
- checkVPN()
+ if(clashRunning){
+ checkVPN()
+ }
+
}
aivCenter.setOnClickListener {
@@ -294,7 +298,9 @@ class MainActivity : BaseActivity() {
aivHome.setImageResource(R.drawable.yjl_home_page)
aivCenter.setImageResource(R.drawable.yjl_user_page_choose)
aivVip.setImageResource(R.drawable.yjl_vip_page)
- checkVPN()
+ if(clashRunning){
+ checkVPN()
+ }
}
aivVip.setOnClickListener {
@@ -338,6 +344,7 @@ class MainActivity : BaseActivity() {
val data = httpStatus.rsp as SubscriptionRsp
if (data.code != "1000") {
RxToast.error(resources.getString(R.string.NodeAcquisitionFailed) + "${data.msg}")
+ AppLog.i("MainActivity", "httpSuccess GET_AIRNODES===>${data.msg}")
}
data.data.let { netSubUrl ->
if (netSubUrl.isNotEmpty()) {
@@ -515,6 +522,7 @@ class MainActivity : BaseActivity() {
when (httpStatus.reqType) {
HttpReqType.HEARTBEAT -> {
Logger.d("心跳失败")
+ AppLog.i("HomeFragment", " httpFailure HEARTBEAT===>${httpStatus.msg}")
if (5 <= HEART_BEAT_FAILURE_FREQUENCY) {
HEART_BEAT_FAILURE_FREQUENCY = 0
Logger.d("心跳失败次数超过10次,退出登录")
@@ -524,15 +532,18 @@ class MainActivity : BaseActivity() {
}
HttpReqType.CHECK_LOGIN -> {
+ AppLog.i("HomeFragment", " httpFailure CHECK_LOGIN===>${httpStatus.msg}")
payResultLoading?.dismiss()
RxToast.error(resources.getString(R.string.QueryFailed)+ httpStatus.msg)
}
HttpReqType.GET_AIRNODES -> {
+ AppLog.i("HomeFragment", " httpFailure GET_AIRNODES===>${httpStatus.msg}")
Logger.e("获取节点异常:${httpStatus.msg}")
}
HttpReqType.VIPSIGN -> {
+ AppLog.i("HomeFragment", " httpFailure VIPSIGN===>${httpStatus.msg}")
RxToast.error(resources.getString(R.string.CheckFailed) + httpStatus.msg)
}
@@ -806,7 +817,7 @@ class MainActivity : BaseActivity() {
}
fun checkVPN(){
val behaviorLogSwitch =
- MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, false)
+ MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, true)
if(behaviorLogSwitch){
launch(Dispatchers.IO) {
val isVPN =Utils.isVpnActive(this@MainActivity)
diff --git a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
index 90788a9..83530a5 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
@@ -12,7 +12,6 @@ import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.view.View
-import android.view.WindowManager
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
@@ -30,8 +29,10 @@ import androidx.lifecycle.lifecycleScope
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.customview.getCustomView
+import com.cncat.vpn.common.compat.startForegroundServiceCompat
import com.cncat.vpn.common.constants.Intents
import com.cncat.vpn.common.log.Log
+import com.cncat.vpn.common.util.intent
import com.cncat.vpn.core.Clash
import com.cncat.vpn.core.model.TunnelState
import com.cncat.vpn.service.model.Profile
@@ -50,12 +51,15 @@ import com.yingmao.clash.act.MainActivity.Companion.newUuid
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.act.MainActivity.Companion.subUrl
import com.yingmao.clash.act.NodeGroupActivity
+import com.yingmao.clash.app.MainApplication
import com.yingmao.clash.conf.BZYConstants
+import com.yingmao.clash.conf.BZYConstants.Companion.MMKV_KEY_REMEMBER_USERNAME
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.NodeGroupItem
import com.yingmao.clash.fragment.AccelerateViewModel
import com.yingmao.clash.fragment.BaseFragment
import com.yingmao.clash.levellog.AppLog
+import com.yingmao.clash.levellog.LogcatService
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.AppStartupStatus
@@ -77,6 +81,7 @@ import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import java.net.URL
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.atomic.AtomicInteger
@@ -298,7 +303,8 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
if (connectId != -1) {
accelerateViewModel.appStopStatus(connectId)
}
-
+ //关闭内核日志采集Service
+ requireActivity().stopService(LogcatService::class.intent)
}
rxDialogSureCancel.show()
@@ -333,7 +339,8 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
if(networkAvailable){
showLoading(resources.getString(R.string.Starting), requireContext())
startClash(true)
- //开启完毕之后开启定时器,
+ //开启完成之后开始采集日志
+ behaviorLog()
}else{
RxToast.error("网络不可用,请打开网络!")
AppLog.i("NewAccFragment", "networkAvailable ${networkAvailable}")
@@ -913,10 +920,12 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
when (httpStatus.reqType) {
HttpReqType.AppStartupStatus -> {
Log.d("AppStartupStatus is Failure ${httpStatus.msg}")
+ AppLog.i("HomeFragment", " httpFailure AppStartupStatus===>${httpStatus.msg}")
}
HttpReqType.AppStopStatus -> {
Log.d("AppStopStatus is Failure ${httpStatus.msg}")
+ AppLog.i("HomeFragment", " httpFailure AppStopStatus===>${httpStatus.msg}")
}
else -> {
@@ -1107,4 +1116,19 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
}
return mList
}
+ fun behaviorLog(){
+ //开启采集之后点击采集
+ MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, true)
+ val selectedName =
+ MMKV.defaultMMKV().decodeString(MMKV_KEY_REMEMBER_USERNAME, "")
+ val equipmentModel = Utils.getEquipmentModel()
+ val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
+ AppLog.i("HomeFragment", "selectedName===>${selectedName}")
+ AppLog.i("HomeFragment", "用户有效时长===>${validPeriod}")
+ AppLog.i("HomeFragment", "用户是否过期===>${checkExpire()}")
+ AppLog.i("HomeFragment", "机型数据===>${equipmentModel}")
+ AppLog.i("HomeFragment", "订阅连接地址===>${subUrl}")
+ AppLog.i("HomeFragment", "OAID===>${MainApplication.Companion.OAID}")
+ requireContext().startService(LogcatService::class.intent)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
index a8927fe..693163e 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
@@ -8,8 +8,6 @@ import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
-import android.os.Environment
-import android.provider.Settings
import android.text.TextUtils
import android.view.View
import android.widget.FrameLayout
@@ -22,8 +20,6 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import com.afollestad.materialdialogs.MaterialDialog
-import com.afollestad.materialdialogs.customview.customView
import com.alibaba.sdk.android.oss.ClientException
import com.alibaba.sdk.android.oss.OSSClient
import com.alibaba.sdk.android.oss.ServiceException
@@ -33,7 +29,6 @@ import com.alibaba.sdk.android.oss.common.auth.OSSStsTokenCredentialProvider
import com.alibaba.sdk.android.oss.internal.OSSAsyncTask
import com.alibaba.sdk.android.oss.model.PutObjectRequest
import com.alibaba.sdk.android.oss.model.PutObjectResult
-import com.cncat.vpn.common.compat.startForegroundServiceCompat
import com.cncat.vpn.common.log.Log
import com.cncat.vpn.common.util.intent
import com.hjq.permissions.OnPermissionCallback
@@ -47,21 +42,19 @@ import com.yingmao.clash.act.ActivityActivity
import com.yingmao.clash.act.AgreementAndPrivacyActivity
import com.yingmao.clash.act.BandPhoneActivity
import com.yingmao.clash.act.MainActivity
-import com.yingmao.clash.act.MainActivity.Companion.newUuid
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.act.MainActivity.Companion.setSub2
import com.yingmao.clash.act.MainActivity.Companion.subUrl
-import com.yingmao.clash.act.MainActivity.Companion.trafficStatisticsData
import com.yingmao.clash.act.SettingActivity
import com.yingmao.clash.act.ShareActivity
import com.yingmao.clash.act.SplashHelper
import com.yingmao.clash.app.MainApplication
-import com.yingmao.clash.levellog.LogcatService
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.SettingPageBean
import com.yingmao.clash.fragment.BaseFragment
import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.levellog.AppLog
+import com.yingmao.clash.levellog.LogcatService
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.ParamData
@@ -184,24 +177,11 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
R.drawable.switching_item_tag,
)
- val logDirParent = "applogs"
- val logDir = File(requireActivity().filesDir, logDirParent)
- val processName =getProcessName()
- val logFile = File(logDir, "$processName.log")
- val upLoadData = if(logFile.exists()){
- SettingPageBean(
- 7,
- "上传日志",
- R.drawable.user_uplog_icon,
- )
- }else{
- SettingPageBean(
- 7,
- "采集日志",
- R.drawable.user_uplog_icon,
- )
- }
-
+ val upLoadData =SettingPageBean(
+ 7,
+ "上传日志",
+ R.drawable.user_uplog_icon,
+ )
val privacyPolicyItem= SettingPageBean(
8,
resources.getString(R.string.PrivacyPolicy),
@@ -226,7 +206,7 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
settingPageList.add(singItem)
settingPageList.add(serviceTermsItem)
settingPageList.add(sourceSwitchItem)
-// settingPageList.add(upLoadData)
+ settingPageList.add(upLoadData)
settingPageList.add(privacyPolicyItem)
settingPageList.add(initializationItem)
settingPageList.add(customItem)
@@ -294,30 +274,21 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
}
7->{
- if(itemData.name=="上传日志"){
- showLoading(resources.getString(R.string.UploadingInProgress), requireActivity())
- mainAtyVM.getUploadParameters()
- settingPageList[itemData.type-1].name="采集日志"
- settingAdapter.notifyItemChanged(itemData.type-1)
- MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, false)
- requireActivity().stopService(LogcatService::class.intent)
+ val getIsGlo= MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
+ if(clashRunning&&getIsGlo){
+ RxToast.info("全局模式暂不支持上传日志,请切换到全局模式或关闭加速!")
}else{
- MaterialDialog(requireActivity()).show {
- this.cancelable(true)
- cornerRadius(res = R.dimen.dp_15)
- customView(
- R.layout.logsings_dialog_layout,
- scrollable = false,
- noVerticalPadding = true,
- horizontalPadding = false
- )
- val tvSure = findViewById(R.id.tvSure)
- tvSure.setOnClickListener {
- settingPageList[itemData.type-1].name="上传日志"
- settingAdapter.notifyItemChanged(itemData.type-1)
- requireActivity().startForegroundServiceCompat(LogcatService::class.intent)
- dismiss()
- }
+
+ val logDirParent = "applogs"
+ val logDir = File(requireActivity().filesDir, logDirParent)
+ val processName =getProcessName()
+ val logFile = File(logDir, "$processName.log")
+ if(logFile.exists()){
+ showLoading(resources.getString(R.string.UploadingInProgress), requireActivity())
+ mainAtyVM.getUploadParameters()
+ requireActivity().stopService(LogcatService::class.intent)
+ }else{
+ RxToast.info("暂时未采集到相关日志数据")
}
}
}
@@ -873,7 +844,6 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
hideLoading()
val deleteFile = DataUtils.deleteFile(filePath)
Log.i("PutObjectRequest deleteFile ${deleteFile}")
- AppLog.i("LogcatService", "删除删除成功deleteFile::${deleteFile}")
MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, false)
RxToast.info(resources.getString(R.string.BehaviorLogSuccessfully))
}
diff --git a/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt b/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
index f59a154..c4467f6 100644
--- a/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
+++ b/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
@@ -28,7 +28,7 @@ object AppLog {
tr: Throwable?
) {
val behaviorLogSwitch =
- MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, false)
+ MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, true)
if(behaviorLogSwitch){
LogDispatcher.enqueue(
LogEvent(
diff --git a/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt b/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
index b604a6f..f782d47 100644
--- a/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
+++ b/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
@@ -1,6 +1,5 @@
package com.yingmao.clash.levellog
-import android.app.PendingIntent
import android.app.Service
import android.content.ComponentName
import android.content.Intent
@@ -11,25 +10,12 @@ import android.os.IBinder
import android.os.IInterface
import android.util.Log
import androidx.annotation.RequiresApi
-import androidx.core.app.NotificationChannelCompat
-import androidx.core.app.NotificationCompat
-import androidx.core.app.NotificationManagerCompat
-import com.cncat.vpn.common.compat.getColorCompat
-import com.cncat.vpn.common.compat.pendingIntentFlags
-import com.cncat.vpn.common.compat.startForegroundCompat
import com.cncat.vpn.common.util.intent
import com.cncat.vpn.core.model.LogMessage
import com.cncat.vpn.service.RemoteService
import com.cncat.vpn.service.remote.ILogObserver
import com.cncat.vpn.service.remote.IRemoteService
import com.cncat.vpn.service.remote.unwrap
-import com.tencent.mmkv.MMKV
-import com.yingmao.clash.R
-import com.yingmao.clash.act.MainActivity
-import com.yingmao.clash.act.SettingActivity
-import com.yingmao.clash.app.MainApplication
-import com.yingmao.clash.conf.BZYConstants
-import com.yingmao.clash.util.Utils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.NonCancellable
@@ -46,7 +32,6 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
Log.i("LogcatServiceClose","onServiceDisconnected::${name}")
stopSelf()
}
-
@RequiresApi(Build.VERSION_CODES.KITKAT)
override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
Log.i("LogcatServiceConnect","onServiceConnected::${name}")
@@ -56,25 +41,13 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
override fun onCreate() {
super.onCreate()
-
- running = true
-
- createNotificationChannel()
-
- showNotification()
-
bindService(RemoteService::class.intent, connection, BIND_AUTO_CREATE)
}
override fun onDestroy() {
cancel()
-
unbindService(connection)
-
- stopForeground(true)
-
- running = false
-
+ stopSelf()
super.onDestroy()
}
@@ -100,14 +73,6 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
val channel = Channel(CACHE_CAPACITY)
try {
- MMKV.defaultMMKV().encode(BZYConstants.Companion.BehaviorLogSwitch, true)
- val selectedName =
- MMKV.defaultMMKV().decodeString(BZYConstants.Companion.NODE_SELECTED_NAME_KEY, "")
- val equipmentModel = Utils.getEquipmentModel()
- AppLog.i("LogcatService", "selectedName===>${selectedName}")
- AppLog.i("LogcatService", "用户是否过期===>${checkExpire()}")
- AppLog.i("LogcatService", "机型数据===>${equipmentModel}")
- AppLog.i("LogcatService", "OAID===>${MainApplication.Companion.OAID}")
val observer = object : ILogObserver {
override fun newItem(log: LogMessage) {
channel.trySend(log)
@@ -117,6 +82,7 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
while (isActive) {
val msg = channel.receive()
AppLog.i("LogcatServiceMsg", "core msg===>${msg}")
+ Log.i("LogcatServiceMsg","core msg===>${msg}")
}
} catch (e: IOException) {
Log.e("Write log file: $e", e.toString())
@@ -131,52 +97,7 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
}
}
- private fun createNotificationChannel() {
- NotificationManagerCompat.from(this)
- .createNotificationChannel(
- NotificationChannelCompat.Builder(
- CHANNEL_ID,
- NotificationManagerCompat.IMPORTANCE_DEFAULT
- ).setName(getString(R.string.clash_logcat)).build()
- )
- }
-
- private fun showNotification() {
- val notification = NotificationCompat
- .Builder(this, CHANNEL_ID)
- .setSmallIcon(R.mipmap.oneclickconnection)
- .setColor(getColorCompat(R.color.color_clash))
- .setContentTitle(getString(R.string.clash_logcat))
- .setContentText("采集中")
- .setContentIntent(
- PendingIntent.getActivity(
- this,
- R.id.nf_logcat_status,
- MainActivity::class.intent
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP or Intent.FLAG_ACTIVITY_CLEAR_TOP),
- pendingIntentFlags(PendingIntent.FLAG_UPDATE_CURRENT)
- )
- )
- .build()
-
- startForegroundCompat(R.id.nf_logcat_status, notification)
- }
-
companion object {
- private const val CHANNEL_ID = "clash_logcat_channel_id"
private const val CACHE_CAPACITY = 129
-
- var running: Boolean = false
- }
- private fun checkExpire(): Boolean {
- val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.Companion.MMKV_KEY_VPN_VALID_PERIOD)
- if (validPeriod > 0) {
- val nowTime = System.currentTimeMillis();
- com.cncat.vpn.common.log.Log.d("validPeriod==>$validPeriod, nowTime==>$nowTime")
- if (validPeriod >= nowTime) {
- return false
- }
- }
- return true
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/util/Utils.kt b/app/src/main/java/com/yingmao/clash/util/Utils.kt
index a1b546e..6c46531 100644
--- a/app/src/main/java/com/yingmao/clash/util/Utils.kt
+++ b/app/src/main/java/com/yingmao/clash/util/Utils.kt
@@ -15,8 +15,12 @@ import android.view.View
import android.view.ViewGroup
import androidx.annotation.RequiresApi
import com.yingmao.clash.levellog.AppLog
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
import okhttp3.OkHttpClient
import okhttp3.Request
+import org.json.JSONObject
+import java.net.Inet4Address
import java.net.NetworkInterface
import java.nio.charset.StandardCharsets
import java.security.MessageDigest
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 530b960..94ae3be 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -492,8 +492,8 @@
模式切换中
模式切换成功
- 行为日志上传成功!
- 行为日志上传失败!
+ 日志上传成功!
+ 日志上传失败!
VPN权限未允许 请设置允许!
请关闭加速后在切换节点
\ No newline at end of file
From c8c9885837abfd65089328ecb6f6a036c9e22e7f Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Tue, 30 Dec 2025 20:49:33 +0800
Subject: [PATCH 4/6] =?UTF-8?q?=E4=B8=80=E9=94=AE=E8=BF=9E=20=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt b/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
index f782d47..2f5c4ad 100644
--- a/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
+++ b/app/src/main/java/com/yingmao/clash/levellog/LogcatService.kt
@@ -82,7 +82,6 @@ class LogcatService : Service(), CoroutineScope by CoroutineScope(Dispatchers.De
while (isActive) {
val msg = channel.receive()
AppLog.i("LogcatServiceMsg", "core msg===>${msg}")
- Log.i("LogcatServiceMsg","core msg===>${msg}")
}
} catch (e: IOException) {
Log.e("Write log file: $e", e.toString())
From 20cd429db0aa61582078e21c2ebdf8628b287e9d Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Wed, 31 Dec 2025 11:36:39 +0800
Subject: [PATCH 5/6] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=AD=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/yingmao/clash/fragment/setting/SettingFragment.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
index 693163e..ab6ce12 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
@@ -276,7 +276,7 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
7->{
val getIsGlo= MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
if(clashRunning&&getIsGlo){
- RxToast.info("全局模式暂不支持上传日志,请切换到全局模式或关闭加速!")
+ RxToast.info("全局模式暂不支持上传日志,请切换到智能模式或关闭加速!")
}else{
val logDirParent = "applogs"
From ac3d72343a24304f28da9b43975d086c764e3b4a Mon Sep 17 00:00:00 2001
From: 11111 <1364007522@qq.com>
Date: Wed, 31 Dec 2025 15:21:58 +0800
Subject: [PATCH 6/6] =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=87=87=E9=9B=86=20?=
=?UTF-8?q?=E9=87=87=E9=9B=86=E5=90=AF=E5=8A=A8=E9=A1=B5,=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E9=A1=B5,=E9=A6=96=E9=A1=B5=E7=BD=91=E7=BB=9C?=
=?UTF-8?q?=E8=AF=B7=E6=B1=82=E6=97=A5=E5=BF=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/yingmao/clash/act/LoginActivity.kt | 8 +++--
.../com/yingmao/clash/act/MainActivity.kt | 30 +++++++++----------
.../com/yingmao/clash/act/SplashActivity.kt | 13 ++++++++
.../com/yingmao/clash/conf/BZYConstants.kt | 1 -
.../clash/fragment/home/HomeFragment.kt | 25 ++++++++--------
.../clash/fragment/setting/SettingFragment.kt | 17 +++++++++--
.../java/com/yingmao/clash/levellog/AppLog.kt | 21 +++++--------
7 files changed, 70 insertions(+), 45 deletions(-)
diff --git a/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt b/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt
index 929dce1..3cfc1f9 100644
--- a/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt
+++ b/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt
@@ -17,7 +17,6 @@ import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.*
-import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
@@ -51,6 +50,7 @@ import java.io.File
import androidx.core.graphics.toColorInt
import androidx.core.net.toUri
import com.google.android.material.floatingactionbutton.FloatingActionButton
+import com.yingmao.clash.levellog.AppLog
class LoginActivity : BaseActivity(), View.OnClickListener {
private lateinit var loginViewMode: LoginAtyVM
@@ -114,7 +114,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
super.httpSuccess(httpStatus)
if (httpStatus.reqType == HttpReqType.LOGIN) {
val rsp = httpStatus.rsp
- com.cncat.vpn.common.log.Log.d("HttpReqType.LOGIN rsp==>${rsp}")
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.LOGIN ${rsp}")
if (rsp is LoginRsp) {
if (rsp.code == "1000") {
val mmkv = MMKV.defaultMMKV()
@@ -135,6 +135,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} else if (httpStatus.reqType == HttpReqType.CHECK_LOGIN) {
hideLoadingDialog()
val rsp = httpStatus.rsp
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.CHECK_LOGIN ${rsp}")
if (rsp is CheckLoginRsp) {
if (rsp.code == 0) {
rsp.data?.let { MainApplication.setUserInfo(it) }
@@ -161,6 +162,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
} else if (httpStatus.reqType == HttpReqType.GETAPPVERION) {
(httpStatus.rsp as AppVersionCheckRsp).let { aver ->
com.cncat.vpn.common.log.Log.i("appVersionCheck ==>$aver")
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.GETAPPVERION ${aver}")
if (aver.code == 200) {
aver.data?.let { md ->
if (md.isForce) { //强制更新
@@ -182,6 +184,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
override fun httpFailure(httpStatus: HttpStatus.Failure) {
super.httpFailure(httpStatus)
if (httpStatus.reqType == HttpReqType.LOGIN) {
+ AppLog.i("SplashActivity", "httpFailure HttpReqType.LOGIN ${httpStatus.msg}")
SplashHelper(splashAtyVM).getHostWithFallback { success ->
MainScope().launch {
if (success) {
@@ -229,6 +232,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
}
}
} else if (httpStatus.reqType == HttpReqType.CHECK_LOGIN) {
+ AppLog.i("SplashActivity", "httpFailure HttpReqType.CHECK_LOGIN ${httpStatus.msg}")
if (::rxDialogShapeLoading.isInitialized && rxDialogShapeLoading.isShowing) {
rxDialogShapeLoading.cancel()
}
diff --git a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
index 5045069..be0af5e 100644
--- a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
+++ b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt
@@ -47,6 +47,7 @@ import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.CheckLoginRsp
import com.yingmao.clash.fragment.home.HomeFragment
+import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.fragment.setting.SettingFragment
import com.yingmao.clash.fragment.vip.vipFragment
import com.yingmao.clash.levellog.AppLog
@@ -89,9 +90,6 @@ import java.util.UUID
class MainActivity : BaseActivity() {
private lateinit var mainAtyVM: MainAtyVM
private var payResultLoading: RxDialogShapeLoading? = null
- private val clashRunning: Boolean
- get() = Remote.broadcasts.clashRunning
-
private var timer: Timer? = null
private var uTimerTask: TimerTask? = null
private var newMainActGlo: Boolean = false
@@ -298,6 +296,7 @@ class MainActivity : BaseActivity() {
aivHome.setImageResource(R.drawable.yjl_home_page)
aivCenter.setImageResource(R.drawable.yjl_user_page_choose)
aivVip.setImageResource(R.drawable.yjl_vip_page)
+ Log.i("AAAAAAAAAAAAAAAAAAA clashRunning${clashRunning}")
if(clashRunning){
checkVPN()
}
@@ -342,6 +341,7 @@ class MainActivity : BaseActivity() {
when (httpStatus.reqType) {
HttpReqType.GET_AIRNODES -> {
val data = httpStatus.rsp as SubscriptionRsp
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.GET_AIRNODES ${data}")
if (data.code != "1000") {
RxToast.error(resources.getString(R.string.NodeAcquisitionFailed) + "${data.msg}")
AppLog.i("MainActivity", "httpSuccess GET_AIRNODES===>${data.msg}")
@@ -373,6 +373,7 @@ class MainActivity : BaseActivity() {
HttpReqType.GetActivity -> {
val data = httpStatus.rsp as GetActivityRsp
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.GetActivity ${data}")
if (data.code == 200) {
if (data.data.data.list.isNotEmpty()) {
data.data.data.list[0].redirectLink.let {
@@ -400,6 +401,7 @@ class MainActivity : BaseActivity() {
HttpReqType.CHECK_LOGIN -> {
(httpStatus.rsp as CheckLoginRsp).let { checkLoginRsp ->
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.CHECK_LOGIN ${checkLoginRsp}")
if (checkLoginRsp.code == 0) {
val mmkv = MMKV.defaultMMKV()
val oldExpireTime =
@@ -433,6 +435,7 @@ class MainActivity : BaseActivity() {
HttpReqType.PHDOWNLOADURL -> {
(httpStatus.rsp as PhDownloadUrlRsp).let {
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.PHDOWNLOADURL ${it}")
if (it.code == 1000) {
val lastNotice =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_NOTICE_READ, "")
@@ -467,6 +470,7 @@ class MainActivity : BaseActivity() {
HttpReqType.EXPENSES_RECORD ->{
if(httpStatus.rsp is ExpensesRecordRsp){
httpStatus.rsp.let { expensesRecordRsp ->
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.EXPENSES_RECORD ${expensesRecordRsp}")
if(expensesRecordRsp.code == "1000"){
if(expensesRecordRsp.data != null) {
val expensesRecordList = expensesRecordRsp.data.expensesRecords
@@ -504,6 +508,7 @@ class MainActivity : BaseActivity() {
}
HttpReqType.Report->{
(httpStatus.rsp as AppVersionCheckRsp).let {
+ AppLog.i("SplashActivity", "httpSuccess HttpReqType.Report ${it}")
android.util.Log.i("reqType:","data:::"+it.code)
if(it.code==200){
//上报百度支付功能
@@ -816,19 +821,14 @@ class MainActivity : BaseActivity() {
aivVip.setImageResource(R.drawable.yjl_vip_page_choose)
}
fun checkVPN(){
- val behaviorLogSwitch =
- MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, true)
- if(behaviorLogSwitch){
- launch(Dispatchers.IO) {
- val isVPN =Utils.isVpnActive(this@MainActivity)
- AppLog.i("NewMainActivity", "VPN是否打开::::${isVPN}")
- val vpnCheChek =Utils.checkHttpOk("https://www.youtube.com")
- AppLog.i("NewMainActivity", "校验访问https://www.youtube.com::${vpnCheChek}")
+ launch(Dispatchers.IO) {
+ val isVPN =Utils.isVpnActive(this@MainActivity)
+ AppLog.i("NewMainActivity", "VPN是否打开::::${isVPN}")
+ val vpnCheChek =Utils.checkHttpOk("https://www.youtube.com")
+ AppLog.i("NewMainActivity", "校验访问https://www.youtube.com::${vpnCheChek}")
- val vpnCheChekGoogle =Utils.checkHttpOk("https://www.google.com")
- AppLog.i("NewMainActivity", "校验访问https://www.google.com::${vpnCheChekGoogle}")
- }
+ val vpnCheChekGoogle =Utils.checkHttpOk("https://www.google.com")
+ AppLog.i("NewMainActivity", "校验访问https://www.google.com::${vpnCheChekGoogle}")
}
-
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
index 7ad3dba..f110703 100644
--- a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
+++ b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt
@@ -44,6 +44,7 @@ import com.yingmao.clash.conf.BZYConstants.Companion.MMKV_KEY_NOTE_DEFAULT_PSW
import com.yingmao.clash.conf.BZYConstants.Companion.MMKV_KEY_REMEMBER_PASSWORD
import com.yingmao.clash.conf.BZYConstants.Companion.MMKV_KEY_REMEMBER_USERNAME
import com.yingmao.clash.entity.CheckLoginRsp
+import com.yingmao.clash.levellog.AppLog
import com.yingmao.clash.listener.DownLoadListener
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
@@ -388,6 +389,7 @@ class SplashActivity : BaseActivity() {
HttpReqType.REGISTER -> {
dialogDoMainChoose?.dismiss()
with(httpStatus.rsp as RegisterRsp) {
+ AppLog.i("SplashActivity", "注册请求接口code:${code}")
if (code == "10000" || code == "200") {
if (data != null) {
if (!data.phoneNumber.isNullOrEmpty()) {
@@ -414,6 +416,7 @@ class SplashActivity : BaseActivity() {
if (decodeBool) {
MMKV.defaultMMKV().encode(BZYConstants.INITIALIZATION, true)
}
+ AppLog.i("SplashActivity", "注册接口调用登录前: phoneNumber${data?.phoneNumber} defaultPassword${BZYConstants.defaultPassword}")
splashAtyVM.login(encryName, encryPsw)
} else if (code == "20062") {
message?.let {
@@ -429,16 +432,19 @@ class SplashActivity : BaseActivity() {
} else {
MMKV.defaultMMKV().encode(MMKV_KEY_REMEMBER_USERNAME, username)
}
+ AppLog.i("SplashActivity", "注册接口调用返回20062: message${message}")
val intent = Intent(this@SplashActivity, LoginActivity::class.java)
startActivity(intent)
finish()
} else if (code == "403") {
+ AppLog.i("SplashActivity", "注册接口调用返回403: message${message}")
pbWeb.visibility = View.INVISIBLE
message?.let {
RxToast.error(it)
}
webView?.setOnTouchListener { _, _ -> false }
} else {
+ AppLog.i("SplashActivity", "注册接口调用返回未知数据: code:${code}")
MaterialDialog(this@SplashActivity).show {
message(text = initErrMsg)
positiveButton(R.string.retry) {
@@ -456,6 +462,7 @@ class SplashActivity : BaseActivity() {
HttpReqType.LOGIN -> {
val rsp = httpStatus.rsp
if (rsp is LoginRsp) {
+ AppLog.i("SplashActivity", "HttpReqType.LOGIN rsp.code ${rsp.code }")
if (rsp.code == "1000") {
val mmkv = MMKV.defaultMMKV()
com.cncat.vpn.common.log.Log.i(" HttpReqType.LOGIN token ==> ${rsp.data.vpnToken}")
@@ -487,6 +494,8 @@ class SplashActivity : BaseActivity() {
HttpReqType.CHECK_LOGIN -> {
dialogDoMainChoose?.dismiss()
(httpStatus.rsp as CheckLoginRsp).let { checkLoginRsp ->
+
+ AppLog.i("SplashActivity", "HttpReqType.CHECK_LOGIN checkLoginRsp ${checkLoginRsp.code }")
if (checkLoginRsp.code == 0) {
com.cncat.vpn.common.log.Log.d("splash CHECK_LOGIN==>")
checkLoginRsp.data?.let { MainApplication.setUserInfo(it) }
@@ -511,6 +520,7 @@ class SplashActivity : BaseActivity() {
}
HttpReqType.App_VERION_CHECK -> {
(httpStatus.rsp as AppVersionCheckRsp).let { avcr ->
+ AppLog.i("SplashActivity", " HttpReqType.App_VERION_CHECK avcr ${avcr}")
com.cncat.vpn.common.log.Log.i("App_VERION_CHECK ==>$avcr")
if (avcr.code == 200) {
avcr.data?.let { md ->
@@ -548,6 +558,7 @@ class SplashActivity : BaseActivity() {
rlPb.visibility = View.GONE
pbWeb.visibility = View.INVISIBLE
com.cncat.vpn.common.log.Log.d("httpFailure HttpReqType.REGISTER")
+ AppLog.i("SplashActivity", "httpFailure HttpReqType.REGISTER ${httpStatus.msg}")
if (super.switchServer2()) {//切换服务器并直接重试
doRegisterByEncryption()
} else {
@@ -565,6 +576,7 @@ class SplashActivity : BaseActivity() {
}
HttpReqType.LOGIN -> {
+ AppLog.i("SplashActivity", "httpFailure HttpReqType.LOGIN ${httpStatus.msg}")
MaterialDialog(this@SplashActivity).show {
message(text = initErrMsg)
positiveButton(R.string.confirm) {
@@ -585,6 +597,7 @@ class SplashActivity : BaseActivity() {
HttpReqType.CHECK_LOGIN -> {
com.cncat.vpn.common.log.Log.d("httpFailure HttpReqType.CHECK_LOGIN")
+ AppLog.i("SplashActivity", "httpFailure HttpReqType.CHECK_LOGIN ${httpStatus.msg}")
RxToast.error("检测到网络异常,请尝试切换其他地址.")
if (super.switchServer2()) {
splashAtyVM.checkLogin()
diff --git a/app/src/main/java/com/yingmao/clash/conf/BZYConstants.kt b/app/src/main/java/com/yingmao/clash/conf/BZYConstants.kt
index ae33a6c..7a88c82 100644
--- a/app/src/main/java/com/yingmao/clash/conf/BZYConstants.kt
+++ b/app/src/main/java/com/yingmao/clash/conf/BZYConstants.kt
@@ -70,6 +70,5 @@ class BZYConstants {
const val applicationMode = "ApplicationMode"
const val is_splash_first = "is_splash_first"
const val ScreenFlag="screenshotFlag"
- const val BehaviorLogSwitch = "BehaviorLogSwitch"
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
index 83530a5..d6c1e8c 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt
@@ -41,6 +41,7 @@ import com.google.gson.Gson
import com.google.gson.JsonParser
import com.orhanobut.logger.Logger
import com.tencent.mmkv.MMKV
+import com.yingmao.clash.BuildConfig
import com.yingmao.clash.R
import com.yingmao.clash.act.ChangeNodeActivity.ProxyMode
import com.yingmao.clash.act.MainActivity
@@ -187,6 +188,17 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
observe(this, accelerateViewModel)
initSS()
accelerateViewModel.getSelectNodeInfo()
+ val selectedName =
+ MMKV.defaultMMKV().decodeString(MMKV_KEY_REMEMBER_USERNAME, "")
+ val equipmentModel = Utils.getEquipmentModel()
+ val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
+ AppLog.i("HomeFragment", "用户账号===>${selectedName}")
+ AppLog.i("HomeFragment", "版本号===>${requireActivity().resources.getString(R.string.currentVersionNumber) + "${BuildConfig.VERSION_NAME}." + BuildConfig.productId}")
+ AppLog.i("HomeFragment", "用户有效时长===>${validPeriod}")
+ AppLog.i("HomeFragment", "用户是否过期===>${checkExpire()}")
+ AppLog.i("HomeFragment", "机型数据===>${equipmentModel}")
+ AppLog.i("HomeFragment", "订阅连接地址===>${subUrl}")
+ AppLog.i("HomeFragment", "OAID===>${MainApplication.Companion.OAID}")
}
@@ -1117,18 +1129,7 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa
return mList
}
fun behaviorLog(){
- //开启采集之后点击采集
- MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, true)
- val selectedName =
- MMKV.defaultMMKV().decodeString(MMKV_KEY_REMEMBER_USERNAME, "")
- val equipmentModel = Utils.getEquipmentModel()
- val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
- AppLog.i("HomeFragment", "selectedName===>${selectedName}")
- AppLog.i("HomeFragment", "用户有效时长===>${validPeriod}")
- AppLog.i("HomeFragment", "用户是否过期===>${checkExpire()}")
- AppLog.i("HomeFragment", "机型数据===>${equipmentModel}")
- AppLog.i("HomeFragment", "订阅连接地址===>${subUrl}")
- AppLog.i("HomeFragment", "OAID===>${MainApplication.Companion.OAID}")
+ AppLog.i("HomeFragment", "加速开启前 订阅连接地址 behaviorLog===>${subUrl}")
requireContext().startService(LogcatService::class.intent)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
index ab6ce12..2de8ead 100644
--- a/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
+++ b/app/src/main/java/com/yingmao/clash/fragment/setting/SettingFragment.kt
@@ -65,6 +65,7 @@ import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.DataUtils
import com.yingmao.clash.util.DataUtils.getAllFilePath
import com.yingmao.clash.util.PayUtils
+import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.DialogBandChoose
import com.yingmao.clash.view.dialog.DialogDoMainChoose
@@ -278,7 +279,9 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
if(clashRunning&&getIsGlo){
RxToast.info("全局模式暂不支持上传日志,请切换到智能模式或关闭加速!")
}else{
-
+ if(clashRunning){
+ checkVPN()
+ }
val logDirParent = "applogs"
val logDir = File(requireActivity().filesDir, logDirParent)
val processName =getProcessName()
@@ -844,7 +847,6 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
hideLoading()
val deleteFile = DataUtils.deleteFile(filePath)
Log.i("PutObjectRequest deleteFile ${deleteFile}")
- MMKV.defaultMMKV().encode(BZYConstants.BehaviorLogSwitch, false)
RxToast.info(resources.getString(R.string.BehaviorLogSuccessfully))
}
}else{
@@ -878,4 +880,15 @@ class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatc
}
+ fun checkVPN(){
+ launch(Dispatchers.IO) {
+ val isVPN =Utils.isVpnActive(requireActivity())
+ AppLog.i("NewMainActivity", "VPN是否打开::::${isVPN}")
+ val vpnCheChek =Utils.checkHttpOk("https://www.youtube.com")
+ AppLog.i("NewMainActivity", "校验访问https://www.youtube.com::${vpnCheChek}")
+
+ val vpnCheChekGoogle =Utils.checkHttpOk("https://www.google.com")
+ AppLog.i("NewMainActivity", "校验访问https://www.google.com::${vpnCheChekGoogle}")
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt b/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
index c4467f6..de30feb 100644
--- a/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
+++ b/app/src/main/java/com/yingmao/clash/levellog/AppLog.kt
@@ -27,19 +27,14 @@ object AppLog {
msg: String,
tr: Throwable?
) {
- val behaviorLogSwitch =
- MMKV.defaultMMKV().decodeBool(BZYConstants.BehaviorLogSwitch, true)
- if(behaviorLogSwitch){
- LogDispatcher.enqueue(
- LogEvent(
- time = System.currentTimeMillis(),
- level = level,
- tag = tag,
- message = msg,
- throwable = tr
- )
+ LogDispatcher.enqueue(
+ LogEvent(
+ time = System.currentTimeMillis(),
+ level = level,
+ tag = tag,
+ message = msg,
+ throwable = tr
)
- }
-
+ )
}
}