一键连相关更改
This commit is contained in:
parent
09bcec1012
commit
428995e243
|
|
@ -31,7 +31,16 @@ import androidx.viewpager2.widget.ViewPager2
|
||||||
import com.afollestad.materialdialogs.MaterialDialog
|
import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import com.afollestad.materialdialogs.customview.customView
|
import com.afollestad.materialdialogs.customview.customView
|
||||||
import com.afollestad.materialdialogs.customview.getCustomView
|
import com.afollestad.materialdialogs.customview.getCustomView
|
||||||
import com.airbnb.lottie.LottieAnimationView
|
import com.cncat.vpn.common.log.Log
|
||||||
|
import com.cncat.vpn.core.model.LogMessage
|
||||||
|
import com.cncat.vpn.service.ClashManager
|
||||||
|
import com.cncat.vpn.service.ProfileManager
|
||||||
|
import com.cncat.vpn.service.model.Profile
|
||||||
|
import com.cncat.vpn.service.remote.IClashManager
|
||||||
|
import com.cncat.vpn.service.remote.ILogObserver
|
||||||
|
import com.cncat.vpn.service.remote.IProfileManager
|
||||||
|
import com.cncat.vpn.service.remote.wrap
|
||||||
|
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
|
|
@ -41,14 +50,13 @@ import com.yingmao.clash.BuildConfig
|
||||||
import com.yingmao.clash.R
|
import com.yingmao.clash.R
|
||||||
import com.yingmao.clash.app.MainApplication
|
import com.yingmao.clash.app.MainApplication
|
||||||
import com.yingmao.clash.base.BaseActivity
|
import com.yingmao.clash.base.BaseActivity
|
||||||
import com.cncat.vpn.common.log.Log
|
|
||||||
import com.yingmao.clash.conf.BZYConstants
|
import com.yingmao.clash.conf.BZYConstants
|
||||||
import com.yingmao.clash.conf.Conf
|
import com.yingmao.clash.conf.Conf
|
||||||
import com.cncat.vpn.core.model.LogMessage
|
import com.yingmao.clash.entity.BannerImgBean
|
||||||
import com.yingmao.clash.entity.CheckLoginRsp
|
import com.yingmao.clash.entity.CheckLoginRsp
|
||||||
import com.yingmao.clash.fragment.NewAccFragment
|
import com.yingmao.clash.fragment.NewAccFragment
|
||||||
|
import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE
|
||||||
import com.yingmao.clash.fragment.mine.MineFragment
|
import com.yingmao.clash.fragment.mine.MineFragment
|
||||||
import com.yingmao.clash.fragment.recharge.BackupRechargeActivity
|
|
||||||
import com.yingmao.clash.listener.DownLoadListener
|
import com.yingmao.clash.listener.DownLoadListener
|
||||||
import com.yingmao.clash.net.http.HttpApi
|
import com.yingmao.clash.net.http.HttpApi
|
||||||
import com.yingmao.clash.net.http.HttpReqType
|
import com.yingmao.clash.net.http.HttpReqType
|
||||||
|
|
@ -58,35 +66,21 @@ import com.yingmao.clash.net.http.entity.AppVersionCheckRsp
|
||||||
import com.yingmao.clash.net.http.entity.GetActivityRsp
|
import com.yingmao.clash.net.http.entity.GetActivityRsp
|
||||||
import com.yingmao.clash.net.http.entity.HeartBeatRsp
|
import com.yingmao.clash.net.http.entity.HeartBeatRsp
|
||||||
import com.yingmao.clash.net.http.entity.PhDownloadUrlRsp
|
import com.yingmao.clash.net.http.entity.PhDownloadUrlRsp
|
||||||
|
import com.yingmao.clash.net.http.entity.ShowNode
|
||||||
import com.yingmao.clash.net.http.entity.SubscriptionRsp
|
import com.yingmao.clash.net.http.entity.SubscriptionRsp
|
||||||
import com.yingmao.clash.net.http.entity.VipSignRsp
|
import com.yingmao.clash.net.http.entity.VipSignRsp
|
||||||
import com.yingmao.clash.remote.Remote
|
import com.yingmao.clash.remote.Remote
|
||||||
import com.cncat.vpn.service.ClashManager
|
|
||||||
import com.cncat.vpn.service.ProfileManager
|
|
||||||
import com.cncat.vpn.service.model.Profile
|
|
||||||
import com.cncat.vpn.service.remote.IClashManager
|
|
||||||
import com.cncat.vpn.service.remote.ILogObserver
|
|
||||||
import com.cncat.vpn.service.remote.IProfileManager
|
|
||||||
import com.cncat.vpn.service.remote.wrap
|
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
|
||||||
import com.yingmao.clash.entity.BannerImgBean
|
|
||||||
import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE
|
|
||||||
import com.yingmao.clash.net.http.entity.ExpensesRecordRsp
|
|
||||||
import com.yingmao.clash.net.http.entity.ShowNode
|
|
||||||
import com.yingmao.clash.util.AESUtil
|
import com.yingmao.clash.util.AESUtil
|
||||||
import com.yingmao.clash.util.CommonUtils
|
import com.yingmao.clash.util.CommonUtils
|
||||||
import com.yingmao.clash.util.Utils
|
import com.yingmao.clash.util.Utils
|
||||||
import com.yingmao.clash.view.RxToast
|
import com.yingmao.clash.view.RxToast
|
||||||
import com.yingmao.clash.view.adapter.MainVPAdapter
|
import com.yingmao.clash.view.adapter.MainVPAdapter
|
||||||
import com.yingmao.clash.view.dialog.ActivityViewDialog
|
import com.yingmao.clash.view.dialog.ActivityViewDialog
|
||||||
import com.yingmao.clash.view.dialog.ActivityViewDialog.OnDialogClickListener
|
|
||||||
import com.yingmao.clash.view.dialog.DialogAppVersion
|
import com.yingmao.clash.view.dialog.DialogAppVersion
|
||||||
import com.yingmao.clash.view.dialog.DialogBandChoose
|
import com.yingmao.clash.view.dialog.DialogBandChoose
|
||||||
import com.yingmao.clash.view.dialog.DialogNotice
|
|
||||||
import com.yingmao.clash.view.dialog.HomeActivityDialog
|
import com.yingmao.clash.view.dialog.HomeActivityDialog
|
||||||
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
|
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
|
||||||
import com.yingmao.clash.vm.MainAtyVM
|
import com.yingmao.clash.vm.MainAtyVM
|
||||||
import com.yingmao.clash.webview.BZYWebViewKeFu
|
|
||||||
import com.yingmao.clash.webview.BZYWebViewNormal
|
import com.yingmao.clash.webview.BZYWebViewNormal
|
||||||
import com.yingmao.clash.webview.CustomerServiceWebView
|
import com.yingmao.clash.webview.CustomerServiceWebView
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
|
@ -133,10 +127,14 @@ class NewMainActivity : BaseActivity() {
|
||||||
private var u_timerTask: TimerTask? = null
|
private var u_timerTask: TimerTask? = null
|
||||||
private lateinit var clDeepSeek:ConstraintLayout
|
private lateinit var clDeepSeek:ConstraintLayout
|
||||||
private lateinit var floating:FloatingActionButton
|
private lateinit var floating:FloatingActionButton
|
||||||
|
var payResultLoading: RxDialogShapeLoading? = null
|
||||||
|
private var timerJob: Job? = null
|
||||||
|
private var loadingTimeoutNum = 3
|
||||||
companion object {
|
companion object {
|
||||||
//记录心跳失败次数
|
//记录心跳失败次数
|
||||||
var HEART_BEAT_FAILURE_FREQUENCY = 0
|
var HEART_BEAT_FAILURE_FREQUENCY = 0
|
||||||
const val REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY = 1000
|
const val REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY = 1000
|
||||||
|
var isSubbed = false
|
||||||
var isSubed = false
|
var isSubed = false
|
||||||
var newUuid: String? = null
|
var newUuid: String? = null
|
||||||
var subUrl: String? = null
|
var subUrl: String? = null
|
||||||
|
|
@ -495,8 +493,6 @@ class NewMainActivity : BaseActivity() {
|
||||||
checkPayResultDia?.dismiss()
|
checkPayResultDia?.dismiss()
|
||||||
mainAtyVM.getAirNodes()
|
mainAtyVM.getAirNodes()
|
||||||
RxToast.info(resources.getString(R.string.SuccessfullyUpdatedUserInformation))
|
RxToast.info(resources.getString(R.string.SuccessfullyUpdatedUserInformation))
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// RxToast.info(resources.getString(R.string.PaymentResultsStr))
|
// RxToast.info(resources.getString(R.string.PaymentResultsStr))
|
||||||
}
|
}
|
||||||
|
|
@ -983,9 +979,6 @@ class NewMainActivity : BaseActivity() {
|
||||||
dialog.show()
|
dialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
var payResultLoading: RxDialogShapeLoading? = null
|
|
||||||
private var timerJob: Job? = null
|
|
||||||
private var loadingTimeoutNum = 3
|
|
||||||
private fun showLoadingDialog(msg: String) {
|
private fun showLoadingDialog(msg: String) {
|
||||||
payResultLoading = RxDialogShapeLoading(this)
|
payResultLoading = RxDialogShapeLoading(this)
|
||||||
payResultLoading!!.setMessage(msg)
|
payResultLoading!!.setMessage(msg)
|
||||||
|
|
@ -1199,42 +1192,58 @@ class NewMainActivity : BaseActivity() {
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
|
|
||||||
public suspend fun setSub2(url: String) {
|
private suspend fun setSub2(url: String) {
|
||||||
Log.d("setSub2 2")
|
|
||||||
profileBinder?.let { pm ->
|
profileBinder?.let { pm ->
|
||||||
Log.d("setSub2 3")
|
|
||||||
pm.queryAll().forEach { itemPro ->
|
pm.queryAll().forEach { itemPro ->
|
||||||
Log.d("setSub2 itemPro ==>${itemPro}")
|
|
||||||
if (itemPro.name != Conf.getClashConfName(this@NewMainActivity.applicationContext)) {
|
if (itemPro.name != Conf.getClashConfName(this@NewMainActivity.applicationContext)) {
|
||||||
Log.d("setSub2 delete ==>${itemPro.name}")
|
|
||||||
pm.delete(itemPro.uuid)
|
pm.delete(itemPro.uuid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val pro = pm.queryActive()
|
val pro = pm.queryActive()
|
||||||
Log.d("setSub2 4")
|
|
||||||
pro?.let {
|
pro?.let {
|
||||||
var actname = it.name
|
|
||||||
Log.d("new main actname==>" + actname)
|
|
||||||
Log.d("setSub2 pro 已存在 ==>")
|
|
||||||
pm.setActive(it)
|
pm.setActive(it)
|
||||||
delay(500)
|
delay(500)
|
||||||
|
//判断配置文件source
|
||||||
if (!TextUtils.isEmpty(pro.source)) {
|
if (!TextUtils.isEmpty(pro.source)) {
|
||||||
// Log.d("setSub2 pro.source==>${pro.source}, url==>${url}")
|
Log.d("setSub2 pro.source==>${pro.source}, url==>${url}")
|
||||||
|
//订阅链接不同就更换
|
||||||
if (pro.source != url) {
|
if (pro.source != url) {
|
||||||
Log.d("setSub2 patch")
|
pm.patch(
|
||||||
pm.patch(pro.uuid, pro.name, url, 1800000L)
|
pro.uuid, pro.name,
|
||||||
|
url, 1800000L
|
||||||
|
)
|
||||||
pm.commit(pro.uuid) { status ->
|
pm.commit(pro.uuid) { status ->
|
||||||
Log.d("setSub2 updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress)
|
android.util.Log.d(
|
||||||
|
Conf.TAG,
|
||||||
|
"new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pm.update(it.uuid)
|
pm.update(it.uuid)
|
||||||
|
newUuid = pro.uuid.toString()
|
||||||
newUuid = pro.uuid.toString();
|
isSubbed = true
|
||||||
isSubed = true
|
|
||||||
Log.d("setSub2 setActive end")
|
|
||||||
} ?: run {
|
} ?: run {
|
||||||
createMyProfile(pm, url)
|
val uuid: UUID = pm.create(
|
||||||
|
Profile.Type.Url, Conf.getClashConfName(this@NewMainActivity.applicationContext)
|
||||||
|
)
|
||||||
|
delay(500)
|
||||||
|
pm.queryByUUID(uuid)?.let { qPro ->
|
||||||
|
pm.setActive(qPro)
|
||||||
|
pm.patch(
|
||||||
|
qPro.uuid, qPro.name,
|
||||||
|
url, 1800000L
|
||||||
|
)
|
||||||
|
pm.commit(qPro.uuid) { status ->
|
||||||
|
android.util.Log.d(
|
||||||
|
Conf.TAG,
|
||||||
|
"new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress
|
||||||
|
)
|
||||||
|
}
|
||||||
|
newUuid = qPro.uuid.toString()
|
||||||
|
isSubbed = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,11 +54,13 @@ import com.yingmao.clash.util.DataUtils
|
||||||
import com.yingmao.clash.util.DataUtils.getAllFilePath
|
import com.yingmao.clash.util.DataUtils.getAllFilePath
|
||||||
import com.yingmao.clash.view.RxToast
|
import com.yingmao.clash.view.RxToast
|
||||||
import com.yingmao.clash.view.adapter.LanguageAdapter
|
import com.yingmao.clash.view.adapter.LanguageAdapter
|
||||||
|
import com.yingmao.clash.view.dialog.DialogDoMainChoose
|
||||||
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
|
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
|
||||||
import com.yingmao.clash.view.popwindow.CommonPopupWindow
|
import com.yingmao.clash.view.popwindow.CommonPopupWindow
|
||||||
import com.yingmao.clash.vm.MainAtyVM
|
import com.yingmao.clash.vm.MainAtyVM
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.MainScope
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
@ -83,9 +85,11 @@ class SettingActivity : BaseActivity() {
|
||||||
private lateinit var clyszc: ConstraintLayout
|
private lateinit var clyszc: ConstraintLayout
|
||||||
private lateinit var clApplicationModeTitleStr: ConstraintLayout
|
private lateinit var clApplicationModeTitleStr: ConstraintLayout
|
||||||
private lateinit var llControlApplication: ConstraintLayout
|
private lateinit var llControlApplication: ConstraintLayout
|
||||||
|
private lateinit var clSwitching:ConstraintLayout
|
||||||
private lateinit var TVApplicationModeTxt:TextView
|
private lateinit var TVApplicationModeTxt:TextView
|
||||||
private var popupWindow: CommonPopupWindow? = null
|
private var popupWindow: CommonPopupWindow? = null
|
||||||
private var layoutGravity: CommonPopupWindow.LayoutGravity? = null
|
private var layoutGravity: CommonPopupWindow.LayoutGravity? = null
|
||||||
|
var dialogDoMainChoose: DialogDoMainChoose? = null
|
||||||
@RequiresApi(Build.VERSION_CODES.R)
|
@RequiresApi(Build.VERSION_CODES.R)
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
@ -106,6 +110,13 @@ class SettingActivity : BaseActivity() {
|
||||||
clApplicationModeTitleStr=findViewById(R.id.clApplicationModeTitleStr)
|
clApplicationModeTitleStr=findViewById(R.id.clApplicationModeTitleStr)
|
||||||
llControlApplication=findViewById(R.id.llControlApplication)
|
llControlApplication=findViewById(R.id.llControlApplication)
|
||||||
TVApplicationModeTxt=findViewById(R.id.TVApplicationModeTxt)
|
TVApplicationModeTxt=findViewById(R.id.TVApplicationModeTxt)
|
||||||
|
clSwitching=findViewById(R.id.clSwitching)
|
||||||
|
|
||||||
|
clSwitching.setOnClickListener {
|
||||||
|
RxToast.info(getString(R.string.Switching))
|
||||||
|
showDomainList()
|
||||||
|
}
|
||||||
|
|
||||||
clApplicationModeTitleStr.setOnClickListener {
|
clApplicationModeTitleStr.setOnClickListener {
|
||||||
if (NewAccFragment.clashRunning) {
|
if (NewAccFragment.clashRunning) {
|
||||||
RxToast.info("请关闭加速后再选择.")
|
RxToast.info("请关闭加速后再选择.")
|
||||||
|
|
@ -731,4 +742,51 @@ class SettingActivity : BaseActivity() {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
private fun showDomainList() {
|
||||||
|
try {
|
||||||
|
SplashHelper(mainAtyVM).getHostWithFallback { success ->
|
||||||
|
MainScope().launch {
|
||||||
|
if (success) {
|
||||||
|
if (dialogDoMainChoose == null) {
|
||||||
|
dialogDoMainChoose = DialogDoMainChoose(this@SettingActivity)
|
||||||
|
}
|
||||||
|
if (dialogDoMainChoose?.isShowing == false) {
|
||||||
|
dialogDoMainChoose?.setOnTryButtonListener(object :
|
||||||
|
DialogDoMainChoose.OnTryButtonListener {
|
||||||
|
override fun tryButton() {
|
||||||
|
RxToast.info(getString(R.string.ModificationFailed))
|
||||||
|
dialogDoMainChoose?.dismiss()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun cancel() {
|
||||||
|
dialogDoMainChoose?.dismiss()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
dialogDoMainChoose?.setOnListItemListener(object :
|
||||||
|
DialogDoMainChoose.OnListItemListener {
|
||||||
|
override fun listItemClick() {
|
||||||
|
RxToast.info(getString(R.string.StorageSuccessful))
|
||||||
|
|
||||||
|
MainApplication.restartApp(this@SettingActivity,object:MainApplication.OnRestartButtonListener{
|
||||||
|
|
||||||
|
override fun enterButton() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun cancelButton() {
|
||||||
|
dialogDoMainChoose?.dismiss()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
dialogDoMainChoose?.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -21,7 +21,7 @@ import java.util.ArrayList
|
||||||
open class PublicViewMode : BaseViewMode() {
|
open class PublicViewMode : BaseViewMode() {
|
||||||
fun getHost(callback: AsyncCallback) {
|
fun getHost(callback: AsyncCallback) {
|
||||||
val rt =
|
val rt =
|
||||||
NetService.instances.createFreeBaseUrl("https://pubtofile.oss-cn-hongkong.aliyuncs.com/app_host/")
|
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||||||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||||||
try { //TODO bug 会引起崩溃
|
try { //TODO bug 会引起崩溃
|
||||||
val host = when {
|
val host = when {
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
|
||||||
accelerateIv.setOnClickListener(this)
|
accelerateIv.setOnClickListener(this)
|
||||||
refreshExpireIv=view.findViewById(R.id.refresh_expire_iv)
|
refreshExpireIv=view.findViewById(R.id.refresh_expire_iv)
|
||||||
tvDelayMs=view.findViewById(R.id.tvDelayMs)
|
tvDelayMs=view.findViewById(R.id.tvDelayMs)
|
||||||
refreshExpireIv.setOnClickListener {
|
tvEndTime.setOnClickListener {
|
||||||
updateUserInfo()
|
updateUserInfo()
|
||||||
}
|
}
|
||||||
setExpireDate()
|
setExpireDate()
|
||||||
|
|
|
||||||
|
|
@ -93,10 +93,10 @@ class NetService private constructor() : INetService {
|
||||||
// .sslSocketFactory(getSSLSocketFactory(), CustomTrustManager())//信任所有证书
|
// .sslSocketFactory(getSSLSocketFactory(), CustomTrustManager())//信任所有证书
|
||||||
.sslSocketFactory(getSSLSocketFactory(), trustAllCerts[0] as X509TrustManager)
|
.sslSocketFactory(getSSLSocketFactory(), trustAllCerts[0] as X509TrustManager)
|
||||||
.hostnameVerifier(getHostnameVerifier()!!)
|
.hostnameVerifier(getHostnameVerifier()!!)
|
||||||
// if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
// builder.addInterceptor(loggingInterceptor)
|
builder.addInterceptor(loggingInterceptor)
|
||||||
// }
|
}
|
||||||
builder.addInterceptor(loggingInterceptor)
|
// builder.addInterceptor(loggingInterceptor)
|
||||||
return builder.build()
|
return builder.build()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="20dp"
|
||||||
|
android:height="20dp"
|
||||||
|
android:viewportWidth="1024"
|
||||||
|
android:viewportHeight="1024">
|
||||||
|
<path
|
||||||
|
android:pathData="M783.1,848.5c-79.8,64.7 -175.9,96.6 -271.7,96.6 -111,0 -221.6,-42.8 -305.9,-127.1 -147.3,-147.3 -168,-374.8 -54.8,-544.7l29.5,96.9c2.9,9.6 11.7,15.8 21.3,15.8 2.1,0 4.3,-0.3 6.5,-1 11.8,-3.6 18.4,-16 14.8,-27.8l-41.9,-137.3c-2.9,-9.6 -11.7,-15.6 -21.2,-15.7h-2.2c-3.8,0 -7.5,0.9 -10.8,2.8L15.8,246.9C4,250.4 -2.6,262.9 1,274.6c3.6,11.8 16,18.4 27.8,14.8l73.2,-22.3c-48.2,80.3 -71.8,173.6 -67.1,268.6C40.7,654.1 90.1,765.5 174,849.4c83.9,83.9 195.3,133.3 313.7,139.1 7.9,0.4 15.8,0.6 23.6,0.6 109.2,0 214.9,-37.2 299.8,-106.1 9.6,-7.7 11,-21.8 3.3,-31.3 -7.8,-9.5 -21.8,-11 -31.3,-3.2zM1023,749.4c-3.6,-11.8 -16,-18.4 -27.8,-14.8L922,756.9c48.2,-80.3 71.8,-173.6 67.1,-268.6 -5.8,-118.4 -55.2,-229.8 -139.1,-313.7C766.2,90.7 654.8,41.3 536.4,35.5 418.8,29.7 303.9,67.2 212.9,141c-9.6,7.7 -11,21.8 -3.3,31.3 7.7,9.6 21.8,11 31.3,3.3C413.2,35.9 661.5,49 818.6,206.1c147.3,147.3 168,374.8 54.8,544.6l-29.5,-96.8c-3.6,-11.8 -16,-18.4 -27.8,-14.8 -11.8,3.6 -18.4,16 -14.8,27.8l41.9,137.3c1.7,5.6 5.6,10.4 10.8,13.2 3.3,1.7 6.9,2.6 10.5,2.6 0.3,0 0.7,-0.1 1,-0.1 0.3,0 0.6,0.1 1,0.1 3.9,0 7.7,-1 11.1,-3l130.8,-39.9c11.6,-3.5 18.2,-16 14.6,-27.7z"
|
||||||
|
android:fillColor="#FF8A04"/>
|
||||||
|
</vector>
|
||||||
|
|
@ -114,9 +114,8 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
android:layout_marginStart="21dp"
|
android:layout_marginStart="21dp"
|
||||||
android:layout_marginEnd="21dp"
|
android:layout_marginEnd="21dp"
|
||||||
android:layout_marginTop="22dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginBottom="22dp"
|
android:layout_marginBottom="10dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
>
|
>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
@ -125,7 +124,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="10dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
android:text="@string/LanguageStr"
|
android:text="@string/LanguageSwitchingStr"
|
||||||
android:textColor="#5A2B31"
|
android:textColor="#5A2B31"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
|
@ -153,7 +152,54 @@
|
||||||
app:layout_constraintEnd_toStartOf="@+id/aiLanguage"
|
app:layout_constraintEnd_toStartOf="@+id/aiLanguage"
|
||||||
app:layout_constraintTop_toTopOf="@+id/aiLanguage" />
|
app:layout_constraintTop_toTopOf="@+id/aiLanguage" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/clSwitching"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/clLanguageSwitchingStr"
|
||||||
|
android:layout_marginStart="21dp"
|
||||||
|
android:layout_marginEnd="21dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvSwitching"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
android:text="@string/source_switch"
|
||||||
|
android:textColor="#5A2B31"
|
||||||
|
android:textSize="16sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/aiSwitching"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/oc_xy"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/tvSwitching"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/tvSwitching" />
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="5dp"
|
||||||
|
android:text="@string/Consistentdevice"
|
||||||
|
android:textColor="#828282"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:textSize="11sp"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/aiSwitching"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/aiSwitching"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/aiSwitching" />
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
|
@ -279,7 +325,7 @@
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
android:layout_marginStart="21dp"
|
android:layout_marginStart="21dp"
|
||||||
android:layout_marginEnd="21dp"
|
android:layout_marginEnd="21dp"
|
||||||
android:layout_marginTop="22dp"
|
android:layout_marginTop="10dp"
|
||||||
>
|
>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
|
@ -312,7 +358,7 @@
|
||||||
android:background="#E59E4D"
|
android:background="#E59E4D"
|
||||||
android:layout_marginStart="21dp"
|
android:layout_marginStart="21dp"
|
||||||
android:layout_marginEnd="21dp"
|
android:layout_marginEnd="21dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="10dp"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/clServiceTerms"
|
app:layout_constraintTop_toBottomOf="@+id/clServiceTerms"
|
||||||
|
|
@ -327,8 +373,8 @@
|
||||||
app:layout_constraintTop_toBottomOf="@+id/LineView"
|
app:layout_constraintTop_toBottomOf="@+id/LineView"
|
||||||
android:layout_marginStart="21dp"
|
android:layout_marginStart="21dp"
|
||||||
android:layout_marginEnd="21dp"
|
android:layout_marginEnd="21dp"
|
||||||
android:layout_marginTop="16dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginBottom="20dp"
|
android:layout_marginBottom="10dp"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,14 +55,17 @@
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:textColor="@color/orange_FF8A04"
|
android:textColor="@color/orange_FF8A04"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold"
|
||||||
|
android:drawableRight="@drawable/ic_refresh"
|
||||||
|
android:drawablePadding="5dp"
|
||||||
|
/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_marginStart="5dp"
|
android:layout_marginStart="5dp"
|
||||||
android:id="@+id/refresh_expire_iv"
|
android:id="@+id/refresh_expire_iv"
|
||||||
android:layout_width="25dp"
|
android:layout_width="25dp"
|
||||||
android:layout_height="25dp"
|
android:layout_height="25dp"
|
||||||
android:visibility="visible"
|
android:visibility="gone"
|
||||||
android:src="@drawable/refresh2"
|
android:src="@drawable/refresh2"
|
||||||
android:tint="@color/orange_FF8A04"
|
android:tint="@color/orange_FF8A04"
|
||||||
tools:ignore="UseAppTint"
|
tools:ignore="UseAppTint"
|
||||||
|
|
|
||||||
|
|
@ -395,4 +395,5 @@ Service Description\n
|
||||||
<string name="RecommendedRoutes">Recommended route</string>
|
<string name="RecommendedRoutes">Recommended route</string>
|
||||||
<string name="timeOut">Route timeout</string>
|
<string name="timeOut">Route timeout</string>
|
||||||
<string name="deepSeekStr">AI Chat</string>
|
<string name="deepSeekStr">AI Chat</string>
|
||||||
|
<string name="Switching">Switching, please wait</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -385,4 +385,5 @@
|
||||||
<string name="RecommendedRoutes">推薦線路</string>
|
<string name="RecommendedRoutes">推薦線路</string>
|
||||||
<string name="timeOut">線路超時</string>
|
<string name="timeOut">線路超時</string>
|
||||||
<string name="deepSeekStr">AI 聊天</string>
|
<string name="deepSeekStr">AI 聊天</string>
|
||||||
|
<string name="Switching">切換中,請稍後</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -383,4 +383,5 @@
|
||||||
<string name="RecommendedRoutes">推薦線路</string>
|
<string name="RecommendedRoutes">推薦線路</string>
|
||||||
<string name="timeOut">線路超時</string>
|
<string name="timeOut">線路超時</string>
|
||||||
<string name="deepSeekStr">AI 聊天</string>
|
<string name="deepSeekStr">AI 聊天</string>
|
||||||
|
<string name="Switching">切換中,請稍後</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
@ -409,4 +409,5 @@
|
||||||
<string name="RecommendedRoutes">推荐线路</string>
|
<string name="RecommendedRoutes">推荐线路</string>
|
||||||
<string name="timeOut">线路超时</string>
|
<string name="timeOut">线路超时</string>
|
||||||
<string name="deepSeekStr">AI聊天</string>
|
<string name="deepSeekStr">AI聊天</string>
|
||||||
|
<string name="Switching">切换中,请稍后</string>
|
||||||
</resources>
|
</resources>
|
||||||
Loading…
Reference in New Issue