一键连新UI

This commit is contained in:
level 2025-10-16 19:47:50 +08:00
parent d82d815f92
commit a6c953021b
105 changed files with 5568 additions and 3436 deletions

View File

@ -116,7 +116,7 @@
android:name=".act.ActivityActivity"
android:process=":background"
android:screenOrientation="portrait" />
<activity android:name=".act.NewMainActivity"
<activity android:name=".act.MainActivity"
android:process=":background"
android:screenOrientation="portrait"
/>

View File

@ -34,7 +34,6 @@ class BandPhoneActivity : BaseActivity() {
private lateinit var etSmsCode: EditText
private var phoneNumber: String = ""
var isBandPhone = false
private lateinit var aiBack: AppCompatImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -45,10 +44,6 @@ class BandPhoneActivity : BaseActivity() {
tvAccount = findViewById(R.id.tv_account)
tvTitle = findViewById(R.id.tv_title)
etSmsCode = findViewById(R.id.et_sms_code)
aiBack=findViewById(R.id.aiBack)
aiBack.setOnClickListener {
finish()
}
tvSmsCode = findViewById(R.id.tv_sms_code)
tvSmsCode.setOnClickListener {

View File

@ -28,18 +28,17 @@ import com.google.gson.JsonParser
import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
import com.yingmao.clash.R
import com.yingmao.clash.act.NewMainActivity.Companion.clashBinder
import com.yingmao.clash.act.NewMainActivity.Companion.profileBinder
import com.yingmao.clash.act.NewMainActivity.Companion.subUrl
import com.yingmao.clash.act.MainActivity.Companion.clashBinder
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.act.MainActivity.Companion.subUrl
import com.yingmao.clash.app.MainApplication
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.ClashNodebBean
import com.yingmao.clash.fragment.NewAccFragment
import com.yingmao.clash.fragment.NewAccFragment.Companion.CHECK_NODE_REQUEST_CODE
import com.yingmao.clash.fragment.NewAccFragment.Companion.clashRunning
import com.yingmao.clash.fragment.NewAccFragment.Companion.isGlo
import com.yingmao.clash.fragment.home.HomeFragment.Companion.CHECK_NODE_REQUEST_CODE
import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.fragment.home.HomeFragment.Companion.isGlo
import com.yingmao.clash.remote.Resource
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
@ -323,7 +322,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener {
showLoading("正在获取...", this@ChangeNodeActivity)
startTimer()
launch(Dispatchers.IO) {
NewMainActivity.setSub2(nowSubUrl)
MainActivity.setSub2(nowSubUrl)
}
}
@ -338,7 +337,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener {
val reloadLock = Semaphore(10)
private fun setPing() {
if (!NewAccFragment.clashRunning) {
if (!clashRunning) {
RxToast.info("请先开启加速后,再进行测试.")
return
}

View File

@ -5,14 +5,12 @@ import android.content.Intent
import android.os.Bundle
import android.text.method.HideReturnsTransformationMethod
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.CheckBox
import android.widget.CompoundButton
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.lifecycle.ViewModelProvider
import com.cncat.vpn.common.log.Log
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
@ -20,9 +18,8 @@ import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.orhanobut.logger.Logger
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.act.NewMainActivity.Companion.profileBinder
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.base.BaseNotTitleActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
@ -36,26 +33,16 @@ import kotlinx.coroutines.launch
class ChangePwdActivity : BaseActivity() {
private lateinit var rxDialogShapeLoading : RxDialogShapeLoading
private lateinit var aiBack: AppCompatImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_change_pwd)
//点击输入框外边隐藏输入法 必须在setContentView之后调用
setupUI(findViewById<ViewGroup>(android.R.id.content).getChildAt(0))
initView()
}
private fun initView() {
aiBack=findViewById(R.id.aiBack)
aiBack.setOnClickListener {
finish()
}
}
override fun onResume() {
super.onResume()
val originalPasswordEt = findViewById<EditText>(R.id.et_original_password)
val originalPasswordErrorTv = findViewById<TextView>(R.id.tv_original_password_error)
val newPasswordEt = findViewById<EditText>(R.id.et_new_password)
val newPasswordErrorTv = findViewById<TextView>(R.id.tv_new_password_error)
val changeTv = findViewById<TextView>(R.id.tv_change)
val originalPasswordHideCb = findViewById<CheckBox>(R.id.cb_original_password_hide)
@ -69,15 +56,12 @@ class ChangePwdActivity : BaseActivity() {
val originalPassword = originalPasswordEt.text.toString().trim()
if (originalPassword.isBlank()) {
originalPasswordErrorTv.visibility = View.VISIBLE
originalPasswordErrorTv.text = getString(R.string.please_input_original_password)
getFocusAndShowSoftInput(originalPasswordEt)
return@setOnClickListener
}
val newPassword = newPasswordEt.text.toString().trim()
if (newPassword.isBlank()) {
newPasswordErrorTv.visibility = View.VISIBLE
newPasswordErrorTv.text = getString(R.string.please_input_new_password)
getFocusAndShowSoftInput(newPasswordEt)
return@setOnClickListener
}

View File

@ -87,10 +87,6 @@ class ForGetPwdActivity : BaseActivity(),
RxToast.error(resources.getString(R.string.enterPhoneNumber))
}
}
findViewById<AppCompatImageView>(R.id.aiBack).setOnClickListener {
finish()
}
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {

View File

@ -2,7 +2,6 @@ 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
@ -11,7 +10,6 @@ import android.text.SpannableStringBuilder
import android.text.TextUtils
import android.text.method.HideReturnsTransformationMethod
import android.text.method.LinkMovementMethod
import android.text.style.BackgroundColorSpan
import android.util.Log
import android.view.View
import android.view.ViewGroup
@ -30,15 +28,12 @@ import com.yingmao.clash.app.MainApplication
import com.yingmao.clash.base.BaseActivity
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
@ -240,7 +235,7 @@ class LoginActivity : BaseActivity(), View.OnClickListener {
}
private fun toMain() {
startActivity(Intent(this, NewMainActivity::class.java))
startActivity(Intent(this, MainActivity::class.java))
finish()
}

View File

@ -0,0 +1,734 @@
package com.yingmao.clash.act
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.widget.FrameLayout
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.AppCompatImageView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.customview.getCustomView
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.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import com.orhanobut.logger.Logger
import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
import com.yingmao.clash.R
import com.yingmao.clash.app.MainApplication
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.fragment.activity.vipFragment
import com.yingmao.clash.fragment.home.HomeFragment
import com.yingmao.clash.fragment.setting.SettingFragment
import com.yingmao.clash.net.http.HttpApi
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.NetService
import com.yingmao.clash.net.http.entity.AppVersionCheckRsp
import com.yingmao.clash.net.http.entity.ExpensesRecordRsp
import com.yingmao.clash.net.http.entity.GetActivityRsp
import com.yingmao.clash.net.http.entity.PhDownloadUrlRsp
import com.yingmao.clash.net.http.entity.SubscriptionRsp
import com.yingmao.clash.remote.Remote
import com.yingmao.clash.util.AESUtil
import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.ActivityViewDialog
import com.yingmao.clash.view.dialog.ActivityViewDialog.OnDialogClickListener
import com.yingmao.clash.view.dialog.DialogBandChoose
import com.yingmao.clash.view.dialog.NoticeViewDialog
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.vm.MainAtyVM
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Timer
import java.util.TimerTask
import java.util.UUID
class MainActivity : BaseActivity() {
val fragments = arrayListOf<Fragment>()
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
private var homeFragment: HomeFragment? = null
private var settingFragment: SettingFragment? = null
private var activityFragment: vipFragment? = null
private lateinit var aivHome:AppCompatImageView
private lateinit var aivCenter:AppCompatImageView
private lateinit var aivVip: AppCompatImageView
@SuppressLint("SimpleDateFormat")
private val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
private var activityDialog: ActivityViewDialog? = null
private var checkPayResultDia: MaterialDialog? = null
private var checkBindAccountDia: MaterialDialog? = null
private var currentTag = TAG_HOME
private val mPageInfo = ExpensesRecordActivity.PageInfo()
companion object {
var isVip:Boolean=false
//记录心跳失败次数
var HEART_BEAT_FAILURE_FREQUENCY = 0
const val REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY = 1000
var isSubed = false
var isSubbed = false
var subUrl: String? = null
var isUpload: Boolean = false
var hostsMem: ArrayList<String> = kotlin.collections.ArrayList()
var profileBinder: IProfileManager? = null
var newMainActGlo: Boolean = false
var newUuid: String? = null
var clashBinder: IClashManager? = null
private const val TAG_HOME = "home"
private const val TAG_PROFILE = "profile"
private const val TAG_RECHARGE = "recharge"
suspend fun setSub2(url: String) {
profileBinder?.let { pm ->
pm.queryAll().forEach { itemPro ->
if (itemPro.name != Conf.getClashConfName(MainApplication.getApp()?.applicationContext)) {
pm.delete(itemPro.uuid)
}
}
val pro = pm.queryAll().find {
it.name == Conf.getClashConfName(MainApplication.getApp()?.applicationContext)
}
pro?.let {
pm.setActive(it)
delay(500)
//判断配置文件source
if (!TextUtils.isEmpty(pro.source)) {
Log.d("setSub2 pro.source==>${pro.source}, url==>${url}")
//订阅链接不同就更换
if (pro.source != url) {
pm.patch(
pro.uuid, pro.name,
url, 1800000L
)
pm.commit(pro.uuid) { status ->
android.util.Log.d(
Conf.TAG,
"new updateStatus: " + Gson().toJson(status.args) + ", pro==>" + status.progress
)
}
}
}
pm.update(it.uuid)
newUuid = pro.uuid.toString()
isSubbed = true
} ?: run {
val uuid: UUID = pm.create(
Profile.Type.Url,
Conf.getClashConfName(MainApplication.getApp()?.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
}
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_uimain)
initView(savedInstanceState)
initData()
mainAtyVM = ViewModelProvider(this)[MainAtyVM::class.java]
observe(this, mainAtyVM)
mainAtyVM.startHeartBeat()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
mainAtyVM.getAirNodes()
val isGlobal = MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
newMainActGlo = isGlobal
startLog()
firstEntry()
mainAtyVM.getExpensesRecord(mPageInfo)
}
private fun initData() {
clashBinder = MainApplication.getApp()?.let { ClashManager(it).wrap() as IClashManager }
profileBinder =
MainApplication.getApp()?.let { ProfileManager(it).wrap() as IProfileManager }
}
private fun initView(savedInstanceState: Bundle?) {
aivHome=findViewById(R.id.aivHome)
aivCenter=findViewById(R.id.aivCenter)
aivVip=findViewById(R.id.aivVip)
if (savedInstanceState == null) {
homeFragment = HomeFragment()
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, homeFragment!!)
.commit()
}
aivHome.setOnClickListener {
if (homeFragment == null) homeFragment = HomeFragment()
showFragment(homeFragment!!)
aivHome.setImageResource(R.drawable.yjl_vip_page_choose)
aivCenter.setImageResource(R.drawable.yjl_user_page)
aivVip.setImageResource(R.drawable.yjl_vip_page)
}
aivCenter.setOnClickListener {
if (settingFragment == null) settingFragment = SettingFragment()
showFragment(settingFragment!!)
aivHome.setImageResource(R.drawable.yjl_home_page)
aivCenter.setImageResource(R.drawable.yjl_user_page_choose)
aivVip.setImageResource(R.drawable.yjl_vip_page)
}
aivVip.setOnClickListener {
if (activityFragment == null) activityFragment = vipFragment()
showFragment(activityFragment!!)
aivHome.setImageResource(R.drawable.yjl_home_page)
aivCenter.setImageResource(R.drawable.yjl_vip_page)
aivVip.setImageResource(R.drawable.yjl_user_page_choose)
}
}
private fun showFragment(fragment: Fragment) {
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
// 隐藏所有 Fragment
fragmentManager.fragments.forEach {
transaction.hide(it)
}
if (!fragment.isAdded) {
transaction.add(R.id.fragmentContainer, fragment)
} else {
transaction.show(fragment)
}
transaction.commit()
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
if (httpStatus.reqType == HttpReqType.HEARTBEAT) {
Logger.d("心跳中")
} else if (httpStatus.reqType == HttpReqType.CHECK_LOGIN) {
showLoadingDialog(resources.getString(R.string.QueryingPaymentResults))
}
}
@RequiresApi(Build.VERSION_CODES.O)
override fun httpSuccess(httpStatus: HttpStatus.Success) {
when (httpStatus.reqType) {
HttpReqType.GET_AIRNODES -> {
val data = httpStatus.rsp as SubscriptionRsp
if (data.code != "1000") {
RxToast.error(resources.getString(R.string.NodeAcquisitionFailed) + "${data.msg}")
}
data.data.let { url ->
android.util.Log.e("Data", "机场URL=${url}")
if (url.isNotEmpty()) {
//todo 判断订阅地址是否修改过,未修改就用接口返回的地址反之使用本地修改的地址
var pro_sub_url =
MMKV.defaultMMKV().decodeString(BZYConstants.PROFILE_SUB_URL, "")
// Log.d("pro_sub_url==>${pro_sub_url}")
if (!TextUtils.isEmpty(pro_sub_url)) {
if (pro_sub_url == url) {
subUrl = url
} else {
subUrl = pro_sub_url
}
} else {
subUrl = url
}
launch(Dispatchers.IO) {
subUrl?.let { setSub2(it) }
}
}
}
}
HttpReqType.GetActivity -> {
val data = httpStatus.rsp as GetActivityRsp
if (data.code == 200) {
if (data.data.data.list.isNotEmpty()) {
data.data.data.list[0].redirectLink.let {
if (activityDialog == null) {
activityDialog =
ActivityViewDialog(this, data.data.data.list[0].redirectLink)
activityDialog?.setOnDialogClickListener(object :
OnDialogClickListener {
override fun onRechargeClickListener() {
//跳转到支付界面
goBackupRechargeWeb()
}
override fun onCancelClickListener() {
activityDialog?.dismiss()
}
})
activityDialog?.show()
}
}
}
}
}
HttpReqType.CHECK_LOGIN -> {
(httpStatus.rsp as CheckLoginRsp).let { checkLoginRsp ->
if (checkLoginRsp.code == 0) {
val mmkv = MMKV.defaultMMKV()
val oldExpireTime =
mmkv.decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD, 0)
val nowExpireTime = checkLoginRsp.data!!.vpnExpireTime
if (nowExpireTime > oldExpireTime) {
val expired = checkLoginRsp.data.expired
mmkv.encode(BZYConstants.MMKV_KEY_VPN_EXPIRED, expired ?: true)
mmkv.encode(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD, nowExpireTime)
val hf =
supportFragmentManager.findFragmentById(R.id.fragmentContainer) as? HomeFragment
val sf =
supportFragmentManager.findFragmentById(R.id.fragmentContainer) as? SettingFragment
sf?.setExpireDate()
checkPayResultDia?.dismiss()
mainAtyVM.getAirNodes()
RxToast.info(resources.getString(R.string.SuccessfullyUpdatedUserInformation))
}
}else if(checkLoginRsp.code == -2){
RxToast.info(resources.getString(R.string.LoginOut))
cleanUserInfo()
}else {
RxToast.info(resources.getString(R.string.QueryFailed))
}
payResultLoading?.dismiss()
}
}
HttpReqType.PHDOWNLOADURL -> {
(httpStatus.rsp as PhDownloadUrlRsp).let {
if (it.code == 1000) {
val lastNotice =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_NOTICE_READ, "")
val data = it.data
if (data?.notice != null && lastNotice != data.notice) {
val userName ="AAA"+MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
android.util.Log.i("data::::","notice::"+data.notice)
if(data.notice.isEmpty()){
val homeNoticeDialog = NoticeViewDialog(this@MainActivity, "暂无新通知",userName)
homeNoticeDialog.show()
homeNoticeDialog.setOnDialogClickListener {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_NOTICE_READ, data.notice)
homeNoticeDialog.dismiss()
}
}else{
val homeNoticeDialog = NoticeViewDialog(this@MainActivity, data.notice,userName)
homeNoticeDialog.show()
homeNoticeDialog.setOnDialogClickListener {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_NOTICE_READ, data.notice)
homeNoticeDialog.dismiss()
}
}
}
}
}
}
HttpReqType.EXPENSES_RECORD ->{
if(httpStatus.rsp is ExpensesRecordRsp){
httpStatus.rsp.let { expensesRecordRsp ->
if(expensesRecordRsp.code == "1000"){
if(expensesRecordRsp.data != null) {
val expensesRecordList = expensesRecordRsp.data.expensesRecords
if(expensesRecordList!=null){
val filterData = expensesRecordList.filter { it.rechargeMoney != null }
android.util.Log.i("EXPENSES_RECORD:","filterData:::"+filterData.size)
if(filterData.size==1){
val orderID = filterData[0].id
val report = filterData[0].reportFlag
android.util.Log.i("UPLoad:","data:::"+report+"orderId:"+orderID)
if(report == null){
//调用上报日志 记录数据
if (orderID != null) {
mainAtyVM.getReport(orderID)
}
}
}
if(filterData.size>0){
isVip=true
}else{
isVip=false
}
}else{
isVip=false
}
}else{
isVip=false
}
}else{
isVip=false
}
}
}
}
HttpReqType.Report->{
(httpStatus.rsp as AppVersionCheckRsp).let {
android.util.Log.i("reqType:","data:::"+it.code)
if(it.code==200){
//上报百度支付功能
}
}
}
else -> {
}
}
}
override fun httpFailure(httpStatus: HttpStatus.Failure) {
when (httpStatus.reqType) {
HttpReqType.HEARTBEAT -> {
Logger.d("心跳失败")
if (5 <= HEART_BEAT_FAILURE_FREQUENCY) {
HEART_BEAT_FAILURE_FREQUENCY = 0
Logger.d("心跳失败次数超过10次退出登录")
cleanUserInfo()
}
HEART_BEAT_FAILURE_FREQUENCY++
}
HttpReqType.CHECK_LOGIN -> {
payResultLoading?.dismiss()
RxToast.error(resources.getString(R.string.QueryFailed))
}
HttpReqType.GET_AIRNODES -> {
Logger.e("获取节点异常:${httpStatus.msg}")
}
HttpReqType.VIPSIGN -> {
RxToast.error(resources.getString(R.string.CheckFailed) + httpStatus.msg)
}
else -> {
}
}
}
private fun showLoadingDialog(msg: String) {
payResultLoading = RxDialogShapeLoading(this)
payResultLoading!!.setMessage(msg)
payResultLoading!!.show()
}
public fun cleanUserInfo() {
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_PH_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_CURRENT_NODE)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_SELECTED_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_VPN_UserCommand)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_All_ITEM_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.PROFILE_SUB_URL)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_Switch_Finsh_Set)
Log.d("cleanUserInfo clashRunning==>${clashRunning}")
//清除源切换记录
if (clashRunning) {
fragments.filterIsInstance<HomeFragment>().forEach { it.stopClash() }
}
isSubed=false
stopUploadTimer()
mainAtyVM.stopHeartBeat()
cleanProfile()
startActivity(Intent(CommonUtils.getApp(), LoginActivity::class.java))
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
finish()
}
fun startUploadTimer() {
stopUploadTimer()
if (timer == null) {
timer = Timer()
uTimerTask = object : TimerTask() {
override fun run() {
uploadLogHttp()
}
}
}
timer?.schedule(uTimerTask, 60000, 60000)
}
fun stopUploadTimer() {
timer?.cancel()
timer = null
uTimerTask?.cancel()
uTimerTask = null
}
@OptIn(DelicateCoroutinesApi::class)
private fun cleanProfile() {
Log.d("cleanProfile start")
GlobalScope.launch(Dispatchers.IO) {
profileBinder?.let { pm ->
pm.queryAll().forEach { profile ->
Log.d("cleanProfile go delete name==>${profile.name}, uuid==>${profile.uuid}")
pm.release(profile.uuid)
pm.delete(profile.uuid)
}
} ?: let {
Log.d("profileBinder is null")
}
}
}
private fun startLog() {
launch(Dispatchers.IO) {
val observer = object : ILogObserver {
override fun newItem(log: LogMessage) {
val msg = log.message
if (BuildConfig.DEBUG) {
Log.i("startLog msg==>${msg}")
}
val domain = Utils.getDomainNameFromString(msg)
if (!TextUtils.isEmpty(domain)) {
addOrSendHost(domain!!)
}
}
}
clashBinder?.setLogObserver(observer)
}
}
fun addOrSendHost(host: String) {
Log.d("hostsMem size==>${hostsMem.size}")
if (!hostsMem.contains(host) && !isApiHost(host)) {
hostsMem.add(host + "{" + dateFormat.format(Date()))
}
}
private fun isApiHost(host: String): Boolean {
val mmkv = MMKV.defaultMMKV()
var isApiHost = false
val originalUrl =
mmkv.decodeString(BZYConstants.MMKV_KEY_CURRENT_HOST, BuildConfig.service_url)
val routerHost = mmkv.decodeStringSet(BZYConstants.MMKV_KEY_ROUTER_HOST,
kotlin.collections.HashSet()
)
if (originalUrl?.contains(host) == true) {
isApiHost = originalUrl.contains(host)
return isApiHost
}
routerHost?.forEach { rh ->
isApiHost = rh.contains(host)
}
return isApiHost
}
private fun firstEntry() {
val decodeBool =
MMKV.defaultMMKV().decodeBool(BZYConstants.INITIALIZATION, false)
if (decodeBool) {
MaterialDialog(this).show {
cornerRadius(res = R.dimen.dp_10)
customView(
R.layout.first_entry_layout,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
getCustomView().findViewById<TextView>(R.id.determine).setOnClickListener {
MMKV.defaultMMKV().encode(BZYConstants.INITIALIZATION, false)
dismiss()
}
}
} else {
mainAtyVM.getNoticeInfo()
activityPopupWindow()
}
}
private fun activityPopupWindow() {
mainAtyVM.getActivity()
}
public fun goCheckLogin() {
mainAtyVM.checkLogin()
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY) {
if (activityDialog != null) {
activityDialog?.dismiss()
}
goCheckLogin()
showBindAccount()
}
}
override fun onDestroy() {
if (activityDialog != null) {
if (activityDialog!!.isShowing) {
activityDialog!!.dismiss()
}
}
super.onDestroy()
stopUploadTimer()
mainAtyVM.stopHeartBeat()
clashBinder?.setLogObserver(null)
}
private fun showBindAccount() {
val userAccount =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
if (Utils.isEmail(userAccount) || Utils.isPhoneNumber(userAccount)) {
return
}
checkBindAccountDia = MaterialDialog(this).show {
this.cancelable(false)
cornerRadius(res = R.dimen.dp_10)
customView(
R.layout.bind_account_dialog_layout,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
getCustomView().findViewById<TextView>(R.id.tv_pay_finish).setOnClickListener {
//跳转到绑定邮箱界面
showBingDialogChoose()
dismiss()
}
getCustomView().findViewById<TextView>(R.id.tv_pay_cancle).setOnClickListener {
dismiss()
}
}
}
private fun showBingDialogChoose() {
val dialog = DialogBandChoose(this@MainActivity)
dialog.setOnBandClickListener(object : DialogBandChoose.OnBandClickListener {
override fun onBandClick(isPhone: Boolean) {
val intent = Intent(CommonUtils.getApp(), BandPhoneActivity::class.java)
intent.putExtra("isPhone", isPhone)
startActivity(intent)
}
})
dialog.show()
}
@OptIn(DelicateCoroutinesApi::class)
fun uploadLogHttp() {
if (hostsMem.size <= 0) {
return
}
if (isUpload) {
return
}
isUpload = true
GlobalScope.launch {
try {
val hostsJsonArray = JsonArray()
for (hostItem in hostsMem) {
val hostAndTime = hostItem.split("{")
val hostJsonObject = JsonObject()
hostJsonObject.addProperty(
"id", MMKV.defaultMMKV().decodeInt(BZYConstants.MMKV_KEY_NOTE_NODE_ID, 0)
)
hostJsonObject.addProperty("requestHosts", hostAndTime[0])
hostJsonObject.addProperty("requestTime", hostAndTime[1])
hostsJsonArray.add(hostJsonObject)
}
val httpApi = NetService.instances.createHttps(HttpApi::class.java)
val hostsJsonArrayStr = hostsJsonArray.toString()
val hostsJsonArrayStrObject = JsonObject()
hostsJsonArrayStrObject.addProperty("requestLogs", hostsJsonArrayStr)
val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")
hostsJsonArrayStrObject.addProperty("phToken", phToken)
val encryptHostsJsonArrayStrObject = AESUtil.byteArrayToHexStr(
AESUtil.encrypt(hostsJsonArrayStrObject.toString())
)
val requestBody: RequestBody = encryptHostsJsonArrayStrObject
.toRequestBody("text/plain".toMediaTypeOrNull())
val uploadRequestLogs = httpApi.uploadRequestLogs(requestBody)
Log.d("uploadRequestLogs==>${uploadRequestLogs}")
} catch (e: Exception) {
e.printStackTrace()
} finally {
hostsMem.clear()
isUpload = false
}
}
}
fun goBackupRechargeWeb() {
startActivityForResult(
Intent(this@MainActivity, MemberRechargeActivity::class.java),
REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY
)
}
}

View File

@ -1,16 +1,9 @@
package com.yingmao.clash.act
import android.annotation.SuppressLint
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.View
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
@ -34,16 +27,13 @@ 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.act.NewMainActivity.Companion.isSubbed
import com.yingmao.clash.act.NewMainActivity.Companion.profileBinder
import com.yingmao.clash.app.MainApplication
import com.yingmao.clash.act.MainActivity.Companion.isSubbed
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.CheckLoginRsp
import com.yingmao.clash.entity.PayUploadParamData
import com.yingmao.clash.entity.RechargeModelEntity
import com.yingmao.clash.fragment.NewAccFragment
import com.yingmao.clash.fragment.NewAccFragment.Companion.clashRunning
import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.fragment.recharge.RechargeViewModel
import com.yingmao.clash.fragment.recharge.adapter.RechargeModelAdapter
import com.yingmao.clash.fragment.recharge.adapter.VIPRechargeAdapter
@ -60,20 +50,15 @@ import com.yingmao.clash.util.ThreadUtils
import com.yingmao.clash.util.stopClashService
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.DialogDoMainChoose
import com.yingmao.clash.view.dialog.PayConfirmDialog
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.view.dialog.SplashDialog
import com.yingmao.clash.vm.MainAtyVM
import com.yingmao.clash.webview.CustomerServiceWebView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.Locale
class MemberRechargeActivity : BaseActivity() {
private lateinit var aiBack: AppCompatImageView
@ -81,7 +66,7 @@ class MemberRechargeActivity : BaseActivity() {
private lateinit var swipeLayout: SwipeRefreshLayout
private lateinit var rvRechargeList:RecyclerView
private lateinit var tvPay:TextView
private lateinit var tvRechargeRecord:TextView
private lateinit var tvRechargeRecord:AppCompatImageView
private lateinit var clCustom: ConstraintLayout
private var selectedGrade: Grade? = null

View File

@ -9,8 +9,8 @@ import androidx.lifecycle.ViewModelProvider
import com.cncat.vpn.common.log.Log
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.act.NewMainActivity.Companion.isSubbed
import com.yingmao.clash.act.NewMainActivity.Companion.profileBinder
import com.yingmao.clash.act.MainActivity.Companion.isSubbed
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.util.CommonUtils
@ -65,7 +65,7 @@ class MineInfoActivity: BaseActivity() {
MMKV.defaultMMKV().removeValueForKey(BZYConstants.PROFILE_SUB_URL)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_Switch_Finsh_Set)
isSubbed =false
NewMainActivity().stopUploadTimer()
MainActivity().stopUploadTimer()
mainAtyVM.stopHeartBeat()
cleanProfile()
val intent=Intent(CommonUtils.getApp(), LoginActivity::class.java)

File diff suppressed because it is too large Load Diff

View File

@ -39,8 +39,6 @@ class RegisterActivity : BaseActivity(), View.OnClickListener {
private lateinit var usernameEt: EditText
private lateinit var passwordEt: EditText
private lateinit var passwordEtCheck: EditText
private lateinit var usernameErrorTv: TextView
private lateinit var passwordErrorTv: TextView
private lateinit var username: String
private lateinit var password: String
@ -152,8 +150,6 @@ class RegisterActivity : BaseActivity(), View.OnClickListener {
passwordEtCheck = findViewById(R.id.et_password_check)
passwordEt.transformationMethod = PasswordTransformationMethodBigDot()
passwordEtCheck.transformationMethod = PasswordTransformationMethodBigDot()
usernameErrorTv = findViewById(R.id.tv_username_error)
passwordErrorTv = findViewById(R.id.tv_password_error)
tvSmSCode=findViewById(R.id.tv_sms_code)
etSmSCode=findViewById(R.id.et_sms_code)
@ -220,42 +216,31 @@ class RegisterActivity : BaseActivity(), View.OnClickListener {
private fun checkInput(): Boolean {
username = usernameEt.text.toString().trim()
if (username.isBlank()) {
usernameErrorTv.visibility = View.VISIBLE
usernameErrorTv.text = getString(R.string.please_input_username)
getFocusAndShowSoftInput(usernameEt)
return false
}
if (!CommonUtils.checkUsername(username)) {
usernameErrorTv.visibility = View.VISIBLE
// usernameErrorTv.text = getString(R.string.username_input_error)
usernameErrorTv.text = getString(R.string.username_input_error1)
getFocusAndShowSoftInput(usernameEt)
return false
}
usernameErrorTv.visibility = View.INVISIBLE
usernameErrorTv.text = ""
password = passwordEt.text.toString().trim()
if (password.isBlank()) {
passwordErrorTv.visibility = View.VISIBLE
passwordErrorTv.text = getString(R.string.please_input_password)
getFocusAndShowSoftInput(passwordEt)
return false
}
passwordCheck = passwordEtCheck.text.toString().trim()
if (password.isBlank()) {
passwordErrorTv.visibility = View.VISIBLE
passwordErrorTv.text = getString(R.string.please_input_password_check)
getFocusAndShowSoftInput(passwordEtCheck)
return false
}
if (password != passwordCheck) {
passwordErrorTv.visibility = View.VISIBLE
passwordErrorTv.text = getString(R.string.please_input_password_double_err)
return false
}
passwordErrorTv.visibility = View.INVISIBLE
passwordErrorTv.text = ""
return true
}

View File

@ -31,17 +31,16 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.gson.Gson
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.act.NewMainActivity.Companion.isSubbed
import com.yingmao.clash.act.NewMainActivity.Companion.newUuid
import com.yingmao.clash.act.NewMainActivity.Companion.profileBinder
import com.yingmao.clash.act.NewMainActivity.Companion.subUrl
import com.yingmao.clash.act.MainActivity.Companion.isSubbed
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.app.MainApplication
import com.yingmao.clash.base.BaseActivity
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.LanguageInfoEntity
import com.yingmao.clash.fragment.NewAccFragment
import com.yingmao.clash.fragment.NewAccFragment.Companion.clashRunning
import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.AppVersionCheckRsp
@ -72,43 +71,42 @@ import java.util.UUID
@Suppress("DEPRECATION")
class SettingActivity : BaseActivity() {
private lateinit var tvUserName:TextView
private lateinit var clChanPsw:ConstraintLayout
private lateinit var clFowdPsw:ConstraintLayout
private lateinit var clDeletePsw:ConstraintLayout
private lateinit var tvExit:TextView
private lateinit var mainAtyVM: MainAtyVM
private lateinit var aiBack: AppCompatImageView
private lateinit var clLanguageSwitching: ConstraintLayout
private lateinit var clVerSionUpdate: ConstraintLayout
private lateinit var clServiceTerms: ConstraintLayout
private lateinit var clPrivacyPolicy: ConstraintLayout
private lateinit var clApplicationModeTitleStr: ConstraintLayout
private lateinit var llControlApplication: ConstraintLayout
private lateinit var clSwitching:ConstraintLayout
private lateinit var clDelete: ConstraintLayout
private lateinit var tVApplicationModeTxt:TextView
private var popupWindow: CommonPopupWindow? = null
private var layoutGravity: CommonPopupWindow.LayoutGravity? = null
var dialogDoMainChoose: DialogDoMainChoose? = null
@RequiresApi(Build.VERSION_CODES.R)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_setting)
initView()
initData()
}
private fun initData() {
mainAtyVM = ViewModelProvider(this)[MainAtyVM::class.java]
observe(this, mainAtyVM)
tvUserName.text=MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
}
@RequiresApi(Build.VERSION_CODES.R)
private fun initView() {
aiBack=findViewById(R.id.aiBack)
clLanguageSwitching=findViewById(R.id.clLanguageSwitchingStr)
clVerSionUpdate=findViewById(R.id.clVerSionUpdate)
clServiceTerms=findViewById(R.id.clServiceTerms)
clPrivacyPolicy=findViewById(R.id.clyszc)
clApplicationModeTitleStr=findViewById(R.id.clApplicationModeTitleStr)
llControlApplication=findViewById(R.id.llControlApplication)
tVApplicationModeTxt=findViewById(R.id.TVApplicationModeTxt)
clSwitching=findViewById(R.id.clSwitching)
clDelete=findViewById(R.id.clDelete)
tvUserName=findViewById(R.id.tvUserName)
clChanPsw=findViewById(R.id.clChanPsw)
clFowdPsw=findViewById(R.id.clFowdPsw)
clDeletePsw=findViewById(R.id.clDeletePsw)
tvExit=findViewById(R.id.tvExit)
clDelete.setOnClickListener {
clChanPsw.setOnClickListener {
startActivity(Intent(this@SettingActivity, ChangePwdActivity::class.java))
}
clFowdPsw.setOnClickListener {
startActivity(Intent(this@SettingActivity, ForGetPwdActivity::class.java))
}
clDeletePsw.setOnClickListener {
val splashDialog =
DialogSureCancelLogOut(this)
splashDialog.showDialog(this@SettingActivity)
@ -123,419 +121,11 @@ class SettingActivity : BaseActivity() {
})
}
clSwitching.setOnClickListener {
android.util.Log.i("SourceSwitching","clashRunning::"+ clashRunning)
if(clashRunning){
RxToast.info(getString(R.string.SwitchingSource))
}else{
RxToast.info(getString(R.string.Switching))
//源切换
showDomainList()
}
}
clApplicationModeTitleStr.setOnClickListener {
if (clashRunning) {
RxToast.info("请关闭加速后再选择.")
return@setOnClickListener
}
popupWindow = object : CommonPopupWindow(
this,
R.layout.applicationmode_popwindow_item,
500,
LayoutParams.WRAP_CONTENT
) {
override fun initView() {
val view = getContentView()
val allApp = view.findViewById<LinearLayout>(R.id.LLAll)
val tvAllApp = view.findViewById<TextView>(R.id.TVAllApp)
val chooseApp = view.findViewById<LinearLayout>(R.id.LLChoose)
val tvChooseApp = view.findViewById<TextView>(R.id.TVChoose)
val noChooseApp = view.findViewById<LinearLayout>(R.id.LLNoChoose)
val tvNoChooseApp = view.findViewById<TextView>(R.id.TVNoChoose)
val applicationModeStr =
MMKV.defaultMMKV().decodeString(BZYConstants.applicationMode)
if (applicationModeStr.isNullOrEmpty()) {
allApp.setBackgroundResource(R.color.color_clash)
tvAllApp.setTextColor(resources.getColor(R.color.white))
} else if (applicationModeStr == "AllApp") {
allApp.setBackgroundResource(R.color.color_clash)
tvAllApp.setTextColor(resources.getColor(R.color.white))
} else if (applicationModeStr == "ChooseApp") {
chooseApp.setBackgroundResource(R.color.color_clash)
tvChooseApp.setTextColor(resources.getColor(R.color.white))
} else if (applicationModeStr == "noChooseApp") {
noChooseApp.setBackgroundResource(R.color.color_clash)
tvNoChooseApp.setTextColor(resources.getColor(R.color.white))
}
allApp.setOnClickListener {
serStore.accessControlMode = AccessControlMode.AcceptAll
MMKV.defaultMMKV().encode(BZYConstants.applicationMode, "AllApp")
tVApplicationModeTxt.setText(R.string.allow_all_apps)
popupWindow.dismiss()
}
chooseApp.setOnClickListener {
serStore.accessControlMode = AccessControlMode.AcceptSelected
MMKV.defaultMMKV().encode(BZYConstants.applicationMode, "ChooseApp")
tVApplicationModeTxt.setText(R.string.allow_selected_apps)
popupWindow.dismiss()
}
noChooseApp.setOnClickListener {
serStore.accessControlMode = AccessControlMode.DenySelected
MMKV.defaultMMKV().encode(BZYConstants.applicationMode, "noChooseApp")
tVApplicationModeTxt.setText(R.string.deny_selected_apps)
popupWindow.dismiss()
}
}
override fun initEvent() {}
}
layoutGravity =
CommonPopupWindow.LayoutGravity(CommonPopupWindow.LayoutGravity.ALIGN_LEFT or CommonPopupWindow.LayoutGravity.TO_BOTTOM)
(popupWindow as CommonPopupWindow).showBashOfAnchor(
tVApplicationModeTxt,
layoutGravity,
0,
0
)
}
llControlApplication.setOnClickListener {
startActivity(Intent(this, InstallApplicationActivity::class.java))
}
clPrivacyPolicy.setOnClickListener {
val intent = Intent(this, AgreementAndPrivacyActivity::class.java)
intent.putExtra(BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_PRIVACY_AGREEMENT)
startActivity(intent)
}
clServiceTerms.setOnClickListener {
val intent = Intent(this, AgreementAndPrivacyActivity::class.java)
intent.putExtra(BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_USER_AGREEMENT)
startActivity(intent)
}
clVerSionUpdate.setOnClickListener {
}
clLanguageSwitching.setOnClickListener {
val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "")
val languageInfoList = mutableListOf<LanguageInfoEntity>()
if (decodeString.isNullOrEmpty()) {
//获取当前系统语言
val config = resources.configuration
val language = config.locale.language
val country = config.locale.country
if (language.equals("en")) {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "Chinese CN", false)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "Traditional Chinese(Hong Kong)", false)
val languageInfoEntity3 =
LanguageInfoEntity(3, "English", "Current language", true)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
} else if (language.equals("zh") && country.equals("HK")) {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "中文簡體", true)
val languageInfoEntity2 = LanguageInfoEntity(2, "中文繁体", "當前語言", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英语", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
} else {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "当前语言", true)
val languageInfoEntity2 = LanguageInfoEntity(2, "中文繁体", "中文繁体", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英文", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
} else {
when (decodeString) {
"Chinese-CN" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "当前语言", true)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "中文繁体", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英文", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
"Chinese-HK" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "中文簡體", false)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "當前語言", true)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英语", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
"English" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "Chinese-CN", false)
val languageInfoEntity2 = LanguageInfoEntity(
2,
"中文繁体",
"Traditional Chinese(Hong Kong)",
false
)
val languageInfoEntity3 =
LanguageInfoEntity(3, "English", "Current language", true)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
}
}
showBottomDialog(languageInfoList)
}
aiBack.setOnClickListener {
finish()
}
findViewById<View>(R.id.clChushihua).setOnClickListener {
if (checkExpire()) {
RxToast.info(resources.getString(R.string.AccountExpired))
return@setOnClickListener
}
if(clashRunning){
RxToast.info("请关闭加速后在进行初始化操作")
return@setOnClickListener
}
if (TextUtils.isEmpty(subUrl)){
RxToast.success(resources.getString(R.string.tooFast))
return@setOnClickListener
}
cleanNodeMmkv()
showLoading(resources.getString(R.string.UnderRepair), this@SettingActivity)
launch(Dispatchers.IO) {
profileBinder?.let { pm ->
pm.queryAll().forEach { profile ->
Log.d("setting profile delete ==>${profile.name}")
pm.delete(profile.uuid)
}
delay(1000)
if (subUrl?.isNotEmpty() == true) {
startTimer()
setSub2(subUrl!!, pm)
}
}
}
}
clLanguageSwitching=findViewById(R.id.clLanguageSwitchingStr)
clLanguageSwitching.setOnClickListener {
val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "")
val languageInfoList = mutableListOf<LanguageInfoEntity>()
if (decodeString.isNullOrEmpty()) {
//获取当前系统语言
val config = resources.configuration
val language = config.locale.language
val country = config.locale.country
if (language.equals("en")) {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "Chinese CN", false)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "Traditional Chinese(Hong Kong)", false)
val languageInfoEntity3 =
LanguageInfoEntity(3, "English", "Current language", true)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
} else if (language.equals("zh") && country.equals("HK")) {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "中文簡體", true)
val languageInfoEntity2 = LanguageInfoEntity(2, "中文繁体", "當前語言", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英语", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
} else {
val languageInfoEntity1 = LanguageInfoEntity(1, "中文简体", "当前语言", true)
val languageInfoEntity2 = LanguageInfoEntity(2, "中文繁体", "中文繁体", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英文", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
} else {
when (decodeString) {
"Chinese-CN" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "当前语言", true)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "中文繁体", false)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英文", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
"Chinese-HK" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "中文簡體", false)
val languageInfoEntity2 =
LanguageInfoEntity(2, "中文繁体", "當前語言", true)
val languageInfoEntity3 = LanguageInfoEntity(3, "English", "英语", false)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
"English" -> {
val languageInfoEntity1 =
LanguageInfoEntity(1, "中文简体", "Chinese-CN", false)
val languageInfoEntity2 = LanguageInfoEntity(
2,
"中文繁体",
"Traditional Chinese(Hong Kong)",
false
)
val languageInfoEntity3 =
LanguageInfoEntity(3, "English", "Current language", true)
languageInfoList.add(languageInfoEntity1)
languageInfoList.add(languageInfoEntity2)
languageInfoList.add(languageInfoEntity3)
}
}
}
showBottomDialog(languageInfoList)
tvExit.setOnClickListener {
cleanUserInfo()
}
}
private fun cleanNodeMmkv(){
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_SELECTED_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_All_ITEM_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.PROFILE_SUB_URL)
}
private fun checkExpire(): Boolean {
val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
if (validPeriod > 0) {
val nowTime = System.currentTimeMillis()
Log.d("validPeriod==>$validPeriod, nowTime==>$nowTime")
if (validPeriod >= nowTime) {
return false
}
}
return true;
}
private suspend fun setSub2(url: String, pm: IProfileManager) {
pm.queryAll().forEach { itemPro ->
if (itemPro.name != Conf.getClashConfName(MainApplication.getApp())) {
Log.d("setSub2 delete ==>${itemPro.name}")
pm.delete(itemPro.uuid)
}
}
val pro = pm.queryActive()
pro?.let {
val actName = it.name
Log.d("new main actname==>" + actName)
pm.setActive(it)
newUuid = pro.uuid.toString();
isSubbed = true
Log.d("setSub2 setActive end")
finishInit()
} ?: run {
val uuid: UUID = pm.create(
Profile.Type.Url, Conf.getClashConfName(MainApplication.getApp())
)
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
}
finishInit()
}
}
private fun showBottomDialog(data: List<LanguageInfoEntity>) {
//1、使用Dialog、设置style
val bottomSheetDialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
// 底部弹出的布局
val bottomView = View.inflate(this, R.layout.language_switching_layout, null)
bottomSheetDialog.setContentView(bottomView)
//设置点击dialog外部不消失
//bottomSheetDialog.setCanceledOnTouchOutside(false);
bottomSheetDialog.show()
bottomView.findViewById<View>(R.id.IVClose).setOnClickListener { bottomSheetDialog.dismiss() }
val abRecharge = bottomSheetDialog.findViewById<RecyclerView>(R.id.RvLanguage)
abRecharge!!.layoutManager=LinearLayoutManager(this)
val languageAdapter = LanguageAdapter()
languageAdapter.notifyAdapter(data, this)
abRecharge.adapter=languageAdapter
val config = resources.configuration
languageAdapter.setListener(object:LanguageAdapter.onItemClickListener{
override fun onItemClick(languageInfoList: List<LanguageInfoEntity>, isPosition: Int) {
val languageItem = languageInfoList[isPosition]
if(!languageItem.isChoose){
when(languageItem.id){
1->{
languageItem.isChoose=true
config.locale = Locale.CHINA
updateActivity("Chinese-CN", Locale.CHINA)
Toast.makeText(this@SettingActivity, "切换为简体中文!", Toast.LENGTH_SHORT).show()
}
2->{
languageItem.isChoose=true
config.locale = Locale("zh","HK")
updateActivity("Chinese-HK", Locale("zh","HK"))
Toast.makeText(this@SettingActivity, "切換爲中文繁體!", Toast.LENGTH_SHORT).show()
}
3->{
languageItem.isChoose=true
config.locale = Locale.ENGLISH
updateActivity("English",Locale.ENGLISH)
Toast.makeText(this@SettingActivity, "Switch to English", Toast.LENGTH_SHORT).show();
}
}
}
bottomSheetDialog.dismiss()
}
})
}
fun updateActivity(language:String,locale: Locale){
MMKV.defaultMMKV().encode(BZYConstants.languageInfo, language)
val resources =this.resources
val metrics = resources.displayMetrics
val config = resources.configuration
config.locale=locale
resources.updateConfiguration(config,metrics)
//设置好选择的语言以后需要清除任务栈中的所有activity打开首页确保以后进入的页面都是当前选择的语言
val intent = Intent(this, SplashActivity::class.java)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(intent)
finish()
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
super.httpLoading(httpStatus)
@ -545,35 +135,7 @@ class SettingActivity : BaseActivity() {
hideLoading()
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {
if (httpStatus.reqType == HttpReqType.UploadParameters) {
val upLoadData = httpStatus.rsp as UploadParamData
if (upLoadData.code == 1000) {
val directory: File? = this.getExternalFilesDir("CrashLog")
//多文件上传
if (directory != null) {
val allFilePath = getAllFilePath(directory.path)
if (upLoadData.data != null) {
if (allFilePath.isNotEmpty()) {
val username =
MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
val nowTime = SimpleDateFormat(
"yyyyMMddkkmmss",
Locale.getDefault()
).format(Date())
uploadForAliOss(
upLoadData.data,
allFilePath,
"app/errlog/" + username + "_" + nowTime + ".txt"
)
}
}
}
}else{
hideLoading()
}
}else if(httpStatus.reqType == HttpReqType.LogOutDel){
if(httpStatus.reqType == HttpReqType.LogOutDel){
val logOutDel = httpStatus.rsp as AppVersionCheckRsp
if(logOutDel.code==200){
Log.d("back data::${httpStatus.rsp}")
@ -584,154 +146,7 @@ class SettingActivity : BaseActivity() {
}
}
private fun finishInit() {
timerJob?.cancel()
runOnUiThread {
hideLoading()
RxToast.info(resources.getString(R.string.RepairCompletedInit))
}
}
private fun errInit(){
runOnUiThread {
hideLoading()
RxToast.error(resources.getString(R.string.FixTimeout))
}
}
private var timerJob: Job? = null
var GetNodeTimeOutNum = 10
private fun startTimer() {
GetNodeTimeOutNum = 10
timerJob = launch {
repeat(10) {
GetNodeTimeOutNum--
Log.d("GetNodeTimeOutNum==>$GetNodeTimeOutNum")
delay(1000)
}
errInit()
}
}
private fun uploadForAliOss(data: ParamData, filePath: List<String>, dirStr: String) {
val endpoint = "oss-cn-hongkong.aliyuncs.com"
val accessKeyId = data.credentials?.accessKeyId
val accessKeySecret = data.credentials?.accessKeySecret
// 从STS服务获取的安全令牌SecurityToken
val securityToken = data.credentials?.securityToken
val credentialProvider =
OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken)
val oss = OSSClient(applicationContext, endpoint, credentialProvider)
android.util.Log.i("uploadForAliOss", "filePath::::${filePath[0]}")
val put = PutObjectRequest("yingmao", dirStr, filePath[0])
// 异步上传时可以设置进度回调。
put.progressCallback =
OSSProgressCallback { request, currentSize, totalSize ->
android.util.Log.d(
"PutObject",
"currentSize: $currentSize totalSize: $totalSize"
)
}
oss.asyncPutObject(put,
object : OSSCompletedCallback<PutObjectRequest?, PutObjectResult> {
override fun onSuccess(request: PutObjectRequest?, result: PutObjectResult) {
if (result.statusCode == 200) {
//删除文件
DataUtils.deleteFile(filePath[0])
}
runOnUiThread {
hideLoading()
RxToast.info(resources.getString(R.string.LogUploadedSuccessfully))
}
android.util.Log.d("PutObjectRequest", "$request")
android.util.Log.d("PutObjectResult", "$result")
android.util.Log.d("PutObject", "UploadSuccess")
android.util.Log.d("ETag", result.eTag)
android.util.Log.d("RequestId", result.requestId)
}
override fun onFailure(
request: PutObjectRequest?,
clientExcepion: ClientException,
serviceException: ServiceException
) {
runOnUiThread {
hideLoading()
RxToast.error(resources.getString(R.string.LogUploadedFiler))
}
// 请求异常。
clientExcepion.printStackTrace()
// 服务异常。
android.util.Log.e("ErrorCode", serviceException.errorCode)
android.util.Log.e("RequestId", serviceException.requestId)
android.util.Log.e("HostId", serviceException.hostId)
android.util.Log.e("RawMessage", serviceException.rawMessage)
}
})
}
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()
}
}
override fun onDestroy() {
super.onDestroy()
if(dialogDoMainChoose!=null){
if(dialogDoMainChoose!!.isShowing){
dialogDoMainChoose!!.dismiss()
dialogDoMainChoose=null
}
}
}
private fun cleanUserInfo() {
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_PH_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_TOKEN)

View File

@ -5,7 +5,6 @@ import android.content.Intent
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
@ -27,7 +26,6 @@ import com.cncat.vpn.service.remote.IClashManager
import com.cncat.vpn.service.remote.wrap
import com.github.gzuliyujiang.oaid.DeviceID
import com.github.gzuliyujiang.oaid.DeviceIdentifier
import com.google.gson.Gson
import com.google.gson.JsonObject
import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
@ -508,13 +506,13 @@ class SplashActivity : BaseActivity() {
}
} else {
val intent =
Intent(this@SplashActivity, NewMainActivity::class.java)
Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
}
} else {
val intent = Intent(this@SplashActivity, NewMainActivity::class.java)
val intent = Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}
@ -653,7 +651,7 @@ class SplashActivity : BaseActivity() {
}
override fun cancel() {
val intent = Intent(this@SplashActivity, NewMainActivity::class.java)
val intent = Intent(this@SplashActivity, MainActivity::class.java)
startActivity(intent)
finish()
}

View File

@ -0,0 +1,7 @@
package com.yingmao.clash.entity
data class SettingPageBean(
var type: Int,
var name: String,
var imgSrc: Int
)

View File

@ -140,4 +140,8 @@ class AccelerateViewModel : PublicViewMode() {
)
doAsync(HttpReqType.EXPENSES_RECORD){httpApi.phOrderList(params)}
}
fun getSelectNodeInfo() {
val httpApi = NetService.instances.createHttps(HttpApi::class.java)
doAsync(HttpReqType.SelectNode) { httpApi.selectNodeInfo(com.yingmao.clash.BuildConfig.productId) }
}
}

View File

@ -1,6 +1,8 @@
package com.yingmao.clash.fragment
import android.content.Context
import android.os.Bundle
import android.text.TextUtils
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@ -17,10 +19,12 @@ import com.yingmao.clash.base.BaseViewMode
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import java.util.HashSet
abstract class BaseFragment :Fragment() {
var baseLoading: RxDialogShapeLoading? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -64,4 +68,64 @@ abstract class BaseFragment :Fragment() {
open fun httpSuccess(httpStatus: HttpStatus.Success){}
open fun httpFailure(httpStatus: HttpStatus.Failure){}
fun showLoading(str: String, context: Context) {
val message = if (TextUtils.isEmpty(str)) "进行中..." else str
if (baseLoading == null) {
baseLoading = RxDialogShapeLoading(context)
}
baseLoading?.setMessage(message)
if (baseLoading?.isShowing == false) {
baseLoading?.show()
}
}
fun hideLoading() {
if (baseLoading != null && baseLoading?.isShowing == true) {
baseLoading?.cancel()
}
}
@Synchronized
fun switchServer2(): Boolean {
var isChange = false
val mmkv = MMKV.defaultMMKV()
val originalUrl =
mmkv.decodeString(BZYConstants.MMKV_KEY_CURRENT_HOST, BuildConfig.service_url)
var newUrlString = originalUrl
val routerHost = mmkv.decodeStringSet(BZYConstants.MMKV_KEY_ROUTER_HOST, HashSet())
val switchFinishSet = mmkv.decodeStringSet(BZYConstants.MMKV_KEY_Switch_Finsh_Set, HashSet())
routerHost?.let {
if (it.isEmpty()) {
Log.d(Conf.TAG, "routerHost isEmpty")
return false
}
com.cncat.vpn.common.log.Log.d("switchFinshSet.size==>${switchFinishSet?.size!!} , routerHost.size==>${routerHost.size}")
//次数已满
if (switchFinishSet.size >= routerHost.size) {
return false
}
Log.d(Conf.TAG, "routerHost not empty")
for (url in it) {
if (url == originalUrl) {
switchFinishSet.add(url)
mmkv.encode(BZYConstants.MMKV_KEY_Switch_Finsh_Set, switchFinishSet)
continue
}
if (switchFinishSet.contains(url)) {
continue
} else {
isChange = true
Log.e("Retry", "切换到新url:$url")
newUrlString = url
switchFinishSet.add(newUrlString)
mmkv.encode(BZYConstants.MMKV_KEY_Switch_Finsh_Set, switchFinishSet)
break
}
}
mmkv.encode(BZYConstants.MMKV_KEY_CURRENT_HOST, newUrlString)
}
return isChange
}
}

View File

@ -1,23 +1,28 @@
package com.yingmao.clash.fragment
package com.yingmao.clash.fragment.home
import android.annotation.SuppressLint
import android.app.Activity
import android.content.BroadcastReceiver
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Build
import android.os.Bundle
import android.os.ResultReceiver
import android.text.TextUtils
import android.view.View
import android.view.WindowManager
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContract
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity.RESULT_OK
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.graphics.toColorInt
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.afollestad.materialdialogs.MaterialDialog
@ -30,33 +35,40 @@ import com.cncat.vpn.core.model.TunnelState
import com.orhanobut.logger.Logger
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.act.ChangeNodeActivity
import com.yingmao.clash.act.ChangeNodeActivity.ProxyMode
import com.yingmao.clash.act.ExpensesRecordActivity
import com.yingmao.clash.act.NewMainActivity
import com.yingmao.clash.act.NewMainActivity.Companion.clashBinder
import com.yingmao.clash.act.NewMainActivity.Companion.isSubbed
import com.yingmao.clash.act.NewMainActivity.Companion.newUuid
import com.yingmao.clash.act.MainActivity
import com.yingmao.clash.act.MainActivity.Companion.clashBinder
import com.yingmao.clash.act.MainActivity.Companion.isSubbed
import com.yingmao.clash.act.MainActivity.Companion.newMainActGlo
import com.yingmao.clash.act.MainActivity.Companion.newUuid
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.conf.BZYConstants.Companion.ScreenFlag
import com.yingmao.clash.conf.Conf
import com.yingmao.clash.entity.ClashNodebBean
import com.yingmao.clash.fragment.AccelerateViewModel
import com.yingmao.clash.fragment.BaseFragment
import com.yingmao.clash.listener.AsyncCallBackListener
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.AppStartupStatus
import com.yingmao.clash.net.http.entity.ExpensesRecordRsp
import com.yingmao.clash.net.http.entity.ShowNode
import com.yingmao.clash.util.ActivityResultLifecycle
import com.yingmao.clash.util.UiStore
import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.Utils
import com.yingmao.clash.util.startClashService
import com.yingmao.clash.util.stopClashService
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.view.dialog.RxDialogSureCancel
import com.yingmao.clash.webview.CustomerServiceWebView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.withContext
import okhttp3.Response
import java.text.SimpleDateFormat
@ -66,7 +78,7 @@ import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers.IO), View.OnClickListener{
open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers.IO){
companion object {
const val REQUEST_CONNECT = 1
const val CHECK_NODE_REQUEST_CODE = 2
@ -80,7 +92,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
clashRec?.let {
try {
context.unregisterReceiver(clashRec)
}catch (e: Exception){
} catch (e: Exception) {
e.printStackTrace()
}
@ -88,18 +100,31 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
lateinit var accelerateViewModel: AccelerateViewModel
private lateinit var rxDialogShapeLoading: RxDialogShapeLoading
private lateinit var accelerateIv: ImageView
private lateinit var tvEndTime: TextView
private lateinit var tvTimeInfo:TextView
private lateinit var tvDelayMs:TextView
private lateinit var tvUserName: TextView
private lateinit var tvUserTimeEnd: TextView
private lateinit var clGetVip: ConstraintLayout
private lateinit var aivCustomService: AppCompatImageView
private lateinit var ivAccelerate: AppCompatImageView
private lateinit var tvClick: TextView
private lateinit var clProxy: LinearLayout
private lateinit var tvIntelligentMode: TextView
private lateinit var tvGlobalMode: TextView
private lateinit var clNode: ConstraintLayout
private lateinit var aivNodeImg: AppCompatImageView
private lateinit var tvNodeName: TextView
private lateinit var clLinks: ConstraintLayout
private val mPageInfo = ExpensesRecordActivity.PageInfo()
private var reConnection = false
private var connectId=-1
private var connectId = -1
var proList: MutableList<ClashNodebBean>? = null
private var baseLoading: RxDialogShapeLoading? = null
private var baseLoadingView: RxDialogShapeLoading? = null
override fun init(
titleBarRl: RelativeLayout,
@ -117,9 +142,32 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
)
initViews(accelerateFragmentView)
initData()
container.addView(accelerateFragmentView)
}
@SuppressLint("SetTextI18n")
private fun initData() {
val username = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME,"")!!
tvUserName.text= "ID:$username"
setExpireDate()
val isGlobal = MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
newMainActGlo = isGlobal
val px: ProxyMode = if (isGlobal) {
ProxyMode.GLOBAL
} else {
ProxyMode.PAC
}
setProxyModeView(px)
val selectedName =
MMKV.defaultMMKV().decodeString(BZYConstants.NODE_SELECTED_NAME_KEY, "")
if (!TextUtils.isEmpty(selectedName)) {
setNodeNameAndImg(selectedName!!)
}
}
@Deprecated("Deprecated in Java")
override fun onActivityCreated(savedInstanceState: Bundle?) {
@ -128,7 +176,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
accelerateViewModel = ViewModelProvider(this)[AccelerateViewModel::class.java]
observe(this, accelerateViewModel)
initSS()
accelerateViewModel.getExpensesRecord(mPageInfo)
accelerateViewModel.getSelectNodeInfo()
}
@ -139,7 +187,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
intentFilter.addAction(Intents.ACTION_CLASH_REQUEST_STOP)
intentFilter.addAction(Intents.ACTION_Glo_Mode)
intentFilter.addAction(Intents.ACTION_OVERRIDE_CHANGED)
clashRec=ClashBP()
clashRec = ClashBP()
if (Build.VERSION.SDK_INT >= 34 && requireContext().applicationInfo.targetSdkVersion >= 34) {
requireContext().registerReceiver(
clashRec, intentFilter, Context.RECEIVER_EXPORTED
@ -152,101 +200,152 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
private fun initViews(view: View) {
tvEndTime = view.findViewById(R.id.tv_end_time)
tvTimeInfo=view.findViewById(R.id.tvTimeInfo)
accelerateIv = view.findViewById(R.id.iv_accelerate)
accelerateIv.setOnClickListener(this)
tvDelayMs=view.findViewById(R.id.tvDelayMs)
tvEndTime.setOnClickListener {
tvUserName = view.findViewById(R.id.tvUserName)
tvUserTimeEnd= view.findViewById(R.id.tvUserTimeEnd)
clGetVip= view.findViewById(R.id.clGetVip)
aivCustomService= view.findViewById(R.id.aivCustomService)
ivAccelerate= view.findViewById(R.id.ivAccelerate)
tvClick= view.findViewById(R.id.tvClick)
clProxy= view.findViewById(R.id.clProxy)
tvIntelligentMode= view.findViewById(R.id.tvIntelligentMode)
tvGlobalMode= view.findViewById(R.id.tvGlobalMode)
clNode= view.findViewById(R.id.clNode)
aivNodeImg= view.findViewById(R.id.aivNodeImg)
tvNodeName= view.findViewById(R.id.tvNodeName)
clLinks= view.findViewById(R.id.clLinks)
clNode.setOnClickListener {
if (checkExpire()) {
RxToast.info(resources.getString(R.string.AccountExpired))
return@setOnClickListener
}
val intent = Intent(CommonUtils.getApp(), ChangeNodeActivity::class.java)
if (!TextUtils.isEmpty(newUuid)) {
intent.putExtra(BZYConstants.MMKV_KEY_CURRENT_NODE, newUuid)
intent.putExtra(BZYConstants.EXTRA_KEY_IS_RUNING, clashRunning)
}
startActivityForResult(intent, 2)
}
tvIntelligentMode.setOnClickListener {
if(clashRunning){
RxToast.info(resources.getString(R.string.SwitchingSourceModel))
return@setOnClickListener
}
setProxyModeView(ProxyMode.PAC)
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
checkGlo()
}
tvGlobalMode.setOnClickListener {
if(clashRunning){
RxToast.info(resources.getString(R.string.SwitchingSourceModel))
return@setOnClickListener
}
setProxyModeView(ProxyMode.GLOBAL)
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, true)
checkGlo()
}
clLinks.setOnClickListener {
if (clashRunning) {
val rxDialogSureCancel = RxDialogSureCancel(activity)
if (isAdded) {
rxDialogSureCancel.setContent(requireActivity().resources.getString(R.string.StopAccelerating))
}
rxDialogSureCancel.setCancelListener {
rxDialogSureCancel.cancel()
}
rxDialogSureCancel.setSureListener {
stopUTimer()
stopClash()
reConnection = false
tvClick.text=resources.getString(R.string.LinkJS)
ivAccelerate.setImageResource(R.mipmap.yjl_home_clink_bg)
rxDialogSureCancel.cancel()
Log.d("NewAccFragment connectId${connectId}")
if (connectId != -1) {
accelerateViewModel.appStopStatus(connectId)
}
}
rxDialogSureCancel.show()
} else {
if (checkExpire()) {
if (isAdded) {
MaterialDialog(requireContext()).show {
this.cancelable(false)
cornerRadius(res = R.dimen.dp_10)
customView(
R.layout.expired_recharge__layout,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
getCustomView().findViewById<TextView>(R.id.tv_pay_finish)
.setOnClickListener {
goNewRecharge()
dismiss()
}
}
}
return@setOnClickListener
}
showLoad(resources.getString(R.string.Starting), requireContext())
startClash(true)
}
}
aivCustomService.setOnClickListener {
startActivity(Intent(requireContext(), CustomerServiceWebView::class.java))
}
clGetVip.setOnClickListener{
goNewRecharge()
}
tvUserName.setOnClickListener {
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
val clipboardManager =
requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("text", userName)
clipboardManager.setPrimaryClip(clipData)
RxToast.info(resources.getString(R.string.CopyToClipboard))
}
tvUserTimeEnd.setOnClickListener {
updateUserInfo()
}
setExpireDate()
//测试测速
getDelayData()
}
@SuppressLint("SetTextI18n")
private fun getDelayData() {
tvDelayMs.text=resources.getString(R.string.delayMS).replace("$","${Utils.generateRandomTwoDigitNumber(30, 100)}")
}
override fun onResume() {
super.onResume()
lifecycleScope.launch {
Log.d("clashRunning==>$clashRunning")
if (clashRunning) {
stateChanged(CLASH_STARTED, false)
getDelayData()
} else {
stateChanged(CLASH_STOP, false)
}
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.iv_accelerate -> {
if (clashRunning) {
val rxDialogSureCancel = RxDialogSureCancel(activity)
if (isAdded) {
rxDialogSureCancel.setContent(requireActivity().resources.getString(R.string.StopAccelerating))
}
rxDialogSureCancel.setCancelListener {
rxDialogSureCancel.cancel()
}
rxDialogSureCancel.setSureListener {
stopUTimer()
stopClash()
rxDialogSureCancel.cancel()
reConnection = false
Log.d("NewAccFragment connectId${connectId}")
if(connectId!=-1){
accelerateViewModel.appStopStatus(connectId)
}
}
rxDialogSureCancel.show()
} else {
if (checkExpire()) {
if (isAdded) {
MaterialDialog(requireContext()).show {
this.cancelable(false)
cornerRadius(res = R.dimen.dp_10)
customView(
R.layout.expired_recharge__layout,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
getCustomView().findViewById<TextView>(R.id.tv_pay_finish).setOnClickListener {
goNewRecharge()
dismiss()
}
}
}
return
}
showLoading(resources.getString(R.string.Starting), requireContext())
startClash(true)
getDelayData()
}
}
}
}
fun stopClash() {
context?.stopClashService()
}
private fun startClash(isStart:Boolean) {
private fun startClash(isStart: Boolean) {
launch {
if(isStart){
if (isStart) {
delay(2000)
}
NewMainActivity.profileBinder?.let { pm ->
MainActivity.profileBinder?.let { pm ->
val active = pm.queryActive()
if (active == null) {
Log.d("startClash: 未选择")
val pro = pm.queryAll().find {
it.name == Conf.getClashConfName(this@NewAccFragment.context)
it.name == Conf.getClashConfName(this@HomeFragment.context)
}
pro?.let { profile ->
@ -276,19 +375,22 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
ActivityResultContracts.StartActivityForResult(), vpnRequest
)
if (result.resultCode == RESULT_OK) {
hideLoading()
stateChanged(CLASH_STARTING, true)
context?.startClashService()
accelerateViewModel.appStartupStatus()
}
}else{
} else {
accelerateViewModel.appStartupStatus()
}
} catch (e: Exception) {
stopUTimer()
e.printStackTrace()
}
withContext(Dispatchers.Main){
hideLoading()
withContext(Dispatchers.Main) {
tvClick.text=resources.getString(R.string.Accelerating)
ivAccelerate.setImageResource(R.mipmap.yjl_home_clink_select_bg)
hideLoad()
}
}
@ -320,7 +422,6 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
if (::rxDialogShapeLoading.isInitialized) {
rxDialogShapeLoading.cancel()
}
accelerateIv.isSelected = true
clashRunning = true
if (isAdded) {
@ -333,7 +434,6 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
if (::rxDialogShapeLoading.isInitialized) {
rxDialogShapeLoading.cancel()
}
accelerateIv.isSelected = false
clashRunning = false
stopUTimer()
}
@ -367,7 +467,6 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
if (::rxDialogShapeLoading.isInitialized) {
rxDialogShapeLoading.cancel()
}
accelerateIv.isSelected = true
if (isShowToast) {
if (isAdded) {
RxToast.success(resources.getString(R.string.AccelerateSuccess))
@ -379,7 +478,6 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
if (::rxDialogShapeLoading.isInitialized) {
rxDialogShapeLoading.cancel()
}
accelerateIv.isSelected = false
}
CLASH_STARTING -> {
@ -396,7 +494,8 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
else -> {}
}
}
fun nodeChooseBase(data: Intent?){
fun nodeChooseBase(data: Intent?) {
val node = data?.extras?.getString(BZYConstants.MMKV_KEY_SELECT_NODE_NAME)
val isRunning = data?.extras?.getBoolean(BZYConstants.EXTRA_KEY_IS_RUNING)
Log.d("onActivityResult ==>>> Node:${node}")
@ -413,27 +512,11 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
}
fun changeUserState(){
tvTimeInfo.text=resources.getString(R.string.HYDq)
}
@Deprecated("Deprecated in Java")
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (requestCode == REQUEST_CONNECT) {
if (resultCode == Activity.RESULT_OK) {
if (clashRunning) {
Log.d("clashRunning $clashRunning")
} else {
startClash(false)
}
} else {
if (::rxDialogShapeLoading.isInitialized || rxDialogShapeLoading.isShowing) {
rxDialogShapeLoading.cancel()
}
}
} else if (requestCode == CHECK_NODE_REQUEST_CODE) {
getDelayData()
} else if (requestCode == 4) {
checkGlo()
if (requestCode == 2) {
nodeChooseBase(data)
}
}
@ -495,7 +578,7 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
tvEndTime.text = endTimeInfo
tvUserTimeEnd.text = endTimeInfo
}
private fun checkExpire(): Boolean {
@ -509,23 +592,24 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
return true;
}
private fun updateUserInfo() {
if (activity != null) {
val mainAct = activity as NewMainActivity
val mainAct = activity as MainActivity
mainAct.goCheckLogin()
}
}
private fun startUTimer() {
if (activity != null) {
val mainAct = activity as NewMainActivity
val mainAct = activity as MainActivity
mainAct.startUploadTimer()
}
}
private fun stopUTimer() {
if (activity != null) {
val mainAct = activity as NewMainActivity
val mainAct = activity as MainActivity
mainAct.stopUploadTimer()
}
}
@ -535,6 +619,13 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
val isGlobal = isGlo
val isGlobal2 = MMKV.defaultMMKV().decodeBool(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false)
Log.i("checkGlo isGlobal==>${isGlobal}, isGlobal2==>${isGlobal2}")
val px: ProxyMode = if (isGlobal2) {
ProxyMode.GLOBAL
} else {
ProxyMode.PAC
}
setProxyModeView(px)
launch(Dispatchers.IO) {
if (isGlobal) {
if (clashRunning) {
@ -573,13 +664,14 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
}
private suspend fun getNodes() {
coroutineScope {
val selectedName =
MMKV.defaultMMKV().decodeString(BZYConstants.NODE_SELECTED_NAME_KEY, "")
Log.d("getNodes selected_name==>${selectedName}")
if (TextUtils.isEmpty(selectedName)) {
NewMainActivity.subUrl?.let {
MainActivity.subUrl?.let {
accelerateViewModel.getNodeOther(it, object : AsyncCallBackListener {
override fun suc(obj: Any?) {
proList = obj as MutableList<ClashNodebBean>
@ -656,65 +748,101 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {
when(httpStatus.reqType){
HttpReqType.AppStartupStatus ->{
when (httpStatus.reqType) {
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
if (dataInfo.data != null) {
if (dataInfo.data.id != null) {
connectId = dataInfo.data.id
}
}
}
HttpReqType.AppStopStatus ->{
HttpReqType.AppStopStatus -> {
Log.d("AppStopStatus is Success ${httpStatus.rsp}")
}
HttpReqType.EXPENSES_RECORD->{
if(httpStatus.rsp is ExpensesRecordRsp){
HttpReqType.EXPENSES_RECORD -> {
if (httpStatus.rsp is ExpensesRecordRsp) {
httpStatus.rsp.let { expensesRecordRsp ->
if(expensesRecordRsp.code == "1000"){
if(expensesRecordRsp.data != null){
if (expensesRecordRsp.code == "1000") {
if (expensesRecordRsp.data != null) {
val expensesRecordList = expensesRecordRsp.data.expensesRecords
if(expensesRecordList!=null){
if(expensesRecordList.size>0){
tvTimeInfo.text=resources.getString(R.string.HYDq)
}else{
tvTimeInfo.text=resources.getString(R.string.YkStr)
if (expensesRecordList != null) {
if (expensesRecordList.size > 0) {
} else {
}
}
}
}else {
} else {
RxToast.error("${expensesRecordRsp.code}${expensesRecordRsp.message}")
}
}
}
}
else->{
HttpReqType.SelectNode -> {
(httpStatus.rsp as ShowNode).let {
if (it.code == 200) {
val countryFlag = it.data?.countryFlag
if (countryFlag == true) {
clProxy.visibility=View.VISIBLE
clNode.visibility=View.VISIBLE
}
val screenshotFlag = it.data?.screenshotFlag
screenshotFlag.let {
if (screenshotFlag == true) {
// 在 Activity 中取消禁止截屏/录屏
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
MMKV.defaultMMKV().encode(
ScreenFlag, screenshotFlag
)
} else {
requireActivity().window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
MMKV.defaultMMKV().encode(
ScreenFlag, screenshotFlag!!
)
}
}
}
}
}
else -> {
}
}
}
override fun httpFailure(httpStatus: HttpStatus.Failure) {
when(httpStatus.reqType){
HttpReqType.AppStartupStatus ->{
when (httpStatus.reqType) {
HttpReqType.AppStartupStatus -> {
Log.d("AppStartupStatus is Failure ${httpStatus.msg}")
}
HttpReqType.AppStopStatus ->{
HttpReqType.AppStopStatus -> {
Log.d("AppStopStatus is Failure ${httpStatus.msg}")
}
else->{
else -> {
}
}
}
fun showLoading(str: String, context: Context) {
fun showLoad(str: String, context: Context) {
val message = if (TextUtils.isEmpty(str)) "进行中..." else str
if (baseLoading == null) {
baseLoading = RxDialogShapeLoading(context)
if (baseLoadingView == null) {
baseLoadingView = RxDialogShapeLoading(context)
}
baseLoading?.setMessage(message)
if (baseLoading?.isShowing == false) {
@ -722,19 +850,133 @@ open class NewAccFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dis
}
}
fun hideLoading() {
if (baseLoading != null && baseLoading?.isShowing == true) {
baseLoading?.cancel()
fun hideLoad() {
if (baseLoadingView != null && baseLoadingView?.isShowing == true) {
baseLoadingView?.cancel()
}
}
private fun goNewRecharge() {
if (activity != null) {
val newMain = activity as NewMainActivity
val newMain = activity as MainActivity
newMain.goBackupRechargeWeb()
}
}
override fun onDestroy() {
super.onDestroy()
cleanRec(requireContext())
}
private fun setProxyModeView(proxyMode: ProxyMode) {
when (proxyMode) {
ProxyMode.PAC -> {
isGlo = false
tvIntelligentMode.setBackgroundResource(R.drawable.oc_proxy_choose_bg)
tvGlobalMode.setBackgroundResource(0)
tvIntelligentMode.setTextColor("#FF006AFB".toColorInt())
tvGlobalMode.setTextColor("#FF000000".toColorInt())
sendMode(false)
}
ProxyMode.GLOBAL -> {
isGlo = true
tvIntelligentMode.setBackgroundResource(0)
tvGlobalMode.setBackgroundResource(R.drawable.oc_proxy_choose_bg)
tvIntelligentMode.setTextColor("#FF000000".toColorInt())
tvGlobalMode.setTextColor("#FF006AFB".toColorInt())
sendMode(true)
}
}
}
private fun sendMode(type: Boolean) {
val intent = Intent(Intents.ACTION_Glo_Mode)
intent.putExtra("mode", type)
requireContext().sendBroadcast(
intent.setPackage(requireContext().packageName)
)
}
private fun setNodeNameAndImg(name: String) {
launch(Dispatchers.Main) {
tvNodeName.text = name
name.let {
when {
it.contains("中国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_china)
}
it.contains("香港", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_china)
}
it.contains("日本", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_japan)
}
it.contains("韩国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_korea)
}
it.contains("美国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_usa)
}
it.contains("德国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_germany)
}
it.contains("法国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_france)
}
it.contains("俄罗斯", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_russia)
}
it.contains("新加坡", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_singapore)
}
it.contains("英国", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_uk)
}
it.contains("澳大利亚", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_australia)
}
it.contains("印度", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_india)
}
it.contains("加拿大", true) -> {
aivNodeImg.setImageResource(R.drawable.flag_canada)
}
it.contains("以色列", true) -> {
aivNodeImg.setImageResource(R.drawable.ic_s_il)
}
it.contains("西班牙", true) -> {
aivNodeImg.setImageResource(R.drawable.ic_xibanya)
}
it.contains("荷兰", true) -> {
aivNodeImg.setImageResource(R.drawable.ic_henan)
}
it.contains("意大利", true) -> {
aivNodeImg.setImageResource(R.drawable.ic_yidali)
}
it.contains("塞尔维亚", true) -> {
aivNodeImg.setImageResource(R.drawable.ic_sewy)
}
else -> {
aivNodeImg.setImageResource(R.drawable.yjl_node_icon)
}
}
}
}
}
}

View File

@ -0,0 +1,750 @@
package com.yingmao.clash.fragment.setting
import android.annotation.SuppressLint
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.text.TextUtils
import android.text.method.LinkMovementMethod
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
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.afollestad.materialdialogs.customview.getCustomView
import com.alibaba.sdk.android.oss.ClientException
import com.alibaba.sdk.android.oss.OSSClient
import com.alibaba.sdk.android.oss.ServiceException
import com.alibaba.sdk.android.oss.callback.OSSCompletedCallback
import com.alibaba.sdk.android.oss.callback.OSSProgressCallback
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.log.Log
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.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.isVip
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.SettingActivity
import com.yingmao.clash.act.ShareActivity
import com.yingmao.clash.act.SplashHelper
import com.yingmao.clash.app.MainApplication
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.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.ParamData
import com.yingmao.clash.net.http.entity.SubscriptionRsp
import com.yingmao.clash.net.http.entity.UploadParamData
import com.yingmao.clash.net.http.entity.VipSignRsp
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.view.RxToast
import com.yingmao.clash.view.dialog.DialogBandChoose
import com.yingmao.clash.view.dialog.DialogDoMainChoose
import com.yingmao.clash.view.dialog.NoticeViewDialog
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.vm.MainAtyVM
import com.yingmao.clash.webview.CustomerServiceWebView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.coroutines.withTimeoutOrNull
import java.io.File
import java.text.SimpleDateFormat
import java.time.Instant
import java.time.temporal.ChronoUnit
import java.util.Date
import java.util.Locale
import kotlin.time.Duration.Companion.seconds
class SettingFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers.IO) {
private lateinit var tvUserName:TextView
private lateinit var tvVipGet: TextView
private lateinit var goSee: TextView
private lateinit var tvEndTimes: TextView
private lateinit var goGetVip: TextView
private lateinit var clVipCard: ConstraintLayout
private lateinit var shareCard: ConstraintLayout
private lateinit var tvVersion: TextView
private lateinit var tvUserTimeEnd: TextView
private lateinit var rvSettingTab:RecyclerView
private var baseLoad: RxDialogShapeLoading? = null
private lateinit var mainAtyVM: MainAtyVM
private var settingPageList = mutableListOf<SettingPageBean>()
@RequiresApi(Build.VERSION_CODES.O)
override fun init(
titleBarRl: RelativeLayout,
backIv: ImageView,
moreIv: TextView,
titleTv: TextView,
container: FrameLayout,
) {
titleBarRl.visibility = View.GONE
titleTv.visibility = View.GONE
backIv.visibility = View.GONE
val view = View.inflate(CommonUtils.getApp(), R.layout.setting_fragment_layout, null)
initView(view)
initData()
container.addView(view)
}
@RequiresApi(Build.VERSION_CODES.O)
@SuppressLint("SetTextI18n")
private fun initData() {
val userName =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
tvUserName.text=userName
if (!(PayUtils.isEmail(userName) || PayUtils.isPhoneNumber(userName))) {
tvVipGet.visibility = View.VISIBLE
} else {
tvVipGet.visibility = View.GONE
}
setExpireDate()
tvVersion.text=requireActivity().resources.getString(R.string.edition) + "${BuildConfig.VERSION_NAME}." + BuildConfig.productId
val settingItem= SettingPageBean(
1,
resources.getString(R.string.setting),
R.drawable.home_setting_cion,
)
val noticeItem= SettingPageBean(
2,
resources.getString(R.string.notice),
R.drawable.ic_s_notice,
)
val activityItem= SettingPageBean(
3,
resources.getString(R.string.activity),
R.drawable.activity_item_tag,
)
val singItem= SettingPageBean(
4,
resources.getString(R.string.SignIn),
R.drawable.user_sing_icon,
)
val serviceTermsItem= SettingPageBean(
5,
resources.getString(R.string.ServiceTerms),
R.drawable.user_agreement_icon,
)
val sourceSwitchItem= SettingPageBean(
6,
resources.getString(R.string.source_switch),
R.drawable.switching_item_tag,
)
val upLoadData= SettingPageBean(
7,
resources.getString(R.string.UploadLog),
R.drawable.user_uplog_icon,
)
val privacyPolicyItem= SettingPageBean(
8,
resources.getString(R.string.PrivacyPolicy),
R.drawable.user_privacypolicy_icon,
)
val initializationItem= SettingPageBean(
9,
resources.getString(R.string.InitializationRepair),
R.drawable.user_init_icon,
)
settingPageList.add(settingItem)
settingPageList.add(noticeItem)
settingPageList.add(activityItem)
settingPageList.add(singItem)
settingPageList.add(serviceTermsItem)
settingPageList.add(sourceSwitchItem)
settingPageList.add(upLoadData)
settingPageList.add(privacyPolicyItem)
settingPageList.add(initializationItem)
val settingAdapter= SettingPageAdapter()
settingAdapter.setTagList(settingPageList,requireContext())
rvSettingTab.layoutManager =GridLayoutManager(CommonUtils.getApp(), 4, GridLayoutManager.VERTICAL, false)
rvSettingTab.adapter=settingAdapter
settingAdapter.setListener(object: SettingPageAdapter.SettingPageAdapterItemClick {
override fun onItemClick(itemData: SettingPageBean?) {
if(itemData!=null){
when(itemData.type){
1->{
startActivity(Intent(requireContext(), SettingActivity::class.java))
}
2->{
val notice =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_NOTICE_READ, "暂无新通知")!!
val userName =MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
android.util.Log.i("data::::","notice::"+notice)
if(notice.isEmpty()){
val homeNoticeDialog = NoticeViewDialog(requireActivity(), "暂无新通知",userName)
homeNoticeDialog.show()
homeNoticeDialog.setOnDialogClickListener {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_NOTICE_READ, notice)
homeNoticeDialog.dismiss()
}
}else{
val homeNoticeDialog = NoticeViewDialog(requireActivity(), notice,userName)
homeNoticeDialog.show()
homeNoticeDialog.setOnDialogClickListener {
MMKV.defaultMMKV()
.encode(BZYConstants.MMKV_KEY_NOTICE_READ, notice)
homeNoticeDialog.dismiss()
}
}
}
3->{
startActivity(Intent(requireContext(), ActivityActivity::class.java))
}
4->{
mainAtyVM.vipSign()
}
5->{
val intent = Intent(requireContext(), AgreementAndPrivacyActivity::class.java)
intent.putExtra(BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_USER_AGREEMENT)
startActivity(intent)
}
6->{
initializationRepair()
}
7->{
}
8->{
val intent = Intent(requireContext(),AgreementAndPrivacyActivity::class.java)
intent.putExtra(BZYConstants.EXTRA_KEY_AGREEMENT, BZYConstants.EXTRA_PRIVACY_AGREEMENT)
startActivity(intent)
}
9->{
if(clashRunning){
RxToast.info(getString(R.string.SwitchingSource))
}else{
RxToast.info(getString(R.string.Switching))
//源切换
showDomainList()
}
}
}
}
}
})
}
public fun initializationRepair(){
if (checkExpire()) {
RxToast.info(resources.getString(R.string.AccountExpired))
return
}
if(clashRunning){
RxToast.info("请关闭加速后在进行初始化操作")
return
}
cleanNodeMmkv()
if (TextUtils.isEmpty(subUrl)){
RxToast.success(resources.getString(R.string.tooFast))
return
}
showLoading(resources.getString(R.string.UnderRepair), requireActivity())
launch(Dispatchers.IO){
profileBinder?.let { pm ->
pm.queryAll().forEach { profile ->
Log.d("setting profile delete ==>${profile.name}")
pm.delete(profile.uuid)
}
subUrl.let {
val result=withTimeoutOrNull(8.seconds) {
subUrl?.let { url -> setSub2(url) }
}
if(result==null){
android.util.Log.d(
"resultData",
"resultData:$result"
)
withContext(Dispatchers.Main){
hideLoad()
RxToast.error(resources.getString(R.string.FixTimeout))
}
}else{
android.util.Log.d(
"resultData",
"resultData:$result"
)
withContext(Dispatchers.Main){
hideLoad()
RxToast.info(resources.getString(R.string.RepairCompletedInit))
}
}
}
}
}
}
private fun initView(view: View) {
tvUserName=view.findViewById(R.id.tvUserName)
tvUserTimeEnd=view.findViewById(R.id.tvUserTimeEnd)
tvVipGet =view.findViewById(R.id.tvVipGet)
tvEndTimes =view.findViewById(R.id.tvEndTimes)
goGetVip =view.findViewById(R.id.goGetVip)
goSee =view.findViewById(R.id.goSee)
clVipCard =view.findViewById(R.id.clVipCard)
shareCard =view.findViewById(R.id.shareCard)
tvVersion=view.findViewById(R.id.tvVersion)
rvSettingTab=view.findViewById(R.id.rvSettingTab)
clVipCard.setOnClickListener {
goNewRecharge()
}
shareCard.setOnClickListener {
startActivity(Intent(requireContext(), ShareActivity::class.java))
}
goSee.setOnClickListener {
startActivity(Intent(requireContext(), ShareActivity::class.java))
}
goGetVip.setOnClickListener {
goNewRecharge()
}
tvVipGet.setOnClickListener {
showBingDialogChoose()
}
tvUserName.setOnClickListener {
val userName = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME)
val clipboardManager =
requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("text", userName)
clipboardManager.setPrimaryClip(clipData)
RxToast.info(resources.getString(R.string.CopyToClipboard))
}
tvUserTimeEnd.setOnClickListener {
goMainCheck()
}
}
private fun cleanNodeMmkv(){
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_SELECTED_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_All_ITEM_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.PROFILE_SUB_URL)
}
var dialogDoMainChoose: DialogDoMainChoose? = null
private fun showDomainList() {
try {
SplashHelper(mainAtyVM).getHostWithFallback { success ->
MainScope().launch {
if (success) {
if (dialogDoMainChoose == null) {
dialogDoMainChoose = DialogDoMainChoose(activity)
}
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(requireActivity(),object:MainApplication.OnRestartButtonListener{
override fun enterButton() {
}
override fun cancelButton() {
dialogDoMainChoose?.dismiss()
}
})
}
})
dialogDoMainChoose?.show()
}
}
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
@RequiresApi(Build.VERSION_CODES.O)
@SuppressLint("SimpleDateFormat", "SetTextI18n")
fun setExpireDate() {
val isExpire = checkExpire()
var endTimeInfo = "--"
if (isExpire) {
if (isAdded) {
endTimeInfo = resources.getString(R.string.AccountExpired)
tvEndTimes.text=resources.getString(R.string.AccountExpired)
}
} else {
val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
val daysDifference = getDaysDifference(validPeriod)
if (daysDifference > 0) {
tvEndTimes.text=daysDifference.toString()+"dat"
} else if (daysDifference < 0) {
tvEndTimes.text=daysDifference.toString()+"dat"
} else {
tvEndTimes.text=daysDifference.toString()+"dat"
}
val decodeString = MMKV.defaultMMKV().decodeString(BZYConstants.languageInfo, "")
if (decodeString.isNullOrEmpty()) {
//获取当前系统语言
val config = resources.configuration
val language = config.locale.language
if (language.equals("en")) {
val dateFormat = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val localEN = Locale.ENGLISH
SimpleDateFormat("MM/dd/yyyy HH:mm", localEN)
} else {
val localEN = Locale.ENGLISH
SimpleDateFormat("MM/dd/yyyy HH:mm", localEN)
}
endTimeInfo = dateFormat.format(validPeriod)
} else {
val dateFormat = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SimpleDateFormat("yyyy年MM月dd日 HH:mm")
} else {
SimpleDateFormat("yyyy年MM月dd日 HH:mm")
}
endTimeInfo = dateFormat.format(validPeriod)
}
} else {
if (decodeString == "English") {
val dateFormat = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val locale = Locale.ENGLISH
SimpleDateFormat("MM/dd/yyyy HH:mm", locale)
} else {
val locale = Locale.ENGLISH
SimpleDateFormat("MM/dd/yyyy HH:mm", locale)
}
endTimeInfo = dateFormat.format(validPeriod)
} else {
val dateFormat = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
SimpleDateFormat("yyyy年MM月dd日 HH:mm")
} else {
SimpleDateFormat("yyyy年MM月dd日 HH:mm")
}
endTimeInfo = dateFormat.format(validPeriod)
}
}
}
tvUserTimeEnd.text =resources.getString(R.string.expire_date)+endTimeInfo
}
private fun checkExpire(): Boolean {
val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD)
if (validPeriod > 0) {
val nowTime = System.currentTimeMillis()
Log.d("validPeriod==>$validPeriod, nowTime==>$nowTime")
if (validPeriod >= nowTime) {
return false
}
}
return true
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
Logger.d("onActivityCreated")
mainAtyVM = ViewModelProvider(this)[MainAtyVM::class.java]
observe(this, mainAtyVM)
}
private fun goMainCheck() {
if (activity != null) {
val uiMainActivity = activity as MainActivity
uiMainActivity.goCheckLogin()
}
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
super.httpLoading(httpStatus)
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {
when (httpStatus.reqType) {
HttpReqType.VIPSIGN -> {
val data = httpStatus.rsp as VipSignRsp
if (data.code == "1000") {
var gifMins = 30
data.data?.let {
if (it.signGiftmins != null) {
gifMins = it.signGiftmins
}
}
RxToast.success(
resources.getString(R.string.SingInGive).replace("%d", "${gifMins}")
)
goMainCheck()
} else {
RxToast.error(resources.getString(R.string.CheckFailed) + "${data.message}")
}
}
HttpReqType.GET_AIRNODES -> {
val data = httpStatus.rsp as SubscriptionRsp
if (data.code != "1000") {
RxToast.error(resources.getString(R.string.NodeAcquisitionFailed) + "${data.msg}")
}
data.data.let { url ->
android.util.Log.e("getAirPort", "AirPortURL=${url}")
if (url.isNotEmpty()) {
val proSubUrl =
MMKV.defaultMMKV().decodeString(BZYConstants.PROFILE_SUB_URL, "")
subUrl = if (!TextUtils.isEmpty(proSubUrl)){
if (proSubUrl == url) {
url
} else {
proSubUrl
}
}else{
url
}
lifecycleScope.launch(Dispatchers.IO) {
subUrl?.let { setSub2(it) }
}
}
}
}
HttpReqType.UploadParameters -> {
val upLoadData = httpStatus.rsp as UploadParamData
if (upLoadData.code == 1000) {
val directory: File? = requireActivity().getExternalFilesDir("CrashLog")
//多文件上传
if (directory != null) {
val allFilePath = getAllFilePath(directory.path)
if (upLoadData.data != null) {
if (allFilePath.isNotEmpty()) {
val username =
MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
val nowTime = SimpleDateFormat(
"yyyyMMddkkmmss",
Locale.getDefault()
).format(Date())
uploadForAliOss(
upLoadData.data,
allFilePath,
"app/errlog/" + username + "_" + nowTime + ".txt"
)
}
}
}
} else {
hideLoad()
}
}
else -> {
}
}
}
override fun httpFailure(httpStatus: HttpStatus.Failure) {
when (httpStatus.reqType) {
HttpReqType.VIPSIGN -> {
RxToast.error(resources.getString(R.string.CheckFailed) + httpStatus.msg)
}
HttpReqType.CHECK_LOGIN -> {
RxToast.error(resources.getString(R.string.QueryFailed))
}
HttpReqType.UploadParameters -> {
hideLoading()
}
else -> {
}
}
}
fun showLoad(str: String, context: Context) {
val message = if (TextUtils.isEmpty(str)) "进行中..." else str
if (baseLoad == null) {
baseLoad = RxDialogShapeLoading(context)
}
baseLoad?.setMessage(message)
if (baseLoad?.isShowing == false) {
baseLoad?.show()
}
}
fun hideLoad() {
if (baseLoad != null && baseLoad?.isShowing == true) {
baseLoad?.cancel()
}
}
private fun uploadForAliOss(data: ParamData, filePath: List<String>, dirStr: String) {
val endpoint = "oss-cn-hongkong.aliyuncs.com"
val accessKeyId = data.credentials?.accessKeyId
val accessKeySecret = data.credentials?.accessKeySecret
// 从STS服务获取的安全令牌SecurityToken
val securityToken = data.credentials?.securityToken
val credentialProvider =
OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken)
val oss = OSSClient(requireActivity(), endpoint, credentialProvider)
android.util.Log.i("uploadForAliOss", "filePath::::${filePath[0]}")
val put = PutObjectRequest("yingmao", dirStr, filePath[0])
// 异步上传时可以设置进度回调。
put.progressCallback =
OSSProgressCallback { request, currentSize, totalSize ->
android.util.Log.d(
"PutObject",
"currentSize: $currentSize totalSize: $totalSize"
)
}
val task: OSSAsyncTask<*> = oss.asyncPutObject(put,
object : OSSCompletedCallback<PutObjectRequest?, PutObjectResult> {
override fun onSuccess(request: PutObjectRequest?, result: PutObjectResult) {
if (result.statusCode == 200) {
//删除文件
DataUtils.deleteFile(filePath[0])
}
requireActivity().runOnUiThread {
hideLoad()
RxToast.info(resources.getString(R.string.LogUploadedSuccessfully))
}
android.util.Log.d("PutObjectRequest", "$request")
android.util.Log.d("PutObjectResult", "$result")
android.util.Log.d("PutObject", "UploadSuccess")
android.util.Log.d("ETag", result.eTag)
android.util.Log.d("RequestId", result.requestId)
}
override fun onFailure(
request: PutObjectRequest?,
clientExcepion: ClientException,
serviceException: ServiceException,
) {
requireActivity().runOnUiThread {
hideLoad()
RxToast.error(resources.getString(R.string.LogUploadedFiler))
}
// 请求异常。
if (clientExcepion != null) {
// 本地异常,如网络异常等。
clientExcepion.printStackTrace()
}
if (serviceException != null) {
// 服务异常。
android.util.Log.e("ErrorCode", serviceException.errorCode)
android.util.Log.e("RequestId", serviceException.requestId)
android.util.Log.e("HostId", serviceException.hostId)
android.util.Log.e("RawMessage", serviceException.rawMessage)
}
}
})
}
private fun showBingDialogChoose() {
val dialog = DialogBandChoose(requireActivity())
dialog.setOnBandClickListener(object : DialogBandChoose.OnBandClickListener {
override fun onBandClick(isPhone: Boolean) {
val intent = Intent(CommonUtils.getApp(), BandPhoneActivity::class.java)
intent.putExtra("isPhone", isPhone)
startActivity(intent)
}
})
dialog.show()
}
@RequiresApi(Build.VERSION_CODES.O)
fun getDaysDifference(timestamp: Long): Long{
var targetInstant = Instant.ofEpochMilli(timestamp)
var nowInstant =Instant.now()
return ChronoUnit.DAYS.between(targetInstant, nowInstant)
}
private fun goNewRecharge() {
if (activity != null) {
val newMain = activity as MainActivity
newMain.goBackupRechargeWeb()
}
}
}

View File

@ -0,0 +1,65 @@
package com.yingmao.clash.fragment.setting
import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.recyclerview.widget.RecyclerView
import com.yingmao.clash.R
import com.yingmao.clash.entity.SettingPageBean
class SettingPageAdapter : RecyclerView.Adapter<SettingPageAdapter.SettingPageViewHolder>() {
private lateinit var settingPageList: MutableList<SettingPageBean>
//设置回调监听
private var itemListener: SettingPageAdapterItemClick? = null
private var context: Context? = null
//设置监听器
fun setListener(listener: SettingPageAdapterItemClick) {
this.itemListener = listener
}
//设置显示的数据
fun setTagList(settingPageList: MutableList<SettingPageBean>, context: Context) {
this.settingPageList = settingPageList
this.context = context
}
inner class SettingPageViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val llLine: LinearLayout = itemView.findViewById(R.id.llLine)
val aivIcon: AppCompatImageView = itemView.findViewById(R.id.aivIcon)
val itemName: TextView = itemView.findViewById(R.id.itemName)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SettingPageViewHolder(
LayoutInflater.from(context)
.inflate(R.layout.layout_item_setting_page, parent, false)
)
override fun getItemCount(): Int {
return settingPageList.size
}
@SuppressLint("NotifyDataSetChanged", "SetTextI18n", "DefaultLocale")
override fun onBindViewHolder(holder: SettingPageViewHolder, @SuppressLint("RecyclerView") position: Int) {
holder.aivIcon.setImageResource(settingPageList[position].imgSrc)
holder.itemName.text=settingPageList[position].name
holder.llLine.setOnClickListener {
itemListener?.onItemClick(settingPageList[position])
notifyDataSetChanged()
}
}
/*
* 内置监听回调
* */
interface SettingPageAdapterItemClick {
fun onItemClick(itemData: SettingPageBean?)
}
}

View File

@ -0,0 +1,531 @@
package com.yingmao.clash.fragment.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.net.toUri
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.afollestad.materialdialogs.MaterialDialog
import com.afollestad.materialdialogs.customview.customView
import com.afollestad.materialdialogs.customview.getCustomView
import com.alipay.sdk.app.PayTask
import com.cncat.vpn.common.log.Log
import com.orhanobut.logger.Logger
import com.stripe.android.PaymentConfiguration
import com.stripe.android.Stripe
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.act.ExpensesRecordActivity
import com.yingmao.clash.act.LoginActivity
import com.yingmao.clash.act.MainActivity.Companion.isSubbed
import com.yingmao.clash.act.MainActivity.Companion.profileBinder
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.PayUploadParamData
import com.yingmao.clash.entity.RechargeModelEntity
import com.yingmao.clash.fragment.BaseFragment
import com.yingmao.clash.fragment.home.HomeFragment.Companion.clashRunning
import com.yingmao.clash.fragment.recharge.RechargeViewModel
import com.yingmao.clash.fragment.recharge.adapter.RechargeModelAdapter
import com.yingmao.clash.fragment.recharge.adapter.VIPRechargeAdapter
import com.yingmao.clash.net.http.HttpReqType
import com.yingmao.clash.net.http.HttpStatus
import com.yingmao.clash.net.http.entity.Grade
import com.yingmao.clash.net.http.entity.PayRsp
import com.yingmao.clash.net.http.entity.RechargeInfo
import com.yingmao.clash.net.http.entity.RechargeInfoRsp
import com.yingmao.clash.net.http.entity.Trade
import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.PayUtils
import com.yingmao.clash.util.ThreadUtils
import com.yingmao.clash.util.stopClashService
import com.yingmao.clash.view.RxToast
import com.yingmao.clash.view.dialog.RxDialogShapeLoading
import com.yingmao.clash.vm.MainAtyVM
import com.yingmao.clash.webview.CustomerServiceWebView
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.text.DecimalFormat
class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers.IO) {
private lateinit var aiBack: AppCompatImageView
private lateinit var viewModel: RechargeViewModel
private lateinit var swipeLayout: SwipeRefreshLayout
private lateinit var rvRechargeList:RecyclerView
private lateinit var tvPay:TextView
private lateinit var tvRechargeRecord:AppCompatImageView
private lateinit var clCustom: ConstraintLayout
private var selectedGrade: Grade? = null
private lateinit var rxDialogShapeLoading: RxDialogShapeLoading
private var outTradeNo = ""
private var selectedGradeID :Int=0
//stripePay 支付
private var paymentIntentClientSecret: String = ""
private lateinit var mainAtyVM: MainAtyVM
private val stripe: Stripe by lazy {
Stripe(
requireActivity(),
PaymentConfiguration.getInstance(requireContext()).publishableKey
)
}
private val mPageInfo = ExpensesRecordActivity.PageInfo()
override fun init(
titleBarRl: RelativeLayout,
backIv: ImageView,
moreIv: TextView,
titleTv: TextView,
container: FrameLayout,
) {
titleBarRl.visibility = View.GONE
titleTv.visibility = View.GONE
backIv.visibility = View.GONE
val view = View.inflate(CommonUtils.getApp(), R.layout.member_recharge_layout, null)
initView(view)
initdata()
container.addView(view)
}
private fun initdata() {
mainAtyVM = ViewModelProvider(this)[MainAtyVM::class.java]
viewModel = ViewModelProvider(this)[RechargeViewModel::class.java]
observe(this, viewModel)
//获取充值列表
val username = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME,"")!!
val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN,"")!!
val userId = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_USER_ID)!!
viewModel.getPhRechargeInfo(username, phToken, userId)
}
private fun initView(view: View) {
aiBack=view.findViewById(R.id.aiBack)
swipeLayout=view.findViewById(R.id.swipeLayout)
rvRechargeList=view.findViewById(R.id.rvRechargeList)
tvPay=view.findViewById(R.id.tvPay)
tvRechargeRecord=view.findViewById(R.id.tvRechargeRecord)
clCustom=view.findViewById(R.id.clCustom)
swipeLayout.setColorSchemeColors(Color.rgb(47, 223, 189))
swipeLayout.setOnRefreshListener {
selectedGrade = null
val username = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME,"")!!
val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN,"")!!
//获取充值列表
val userId = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_USER_ID)!!
viewModel.getPhRechargeInfo(username, phToken, userId)
}
aiBack.setOnClickListener {
// val intent=Intent()
// this.setResult(1000,intent)
// finish() // 关闭当前 Activity
}
tvRechargeRecord.setOnClickListener {
startActivity(Intent(requireActivity(), ExpensesRecordActivity::class.java))
}
tvPay.setOnClickListener {
if (selectedGrade == null) {
RxToast.info(resources.getString(R.string.selectRechargeAmount))
return@setOnClickListener
}
viewModel.pay("1", selectedGrade!!, "pointCard")
}
clCustom.setOnClickListener {
startActivity(Intent(requireActivity(), CustomerServiceWebView::class.java))
}
}
override fun httpLoading(httpStatus: HttpStatus.Loading) {
when (httpStatus.reqType) {
HttpReqType.GET_RECHARGE_INFO -> {
Logger.d("获取充值续费信息")
swipeLayout.isRefreshing = true
}
HttpReqType.PAY -> {
Logger.d("支付获取订单号")
showLoadingDialog(resources.getString(R.string.GeneratingOrder))
}
else->{
}
}
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {
when (httpStatus.reqType) {
HttpReqType.GET_RECHARGE_INFO -> {
Logger.d("获取充值续费信息请求成功")
swipeLayout.isRefreshing = false
(httpStatus.rsp as RechargeInfoRsp).let {
when (it.code) {
"1088" -> {
RxToast.info(resources.getString(R.string.LoginOut))
cleanUserInfo()
}
"1000" -> {
it.data?.let { rechargeInfo ->
initAdapter(rechargeInfo)
}
}
else -> {
RxToast.error(if (it.message.isNullOrBlank())resources.getString(R.string.FailedRechargeList)+ "${it.code}" else "${it.code}:${it.message}")
}
}
}
}
HttpReqType.PAY -> {
hideLoadingDialog()
Logger.d("生成订单请求成功")
(httpStatus.rsp as PayRsp).let { rsp ->
if (rsp.code != "1000") {
RxToast.error(if (rsp.message.isNullOrBlank()) resources.getString(R.string.OrderGenerationFailed)+"${rsp.code}" else "${rsp.code}:${rsp.message}")
} else {
let {
outTradeNo = rsp.data?.outTradeNo!!
val newUrl = rsp.data.payUrl.toString()
orderPayment(rsp.data)
Logger.e("支付url${newUrl}")
}
}
}
}
HttpReqType.unionPay -> {
(httpStatus.rsp as PayRsp).let { rsp ->
if (rsp.code != "1000") {
RxToast.error(if (rsp.message.isNullOrBlank()) resources.getString(R.string.OrderGenerationFailed)+"${rsp.code}" else "${rsp.code}:${rsp.message}")
} else {
if (rsp.data != null) {
when (rsp.data.payModel) {
1000 -> {
val orderInfo = rsp.data.appFormat
if(orderInfo!=null){
CoroutineScope(Dispatchers.IO).launch {
val alipay = PayTask(requireActivity())
val result = alipay.payV2(orderInfo, true)
android.util.Log.i("payResult", "result::$result")
launch(Dispatchers.Main) {
val resultStatus = result["resultStatus"]
val memo = result["memo"]
if (resultStatus == "9000") {
MaterialDialog(requireActivity()).show {
this.cancelable(true)
cornerRadius(res = R.dimen.dp_15)
customView(
R.layout.pay_sure_dialog_layout,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
val tvSure = findViewById<TextView>(R.id.tvSure)
tvSure.setOnClickListener {
dismiss()
}
}
} else {
RxToast.info(resources.getString(R.string.PayError)+memo)
}
}
}
}else{
RxToast.error("订单支付异常,请更换支付方式!")
}
}
0->{
startActivity(Intent(Intent.ACTION_VIEW, rsp.data.payUrl?.toUri()))
}
}
}
}
}
}
HttpReqType.StripeType ->{
(httpStatus.rsp as PayUploadParamData).let {
if(it.data!=null){
paymentIntentClientSecret= it.data.clientSecret.toString()
startCheckout()
}else{
hideLoading()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
}
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 = payUrl.toUri()
val intent = Intent(Intent.ACTION_VIEW)
intent.data = uri
startActivity(intent)
}else{
hideLoading()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
}
else->{
}
}
}
override fun httpFailure(httpStatus: HttpStatus.Failure) {
when (httpStatus.reqType) {
HttpReqType.GET_RECHARGE_INFO -> {
if (super.switchServer2()) {
val username =
MMKV.defaultMMKV()
.decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME, "")!!
val phToken =
MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN, "")!!
val userId = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_USER_ID)!!
viewModel.getPhRechargeInfo(username, phToken, userId)
}
Logger.d("获取充值续费信息异常${httpStatus.msg}")
swipeLayout.isRefreshing = false
RxToast.error(resources.getString(R.string.DataError))
}
HttpReqType.PAY -> {
Logger.d("获取支付订单号异常${httpStatus.msg}")
RxToast.error(resources.getString(R.string.DataPayNumber))
}
HttpReqType.unionPay -> {
Logger.d("OrderGenerationFailed${httpStatus.msg}")
RxToast.error(resources.getString(R.string.OrderGenerationFailed))
}
HttpReqType.StripeType -> {
hideLoading()
RxToast.error(resources.getString(R.string.NoPaymentReceipt))
}
else->{
}
}
}
private fun showLoadingDialog(content: String) {
apply {
if (!::rxDialogShapeLoading.isInitialized) {
rxDialogShapeLoading = RxDialogShapeLoading(requireContext())
}
rxDialogShapeLoading.setLoadingText(content)
rxDialogShapeLoading.setCancelable(false)
if (!rxDialogShapeLoading.isShowing) {
rxDialogShapeLoading.show()
}
}
}
private fun hideLoadingDialog() {
if (::rxDialogShapeLoading.isInitialized && rxDialogShapeLoading.isShowing) {
rxDialogShapeLoading.cancel()
}
}
private fun cleanUserInfo() {
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_PH_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_TOKEN)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_CURRENT_NODE)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_SELECTED_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_VPN_UserCommand)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.NODE_All_ITEM_NAME_KEY)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.PROFILE_SUB_URL)
MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_Switch_Finsh_Set)
isSubbed =false
Log.d("cleanUserInfo clashRunning==>$clashRunning")
if (clashRunning) {
requireContext().stopClashService()
}
mainAtyVM.stopHeartBeat()
cleanProfile()
val intent=Intent(CommonUtils.getApp(), LoginActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
requireActivity().finish()
}
@OptIn(DelicateCoroutinesApi::class)
private fun cleanProfile() {
Log.d("cleanProfile start")
GlobalScope.launch(Dispatchers.IO) {
profileBinder?.let { pm ->
pm.queryAll().forEach { profile ->
Log.d("cleanProfile go delete name==>${profile.name}, uuid==>${profile.uuid}")
pm.delete(profile.uuid)
}
} ?: let {
Log.d("profileBinder is null")
}
}
}
private fun initAdapter(recharge: RechargeInfo) {
val rechargeListAdapter = VIPRechargeAdapter()
rvRechargeList.layoutManager =GridLayoutManager(CommonUtils.getApp(), 2, GridLayoutManager.VERTICAL, false)
rechargeListAdapter.setCloudServiceList(recharge,requireActivity())
rvRechargeList.adapter=rechargeListAdapter
rechargeListAdapter.setListener(object :VIPRechargeAdapter.VIPRechargeItemClickListener{
@SuppressLint("SetTextI18n")
override fun onItemClick(noteItem: Grade?) {
selectedGrade=noteItem
val amount = selectedGrade!!.amount?.toFloat()
if (amount != null) {
if(selectedGrade!!.id!=null){
selectedGradeID = selectedGrade!!.id!!
}
val decimalFormat = DecimalFormat("#0.00")
tvPay.text =resources.getString(R.string.ActivateVIP)+"(¥${decimalFormat.format(amount)}"
}
}
})
}
private fun orderPayment(data: Trade) {
Log.i("PayGradeIDTEST:${selectedGradeID}")
val payList = mutableListOf<RechargeModelEntity>()
if (data.payType != null) {
let {
MaterialDialog(requireContext()).show {
this.cancelable(true)
cornerRadius(res = R.dimen.dp_10)
customView(
R.layout.backup_payment_dialog,
scrollable = false,
noVerticalPadding = true,
horizontalPadding = false
)
val rvPay = findViewById<RecyclerView>(R.id.rvPay)
for (index in data.payType!!) {
if (index.payModel != null && index.payChannel != null && index.payType != null) {
val rme = RechargeModelEntity(
index.payModel!!,
index.payChannel!!,
index.payParam!!,
index.payType!!,
index.payOrder!!
)
payList.add(rme)
}
}
// payList.sortBy { item -> item.payModel }
//7是快捷支付排第一
payList.sortBy { if (it.payModel == 7) 0 else 1 }
val groupBy = payList.groupBy { item -> item.payModel }
val rcmAdapter = RechargeModelAdapter()
rvPay.layoutManager = LinearLayoutManager(requireContext())
rcmAdapter.setCloudServiceList(groupBy, requireContext())
rvPay.adapter = rcmAdapter
rcmAdapter.setListener(object :
RechargeModelAdapter.RechargeModelClickListener {
override fun onItemClick(
rcEntity: RechargeModelEntity?,
) {
if (rcEntity?.payModel == 7 && rcEntity.payType == 1) {
if (selectedGradeID != 0) {
if (!PayUtils.isAlipayInstalled(requireContext())) {
RxToast.error(resources.getString(R.string.AlipayNotInstalled))
return
}
dismiss()
showLoading(
resources.getString(R.string.PaymentIn),
requireContext()
)
Log.i("PayGradeID:${selectedGradeID}")
viewModel.getPayClientSecret(selectedGradeID)
} else {
dismiss()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
} else if (rcEntity?.payModel == 7 && rcEntity.payType == 2) {
if (selectedGradeID != 0) {
viewModel.getWeChatPayClientSecret(selectedGradeID)
dismiss()
} else {
dismiss()
RxToast.info(getString(R.string.NoPaymentReceipt))
}
} else {
val payModel = rcEntity?.payModel ?: 0
val payType = rcEntity?.payType ?: 0
val payParam = rcEntity?.payParam ?: ""
viewModel.orderPayment(data, payModel, payType, payParam)
dismiss()
}
}
})
getCustomView().findViewById<AppCompatImageView>(R.id.ivBack)
.setOnClickListener {
dismiss()
}
}
}
}
}
@OptIn(DelicateCoroutinesApi::class)
private fun startCheckout() {
GlobalScope.launch {
runCatching {
stripe.confirmAlipayPayment(
ConfirmPaymentIntentParams.createAlipay(paymentIntentClientSecret),
{ data -> PayTask(requireActivity()).payV2(data, true) }
)
}.fold(
onSuccess = { result ->
hideLoading()
val paymentIntent = result.intent
when (paymentIntent.status) {
StripeIntent.Status.Succeeded -> {
Log.i("startCheckout支付成功")
ThreadUtils.runOnUiThread {
RxToast.info(getString(R.string.PaymentCompleted))
}
}
StripeIntent.Status.RequiresAction -> {
Log.i("startCheckoutRequiresAction")
ThreadUtils.runOnUiThread {
RxToast.info(getString(R.string.PaymentCancellation))
}
}
else -> {
Log.i("startCheckout status::${paymentIntent.status}")
}
}
},
onFailure = {
Log.i("startCheckout支付失败${it.message}")
hideLoading()
ThreadUtils.runOnUiThread {
RxToast.info(getString(R.string.NoPaymentReceipt))
}
}
)
}
}
}

View File

@ -4,21 +4,18 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.cncat.vpn.common.log.Log
import com.tencent.mmkv.MMKV
import com.yingmao.clash.R
import com.yingmao.clash.act.NewMainActivity.Companion.subUrl
import com.yingmao.clash.act.MainActivity.Companion.subUrl
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.DomainItemBean

View File

@ -0,0 +1,69 @@
package com.yingmao.clash.view.dialog;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.widget.AppCompatButton;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.yingmao.clash.R;
public class NoticeViewDialog extends Dialog {
public NoticeViewDialog(Context context, String content,String userName) {
super(context);
initDialog();
viewInit(context,content,userName);
}
public void initDialog() {
setContentView(R.layout.dialog_notice_layout);
setCanceledOnTouchOutside(true);
Window window = getWindow();
//设置弹窗动画
assert window != null;
window.setWindowAnimations(R.style.style_dialog);
//设置Dialog背景色
window.setBackgroundDrawableResource(R.color.colorTransparent);
WindowManager.LayoutParams wl = window.getAttributes();
//设置弹窗位置
wl.gravity = Gravity.CENTER;
window.setAttributes(wl);
}
private void viewInit(Context context,String content,String userName) {
ImageView icActivityClose=findViewById(R.id.icActivityClose);
TextView tvMySee=findViewById(R.id.tvMySee);
TextView tvContent=findViewById(R.id.tv_notice_content);
TextView tvNewTitle=findViewById(R.id.tvNewTitle);
tvNewTitle.setText(userName);
tvContent.setText(content);
icActivityClose.setOnClickListener(v -> {
if (onDialogClickListener != null) {
onDialogClickListener.onCancelClickListener();
}
});
tvMySee.setOnClickListener(v -> {
if (onDialogClickListener != null) {
onDialogClickListener.onCancelClickListener();
}
});
}
/********************** 回调 ************************/
private OnDialogClickListener onDialogClickListener;
public void setOnDialogClickListener(OnDialogClickListener onDialogClickListener){
this.onDialogClickListener = onDialogClickListener;
}
public interface OnDialogClickListener{
void onCancelClickListener();
}
}

View File

@ -7,25 +7,18 @@ import com.orhanobut.logger.Logger
import com.tencent.mmkv.MMKV
import com.yingmao.clash.BuildConfig
import com.yingmao.clash.act.ExpensesRecordActivity
import com.yingmao.clash.act.NewMainActivity
import com.yingmao.clash.base.PublicViewMode
import com.yingmao.clash.conf.BZYConstants
import com.yingmao.clash.entity.CheckLoginRsp
import com.yingmao.clash.entity.ClashNodebBean
import com.yingmao.clash.entity.Node
import com.yingmao.clash.listener.AsyncCallBackListener
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
import com.yingmao.clash.net.http.entity.HeartBeatRsp
import okhttp3.MediaType.Companion.toMediaType
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.Timer
import java.util.TimerTask

View File

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="33dp"
android:viewportWidth="25"
android:viewportHeight="33">
<path
android:pathData="M3,29.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#FDAA46"/>
<group>
<clip-path
android:pathData="M0,0h24v24h-24z"/>
<path
android:pathData="M21.502,4.551H20.67C21.092,3.835 21.277,3.152 21.218,2.518C21.169,1.988 20.917,1.23 19.997,0.625C19.233,0.123 18.251,-0 17.162,0.272C15.396,0.716 13.305,2.24 11.931,4.083C10.555,2.24 8.466,0.716 6.7,0.272C5.61,-0.002 4.627,0.122 3.864,0.625C2.944,1.23 2.693,1.988 2.643,2.518C2.584,3.152 2.768,3.835 3.192,4.551H2.359C1.098,4.551 0.072,5.578 0.072,6.84V9.788C0.072,10.786 0.73,11.669 1.683,11.965C1.592,12.216 1.545,12.475 1.545,12.737V21.582C1.545,22.844 2.572,23.871 3.834,23.871H20.031C21.292,23.871 22.317,22.844 22.317,21.582V12.737C22.317,12.473 22.272,12.213 22.181,11.964C23.132,11.666 23.789,10.784 23.789,9.788V6.841C23.789,5.579 22.764,4.551 21.502,4.551ZM20.031,22.241H12.745V12.078H20.031C20.394,12.078 20.688,12.374 20.688,12.737V21.582C20.688,21.945 20.394,22.241 20.031,22.241ZM13.642,4.551C14.801,3.214 16.322,2.164 17.557,1.854C18.198,1.694 18.723,1.738 19.103,1.988C19.507,2.253 19.579,2.49 19.595,2.669C19.659,3.324 18.956,4.207 18.625,4.551H13.642ZM22.159,6.841V9.788C22.159,10.151 21.865,10.447 21.502,10.447H12.745V6.182H21.502C21.865,6.182 22.159,6.478 22.159,6.841ZM11.116,12.078V22.241H3.833C3.469,22.241 3.175,21.945 3.175,21.582V12.737C3.175,12.374 3.469,12.078 3.833,12.078H11.116ZM4.267,2.669C4.283,2.49 4.356,2.253 4.758,1.988C5.135,1.738 5.66,1.691 6.305,1.854C7.533,2.162 9.052,3.213 10.213,4.551H5.235C4.938,4.25 4.202,3.339 4.267,2.669ZM1.701,6.841C1.701,6.478 1.995,6.182 2.359,6.182H11.116V10.447H2.359C1.995,10.447 1.701,10.151 1.701,9.788V6.841Z"
android:fillColor="#FD9E2C"/>
</group>
</vector>

View File

@ -0,0 +1,3 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="41dp"
android:height="41dp"
android:viewportWidth="41"
android:viewportHeight="41">
<path
android:pathData="M20.5,20.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:fillColor="#FEE8D2"/>
<path
android:pathData="M14.296,22.348V18.805C15.285,18.393 15.944,17.487 15.944,16.416C15.944,15.345 15.285,14.438 14.296,14.109V9.824C14.296,9.33 13.967,9 13.472,9C12.977,9 12.648,9.33 12.648,9.824V14.109C11.659,14.438 11,15.344 11,16.416C11,17.487 11.659,18.393 12.648,18.723V22.266C11.659,22.596 11,23.502 11,24.573C11,25.645 11.659,26.551 12.648,26.881V31.248C12.648,31.742 12.977,32.072 13.472,32.072C13.967,32.072 14.296,31.742 14.296,31.248V26.963C15.285,26.633 15.944,25.727 15.944,24.656C15.944,23.584 15.285,22.678 14.296,22.348ZM13.472,15.592C13.966,15.592 14.296,15.921 14.296,16.416C14.296,16.91 13.967,17.24 13.472,17.24C12.977,17.24 12.648,16.91 12.648,16.416C12.648,15.921 12.978,15.592 13.472,15.592ZM13.472,25.48C12.978,25.48 12.648,25.15 12.648,24.656C12.648,24.161 12.977,23.831 13.472,23.831C13.967,23.831 14.296,24.161 14.296,24.656C14.296,25.15 13.967,25.48 13.472,25.48ZM27.43,25.714H19.484C18.987,25.714 18.49,26.044 18.49,26.538C18.49,27.033 18.888,27.362 19.484,27.362H27.43C27.926,27.362 28.423,27.033 28.423,26.538C28.423,26.044 28.026,25.714 27.43,25.714ZM29.417,14.178H19.484C18.987,14.178 18.49,14.508 18.49,15.002C18.49,15.497 18.888,15.826 19.484,15.826H29.417C29.913,15.826 30.41,15.497 30.41,15.002C30.41,14.508 30.012,14.178 29.417,14.178ZM27.43,19.122C27.926,19.122 28.423,18.793 28.423,18.298C28.423,17.804 28.026,17.474 27.43,17.474H19.484C18.987,17.474 18.49,17.804 18.49,18.298C18.49,18.793 18.888,19.122 19.484,19.122H27.43ZM29.417,22.418H19.484C18.987,22.418 18.49,22.747 18.49,23.242C18.49,23.737 18.888,24.066 19.484,24.066H29.417C29.913,24.066 30.41,23.737 30.41,23.242C30.41,22.747 30.012,22.418 29.417,22.418Z"
android:fillColor="#F89F25"/>
<path
android:pathData="M13.638,16.271m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#F89F25"/>
<path
android:pathData="M13.638,24.271m-1.5,0a1.5,1.5 0,1 1,3 0a1.5,1.5 0,1 1,-3 0"
android:fillColor="#F89F25"/>
</vector>

View File

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="41dp"
android:height="41dp"
android:viewportWidth="41"
android:viewportHeight="41">
<path
android:pathData="M20.5,20.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:fillColor="#FEE8D2"/>
<group>
<clip-path
android:pathData="M10,9h22v24h-22z"/>
<path
android:pathData="M20.991,26.598C20.483,26.601 19.987,26.767 19.565,27.077C19.143,27.386 18.815,27.825 18.622,28.338C18.429,28.851 18.38,29.415 18.48,29.958C18.58,30.502 18.826,31.001 19.186,31.392C19.546,31.783 20.005,32.049 20.503,32.157C21.002,32.264 21.518,32.208 21.988,31.995C22.457,31.782 22.858,31.423 23.14,30.962C23.423,30.501 23.573,29.959 23.573,29.404C23.573,29.035 23.506,28.669 23.376,28.328C23.246,27.987 23.056,27.677 22.816,27.417C22.576,27.156 22.292,26.949 21.978,26.809C21.665,26.669 21.33,26.597 20.991,26.598ZM29.41,26.598C28.901,26.599 28.404,26.764 27.982,27.073C27.559,27.382 27.23,27.82 27.036,28.333C26.842,28.846 26.792,29.41 26.891,29.954C26.991,30.498 27.236,30.997 27.596,31.389C27.956,31.781 28.414,32.048 28.913,32.156C29.412,32.264 29.928,32.208 30.398,31.996C30.868,31.783 31.27,31.424 31.552,30.962C31.834,30.501 31.985,29.959 31.985,29.404C31.985,29.035 31.918,28.67 31.788,28.329C31.659,27.988 31.469,27.678 31.229,27.418C30.989,27.157 30.705,26.951 30.392,26.81C30.079,26.669 29.744,26.598 29.406,26.598H29.41ZM12.585,26.598C12.077,26.601 11.581,26.767 11.159,27.077C10.737,27.386 10.409,27.825 10.216,28.338C10.023,28.851 9.974,29.415 10.074,29.958C10.175,30.502 10.42,31.001 10.78,31.392C11.14,31.783 11.599,32.049 12.097,32.157C12.596,32.264 13.113,32.208 13.582,31.995C14.051,31.782 14.452,31.423 14.734,30.962C15.017,30.501 15.167,29.959 15.167,29.404C15.167,29.035 15.1,28.669 14.97,28.327C14.84,27.986 14.649,27.676 14.409,27.415C14.169,27.155 13.884,26.948 13.57,26.808C13.257,26.668 12.921,26.597 12.582,26.598H12.585ZM28.76,18.86H21.637V16.781C22.423,16.606 23.121,16.119 23.597,15.413C24.072,14.708 24.291,13.836 24.21,12.965C24.129,12.094 23.755,11.287 23.16,10.7C22.564,10.113 21.791,9.788 20.988,9.788C20.186,9.788 19.412,10.113 18.817,10.7C18.222,11.287 17.847,12.094 17.767,12.965C17.686,13.836 17.904,14.708 18.38,15.413C18.855,16.119 19.553,16.606 20.34,16.781V18.86H13.23C13.06,18.859 12.891,18.895 12.733,18.965C12.576,19.035 12.433,19.139 12.312,19.27C12.191,19.401 12.096,19.557 12.031,19.729C11.966,19.9 11.932,20.084 11.933,20.27V24.485C11.933,24.672 12.001,24.852 12.123,24.985C12.244,25.118 12.409,25.192 12.581,25.192C12.753,25.192 12.918,25.118 13.04,24.985C13.162,24.852 13.23,24.672 13.23,24.485V20.974C13.23,20.882 13.247,20.79 13.279,20.704C13.312,20.618 13.359,20.54 13.42,20.475C13.48,20.409 13.552,20.357 13.63,20.322C13.709,20.287 13.794,20.269 13.879,20.27H28.109C28.194,20.269 28.279,20.287 28.358,20.322C28.436,20.357 28.508,20.409 28.568,20.475C28.629,20.54 28.676,20.618 28.709,20.704C28.742,20.79 28.758,20.882 28.758,20.974V24.485C28.758,24.672 28.826,24.852 28.948,24.985C29.07,25.118 29.235,25.192 29.407,25.192C29.579,25.192 29.744,25.118 29.865,24.985C29.987,24.852 30.055,24.672 30.055,24.485V20.269C30.054,19.895 29.917,19.537 29.674,19.273C29.431,19.009 29.103,18.861 28.76,18.86Z"
android:fillColor="#F89F25"/>
</group>
</vector>

View File

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="41dp"
android:height="41dp"
android:viewportWidth="41"
android:viewportHeight="41">
<path
android:pathData="M20.5,20.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:fillColor="#FEE8D2"/>
<path
android:pathData="M15.115,18.813H23.966C24.165,18.813 24.356,18.734 24.497,18.593C24.637,18.452 24.716,18.262 24.716,18.063C24.716,17.864 24.637,17.673 24.497,17.532C24.356,17.392 24.165,17.313 23.966,17.313H15.115C13.783,17.313 12.75,16.442 12.75,15.438C12.75,14.433 13.783,13.562 15.115,13.562H18.673C18.971,14.571 19.894,15.313 21,15.313C22.106,15.313 23.029,14.571 23.327,13.562H27.849C28.048,13.562 28.238,13.483 28.379,13.343C28.52,13.202 28.598,13.011 28.598,12.812C28.598,12.613 28.52,12.423 28.379,12.282C28.238,12.142 28.048,12.063 27.849,12.063H23.289C22.952,11.118 22.059,10.438 21,10.438C19.941,10.438 19.048,11.118 18.712,12.063H15.115C13.007,12.063 11.25,13.542 11.25,15.438C11.25,17.333 13.007,18.813 15.115,18.813Z"
android:fillColor="#F89F25"/>
<path
android:pathData="M30.748,18.542C30.744,18.061 30.598,17.592 30.328,17.193C30.057,16.795 29.675,16.486 29.229,16.305C28.784,16.123 28.294,16.078 27.822,16.174C27.351,16.271 26.919,16.505 26.58,16.847C26.241,17.188 26.011,17.623 25.919,18.095C25.826,18.568 25.876,19.057 26.061,19.501C26.247,19.945 26.559,20.325 26.96,20.591C27.361,20.858 27.831,21 28.313,21C29.091,21 29.776,20.629 30.222,20.061C30.49,20.367 30.649,20.735 30.649,21.125C30.649,22.129 29.616,23 28.284,23H15.77C15.555,22.639 15.251,22.34 14.886,22.131C14.521,21.923 14.108,21.813 13.688,21.813C13.076,21.814 12.488,22.045 12.039,22.461C11.591,22.877 11.316,23.446 11.269,24.056C10.282,24.662 9.625,25.657 9.625,26.813C9.625,28.708 11.382,30.188 13.49,30.188H19.628C19.826,30.599 20.136,30.946 20.523,31.189C20.909,31.432 21.356,31.561 21.813,31.563C22.459,31.563 23.079,31.306 23.536,30.849C23.993,30.392 24.25,29.771 24.25,29.125C24.25,28.479 23.993,27.858 23.536,27.401C23.079,26.944 22.459,26.688 21.813,26.688C21.243,26.688 20.691,26.888 20.253,27.254C19.816,27.619 19.521,28.126 19.419,28.687H13.49C12.158,28.687 11.125,27.816 11.125,26.812C11.125,26.367 11.336,25.954 11.677,25.626C11.901,25.953 12.2,26.221 12.551,26.406C12.901,26.591 13.291,26.688 13.688,26.688C14.289,26.686 14.869,26.462 15.314,26.058C15.76,25.654 16.04,25.099 16.1,24.5H28.283C30.392,24.5 32.148,23.021 32.148,21.125C32.149,20.07 31.594,19.156 30.748,18.542Z"
android:fillColor="#F89F25"/>
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="360"
android:endColor="#FFEFDBA8"
android:startColor="#FFFFF8E2" />
<corners android:radius="10dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="360"
android:endColor="#FF2C334D"
android:startColor="#FF2C334D" />
</shape>
</item>
</ripple>

View File

@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="33dp"
android:viewportWidth="26"
android:viewportHeight="33">
<path
android:pathData="M4,29.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#339AF7"/>
<group>
<clip-path
android:pathData="M0,0h26v24h-26z"/>
<path
android:pathData="M23.01,10.768L19.472,3.848C19.245,3.404 18.901,3.032 18.476,2.772C18.051,2.512 17.562,2.375 17.064,2.375H9.01C8.002,2.375 7.078,2.935 6.613,3.828L3.001,10.748C2.799,11.135 2.694,11.564 2.694,12C2.694,12.436 2.799,12.865 3.001,13.252L6.613,20.172C6.842,20.61 7.186,20.977 7.609,21.233C8.031,21.49 8.516,21.625 9.01,21.625H17.064C18.081,21.625 19.01,21.057 19.472,20.152L23.01,13.231C23.205,12.85 23.306,12.428 23.306,12C23.306,11.572 23.205,11.15 23.01,10.769V10.768ZM21.03,20.949C20.657,21.679 20.089,22.292 19.389,22.721C18.689,23.149 17.885,23.375 17.064,23.375H9.01C8.196,23.375 7.398,23.152 6.701,22.73C6.005,22.308 5.438,21.703 5.062,20.981L1.45,14.061C1.118,13.425 0.944,12.718 0.944,12C0.944,11.282 1.118,10.575 1.45,9.939L5.062,3.018C5.439,2.296 6.006,1.692 6.702,1.27C7.398,0.848 8.196,0.625 9.01,0.625H17.064C18.737,0.625 20.269,1.563 21.03,3.051L24.568,9.973C25.219,11.247 25.219,12.755 24.568,14.027L21.03,20.949Z"
android:fillColor="#339AF7"/>
<path
android:pathData="M13,17.075C12.334,17.075 11.674,16.944 11.058,16.688C10.442,16.434 9.883,16.06 9.411,15.588C8.94,15.117 8.566,14.558 8.311,13.942C8.056,13.326 7.925,12.666 7.925,12C7.925,11.333 8.056,10.673 8.311,10.058C8.566,9.442 8.94,8.882 9.411,8.411C9.883,7.94 10.442,7.566 11.058,7.311C11.674,7.056 12.334,6.925 13,6.925C14.346,6.925 15.637,7.459 16.589,8.411C17.54,9.363 18.075,10.654 18.075,12C18.075,13.346 17.54,14.637 16.589,15.588C15.637,16.54 14.346,17.075 13,17.075ZM13,15.325C13.437,15.325 13.869,15.239 14.273,15.072C14.676,14.905 15.042,14.66 15.351,14.351C15.66,14.042 15.905,13.676 16.072,13.272C16.239,12.869 16.325,12.436 16.325,12C16.325,11.563 16.239,11.131 16.072,10.727C15.905,10.324 15.66,9.957 15.351,9.649C15.042,9.34 14.676,9.095 14.273,8.928C13.869,8.761 13.437,8.675 13,8.675C12.118,8.675 11.273,9.025 10.649,9.649C10.025,10.272 9.675,11.118 9.675,12C9.675,12.882 10.025,13.727 10.649,14.351C11.273,14.974 12.118,15.325 13,15.325Z"
android:fillColor="#339AF7"/>
</group>
</vector>

View File

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="42dp"
android:height="42dp"
android:viewportWidth="42"
android:viewportHeight="42">
<path
android:pathData="M21,20m-17,0a17,17 0,1 1,34 0a17,17 0,1 1,-34 0"
android:fillColor="#ffffff"/>
<path
android:pathData="M28.885,11.896C26.698,9.709 23.625,8.459 20.552,8.563C17.375,8.511 14.302,9.709 12.115,11.896C10.083,13.979 8.99,16.688 9.042,19.5C9.042,21.427 9.563,23.302 10.448,24.917L9.719,27.052C9.458,27.833 9.615,28.667 10.188,29.292C10.656,29.813 11.229,30.073 11.906,30.073C12.063,30.073 12.167,30.073 12.323,30.021L15.552,29.448C17.063,30.125 18.729,30.438 20.448,30.438H20.708C23.781,30.438 26.698,29.24 28.833,27.104C30.917,25.021 32.01,22.313 31.906,19.5C32.01,16.636 30.917,13.979 28.885,11.896ZM20.5,25.229C17.271,25.229 14.667,22.677 14.667,19.5C14.667,18.927 15.135,18.458 15.708,18.458C16.281,18.458 16.75,18.927 16.75,19.5C16.75,21.531 18.417,23.146 20.5,23.146C22.583,23.146 24.25,21.531 24.25,19.5C24.25,18.927 24.719,18.458 25.292,18.458C25.865,18.458 26.333,18.927 26.333,19.5C26.333,22.677 23.729,25.229 20.5,25.229Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="20.477"
android:startY="8.557"
android:endX="20.477"
android:endY="30.438"
android:type="linear">
<item android:offset="0" android:color="#FF5788FF"/>
<item android:offset="1" android:color="#FF00C9F0"/>
</gradient>
</aapt:attr>
</path>
</vector>

View File

@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="33dp"
android:viewportWidth="26"
android:viewportHeight="33">
<path
android:pathData="M4,29.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#339AF7"/>
<group>
<clip-path
android:pathData="M0,0h26v24h-26z"/>
<path
android:pathData="M23.01,10.768L19.472,3.848C19.245,3.404 18.901,3.032 18.476,2.772C18.051,2.512 17.562,2.375 17.064,2.375H9.01C8.002,2.375 7.078,2.935 6.613,3.828L3.001,10.748C2.799,11.135 2.694,11.564 2.694,12C2.694,12.436 2.799,12.865 3.001,13.252L6.613,20.172C6.842,20.61 7.186,20.977 7.609,21.233C8.031,21.49 8.516,21.625 9.01,21.625H17.064C18.081,21.625 19.01,21.057 19.472,20.152L23.01,13.231C23.205,12.85 23.306,12.428 23.306,12C23.306,11.572 23.205,11.15 23.01,10.769V10.768ZM21.03,20.949C20.657,21.679 20.089,22.292 19.389,22.721C18.689,23.149 17.885,23.375 17.064,23.375H9.01C8.196,23.375 7.398,23.152 6.701,22.73C6.005,22.308 5.438,21.703 5.062,20.981L1.45,14.061C1.118,13.425 0.944,12.718 0.944,12C0.944,11.282 1.118,10.575 1.45,9.939L5.062,3.018C5.439,2.296 6.006,1.692 6.702,1.27C7.398,0.848 8.196,0.625 9.01,0.625H17.064C18.737,0.625 20.269,1.563 21.03,3.051L24.568,9.973C25.219,11.247 25.219,12.755 24.568,14.027L21.03,20.949Z"
android:fillColor="#339AF7"/>
<path
android:pathData="M13,17.075C12.334,17.075 11.674,16.944 11.058,16.688C10.442,16.434 9.883,16.06 9.411,15.588C8.94,15.117 8.566,14.558 8.311,13.942C8.056,13.326 7.925,12.666 7.925,12C7.925,11.333 8.056,10.673 8.311,10.058C8.566,9.442 8.94,8.882 9.411,8.411C9.883,7.94 10.442,7.566 11.058,7.311C11.674,7.056 12.334,6.925 13,6.925C14.346,6.925 15.637,7.459 16.589,8.411C17.54,9.363 18.075,10.654 18.075,12C18.075,13.346 17.54,14.637 16.589,15.588C15.637,16.54 14.346,17.075 13,17.075ZM13,15.325C13.437,15.325 13.869,15.239 14.273,15.072C14.676,14.905 15.042,14.66 15.351,14.351C15.66,14.042 15.905,13.676 16.072,13.272C16.239,12.869 16.325,12.436 16.325,12C16.325,11.563 16.239,11.131 16.072,10.727C15.905,10.324 15.66,9.957 15.351,9.649C15.042,9.34 14.676,9.095 14.273,8.928C13.869,8.761 13.437,8.675 13,8.675C12.118,8.675 11.273,9.025 10.649,9.649C10.025,10.272 9.675,11.118 9.675,12C9.675,12.882 10.025,13.727 10.649,14.351C11.273,14.974 12.118,15.325 13,15.325Z"
android:fillColor="#339AF7"/>
</group>
</vector>

View File

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
android:width="20dp"
android:height="20dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M395.2,513.6l323.1,-312.4c19.1,-18.4 19.1,-48.3 0,-66.7 -19.1,-18.4 -49.9,-18.4 -69,0L291.8,480.3c-19.1,18.4 -19.1,48.3 0,66.7l357.6,345.7c9.5,9.2 22,13.8 34.5,13.8 12.5,0 25,-4.6 34.5,-13.8 19.1,-18.4 19.1,-48.2 0,-66.7L395.2,513.6z"
android:fillColor="@color/orange_B36C1B"/>
android:fillColor="#FF333333"/>
</vector>

View File

@ -1,6 +1,6 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:width="15dp"
android:height="15dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path

View File

@ -1,9 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:width="10dp"
android:height="10dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
<path
android:pathData="M731.7,480l-384,-341.3c-17.1,-14.9 -44.8,-14.9 -59.7,4.3 -14.9,17.1 -14.9,44.8 4.3,59.7L640,512 292.3,821.3c-17.1,14.9 -19.2,42.7 -4.3,59.7 8.5,8.5 19.2,14.9 32,14.9 10.7,0 19.2,-4.3 27.7,-10.7l384,-341.3c8.5,-8.5 14.9,-19.2 14.9,-32s-4.3,-23.5 -14.9,-32z"
android:fillColor="#ffffff"/>
android:fillColor="#FF333333"/>
</vector>

View File

@ -5,11 +5,11 @@
android:viewportHeight="1024">
<path
android:pathData="M720,192L176,192a80.1,80.1 0,0 0,-80 80v608c0,44.1 35.9,80 80,80h544c44.1,0 80,-35.9 80,-80L800,272c0,-44.1 -35.9,-80 -80,-80zM736,880c0,8.8 -7.2,16 -16,16L176,896a16,16 0,0 1,-16 -16L160,272a16,16 0,0 1,16 -16h544a16,16 0,0 1,16 16v608z"
android:fillColor="#5A2B31"/>
android:fillColor="#FF333333"/>
<path
android:pathData="M848,64H304a32,32 0,0 0,0 64h544a16,16 0,0 1,16 16v608a32,32 0,1 0,64 0V144c0,-44.1 -35.9,-80 -80,-80z"
android:fillColor="#5A2B31"/>
android:fillColor="#FF333333"/>
<path
android:pathData="M608,360L288,360a32,32 0,0 0,0 64h320a32,32 0,1 0,0 -64zM608,520L288,520a32,32 0,1 0,0 64h320a32,32 0,1 0,0 -64zM480,678.7L288,678.7a32,32 0,1 0,0 64h192a32,32 0,1 0,0 -64z"
android:fillColor="#5A2B31"/>
android:fillColor="#FF333333"/>
</vector>

View File

@ -1,9 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="1024"
android:viewportHeight="1024">
android:width="25dp"
android:height="33dp"
android:viewportWidth="25"
android:viewportHeight="33">
<path
android:pathData="M597.3,896v85.3h-170.7v-85.3h170.7zM896,725.3v85.3L133.6,810.7l44.2,-66.3a211.4,211.4 0,0 0,35.3 -109.4l0.1,-7.8L213.3,426.7c0,-150.5 111.3,-274.9 256,-295.6L469.3,64h85.3v67c142.5,20.4 252.5,141.3 255.9,288.6L810.7,426.7v213.3h-85.3L725.3,426.7c0,-113.8 -89.2,-206.8 -201.4,-213l-5.9,-0.2L512,213.3c-115.8,0 -210.1,92.3 -213.2,207.4L298.7,426.7v200.4c0,28.7 -4.1,57 -12.2,84.1l-3.2,10.1 -1.4,4L896,725.3z"
android:fillColor="#69A6FE"/>
android:pathData="M3,29.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#F24823"/>
<path
android:pathData="M20.77,20.097H3.891C2.849,20.096 2.001,19.248 2,18.207C1.999,17.702 2.196,17.226 2.553,16.868C2.651,16.77 2.759,16.682 2.876,16.607L2.872,16.601C2.879,16.596 2.886,16.591 2.893,16.587C3.392,16.259 3.69,15.709 3.689,15.111V10.098C3.699,9.115 3.877,8.152 4.218,7.235C4.55,6.343 5.027,5.517 5.636,4.782C6.244,4.047 6.966,3.425 7.781,2.932C8.447,2.529 9.166,2.22 9.918,2.014C10.127,0.873 11.129,0.003 12.328,0H12.333C12.987,0 13.602,0.254 14.066,0.715C14.426,1.074 14.662,1.525 14.75,2.016C15.501,2.222 16.218,2.53 16.885,2.934C17.7,3.426 18.422,4.049 19.03,4.784C19.639,5.519 20.116,6.344 20.448,7.237C20.788,8.153 20.967,9.116 20.977,10.099V15.11C20.976,15.711 21.274,16.262 21.776,16.588C21.781,16.591 21.786,16.595 21.791,16.598L21.784,16.609C22.31,16.945 22.66,17.534 22.661,18.202C22.662,19.246 21.814,20.096 20.77,20.097ZM3.895,17.759L3.892,17.847C3.763,17.847 3.679,17.913 3.64,17.952C3.601,17.991 3.535,18.076 3.535,18.205C3.535,18.401 3.696,18.562 3.892,18.562H20.769C20.965,18.562 21.125,18.401 21.125,18.204C21.125,18.007 20.964,17.847 20.768,17.847V17.757C19.931,17.136 19.439,16.162 19.441,15.108V10.111C19.404,6.855 17.061,4.027 13.869,3.384L13.253,3.26V2.452C13.252,2.208 13.156,1.977 12.982,1.803C12.808,1.63 12.578,1.535 12.333,1.535H12.331C11.826,1.536 11.414,1.948 11.413,2.453V3.259L10.796,3.383C7.603,4.024 5.261,6.853 5.224,10.109V15.11C5.225,16.163 4.732,17.138 3.895,17.759Z"
android:fillColor="#F24823"/>
<path
android:pathData="M15.565,21.762C15.502,23.451 14.114,24.802 12.409,24.802C10.705,24.802 9.317,23.451 9.254,21.762H15.565Z"
android:fillColor="#F24823"/>
</vector>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5">
<!--如果是白色背景就需要这个-->
<item android:id="@android:id/mask"
android:drawable="@color/white">
</item>
<item >
<shape android:shape="rectangle">
<solid android:color="@color/translate"/>
<corners android:radius="@dimen/dp_15"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,49 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="222dp"
android:height="18dp"
android:viewportWidth="222"
android:viewportHeight="18">
<path
android:pathData="M50.39,4.03H60.63V5.22H58.56V8.35H61.3V9.54H58.56V15.17H57.32V9.54H53.84C53.71,10.84 53.46,11.92 53.07,12.79C52.58,13.88 51.74,14.73 50.59,15.31L49.92,14.27C50.96,13.66 51.68,12.88 52.06,11.95C52.3,11.27 52.47,10.46 52.58,9.54H49.72V8.35H52.67C52.67,8.24 52.68,8.14 52.68,8.06V5.22H50.39V4.03ZM53.93,5.22V8.06C53.93,8.16 53.91,8.25 53.91,8.35H57.32V5.22H53.93ZM64.67,3.47C65.55,4.16 66.29,4.85 66.89,5.52L66.02,6.38C65.5,5.73 64.77,5.03 63.82,4.28L64.67,3.47ZM72.14,15.12C71.43,15.12 70.64,15.1 69.81,15.09C68.97,15.08 68.28,15 67.73,14.87C67.21,14.72 66.76,14.4 66.37,13.96C66.19,13.74 66.03,13.64 65.87,13.64C65.6,13.64 65.13,14.22 64.47,15.39L63.56,14.55C64.21,13.49 64.79,12.83 65.32,12.57V8.89H63.57V7.75H66.47V12.66C66.54,12.71 66.6,12.78 66.67,12.86C66.97,13.21 67.28,13.47 67.6,13.64C67.99,13.82 68.57,13.94 69.33,13.96C70.07,13.97 70.94,13.99 71.96,13.99C72.6,13.99 73.25,13.97 73.89,13.96C74.54,13.95 75.05,13.92 75.4,13.9L75.1,15.12H72.14ZM69.89,4.76H67.38V3.73H74.52V4.6C73.76,5.25 72.96,5.8 72.1,6.26C72.13,6.29 72.15,6.3 72.18,6.33H74.79V12.1C74.79,12.87 74.36,13.26 73.52,13.26H72.52L72.26,12.23L73.18,12.28C73.47,12.28 73.62,12.14 73.62,11.85V11.19H71.75V13.32H70.62V11.19H68.79V13.35H67.62V6.33H70.61C70.18,6.04 69.7,5.74 69.16,5.46L69.89,4.76ZM71.35,5.68C71.89,5.41 72.4,5.09 72.87,4.76H69.96C70.45,5.07 70.92,5.37 71.35,5.68ZM68.79,9.28V10.19H70.62V9.28H68.79ZM71.75,9.28V10.19H73.62V9.28H71.75ZM73.62,8.27V7.36H71.75V8.27H73.62ZM70.62,8.27V7.36H68.79V8.27H70.62ZM77.86,5.33H82.68C82.49,4.7 82.28,4.13 82.06,3.6L83.49,3.37C83.67,3.94 83.87,4.6 84.05,5.33H88.82V6.53H77.86V5.33ZM77.42,13.45H83.8C84.56,11.76 85.23,9.65 85.8,7.12L87.12,7.46C86.6,9.71 85.97,11.71 85.23,13.45H89.26V14.65H77.42V13.45ZM80.88,7.12C81.45,8.79 81.94,10.71 82.38,12.88L81.06,13.22C80.67,11.26 80.17,9.37 79.58,7.55L80.88,7.12ZM93.08,7.42V8.93H95.81V7.42H93.08ZM95.81,6.32V4.89H93.08V6.32H95.81ZM91.77,14.98L91.34,13.79C91.69,13.66 91.87,13.45 91.87,13.15V3.78H96.96V10.07H93.08V13.39C94.07,13.1 94.96,12.8 95.74,12.49C95.51,12.13 95.29,11.78 95.07,11.41L96.01,10.81C96.81,12.05 97.43,13.13 97.85,14.04L96.89,14.72C96.71,14.32 96.51,13.94 96.31,13.52C94.98,14.08 93.46,14.56 91.77,14.98ZM101.39,13.56H100.35L100.03,12.36L100.99,12.4C101.35,12.4 101.53,12.22 101.53,11.88V4.95H99.54V15.3H98.31V3.8H102.77V12.15C102.77,13.09 102.3,13.56 101.39,13.56ZM107.12,6.04H115.17V8.86H107.12V6.04ZM113.97,7.81V7.08H108.32V7.81H113.97ZM111.17,3.31C111.35,3.61 111.52,3.95 111.69,4.32H116.82V5.47H105.46V4.32H110.28C110.11,4.03 109.93,3.77 109.74,3.54L111.17,3.31ZM105.17,11.91H110.76V11.53L113.22,10.54H106.43V9.45H115.69V10.32C114.62,10.79 113.38,11.3 111.97,11.84V11.91H117.11V13.02H111.97V13.99C111.97,14.88 111.53,15.34 110.66,15.34H108.85L108.53,14.22C109.22,14.27 109.76,14.31 110.17,14.31C110.56,14.31 110.76,14.08 110.76,13.64V13.02H105.17V11.91ZM120.11,4.24H130.02V5.45H120.11V4.24ZM120.98,8.7H129.13V9.9H120.98V8.7ZM119.16,13.49H130.94V14.73H119.16V13.49ZM133.21,6.66H138.19C138.27,5.97 138.32,5.24 138.34,4.48V3.35H139.58V4.2C139.58,5.06 139.53,5.88 139.43,6.66H144.71V7.85H139.74C140.65,10.63 142.4,12.78 144.98,14.3L144.21,15.3C141.72,13.77 139.96,11.62 138.97,8.86C138.12,11.84 136.36,14.03 133.72,15.42L132.93,14.38C135.61,13.08 137.3,10.89 137.99,7.85H133.21V6.66ZM150.24,8.88V15.29H149.02V9.02C148.58,10.26 148.03,11.39 147.36,12.4L146.81,11C147.8,9.81 148.51,8.48 148.97,6.97H147.09V5.78H149.02V3.35H150.24V5.78H151.86V6.97H150.24V7.57C150.88,8.15 151.52,8.81 152.15,9.54L151.44,10.62C150.99,9.92 150.58,9.33 150.24,8.88ZM156.86,5.21H153.75C153.91,7.01 154.39,8.64 155.21,10.11C156.03,8.68 156.57,7.05 156.86,5.21ZM154.49,11.23C153.42,9.42 152.78,7.42 152.57,5.21H152.09V4.03H158.04V5.2C157.68,7.55 156.99,9.58 155.95,11.3C156.76,12.41 157.76,13.43 158.98,14.34L158.13,15.34C156.99,14.42 156.02,13.41 155.24,12.35C154.35,13.51 153.27,14.49 152.02,15.31L151.23,14.31C152.54,13.44 153.64,12.41 154.49,11.23ZM171.02,9.66C170.06,8.96 169.07,8.37 168.08,7.92L168.72,6.95C170.17,7.62 171.5,8.41 172.7,9.35L171.99,10.43C171.67,10.16 171.36,9.92 171.07,9.7V13.78H172.58V14.96H160.99V13.78H162.59V9.85C162.2,10.06 161.8,10.24 161.41,10.41L160.88,9.27C162.48,8.67 163.79,7.89 164.8,6.91L165.58,7.8C164.83,8.5 163.96,9.13 162.98,9.66H171.02ZM163.78,13.78H165.02V10.83H163.78V13.78ZM166.17,13.78H167.47V10.83H166.17V13.78ZM168.61,13.78H169.87V10.83H168.61V13.78ZM161.27,5.52H164.31C163.93,5.02 163.46,4.48 162.91,3.91L163.92,3.28C164.61,3.98 165.14,4.59 165.51,5.11L164.91,5.52H168.07C168.55,4.82 168.96,4.08 169.33,3.3L170.52,3.72C170.19,4.39 169.82,5 169.42,5.52H172.3V6.72H161.27V5.52Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="112"
android:startY="0"
android:endX="112"
android:endY="18"
android:type="linear">
<item android:offset="0" android:color="#FFFF8000"/>
<item android:offset="1" android:color="#FF5E2A12"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M0,9h46v1h-46z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="0"
android:startY="9.5"
android:endX="46"
android:endY="9.5"
android:type="linear">
<item android:offset="0" android:color="#FFFEE8D2"/>
<item android:offset="1" android:color="#FFFA6E15"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M176,9h46v1h-46z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="176"
android:startY="9.5"
android:endX="222"
android:endY="9.5"
android:type="linear">
<item android:offset="0" android:color="#FFFA6E15"/>
<item android:offset="1" android:color="#FFFEE8D2"/>
</gradient>
</aapt:attr>
</path>
</vector>

View File

@ -3,16 +3,16 @@
<item>
<shape>
<!-- 边框颜色 -->
<solid android:color="#B36C1B"/>
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="3dp"/>
<solid android:color="#FFDFEFFE"/>
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="24dp" android:bottomRightRadius="24dp"/>
</shape>
</item>
<!-- 给View的上 左 右设置8dp的边框 -->
<item android:top="1dp" android:left="1dp" android:right="3dp" android:bottom="3dp" >
<shape>
<!-- View填充颜色 -->
<solid android:color="#FFE7CC" />
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="3dp"/>
<solid android:color="#FFFFFFFF" />
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="24dp" android:bottomRightRadius="24dp"/>
</shape>
</item>

View File

@ -3,16 +3,16 @@
<item>
<shape>
<!-- 边框颜色 -->
<solid android:color="#B36C1B"/>
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="3dp"/>
<solid android:color="#FF9FCFFF"/>
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="24dp" android:bottomRightRadius="24dp"/>
</shape>
</item>
<!-- 给View的上 左 右设置8dp的边框 -->
<item android:top="1dp" android:left="1dp" android:right="4dp" android:bottom="4dp" >
<shape>
<!-- View填充颜色 -->
<solid android:color="#FF8A04" />
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="0dp" android:bottomRightRadius="3dp"/>
<solid android:color="#FF9FCFFF" />
<corners android:topRightRadius="24dp" android:topLeftRadius="24dp" android:bottomLeftRadius="24dp" android:bottomRightRadius="24dp"/>
</shape>
</item>

View File

@ -1,10 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<solid android:color="@color/white"/>
<corners android:topRightRadius="16dp" android:topLeftRadius="16dp" android:bottomRightRadius="4dp" android:bottomLeftRadius="4dp"/>
</shape>
</item>
android:color="#BFD5D5D5">
<item>
<shape>
<gradient android:startColor="#FFFFE8B0" android:endColor="#FFFFCA60" android:angle="0"/>
<corners
android:bottomLeftRadius="4dp"
android:bottomRightRadius="4dp"
android:topLeftRadius="16dp"
android:topRightRadius="16dp" />
</shape>
</item>
</ripple>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<solid android:color="#FFFFF6D7"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="6dp"
android:height="7dp"
android:viewportWidth="6"
android:viewportHeight="7">
<path
android:pathData="M5.1423,2.7563C5.7722,3.1418 5.7813,4.0537 5.1592,4.4517L1.7208,6.6512C1.059,7.0746 0.1898,6.6044 0.182,5.8187L0.1389,1.4885C0.1311,0.7029 0.9907,0.2155 1.6609,0.6257L5.1423,2.7563Z"
android:fillColor="#643E00"/>
</vector>

View File

@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="33dp"
android:viewportWidth="25"
android:viewportHeight="33">
<path
android:pathData="M3,29.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#9681F8"/>
<group>
<clip-path
android:pathData="M0,0h24v24h-24z"/>
<path
android:pathData="M20.105,0.421C21.026,0.421 21.91,0.787 22.562,1.438C23.213,2.09 23.579,2.974 23.579,3.895V20.105C23.579,21.026 23.213,21.91 22.562,22.561C21.91,23.213 21.026,23.579 20.105,23.579H3.895C3.439,23.579 2.987,23.489 2.565,23.315C2.144,23.14 1.761,22.884 1.438,22.562C1.115,22.239 0.859,21.856 0.685,21.435C0.51,21.013 0.42,20.561 0.42,20.105V3.895C0.42,3.439 0.51,2.987 0.684,2.565C0.859,2.143 1.115,1.76 1.438,1.437C1.76,1.115 2.143,0.859 2.565,0.684C2.987,0.51 3.439,0.42 3.895,0.42H20.105V0.421ZM3.895,2.158C3.745,2.158 3.596,2.177 3.452,2.215L2.219,3.438C2.184,3.566 2.164,3.698 2.159,3.83L2.158,3.895V20.105C2.158,20.255 2.177,20.399 2.212,20.537L3.427,21.778C3.557,21.814 3.691,21.836 3.83,21.841L3.895,21.842H20.105C20.263,21.842 20.415,21.822 20.56,21.782L21.785,20.55C21.817,20.428 21.836,20.301 21.841,20.17L21.842,20.105V3.895C21.842,3.732 21.82,3.575 21.778,3.425L20.535,2.21C20.416,2.18 20.293,2.162 20.17,2.158L20.105,2.157H3.895V2.158Z"
android:fillColor="#9681F8"/>
<path
android:pathData="M11.393,5.958C14.671,5.601 17.613,8.008 17.966,11.332C18.129,12.862 17.71,14.396 16.792,15.631L15.58,14.4C16.887,12.406 16.353,9.714 14.387,8.388C13.51,7.795 12.442,7.552 11.395,7.708V10.154L8.36,7.077L11.393,4V5.958ZM8.967,15.077C9.435,15.552 10.009,15.91 10.641,16.122C11.274,16.333 11.947,16.392 12.607,16.293V13.846L15.64,16.923L12.607,20V18.043C9.328,18.4 6.386,15.993 6.034,12.667C5.871,11.138 6.29,9.603 7.208,8.369L8.42,9.6C7.874,10.439 7.631,11.439 7.731,12.434C7.83,13.43 8.266,14.362 8.966,15.077H8.967Z"
android:fillColor="#9681F8"/>
</group>
</vector>

View File

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="46dp"
android:height="1dp"
android:viewportWidth="46"
android:viewportHeight="1">
<path
android:pathData="M0,0h46v1h-46z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="0"
android:startY="0.5"
android:endX="46"
android:endY="0.5"
android:type="linear">
<item android:offset="0" android:color="#FFFEE8D2"/>
<item android:offset="1" android:color="#FFFA6E15"/>
</gradient>
</aapt:attr>
</path>
</vector>

View File

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="28dp"
android:height="35dp"
android:viewportWidth="28"
android:viewportHeight="35">
<path
android:pathData="M5,31.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#5BD6C5"/>
<path
android:pathData="M13.92,24.48C19.752,24.48 24.48,19.753 24.48,13.92C24.48,8.088 19.752,3.36 13.92,3.36C8.088,3.36 3.36,8.088 3.36,13.92C3.36,19.753 8.088,24.48 13.92,24.48Z"
android:strokeWidth="1.5"
android:fillColor="#00000000"
android:strokeColor="#5BD6C5"/>
<path
android:pathData="M15.36,11.847C15.36,11.316 14.93,10.887 14.4,10.887C13.87,10.887 13.44,11.316 13.44,11.847V19.36C13.44,19.89 13.87,20.32 14.4,20.32C14.93,20.32 15.36,19.89 15.36,19.36V11.847Z"
android:fillColor="#5BD6C5"/>
<path
android:pathData="M14.4,9.76C14.93,9.76 15.36,9.33 15.36,8.8C15.36,8.27 14.93,7.84 14.4,7.84C13.87,7.84 13.44,8.27 13.44,8.8C13.44,9.33 13.87,9.76 14.4,9.76Z"
android:fillColor="#5BD6C5"/>
</vector>

View File

@ -0,0 +1,51 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="343dp"
android:height="65dp"
android:viewportWidth="343"
android:viewportHeight="65">
<path
android:pathData="M0,16.92C0,7.74 6.27,0.31 14,0.31H329C336.73,0.31 343,7.74 343,16.92V64.17C230.5,64.17 119.5,64.17 0,64.17V16.92Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="152.59"
android:startY="123"
android:endX="43.02"
android:endY="-1.17"
android:type="linear">
<item android:offset="0" android:color="#FF3A3D57"/>
<item android:offset="1" android:color="#FF3A3D57"/>
</gradient>
</aapt:attr>
</path>
<group>
<clip-path
android:pathData="M205,64l112,-0l0,-64l-112,-0z"/>
<group>
<clip-path
android:pathData="M205,54.16V0H317V54.16C317,59.59 315.59,64 313.85,64H208.15C206.41,64 205,59.59 205,54.16Z"/>
<path
android:pathData="M290,-8.82C316.51,-8.82 338,10.5 338,34.33C338,58.17 316.51,77.49 290,77.49C263.49,77.49 242,58.17 242,34.33C242,10.5 263.49,-8.82 290,-8.82ZM290,76.59C315.96,76.59 337,57.67 337,34.33C337,10.99 315.96,-7.93 290,-7.93C264.04,-7.93 243,10.99 243,34.33C243,57.67 264.04,76.59 290,76.59Z"
android:strokeAlpha="0.36"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.36"/>
</group>
<group>
<clip-path
android:pathData="M205,54.16V0H317V54.16C317,59.59 315.59,64 313.85,64H208.15C206.41,64 205,59.59 205,54.16Z"/>
<path
android:pathData="M290,-21.41C324.24,-21.41 352,3.55 352,34.33C352,65.12 324.24,90.07 290,90.07C255.76,90.07 228,65.12 228,34.33C228,3.55 255.76,-21.41 290,-21.41ZM290,89.17C323.69,89.17 351,64.62 351,34.33C351,4.04 323.69,-20.51 290,-20.51C256.31,-20.51 229,4.04 229,34.33C229,64.62 256.31,89.17 290,89.17Z"
android:strokeAlpha="0.14"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.14"/>
</group>
<path
android:pathData="M290,-36.7C333.63,-36.7 369,-4.9 369,34.33C369,73.56 333.63,105.36 290,105.36C246.37,105.36 211,73.56 211,34.33C211,-4.9 246.37,-36.7 290,-36.7ZM290,104.46C333.08,104.46 368,73.06 368,34.33C368,-4.4 333.08,-35.8 290,-35.8C246.92,-35.8 212,-4.4 212,34.33C212,73.06 246.92,104.46 290,104.46Z"
android:strokeAlpha="0.05"
android:fillColor="#ffffff"
android:fillType="evenOdd"
android:fillAlpha="0.05"/>
</group>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="25dp"
android:height="31dp"
android:viewportWidth="25"
android:viewportHeight="31">
<path
android:pathData="M3,27.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#D71B18"/>
<path
android:pathData="M23.768,8.219C23.698,8.15 23.616,8.096 23.525,8.06C23.434,8.023 23.336,8.006 23.238,8.008C23.14,8.01 23.044,8.032 22.955,8.073C22.865,8.113 22.785,8.171 22.719,8.243L22.157,8.847C21.077,4.828 17.711,1.8 13.587,1.307C13.39,1.287 13.193,1.346 13.039,1.471C12.885,1.596 12.786,1.777 12.765,1.974C12.718,2.391 13.01,2.769 13.416,2.818C17.294,3.28 20.395,6.368 20.954,10.326C20.959,10.358 20.968,10.388 20.975,10.418C20.974,10.521 20.993,10.624 21.033,10.719C21.072,10.814 21.13,10.901 21.204,10.973C21.274,11.042 21.357,11.095 21.448,11.132C21.539,11.167 21.636,11.185 21.734,11.182C21.832,11.18 21.928,11.158 22.017,11.118C22.107,11.077 22.187,11.019 22.253,10.947L23.792,9.294C23.929,9.147 24.002,8.953 23.998,8.752C23.993,8.552 23.911,8.361 23.768,8.22V8.219ZM3.01,11.04C3.108,11.053 3.207,11.046 3.301,11.02C3.396,10.994 3.485,10.949 3.562,10.889C3.64,10.828 3.705,10.753 3.753,10.668C3.802,10.583 3.833,10.488 3.845,10.391C4.377,6.418 7.464,3.305 11.351,2.82C11.548,2.793 11.727,2.689 11.848,2.531C11.969,2.373 12.023,2.173 11.998,1.975C11.996,1.961 11.991,1.946 11.988,1.931C12.018,1.771 11.996,1.606 11.926,1.46C11.856,1.314 11.741,1.194 11.598,1.117L9.609,0.082C9.522,0.037 9.427,0.01 9.329,0.002C9.231,-0.005 9.133,0.007 9.04,0.038C8.947,0.068 8.861,0.118 8.788,0.182C8.714,0.247 8.654,0.326 8.611,0.414C8.522,0.593 8.505,0.8 8.566,0.991C8.626,1.182 8.759,1.341 8.935,1.436L9.429,1.695C5.719,2.859 2.918,6.138 2.376,10.184C2.348,10.381 2.399,10.582 2.518,10.741C2.636,10.902 2.813,11.009 3.01,11.039V11.04ZM11.349,20.392C7.391,19.899 4.298,16.722 3.827,12.666C3.823,12.555 3.795,12.446 3.745,12.346C3.695,12.247 3.624,12.16 3.536,12.091C3.459,12.031 3.37,11.987 3.276,11.962C3.181,11.937 3.082,11.931 2.985,11.945C2.888,11.959 2.795,11.992 2.711,12.042C2.627,12.093 2.554,12.16 2.497,12.239L1.15,14.063C1.032,14.224 0.98,14.426 1.007,14.624C1.034,14.823 1.137,15.003 1.294,15.127C1.371,15.188 1.46,15.232 1.555,15.257C1.65,15.283 1.749,15.289 1.846,15.275C1.943,15.261 2.037,15.228 2.121,15.177C2.205,15.126 2.277,15.059 2.335,14.979L2.682,14.507C3.792,18.446 7.088,21.392 11.171,21.901C11.269,21.912 11.368,21.903 11.462,21.876C11.556,21.848 11.644,21.803 11.721,21.741C11.797,21.68 11.861,21.604 11.908,21.518C11.956,21.432 11.986,21.337 11.996,21.24C12.023,21.042 11.97,20.841 11.848,20.682C11.727,20.523 11.548,20.419 11.349,20.392ZM21.806,12.036C21.708,12.026 21.61,12.034 21.515,12.061C21.421,12.089 21.332,12.134 21.256,12.196C21.179,12.257 21.115,12.333 21.068,12.419C21.02,12.505 20.99,12.6 20.98,12.698C20.495,16.741 17.399,19.904 13.452,20.393C13.255,20.421 13.077,20.525 12.955,20.683C12.834,20.841 12.781,21.041 12.806,21.238C12.806,21.254 12.811,21.27 12.814,21.286C12.816,21.573 12.974,21.846 13.245,21.974L15.273,22.927C15.362,22.968 15.459,22.99 15.556,22.993C15.654,22.996 15.752,22.98 15.843,22.945C15.934,22.911 16.018,22.858 16.089,22.791C16.16,22.723 16.217,22.643 16.257,22.553C16.339,22.371 16.347,22.164 16.279,21.975C16.211,21.787 16.072,21.633 15.892,21.546L15.641,21.428C19.275,20.181 21.969,16.906 22.451,12.883C22.477,12.685 22.424,12.486 22.303,12.327C22.182,12.168 22.004,12.064 21.806,12.036ZM17.539,11.605C17.539,8.706 15.236,6.348 12.405,6.348C9.573,6.348 7.27,8.706 7.27,11.607C7.27,14.506 9.574,16.866 12.405,16.866C15.236,16.866 17.539,14.506 17.539,11.605ZM12.405,15.345C10.392,15.345 8.754,13.668 8.754,11.607C8.754,9.544 10.392,7.867 12.405,7.867C14.417,7.867 16.055,9.544 16.055,11.607C16.055,13.668 14.417,15.345 12.405,15.345Z"
android:fillColor="#D71B18"/>
</vector>

View File

@ -0,0 +1,15 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="34dp"
android:viewportWidth="26"
android:viewportHeight="34">
<path
android:pathData="M3,30.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#F66E4F"/>
<path
android:pathData="M13,24.336C12.636,24.336 12.285,24.219 11.986,24.011L7.527,20.852C4.849,18.759 3.406,15.795 3.406,12.48V6.474C3.406,6.136 3.601,5.824 3.9,5.681L12.025,1.833C12.051,1.82 12.09,1.807 12.116,1.794C12.688,1.599 13.312,1.599 13.871,1.794C13.897,1.807 13.936,1.82 13.962,1.833L22.1,5.694C22.399,5.837 22.594,6.149 22.594,6.487V12.48C22.594,15.795 21.138,18.759 18.499,20.826L14.001,24.011C13.702,24.232 13.351,24.336 13,24.336ZM5.148,7.033V12.48C5.148,15.249 6.37,17.719 8.567,19.461L13,22.594L17.459,19.435C19.63,17.732 20.852,15.249 20.852,12.48V7.033L13.273,3.445C13.091,3.393 12.896,3.393 12.714,3.445L5.148,7.033Z"
android:fillColor="#F66E4F"/>
<path
android:pathData="M11.401,16.172L7.787,12.116L9.412,10.66L12.09,13.663L17.16,8.476L18.72,10.01L12.675,16.198C12.324,16.562 11.739,16.549 11.401,16.172Z"
android:fillColor="#F66E4F"/>
</vector>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="26dp"
android:height="36dp"
android:viewportWidth="26"
android:viewportHeight="36">
<path
android:pathData="M3,32.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#ABDA3F"/>
<path
android:pathData="M17.634,11.838C17.33,11.481 16.792,11.437 16.435,11.742L11.299,16.118L9.668,14.396C9.345,14.055 8.808,14.042 8.466,14.364C8.385,14.441 8.319,14.533 8.274,14.635C8.228,14.737 8.203,14.847 8.2,14.958C8.197,15.07 8.216,15.181 8.256,15.285C8.296,15.39 8.357,15.485 8.433,15.566L10.62,17.874C10.77,18.032 10.974,18.127 11.192,18.138C11.409,18.15 11.623,18.077 11.789,17.936L17.538,13.038C17.895,12.731 17.938,12.195 17.634,11.838ZM7.158,7.796C7.317,7.984 7.553,8.107 7.819,8.107C8.049,8.107 8.27,8.016 8.433,7.854C8.514,7.775 8.577,7.68 8.62,7.575C8.664,7.47 8.686,7.358 8.685,7.245V3.605C8.685,3.428 8.632,3.262 8.537,3.124C8.506,3.078 8.471,3.035 8.431,2.996C8.32,2.887 8.182,2.81 8.03,2.774C7.961,2.755 7.89,2.745 7.819,2.744C7.336,2.744 6.952,3.13 6.952,3.605V7.244C6.952,7.455 7.031,7.645 7.158,7.796ZM18.219,8.102C18.333,8.103 18.446,8.081 18.551,8.038C18.657,7.995 18.753,7.931 18.833,7.85C18.914,7.771 18.977,7.676 19.02,7.571C19.064,7.466 19.086,7.354 19.085,7.241V3.605C19.085,3.546 19.079,3.488 19.068,3.432C19.027,3.237 18.92,3.062 18.766,2.937C18.611,2.811 18.418,2.743 18.219,2.744C17.736,2.744 17.352,3.13 17.352,3.606V7.241C17.352,7.478 17.449,7.694 17.605,7.851C17.769,8.012 17.989,8.102 18.219,8.102Z"
android:fillColor="#ABDA3F"/>
<path
android:pathData="M24.242,7.166C24.202,6.162 23.71,5.355 22.856,4.896C22.326,4.611 21.816,4.572 21.388,4.572H20.719C20.494,4.572 20.277,4.662 20.118,4.821C19.958,4.981 19.869,5.197 19.869,5.423C19.869,5.648 19.958,5.865 20.118,6.024C20.277,6.184 20.494,6.273 20.719,6.273C21.453,6.273 22.501,6.189 22.542,7.2C22.542,11.296 22.552,15.393 22.551,19.489V20.607C22.551,21.119 22.156,21.523 21.68,21.523H4.356C3.861,21.523 3.485,21.087 3.485,20.607V7.375V7.206C3.485,6.555 4.03,6.222 4.625,6.222H5.294C5.406,6.222 5.516,6.2 5.62,6.158C5.723,6.115 5.816,6.052 5.895,5.973C5.974,5.894 6.037,5.8 6.08,5.697C6.123,5.594 6.145,5.483 6.145,5.372C6.145,4.901 5.763,4.522 5.294,4.522H4.625C3.408,4.522 2.169,5.241 1.854,6.476C1.795,6.708 1.753,6.968 1.753,7.208V20.607C1.753,21.553 2.273,22.471 3.113,22.936C3.494,23.147 3.922,23.258 4.357,23.257H21.682C23.121,23.257 24.286,22.032 24.286,20.607L24.242,7.166Z"
android:fillColor="#ABDA3F"/>
<path
android:pathData="M10.407,6.276H15.63C15.856,6.276 16.072,6.187 16.232,6.027C16.391,5.868 16.481,5.651 16.481,5.426C16.481,5.2 16.391,4.984 16.232,4.824C16.072,4.665 15.856,4.575 15.63,4.575H10.407C10.294,4.574 10.183,4.595 10.078,4.637C9.974,4.679 9.879,4.742 9.799,4.821C9.719,4.9 9.655,4.994 9.612,5.098C9.568,5.202 9.546,5.313 9.546,5.426C9.546,5.538 9.568,5.65 9.612,5.754C9.655,5.858 9.719,5.952 9.799,6.031C9.879,6.11 9.974,6.173 10.078,6.215C10.183,6.257 10.294,6.278 10.407,6.276Z"
android:fillColor="#ABDA3F"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="28dp"
android:height="35dp"
android:viewportWidth="28"
android:viewportHeight="35">
<path
android:pathData="M5,31.5a9.5,0.5 0,1 0,19 0a9.5,0.5 0,1 0,-19 0z"
android:fillColor="#79BFFE"/>
<path
android:pathData="M20.028,15.448L23.818,19.238C24.003,19.422 24.106,19.673 24.106,19.934C24.106,20.195 24.002,20.445 23.817,20.63C23.633,20.815 23.382,20.918 23.121,20.918C22.86,20.918 22.61,20.814 22.425,20.629L20.317,18.521V24.583C20.317,24.844 20.213,25.094 20.028,25.279C19.844,25.463 19.594,25.567 19.333,25.567C19.072,25.567 18.821,25.463 18.637,25.279C18.452,25.094 18.348,24.844 18.348,24.583L18.347,18.521L16.239,20.629C16.053,20.808 15.804,20.906 15.547,20.904C15.289,20.901 15.043,20.798 14.861,20.616C14.678,20.434 14.575,20.187 14.572,19.93C14.57,19.672 14.668,19.423 14.847,19.238L18.635,15.448C18.727,15.356 18.835,15.284 18.955,15.234C19.074,15.185 19.202,15.159 19.332,15.159C19.461,15.159 19.589,15.185 19.709,15.234C19.828,15.284 19.937,15.356 20.028,15.448ZM20.945,2.981C22.154,2.981 23.132,3.961 23.132,5.168V12.715C23.132,12.976 23.028,13.226 22.844,13.411C22.659,13.596 22.409,13.699 22.148,13.699C21.887,13.699 21.637,13.596 21.452,13.411C21.267,13.226 21.164,12.976 21.164,12.715V5.169C21.164,5.14 21.158,5.112 21.147,5.085C21.137,5.058 21.121,5.034 21.1,5.014C21.08,4.993 21.056,4.977 21.029,4.966C21.003,4.955 20.974,4.949 20.945,4.949H6.618C6.589,4.949 6.56,4.955 6.534,4.966C6.507,4.976 6.483,4.992 6.462,5.013C6.442,5.033 6.426,5.057 6.415,5.084C6.404,5.11 6.398,5.139 6.398,5.168V22.176C6.398,22.297 6.496,22.395 6.618,22.395H12.796C13.057,22.395 13.307,22.498 13.492,22.683C13.677,22.868 13.78,23.118 13.78,23.379C13.78,23.64 13.677,23.89 13.492,24.075C13.307,24.259 13.057,24.363 12.796,24.363H6.618C5.41,24.363 4.43,23.383 4.43,22.176V5.166C4.43,3.958 5.41,2.979 6.618,2.979H20.944L20.945,2.981ZM11.375,15.997C11.636,15.997 11.886,16.1 12.071,16.285C12.255,16.469 12.359,16.72 12.359,16.981C12.359,17.242 12.255,17.492 12.071,17.677C11.886,17.861 11.636,17.965 11.375,17.965H9.132C8.871,17.965 8.621,17.861 8.436,17.677C8.252,17.492 8.148,17.242 8.148,16.981C8.148,16.72 8.252,16.469 8.436,16.285C8.621,16.1 8.871,15.997 9.132,15.997H11.375ZM16.953,12.087C17.214,12.087 17.464,12.19 17.649,12.375C17.833,12.559 17.937,12.81 17.937,13.071C17.937,13.332 17.833,13.582 17.649,13.767C17.464,13.951 17.214,14.055 16.953,14.055H9.132C8.871,14.055 8.621,13.951 8.436,13.767C8.252,13.582 8.148,13.332 8.148,13.071C8.148,12.81 8.252,12.559 8.436,12.375C8.621,12.19 8.871,12.087 9.132,12.087H16.953ZM16.953,8.176C17.214,8.176 17.464,8.28 17.649,8.465C17.833,8.649 17.937,8.899 17.937,9.16C17.937,9.422 17.833,9.672 17.649,9.856C17.464,10.041 17.214,10.145 16.953,10.145H9.132C8.871,10.145 8.621,10.041 8.436,9.856C8.252,9.672 8.148,9.422 8.148,9.16C8.148,8.899 8.252,8.649 8.436,8.465C8.621,8.28 8.871,8.176 9.132,8.176H16.953Z"
android:fillColor="#79BFFE"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="13dp"
android:height="11dp"
android:viewportWidth="13"
android:viewportHeight="11">
<path
android:pathData="M7.656,0.084C7.54,0.056 7.396,0 7.309,0C7.107,0 6.962,0.084 6.789,0.167L3.496,2.785H0.809C0.347,2.785 0,3.119 0,3.565V7.463C0,7.909 0.347,8.243 0.809,8.243H3.496L6.789,10.833C6.962,10.944 7.107,11 7.309,11C7.771,11 8.118,10.666 8.118,10.22V0.808C8.118,0.529 7.944,0.195 7.656,0.084ZM11.469,1.922C11.209,1.671 10.862,1.671 10.631,1.922C10.371,2.172 10.371,2.506 10.631,2.729C11.382,3.481 11.758,4.456 11.758,5.514C11.758,6.572 11.324,7.547 10.602,8.299C10.342,8.549 10.342,8.884 10.602,9.106C10.718,9.218 10.891,9.273 11.036,9.273C11.209,9.273 11.353,9.19 11.498,9.078C12.48,8.104 13,6.851 13,5.486C12.971,4.177 12.451,2.868 11.469,1.922Z"
android:fillColor="#FD8194"/>
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape android:shape="oval">
<gradient
android:angle="360"
android:endColor="@color/gray_E6ECFF"
android:startColor="@color/white" />
<corners android:radius="10dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="49dp"
android:height="13dp"
android:viewportWidth="49"
android:viewportHeight="13">
<path
android:pathData="M12.078,5.292L11.988,5.976H3.096L3.186,5.292H0.108L4.518,0.486L4.122,0H11.808L15.156,5.292H12.078ZM10.494,12.96L10.26,12.51L0.738,12.96L0.99,11.286L4.104,8.55H0L0.234,6.84H14.598L14.364,8.55H7.848L4.968,11.088L9.396,10.854L8.748,9.576H11.826L13.572,12.96H10.494ZM4.464,4.266H11.088L9.468,1.71H6.804L4.464,4.266ZM18.774,1.008L18.198,0.342H31.86L31.248,4.788H18.252L18.774,1.008ZM31.482,5.472L30.78,10.44H28.818L27.504,9.414L27.828,7.182H20.988L20.664,9.414L19.062,10.44H17.1L17.802,5.472H31.482ZM26.19,7.866L25.992,9.252L30.78,12.96H25.938L23.814,11.34L21.258,12.96H16.416L22.248,9.252L22.446,7.866H26.19ZM28.062,3.078L28.206,2.052H22.05L21.906,3.078H28.062ZM47.682,3.222H41.886L41.652,4.95H48.114L47.88,6.66H41.4L40.536,12.906H37.134L37.998,6.66H33.264L33.498,4.95H38.25L38.844,0.666L38.25,0.036H42.336L42.138,1.494H47.934L47.682,3.222ZM46.17,11.574H43.182L42.03,7.47H45.018L46.17,11.574Z"
android:fillColor="#ffffff"/>
</vector>

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="22dp"
android:height="22dp"
android:viewportWidth="22"
android:viewportHeight="22">
<path
android:pathData="M19.839,7.287C19.353,6.142 18.661,5.113 17.776,4.23C16.893,3.347 15.864,2.653 14.719,2.167C13.533,1.665 12.274,1.411 10.974,1.411C9.674,1.411 8.415,1.665 7.229,2.167C6.084,2.653 5.055,3.345 4.172,4.23C3.289,5.113 2.595,6.142 2.11,7.287C1.607,8.473 1.354,9.734 1.354,11.032C1.354,12.33 1.607,13.591 2.11,14.777C2.595,15.922 3.287,16.951 4.172,17.834C5.055,18.717 6.084,19.411 7.229,19.896C8.415,20.399 9.677,20.653 10.974,20.653C12.272,20.653 13.533,20.399 14.719,19.896C15.864,19.411 16.893,18.719 17.776,17.834C18.659,16.951 19.353,15.922 19.839,14.777C20.341,13.591 20.595,12.33 20.595,11.032C20.595,9.734 20.341,8.473 19.839,7.287ZM10.974,18.914C6.628,18.914 3.092,15.378 3.092,11.032C3.092,6.686 6.628,3.149 10.974,3.149C15.321,3.149 18.857,6.686 18.857,11.032C18.857,15.378 15.323,18.914 10.974,18.914Z"
android:fillColor="#525C8E"/>
<path
android:pathData="M14.985,10.104H11.911V5.655C11.911,5.148 11.496,4.733 10.989,4.733C10.482,4.733 10.068,5.148 10.068,5.655V11.026C10.068,11.533 10.482,11.948 10.989,11.948H14.985C15.492,11.948 15.907,11.533 15.907,11.026C15.905,10.519 15.49,10.104 14.985,10.104Z"
android:fillColor="#525C8E"/>
</vector>

View File

@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="14dp"
android:viewportWidth="16"
android:viewportHeight="14">
<group>
<clip-path
android:pathData="M0,0h16v14h-16z"/>
<path
android:pathData="M13.333,7.194C9.438,6.616 6.119,4.395 4.46,1.258L4,0.389V14L4.314,13.567C6.438,10.633 9.608,8.394 13.333,7.194Z"
android:fillColor="#96C0FF"/>
<path
android:pathData="M11.115,8.061C11.828,7.731 12.569,7.441 13.333,7.194C12.531,7.075 11.754,6.887 11.01,6.635C8.786,5.881 6.865,4.561 5.5,2.845C5.105,2.348 4.756,1.818 4.46,1.258L4,0.389V14L4.314,13.567C4.68,13.063 5.076,12.579 5.5,12.117C7.038,10.445 8.949,9.065 11.115,8.061ZM9.353,7.429C8.635,7.814 7.945,8.241 7.281,8.709C6.651,9.155 6.057,9.629 5.5,10.133V4.926C6.007,5.398 6.556,5.833 7.147,6.229C7.84,6.692 8.575,7.092 9.353,7.429Z"
android:fillColor="#121110"
android:fillType="evenOdd"/>
</group>
</vector>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape android:shape="oval">
<solid android:color="#FFFFFFFF"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="0"
android:endColor="#FFD2E4FF"
android:startColor="#FFD2E4FF" />
<corners android:radius="16dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,22 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="135dp"
android:height="84dp"
android:viewportWidth="135"
android:viewportHeight="84">
<path
android:pathData="M24.96,14.12C27.89,5.67 35.86,0 44.81,0H105.41C119.81,0 129.93,14.15 125.29,27.77L110.99,69.77C108.09,78.28 100.1,84 91.11,84H30.25C15.81,84 5.68,69.77 10.41,56.12L24.96,14.12Z"
android:fillColor="#EEEEEE"/>
<path
android:pathData="M67.5,32.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#ffffff"/>
<group>
<clip-path
android:pathData="M58,23h20v20h-20z"/>
<path
android:pathData="M77.46,32.71L69.01,24.25C68.74,23.98 68.38,23.83 68,23.83C67.62,23.83 67.26,23.98 66.99,24.25L58.54,32.71C58.46,32.78 58.42,32.89 58.42,33C58.42,33.11 58.46,33.22 58.54,33.29C58.62,33.37 58.72,33.42 58.83,33.42C58.94,33.42 59.05,33.37 59.13,33.29L60.5,31.92V40.5C60.5,40.94 60.68,41.37 60.99,41.68C61.3,41.99 61.72,42.17 62.17,42.17H65.92C65.97,42.17 66.03,42.16 66.08,42.13C66.13,42.11 66.17,42.08 66.21,42.04C66.25,42.01 66.28,41.96 66.3,41.91C66.32,41.86 66.33,41.8 66.33,41.75V37.17C66.33,36.95 66.42,36.73 66.58,36.58C66.73,36.42 66.95,36.33 67.17,36.33H68.83C69.05,36.33 69.27,36.42 69.42,36.58C69.58,36.73 69.67,36.95 69.67,37.17V41.75C69.67,41.8 69.68,41.86 69.7,41.91C69.72,41.96 69.75,42.01 69.79,42.04C69.83,42.08 69.87,42.11 69.92,42.13C69.97,42.16 70.03,42.17 70.08,42.17H73.83C74.28,42.17 74.7,41.99 75.01,41.68C75.32,41.37 75.5,40.94 75.5,40.5V31.92L76.87,33.29C76.95,33.37 77.06,33.42 77.17,33.42C77.28,33.42 77.38,33.37 77.46,33.29C77.54,33.22 77.58,33.11 77.58,33C77.58,32.89 77.54,32.78 77.46,32.71Z"
android:fillColor="#BEBEC3"/>
</group>
<path
android:pathData="M50.95,67.15H58.09V67.94H50.95V67.15ZM50.95,69.27H58.09V70.05H50.95V69.27ZM50.95,71.43H58.13V72.3H50.95V71.43ZM48.7,62.87H60.34V63.78H48.7V62.87ZM50.18,64.99H58.83V73.04H57.81V65.86H51.16V73.04H50.18V64.99ZM54.02,63.34L55.22,63.43C55.09,63.81 54.96,64.2 54.81,64.59C54.67,64.97 54.54,65.3 54.42,65.58L53.49,65.43C53.56,65.24 53.62,65.01 53.69,64.77C53.76,64.52 53.82,64.27 53.88,64.02C53.94,63.77 53.98,63.54 54.02,63.34ZM57.13,61.05L58.21,61.34C57.96,61.69 57.71,62.03 57.44,62.38C57.17,62.73 56.92,63.03 56.7,63.28L55.85,62.99C56,62.81 56.15,62.61 56.31,62.38C56.46,62.15 56.61,61.93 56.75,61.7C56.9,61.47 57.02,61.25 57.13,61.05ZM50.96,61.4L51.82,61.03C52.06,61.26 52.3,61.53 52.52,61.82C52.76,62.11 52.94,62.36 53.06,62.58L52.16,63.04C52.05,62.82 51.87,62.55 51.64,62.25C51.41,61.94 51.19,61.66 50.96,61.4ZM61.96,61.79H73.15V62.71H61.96V61.79ZM66.97,62.26L68.07,62.43C67.91,62.82 67.73,63.22 67.54,63.63C67.35,64.04 67.17,64.38 66.99,64.67L66.14,64.5C66.24,64.29 66.34,64.06 66.45,63.8C66.55,63.53 66.65,63.26 66.75,62.99C66.84,62.72 66.92,62.48 66.97,62.26ZM67.03,65.99H68.03V68.36C68.03,68.72 67.99,69.07 67.9,69.43C67.82,69.78 67.67,70.13 67.45,70.47C67.22,70.8 66.9,71.12 66.47,71.43C66.05,71.74 65.49,72.03 64.8,72.3C64.11,72.57 63.26,72.81 62.25,73.04C62.21,72.97 62.16,72.89 62.09,72.79C62.02,72.7 61.95,72.6 61.87,72.49C61.8,72.39 61.73,72.31 61.65,72.25C62.62,72.06 63.43,71.84 64.07,71.61C64.72,71.38 65.24,71.12 65.63,70.86C66.03,70.59 66.33,70.31 66.53,70.04C66.73,69.76 66.87,69.48 66.93,69.19C67,68.91 67.03,68.62 67.03,68.35V65.99ZM68.08,70.57L68.66,69.91C69.03,70.07 69.42,70.25 69.83,70.45C70.24,70.65 70.65,70.86 71.06,71.08C71.47,71.29 71.85,71.51 72.21,71.73C72.56,71.93 72.86,72.13 73.12,72.3L72.5,73.08C72.27,72.9 71.98,72.7 71.63,72.48C71.29,72.26 70.91,72.04 70.5,71.82C70.1,71.59 69.68,71.37 69.27,71.15C68.86,70.94 68.47,70.74 68.08,70.57ZM63.22,64.26H71.91V70.31H70.88V65.18H64.22V70.34H63.22V64.26Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,36 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="134dp"
android:height="92dp"
android:viewportWidth="134"
android:viewportHeight="92">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillAlpha="0.79">
<aapt:attr name="android:fillColor">
<gradient
android:startX="134"
android:startY="42.2"
android:endX="0"
android:endY="41.8"
android:type="linear">
<item android:offset="0" android:color="#FF9FD9F9"/>
<item android:offset="1" android:color="#FF757EFF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M66.75,31.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#EDFFFF"/>
<group>
<clip-path
android:pathData="M57.25,22h20v20h-20z"/>
<path
android:pathData="M76.71,31.7L68.26,23.25C67.99,22.98 67.63,22.83 67.25,22.83C66.87,22.83 66.51,22.98 66.24,23.25L57.79,31.7C57.71,31.78 57.67,31.89 57.67,32C57.67,32.11 57.71,32.22 57.79,32.29C57.87,32.37 57.97,32.42 58.08,32.42C58.19,32.42 58.3,32.37 58.38,32.29L59.75,30.92V39.5C59.75,39.94 59.93,40.37 60.24,40.68C60.55,40.99 60.97,41.17 61.42,41.17H65.17C65.22,41.17 65.28,41.16 65.33,41.13C65.38,41.11 65.42,41.08 65.46,41.04C65.5,41.01 65.53,40.96 65.55,40.91C65.57,40.86 65.58,40.8 65.58,40.75V36.17C65.58,35.95 65.67,35.73 65.83,35.58C65.98,35.42 66.2,35.33 66.42,35.33H68.08C68.3,35.33 68.52,35.42 68.67,35.58C68.83,35.73 68.92,35.95 68.92,36.17V40.75C68.92,40.8 68.93,40.86 68.95,40.91C68.97,40.96 69,41.01 69.04,41.04C69.08,41.08 69.12,41.11 69.17,41.13C69.22,41.16 69.28,41.17 69.33,41.17H73.08C73.53,41.17 73.95,40.99 74.26,40.68C74.57,40.37 74.75,39.94 74.75,39.5V30.92L76.12,32.29C76.2,32.37 76.31,32.42 76.42,32.42C76.53,32.42 76.63,32.37 76.71,32.29C76.79,32.22 76.83,32.11 76.83,32C76.83,31.89 76.79,31.78 76.71,31.7Z"
android:fillColor="#69B3FF"/>
</group>
<path
android:pathData="M50.2,67.15H57.34V67.94H50.2V67.15ZM50.2,69.27H57.34V70.05H50.2V69.27ZM50.2,71.43H57.38V72.3H50.2V71.43ZM47.95,62.87H59.59V63.78H47.95V62.87ZM49.43,64.99H58.08V73.04H57.06V65.86H50.41V73.04H49.43V64.99ZM53.27,63.34L54.47,63.43C54.34,63.81 54.21,64.2 54.06,64.59C53.92,64.97 53.79,65.3 53.67,65.58L52.74,65.43C52.81,65.24 52.87,65.01 52.94,64.77C53.01,64.52 53.07,64.27 53.13,64.02C53.19,63.77 53.23,63.54 53.27,63.34ZM56.38,61.05L57.46,61.34C57.21,61.69 56.96,62.03 56.69,62.38C56.42,62.73 56.17,63.03 55.95,63.28L55.1,62.99C55.25,62.81 55.4,62.61 55.56,62.38C55.71,62.15 55.86,61.93 56,61.7C56.15,61.47 56.27,61.25 56.38,61.05ZM50.21,61.4L51.07,61.03C51.31,61.26 51.55,61.53 51.77,61.82C52.01,62.11 52.19,62.36 52.31,62.58L51.41,63.04C51.3,62.82 51.12,62.55 50.89,62.25C50.66,61.94 50.44,61.66 50.21,61.4ZM61.21,61.79H72.4V62.71H61.21V61.79ZM66.22,62.26L67.32,62.43C67.16,62.82 66.98,63.22 66.79,63.63C66.6,64.04 66.42,64.38 66.24,64.67L65.39,64.5C65.49,64.29 65.59,64.06 65.7,63.8C65.8,63.53 65.9,63.26 66,62.99C66.09,62.72 66.17,62.48 66.22,62.26ZM66.28,65.99H67.28V68.36C67.28,68.72 67.24,69.07 67.15,69.43C67.07,69.78 66.92,70.13 66.7,70.47C66.47,70.8 66.15,71.12 65.72,71.43C65.3,71.74 64.74,72.03 64.05,72.3C63.36,72.57 62.51,72.81 61.5,73.04C61.46,72.97 61.41,72.89 61.34,72.79C61.27,72.7 61.2,72.6 61.12,72.49C61.05,72.39 60.98,72.31 60.9,72.25C61.87,72.06 62.68,71.84 63.32,71.61C63.97,71.38 64.49,71.12 64.88,70.86C65.28,70.59 65.58,70.31 65.78,70.04C65.98,69.76 66.12,69.48 66.18,69.19C66.25,68.91 66.28,68.62 66.28,68.35V65.99ZM67.33,70.57L67.91,69.91C68.28,70.07 68.67,70.25 69.08,70.45C69.49,70.65 69.9,70.86 70.31,71.08C70.72,71.29 71.1,71.51 71.46,71.73C71.81,71.93 72.11,72.13 72.37,72.3L71.75,73.08C71.52,72.9 71.23,72.7 70.88,72.48C70.54,72.26 70.16,72.04 69.75,71.82C69.35,71.59 68.93,71.37 68.52,71.15C68.11,70.94 67.72,70.74 67.33,70.57ZM62.47,64.26H71.16V70.31H70.13V65.18H63.47V70.34H62.47V64.26Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checkable="false" android:drawable="@drawable/yjl_home_page"/>
<item android:state_checkable="true" android:drawable="@drawable/yjl_home_page_choose"/>
</selector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="0"
android:endColor="#FFD2E4FF"
android:startColor="#FFD2E4FF" />
<corners android:radius="16dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient android:type="linear"
android:angle="180"
android:startColor="#FFF1F5FB"
android:endColor="#FFF1F5FB"
/>
<corners android:radius="25dp"/>
<stroke android:width="1dp" android:color="#4072FE"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="20"
android:viewportHeight="20">
<path
android:pathData="M14.595,17.298C14.595,15.892 12.541,14.865 10,14.865C7.46,14.865 5.406,15.892 5.406,17.298C5.406,18.703 7.46,19.73 10,19.73C12.541,19.73 14.595,18.703 14.595,17.298ZM5.946,17.298C5.946,16.325 7.73,15.406 10,15.406C12.27,15.406 14.054,16.325 14.054,17.298C14.054,18.271 12.27,19.19 10,19.19C7.73,19.19 5.946,18.271 5.946,17.298Z"
android:fillColor="#C4C3C0"/>
<path
android:pathData="M7.838,17.297C7.838,17.439 7.894,17.58 8.002,17.711C8.111,17.842 8.27,17.961 8.471,18.061C8.672,18.162 8.91,18.241 9.173,18.296C9.435,18.35 9.716,18.378 10,18.378C10.284,18.378 10.565,18.35 10.828,18.296C11.09,18.241 11.328,18.162 11.529,18.061C11.73,17.961 11.889,17.842 11.998,17.711C12.106,17.58 12.162,17.439 12.162,17.297C12.162,17.01 11.934,16.735 11.529,16.532C11.123,16.33 10.573,16.216 10,16.216C9.427,16.216 8.877,16.33 8.471,16.532C8.066,16.735 7.838,17.01 7.838,17.297Z"
android:fillColor="#99999D"/>
<path
android:pathData="M10,10.811C10.324,10.811 10.541,11.027 10.541,11.351V16.757C10.541,17.081 10.324,17.297 10,17.297C9.676,17.297 9.459,17.081 9.459,16.757V11.351C9.459,11.027 9.676,10.811 10,10.811Z"
android:fillColor="#23252E"/>
<path
android:pathData="M10,0C6.703,0 4.054,2.649 4.054,5.946C4.054,9.243 6.703,11.892 10,11.892C13.297,11.892 15.946,9.243 15.946,5.946C15.946,2.649 13.297,0 10,0ZM10,7.027C9.405,7.027 8.919,6.541 8.919,5.946C8.919,5.351 9.405,4.865 10,4.865C10.594,4.865 11.081,5.351 11.081,5.946C11.081,6.541 10.594,7.027 10,7.027Z"
android:fillColor="#D81E06"/>
</vector>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="0"
android:endColor="#FF9AB1FD"
android:startColor="#FFABD6FB" />
</shape>
</item>
</ripple>

View File

@ -0,0 +1,17 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="134dp"
android:height="84dp"
android:viewportWidth="134"
android:viewportHeight="84">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillColor="#EEEEEE"
android:fillAlpha="0.79"/>
<path
android:pathData="M66.5,31.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#ffffff"/>
<path
android:pathData="M65.27,29.2C64.95,29.2 64.69,29.5 64.77,29.81C65.04,30.81 65.95,31.54 67.03,31.54C68.12,31.54 69.03,30.81 69.3,29.81C69.38,29.5 69.12,29.2 68.8,29.2H65.27ZM67.03,34.97C63.53,34.97 60.7,32.13 60.7,28.64C60.7,25.14 63.53,22.3 67.03,22.3C70.53,22.3 73.37,25.14 73.37,28.64C73.37,32.13 70.53,34.97 67.03,34.97ZM70.95,35.86C73.09,35.86 74.82,37.65 74.82,39.85C74.82,40.65 74.2,41.29 73.43,41.29H60.57C59.8,41.29 59.18,40.65 59.18,39.85C59.18,37.65 60.92,35.86 63.05,35.86H70.95Z"
android:fillColor="#BEBEC3"/>
</vector>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="360"
android:endColor="@color/white"
android:startColor="@color/white" />
<corners android:radius="15dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#BFD5D5D5" >
<item>
<shape>
<gradient
android:angle="360"
android:endColor="#FFFFCA3E"
android:startColor="#FFFFCA3E" />
<corners android:radius="30dp"/>
</shape>
</item>
</ripple>

View File

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="134dp"
android:height="84dp"
android:viewportWidth="134"
android:viewportHeight="84">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillColor="#EEEEEE"
android:fillAlpha="0.79"/>
<path
android:pathData="M66.5,31.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#ffffff"/>
<path
android:pathData="M65.27,29.2C64.95,29.2 64.69,29.5 64.77,29.81C65.04,30.81 65.95,31.54 67.03,31.54C68.12,31.54 69.03,30.81 69.3,29.81C69.38,29.5 69.12,29.2 68.8,29.2H65.27ZM67.03,34.97C63.53,34.97 60.7,32.13 60.7,28.64C60.7,25.14 63.53,22.3 67.03,22.3C70.53,22.3 73.37,25.14 73.37,28.64C73.37,32.13 70.53,34.97 67.03,34.97ZM70.95,35.86C73.09,35.86 74.82,37.65 74.82,39.85C74.82,40.65 74.2,41.29 73.43,41.29H60.57C59.8,41.29 59.18,40.65 59.18,39.85C59.18,37.65 60.92,35.86 63.05,35.86H70.95Z"
android:fillColor="#BEBEC3"/>
<path
android:pathData="M47.45,62.13C47.18,62.54 46.85,62.97 46.45,63.42C46.05,63.87 45.6,64.32 45.11,64.77C44.62,65.21 44.1,65.64 43.55,66.06C43,66.47 42.44,66.85 41.86,67.19C41.81,67.11 41.76,67.03 41.69,66.93C41.62,66.83 41.55,66.73 41.47,66.64C41.39,66.55 41.31,66.47 41.23,66.4C41.82,66.07 42.4,65.69 42.96,65.27C43.53,64.84 44.06,64.39 44.55,63.91C45.05,63.44 45.5,62.96 45.9,62.48C46.3,62.01 46.62,61.55 46.88,61.12H47.9C48.26,61.62 48.66,62.12 49.11,62.61C49.57,63.1 50.06,63.57 50.58,64.02C51.11,64.47 51.65,64.88 52.19,65.27C52.75,65.64 53.29,65.96 53.83,66.23C53.7,66.35 53.58,66.49 53.47,66.66C53.35,66.81 53.25,66.96 53.17,67.11C52.63,66.8 52.09,66.45 51.54,66.06C51,65.66 50.47,65.24 49.96,64.8C49.45,64.35 48.97,63.9 48.54,63.45C48.12,62.99 47.75,62.55 47.45,62.13ZM46.94,65.37H47.97V73.04H46.94V65.37ZM59.82,61.48H60.92C60.9,61.82 60.87,62.27 60.83,62.82C60.78,63.38 60.7,64 60.58,64.71C60.47,65.4 60.29,66.12 60.04,66.88C59.8,67.63 59.48,68.38 59.07,69.11C58.66,69.85 58.14,70.55 57.51,71.21C56.89,71.87 56.12,72.44 55.22,72.92C55.14,72.8 55.03,72.67 54.88,72.53C54.74,72.39 54.58,72.27 54.43,72.17C55.32,71.71 56.07,71.17 56.68,70.56C57.28,69.94 57.78,69.28 58.17,68.58C58.56,67.88 58.87,67.17 59.08,66.46C59.3,65.74 59.46,65.06 59.56,64.41C59.67,63.76 59.73,63.18 59.76,62.68C59.79,62.17 59.82,61.77 59.82,61.48ZM60.86,61.74C60.87,61.89 60.89,62.15 60.92,62.51C60.95,62.87 61.01,63.3 61.1,63.81C61.18,64.32 61.31,64.88 61.47,65.47C61.64,66.07 61.86,66.69 62.14,67.32C62.42,67.95 62.76,68.57 63.17,69.17C63.57,69.76 64.06,70.32 64.63,70.83C65.21,71.33 65.88,71.76 66.65,72.1C66.5,72.22 66.36,72.35 66.22,72.49C66.09,72.65 65.98,72.79 65.89,72.92C65.11,72.55 64.43,72.1 63.83,71.56C63.24,71.01 62.73,70.42 62.31,69.79C61.89,69.15 61.54,68.49 61.25,67.83C60.98,67.16 60.75,66.51 60.58,65.88C60.4,65.24 60.27,64.64 60.19,64.1C60.1,63.54 60.04,63.07 60.01,62.68C59.97,62.28 59.95,61.99 59.94,61.82L60.86,61.74ZM68.25,63.41H78.73V69.52H77.72V64.36H69.22V69.58H68.25V63.41ZM68.77,67.81H78.31V68.78H68.77V67.81ZM72.95,61.08H73.98V73.03H72.95V61.08ZM83.96,64.71H84.97V71.25C84.97,71.55 85.02,71.74 85.12,71.83C85.23,71.92 85.47,71.96 85.82,71.96C85.91,71.96 86.06,71.96 86.28,71.96C86.5,71.96 86.73,71.96 86.99,71.96C87.25,71.96 87.5,71.96 87.72,71.96C87.95,71.96 88.12,71.96 88.23,71.96C88.49,71.96 88.68,71.89 88.81,71.75C88.94,71.61 89.04,71.35 89.09,70.96C89.15,70.56 89.2,69.99 89.23,69.24C89.35,69.33 89.5,69.42 89.67,69.5C89.85,69.59 90.01,69.65 90.15,69.69C90.1,70.5 90.02,71.14 89.91,71.61C89.8,72.07 89.62,72.39 89.37,72.58C89.12,72.78 88.76,72.87 88.28,72.87C88.22,72.87 88.1,72.87 87.93,72.87C87.76,72.87 87.56,72.87 87.33,72.87C87.12,72.87 86.89,72.87 86.67,72.87C86.44,72.87 86.25,72.87 86.08,72.87C85.92,72.87 85.81,72.87 85.75,72.87C85.29,72.87 84.93,72.82 84.67,72.73C84.41,72.63 84.22,72.46 84.12,72.22C84.02,71.99 83.96,71.66 83.96,71.23V64.71ZM84.07,61.89L84.68,61.13C85.2,61.31 85.74,61.53 86.31,61.78C86.87,62.03 87.4,62.29 87.89,62.56C88.39,62.82 88.82,63.07 89.17,63.3L88.53,64.16C88.2,63.91 87.78,63.65 87.28,63.37C86.79,63.09 86.26,62.82 85.69,62.56C85.14,62.29 84.6,62.07 84.07,61.89ZM81.78,65.76L82.73,65.96C82.67,66.54 82.57,67.14 82.44,67.76C82.32,68.39 82.16,68.98 81.96,69.54C81.76,70.11 81.51,70.6 81.2,71.01L80.31,70.49C80.61,70.1 80.85,69.65 81.04,69.13C81.24,68.61 81.4,68.06 81.52,67.48C81.64,66.9 81.73,66.32 81.78,65.76ZM89.37,65.76L90.24,65.33C90.63,65.82 90.99,66.36 91.32,66.93C91.66,67.5 91.95,68.07 92.18,68.63C92.42,69.19 92.6,69.7 92.7,70.17L91.74,70.62C91.64,70.16 91.48,69.65 91.25,69.09C91.01,68.52 90.73,67.95 90.4,67.37C90.08,66.79 89.74,66.25 89.37,65.76Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,32 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="134dp"
android:height="92dp"
android:viewportWidth="134"
android:viewportHeight="92">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillAlpha="0.79">
<aapt:attr name="android:fillColor">
<gradient
android:startX="134"
android:startY="42.2"
android:endX="0"
android:endY="41.8"
android:type="linear">
<item android:offset="0" android:color="#FF9FD9F9"/>
<item android:offset="1" android:color="#FF757EFF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M66.5,30.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#EDFFFF"/>
<path
android:pathData="M65.27,28.2C64.95,28.2 64.69,28.5 64.77,28.81C65.04,29.81 65.95,30.54 67.03,30.54C68.12,30.54 69.03,29.81 69.3,28.81C69.38,28.5 69.12,28.2 68.8,28.2H65.27ZM67.03,33.97C63.53,33.97 60.7,31.13 60.7,27.64C60.7,24.14 63.53,21.3 67.03,21.3C70.53,21.3 73.37,24.14 73.37,27.64C73.37,31.13 70.53,33.97 67.03,33.97ZM70.95,34.86C73.09,34.86 74.82,36.65 74.82,38.85C74.82,39.65 74.2,40.29 73.43,40.29H60.57C59.8,40.29 59.18,39.65 59.18,38.85C59.18,36.65 60.92,34.86 63.05,34.86H70.95Z"
android:fillColor="#69B3FF"/>
<path
android:pathData="M47.45,62.13C47.18,62.54 46.85,62.97 46.45,63.42C46.05,63.87 45.6,64.32 45.11,64.77C44.62,65.21 44.1,65.64 43.55,66.06C43,66.47 42.44,66.85 41.86,67.19C41.81,67.11 41.76,67.03 41.69,66.93C41.62,66.83 41.55,66.73 41.47,66.64C41.39,66.55 41.31,66.47 41.23,66.4C41.82,66.07 42.4,65.69 42.96,65.27C43.53,64.84 44.06,64.39 44.55,63.91C45.05,63.44 45.5,62.96 45.9,62.48C46.3,62.01 46.62,61.55 46.88,61.12H47.9C48.26,61.62 48.66,62.12 49.11,62.61C49.57,63.1 50.06,63.57 50.58,64.02C51.11,64.47 51.65,64.88 52.19,65.27C52.75,65.64 53.29,65.96 53.83,66.23C53.7,66.35 53.58,66.49 53.47,66.66C53.35,66.81 53.25,66.96 53.17,67.11C52.63,66.8 52.09,66.45 51.54,66.06C51,65.66 50.47,65.24 49.96,64.8C49.45,64.35 48.97,63.9 48.54,63.45C48.12,62.99 47.75,62.55 47.45,62.13ZM46.94,65.37H47.97V73.04H46.94V65.37ZM59.82,61.48H60.92C60.9,61.82 60.87,62.27 60.83,62.82C60.78,63.38 60.7,64 60.58,64.71C60.47,65.4 60.29,66.12 60.04,66.88C59.8,67.63 59.48,68.38 59.07,69.11C58.66,69.85 58.14,70.55 57.51,71.21C56.89,71.87 56.12,72.44 55.22,72.92C55.14,72.8 55.03,72.67 54.88,72.53C54.74,72.39 54.58,72.27 54.43,72.17C55.32,71.71 56.07,71.17 56.68,70.56C57.28,69.94 57.78,69.28 58.17,68.58C58.56,67.88 58.87,67.17 59.08,66.46C59.3,65.74 59.46,65.06 59.56,64.41C59.67,63.76 59.73,63.18 59.76,62.68C59.79,62.17 59.82,61.77 59.82,61.48ZM60.86,61.74C60.87,61.89 60.89,62.15 60.92,62.51C60.95,62.87 61.01,63.3 61.1,63.81C61.18,64.32 61.31,64.88 61.47,65.47C61.64,66.07 61.86,66.69 62.14,67.32C62.42,67.95 62.76,68.57 63.17,69.17C63.57,69.76 64.06,70.32 64.63,70.83C65.21,71.33 65.88,71.76 66.65,72.1C66.5,72.22 66.36,72.35 66.22,72.49C66.09,72.65 65.98,72.79 65.89,72.92C65.11,72.55 64.43,72.1 63.83,71.56C63.24,71.01 62.73,70.42 62.31,69.79C61.89,69.15 61.54,68.49 61.25,67.83C60.98,67.16 60.75,66.51 60.58,65.88C60.4,65.24 60.27,64.64 60.19,64.1C60.1,63.54 60.04,63.07 60.01,62.68C59.97,62.28 59.95,61.99 59.94,61.82L60.86,61.74ZM68.25,63.41H78.73V69.52H77.72V64.36H69.22V69.58H68.25V63.41ZM68.77,67.81H78.31V68.78H68.77V67.81ZM72.95,61.08H73.98V73.03H72.95V61.08ZM83.96,64.71H84.97V71.25C84.97,71.55 85.02,71.74 85.12,71.83C85.23,71.92 85.47,71.96 85.82,71.96C85.91,71.96 86.06,71.96 86.28,71.96C86.5,71.96 86.73,71.96 86.99,71.96C87.25,71.96 87.5,71.96 87.72,71.96C87.95,71.96 88.12,71.96 88.23,71.96C88.49,71.96 88.68,71.89 88.81,71.75C88.94,71.61 89.04,71.35 89.09,70.96C89.15,70.56 89.2,69.99 89.23,69.24C89.35,69.33 89.5,69.42 89.67,69.5C89.85,69.59 90.01,69.65 90.15,69.69C90.1,70.5 90.02,71.14 89.91,71.61C89.8,72.07 89.62,72.39 89.37,72.58C89.12,72.78 88.76,72.87 88.28,72.87C88.22,72.87 88.1,72.87 87.93,72.87C87.76,72.87 87.56,72.87 87.33,72.87C87.12,72.87 86.89,72.87 86.67,72.87C86.44,72.87 86.25,72.87 86.08,72.87C85.92,72.87 85.81,72.87 85.75,72.87C85.29,72.87 84.93,72.82 84.67,72.73C84.41,72.63 84.22,72.46 84.12,72.22C84.02,71.99 83.96,71.66 83.96,71.23V64.71ZM84.07,61.89L84.68,61.13C85.2,61.31 85.74,61.53 86.31,61.78C86.87,62.03 87.4,62.29 87.89,62.56C88.39,62.82 88.82,63.07 89.17,63.3L88.53,64.16C88.2,63.91 87.78,63.65 87.28,63.37C86.79,63.09 86.26,62.82 85.69,62.56C85.14,62.29 84.6,62.07 84.07,61.89ZM81.78,65.76L82.73,65.96C82.67,66.54 82.57,67.14 82.44,67.76C82.32,68.39 82.16,68.98 81.96,69.54C81.76,70.11 81.51,70.6 81.2,71.01L80.31,70.49C80.61,70.1 80.85,69.65 81.04,69.13C81.24,68.61 81.4,68.06 81.52,67.48C81.64,66.9 81.73,66.32 81.78,65.76ZM89.37,65.76L90.24,65.33C90.63,65.82 90.99,66.36 91.32,66.93C91.66,67.5 91.95,68.07 92.18,68.63C92.42,69.19 92.6,69.7 92.7,70.17L91.74,70.62C91.64,70.16 91.48,69.65 91.25,69.09C91.01,68.52 90.73,67.95 90.4,67.37C90.08,66.79 89.74,66.25 89.37,65.76Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/yjl_user_page" android:state_checkable="false" />
<item android:drawable="@drawable/yjl_user_page_choose" android:state_checkable="true" />
</selector>

View File

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="34dp"
android:height="24dp"
android:viewportWidth="34"
android:viewportHeight="24">
<group>
<clip-path
android:pathData="M0,20.833C11.509,25.613 22.8,24.459 34,20.833V5.419C34,2.426 33.379,0 32.612,0H1.388C0.621,0 0,2.426 0,5.419V20.833Z"/>
<path
android:pathData="M29,9.08V8.58C29,8.508 28.93,8.435 28.93,8.22C28.719,7.573 28.153,7.138 27.52,7.21C26.817,7.282 26.19,7.929 26.26,8.72C26.33,9.079 26.469,9.444 26.75,9.66L26.54,9.8C25.205,10.59 23.935,11.449 22.6,12.24C22.319,12.455 22.181,12.389 21.97,12.03C21.126,10.521 20.284,8.941 19.44,7.36C19.089,6.857 18.811,6.275 18.53,5.7C19.444,5.053 19.652,4.199 19.09,3.48L19.02,3.4C18.458,2.897 17.612,2.825 17.05,3.4C16.769,3.687 16.63,4.049 16.63,4.48C16.63,5.055 16.978,5.564 17.47,5.78C16.275,8.008 15.155,10.164 13.96,12.32L13.89,12.39C13.82,12.533 13.611,12.604 13.47,12.46C13.119,12.244 12.691,11.955 12.34,11.74C11.356,11.165 10.374,10.517 9.32,9.87C9.39,9.798 9.39,9.73 9.46,9.73C9.811,9.299 9.881,8.653 9.6,8.15C9.459,7.791 9.181,7.574 8.83,7.43C8.057,7.214 7.281,7.641 7.07,8.36L7,8.58V9.08C7.07,9.224 7.14,9.294 7.21,9.51C7.491,9.941 7.988,10.23 8.55,10.23C8.691,10.877 8.899,11.455 9.04,12.03C9.602,14.258 10.237,16.414 10.87,18.57C10.94,18.929 11.079,19 11.43,19H24.57C24.921,19 25.06,18.929 25.13,18.57L27.45,10.52C27.45,10.376 27.52,10.302 27.52,10.23C28.293,10.23 28.789,9.799 29,9.08Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M22.58,12.34C22.298,12.557 22.162,12.482 21.95,12.12C21.104,10.6 20.256,9.013 19.41,7.42C19.057,6.913 18.772,6.329 18.49,5.75C19.407,5.098 19.624,4.234 19.06,3.51L18.99,3.43C18.637,3.068 18.212,3 18,3V19H24.56C24.913,19 25.049,18.932 25.12,18.57L27.45,10.46C27.45,10.315 27.52,10.242 27.52,10.17C28.296,10.17 28.788,9.734 29,9.01V8.5C29,8.428 28.93,8.362 28.93,8.29C28.719,7.638 28.155,7.198 27.52,7.27C26.815,7.342 26.18,7.994 26.25,8.79C26.32,9.152 26.458,9.513 26.74,9.73L26.53,9.88C25.19,10.676 23.92,11.544 22.58,12.34Z"
android:fillColor="#C8C8C8"/>
</group>
</vector>

View File

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="134dp"
android:height="84dp"
android:viewportWidth="134"
android:viewportHeight="84">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillColor="#EEEEEE"
android:fillAlpha="0.79"/>
<path
android:pathData="M66.5,32.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#ffffff"/>
<path
android:pathData="M76,32.5C76,37.75 71.75,42 66.5,42C61.25,42 57,37.75 57,32.5C57,27.25 61.25,23 66.5,23C71.75,23 76,27.25 76,32.5ZM69.16,33.89H67.09V32.94H69.16C69.51,32.94 69.75,32.71 69.75,32.35C69.75,32 69.51,31.76 69.16,31.76H67.09V31.33L69.37,29.05C69.61,28.81 69.61,28.46 69.37,28.22C69.14,27.99 68.78,27.99 68.55,28.22L66.48,30.29L64.42,28.22C64.18,27.99 63.83,27.99 63.59,28.22C63.35,28.46 63.35,28.81 63.59,29.05L65.91,31.37V31.76H63.84C63.49,31.76 63.25,32 63.25,32.35C63.25,32.71 63.49,32.94 63.84,32.94H65.91V33.89H63.84C63.49,33.89 63.25,34.12 63.25,34.48C63.25,34.83 63.49,35.07 63.84,35.07H65.91V36.36C65.91,36.72 66.15,36.95 66.5,36.95C66.74,36.95 66.97,36.72 67.09,36.36V35.07H69.16C69.51,35.07 69.75,34.83 69.75,34.48C69.75,34.12 69.51,33.89 69.16,33.89Z"
android:fillColor="#BEBEC3"/>
<path
android:pathData="M61.67,67.45H62.65V71.54C62.65,71.74 62.68,71.87 62.75,71.93C62.83,71.99 62.99,72.01 63.24,72.01C63.3,72.01 63.41,72.01 63.56,72.01C63.7,72.01 63.87,72.01 64.05,72.01C64.24,72.01 64.41,72.01 64.57,72.01C64.72,72.01 64.84,72.01 64.92,72.01C65.1,72.01 65.24,71.96 65.32,71.86C65.41,71.75 65.47,71.54 65.5,71.22C65.54,70.9 65.57,70.41 65.58,69.76C65.65,69.82 65.74,69.87 65.84,69.93C65.96,69.99 66.07,70.03 66.18,70.08C66.29,70.11 66.39,70.15 66.48,70.18C66.45,70.91 66.39,71.48 66.3,71.88C66.21,72.28 66.06,72.56 65.86,72.71C65.66,72.87 65.37,72.95 65,72.95C64.94,72.95 64.82,72.95 64.65,72.95C64.47,72.95 64.28,72.95 64.06,72.95C63.85,72.95 63.66,72.95 63.49,72.95C63.32,72.95 63.2,72.95 63.14,72.95C62.75,72.95 62.45,72.91 62.23,72.82C62.02,72.74 61.87,72.6 61.79,72.39C61.71,72.19 61.67,71.91 61.67,71.54V67.45ZM58.3,67.53H59.32C59.26,68.23 59.17,68.87 59.03,69.45C58.9,70.03 58.68,70.55 58.38,71C58.09,71.45 57.68,71.84 57.16,72.18C56.64,72.52 55.97,72.8 55.14,73.03C55.11,72.94 55.06,72.85 54.99,72.74C54.93,72.64 54.86,72.53 54.78,72.43C54.71,72.33 54.64,72.26 54.56,72.19C55.32,72 55.94,71.77 56.4,71.49C56.88,71.21 57.25,70.87 57.5,70.49C57.76,70.11 57.94,69.67 58.06,69.18C58.17,68.68 58.25,68.13 58.3,67.53ZM61.76,64.41L62.54,63.91C62.97,64.23 63.42,64.59 63.87,64.99C64.32,65.39 64.74,65.79 65.13,66.19C65.52,66.59 65.83,66.95 66.06,67.28L65.21,67.85C64.99,67.51 64.69,67.14 64.31,66.74C63.94,66.33 63.52,65.92 63.07,65.51C62.63,65.11 62.19,64.74 61.76,64.41ZM58.71,63.16L59.75,63.49C59.56,63.86 59.36,64.25 59.15,64.65C58.94,65.06 58.73,65.45 58.51,65.82C58.29,66.19 58.09,66.51 57.9,66.8L57.09,66.5C57.28,66.21 57.47,65.86 57.67,65.47C57.87,65.08 58.07,64.69 58.25,64.28C58.43,63.87 58.58,63.5 58.71,63.16ZM55.27,66.19C56.04,66.17 56.93,66.15 57.95,66.12C58.98,66.09 60.08,66.05 61.23,66.02C62.39,65.98 63.54,65.93 64.69,65.89L64.65,66.77C63.53,66.83 62.4,66.89 61.25,66.94C60.12,67 59.04,67.04 58.02,67.09C57,67.13 56.1,67.16 55.31,67.19L55.27,66.19ZM54.87,62.65H66.17V63.58H54.87V62.65ZM59.98,61.08H60.97V63.16H59.98V61.08ZM71.28,62.41H79.06V63.28H71.28V62.41ZM70.72,71.82H79.45V72.66H70.72V71.82ZM71.97,64.49H78.3V72.05H77.39V65.25H72.85V72.05H71.97V64.49ZM72.58,66.35H77.6V67.07H72.58V66.35ZM72.56,68.19H77.79V68.89H72.56V68.19ZM72.56,70.02H77.62V70.74H72.56V70.02ZM74.79,61.08L75.83,61.15C75.76,61.55 75.68,61.99 75.58,62.44C75.48,62.9 75.39,63.33 75.29,63.74C75.2,64.15 75.1,64.51 75.01,64.81L74.16,64.72C74.24,64.41 74.32,64.04 74.4,63.6C74.48,63.17 74.56,62.73 74.63,62.29C74.7,61.85 74.75,61.44 74.79,61.08ZM70.43,61.09L71.33,61.38C71.06,62.11 70.75,62.83 70.39,63.55C70.05,64.26 69.67,64.93 69.25,65.57C68.83,66.2 68.4,66.76 67.96,67.25C67.93,67.18 67.88,67.08 67.81,66.96C67.75,66.83 67.68,66.71 67.61,66.59C67.54,66.46 67.48,66.36 67.42,66.28C67.81,65.86 68.2,65.37 68.57,64.81C68.95,64.26 69.29,63.66 69.61,63.03C69.93,62.4 70.21,61.75 70.43,61.09ZM69.07,64.5L69.96,63.58L69.98,63.59V73.04H69.07V64.5Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,32 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="134dp"
android:height="92dp"
android:viewportWidth="134"
android:viewportHeight="92">
<path
android:pathData="M24.21,14.12C27.14,5.67 35.11,0 44.06,0H104.66C119.06,0 129.18,14.15 124.54,27.77L110.24,69.77C107.34,78.28 99.35,84 90.36,84H29.5C15.06,84 4.93,69.77 9.66,56.12L24.21,14.12Z"
android:strokeAlpha="0.79"
android:fillAlpha="0.79">
<aapt:attr name="android:fillColor">
<gradient
android:startX="134"
android:startY="42.2"
android:endX="0"
android:endY="41.8"
android:type="linear">
<item android:offset="0" android:color="#FF9FD9F9"/>
<item android:offset="1" android:color="#FF757EFF"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M66.5,31.5m-19.5,0a19.5,19.5 0,1 1,39 0a19.5,19.5 0,1 1,-39 0"
android:fillColor="#EDFFFF"/>
<path
android:pathData="M76,31.5C76,36.75 71.75,41 66.5,41C61.25,41 57,36.75 57,31.5C57,26.25 61.25,22 66.5,22C71.75,22 76,26.25 76,31.5ZM69.16,32.89H67.09V31.94H69.16C69.51,31.94 69.75,31.71 69.75,31.35C69.75,31 69.51,30.76 69.16,30.76H67.09V30.33L69.37,28.05C69.61,27.81 69.61,27.46 69.37,27.22C69.14,26.99 68.78,26.99 68.55,27.22L66.48,29.29L64.42,27.22C64.18,26.99 63.83,26.99 63.59,27.22C63.35,27.46 63.35,27.81 63.59,28.05L65.91,30.37V30.76H63.84C63.49,30.76 63.25,31 63.25,31.35C63.25,31.71 63.49,31.94 63.84,31.94H65.91V32.89H63.84C63.49,32.89 63.25,33.12 63.25,33.48C63.25,33.83 63.49,34.07 63.84,34.07H65.91V35.36C65.91,35.72 66.15,35.95 66.5,35.95C66.74,35.95 66.97,35.72 67.09,35.36V34.07H69.16C69.51,34.07 69.75,33.83 69.75,33.48C69.75,33.12 69.51,32.89 69.16,32.89Z"
android:fillColor="#69B3FF"/>
<path
android:pathData="M61.67,67.45H62.65V71.54C62.65,71.74 62.68,71.87 62.75,71.93C62.83,71.99 62.99,72.01 63.24,72.01C63.3,72.01 63.41,72.01 63.56,72.01C63.7,72.01 63.87,72.01 64.05,72.01C64.24,72.01 64.41,72.01 64.57,72.01C64.72,72.01 64.84,72.01 64.92,72.01C65.1,72.01 65.24,71.96 65.32,71.86C65.41,71.75 65.47,71.54 65.5,71.22C65.54,70.9 65.57,70.41 65.58,69.76C65.65,69.82 65.74,69.87 65.84,69.93C65.96,69.99 66.07,70.03 66.18,70.08C66.29,70.11 66.39,70.15 66.48,70.18C66.45,70.91 66.39,71.48 66.3,71.88C66.21,72.28 66.06,72.56 65.86,72.71C65.66,72.87 65.37,72.95 65,72.95C64.94,72.95 64.82,72.95 64.65,72.95C64.47,72.95 64.28,72.95 64.06,72.95C63.85,72.95 63.66,72.95 63.49,72.95C63.32,72.95 63.2,72.95 63.14,72.95C62.75,72.95 62.45,72.91 62.23,72.82C62.02,72.74 61.87,72.6 61.79,72.39C61.71,72.19 61.67,71.91 61.67,71.54V67.45ZM58.3,67.53H59.32C59.26,68.23 59.17,68.87 59.03,69.45C58.9,70.03 58.68,70.55 58.38,71C58.09,71.45 57.68,71.84 57.16,72.18C56.64,72.52 55.97,72.8 55.14,73.03C55.11,72.94 55.06,72.85 54.99,72.74C54.93,72.64 54.86,72.53 54.78,72.43C54.71,72.33 54.64,72.26 54.56,72.19C55.32,72 55.94,71.77 56.4,71.49C56.88,71.21 57.25,70.87 57.5,70.49C57.76,70.11 57.94,69.67 58.06,69.18C58.17,68.68 58.25,68.13 58.3,67.53ZM61.76,64.41L62.54,63.91C62.97,64.23 63.42,64.59 63.87,64.99C64.32,65.39 64.74,65.79 65.13,66.19C65.52,66.59 65.83,66.95 66.06,67.28L65.21,67.85C64.99,67.51 64.69,67.14 64.31,66.74C63.94,66.33 63.52,65.92 63.07,65.51C62.63,65.11 62.19,64.74 61.76,64.41ZM58.71,63.16L59.75,63.49C59.56,63.86 59.36,64.25 59.15,64.65C58.94,65.06 58.73,65.45 58.51,65.82C58.29,66.19 58.09,66.51 57.9,66.8L57.09,66.5C57.28,66.21 57.47,65.86 57.67,65.47C57.87,65.08 58.07,64.69 58.25,64.28C58.43,63.87 58.58,63.5 58.71,63.16ZM55.27,66.19C56.04,66.17 56.93,66.15 57.95,66.12C58.98,66.09 60.08,66.05 61.23,66.02C62.39,65.98 63.54,65.93 64.69,65.89L64.65,66.77C63.53,66.83 62.4,66.89 61.25,66.94C60.12,67 59.04,67.04 58.02,67.09C57,67.13 56.1,67.16 55.31,67.19L55.27,66.19ZM54.87,62.65H66.17V63.58H54.87V62.65ZM59.98,61.08H60.97V63.16H59.98V61.08ZM71.28,62.41H79.06V63.28H71.28V62.41ZM70.72,71.82H79.45V72.66H70.72V71.82ZM71.97,64.49H78.3V72.05H77.39V65.25H72.85V72.05H71.97V64.49ZM72.58,66.35H77.6V67.07H72.58V66.35ZM72.56,68.19H77.79V68.89H72.56V68.19ZM72.56,70.02H77.62V70.74H72.56V70.02ZM74.79,61.08L75.83,61.15C75.76,61.55 75.68,61.99 75.58,62.44C75.48,62.9 75.39,63.33 75.29,63.74C75.2,64.15 75.1,64.51 75.01,64.81L74.16,64.72C74.24,64.41 74.32,64.04 74.4,63.6C74.48,63.17 74.56,62.73 74.63,62.29C74.7,61.85 74.75,61.44 74.79,61.08ZM70.43,61.09L71.33,61.38C71.06,62.11 70.75,62.83 70.39,63.55C70.05,64.26 69.67,64.93 69.25,65.57C68.83,66.2 68.4,66.76 67.96,67.25C67.93,67.18 67.88,67.08 67.81,66.96C67.75,66.83 67.68,66.71 67.61,66.59C67.54,66.46 67.48,66.36 67.42,66.28C67.81,65.86 68.2,65.37 68.57,64.81C68.95,64.26 69.29,63.66 69.61,63.03C69.93,62.4 70.21,61.75 70.43,61.09ZM69.07,64.5L69.96,63.58L69.98,63.59V73.04H69.07V64.5Z"
android:fillColor="#000000"/>
</vector>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/yjl_vip_page" android:state_checkable="false" />
<item android:drawable="@drawable/yjl_vip_page_choose" android:state_checkable="true" />
</selector>

View File

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@mipmap/oc_index_bg"
android:background="#6FA2FA"
android:orientation="vertical"
>
@ -14,175 +15,195 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="30dp"
android:layout_marginStart="37dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiBack"
android:id="@+id/dogHead"
android:layout_width="166dp"
android:layout_height="166dp"
android:src="@mipmap/login_earth_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginEnd="16dp"
/>
<TextView
android:id="@+id/tv_welcome_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_back"
android:padding="5dp"
android:layout_marginStart="15dp"
android:text="@string/HelloWelcomeBinder"
android:textColor="@color/white"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
android:layout_marginTop="90dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:layout_marginStart="40dp"
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="54dp"
android:text="@string/BindAccount"
android:textColor="#B36C1B"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
/>
<TextView
android:layout_marginStart="@dimen/dp_40"
android:id="@+id/tv_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_username_title_text_top_margin"
android:text="@string/phone_number"
android:textColor="#4F4F4F"
android:textSize="13sp"
/>
<LinearLayout
android:id="@+id/llPhoneNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:background="@drawable/oc_login_username_edit_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_username">
<EditText
android:id="@+id/et_phone_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="15dp"
android:autofillHints=""
android:background="@null"
android:hint="@string/username_input_error1"
android:inputType="textPersonName"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_sms"
android:layout_marginStart="@dimen/dp_40"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_pwd_title_text_top_margin"
android:text="@string/sms_code"
android:textColor="#4F4F4F"
android:textSize="13sp"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llSmS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_sms">
app:layout_constraintTop_toBottomOf="@+id/clTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/yjl_login_bg"
android:layout_marginTop="13dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/oc_login_username_edit_bg"
app:layout_constraintBottom_toBottomOf="@+id/clSms"
app:layout_constraintEnd_toStartOf="@+id/clSms"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/clSms">
<EditText
android:id="@+id/et_sms_code"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="5dp"
android:autofillHints=""
android:background="@null"
android:hint="@string/sixVC"
android:inputType="number"
android:maxLines="1"
android:padding="5dp"
android:textColor="@color/black_4F4F4F"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clSms"
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/fw_sms_bg"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="24dp"
android:text="@string/BindAccount"
android:textColor="@color/black"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_goneMarginStart="28dp" />
<TextView
android:id="@+id/tv_sms_code"
<TextView
android:id="@+id/tv_account"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="20dp"
android:text="@string/phone_number"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title"
/>
<LinearLayout
android:id="@+id/llPhoneNumber"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:background="@drawable/login_et_bg_selector"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_account"
app:layout_constraintTop_toBottomOf="@+id/tv_account">
<EditText
android:id="@+id/et_phone_number"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:autofillHints=""
android:background="@null"
android:hint="@string/username_input_error1"
android:inputType="textPersonName"
android:maxLines="1"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="@string/sms_code"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/llPhoneNumber"
app:layout_constraintTop_toBottomOf="@+id/llPhoneNumber" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llSmS"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="35dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_account"
app:layout_constraintTop_toBottomOf="@+id/tv_sms"
android:background="@drawable/login_et_bg_selector"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/clSms"
app:layout_constraintEnd_toStartOf="@+id/clSms"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/clSms">
<EditText
android:id="@+id/et_sms_code"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:autofillHints=""
android:background="@null"
android:hint="@string/sixVC"
android:inputType="number"
android:maxLines="1"
android:padding="5dp"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clSms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:padding="5dp"
android:text="@string/send_sms_code"
android:textColor="#B36C1B"
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_sms_code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:padding="5dp"
android:text="@string/send_sms_code"
android:textColor="#FF0291D3"
android:textSize="13sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/btn_band"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:paddingTop="@dimen/layout_login_tv_login_top_padding"
android:paddingBottom="@dimen/layout_login_tv_login_bottom_padding"
android:text="@string/binding"
android:textColor="#fff"
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/llSmS"
app:layout_constraintStart_toStartOf="@+id/llSmS"
app:layout_constraintTop_toBottomOf="@+id/llSmS" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/btn_band"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_login_tv_login_start_margin"
android:layout_marginTop="80dp"
android:layout_marginEnd="@dimen/layout_login_tv_login_end_margin"
android:layout_marginBottom="@dimen/layout_login_tv_login_bottom_margin"
android:background="@drawable/oc_change_psw_bg"
android:gravity="center"
android:paddingTop="@dimen/layout_login_tv_login_top_padding"
android:paddingBottom="@dimen/layout_login_tv_login_bottom_padding"
android:text="@string/binding"
android:textColor="#B36C1B"
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/oc_index_bg">
android:background="#FF6FA2FA">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
android:layout_width="match_parent"
@ -11,214 +11,173 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="43dp"
android:layout_marginStart="37dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiBack"
android:id="@+id/dogHead"
android:layout_width="166dp"
android:layout_height="166dp"
android:src="@mipmap/login_earth_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginEnd="16dp"
/>
<TextView
android:id="@+id/tv_welcome_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_back"
android:padding="5dp"
android:layout_marginStart="15dp"
android:text="@string/HelloWelcomeChangepsw"
android:textColor="@color/white"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
android:layout_marginTop="90dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_welcome_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_marginStart="40dp"
android:text="@string/change_password"
android:textColor="#B36C1B"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/clTitle"
app:layout_constraintTop_toBottomOf="@+id/clTitle" />
<TextView
android:id="@+id/tv_original_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="23dp"
android:text="@string/original_password"
android:textColor="#4F4F4F"
android:textSize="13sp"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_welcome_back" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llOldPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginEnd="35dp"
android:layout_marginTop="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_original_password"
app:layout_constraintTop_toBottomOf="@+id/tv_original_password"
android:background="@drawable/oc_login_username_edit_bg"
>
<EditText
android:id="@+id/et_original_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:layout_marginEnd="10dp"
android:background="@null"
android:hint="@string/please_input_password"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/cb_original_password_hide"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/cb_original_password_hide"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginEnd="10dp"
android:button="@null"
android:gravity="center"
android:drawableBottom="@drawable/hide_pwd_cb_selector"
app:layout_constraintBottom_toBottomOf="@+id/et_original_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/et_original_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_original_password_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_username_input_err_tip_text_top_margin"
android:textColor="@color/warring"
android:textSize="@dimen/layout_login_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/llOldPassword" />
<TextView
android:id="@+id/tv_new_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/new_password"
android:textColor="#4F4F4F"
android:textSize="13sp"
app:layout_constraintStart_toStartOf="@+id/tv_original_password"
app:layout_constraintTop_toBottomOf="@+id/tv_original_password_error" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llNewPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginEnd="35dp"
android:layout_marginTop="5dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_new_password"
app:layout_constraintTop_toBottomOf="@+id/tv_new_password"
android:background="@drawable/oc_login_username_edit_bg"
>
<EditText
android:id="@+id/et_new_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:layout_marginEnd="10dp"
android:background="@null"
android:hint="@string/please_input_password_check"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/cb_new_password_hide"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/cb_new_password_hide"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginEnd="10dp"
android:button="@null"
android:gravity="center"
android:drawableBottom="@drawable/hide_pwd_cb_selector"
app:layout_constraintBottom_toBottomOf="@+id/et_new_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/et_new_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_new_password_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_username_input_err_tip_text_top_margin"
android:textColor="@color/warring"
android:textSize="@dimen/layout_login_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="@+id/llNewPassword"
app:layout_constraintTop_toBottomOf="@+id/llNewPassword" />
<LinearLayout
android:visibility="gone"
android:layout_marginTop="@dimen/dp_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_40"
android:gravity="center"
android:orientation="horizontal"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_new_password_error">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clTitle"
android:background="@drawable/yjl_login_bg"
android:layout_marginTop="13dp"
>
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/ic_info_outline_white_48dp" />
<TextView
android:id="@+id/tv_original_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/first_psw_note"
android:layout_marginTop="24dp"
android:layout_marginStart="28dp"
android:text="@string/original_password"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llOldPassword"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginEnd="35dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_original_password"
app:layout_constraintTop_toBottomOf="@+id/tv_original_password"
android:background="@drawable/login_et_bg_selector"
>
<EditText
android:id="@+id/et_original_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:background="@null"
android:hint="@string/please_input_password"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/cb_original_password_hide"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/cb_original_password_hide"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginEnd="10dp"
android:button="@null"
android:gravity="center"
android:drawableBottom="@drawable/hide_pwd_cb_selector"
app:layout_constraintBottom_toBottomOf="@+id/et_original_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/et_original_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_new_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="@string/new_password"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/llOldPassword"
app:layout_constraintTop_toBottomOf="@+id/llOldPassword" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llNewPassword"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="5dp"
android:background="@drawable/login_et_bg_selector"
app:layout_constraintEnd_toEndOf="@+id/llOldPassword"
app:layout_constraintStart_toStartOf="@+id/tv_new_password"
app:layout_constraintTop_toBottomOf="@+id/tv_new_password">
<EditText
android:id="@+id/et_new_password"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:background="@null"
android:hint="@string/please_input_password_check"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/cb_new_password_hide"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<CheckBox
android:id="@+id/cb_new_password_hide"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginEnd="10dp"
android:button="@null"
android:drawableBottom="@drawable/hide_pwd_cb_selector"
android:gravity="center"
app:layout_constraintBottom_toBottomOf="@+id/et_new_password"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/et_new_password" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_change"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:paddingTop="@dimen/layout_login_tv_login_top_padding"
android:paddingBottom="@dimen/layout_login_tv_login_bottom_padding"
android:text="@string/confirm_the_changes"
android:textColor="@color/white"
android:textSize="13sp" />
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/llNewPassword"
app:layout_constraintStart_toStartOf="@+id/llNewPassword"
app:layout_constraintTop_toBottomOf="@+id/llNewPassword" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_change"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="@dimen/layout_login_tv_login_end_margin"
android:background="@drawable/oc_change_psw_bg"
android:gravity="center"
android:paddingTop="@dimen/layout_login_tv_login_top_padding"
android:paddingBottom="@dimen/layout_login_tv_login_bottom_padding"
android:text="@string/confirm_the_changes"
android:textColor="@color/white"
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/llNewPassword" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,133 +4,122 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/oc_index_bg">
android:background="#FF6FA2FA">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_40"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="37dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiBack"
android:id="@+id/dogHead"
android:layout_width="166dp"
android:layout_height="166dp"
android:src="@mipmap/login_earth_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginEnd="16dp"
/>
<TextView
android:id="@+id/tv_welcome_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:padding="5dp"
android:src="@drawable/ic_mode_back"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/HelloWelcomeForPsw"
android:textColor="@color/white"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
android:layout_marginTop="90dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clTitle">
<TextView
android:id="@+id/tv_welcome_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginTop="@dimen/layout_login_welcome_text_top_margin"
android:text="@string/forget_pwd"
android:textColor="@color/orange_B36C1B"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/clTitle"
android:background="@drawable/yjl_login_bg"
>
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="23dp"
android:layout_marginTop="24dp"
android:layout_marginStart="28dp"
android:text="@string/phone_and_email"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_username_title_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_welcome_back" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
/>
<LinearLayout
android:id="@+id/llUserName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginTop="5dp"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="35dp"
android:background="@drawable/oc_login_username_edit_bg"
android:background="@drawable/login_et_bg_selector"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintStart_toStartOf="@+id/tv_username"
app:layout_constraintTop_toBottomOf="@+id/tv_username">
<EditText
android:id="@+id/et_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="15dp"
android:layout_height="match_parent"
android:autofillHints=""
android:background="@null"
android:hint="@string/username_input_error1"
android:inputType="textPersonName"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_username_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_username_input_err_tip_text_top_margin"
android:textColor="@color/orange_B36C1B"
android:textSize="@dimen/layout_login_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/llUserName" />
<TextView
android:id="@+id/tv_sms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="@string/sms_code"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_pwd_title_textsize"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_username"
app:layout_constraintTop_toBottomOf="@+id/tv_username_error"
app:layout_constraintTop_toBottomOf="@+id/llUserName"
tools:ignore="MissingConstraints" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llSmS"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_sms">
app:layout_constraintEnd_toEndOf="@+id/llUserName"
app:layout_constraintStart_toStartOf="@+id/tv_sms"
app:layout_constraintTop_toBottomOf="@+id/tv_sms"
android:background="@drawable/login_et_bg_selector"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/oc_login_username_edit_bg"
app:layout_constraintBottom_toBottomOf="@+id/clSMStv"
app:layout_constraintEnd_toStartOf="@+id/clSMStv"
app:layout_constraintStart_toStartOf="parent"
@ -139,18 +128,15 @@
<EditText
android:id="@+id/et_sms_code"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="5dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:autofillHints=""
android:background="@null"
android:hint="@string/sixVC"
android:inputType="number"
android:maxLines="1"
android:padding="5dp"
android:textColor="@color/black_4F4F4F"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
@ -164,10 +150,10 @@
android:id="@+id/clSMStv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/fw_sms_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toTopOf="parent"
>
<TextView
android:id="@+id/send_sms_tv"
@ -179,8 +165,9 @@
android:layout_marginBottom="8dp"
android:padding="5dp"
android:text="@string/send_sms_code"
android:textColor="#B36C1B"
android:textSize="13sp"
android:textColor="#FF0291D3"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@ -195,38 +182,34 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_pwd_title_text_top_margin"
android:text="@string/new_password"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_pwd_title_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_sms"
app:layout_constraintTop_toBottomOf="@+id/llSmS" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:background="@drawable/oc_login_username_edit_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
android:background="@drawable/login_et_bg_selector"
app:layout_constraintEnd_toEndOf="@+id/llSmS"
app:layout_constraintStart_toStartOf="@+id/tv_sms"
app:layout_constraintTop_toBottomOf="@+id/tv_password">
<EditText
android:id="@+id/et_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:autofillHints=""
android:hint="@string/new_password"
android:background="@null"
android:hint="@string/new_password"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
@ -253,39 +236,35 @@
android:id="@+id/tv_password_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginTop="18dp"
android:text="@string/new_password_check"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_pwd_title_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_password_error" />
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_sms"
app:layout_constraintTop_toBottomOf="@+id/llPassword" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llNewPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="35dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="35dp"
android:background="@drawable/oc_login_username_edit_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:background="@drawable/login_et_bg_selector"
app:layout_constraintEnd_toEndOf="@+id/llPassword"
app:layout_constraintStart_toStartOf="@+id/tv_sms"
app:layout_constraintTop_toBottomOf="@+id/tv_password_check">
<EditText
android:id="@+id/et_password_check"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
android:layout_marginBottom="10dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:autofillHints=""
android:background="@null"
android:hint="@string/new_password_check"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="@color/black_4F4F4F"
android:textColor="#000"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
@ -307,21 +286,10 @@
app:layout_constraintTop_toTopOf="@+id/et_password_check" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_password_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/warring"
android:textSize="@dimen/layout_login_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/llPassword" />
<TextView
android:id="@+id/tv_change_password"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_login_tv_login_start_margin"
android:layout_marginEnd="@dimen/layout_login_tv_login_end_margin"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:paddingTop="@dimen/layout_login_tv_login_top_padding"
@ -331,8 +299,8 @@
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="@+id/llNewPassword"
app:layout_constraintStart_toStartOf="@+id/llNewPassword"
app:layout_constraintTop_toBottomOf="@+id/llNewPassword" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -67,8 +67,8 @@
<EditText
android:id="@+id/et_username"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="35dp"
android:autofillHints=""
android:background="@drawable/login_et_bg_selector"
@ -85,98 +85,87 @@
app:layout_constraintStart_toStartOf="@+id/tv_username"
app:layout_constraintTop_toBottomOf="@+id/tv_username" />
<TextView
android:id="@+id/tv_username_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_register_username_input_err_tip_text_top_margin"
android:textColor="@color/warring"
android:layout_marginStart="35dp"
android:textSize="@dimen/layout_register_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_username" />
<TextView
android:id="@+id/smsCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_pwd_title_text_top_margin"
android:layout_marginTop="18dp"
android:text="@string/sms_code"
android:textColor="#4F4F4F"
android:textSize="@dimen/layout_login_username_title_textsize"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_username"
app:layout_constraintTop_toBottomOf="@+id/tv_username_error"
app:layout_constraintTop_toBottomOf="@+id/et_username"
/>
<LinearLayout
android:id="@+id/llSmsCode"
android:layout_marginStart="@dimen/layout_login_et_start_margin"
android:layout_marginTop="@dimen/layout_login_et_top_margin"
android:layout_marginEnd="@dimen/layout_login_et_end_margin"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/smsCode"
app:layout_constraintEnd_toEndOf="@+id/et_username"
app:layout_constraintStart_toStartOf="@+id/smsCode"
app:layout_constraintTop_toBottomOf="@+id/smsCode">
>
<EditText
android:maxLength="6"
android:id="@+id/et_sms_code"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.6"
android:layout_height="wrap_content"
android:background="@drawable/login_et_bg_selector"
android:maxLines="1"
android:inputType="number"
android:textColor="#4F4F4F"
android:textSize="16sp"
android:textStyle="bold"
android:hint="@string/correctCode"
android:inputType="number"
android:maxLength="6"
android:maxLines="1"
android:textColor="#4F4F4F"
android:textColorHint="#BDBDBD"
/>
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_marginLeft="20dp"
android:id="@+id/tv_sms_code"
android:layout_width="0dp"
android:layout_weight="0.4"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_weight="0.4"
android:gravity="center"
android:padding="@dimen/dp_10"
android:text="@string/SendVerificationCode"
android:textColor="@color/orange_B36C1B"
android:text="@string/ObtainVerificationCode"
android:textColor="#FF0291D3"
android:textSize="@dimen/layout_login_tv_login_textsize"
android:textStyle="bold"
/>
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/tv_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_register_pwd_title_text_top_margin"
android:layout_marginTop="18dp"
android:text="@string/password"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_username_title_textsize"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_username"
app:layout_constraintTop_toBottomOf="@+id/llSmsCode" />
<EditText
android:id="@+id/et_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_register_et_start_margin"
android:layout_marginTop="@dimen/layout_register_et_top_margin"
android:layout_marginEnd="@dimen/layout_register_et_end_margin"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:background="@drawable/login_et_bg_selector"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="#4F4F4F"
android:textSize="@dimen/layout_register_et_textsize"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:textColorHint="#BDBDBD"
android:hint="@string/please_input_password"
app:layout_constraintEnd_toEndOf="@+id/llSmsCode"
app:layout_constraintStart_toStartOf="@+id/tv_password"
app:layout_constraintTop_toBottomOf="@+id/tv_password" />
<CheckBox
android:id="@+id/cb_password_hide"
@ -195,27 +184,28 @@
android:id="@+id/tv_password_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_register_pwd_title_text_top_margin"
android:layout_marginTop="18dp"
android:text="@string/password_check"
android:textColor="@color/black_4F4F4F"
android:textSize="@dimen/layout_login_username_title_textsize"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/tv_password"
app:layout_constraintTop_toBottomOf="@+id/et_password" />
<EditText
android:id="@+id/et_password_check"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/layout_register_et_start_margin"
android:layout_marginTop="@dimen/layout_register_et_top_margin"
android:layout_marginEnd="@dimen/layout_register_et_end_margin"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="8dp"
android:background="@drawable/login_et_bg_selector"
android:inputType="textPassword"
android:maxLines="1"
android:textColor="#4F4F4F"
android:textSize="@dimen/layout_register_et_textsize"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:hint="@string/please_input_password"
app:layout_constraintEnd_toEndOf="@+id/et_password"
app:layout_constraintStart_toStartOf="@+id/tv_password_check"
app:layout_constraintTop_toBottomOf="@+id/tv_password_check" />
<CheckBox
@ -230,34 +220,22 @@
app:layout_constraintBottom_toBottomOf="@+id/et_password_check"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/et_password_check" />
<TextView
android:id="@+id/tv_password_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_register_username_input_err_tip_text_top_margin"
android:layout_marginStart="35dp"
android:textColor="@color/warring"
android:textSize="@dimen/layout_register_username_input_err_tip_textsize"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_password_check" />
<TextView
android:id="@+id/tv_register"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginTop="10dp"
android:layout_marginStart="@dimen/layout_register_tv_login_start_margin"
android:layout_marginEnd="@dimen/layout_register_tv_login_end_margin"
android:layout_marginBottom="@dimen/layout_register_tv_login_bottom_margin"
android:layout_marginTop="20dp"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:text="@string/register"
android:textColor="@color/black"
android:textSize="@dimen/layout_register_tv_login_textsize"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="@id/llBt"
app:layout_constraintBottom_toTopOf="@+id/llBt"
app:layout_constraintEnd_toEndOf="@+id/et_password_check"
app:layout_constraintStart_toStartOf="@+id/et_password_check"
app:layout_constraintTop_toBottomOf="@+id/et_password_check" />
<LinearLayout

View File

@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/oc_index_bg"
android:background="#FF6FA2FA"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
@ -24,11 +24,12 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:tint="#FF333333"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B36C1B"
android:textColor="#FF333333"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@ -40,439 +41,170 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clVerSionUpdate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/yjl_setting_user_bg"
android:layout_marginTop="30dp"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="31dp"
android:visibility="gone"
android:background="@drawable/oc_setting_lo_bg"
>
<TextView
android:id="@+id/tvVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/VersionUp"
android:textColor="#5A2B31"
android:textSize="16sp"
android:layout_marginTop="22dp"
android:layout_marginStart="21dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/nowVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="22dp"
android:text="@string/VersionUp"
android:textColor="#828282"
android:textSize="11sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/tvVersion"
app:layout_constraintTop_toBottomOf="@+id/tvVersion" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiLo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="21dp"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/nowVersion"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvVersion" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/VersionStr"
android:textColor="#828282"
android:textSize="11sp"
app:layout_constraintBottom_toBottomOf="@+id/aiLo"
app:layout_constraintEnd_toStartOf="@+id/aiLo"
app:layout_constraintTop_toTopOf="@+id/aiLo" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLanguageSwitching"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="31dp"
android:background="@drawable/oc_setting_lo_bg"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLanguageSwitchingStr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_width="46dp"
android:layout_height="46dp"
android:src="@mipmap/yjl_usericon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
>
<TextView
android:id="@+id/tvLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@string/LanguageSwitchingStr"
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/aiLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/tvLanguage"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvLanguage" />
<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/aiLanguage"
app:layout_constraintEnd_toStartOf="@+id/aiLanguage"
app:layout_constraintTop_toTopOf="@+id/aiLanguage" />
</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"
>
<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
android:id="@+id/clChushihua"
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/clSwitching"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
>
<TextView
android:id="@+id/tvChushihua"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@string/InitializationRepair"
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/aiChushihua"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/tvChushihua"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvChushihua" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clDelete"
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/clChushihua"
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/tvDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@string/deleteStr"
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/aiDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/tvDelete"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvDelete" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clApplicationModeTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="31dp"
android:visibility="gone"
android:background="@drawable/oc_setting_lo_bg"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clApplicationModeTitleStr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="22dp"
>
<TextView
android:id="@+id/TVApplicationModeTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ApplicationMode"
android:textColor="#5A2B31"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/TVApplicationModeTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/allow_all_apps"
android:textColor="#5A2B31"
android:textSize="13sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/TVApplicationModeTitle"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aittt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/clApplicationModeTitleStr" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/llControlApplication"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="22dp"
android:layout_marginBottom="22dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clApplicationModeTitleStr"
>
<TextView
android:id="@+id/TVControlApplication"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/AccessControlApplication"
android:textColor="#5A2B31"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/TVControlApplicationTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="10dp"
android:text="@string/ConfigurePermissions"
android:textColor="#5A2B31"
android:textSize="13sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/TVControlApplication"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiTVControlApplication"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/TVControlApplication" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:layout_marginTop="31dp"
android:background="@drawable/oc_setting_lo_bg"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clServiceTerms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
>
<TextView
android:id="@+id/tvServiceTerms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@string/ServiceTerms"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:textColor="#5A2B31"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiServiceTerms"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/tvServiceTerms"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvServiceTerms" />
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/LineView"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E59E4D"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clServiceTerms"
android:layout_marginStart="20dp"
android:layout_marginTop="14dp"
android:layout_marginBottom="14dp"
/>
<TextView
android:id="@+id/tvUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:drawablePadding="5dp"
android:drawableRight="@drawable/ic_s_arrow_right"
android:text="AAAAA"
android:layout_marginEnd="28dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/yjl_setting_user_bg"
android:layout_marginTop="30dp"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clyszc"
android:id="@+id/clChanPsw"
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/LineView"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="20dp"
android:background="@drawable/press_effect"
>
<TextView
android:id="@+id/tvyszc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="@string/PrivacyPolicy"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/change_password"
android:textSize="14sp"
android:textColor="#FF333333"
android:textStyle="bold"
android:padding="5dp"
app:layout_constraintStart_toStartOf="parent"
android:textColor="#5A2B31"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="20dp"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiyszc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_xy"
app:layout_constraintBottom_toBottomOf="@+id/tvyszc"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tvyszc" />
android:src="@drawable/ic_s_arrow_right"
android:layout_marginEnd="28dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clFowdPsw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clChanPsw"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/forgetPwds"
android:textSize="14sp"
android:textColor="#FF333333"
android:textStyle="bold"
android:padding="5dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="20dp"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/ic_s_arrow_right"
android:layout_marginEnd="28dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clDeletePsw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clFowdPsw"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/deleteStr"
android:textSize="14sp"
android:textColor="#FF333333"
android:textStyle="bold"
android:padding="5dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="20dp"
/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/ic_s_arrow_right"
android:layout_marginEnd="28dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvExit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ExitNumber"
android:layout_gravity="center"
android:layout_marginTop="70dp"
android:gravity="center"
android:paddingTop="18dp"
android:paddingBottom="18dp"
android:layout_marginStart="13dp"
android:layout_marginEnd="13dp"
android:textColor="#FF333333"
android:textSize="14sp"
android:background="@drawable/yjl_setting_user_bg"
/>
</LinearLayout>

View File

@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/ui_bg"
>
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
android:layout_marginLeft="0dp"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:layout_marginRight="0dp"
android:layout_marginBottom="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
</FrameLayout>
<LinearLayout
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="59dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@color/translate"
android:orientation="horizontal"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivHome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/yjl_vip_page_choose"
android:layout_weight="1"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivCenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/yjl_user_page"
android:layout_weight="1"
/>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivVip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/yjl_vip_page"
android:layout_weight="1"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,135 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/translate"
>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clContentView"
android:layout_width="350dp"
android:layout_height="400dp"
android:layout_margin="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/oc_activity_add_group_bg"
<TextView
android:id="@+id/tvNewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="150dp"
android:gravity="center"
android:text="AAA"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.core.widget.NestedScrollView
android:id="@+id/contentNet"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@+id/tvMySee"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvNewTitle"
>
<LinearLayout
android:id="@+id/noticeTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tvDogHead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/oc_dog_head"
android:layout_marginStart="21dp"
android:layout_marginTop="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/LatestAnnouncement"
android:textColor="#B36C1B"
android:textSize="16sp"
android:layout_marginStart="12dp"
android:textStyle="bold"
app:layout_constraintStart_toEndOf="@+id/tvDogHead"
app:layout_constraintTop_toTopOf="@+id/tvDogHead"
app:layout_constraintBottom_toBottomOf="@+id/tvDogHead"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:layout_marginTop="@dimen/dp_10"
android:id="@+id/tv_notice_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:autoLink="web"
android:textColor="@color/black_4F4F4F"
android:textSize="12sp" />
<TextView
android:layout_marginTop="5dp"
android:id="@+id/tv_notice_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
android:autoLink="web"
android:textColor="@color/black_4F4F4F"
android:textSize="12sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dp_10"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="20dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:text="@string/close"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/tv_sure"
android:id="@+id/tv_notice_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
android:background="@drawable/oc_login_bg"
android:layout_height="match_parent"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:autoLink="web"
android:maxHeight="200dp"
android:layout_gravity="center"
android:maxLines="100"
android:gravity="center"
android:text="@string/ReadAlready"
android:textColor="@color/white"
android:textColor="#FF333333"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@+id/noticeTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="24dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
<TextView
android:id="@+id/tvMySee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="28dp"
android:layout_marginTop="10dp"
android:gravity="center"
android:text="AAA"
android:textColor="#fff"
android:textSize="14sp"
android:textStyle="bold"
android:paddingStart="24dp"
android:paddingEnd="24dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="20dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/icActivityClose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clContentView"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="20dp"
android:layout_marginTop="@dimen/dp_15"
app:srcCompat="@drawable/ic_close_activity"
app:tint="#8FE2F5" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -5,161 +5,288 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription,MissingConstraints">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/clBtShow"
>
<TextView
android:id="@+id/tvTimeInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/YkStr"
app:layout_constraintBottom_toTopOf="@+id/llTime"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="10dp"
android:textSize="18sp"
android:textColor="#B36C1B"
/>
<LinearLayout
android:id="@+id/llTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="15dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/iv_accelerate"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/expire_date"
android:visibility="gone"
android:textColor="@color/orange_B36C1B"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_end_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textColor="@color/orange_FF8A04"
android:textSize="16sp"
android:textStyle="bold"
android:drawableRight="@drawable/ic_refresh"
android:drawablePadding="5dp"
/>
</LinearLayout>
<ImageView
android:id="@+id/iv_accelerate"
android:layout_width="match_parent"
android:layout_height="0dp"
android:clickable="true"
android:focusable="true"
android:scaleType="centerInside"
android:src="@drawable/accelerate_iv_selector"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_percent="0.50"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="0dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clBtShow"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="40dp"
android:layout_marginStart="60dp"
android:layout_marginEnd="60dp"
android:background="@drawable/node_choose"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/CurrentRoute"
android:textColor="#B9B9B9"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="20dp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tvAiNodes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="15dp"
android:textColor="#FE9C35"
android:textSize="16sp"
android:text="@string/AIRoute"
android:textStyle="bold"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvAiNodes"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="15dp"
android:orientation="horizontal"
android:layout_marginTop="2dp"
android:gravity="center"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
>
<TextView
android:id="@+id/tvDelayMs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/delayDefault"
android:textColor="#6ECB6C"
android:textSize="15sp"
android:textStyle="bold"
android:layout_marginStart="20dp"
/>
<View
android:layout_width="5dp"
android:layout_height="5dp"
android:background="@drawable/node_clrle"
android:layout_gravity="center"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
/>
<TextView
android:id="@+id/tvCurrent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/RecommendedRoutes"
android:textColor="#CECECE"
android:textSize="15sp"
android:textStyle="bold"
android:maxLines="1"
android:ellipsize="end"
android:layout_marginEnd="20dp"
/>
</LinearLayout>
tools:ignore="ContentDescription,MissingConstraints"
android:background="@mipmap/yjl_home_bkg"
>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clUserCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="34dp"
android:layout_marginEnd="12dp"
android:background="@drawable/yjl_home_user_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/userIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="15dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:src="@mipmap/yjl_usericon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/userIcon"
app:layout_constraintEnd_toStartOf="@+id/clGetVip"
app:layout_constraintStart_toEndOf="@+id/userIcon"
app:layout_constraintTop_toTopOf="@+id/userIcon">
<TextView
android:id="@+id/tvUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/ic_s_copy"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text=""
android:textColor="#FF333333"
android:textSize="16sp" />
<TextView
android:id="@+id/tvUserTimeEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:drawableRight="@drawable/ic_refresh"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text=""
android:textColor="#FFF96B10"
android:textSize="16sp" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clGetVip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:background="@drawable/yjl_user_link_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvVipGet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:drawableRight="@drawable/yjl_home_back"
android:text="@string/GORecharge"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLinks"
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/clUserCard"
android:layout_marginTop="30dp"
>
<TextView
android:id="@+id/tvYjl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="44dp"
android:text="@string/wf"
android:textColor="#FF000000"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/tvClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/tvYjl"
android:layout_marginTop="20dp"
android:text="@string/LinkJS"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:textColor="#FFA9A9A9"
android:textSize="16sp"
android:textStyle="bold"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/tvClick"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivCustomService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="17dp"
android:src="@drawable/home_kf_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivAccelerate"
android:layout_width="250dp"
android:layout_height="250dp"
android:src="@mipmap/yjl_home_clink_bg"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-2dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/clProxy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="horizontal"
android:background="@drawable/oc_proxy_bg"
app:layout_constraintTop_toBottomOf="@+id/clLinks"
android:layout_marginTop="16dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:visibility="visible"
>
<TextView
android:id="@+id/tvIntelligentMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/oc_proxy_choose_bg"
android:layout_weight="1"
android:text="@string/IntelligentMode"
android:gravity="center"
android:textColor="#FF006AFB"
android:paddingTop="12dp"
android:paddingBottom="12dp"
/>
<TextView
android:id="@+id/tvGlobalMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/GlobalMode"
android:gravity="center"
android:textColor="#FF000000"
android:paddingTop="10dp"
android:paddingBottom="10dp"
/>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clNode"
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/clProxy"
android:background="@drawable/yjl_home_node_bg"
android:layout_marginTop="16dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="visible"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivNodeImg"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/yjl_node_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="14sp"
android:layout_marginTop="13dp"
android:layout_marginBottom="13dp"
/>
<TextView
android:id="@+id/tvNodeStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/CurrentRoute"
android:textColor="#FF333333"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/aivNodeImg"
app:layout_constraintStart_toEndOf="@+id/aivNodeImg"
app:layout_constraintTop_toTopOf="@+id/aivNodeImg"
/>
<TextView
android:id="@+id/tvNodeName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/CurrentRoute"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:textColor="#FF333333"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintBottom_toBottomOf="@+id/tvNodeStr"
app:layout_constraintEnd_toStartOf="@+id/appCompatImageView"
app:layout_constraintStart_toEndOf="@+id/tvNodeStr"
app:layout_constraintTop_toTopOf="@+id/tvNodeStr" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/appCompatImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="17dp"
android:src="@drawable/yjl_home_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,294 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription,MissingConstraints"
android:background="@mipmap/yjl_home_bkg"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="34dp"
android:layout_marginEnd="12dp"
android:background="@drawable/yjl_home_user_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/userIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="15dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:src="@mipmap/yjl_usericon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/userIcon"
app:layout_constraintEnd_toStartOf="@+id/clGetVip"
app:layout_constraintStart_toEndOf="@+id/userIcon"
app:layout_constraintTop_toTopOf="@+id/userIcon">
<TextView
android:id="@+id/tvUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/ic_s_copy"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FF333333"
android:textSize="16sp" />
<TextView
android:id="@+id/tvUserTimeEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:drawableRight="@drawable/ic_refresh"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FFF96B10"
android:textSize="16sp" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clGetVip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:background="@drawable/yjl_user_link_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvVipGet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:drawableRight="@drawable/yjl_home_back"
android:text="@string/GORecharge"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/tvClick"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivCustomService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="17dp"
android:src="@drawable/home_kf_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="16dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivAccelerate"
android:layout_width="204dp"
android:layout_height="203dp"
android:src="@mipmap/yjl_home_clink_bg"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-3dp" />
<TextView
android:id="@+id/lineTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/NotConnected"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#FF000000"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/tvYjl"
android:layout_marginBottom="14dp"
android:text="@string/LinkJS"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:textColor="#FFA9A9A9"
android:textSize="16sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/tvYjl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="44dp"
android:text="@string/wf"
android:textColor="#FF000000"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/clProxy"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<LinearLayout
android:id="@+id/clProxy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:orientation="horizontal"
android:background="@drawable/oc_proxy_bg"
app:layout_constraintBottom_toTopOf="@+id/clNode"
android:layout_marginBottom="22dp"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:visibility="visible"
>
<TextView
android:id="@+id/tvIntelligentMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/oc_proxy_choose_bg"
android:layout_weight="1"
android:text="@string/IntelligentMode"
android:gravity="center"
android:textColor="#FF006AFB"
android:paddingTop="12dp"
android:paddingBottom="12dp"
/>
<TextView
android:id="@+id/tvGlobalMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/GlobalMode"
android:gravity="center"
android:textColor="#FF000000"
android:paddingTop="10dp"
android:paddingBottom="10dp"
/>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clNode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/yjl_home_node_bg"
android:layout_marginBottom="21dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:visibility="visible"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivNodeImg"
android:layout_width="25dp"
android:layout_height="25dp"
android:src="@drawable/yjl_node_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="14sp"
android:layout_marginTop="13dp"
android:layout_marginBottom="13dp"
/>
<TextView
android:id="@+id/tvNodeStr"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/CurrentRoute"
android:textColor="#FF333333"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/aivNodeImg"
app:layout_constraintStart_toEndOf="@+id/aivNodeImg"
app:layout_constraintTop_toTopOf="@+id/aivNodeImg"
/>
<TextView
android:id="@+id/tvNodeName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/CurrentRoute"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:textColor="#FF333333"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintBottom_toBottomOf="@+id/tvNodeStr"
app:layout_constraintEnd_toStartOf="@+id/appCompatImageView"
app:layout_constraintStart_toEndOf="@+id/tvNodeStr"
app:layout_constraintTop_toTopOf="@+id/tvNodeStr" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/appCompatImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="17dp"
android:src="@drawable/yjl_home_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -245,7 +245,7 @@
android:paddingTop="15dp"
android:paddingBottom="15dp"
android:text="@string/register"
android:textColor="@color/orange_B36C1B"
android:textColor="#FF000000"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="@+id/tv_login"
app:layout_constraintStart_toStartOf="@+id/tv_login"

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/clTop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:id="@+id/llLine"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:orientation="vertical"
android:background="@drawable/img_click_effect"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/user_uplog_icon" />
<TextView
android:id="@+id/itemName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:text=""
android:textColor="#000000"
android:textSize="16sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@mipmap/oc_index_bg"
android:background="@drawable/yjl_setting_bg"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
@ -13,7 +13,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="48dp"
android:layout_marginTop="12dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aiBack"
@ -21,6 +21,7 @@
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_back"
android:padding="5dp"
android:visibility="gone"
android:layout_marginStart="15dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@ -29,7 +30,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B36C1B"
android:textColor="#FF333333"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
@ -37,18 +38,16 @@
android:text="@string/recharge"
android:textSize="18sp"
/>
<TextView
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/tvRechargeRecord"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B36C1B"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:text="@string/recharge_record"
android:textSize="18sp"
android:src="@drawable/vip_lsjl"
android:padding="5dp"
android:layout_marginEnd="15dp"
android:layout_marginEnd="20dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
@ -71,113 +70,344 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/setting_head_bg"
app:layout_constraintBottom_toBottomOf="@+id/appCompatImageView3"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="25dp"
android:layout_marginTop="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/payTips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/payTips"
android:layout_marginStart="20dp"
android:layout_marginTop="13dp"
android:textColor="#B36C1B"
android:textSize="13sp"
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/userIcon"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/yjl_usericon"
android:layout_marginTop="18dp"
android:layout_marginBottom="18dp"
android:layout_marginStart="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/payTips2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/payTips2"
android:layout_marginStart="20dp"
android:layout_marginTop="5dp"
android:textColor="#FF8A04"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/payTips"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="13dp"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@+id/userIcon"
app:layout_constraintEnd_toStartOf="@+id/aivStart"
app:layout_constraintTop_toTopOf="@+id/userIcon"
app:layout_constraintBottom_toBottomOf="@+id/userIcon"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
>
<TextView
android:id="@+id/tvUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FF333333"
android:textSize="16sp"
android:maxLines="1"
android:ellipsize="end"
android:drawableRight="@drawable/ic_s_copy"
android:drawablePadding="5dp"
/>
<TextView
android:id="@+id/tvUserTimeEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FFF96B10"
android:textSize="16sp"
android:layout_marginTop="10dp"
android:maxLines="1"
android:ellipsize="end"
android:drawableRight="@drawable/ic_refresh"
android:drawablePadding="5dp"
/>
</LinearLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivStart"
android:layout_width="49dp"
android:layout_height="49dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBaseline_toBottomOf="parent"
android:layout_marginEnd="5dp"
app:layout_constraintEnd_toEndOf="parent"
android:src="@mipmap/vipbg"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/appCompatImageView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="28dp"
android:background="@mipmap/oc_rectangle_dog"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:text="@string/SelectDuration"
android:textColor="@color/black_4F4F4F"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/clUser"
app:layout_constraintTop_toBottomOf="@+id/clUser" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/MultiTerminal"
android:textColor="@color/black_4F4F4F"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@+id/textView3"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toTopOf="@+id/textView3"
/>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeLayout"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginBottom="20dp"
android:layout_marginEnd="@dimen/dp_10"
app:layout_constraintBottom_toTopOf="@+id/tvPay"
app:layout_constraintTop_toBottomOf="@+id/textView3"
android:background="@drawable/yjl_login_bg"
app:layout_constraintBottom_toTopOf="@+id/clButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clUser"
android:layout_marginBottom="12dp"
>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvRechargeList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<TextView
android:id="@+id/tvPay"
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp"
android:text="@string/SelectDuration"
android:textColor="@color/black_4F4F4F"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/clCustomTxt"
app:layout_constraintTop_toBottomOf="@+id/textView3"
tools:layout_editor_absoluteX="10dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvRechargeList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clCustomTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/tvPay"
android:layout_marginBottom="14dp"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivNosee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/vector_notice_pick"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginStart="16dp"
/>
<TextView
android:id="@+id/tvTxtShow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aivNosee"
android:text="@string/VipSerTxt"
android:layout_marginStart="5dp"
android:textColor="#FF333333"
android:textSize="14sp"
android:padding="5dp"
/>
<TextView
android:id="@+id/tvTxtShowLink"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginEnd="5dp"
android:text="@string/LinekCustom"
android:textColor="#FFFC4863"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/tvTxtShow"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvPay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="14dp"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:paddingTop="13dp"
android:paddingBottom="13dp"
android:text="开通VIP (¥36.8)"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginBottom="26dp"
android:background="@drawable/oc_login_bg"
android:gravity="center"
android:paddingTop="13dp"
android:paddingBottom="13dp"
android:text="开通VIP (¥36.8)"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintBottom_toBottomOf="parent"
android:background="@drawable/yjl_login_bg"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivTabTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/img_line_bg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginStart="70dp"
android:layout_marginEnd="70dp"
android:layout_marginTop="8dp"
/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/aivTabTxt"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:gravity="center"
android:orientation="horizontal"
android:layout_marginTop="10dp"
android:layout_marginBottom="8dp"
>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/buton_a" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/jstime"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/jstimeStr"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/linearLayout2"
app:layout_constraintStart_toEndOf="@+id/linearLayout"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/buton_b" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/jstime"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/jstimeStr"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_c" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/jstime"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@string/jstimeStr"
android:textColor="#FF5E2A12"
android:textSize="14sp"
/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -7,7 +7,7 @@
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@mipmap/oc_index_bg"
tools:context=".act.NewMainActivity">
tools:context=".act.MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"

View File

@ -0,0 +1,323 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/yjl_setting_bg">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="24dp"
>
<TextView
android:id="@+id/tvSetting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:textSize="18sp"
android:textStyle="bold"
android:textColor="#FF333333"
android:text="@string/userCenter"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clUserPage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="17dp"
android:layout_marginEnd="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/clTitle">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/userIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="15dp"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:src="@mipmap/yjl_usericon"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/userIcon"
app:layout_constraintEnd_toStartOf="@+id/clGetVip"
app:layout_constraintStart_toEndOf="@+id/userIcon"
app:layout_constraintTop_toTopOf="@+id/userIcon">
<TextView
android:id="@+id/tvUserName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableRight="@drawable/ic_s_copy"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FF333333"
android:textSize="16sp" />
<TextView
android:id="@+id/tvUserTimeEnd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:drawableRight="@drawable/ic_refresh"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
android:textColor="#FFF96B10"
android:textSize="16sp" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clGetVip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tvVipGet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:drawableRight="@drawable/small_bing"
android:text="@string/BindAccount"
android:textColor="#FF643E00"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/clUserPage"
android:background="@drawable/yjl_login_bg"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="8dp"
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clVipCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="15dp"
android:background="@drawable/user_center_vip_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:src="@drawable/yjl_vip_hg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivvipCad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:src="@drawable/vip_cart_txt"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aivA"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvEndTimes"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:text="AAA"
android:textColor="#FFB3B3B3"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/goGetVip"
app:layout_constraintStart_toEndOf="@+id/aivvipCad"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/goGetVip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginEnd="17dp"
android:layout_marginBottom="20dp"
android:background="@drawable/givip_bg"
android:paddingStart="10dp"
android:paddingTop="8dp"
android:paddingEnd="10dp"
android:paddingBottom="8dp"
android:text="@string/TopUpNow"
android:textColor="#FF333333"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/shareCard"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/setting_share_bg"
app:layout_constraintEnd_toEndOf="@+id/clVipCard"
app:layout_constraintStart_toStartOf="@+id/clVipCard"
app:layout_constraintTop_toBottomOf="@+id/clVipCard">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/aivshareimg"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="10dp"
android:src="@mipmap/shareicons"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
/>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/aivshareimg"
app:layout_constraintEnd_toStartOf="@+id/goSee"
>
<TextView
android:id="@+id/tvShareText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawablePadding="5dp"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/shareTime"
android:textColor="#FF333333"
android:textSize="16sp" />
<TextView
android:id="@+id/tvxa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:drawablePadding="4dp"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/getTimes"
android:textColor="#FFB0B0B0"
android:textSize="12sp" />
</LinearLayout>
<TextView
android:id="@+id/goSee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginEnd="17dp"
android:layout_marginBottom="20dp"
android:background="@drawable/givip_see_bg"
android:paddingStart="10dp"
android:paddingTop="8dp"
android:paddingEnd="10dp"
android:paddingBottom="8dp"
android:text="@string/TopUpNowSee"
android:textColor="#FFFFFFFF"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tvService"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mySerVice"
android:textColor="#FF000000"
android:layout_marginTop="20dp"
android:textSize="13sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/shareCard"
app:layout_constraintTop_toBottomOf="@+id/shareCard" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvSettingTab"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/tvVersion"
app:layout_constraintTop_toBottomOf="@+id/tvService"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
/>
<TextView
android:id="@+id/tvVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:layout_marginTop="20dp"
android:textSize="13sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="20dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/yjl_home_page_select"
android:title="@string/forget_pwd"/>
<item
android:id="@+id/navigation_setting"
android:icon="@drawable/yjl_user_page_select"
android:title="@string/forget_pwd"/>
<item
android:id="@+id/navigation_my"
android:icon="@drawable/yjl_vip_page_select"
android:title="@string/forget_pwd"/>
</menu>

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Some files were not shown because too many files have changed in this diff Show More