diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f4bd709..c905cc5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,7 +14,7 @@ plugins { dependencies { implementation(fileTree(mapOf("dir" to "src/main/libs", "include" to listOf("*.aar")))) implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") -// implementation(files("src\\main\\libs\\Baidu_ocpc_action_2_7_2.aar")) + implementation(files("src\\main\\libs\\Baidu_ocpc_action_2_7_2.aar")) // implementation(files("src\\main\\libs\\OpenInstall.jar")) // implementation("com.google.firebase:firebase-crashlytics-buildtools:3.0.2") // implementation(files("src/main/libs/openinstall.jar")) @@ -188,6 +188,7 @@ android { jvmTarget = "17" // 或者改为 "1.8" } defaultConfig { + vectorDrawables.useSupportLibrary = true ndk { abiFilters.add("arm64-v8a") abiFilters.add("armeabi-v7a") diff --git a/app/src/main/java/com/yingmao/clash/act/BandPhoneActivity.kt b/app/src/main/java/com/yingmao/clash/act/BandPhoneActivity.kt index aa737ab..ff85fd1 100644 --- a/app/src/main/java/com/yingmao/clash/act/BandPhoneActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/BandPhoneActivity.kt @@ -11,6 +11,8 @@ import android.widget.Toast import androidx.appcompat.widget.AppCompatImageView import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.observe +import com.baidu.mobads.action.ActionType +import com.baidu.mobads.action.BaiduAction import com.yingmao.clash.view.dialog.RxDialogShapeLoading import com.tencent.mmkv.MMKV @@ -141,7 +143,7 @@ class BandPhoneActivity : BaseActivity() { MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_TOKEN) MMKV.defaultMMKV().removeValueForKey(BZYConstants.MMKV_KEY_CURRENT_NODE) //百度埋点完成注册 -// BaiduAction.logAction(ActionType.REGISTER) + BaiduAction.logAction(ActionType.REGISTER) val intent=Intent(CommonUtils.getApp(), LoginActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK startActivity(intent) diff --git a/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt b/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt index 2c7bdac..4531428 100644 --- a/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/ChangeNodeActivity.kt @@ -22,6 +22,8 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener import com.chad.library.adapter.base.BaseQuickAdapter import com.cncat.vpn.common.constants.Intents import com.cncat.vpn.common.log.Log +import com.cncat.vpn.core.Clash +import com.cncat.vpn.core.model.TunnelState import com.cncat.vpn.service.remote.IRemoteService import com.google.gson.Gson import com.google.gson.JsonParser @@ -39,6 +41,7 @@ import com.yingmao.clash.entity.ClashNodebBean 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.listener.AsyncCallBackListener import com.yingmao.clash.remote.Resource import com.yingmao.clash.util.Utils import com.yingmao.clash.view.RxToast @@ -46,10 +49,12 @@ import com.yingmao.clash.view.adapter.NodeListAdapter import com.yingmao.clash.view.dialog.DialogDoMainChoose import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit +import okhttp3.Response import java.util.UUID class ChangeNodeActivity : BaseActivity(), View.OnClickListener { @@ -73,6 +78,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { var getNodeTimeOutNum = 5 var isRunDing = false var dialogDoMainChoose: DialogDoMainChoose? = null + var proList: MutableList? = null var nowSubUrl: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -129,10 +135,14 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { if(!clashRunning){ setBackground(ProxyMode.PAC) MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_GLOBAL_MODEL, false) + checkGlo() }else{ RxToast.info(resources.getString(R.string.closeRunningChoose)) } - + if(clashRunning){ + RxToast.info(resources.getString(R.string.SwitchingSourceModel)) + return@setOnClickListener + } } tvProj.setOnClickListener { @@ -475,8 +485,9 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { when (proxyMode) { ProxyMode.PAC -> { + isGlo = false - tvProA.setBackgroundResource(R.drawable.oc_proxy_choose_bg) + tvProA.setBackgroundResource(R.drawable.yil_node_proxy_choose_bg) tvProj.setBackgroundResource(0) sendMode(false) } @@ -484,7 +495,7 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { ProxyMode.GLOBAL -> { isGlo = true tvProA.setBackgroundResource(0) - tvProj.setBackgroundResource(R.drawable.oc_proxy_choose_bg) + tvProj.setBackgroundResource(R.drawable.yil_node_proxy_choose_bg) sendMode(true) } } @@ -553,4 +564,136 @@ class ChangeNodeActivity : BaseActivity(), View.OnClickListener { enum class ProxyMode { PAC, GLOBAL } + private fun checkGlo() { + 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 + } + setBackground(px) + + launch(Dispatchers.IO) { + if (isGlobal) { + if (clashRunning) { + getNodes() + } + } else { + if (clashRunning) { + delay(1000) + clashBinder?.let { cm -> + val names = cm.queryProxyGroupNames(false) + Log.i("checkGlo names==>${names}") + if (names.isNotEmpty()) { + val selectedName = + MMKV.defaultMMKV() + .decodeString(BZYConstants.NODE_SELECTED_NAME_KEY, ""); + Log.i("selected_name ==>${selectedName}") + if (!TextUtils.isEmpty(selectedName)) { + val o = cm.queryOverride(Clash.OverrideSlot.Session) + o.mode = TunnelState.Mode.Rule + cm.patchOverride(Clash.OverrideSlot.Session, o) + delay(500) + var gName = names[0] + //全局模式下 names[0]会自动添加一个 "GLOBAL" 组 + if (names.size >= 2) { + if ("GLOBAL" == gName) { + //names[0] 为 "GLOBAL" //names[1]才是规则模式下的组名,所以需要手动赋值 + gName = names[1] + } + } + cm.patchSelector(gName, selectedName!!) + + } + } + } + } + } + } + } + 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)) { + subUrl?.let { + changeNodeVM.getNodeOther(it, object : AsyncCallBackListener { + override fun suc(obj: Any?) { + proList = obj as MutableList + proList?.let { proListItem -> + val nodeName = proListItem[0].name + if (!TextUtils.isEmpty(nodeName)) { + launch(Dispatchers.IO) { + clashBinder?.let { cm -> + + val o = cm.queryOverride(Clash.OverrideSlot.Session) + o.mode = TunnelState.Mode.Global + cm.patchOverride(Clash.OverrideSlot.Session, o) + delay(3000) + //等待全局模式生效 + var maxIndex = 0 + while (true) { + if (maxIndex > 3) { + break + } + val names = cm.queryProxyGroupNames(false) + if (names.isNotEmpty()) { + if (names[0] == "GLOBAL") { + Log.d("repeat end") + break + } + } + Log.d("repeat agent") + maxIndex++ + delay(1000) + } + + cm.patchSelector("GLOBAL", nodeName) + } + } + } + } + } + + + override fun faild(response: Response) { + } + + override fun err(msg: String, exception: Exception?) { + } + + }) + } + } else { + clashBinder?.let { cm -> + val o = cm.queryOverride(Clash.OverrideSlot.Session) + o.mode = TunnelState.Mode.Global + cm.patchOverride(Clash.OverrideSlot.Session, o) + delay(3000) + //等待全局 + var maxIndex = 0 + while (true) { + if (maxIndex > 3) { + break + } + val names = cm.queryProxyGroupNames(false) + if (names.isNotEmpty()) { + if (names[0] == "GLOBAL") { + Log.d("repeat end") + break + } + } + Log.d("repeat agent") + maxIndex++ + delay(1000) + } + + cm.patchSelector("GLOBAL", selectedName!!) + } + } + } + } } diff --git a/app/src/main/java/com/yingmao/clash/act/ChangeNodeVM.kt b/app/src/main/java/com/yingmao/clash/act/ChangeNodeVM.kt index e24a3f1..013e315 100644 --- a/app/src/main/java/com/yingmao/clash/act/ChangeNodeVM.kt +++ b/app/src/main/java/com/yingmao/clash/act/ChangeNodeVM.kt @@ -4,11 +4,20 @@ package com.yingmao.clash.act import com.tencent.mmkv.MMKV import com.yingmao.clash.base.PublicViewMode import com.cncat.vpn.common.log.Log +import com.google.gson.Gson import com.yingmao.clash.conf.BZYConstants +import com.yingmao.clash.entity.ClashNodebBean import com.yingmao.clash.entity.NodesRsp +import com.yingmao.clash.listener.AsyncCallBackListener import com.yingmao.clash.net.http.HttpApi import com.yingmao.clash.net.http.HttpReqType import com.yingmao.clash.net.http.NetService +import okhttp3.OkHttpClient +import okhttp3.Request +import org.yaml.snakeyaml.Yaml +import java.math.BigDecimal +import kotlin.collections.get +import kotlin.text.split class ChangeNodeVM : PublicViewMode() { fun getAirNodes(){ @@ -24,4 +33,72 @@ class ChangeNodeVM : PublicViewMode() { httpApi.getAirportNode(params) } } + fun getNodeOther(url: String, listener: AsyncCallBackListener) { + Log.d("get_Node_Other start") + val client = OkHttpClient() + try { + val request = Request.Builder() + .url(url) + .header("User-Agent", "ClashforWindows/0.19.23") + .build() + + client.newCall(request).execute().use { response -> + if (!response.isSuccessful || response.headers["subscription-userinfo"] == null) return + + var upload: Long = 0 + var download: Long = 0 + var total: Long = 0 + var expire: Long = 0 + + val userinfo = response.headers["subscription-userinfo"] + if (response.isSuccessful && userinfo != null) { + + val flags = userinfo.split(";") + for (flag in flags) { + val info = flag.split("=") + when { + info[0].contains("upload") && info[1].isNotEmpty() -> upload = + BigDecimal(info[1]).longValueExact() + + info[0].contains("download") && info[1].isNotEmpty() -> download = + BigDecimal(info[1]).longValueExact() + + info[0].contains("total") && info[1].isNotEmpty() -> total = + BigDecimal(info[1]).longValueExact() + + info[0].contains("expire") && info[1].isNotEmpty() -> { + if (info[1].isNotEmpty()) { + expire = (info[1].toDouble() * 1000).toLong() + } + } + } + } + Log.d("upload==>${upload}, download==>${download}, total==>${total}, expire==>${expire}") + response.body?.let { + val respStr = it.string() + val conf = Yaml().loadAs(respStr, HashMap::class.java) + val proxies = conf["proxies"] + proxies?.let { pro -> + + val proList = pro as ArrayList<*> + val gson = Gson() + val dataList = mutableListOf() + proList.forEach { item -> + val jo = gson.toJson(item) + val bean = gson.fromJson(jo.toString(), ClashNodebBean::class.java) + dataList.add(bean) + } + listener.suc(dataList) + } + } + } else { + listener.faild(response) + } + } + } catch (e: Exception) { + + e.printStackTrace() + Log.d("e==>" + e.localizedMessage) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt b/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt index 29af72d..929dce1 100644 --- a/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/LoginActivity.kt @@ -2,6 +2,8 @@ package com.yingmao.clash.act import android.annotation.SuppressLint import android.content.Intent +import android.content.res.ColorStateList +import android.graphics.Color import android.net.Uri import android.os.Build import android.os.Bundle @@ -15,6 +17,7 @@ import android.view.View import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.widget.* +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -47,6 +50,7 @@ import kotlinx.coroutines.launch import java.io.File import androidx.core.graphics.toColorInt import androidx.core.net.toUri +import com.google.android.material.floatingactionbutton.FloatingActionButton class LoginActivity : BaseActivity(), View.OnClickListener { private lateinit var loginViewMode: LoginAtyVM @@ -58,6 +62,8 @@ class LoginActivity : BaseActivity(), View.OnClickListener { private lateinit var userAgreementCB: CheckBox private lateinit var loginUserName: String private lateinit var tvRegister: TextView + private lateinit var customService: FloatingActionButton + private var usernameEncrypt = "" private var passwordEncrypt = "" private var userOAID = "" @@ -309,6 +315,10 @@ class LoginActivity : BaseActivity(), View.OnClickListener { startActivity(intent) finish() } + customService=findViewById(R.id.customService) + customService.setOnClickListener { + startActivity(Intent(this@LoginActivity, CustomerServiceWebView::class.java)) + } } private fun initUserAgreementView(userAgreementCB: CheckBox) { diff --git a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt index ea99b3b..1ba92a7 100644 --- a/app/src/main/java/com/yingmao/clash/act/MainActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/MainActivity.kt @@ -5,7 +5,6 @@ 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 @@ -14,6 +13,8 @@ import androidx.lifecycle.ViewModelProvider import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.customview.customView import com.afollestad.materialdialogs.customview.getCustomView +import com.baidu.mobads.action.ActionType +import com.baidu.mobads.action.BaiduAction import com.cncat.vpn.common.log.Log import com.cncat.vpn.core.model.LogMessage import com.cncat.vpn.service.ClashManager @@ -35,7 +36,7 @@ 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.vip.vipFragment import com.yingmao.clash.fragment.home.HomeFragment import com.yingmao.clash.fragment.setting.SettingFragment import com.yingmao.clash.net.http.HttpApi @@ -331,14 +332,18 @@ class MainActivity : BaseActivity() { 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() + val fragments = supportFragmentManager.fragments + for (fragment in fragments) { + when (fragment) { + is HomeFragment -> fragment.setExpireDate() + is SettingFragment -> fragment.setExpireDate() + is vipFragment -> fragment.setExpireDate() + } + } checkPayResultDia?.dismiss() mainAtyVM.getAirNodes() RxToast.info(resources.getString(R.string.SuccessfullyUpdatedUserInformation)) + mainAtyVM.getExpensesRecord(mPageInfo) } }else if(checkLoginRsp.code == -2){ RxToast.info(resources.getString(R.string.LoginOut)) @@ -426,6 +431,7 @@ class MainActivity : BaseActivity() { android.util.Log.i("reqType:","data:::"+it.code) if(it.code==200){ //上报百度支付功能 + BaiduAction.logAction(ActionType.PURCHASE) } } } @@ -725,8 +731,8 @@ class MainActivity : BaseActivity() { 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) + aivCenter.setImageResource(R.drawable.yjl_user_page) + aivVip.setImageResource(R.drawable.yjl_vip_page_choose) // startActivityForResult( // Intent(this@MainActivity, MemberRechargeActivity::class.java), // REQUEST_CODE_PAY_WEB_VIEW_ACTIVITY diff --git a/app/src/main/java/com/yingmao/clash/act/MemberRechargeActivity.kt b/app/src/main/java/com/yingmao/clash/act/MemberRechargeActivity.kt index 07313c5..9258d50 100644 --- a/app/src/main/java/com/yingmao/clash/act/MemberRechargeActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/MemberRechargeActivity.kt @@ -3,6 +3,7 @@ package com.yingmao.clash.act import android.annotation.SuppressLint import android.content.Intent import android.graphics.Color +import android.os.Build import android.os.Bundle import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView @@ -59,6 +60,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.text.DecimalFormat +import java.text.SimpleDateFormat +import java.util.Locale class MemberRechargeActivity : BaseActivity() { private lateinit var aiBack: AppCompatImageView @@ -76,6 +79,10 @@ class MemberRechargeActivity : BaseActivity() { //stripePay 支付 private var paymentIntentClientSecret: String = "" private lateinit var mainAtyVM: MainAtyVM + + private lateinit var tvUserName: TextView + private lateinit var tvUserTimeEnd: TextView + private lateinit var tvTxtShowLink:TextView private val stripe: Stripe by lazy { Stripe( this@MemberRechargeActivity, @@ -95,6 +102,11 @@ class MemberRechargeActivity : BaseActivity() { 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) + + tvUserName.text=userName + setExpireDate() //获取充值列表 val username = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_REMEMBER_USERNAME,"")!! val phToken = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_PH_TOKEN,"")!! @@ -109,6 +121,9 @@ class MemberRechargeActivity : BaseActivity() { tvPay=findViewById(R.id.tvPay) tvRechargeRecord=findViewById(R.id.tvRechargeRecord) clCustom=findViewById(R.id.clCustom) + tvUserName=findViewById(R.id.tvUserName) + tvUserTimeEnd=findViewById(R.id.tvUserTimeEnd) + tvTxtShowLink=findViewById(R.id.tvTxtShowLink) swipeLayout.setColorSchemeColors(Color.rgb(47, 223, 189)) swipeLayout.setOnRefreshListener { selectedGrade = null @@ -118,7 +133,9 @@ class MemberRechargeActivity : BaseActivity() { val userId = MMKV.defaultMMKV().decodeString(BZYConstants.MMKV_KEY_USER_ID)!! viewModel.getPhRechargeInfo(username, phToken, userId) } - + tvTxtShowLink.setOnClickListener { + startActivity(Intent(this@MemberRechargeActivity, CustomerServiceWebView::class.java)) + } aiBack.setOnClickListener { val intent=Intent() this.setResult(1000,intent) @@ -531,4 +548,71 @@ class MemberRechargeActivity : BaseActivity() { } } } + fun setExpireDate() { + val isExpire = checkExpire() + var endTimeInfo = "--" + if (isExpire) { + endTimeInfo = resources.getString(R.string.AccountExpired) + } else { + val validPeriod = MMKV.defaultMMKV().decodeLong(BZYConstants.MMKV_KEY_VPN_VALID_PERIOD) + 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 + } } \ No newline at end of file diff --git a/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt b/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt index 9e363e0..2e18547 100644 --- a/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/SettingActivity.kt @@ -163,6 +163,7 @@ class SettingActivity : BaseActivity() { if (clashRunning) { stopClashService() } + clashRunning=false mainAtyVM.stopHeartBeat() cleanProfile() val intent=Intent(CommonUtils.getApp(), LoginActivity::class.java) diff --git a/app/src/main/java/com/yingmao/clash/act/ShareActivity.kt b/app/src/main/java/com/yingmao/clash/act/ShareActivity.kt index 434af6a..5c31541 100644 --- a/app/src/main/java/com/yingmao/clash/act/ShareActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/ShareActivity.kt @@ -22,7 +22,6 @@ class ShareActivity : BaseActivity() { private lateinit var shareBtn: View private lateinit var aiBack: AppCompatImageView private lateinit var tvShareContent:TextView - private lateinit var tvShareUrl:TextView private var shareUrl:String? = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -46,9 +45,6 @@ class ShareActivity : BaseActivity() { (it.rsp as AppShareInfoRsp).let { data -> if (data.code == 1000) { tvShareContent.text = data.data?.shareInfo - val replaceStr = data.data?.shareUrl.toString() - .replace("您的专属链接为:", "您的专属链接为:\n") - tvShareUrl.text =replaceStr shareUrl = data.data?.shareUrl shareBtn.visibility = View.VISIBLE } else { @@ -65,7 +61,6 @@ class ShareActivity : BaseActivity() { } private fun initView() { tvShareContent= findViewById(R.id.tv_share_conetent) - tvShareUrl = findViewById(R.id.tv_share_url) shareBtn = findViewById(R.id.tv_share_btn) aiBack=findViewById(R.id.aiBack) aiBack.setOnClickListener { diff --git a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt index 905b0b2..fcbe68a 100644 --- a/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt +++ b/app/src/main/java/com/yingmao/clash/act/SplashActivity.kt @@ -21,6 +21,9 @@ import androidx.core.content.FileProvider import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import com.afollestad.materialdialogs.MaterialDialog +import com.baidu.mobads.action.ActionType +import com.baidu.mobads.action.BaiduAction +import com.baidu.mobads.action.PrivacyStatus import com.cncat.vpn.service.ClashManager import com.cncat.vpn.service.remote.IClashManager import com.cncat.vpn.service.remote.wrap @@ -130,12 +133,19 @@ class SplashActivity : BaseActivity() { username = Utils.getUniqueID(this) MainApplication.initUtil() val oaId = OAID - Log.i("SplashActOAID", "OAID::" + OAID + "oaId.isEmpty()::" + oaId.isEmpty()) - if(oaId.isEmpty()) { - if (DeviceID.supportedOAID(this)) { + Log.i("SplashActOAID","OAID::"+OAID+"oaId.isEmpty()::"+oaId.isEmpty()) + if(oaId.isEmpty()){ + if (DeviceID.supportedOAID(this)){ val aynOAID = DeviceIdentifier.getOAID(this) - OAID = aynOAID + OAID=aynOAID + BaiduAction.setOaid(aynOAID) + //设置同意隐私政策激活设备 + BaiduAction.setPrivacyStatus(PrivacyStatus.AGREE) } + }else{ + BaiduAction.setOaid(oaId) + //设置同意隐私政策激活设备 + BaiduAction.setPrivacyStatus(PrivacyStatus.AGREE) } setLocalLanguage() val clashBinder = MainApplication.getApp()?.let { diff --git a/app/src/main/java/com/yingmao/clash/app/MainApplication.kt b/app/src/main/java/com/yingmao/clash/app/MainApplication.kt index f56e923..c51121c 100644 --- a/app/src/main/java/com/yingmao/clash/app/MainApplication.kt +++ b/app/src/main/java/com/yingmao/clash/app/MainApplication.kt @@ -9,6 +9,7 @@ import android.content.res.Configuration import android.os.Build import androidx.annotation.RequiresApi import androidx.core.content.getSystemService +import com.baidu.mobads.action.BaiduAction import com.cncat.vpn.common.Global import com.cncat.vpn.common.compat.currentProcessName import com.cncat.vpn.common.log.Log @@ -20,6 +21,7 @@ import com.orhanobut.logger.Logger import com.stripe.android.PaymentConfiguration import com.tencent.mmkv.MMKV import com.yingmao.clash.R +import com.yingmao.clash.conf.Constants import com.yingmao.clash.entity.UserData import com.yingmao.clash.util.CrashCatchHandler import com.yingmao.clash.util.clashDir @@ -129,7 +131,13 @@ class MainApplication : Application() { Global.init(mApp) val keepRootDir = MMKV.initialize(mApp) Logger.i("MMKV_ROOT_DIR:$keepRootDir") - + // 是否在控制台输出⽇志,可⽤于观察⽤⼾⾏为⽇志上报情况,建议仅在调试时使⽤,release版 请设置为false ! + BaiduAction.setPrintLog(false) + // 是否允许通过应用商店获取referrer信息,仅支持华为、小米;默认true + BaiduAction.enableMarketReferrer(true) + BaiduAction.init(this, Constants.USER_ACTION_SET_ID, Constants.APP_SECRET_KEY) + // 设置应用激活的间隔,此方法在初始化成功后才有意义,建议在初始化后执行,具体执行的时机没有限制 + BaiduAction.setActivateInterval(this, 7) } private fun extractGeoFiles() { clashDir.mkdirs() diff --git a/app/src/main/java/com/yingmao/clash/base/BaseActivity.kt b/app/src/main/java/com/yingmao/clash/base/BaseActivity.kt index 0fa33f2..90f6972 100644 --- a/app/src/main/java/com/yingmao/clash/base/BaseActivity.kt +++ b/app/src/main/java/com/yingmao/clash/base/BaseActivity.kt @@ -49,7 +49,7 @@ open class BaseActivity : AppCompatActivity(), CoroutineScope by MainScope(), Br override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED //竖屏 + requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT //竖屏 StatusBarUtils.with(this).init() window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR diff --git a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt index c7b755b..2788817 100644 --- a/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt +++ b/app/src/main/java/com/yingmao/clash/fragment/home/HomeFragment.kt @@ -274,7 +274,7 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa if (checkExpire()) { if (isAdded) { MaterialDialog(requireContext()).show { - this.cancelable(false) + this.cancelable(true) cornerRadius(res = R.dimen.dp_10) customView( R.layout.expired_recharge__layout, @@ -287,6 +287,12 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa goNewRecharge() dismiss() } + + getCustomView().findViewById(R.id.aivClose) + .setOnClickListener { + dismiss() + } + } } return@setOnClickListener @@ -515,13 +521,12 @@ open class HomeFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispa @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - android.util.Log.i("AAAAAAAAAAAAAAA","data:::${data}") if (requestCode == 2) { nodeChooseBase(data) } } - @SuppressLint("SimpleDateFormat") + @SuppressLint("SimpleDateFormat", "LongLogTag") fun setExpireDate() { val isExpire = checkExpire() var endTimeInfo = "--" diff --git a/app/src/main/java/com/yingmao/clash/fragment/recharge/adapter/VIPRechargeAdapter.kt b/app/src/main/java/com/yingmao/clash/fragment/recharge/adapter/VIPRechargeAdapter.kt index b4a8ede..30a0da7 100644 --- a/app/src/main/java/com/yingmao/clash/fragment/recharge/adapter/VIPRechargeAdapter.kt +++ b/app/src/main/java/com/yingmao/clash/fragment/recharge/adapter/VIPRechargeAdapter.kt @@ -57,10 +57,9 @@ class VIPRechargeAdapter : RecyclerView.Adapter{ initializationRepair() } + 10->{ + startActivity(Intent(requireContext(), CustomerServiceWebView::class.java)) + } } } diff --git a/app/src/main/java/com/yingmao/clash/fragment/vip/vipFragment.kt b/app/src/main/java/com/yingmao/clash/fragment/vip/vipFragment.kt index f6d30d8..bc34236 100644 --- a/app/src/main/java/com/yingmao/clash/fragment/vip/vipFragment.kt +++ b/app/src/main/java/com/yingmao/clash/fragment/vip/vipFragment.kt @@ -1,4 +1,4 @@ -package com.yingmao.clash.fragment.activity +package com.yingmao.clash.fragment.vip import android.annotation.SuppressLint import android.content.Context @@ -11,7 +11,6 @@ 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.core.net.toUri @@ -36,6 +35,7 @@ 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 import com.yingmao.clash.act.MainActivity.Companion.isSubbed import com.yingmao.clash.act.MainActivity.Companion.profileBinder import com.yingmao.clash.conf.BZYConstants @@ -78,7 +78,7 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers private lateinit var rvRechargeList:RecyclerView private lateinit var tvPay:TextView private lateinit var tvRechargeRecord:AppCompatImageView - private lateinit var clCustom: ConstraintLayout + private lateinit var clCustomTxt: ConstraintLayout private var selectedGrade: Grade? = null private lateinit var rxDialogShapeLoading: RxDialogShapeLoading @@ -96,6 +96,9 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers PaymentConfiguration.getInstance(requireContext()).publishableKey ) } + companion object { + var isTopup = false + } private val mPageInfo = ExpensesRecordActivity.PageInfo() @@ -138,7 +141,7 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers rvRechargeList=view.findViewById(R.id.rvRechargeList) tvPay=view.findViewById(R.id.tvPay) tvRechargeRecord=view.findViewById(R.id.tvRechargeRecord) - clCustom=view.findViewById(R.id.clCustom) + clCustomTxt=view.findViewById(R.id.clCustomTxt) tvUserName=view.findViewById(R.id.tvUserName) tvUserTimeEnd=view.findViewById(R.id.tvUserTimeEnd) @@ -176,7 +179,7 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers viewModel.pay("1", selectedGrade!!, "pointCard") } - clCustom.setOnClickListener { + clCustomTxt.setOnClickListener { startActivity(Intent(requireActivity(), CustomerServiceWebView::class.java)) } } @@ -242,6 +245,7 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers if (rsp.data != null) { when (rsp.data.payModel) { 1000 -> { + isTopup=true val orderInfo = rsp.data.appFormat if(orderInfo!=null){ CoroutineScope(Dispatchers.IO).launch { @@ -276,6 +280,7 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers } } 0->{ + isTopup=true startActivity(Intent(Intent.ACTION_VIEW, rsp.data.payUrl?.toUri())) } } @@ -641,4 +646,17 @@ class vipFragment : BaseFragment(), CoroutineScope by CoroutineScope(Dispatchers return true } + override fun onResume() { + super.onResume() + if(isTopup){ + goMainCheck() + isTopup=false + } + } + private fun goMainCheck() { + if (activity != null) { + val uiMainActivity = activity as MainActivity + uiMainActivity.goCheckLogin() + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yingmao/clash/view/adapter/NodeListAdapter.kt b/app/src/main/java/com/yingmao/clash/view/adapter/NodeListAdapter.kt index ba975d7..5ef5ac2 100644 --- a/app/src/main/java/com/yingmao/clash/view/adapter/NodeListAdapter.kt +++ b/app/src/main/java/com/yingmao/clash/view/adapter/NodeListAdapter.kt @@ -30,11 +30,9 @@ class NodeListAdapter(layoutResId: Int) : val nodeListItem = holder.getView(R.id.rl_node_list_item) val nodeCheckMrb = holder.getView(R.id.mrb_node_checked) if (holder.layoutPosition == selectedPosition) { - nodeListItem.isSelected = true - nodeCheckMrb.isSelected = true + nodeCheckMrb.setImageResource(R.drawable.check_img_select) } else { - nodeListItem.isSelected = false - nodeCheckMrb.isSelected = false + nodeCheckMrb.setImageResource(R.drawable.check_img) } val nodeNameTv = holder.getView(R.id.node_list_item_tv_node_name) @@ -45,7 +43,7 @@ class NodeListAdapter(layoutResId: Int) : signal.visibility=View.GONE }else{ - signal.visibility=View.VISIBLE + signal.visibility=View.GONE if (item.delay > 0) { if (item.delay >= 65535) { item.delay = Utils.generateRandomTwoDigitNumber(99, 300) diff --git a/app/src/main/libs/Baidu_ocpc_action_2_7_2.aar b/app/src/main/libs/Baidu_ocpc_action_2_7_2.aar new file mode 100644 index 0000000..fbe6a7a Binary files /dev/null and b/app/src/main/libs/Baidu_ocpc_action_2_7_2.aar differ diff --git a/app/src/main/res/drawable/bing_bg.xml b/app/src/main/res/drawable/bing_bg.xml new file mode 100644 index 0000000..f2187df --- /dev/null +++ b/app/src/main/res/drawable/bing_bg.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/check_img.xml b/app/src/main/res/drawable/check_img.xml new file mode 100644 index 0000000..8361164 --- /dev/null +++ b/app/src/main/res/drawable/check_img.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/check_img_select.xml b/app/src/main/res/drawable/check_img_select.xml new file mode 100644 index 0000000..dee207e --- /dev/null +++ b/app/src/main/res/drawable/check_img_select.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/home_node_img_bg.xml b/app/src/main/res/drawable/home_node_img_bg.xml index 337f961..e5c8590 100644 --- a/app/src/main/res/drawable/home_node_img_bg.xml +++ b/app/src/main/res/drawable/home_node_img_bg.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/onlinecustomerservice_icon.xml b/app/src/main/res/drawable/onlinecustomerservice_icon.xml new file mode 100644 index 0000000..579fa6a --- /dev/null +++ b/app/src/main/res/drawable/onlinecustomerservice_icon.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/pay_dialog_bg.xml b/app/src/main/res/drawable/pay_dialog_bg.xml index b5f4256..345fc55 100644 --- a/app/src/main/res/drawable/pay_dialog_bg.xml +++ b/app/src/main/res/drawable/pay_dialog_bg.xml @@ -5,8 +5,8 @@ android:color="#BFD5D5D5" > diff --git a/app/src/main/res/drawable/vip_item_choose_bg.xml b/app/src/main/res/drawable/vip_item_choose_bg.xml new file mode 100644 index 0000000..f3b2642 --- /dev/null +++ b/app/src/main/res/drawable/vip_item_choose_bg.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yil_home_node_bg.xml b/app/src/main/res/drawable/yil_home_node_bg.xml new file mode 100644 index 0000000..e55631b --- /dev/null +++ b/app/src/main/res/drawable/yil_home_node_bg.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yil_node_proxy_bg.xml b/app/src/main/res/drawable/yil_node_proxy_bg.xml new file mode 100644 index 0000000..e1032b2 --- /dev/null +++ b/app/src/main/res/drawable/yil_node_proxy_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yil_node_proxy_choose_bg.xml b/app/src/main/res/drawable/yil_node_proxy_choose_bg.xml new file mode 100644 index 0000000..7fea6a8 --- /dev/null +++ b/app/src/main/res/drawable/yil_node_proxy_choose_bg.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yjl_close_vbg.xml b/app/src/main/res/drawable/yjl_close_vbg.xml new file mode 100644 index 0000000..75a1b65 --- /dev/null +++ b/app/src/main/res/drawable/yjl_close_vbg.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/yjl_logoing_cust.xml b/app/src/main/res/drawable/yjl_logoing_cust.xml new file mode 100644 index 0000000..82fd7f2 --- /dev/null +++ b/app/src/main/res/drawable/yjl_logoing_cust.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + diff --git a/app/src/main/res/drawable/yjl_share_bt_bg.xml b/app/src/main/res/drawable/yjl_share_bt_bg.xml new file mode 100644 index 0000000..44ff9d1 --- /dev/null +++ b/app/src/main/res/drawable/yjl_share_bt_bg.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_change_node.xml b/app/src/main/res/layout/activity_change_node.xml index e35304c..a3e8b89 100644 --- a/app/src/main/res/layout/activity_change_node.xml +++ b/app/src/main/res/layout/activity_change_node.xml @@ -5,7 +5,7 @@ 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" tools:context=".act.ChangeNodeActivity" android:padding="@dimen/dp_10"> @@ -66,17 +67,17 @@ android:layout_marginTop="18dp" app:layout_constraintTop_toBottomOf="@id/node_user_traffic" android:orientation="horizontal" - android:background="@drawable/oc_proxy_bg" + android:background="@drawable/yil_node_proxy_bg" > @@ -87,7 +88,7 @@ android:layout_weight="1" android:text="@string/jsmpri" android:gravity="center" - android:textColor="#B36C1B" + android:textColor="#FF2D2D2D" android:paddingTop="10dp" android:paddingBottom="10dp" /> @@ -102,6 +103,8 @@ app:layout_constraintBottom_toBottomOf="parent" android:layout_marginTop="16dp" android:layout_marginBottom="@dimen/dp_10" + android:layout_marginStart="11dp" + android:layout_marginEnd="11dp" > diff --git a/app/src/main/res/layout/bind_account_dialog_layout.xml b/app/src/main/res/layout/bind_account_dialog_layout.xml index c2e1396..8ac77d7 100644 --- a/app/src/main/res/layout/bind_account_dialog_layout.xml +++ b/app/src/main/res/layout/bind_account_dialog_layout.xml @@ -16,8 +16,8 @@ android:layout_marginRight="20dp" android:gravity="center" android:text="@string/DeviceBinding" - android:textColor="#B36C1B" - android:textSize="18sp" + android:textColor="#FF333333" + android:textSize="20sp" android:textStyle="bold" /> - - + \ No newline at end of file diff --git a/app/src/main/res/layout/customer_service_webview_layout.xml b/app/src/main/res/layout/customer_service_webview_layout.xml index f7748c3..8684eef 100644 --- a/app/src/main/res/layout/customer_service_webview_layout.xml +++ b/app/src/main/res/layout/customer_service_webview_layout.xml @@ -3,7 +3,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" android:id="@+id/root_view" android:orientation="vertical" > diff --git a/app/src/main/res/layout/expired_recharge__layout.xml b/app/src/main/res/layout/expired_recharge__layout.xml index c4693a5..3c3076d 100644 --- a/app/src/main/res/layout/expired_recharge__layout.xml +++ b/app/src/main/res/layout/expired_recharge__layout.xml @@ -1,21 +1,36 @@ - + + android:layout_marginTop="20dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/aivClose" + /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_accelerate.xml b/app/src/main/res/layout/fragment_accelerate.xml index c3cb2de..09e91b4 100644 --- a/app/src/main/res/layout/fragment_accelerate.xml +++ b/app/src/main/res/layout/fragment_accelerate.xml @@ -19,9 +19,7 @@ android:id="@+id/clUserCard" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="12dp" android:layout_marginTop="48dp" - android:layout_marginEnd="12dp" android:background="@drawable/yjl_home_user_bg" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -73,7 +71,7 @@ android:maxLines="1" android:text="" android:textColor="#FFF96B10" - android:textSize="12dp" /> + android:textSize="14sp" /> @@ -174,8 +172,8 @@ @@ -270,7 +268,7 @@ android:id="@+id/tvNodeName" android:layout_width="0dp" android:layout_height="wrap_content" - android:text="@string/CurrentRoute" + android:text="@string/AutomaticSelection" android:textSize="14sp" android:textStyle="bold" android:layout_marginStart="10dp" diff --git a/app/src/main/res/layout/layout_activity_login.xml b/app/src/main/res/layout/layout_activity_login.xml index 5d74a81..c5e39f7 100644 --- a/app/src/main/res/layout/layout_activity_login.xml +++ b/app/src/main/res/layout/layout_activity_login.xml @@ -190,7 +190,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/layout_login_tv_login_start_margin" - android:layout_marginTop="30dp" + android:layout_marginTop="10dp" android:layout_marginEnd="@dimen/layout_login_tv_login_end_margin" android:background="@drawable/oc_login_bg" android:gravity="center" @@ -237,7 +237,7 @@ android:id="@+id/tvRegister" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="18dp" + android:layout_marginTop="10dp" android:background="@drawable/yjl_register_login_bg" android:ellipsize="end" android:gravity="center" @@ -249,7 +249,6 @@ android:textSize="16sp" app:layout_constraintEnd_toEndOf="@+id/tv_login" app:layout_constraintStart_toStartOf="@+id/tv_login" - app:layout_constraintTop_toBottomOf="@+id/tv_login" /> + app:layout_constraintEnd_toEndOf="parent" + android:layout_marginStart="20dp" + android:layout_marginEnd="20dp" + app:layout_constraintTop_toBottomOf="@+id/tvRegister" + android:layout_marginTop="10dp" + /> + - - \ No newline at end of file diff --git a/app/src/main/res/layout/layout_activity_share.xml b/app/src/main/res/layout/layout_activity_share.xml index f48ac62..3c52a4d 100644 --- a/app/src/main/res/layout/layout_activity_share.xml +++ b/app/src/main/res/layout/layout_activity_share.xml @@ -4,8 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:ignore="MissingConstraints" - android:background="@mipmap/oc_index_bg"> + android:background="#FFF"> - - - + + - + android:layout_marginBottom="24dp" + android:text="@string/shareNow" + android:textSize="16sp" + android:textColor="#FFFF961C" + android:textStyle="bold" + android:paddingStart="62dp" + android:paddingEnd="62dp" + android:paddingTop="13dp" + android:paddingBottom="13dp" + android:background="@drawable/yjl_share_bt_bg" + /> + - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/layout_splash_activity.xml b/app/src/main/res/layout/layout_splash_activity.xml index 0b45b09..9bbda0f 100644 --- a/app/src/main/res/layout/layout_splash_activity.xml +++ b/app/src/main/res/layout/layout_splash_activity.xml @@ -38,23 +38,7 @@ android:layout_centerInParent="true" android:indeterminateTint="@color/blue_0136CB" android:visibility="invisible" /> - - + @@ -222,15 +222,17 @@ android:id="@+id/tvTxtShowLink" android:layout_width="0dp" android:layout_height="wrap_content" - android:padding="5dp" android:layout_marginEnd="5dp" + android:padding="5dp" android:text="@string/LinekCustom" android:textColor="#FFFC4863" android:textSize="14sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toEndOf="@+id/tvTxtShow" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0" /> @@ -26,15 +26,17 @@ @@ -43,7 +45,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:layout_marginEnd="@dimen/dp_15" + android:layout_marginEnd="30dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toStartOf="@+id/mrb_node_checked" android:textColor="#0136CB" @@ -56,6 +58,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" + android:visibility="gone" android:contentDescription="@string/qr_pay_note_wx" android:src="@drawable/ic_wifi_powerful" app:layout_constraintBottom_toBottomOf="@+id/node_list_item_tv_node_name" @@ -66,10 +69,8 @@ android:id="@+id/mrb_node_checked" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentEnd="true" - android:layout_centerVertical="true" android:layout_marginEnd="21dp" - android:background="@drawable/home_node_img_bg" + android:src="@drawable/check_img" android:clickable="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/setting_fragment_layout.xml b/app/src/main/res/layout/setting_fragment_layout.xml index 3a8da20..0260cf0 100644 --- a/app/src/main/res/layout/setting_fragment_layout.xml +++ b/app/src/main/res/layout/setting_fragment_layout.xml @@ -34,11 +34,8 @@ 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" + android:layout_marginTop="10dp" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/clTitle"> @@ -46,8 +43,8 @@ android:id="@+id/userIcon" android:layout_width="60dp" android:layout_height="60dp" - android:layout_marginStart="15dp" - android:layout_marginTop="15dp" + android:layout_marginStart="10dp" + android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:src="@mipmap/yjl_usericon" app:layout_constraintBottom_toBottomOf="parent" @@ -73,7 +70,7 @@ android:drawablePadding="5dp" android:ellipsize="end" android:maxLines="1" - android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + android:text="" android:textColor="#FF333333" android:textSize="16sp" /> @@ -86,9 +83,9 @@ android:drawablePadding="5dp" android:ellipsize="end" android:maxLines="1" - android:text="ID:33333AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + android:text="" android:textColor="#FFF96B10" - android:textSize="16sp" /> + android:textSize="14sp" /> @@ -184,9 +181,9 @@ android:id="@+id/goGetVip" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="20dp" + android:layout_marginTop="10dp" android:layout_marginEnd="17dp" - android:layout_marginBottom="20dp" + android:layout_marginBottom="10dp" android:background="@drawable/givip_bg" android:paddingStart="10dp" android:paddingTop="8dp" @@ -263,9 +260,9 @@ android:id="@+id/goSee" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="20dp" + android:layout_marginTop="10dp" android:layout_marginEnd="17dp" - android:layout_marginBottom="20dp" + android:layout_marginBottom="10dp" android:background="@drawable/givip_see_bg" android:paddingStart="10dp" android:paddingTop="8dp" @@ -315,7 +312,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" - android:layout_marginBottom="20dp" + android:layout_marginBottom="10dp" /> diff --git a/app/src/main/res/layout/vip_recharge_list_item_layout.xml b/app/src/main/res/layout/vip_recharge_list_item_layout.xml index ec59f20..640e863 100644 --- a/app/src/main/res/layout/vip_recharge_list_item_layout.xml +++ b/app/src/main/res/layout/vip_recharge_list_item_layout.xml @@ -1,10 +1,13 @@ + android:layout_marginStart="20dp" + android:layout_marginTop="5dp" + > 开通立即享三大权益 加速时间 不限时间 - 你的专属客服当前在线, + 你的专属客服当前在线, 点击为你解答 最新通知 你的会员还有$天到期 @@ -473,4 +473,7 @@ 解锁流媒体 智能连接 ¥ + 版本号 + 线路选择 + 立即分享 \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 27ec862..1109483 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -3,19 +3,16 @@