马上连相关更改

This commit is contained in:
level 2025-06-05 12:02:54 +08:00
parent 46efc5574a
commit 804c309caf
17 changed files with 275 additions and 31 deletions

View File

@ -29,7 +29,8 @@
<!-- 适配Android 14以上 google 上架需要注意相关政策 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.CAMERA"
tools:ignore="PermissionImpliesUnsupportedChromeOsHardware" />
<application
android:name=".app.MainApplication"
android:fullBackupContent="@xml/full_backup_content"

View File

@ -24,7 +24,7 @@ import com.yingmao.clash.util.CommonUtils
import com.yingmao.clash.util.Utils
import com.yingmao.clash.view.RxToast
class BandPhoneActivity : BaseNotTitleActivity() {
class BandPhoneActivity : BaseActivity() {
private lateinit var rxDialogShapeLoading: RxDialogShapeLoading
private lateinit var tv_sms_code: TextView
private lateinit var tv_account: TextView

View File

@ -27,14 +27,13 @@ import com.yingmao.clash.net.http.entity.NormalRspChangePsw
import com.yingmao.clash.view.PasswordTransformationMethodBigDot
import com.yingmao.clash.view.RxToast
class ChangePwdActivity : BaseNotTitleActivity() {
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之后调用
showBack()
setupUI(findViewById<ViewGroup>(android.R.id.content).getChildAt(0))
initView()
}

View File

@ -13,6 +13,7 @@ import android.widget.ImageView
import android.widget.SeekBar
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatImageView
import androidx.lifecycle.ViewModelProvider
import com.yingmao.clash.R
import com.yingmao.clash.base.BaseActivity
@ -28,7 +29,7 @@ import java.util.Timer
import java.util.TimerTask
class ForGetPwdActivity : BaseNotTitleActivity(), SeekBar.OnSeekBarChangeListener,
class ForGetPwdActivity : BaseActivity(), SeekBar.OnSeekBarChangeListener,
CompoundButton.OnCheckedChangeListener {
lateinit var seekBar: SeekBar
@ -45,7 +46,6 @@ class ForGetPwdActivity : BaseNotTitleActivity(), SeekBar.OnSeekBarChangeListene
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_forget_pwd)
showBack()
setupUI(findViewById<ViewGroup>(android.R.id.content).getChildAt(0))
initView()
@ -92,9 +92,9 @@ class ForGetPwdActivity : BaseNotTitleActivity(), SeekBar.OnSeekBarChangeListene
}
}
// findViewById<ImageView>(R.id.iv_back).setOnClickListener {
// onBackPressed()
// }
findViewById<AppCompatImageView>(R.id.aiBack).setOnClickListener {
finish()
}
}
override fun httpSuccess(httpStatus: HttpStatus.Success) {

View File

@ -51,7 +51,9 @@ import com.yingmao.clash.util.PayUtils
import com.yingmao.clash.util.ThreadUtils
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 kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.MainScope
@ -168,8 +170,23 @@ class MemberRechargeActivity : BaseActivity() {
RxToast.info(resources.getString(R.string.selectRechargeAmount))
return@setOnClickListener
}
viewModel.pay("1", selectedGrade!!, "pointCard")
if(BuildConfig.productId=="9788"){
val payConfirm =
PayConfirmDialog(this)
payConfirm.showDialog(this@MemberRechargeActivity)
payConfirm.setOnDialogClickListener(object : PayConfirmDialog.ActivityLinkListener{
override fun onFinishClickListener() {
viewModel.pay("1", selectedGrade!!, "pointCard")
payConfirm.cancel()
}
override fun onCancelClickListener() {
payConfirm.cancel()
}
})
}else{
viewModel.pay("1", selectedGrade!!, "pointCard")
}
}
}

View File

@ -0,0 +1,69 @@
package com.yingmao.clash.view.dialog;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import com.yingmao.clash.R;
import com.yingmao.clash.act.AgreementAndPrivacyActivity;
import com.yingmao.clash.conf.BZYConstants;
public class PayConfirmDialog extends Dialog {
public PayConfirmDialog(Context context) {
super(context);
setContentView(R.layout.pay_confirm_layout);
//设置点击布局外则Dialog消失
setCanceledOnTouchOutside(false);
}
@SuppressLint("SetTextI18n")
public void showDialog(Context context) {
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);
show();
TextView noAgree=findViewById(R.id.tv_pay_cancle);
TextView agree=findViewById(R.id.tv_pay_finish);
noAgree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(activityLinkListener!=null){
activityLinkListener.onCancelClickListener();
}
}
});
agree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(activityLinkListener!=null){
activityLinkListener.onFinishClickListener();
}
}
});
}
/********************** 回调 ************************/
private ActivityLinkListener activityLinkListener;
public void setOnDialogClickListener(ActivityLinkListener activityLinkListener){
this.activityLinkListener = activityLinkListener;
}
public interface ActivityLinkListener{
void onFinishClickListener();
void onCancelClickListener();
}
}

View File

@ -1,17 +1,23 @@
package com.yingmao.clash.webview
import android.annotation.SuppressLint
import android.content.ActivityNotFoundException
import android.content.Intent
import android.graphics.Rect
import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.view.ViewTreeObserver.OnGlobalLayoutListener
import android.webkit.ValueCallback
import android.webkit.WebChromeClient
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.ScrollView
import android.widget.Toast
import androidx.appcompat.widget.AppCompatImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
@ -31,6 +37,7 @@ class CustomerServiceWebView:BaseActivity() {
private lateinit var rootView: LinearLayout
private lateinit var webViewVM: WebViewAtyVM
private var customerServiceHost = ""
// private var fileChooserCallback: ValueCallback<Array<Uri>>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -59,6 +66,26 @@ class CustomerServiceWebView:BaseActivity() {
}
}
}
// csWebView.webChromeClient = object : WebChromeClient() {
// override fun onShowFileChooser(
// webView: WebView?,
// filePathCallback: ValueCallback<Array<Uri>>,
// fileChooserParams: FileChooserParams
// ): Boolean {
// fileChooserCallback?.onReceiveValue(null)
// fileChooserCallback = filePathCallback
//
// val intent = fileChooserParams.createIntent()
// try {
// startActivityForResult(intent, 1001)
// } catch (e: ActivityNotFoundException) {
// fileChooserCallback = null
// Toast.makeText(this@CustomerServiceWebView, "无法打开文件选择器", Toast.LENGTH_SHORT).show()
// return false
// }
// return true
// }
// }
getCustomerServiceUrl()
}
@ -120,4 +147,16 @@ class CustomerServiceWebView:BaseActivity() {
csWebView=findViewById(R.id.csWebView)
rootView=findViewById(R.id.root_view)
}
// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
// super.onActivityResult(requestCode, resultCode, data)
// if (requestCode == 1001) {
// val result =
// if (resultCode == RESULT_OK && data != null) WebChromeClient.FileChooserParams.parseResult(resultCode, data)
// else null
// fileChooserCallback?.onReceiveValue(result)
// fileChooserCallback = null
// } else {
// super.onActivityResult(requestCode, resultCode, data)
// }
// }
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="32dp"
android:height="32dp"
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="#000"/>
</vector>

View File

@ -3,7 +3,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/homeact_linea_bg"
android:orientation="vertical"
>
@ -20,7 +19,7 @@
android:id="@+id/aiBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_back"
android:src="@drawable/ic_mode_black"
android:padding="5dp"
android:layout_marginStart="15dp"
app:layout_constraintStart_toStartOf="parent"
@ -37,7 +36,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="54dp"
android:text="@string/BindAccount"
android:textColor="#4072FE"
android:textColor="#000000"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
/>
@ -49,7 +48,7 @@
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:textColor="#000000"
android:textSize="13sp"
/>
@ -83,7 +82,7 @@
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:textColor="#000000"
android:textSize="13sp"
/>

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="@drawable/homeact_linea_bg">
>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/clTitle"
android:layout_width="match_parent"
@ -17,7 +17,7 @@
android:id="@+id/aiBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_write"
android:src="@drawable/ic_mode_black"
android:padding="5dp"
android:layout_marginStart="15dp"
app:layout_constraintStart_toStartOf="parent"
@ -32,7 +32,7 @@
android:layout_marginTop="40dp"
android:layout_marginStart="40dp"
android:text="@string/change_password"
android:textColor="#4072FE"
android:textColor="#000000"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="@+id/clTitle"
@ -44,7 +44,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="23dp"
android:text="@string/original_password"
android:textColor="#4F4F4F"
android:textColor="#000000"
android:textSize="13sp"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_welcome_back" />
@ -59,7 +59,7 @@
android:maxLines="1"
android:textColor="#4F4F4F"
android:textSize="@dimen/layout_login_et_textsize"
android:hint="@string/correctCode"
android:hint="@string/please_input_original_password"
android:textColorHint="@color/gray_BDBDBD"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
@ -110,6 +110,8 @@
android:background="@drawable/login_et_bg_selector"
android:maxLines="1"
android:textColor="#4F4F4F"
android:hint="@string/please_input_new_password"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -4,7 +4,6 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/homeact_linea_bg"
>
@ -21,7 +20,7 @@
android:id="@+id/aiBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_mode_back"
android:src="@drawable/ic_mode_black"
android:padding="5dp"
android:layout_marginStart="15dp"
app:layout_constraintStart_toStartOf="parent"
@ -45,7 +44,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_welcome_text_top_margin"
android:text="@string/forget_pwd"
android:textColor="@color/blue_4072FE"
android:textColor="#000000"
android:layout_marginStart="40dp"
android:textSize="@dimen/layout_login_welcome_textsize"
android:textStyle="bold"
@ -59,7 +58,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="23dp"
android:text="@string/phone_and_email"
android:textColor="@color/black_4F4F4F"
android:textColor="#000000"
android:textSize="@dimen/layout_login_username_title_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/tv_welcome_back" />
@ -109,7 +108,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sms_code"
android:textColor="@color/black_4F4F4F"
android:textColor="#000000"
android:textSize="@dimen/layout_login_pwd_title_textsize"
tools:ignore="MissingConstraints"/>
@ -119,11 +118,12 @@
android:layout_height="wrap_content"
android:layout_below="@+id/tv_sms"
android:layout_marginRight="5dp"
android:background="@drawable/login_et_bg_selector"
android:inputType="number"
android:maxLines="1"
android:textColor="@color/white"
android:hint="@string/correctCode"
android:textColorHint="@color/gray_BDBDBD"
android:textSize="@dimen/layout_login_et_textsize"
android:textStyle="bold" />
<TextView
@ -145,7 +145,7 @@
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:textColor="#000000"
android:textSize="@dimen/layout_login_pwd_title_textsize"
app:layout_constraintStart_toStartOf="@+id/tv_welcome_back"
app:layout_constraintTop_toBottomOf="@+id/ll_sms" />
@ -200,7 +200,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_login_pwd_title_text_top_margin"
android:text="@string/new_password_check"
android:textColor="@color/black_4F4F4F"
android:textColor="#000000"
android:textSize="@dimen/layout_login_pwd_title_textsize" />
<EditText
android:id="@+id/et_password_check"

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/translate"
>
<androidx.constraintlayout.widget.ConstraintLayout
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:background="@color/colorTransparent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/activity_bg"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="10dp"
>
<TextView
android:id="@+id/act_dia_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:gravity="center"
android:textSize="16sp"
android:textColor="#4F4F4F"
android:text="@string/payConfiretips"
android:layout_marginTop="20dp"
android:layout_marginStart="21dp"
android:layout_marginEnd="21dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_pay_cancle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/activity_close_bg"
android:gravity="center"
android:paddingLeft="20dp"
android:paddingTop="5dp"
android:paddingRight="20dp"
android:paddingBottom="5dp"
android:text="@string/close"
android:layout_marginStart="@dimen/dp_10"
android:textColor="@color/blue_4072FE" />
<TextView
android:id="@+id/tv_pay_finish"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginBottom="24dp"
android:layout_marginEnd="@dimen/dp_10"
android:layout_marginStart="@dimen/dp_10"
android:layout_weight="1"
android:background="@drawable/activity_jump_bg"
android:textColor="@color/white"
android:gravity="center"
android:paddingLeft="20dp"
android:paddingTop="5dp"
android:paddingRight="20dp"
android:paddingBottom="5dp"
android:text="@string/confirm"
/>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -371,4 +371,5 @@ Service Description\n
<string name="changeLocation">Change country/region</string>
<string name="anqpro">Safety mode</string>
<string name="jsmpri">Speed mode</string>
<string name="payConfiretips">Only supports acceleration of content that is allowed by domestic and foreign laws and regulations, no firewall-breaking function, confirm whether to recharge</string>
</resources>

View File

@ -361,5 +361,5 @@
<string name="changeLocation">變更國家/地區</string>
<string name="anqpro">安全模式</string>
<string name="jsmpri">極速模式</string>
<string name="payConfiretips">僅支持加速境內、境外法律法規允許訪問的內容,無翻墻功能,是否確認充值</string>
</resources>

View File

@ -359,4 +359,5 @@
<string name="changeLocation">變更國家/地區</string>
<string name="anqpro">安全模式</string>
<string name="jsmpri">極速模式</string>
<string name="payConfiretips">僅支持加速境內、境外法律法規允許訪問的內容,無翻墻功能,是否確認充值</string>
</resources>

View File

@ -383,4 +383,5 @@
<string name="ServiceTermsEd">《服务条款》</string>
<string name="PrivacyPolicyEd">《隐私政策》</string>
<string name="sptips">为贯彻与加强个人信息安全防护意识,请仔细阅读以下列出的相关协议</string>
<string name="payConfiretips">仅支持加速境内、境外法律法规允许访问的内容,无翻墙功能,是否确认充值</string>
</resources>

View File

@ -71,8 +71,8 @@ subprojects {
// targetSdk = 32
minSdk = 21
targetSdk = 34
versionName = "1.0.4.2"
versionCode = 1042
versionName = "1.0.4.3"
versionCode = 1043
resValue("string", "release_name", "v$versionName")
resValue("integer", "release_code", "$versionCode")
externalNativeBuild {
@ -119,6 +119,25 @@ subprojects {
)
)
}
create("9531") {
isDefault = true
dimension = flavorDimensionList[0]
buildConfigField("boolean", "PREMIUM", "Boolean.parseBoolean(\"false\")")
buildConfigField("boolean", "is_back_cn", "false")
buildConfigField("boolean", "is_ym", "true")
buildConfigField("boolean", "is_tz", "false")
buildConfigField("boolean", "is_yunti", "false")
buildConfigField("String", "applicationId", "\"com.jsq.mashanglian\"")
buildConfigField("String", "service_url", "\"https://api.wfvpnpro.com/\"")
buildConfigField("boolean", "is_free", "false")
buildConfigField("String", "productId", "\"9531\"")
manifestPlaceholders(
mapOf(
"APP_NAME" to "@string/ConnectImmediately",
"APP_ICON" to "@mipmap/logo_connect_immediately"
)
)
}
}
sourceSets {
getByName("9788") {