Merge remote-tracking branch 'refs/remotes/origin/master'

This commit is contained in:
cyh 2025-04-14 14:45:52 +08:00
commit c0b7d7e9d0
20 changed files with 914 additions and 226 deletions

View File

@ -82,6 +82,9 @@ class ActivityActivity : BaseActivity() {
override fun onMyItemChildClickListener(itemBean: Activity_) {
if (itemBean.redirectLink.contains("BindAccount")) {
showBindAccDialog(itemBean)
}else if(itemBean.redirectLink.contains("weekcharge")){
val intent = Intent(CommonUtils.getApp(), MemberRechargeActivity::class.java)
startActivity(intent)
}else {
showActDialog(itemBean)
}

View File

@ -1,8 +1,10 @@
package com.yingmao.clash.act
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.text.Spannable
import android.text.SpannableStringBuilder
@ -15,7 +17,9 @@ import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.*
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.net.http.entity.LoginRsp
@ -28,18 +32,23 @@ import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.CheckLoginRsp
import com.yingmao.clash.listener.AsyncBodyCallback
import com.yingmao.clash.listener.AsyncCallback
import com.yingmao.clash.listener.DownLoadListener
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.AppVersionCheckRsp
import com.yingmao.clash.util.AESUtil
import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.PasswordTransformationMethodBigDot
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.DialogAppVersion
import com.yingmao.clash.view.dialog.DialogDoMainChoose
import com.yingmao.clash.vm.LoginAtyVM
import com.yingmao.clash.vm.SplashAtyVM
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import java.io.File
class LoginActivity : BaseActivity(), View.OnClickListener {
private lateinit var loginViewMode: LoginAtyVM
@ -73,6 +82,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
splashAtyVM = ViewModelProvider(this).get(SplashAtyVM::class.java)
observe(this, loginViewMode)
initViews()
loginViewMode.upgradeVersion()
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
@ -151,6 +161,23 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
)
}
}
}else if(httpStatus.reqType == HttpReqType.GETAPPVERION){
(httpStatus.rsp as AppVersionCheckRsp).let { avcr ->
com.cncat.vpn.common.log.Log.i("App_VERION_CHECK ==>$avcr")
if (avcr.code == 200) {
avcr.data?.let { md ->
if (md.isForce) { //强制更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, true)
}
} else if (md.isUpgrade) { //更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, false)
}
}
}
}
}
}
}
@ -694,5 +721,78 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
passwordEt.transformationMethod = PasswordTransformationMethodBigDot()
}
}
private fun showUpdateDialog(url: String, illustrate: String, isForce: Boolean) {
if (TextUtils.isEmpty(url)) {
RxToast.error(resources.getString(R.string.downloadEmpty))
return
}
var notice = illustrate
if (TextUtils.isEmpty(illustrate)) {
notice = resources.getString(R.string.NewVersion)
}
var isDownloaded = false;
var isFinish = false
var downFilePath = ""
val dialog = DialogAppVersion(this,
notice,
url,
isForce,
object : DialogAppVersion.OnClickListener {
override fun ok(tv_down: TextView, pb_down: ProgressBar) {
if (isFinish) {
installApk(downFilePath)
return
}
if (isDownloaded) {
RxToast.info(resources.getString(R.string.downloading))
return
}
isDownloaded = true
splashAtyVM.downLoadFile(url, object : DownLoadListener {
@SuppressLint("SetTextI18n")
override fun loading(progress: Int) {
lifecycleScope.async {
pb_down.progress = progress
tv_down.text = resources.getString(R.string.download) + "$progress%"
}
}
override fun finish(path: String) {
com.cncat.vpn.common.log.Log.d("down finish path==>$path")
isFinish = true
downFilePath = path
installApk(path)
}
override fun error(msg: String) {
com.cncat.vpn.common.log.Log.d("down error msg==>$msg")
}
})
}
override fun cancel() {
}
})
dialog.show()
}
fun installApk(filePath: String) {
val file = File(filePath)
val uri: Uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
FileProvider.getUriForFile(this, "${applicationContext.packageName}.fileprovider", file)
} else {
Uri.fromFile(file)
}
val intent = Intent(Intent.ACTION_VIEW).apply {
setDataAndType(uri, "application/vnd.android.package-archive")
flags = Intent.FLAG_ACTIVITY_NEW_TASK
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
}
startActivity(intent)
}
}

View File

@ -29,6 +29,7 @@ import com.stripe.android.confirmAlipayPayment
import com.stripe.android.model.ConfirmPaymentIntentParams
import com.stripe.android.model.StripeIntent
import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
import com.yingmao.clash.R
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
@ -302,6 +303,25 @@ class MemberRechargeActivity: BaseActivity() {
}
}
}
HttpReqType.StripeWeChat ->{
(httpStatus.rsp as PayUploadParamData).let {
if(it.data!=null){
paymentIntentClientSecret= it.data.clientSecret.toString()
val serviceUrl = MMKV.defaultMMKV().decodeString(
BZYConstants.MMKV_KEY_CURRENT_HOST,
BuildConfig.service_url
)!!
val payUrl=serviceUrl+"/78zccgy0nsgknh9n4/iiii.html?s=${it.data.clientSecret.toString()}"
val uri = Uri.parse(payUrl)
val intent = Intent(Intent.ACTION_VIEW)
intent.setData(uri)
startActivity(intent)
}else{
hideLoading()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
}
HttpReqType.CHECK_LOGIN -> {
Logger.d("支付成功更新有效期")
val checkLoginRsp = httpStatus.rsp
@ -557,6 +577,8 @@ class MemberRechargeActivity: BaseActivity() {
findViewById<LinearLayout>(R.id.llStripePay).visibility= View.VISIBLE
findViewById<TextView>(R.id.tvStripePay).visibility= View.VISIBLE
findViewById<AppCompatImageView>(R.id.ivStripeAlipay).visibility= View.VISIBLE
val stripeWechatPay=findViewById<AppCompatImageView>(R.id.ivStripeWechatPay)
stripeWechatPay.visibility= View.VISIBLE
findViewById<AppCompatImageView>(R.id.ivStripeAlipay).setOnClickListener {
if(selectedGradeID!=0){
if(!PayUtils.isAlipayInstalled(this@MemberRechargeActivity)){
@ -572,6 +594,15 @@ class MemberRechargeActivity: BaseActivity() {
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
stripeWechatPay.setOnClickListener {
if(selectedGradeID!=0){
viewModel.getWeChatPayClientSecret(selectedGradeID)
dismiss()
}else{
dismiss()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
}
}
getCustomView().findViewById<AppCompatImageView>(R.id.ivBack).setOnClickListener {

View File

@ -1,6 +1,7 @@
package com.yingmao.clash.act
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
@ -9,14 +10,18 @@ import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.text.TextUtils
import android.util.Log
import android.view.View
import android.view.WindowManager
import android.widget.ProgressBar
import android.widget.RelativeLayout
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.lifecycle.ViewModelProvider
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
@ -45,19 +50,23 @@ import com.yingmao.clash.net.http.entity.RegisterRsp
import com.cncat.vpn.service.ClashManager
import com.cncat.vpn.service.remote.IClashManager
import com.cncat.vpn.service.remote.wrap
import com.yingmao.clash.listener.DownLoadListener
import com.yingmao.clash.net.http.entity.AppVersionCheckRsp
import com.yingmao.clash.net.http.entity.StartingBeans
import com.yingmao.clash.util.AESUtil
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.DialogAppVersion
import com.yingmao.clash.view.dialog.DialogBandChoose
import com.yingmao.clash.view.dialog.DialogDoMainChoose
import com.yingmao.clash.view.dialog.RxDialogSureCancel
import com.yingmao.clash.vm.SplashAtyVM
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.io.File
import java.util.Locale
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.async
class SplashActivity : BaseActivity() {
private val deniedPermissions = hashSetOf<String>()
@ -661,6 +670,32 @@ class SplashActivity : BaseActivity() {
}
}
HttpReqType.App_VERION_CHECK->{
(httpStatus.rsp as AppVersionCheckRsp).let { avcr ->
com.cncat.vpn.common.log.Log.i("App_VERION_CHECK ==>$avcr")
if (avcr.code == 200) {
avcr.data?.let { md ->
if (md.isForce) { //强制更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, true)
}
} else if (md.isUpgrade) { //更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, false)
}
}else{
val intent = Intent(this@SplashActivity, UIMainActivity::class.java)
startActivity(intent)
finish()
}
}
}else{
val intent = Intent(this@SplashActivity, UIMainActivity::class.java)
startActivity(intent)
finish()
}
}
}
else -> {}
}
@ -902,10 +937,8 @@ class SplashActivity : BaseActivity() {
}
private fun toMainPage() {
val intent = Intent(this, UIMainActivity::class.java)
startActivity(intent)
finish()
//监测版本是否需要更新
splashAtyVM.appCheck()
}
private fun toLoginPage() {
@ -922,4 +955,81 @@ class SplashActivity : BaseActivity() {
config.locale = locale
resources.updateConfiguration(config, metrics)
}
private fun showUpdateDialog(url: String, illustrate: String, isForce: Boolean) {
if (TextUtils.isEmpty(url)) {
RxToast.error(resources.getString(R.string.downloadEmpty))
return
}
var notice = illustrate
if (TextUtils.isEmpty(illustrate)) {
notice = resources.getString(R.string.NewVersion)
}
var isDownloaded = false;
var isFinish = false
var downFilePath = ""
val dialog = DialogAppVersion(this,
notice,
url,
isForce,
object : DialogAppVersion.OnClickListener {
override fun ok(tv_down: TextView, pb_down: ProgressBar) {
if (isFinish) {
installApk(downFilePath)
return
}
if (isDownloaded) {
RxToast.info(resources.getString(R.string.downloading))
return
}
isDownloaded = true
splashAtyVM.downLoadFile(url, object : DownLoadListener {
@SuppressLint("SetTextI18n")
override fun loading(progress: Int) {
lifecycleScope.async {
pb_down.progress = progress
tv_down.text = resources.getString(R.string.download) + "$progress%"
}
}
override fun finish(path: String) {
com.cncat.vpn.common.log.Log.d("down finish path==>$path")
isFinish = true
downFilePath = path
installApk(path)
}
override fun error(msg: String) {
com.cncat.vpn.common.log.Log.d("down error msg==>$msg")
}
})
}
override fun cancel() {
val intent = Intent(this@SplashActivity, UIMainActivity::class.java)
startActivity(intent)
finish()
}
})
dialog.show()
}
fun installApk(filePath: String) {
val file = File(filePath)
val uri: Uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
FileProvider.getUriForFile(this, "${applicationContext.packageName}.fileprovider", file)
} else {
Uri.fromFile(file)
}
val intent = Intent(Intent.ACTION_VIEW).apply {
setDataAndType(uri, "application/vnd.android.package-archive")
flags = Intent.FLAG_ACTIVITY_NEW_TASK
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
}
startActivity(intent)
}
}

View File

@ -126,7 +126,6 @@ class UIMainActivity : BaseActivity() {
observe(this, mainAtyVM)
mainAtyVM.startHeartBeat()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
mainAtyVM.appCheck()
mainAtyVM.getAirNodes()
val isGlobal = MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
newMainActGlo = isGlobal
@ -190,25 +189,6 @@ class UIMainActivity : BaseActivity() {
override fun httpSuccess(httpStatus: HttpStatus.Success) {
when (httpStatus.reqType) {
HttpReqType.App_VERION_CHECK -> {
(httpStatus.rsp as AppVersionCheckRsp).let { avcr ->
Log.i("App_VERION_CHECK ==>$avcr")
if (avcr.code == 200) {
avcr.data?.let { md ->
if (md.isForce) { //强制更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, true);
}
} else if (md.isUpgrade) { //更新
if (!TextUtils.isEmpty(md.versionPath)) {
showUpdateDialog(md.versionPath!!, md.illustrate!!, false);
}
}
}
}
}
}
HttpReqType.GET_AIRNODES -> {
val data = httpStatus.rsp as SubscriptionRsp
if (data.code != "1000") {
@ -341,83 +321,6 @@ class UIMainActivity : BaseActivity() {
}
}
}
private fun showUpdateDialog(url: String, illustrate: String, isForce: Boolean) {
if (TextUtils.isEmpty(url)) {
RxToast.error(resources.getString(R.string.downloadEmpty))
return
}
var notice = illustrate
if (TextUtils.isEmpty(illustrate)) {
notice = resources.getString(R.string.NewVersion)
}
var isDownloaded = false;
var isFinish = false
var downFilePath = ""
val dialog = DialogAppVersion(this@UIMainActivity,
notice,
url,
isForce,
object : DialogAppVersion.OnClickListener {
override fun ok(tv_down: TextView, pb_down: ProgressBar) {
if (isFinish) {
installApk(downFilePath)
return
}
if (isDownloaded) {
RxToast.info(resources.getString(R.string.downloading))
return
}
isDownloaded = true
mainAtyVM.downLoadFile(url, object : DownLoadListener {
@SuppressLint("SetTextI18n")
override fun loading(progress: Int) {
lifecycleScope.async {
pb_down.progress = progress
tv_down.text = resources.getString(R.string.download) + "$progress%"
}
}
override fun finish(path: String) {
Log.d("down finish path==>$path")
isFinish = true
downFilePath = path
installApk(path)
}
override fun error(msg: String) {
Log.d("down error msg==>$msg")
}
})
}
override fun cancel() {
}
})
dialog.show()
}
fun installApk(filePath: String) {
val file = File(filePath)
val uri: Uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
FileProvider.getUriForFile(this, "${applicationContext.packageName}.fileprovider", file)
} else {
Uri.fromFile(file)
}
val intent = Intent(Intent.ACTION_VIEW).apply {
setDataAndType(uri, "application/vnd.android.package-archive")
flags = Intent.FLAG_ACTIVITY_NEW_TASK
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
}
}
startActivity(intent)
}
private fun showLoadingDialog(msg: String) {
payResultLoading = RxDialogShapeLoading(this)
payResultLoading!!.setMessage(msg)

View File

@ -96,7 +96,7 @@ class BZYConstants {
const val YMTGUrl = "https://t.me/shadowcat_vpn";
const val DefTGUrl = "https://t.me/bazhuayuvpn";
const val TZTGUrl = "https://t.me/taizivpn";
const val PopularApplicationsUrl = "https://2828.im/"
// const val GoSeaShareUrl = "https://219.139.81.40:8080/page/register.html?userId="
// const val KeFuUrl = "https://www.cannmaxllc.com"

View File

@ -270,4 +270,22 @@ class RechargeViewModel : PublicViewMode() {
val requestBody: RequestBody = jsonString.toRequestBody("application/json; charset=utf-8".toMediaType())
doAsync(HttpReqType.StripeType) { httpApi.getPayClientSecret(paramsToken,requestBody) }
}
fun getWeChatPayClientSecret(productID:Int){
val httpApi = NetService.instances.createHttps(HttpApi::class.java)
val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")!!
val username =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
val paramsToken = hashMapOf(
"phoneNumber" to username,
"phToken" to phToken,
)
val params = hashMapOf(
"id" to productID
)
val gson = Gson()
val jsonString = gson.toJson(params)
val requestBody: RequestBody = jsonString.toRequestBody("application/json; charset=utf-8".toMediaType())
doAsync(HttpReqType.StripeWeChat) { httpApi.getPayClientSecret(paramsToken,requestBody) }
}
}

View File

@ -114,6 +114,7 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
private lateinit var clSubApplicationProxy:ConstraintLayout
private lateinit var clApplicationLanguage:ConstraintLayout
private lateinit var clTelegraph:ConstraintLayout
private lateinit var clFire:ConstraintLayout
private lateinit var tvExitLog:TextView
@ -211,6 +212,7 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
clTelegraph=view.findViewById(R.id.clTelegraph)
tvExitLog=view.findViewById(R.id.tvExitLog)
tvVersion=view.findViewById(R.id.tvVersion)
clFire=view.findViewById(R.id.clFire)
setExpireDate()
@ -430,6 +432,12 @@ class SettingFragment: BaseFragment(), CoroutineScope by CoroutineScope(Dispatch
intent.setData(uri)
startActivity(intent)
}
clFire.setOnClickListener {
val uri = Uri.parse(BZYConstants.PopularApplicationsUrl)
val intent = Intent(Intent.ACTION_VIEW)
intent.setData(uri)
startActivity(intent)
}
tvExitLog.setOnClickListener {
cleanUserInfo()

View File

@ -485,6 +485,14 @@ interface HttpApi {
).toString()
): AppVersionCheckRsp
@Headers(
"User-Agent: Octopus_Android"
)
@GET("/netbarcloud/vpn/upgradeVersion")
suspend fun upgradeVersion(
@QueryMap params: Map<String, String>
): AppVersionCheckRsp
//忘记密码
@Headers(
"User-Agent: Octopus_Android"

View File

@ -52,5 +52,7 @@ enum class HttpReqType(type: Int) {
AppStartupStatus(48),
AppUpStatus(49),
AppStopStatus(50),
SplashBg(51)
SplashBg(51),
GETAPPVERION(52),
StripeWeChat(53)
}

View File

@ -135,6 +135,19 @@ class LoginAtyVM : PublicViewMode() {
}
}
}
fun upgradeVersion() {
val httpApi = NetService.instances.createHttpsEncodeStr(HttpApi::class.java)
val phoneNumber =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
val params = mutableMapOf(
"phoneNumber" to phoneNumber,
"versionNo" to BuildConfig.VERSION_CODE.toString(),
"versionType" to "1", //android写死
"invitationCode" to BuildConfig.productId,
)
Log.d("appCheck==>$params")
doAsync(HttpReqType.GETAPPVERION) {
httpApi.upgradeVersion(params)
}
}
}

View File

@ -13,6 +13,7 @@ import com.yingmao.clash.base.PublicViewMode
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.CheckLoginRsp
import com.yingmao.clash.listener.AsyncCallback
import com.yingmao.clash.listener.DownLoadListener
import com.yingmao.clash.net.http.HttpApi
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.NetService
@ -100,4 +101,24 @@ class SplashAtyVM : PublicViewMode() {
val httpApi = NetService.instances.createHttps(HttpApi::class.java)
doAsync(HttpReqType.SplashBg) { httpApi.splashBg() }
}
fun appCheck() {
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,
"versionNo" to BuildConfig.VERSION_CODE.toString(),
"versionType" to "1", //android写死
"invitationCode" to BuildConfig.productId,
)
com.cncat.vpn.common.log.Log.d("appCheck==>$params")
doAsync(HttpReqType.App_VERION_CHECK) {
httpApi.appUpgrade(params)
}
}
fun downLoadFile(url: String, downLoadListener: DownLoadListener) {
NetService.instances.downloadFile(url, downLoadListener)
}
}

View File

@ -0,0 +1,299 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="130"
android:viewportHeight="130">
<path
android:fillColor="#fff"
android:pathData="M0,64.88a64.28,63.83 0,1 0,128.56 0a64.28,63.83 0,1 0,-128.56 0z" />
<path
android:fillColor="#5275e3"
android:pathData="M69.25,74.77l-0.21,0.31c-0.29,0.42 -0.59,0.84 -0.88,1.27l0,0.06 -0.8,1.22v0.06h-0.07l-1,1.33 0,0c-0.35,0.41 -0.69,0.82 -1,1.24l-1,1.4 -0.9,1.2c-0.08,0.13 -0.15,0.27 -0.23,0.39l-0.56,0.74 -0.72,0.88c-0.12,0.2 -0.25,0.4 -0.38,0.6l-0.45,0.47a0.14,0.14 0,0 0,-0.07 0.15l-0.69,1.17c-0.14,0.21 -0.27,0.43 -0.4,0.65l0,0.09 -0.08,0 -0.65,1.27 -0.15,0.34c-0.68,1.46 -1.35,2.92 -2,4.37l-0.08,0.39c-0.31,1.5 -0.62,3 -0.94,4.49l0,0.54v1c0,0.17 0,0.34 0,0.5l0.9,4.25 2.12,4.66a41.21,41.21 0,0 1,-5.53 -1.71,15.78 15.78,0 0,1 -9.35,-11.45c-0.16,-0.93 -0.33,-1.85 -0.5,-2.78s0,-2 -0.07,-3l-0.31,-1.24 -0.9,1.21 -0.44,1.11L41.04,94.49l-0.3,1c-0.16,0.82 -0.33,1.64 -0.5,2.46l-0.09,0.46 -0.07,0.44L40.02,103.49l0.42,2.51 0.15,0.65 0.21,0.68 0.23,0.53c0.29,0.63 0.59,1.26 0.89,1.89 0.14,0.25 0.29,0.5 0.44,0.75s0.22,0.36 0.32,0.54l0.19,0.27 0.16,0.24a0.07,0.07 0,0 1,0.09 0.09l0.94,1c2,1.41 4,2.84 6.05,4.21a14.29,14.29 0,0 0,2 1,19.69 19.69,0 0,1 -2.3,0.06c-11.92,-1 -20.55,-7.11 -23.09,-16.22l-0.72,-3.8c0,-0.65 -0.11,-1.29 -0.16,-1.94v-3.32c0,-0.49 0.08,-1 0.13,-1.47s0.11,-0.78 0.16,-1.18l0.12,-0.63 0.22,-0.56 3.76,-9c0.09,-0.16 0.19,-0.32 0.28,-0.49s0.2,-0.38 0.29,-0.57L31.59,76.49q2.58,-7 5.17,-14l0,-0.43 0.06,-5.47c0.07,-0.37 0.13,-0.74 0.2,-1.11a4.28,4.28 0,0 0,0.34 1.1c1.13,1.76 -1.52,4.83 2,5.75 -1.32,2.54 0.51,2.87 2.14,2.5 2,-0.47 0.57,-2.41 0.85,-3.63 0.33,-1.46 -0.19,-3.11 -0.35,-4.67l1.32,4.46c0.07,2.81 0.07,5.62 0.23,8.43 0.14,2.28 0.74,4.69 3.3,5.14 4.22,0.76 5.74,-2.59 7.38,-5.53a0.18,0.18 0,0 0,0 -0.16l0.26,-0.62h0l0.31,-0.69 0.15,-0.62L55.37,65.49l0.12,-0.62 0.32,-2.79c-0.08,-1.42 -0.17,-2.83 -0.25,-4.25l-0.07,-0.59L55.15,52.49a31.48,31.48 0,0 1,1 5.69c0,4.93 1.08,8.28 7.2,6.86a11.26,11.26 0,0 1,5.29 0c1.34,0.37 3.49,-1.16 4,1.36a4.12,4.12 0,0 1,-0.25 1.46c0.28,-0.56 0.6,-1.11 0.84,-1.7 0.35,-0.89 0.61,-1.82 1,-2.7 0.28,-0.67 0.68,-1.37 0.85,0.06v0.39c-0.27,0.67 -0.53,1.35 -0.8,2l-0.12,0.37 -1.73,3 -0.15,0.42 -0.39,0.66a0.12,0.12 0,0 1,-0.14 0.14l-0.69,1.17a0.11,0.11 0,0 1,-0.12 0.12l-0.39,0.68c0,0.09 0,0.14 -0.15,0.13 -0.21,0.4 -0.43,0.8 -0.64,1.21a0.09,0.09 0,0 1,0 0.14ZM37.71,63l-0.12,0.18 0.19,0.08s0.07,-0.08 0.07,-0.09A2.09,2.09 0,0 0,37.71 63Z" />
<path
android:fillColor="#54ace2"
android:pathData="M75.07,63.58c-0.17,-1.43 -0.57,-0.73 -0.85,-0.06 -0.37,0.88 -0.63,1.81 -1,2.7 -0.24,0.59 -0.56,1.14 -0.84,1.7A4.12,4.12 0,0 0,72.65 66.49c-0.56,-2.52 -2.71,-1 -4,-1.36a11.26,11.26 0,0 0,-5.29 0c-6.12,1.42 -7.22,-1.93 -7.2,-6.86 -0.21,-0.63 -0.32,-0.9 -0.43,-0.93l-0.19,0C54.71,47.49 47.65,39.88 45.99,30.32 44.13,19.66 49.58,5.49 58.37,0.16a2.16,2.16 0,0 1,0.63 -0.16c0,0.2 0.08,0.45 0,0.58 -9.14,13.91 -3.4,25.44 5.89,36.4 0.87,1 1.82,2 2.73,3 -0.23,-1.25 -0.4,-2.52 -0.69,-3.76a45.78,45.78 0,0 1,-0.42 -17.34A9.42,9.42 0,0 1,66.92 17.49a7.24,7.24 0,0 1,0.25 0.79C69.16,30.49 77.54,38.64 85.71,47c3.85,4 5.58,9 6,14.55l-0.56,0c0.73,4.94 -2.71,3.54 -5.14,3.16 -3.14,-0.5 -6.58,1.63 -9.44,-1.07ZM67.81,40.22l-0.08,-0.1s-0.08,0.06 -0.08,0.09 0,0.06 0.07,0.09Z" />
<path
android:fillColor="#5275e3"
android:pathData="M76.51,63.62c2.86,2.7 6.3,0.57 9.44,1.07 2.43,0.38 5.87,1.78 5.14,-3.16l0.56,0 0,0.4 0,3.22 0.06,0.09 -0.06,0.09c0,0.57 0,1.15 0,1.72 -0.33,2.11 -0.68,4.22 -1,6.34 -0.15,1.09 -0.59,3 -0.28,3.16 1.69,0.73 3.17,-0.31 4.08,-1.6A54.65,54.65 0,0 0,97.62 69.49l0.39,-1 0.56,-1.92 1,-3.59 0.5,0.42 0.17,1.15q0.23,8.17 0.46,16.36l-0.08,1.37c-0.16,1.12 -0.31,2.23 -0.47,3.34 -2.46,16.33 -10.68,27.79 -27.44,32 -0.33,0.09 -0.67,0.14 -1,0.21a8.06,8.06 0,0 1,0.89 -1c5.42,-4.18 9.75,-9.2 12.25,-15.64a0.11,0.11 0,0 0,0.06 -0.12c0.09,-0.22 0.18,-0.44 0.26,-0.65 0.3,-1.38 0.59,-2.76 0.88,-4.14l0.16,-1.15c-0.09,-1.31 -0.17,-2.61 -0.26,-3.92l-0.75,0.7v0.07h-0.07L84.71,92.49l-0.26,0.42c-0.09,0.19 -0.19,0.38 -0.29,0.57s0,0.29 -0.08,0.43l-0.42,0.72 -0.72,1.1 -0.44,0.57a0.14,0.14 0,0 1,-0.08 0.17l-0.38,0.5c-0.44,0.55 -0.87,1.1 -1.3,1.66l-0.85,1A21.32,21.32 0,0 1,69.57 106.49c-4.28,1.27 -3.51,-2.09 -3.39,-4.21 0.54,-9.87 7.15,-17.52 10,-26.54 0.28,-1.45 0.55,-2.9 0.83,-4.36l0.1,-0.86L77.11,68.16l-0.11,-1.09L76.71,64.21Z" />
<path
android:fillColor="#54ace2"
android:pathData="M43.36,61.06l-1.32,-4.46c0.16,1.56 0.68,3.21 0.35,4.67 -0.28,1.22 1.18,3.16 -0.85,3.63 -1.63,0.37 -3.46,0 -2.14,-2.5 -3.53,-0.92 -0.88,-4 -2,-5.75a4.28,4.28 0,0 1,-0.34 -1.1c-0.07,0.37 -0.13,0.74 -0.2,1.11 -1.2,-4.5 -3.71,-7.62 -8.7,-8.12 -0.15,0 -0.28,-0.16 -0.42,-0.25 0.15,-0.14 0.28,-0.38 0.44,-0.4 5.49,-0.48 10.37,0.4 13.14,5.89 -0.06,0.14 -0.13,0.27 -0.19,0.4l0.34,0 0,0.09c0,0.48 0,1 0,1.42 0,0 0.19,0.1 0.3,0.15l0,-1.09Z" />
<path
android:fillColor="#5275e3"
android:pathData="M100.71,80.89q-0.24,-8.18 -0.46,-16.36A66.36,66.36 0,0 1,100.71 80.89Z" />
<path
android:fillColor="#5275e3"
android:pathData="M100.12,63.38l-0.5,-0.42 -1,3.59 0.75,-3.43c0.14,-0.64 0.27,-1.27 0.41,-1.9Z" />
<path
android:fillColor="#5275e3"
android:pathData="M85.24,91.96l0.75,-0.7c0.09,1.31 0.17,2.61 0.26,3.92C85.53,94.22 87.41,92.49 85.24,91.96Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M56.95,94.05c0.68,-1.45 1.35,-2.91 2,-4.37C58.3,91.14 57.63,92.6 56.95,94.05Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M55.56,57.83c0.08,1.42 0.17,2.83 0.25,4.25C55.71,60.66 55.64,59.25 55.56,57.83Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M86.09,96.33c-0.29,1.38 -0.58,2.76 -0.88,4.14C85.51,99.09 85.8,97.71 86.09,96.33Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M77.05,71.41c-0.28,1.46 -0.55,2.91 -0.83,4.36Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M25.96,97.87l0.72,3.8Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M55.93,98.93c0.32,-1.5 0.63,-3 0.94,-4.49C56.56,95.94 56.25,97.43 55.93,98.93Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M56.86,105.21l-0.9,-4.25Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M25.8,92.61v0Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M72.43,69.38l1.73,-3C73.58,67.37 73.01,68.38 72.43,69.38Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M100.2,85.6c0.16,-1.11 0.31,-2.22 0.47,-3.34C100.51,83.38 100.36,84.49 100.2,85.6Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M76.71,64.21l0.37,2.86Z" />
<path
android:fillColor="#5275e3"
android:pathData="M42.32,90.94l0.9,-1.21 0.31,1.24Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M43.6,93.93c0.17,0.93 0.34,1.85 0.5,2.78C43.94,95.78 43.77,94.85 43.6,93.93Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M40.44,106.01 L40.02,103.49Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M77.15,68.16v0Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M41.04,94.49l0.84,-2.45Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M31.59,76.49l-0.83,2.23Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M40.24,97.95c0.17,-0.82 0.34,-1.64 0.5,-2.46C40.58,96.31 40.41,97.13 40.24,97.95Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M74.28,65.99c0.27,-0.67 0.53,-1.35 0.8,-2C74.81,64.64 74.55,65.32 74.28,65.99Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M16.99,191.95c-0.88,-1.89 -1.77,-3.79 -2.65,-5.69C15.22,188.16 16.11,190.06 16.99,191.95Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M65.25,80.31c0.34,-0.42 0.68,-0.83 1,-1.24C65.93,79.49 65.59,79.89 65.25,80.31Z" />
<path
android:fillColor="#54ace2"
android:pathData="M41.71,54.7l0,1.09c-0.11,0 -0.29,-0.1 -0.3,-0.15 0,-0.47 0,-0.94 0,-1.42C41.55,54.38 41.63,54.54 41.71,54.7Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M68.16,76.35c0.29,-0.43 0.59,-0.85 0.88,-1.27C68.71,75.49 68.45,75.92 68.16,76.35Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M66.3,79.03l1,-1.33Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M63.38,82.91l0.9,-1.2Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M91.71,65.17l0,-3.22Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M23.4,200.66l-2.8,-3Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M59.13,89.34l0.65,-1.27Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M67.32,77.63l0.8,-1.22Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M69.76,73.91c0.21,-0.41 0.43,-0.81 0.64,-1.21C70.19,73.1 69.97,73.49 69.76,73.91Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M71.06,71.77 L71.71,70.6Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M55.92,100.49v-1C55.92,99.8 55.92,100.13 55.92,100.49Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M79.92,99.63l0.85,-1Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M62.59,84.04l0.56,-0.74Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M26.09,89.96c-0.05,0.4 -0.11,0.79 -0.16,1.18C25.98,90.75 26.04,90.36 26.09,89.96Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M98.01,68.49l-0.39,1Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M91.71,67.07c0,-0.57 0,-1.15 0,-1.72C91.71,65.92 91.71,66.49 91.71,67.07Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M13.65,184.68l-0.63,-2.06Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M61.49,85.49c0.13,-0.2 0.26,-0.4 0.38,-0.6Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M83.71,94.67l0.42,-0.72Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M59.88,87.96c0.13,-0.22 0.26,-0.44 0.4,-0.65C60.14,87.49 60.01,87.74 59.88,87.96Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M70.55,72.57l0.39,-0.68Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M69.25,74.77l0.48,-0.72Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M71.89,70.49l0.39,-0.66Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M82.53,96.34l0.44,-0.57Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M84.19,93.49c0.1,-0.19 0.2,-0.38 0.29,-0.57Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M30.47,79.31c-0.09,0.17 -0.19,0.33 -0.28,0.49C30.28,79.64 30.38,79.49 30.47,79.31Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M26.43,88.77l-0.22,0.56Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M84.71,92.49l0.43,-0.49Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M54.98,67.01l-0.15,0.62Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M40.08,98.85l0.07,-0.44Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M55.49,64.87l-0.12,0.62Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M19.29,195.84l-1,-1.61Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M82.07,97.01l0.38,-0.5Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M54.52,68.32h0Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M54.3,68.94a0.18,0.18 0,0 1,0 0.16s0,-0.11 0,-0.16Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M36.79,62.13l0,0.43Z" />
<path
android:fillColor="#54ace2"
android:pathData="M41.46,54.13l-0.34,0c0.06,-0.13 0.13,-0.26 0.19,-0.4Z" />
<path
android:fillColor="#5275e3"
android:pathData="M60.97,86.14a0.14,0.14 0,0 1,0.07 -0.15C61.06,86.07 61.04,86.12 60.97,86.14Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M84.95,101.12a0.11,0.11 0,0 1,-0.06 0.12l-0.05,-0.09Z" />
<path
android:fillColor="#fc4d02"
android:pathData="M20.31,197.37l-0.47,-0.72Z" />
<path
android:fillColor="#5275e3"
android:pathData="M37.71,63a2.09,2.09 0,0 1,0.14 0.17s0,0.09 -0.07,0.09l-0.19,-0.08Z" />
<path
android:fillColor="#f3f3f2"
android:pathData="M67.81,40.22l-0.09,0.08s-0.07,-0.06 -0.07,-0.09 0,-0.06 0.08,-0.09Z" />
<path
android:fillColor="#54ace2"
android:pathData="M42.39,58.15" />
<path
android:fillColor="#54ace2"
android:pathData="M35.71,55.78" />
</vector>

View File

@ -56,6 +56,15 @@
app:srcCompat="@drawable/alipay"
android:visibility="gone"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivStripeWechatPay"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@drawable/press_effect"
android:padding="5dp"
android:visibility="gone"
android:layout_marginStart="20dp"
app:srcCompat="@drawable/wechat" />
</LinearLayout>
</LinearLayout>

View File

@ -3,12 +3,24 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/activity_bingding_bg"
android:gravity="center"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
android:paddingRight="10dp"
android:background="@color/translate"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:background="@drawable/activity_bingding_bg"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="@dimen/dp_10"
android:layout_marginTop="@dimen/dp_10"
>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -37,6 +49,9 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:autoLink="web"
android:gravity="left"
android:textColor="#4072FE"
@ -47,6 +62,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:autoLink="web"
android:gravity="left"
android:textColor="#4072FE"
@ -129,6 +146,8 @@
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</LinearLayout>

View File

@ -558,7 +558,7 @@
android:layout_marginTop="12dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clInitializationRepair"
android:id="@+id/clFire"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
@ -572,16 +572,16 @@
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiInitializationRepair"
android:id="@+id/aiFire"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:src="@drawable/ic_init"
app:layout_constraintBottom_toBottomOf="@+id/llInitializationRepair"
android:src="@drawable/setting_fire_line"
app:layout_constraintBottom_toBottomOf="@+id/llFire"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/llInitializationRepair" />
app:layout_constraintTop_toTopOf="@+id/llFire" />
<LinearLayout
android:id="@+id/llInitializationRepair"
android:id="@+id/llFire"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
@ -589,34 +589,35 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aiInitializationRepair"
app:layout_constraintStart_toEndOf="@+id/aiFire"
android:layout_marginTop="25dp"
android:layout_marginBottom="25dp"
android:layout_marginStart="12dp"
>
<TextView
android:id="@+id/tvInit"
android:id="@+id/tvFire"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/InitializationRepair"
android:text="@string/PopularApplications"
android:textColor="@color/gray_828282"
android:textSize="14sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/tvInitStr"
android:id="@+id/tvFireStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/InitializationRepairStr"
android:text="@string/PopularApplicationsStr"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/gray_828282"
android:layout_marginTop="10dp"
android:layout_marginTop="5dp"
android:textSize="12sp"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTelegraph"
android:layout_width="0dp"
@ -944,6 +945,9 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -952,7 +956,6 @@
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="80dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clApplicationLanguage"
@ -1014,7 +1017,77 @@
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clInitializationRepair"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/setting_model_bg"
android:elevation="10dp"
android:layout_marginBottom="5dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:outlineSpotShadowColor="@color/blue_CCDAFF"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiInitializationRepair"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:src="@drawable/ic_init"
app:layout_constraintBottom_toBottomOf="@+id/llInitializationRepair"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/llInitializationRepair" />
<LinearLayout
android:id="@+id/llInitializationRepair"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginEnd="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aiInitializationRepair"
android:layout_marginTop="25dp"
android:layout_marginBottom="25dp"
android:layout_marginStart="12dp"
>
<TextView
android:id="@+id/tvInit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/InitializationRepair"
android:textColor="@color/gray_828282"
android:textSize="14sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/tvInitStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/InitializationRepairStr"
android:textColor="@color/gray_828282"
android:layout_marginTop="10dp"
android:textSize="12sp"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="90dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clExit"
android:layout_width="0dp"
@ -1076,6 +1149,69 @@
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTemp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/setting_model_bg"
android:layout_marginBottom="5dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:visibility="invisible"
android:outlineSpotShadowColor="@color/blue_CCDAFF"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiTemp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:src="@mipmap/ic_setting_exit"
app:layout_constraintBottom_toBottomOf="@+id/clTemp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/clTemp"
/>
<LinearLayout
android:id="@+id/llTemp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginEnd="11dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="18dp"
android:layout_marginBottom="18dp"
app:layout_constraintStart_toEndOf="@+id/aiTemp"
android:layout_marginStart="12dp"
>
<TextView
android:id="@+id/tvTemp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/exit"
android:textColor="@color/gray_828282"
android:textSize="14sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/tvTempStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/exitTxt"
android:maxLines="1"
android:ellipsize="end"
android:textColor="@color/gray_828282"
android:layout_marginTop="5dp"
android:textSize="12sp"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>

View File

@ -346,4 +346,6 @@ Service Description\n
<string name="laPay">CYN</string>
<string name="Yuan">$元</string>
<string name="everyDay">每天</string>
<string name="PopularApplications">Popular applications</string>
<string name="PopularApplicationsStr">Popular Application Navigation</string>
</resources>

View File

@ -336,4 +336,6 @@
<string name="laPay">CYN</string>
<string name="Yuan">$元</string>
<string name="everyDay">每天</string>
<string name="PopularApplications">熱門應用</string>
<string name="PopularApplicationsStr">熱門應用導航</string>
</resources>

View File

@ -335,4 +335,6 @@
<string name="laPay">CYN</string>
<string name="Yuan">$元</string>
<string name="everyDay">每天</string>
<string name="PopularApplications">熱門應用</string>
<string name="PopularApplicationsStr">熱門應用導航</string>
</resources>

View File

@ -354,4 +354,6 @@
<string name="laPay">CYN</string>
<string name="Yuan">$元</string>
<string name="everyDay">每天</string>
<string name="PopularApplications">热门应用</string>
<string name="PopularApplicationsStr">热门应用导航</string>
</resources>