From 7869a2a8274f7acc7f7adaebc4c5171be3e1c9ad Mon Sep 17 00:00:00 2001 From: level <1364007522@qq.com> Date: Tue, 18 Mar 2025 19:08:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=8F=E8=BF=B0=EF=BC=9A=201.=E4=BF=AE?= =?UTF-8?q?=E6=94=B9toast=20=E6=A0=B7=E5=BC=8F=202.=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=BC=80=E5=90=AF=E6=97=B6=E9=95=BF=203.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 - .../com/yingmao/clash/conf/BZYConstants.kt | 1 + .../clash/fragment/home/HomeFragment.kt | 59 ++++++++++++++++++- .../clash/fragment/setting/SettingFragment.kt | 6 ++ .../com/yingmao/clash/net/http/NetService.kt | 8 +-- .../java/com/yingmao/clash/view/RxToast.kt | 2 +- .../java/com/yingmao/clash/vm/MainAtyVM.kt | 58 ++++++++++++++++++ app/src/main/res/drawable/toast_bg_fai.xml | 4 +- app/src/main/res/drawable/toast_bg_suc.xml | 4 +- .../res/layout/setting_fragment_layout.xml | 15 ++++- app/src/main/res/layout/toast_layout.xml | 1 + 11 files changed, 146 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5691c51..f9bf430 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -176,7 +176,6 @@ android:process=":background" android:screenOrientation="portrait" /> - ? = null private val nextRequestKey = AtomicInteger(0) private var reConnection = false + private var connectId=-1 companion object { const val REQUEST_CONNECT = 1 const val CHECK_NODE_REQUEST_CODE = 2 @@ -211,6 +218,10 @@ class HomeFragment: BaseFragment() , CoroutineScope by CoroutineScope(Dispatcher rxDialogSureCancel.setSureListener { stopUpLoadTimer() stopClash() + Log.d("NewAccFragment connectId:::${connectId}") + if(connectId!=-1){ + mainAtyVM.appStopStatus(connectId) + } rxDialogSureCancel.cancel() reConnection = false } @@ -317,6 +328,28 @@ class HomeFragment: BaseFragment() , CoroutineScope by CoroutineScope(Dispatcher } } } + HttpReqType.AppStartupStatus ->{ + Log.d("AppStartupStatus is Success ${httpStatus.rsp}") + val dataInfo = httpStatus.rsp as AppStartupStatus + if(dataInfo.data!=null){ + if(dataInfo.data.id!=null){ + connectId= dataInfo.data.id + MMKV.defaultMMKV().encode(BZYConstants.CONNECTID, dataInfo.data.id) + val serviceIntent= Intent(requireContext(), ConnectionService::class.java) + serviceIntent.putExtra("receiver",resultReceiver) + requireContext().startService(serviceIntent) + } + } + } + HttpReqType.AppUpStatus ->{ + Log.d("AppUpStatus is Success ${httpStatus.rsp}") + } + + HttpReqType.AppStopStatus ->{ + Log.d("AppStopStatus is Success ${httpStatus.rsp}") + val serviceIntent= Intent(requireContext(), ConnectionService::class.java) + requireContext().stopService(serviceIntent) + } else->{ } @@ -324,9 +357,30 @@ class HomeFragment: BaseFragment() , CoroutineScope by CoroutineScope(Dispatcher } override fun httpFailure(httpStatus: HttpStatus.Failure) { + when(httpStatus.reqType){ + HttpReqType.AppStartupStatus ->{ + Log.d("AppStartupStatus is Failure ${httpStatus.msg}") + } + HttpReqType.AppUpStatus ->{ + Log.d("AppUpStatus is Failure ${httpStatus.msg}") + } + HttpReqType.AppStopStatus ->{ + Log.d("AppStopStatus is Failure ${httpStatus.msg}") + } + else->{ + } + } + } + private val resultReceiver: ResultReceiver = object : ResultReceiver(null) { + override fun onReceiveResult(resultCode: Int, resultData: Bundle) { + val data = resultData.getString("data") + Log.d("ping to from Service: $data") + if(connectId!=-1){ + mainAtyVM.appUpStatus(connectId) + } + } } - private fun initMainPageHorseRaceLamp(noticeData: String) { if (noticeData.isNotEmpty()) { tvNotice.text = noticeData @@ -424,7 +478,10 @@ class HomeFragment: BaseFragment() , CoroutineScope by CoroutineScope(Dispatcher if (result.resultCode == RESULT_OK) { stateChanged(Clash_Starting, true) context?.startClashService() + mainAtyVM.appStartupStatus() } + }else{ + mainAtyVM.appStartupStatus() } } catch (e: Exception) { stopUpLoadTimer() 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 310ccdf..9ae4923 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 @@ -115,6 +115,8 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch private lateinit var tvExitLog:TextView private lateinit var tvSignIn:TextView + + private lateinit var tvVersion:TextView private var baseLoading: RxDialogShapeLoading? = null private val fragments = arrayListOf() private lateinit var mainAtyVM: MainAtyVM @@ -136,6 +138,7 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch container.addView(view) } + @SuppressLint("SetTextI18n") private fun initLanguage(view: View) { userIdentityNumberCopy.text = requireActivity().resources.getString(R.string.copy) view.findViewById(R.id.expirationTimeStr).text = requireActivity().resources.getString(R.string.expire_date) @@ -179,6 +182,7 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch tvSignIn.text = requireActivity().resources.getString(R.string.SignIn) tvExitLog.text=requireActivity().resources.getString(R.string.exit) + tvVersion.text=requireActivity().resources.getString(R.string.edition) + "${BuildConfig.VERSION_NAME}." + BuildConfig.productId } private fun initView(view: View) { @@ -203,6 +207,8 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch clApplicationLanguage=view.findViewById(R.id.clApplicationLanguage) clTelegraph=view.findViewById(R.id.clTelegraph) tvExitLog=view.findViewById(R.id.tvExitLog) + tvVersion=view.findViewById(R.id.tvVersion) + setExpireDate() if(checkExpire()){ 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 dba2407..bfa8389 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 @@ -92,10 +92,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/java/com/yingmao/clash/view/RxToast.kt b/app/src/main/java/com/yingmao/clash/view/RxToast.kt index 4571d62..92e5608 100644 --- a/app/src/main/java/com/yingmao/clash/view/RxToast.kt +++ b/app/src/main/java/com/yingmao/clash/view/RxToast.kt @@ -283,7 +283,7 @@ object RxToast { toastTextView.typeface = Typeface.create(TOAST_TYPEFACE, Typeface.NORMAL) currentToast?.view = toastLayout currentToast?.duration = duration - currentToast?.setGravity(Gravity.TOP,0,200) + currentToast?.setGravity(Gravity.CENTER,0,200) return currentToast } diff --git a/app/src/main/java/com/yingmao/clash/vm/MainAtyVM.kt b/app/src/main/java/com/yingmao/clash/vm/MainAtyVM.kt index 0d19f60..da08be8 100644 --- a/app/src/main/java/com/yingmao/clash/vm/MainAtyVM.kt +++ b/app/src/main/java/com/yingmao/clash/vm/MainAtyVM.kt @@ -24,10 +24,12 @@ import com.yingmao.clash.net.http.HttpReqType import com.yingmao.clash.net.http.NetService import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.async +import okhttp3.MediaType.Companion.toMediaType import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import org.yaml.snakeyaml.Yaml import java.math.BigDecimal import java.util.* @@ -283,4 +285,60 @@ class MainAtyVM : PublicViewMode() { Log.d("e==>" + e.localizedMessage) } } + fun appStartupStatus() { + val httpApi = NetService.instances.createHttpsEncodeStr(HttpApi::class.java) + val token = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")!! + val phoneNumber = + MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!! + val params = mutableMapOf( + "phToken" to token, + "phoneNumber" to phoneNumber, + ) + Log.d("appCheck==>$params") + doAsync(HttpReqType.AppStartupStatus) { + httpApi.appStartupStatus(params) + } + } + + fun appStopStatus(addId:Int) { + val httpApi = NetService.instances.createHttpsEncodeStr(HttpApi::class.java) + val token = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")!! + val phoneNumber = + MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!! + val paramsToken = mutableMapOf( + "phToken" to token, + "phoneNumber" to phoneNumber, + ) + + val params = hashMapOf( + "id" to addId + ) + val gson = Gson() + val jsonString = gson.toJson(params) + val requestBody: RequestBody = jsonString.toRequestBody("application/json; charset=utf-8".toMediaType()) + doAsync(HttpReqType.AppStopStatus) { + httpApi.appStopStatus(paramsToken,requestBody) + } + } + + fun appUpStatus(addId:Int) { + val httpApi = NetService.instances.createHttpsEncodeStr(HttpApi::class.java) + val token = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")!! + val phoneNumber = + MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!! + val paramsToken = mutableMapOf( + "phToken" to token, + "phoneNumber" to phoneNumber, + ) + + val params = hashMapOf( + "id" to addId + ) + val gson = Gson() + val jsonString = gson.toJson(params) + val requestBody: RequestBody = jsonString.toRequestBody("application/json; charset=utf-8".toMediaType()) + doAsync(HttpReqType.AppUpStatus) { + httpApi.appUpStatus(paramsToken,requestBody) + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/toast_bg_fai.xml b/app/src/main/res/drawable/toast_bg_fai.xml index 328d57b..cc8e457 100644 --- a/app/src/main/res/drawable/toast_bg_fai.xml +++ b/app/src/main/res/drawable/toast_bg_fai.xml @@ -2,8 +2,8 @@ - diff --git a/app/src/main/res/drawable/toast_bg_suc.xml b/app/src/main/res/drawable/toast_bg_suc.xml index c0a264b..017de03 100644 --- a/app/src/main/res/drawable/toast_bg_suc.xml +++ b/app/src/main/res/drawable/toast_bg_suc.xml @@ -2,8 +2,8 @@ - diff --git a/app/src/main/res/layout/setting_fragment_layout.xml b/app/src/main/res/layout/setting_fragment_layout.xml index 3b40ddc..2a4429e 100644 --- a/app/src/main/res/layout/setting_fragment_layout.xml +++ b/app/src/main/res/layout/setting_fragment_layout.xml @@ -1089,17 +1089,28 @@ android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@+id/tvVersion" android:paddingTop="13dp" android:paddingBottom="13dp" android:layout_marginStart="13dp" android:layout_marginEnd="13dp" android:gravity="center" android:text="@string/SignIn" - android:layout_marginBottom="16dp" android:textColor="#4072FE" android:textSize="16sp" android:background="@drawable/setting_sing_in_bg" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/toast_layout.xml b/app/src/main/res/layout/toast_layout.xml index 6174ea6..df94d60 100644 --- a/app/src/main/res/layout/toast_layout.xml +++ b/app/src/main/res/layout/toast_layout.xml @@ -17,6 +17,7 @@ android:id="@+id/toast_text" android:textSize="16sp" android:textStyle="bold" + android:textColor="@color/white" android:layout_width="wrap_content" android:layout_height="wrap_content" />