Skip to content

Commit 2685494

Browse files
committed
Support WeChat 8.0.43(2460)
1 parent 737cc60 commit 2685494

19 files changed

+157
-76
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
# Changelog
22

3-
### v4.8.0 (2023-11-05)
3+
### v4.8.1 (2023-11-05)
44

55
🚩 适配 QQ 8.9.85(4766) 版本
66

7+
🚩 适配 微信 8.0.43(2460) 内测版
8+
79
🚩 适配 微信 8.0.42(2460)
810

911
🐛 修复云闪付转账弹出多个指纹支付界面

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.surcumference.fingerprintpay"
88
minSdkVersion 14
99
targetSdkVersion 33
10-
versionCode 27
11-
versionName "4.8.0"
10+
versionCode 28
11+
versionName "4.8.1"
1212
buildConfigField "String", "APP_PRODUCT_NAME", "\"FingerprintPay\""
1313
}
1414

app/src/main/java/com/surcumference/fingerprint/Constant.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,6 @@ public static class WeChat {
4646
public static final int WECHAT_VERSION_CODE_8_0_18 = 2060;
4747
public static final int WECHAT_VERSION_CODE_8_0_20 = 2100;
4848
public static final int WECHAT_VERSION_CODE_8_0_30 = 2240;
49+
public static final int WECHAT_VERSION_CODE_8_0_43 = 2460;
4950
}
5051
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.surcumference.fingerprint.bean;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
public class DigitPasswordKeyPadInfo {
7+
public String modulePackageName;
8+
public String[] key1;
9+
public String[] key2;
10+
public String[] key3;
11+
public String[] key4;
12+
public String[] key5;
13+
public String[] key6;
14+
public String[] key7;
15+
public String[] key8;
16+
public String[] key9;
17+
public String[] key0;
18+
19+
public Map<String, String[]> keys = new HashMap<>();
20+
21+
public DigitPasswordKeyPadInfo(String modulePackageName, String[] key1, String[] key2, String[] key3, String[] key4, String[] key5, String[] key6, String[] key7, String[] key8, String[] key9, String[] key0) {
22+
this.modulePackageName = modulePackageName;
23+
this.key1 = key1;
24+
this.key2 = key2;
25+
this.key3 = key3;
26+
this.key4 = key4;
27+
this.key5 = key5;
28+
this.key6 = key6;
29+
this.key7 = key7;
30+
this.key8 = key8;
31+
this.key9 = key9;
32+
this.key0 = key0;
33+
this.keys.put("1", key1);
34+
this.keys.put("2", key2);
35+
this.keys.put("3", key3);
36+
this.keys.put("4", key4);
37+
this.keys.put("5", key5);
38+
this.keys.put("6", key6);
39+
this.keys.put("7", key7);
40+
this.keys.put("8", key8);
41+
this.keys.put("9", key9);
42+
this.keys.put("0", key0);
43+
}
44+
}

app/src/main/java/com/surcumference/fingerprint/plugin/AlipayBasePlugin.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.surcumference.fingerprint.BuildConfig;
2525
import com.surcumference.fingerprint.Lang;
2626
import com.surcumference.fingerprint.R;
27+
import com.surcumference.fingerprint.bean.DigitPasswordKeyPadInfo;
2728
import com.surcumference.fingerprint.util.ActivityViewObserver;
2829
import com.surcumference.fingerprint.util.AlipayVersionControl;
2930
import com.surcumference.fingerprint.util.ApplicationUtils;
@@ -152,7 +153,7 @@ protected void onActivityCreated(Activity activity) {
152153
activity.getWindow().getDecorView().setAlpha(0);
153154
Task.onMain(1500, () -> {
154155
int versionCode = getAlipayVersionCode(activity);
155-
AlipayVersionControl.DigitPasswordKeyPad digitPasswordKeyPad = AlipayVersionControl.getDigitPasswordKeyPad(versionCode);
156+
DigitPasswordKeyPadInfo digitPasswordKeyPad = AlipayVersionControl.getDigitPasswordKeyPad(versionCode);
156157
View key1View = ViewUtils.findViewByName(activity, digitPasswordKeyPad.modulePackageName, digitPasswordKeyPad.key1);
157158
if (key1View != null) {
158159
showFingerPrintDialog(activity);
@@ -497,7 +498,7 @@ private void doSettingsMenuInject(final Activity activity) {
497498

498499
private void inputDigitPassword(Activity activity, String password) {
499500
int versionCode = getAlipayVersionCode(activity);
500-
AlipayVersionControl.DigitPasswordKeyPad digitPasswordKeyPad = AlipayVersionControl.getDigitPasswordKeyPad(versionCode);
501+
DigitPasswordKeyPadInfo digitPasswordKeyPad = AlipayVersionControl.getDigitPasswordKeyPad(versionCode);
501502
View ks[] = new View[] {
502503
ViewUtils.findViewByName(activity, digitPasswordKeyPad.modulePackageName, digitPasswordKeyPad.key1),
503504
ViewUtils.findViewByName(activity, digitPasswordKeyPad.modulePackageName, digitPasswordKeyPad.key2),

app/src/main/java/com/surcumference/fingerprint/plugin/WeChatBasePlugin.java

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.surcumference.fingerprint.Constant;
3232
import com.surcumference.fingerprint.Lang;
3333
import com.surcumference.fingerprint.R;
34+
import com.surcumference.fingerprint.bean.DigitPasswordKeyPadInfo;
3435
import com.surcumference.fingerprint.util.ActivityViewObserver;
3536
import com.surcumference.fingerprint.util.ApplicationUtils;
3637
import com.surcumference.fingerprint.util.BlackListUtils;
@@ -42,6 +43,7 @@
4243
import com.surcumference.fingerprint.util.StyleUtils;
4344
import com.surcumference.fingerprint.util.Task;
4445
import com.surcumference.fingerprint.util.ViewUtils;
46+
import com.surcumference.fingerprint.util.WeChatVersionControl;
4547
import com.surcumference.fingerprint.util.drawable.XDrawable;
4648
import com.surcumference.fingerprint.util.log.L;
4749
import com.surcumference.fingerprint.util.paydialog.WeChatPayDialog;
@@ -237,6 +239,7 @@ protected void onPayDialogShown(ViewGroup rootView) {
237239
L.d("PayDialog show");
238240
Context context = rootView.getContext();
239241
Config config = Config.from(context);
242+
ViewUtils.recursiveLoopChildren(rootView);
240243
if (config.isOn()) {
241244
int versionCode = getWeChatVersionCode(context);
242245
WeChatPayDialog payDialogView = WeChatPayDialog.findFrom(versionCode, rootView);
@@ -333,14 +336,7 @@ public void onWindowDetached() {
333336
Toast.makeText(context, Lang.getString(R.id.toast_password_not_set_wechat), Toast.LENGTH_SHORT).show();
334337
return;
335338
}
336-
if (getWeChatVersionCode(context) >= Constant.WeChat.WECHAT_VERSION_CODE_8_0_18) {
337-
mInputEditText.getText().clear();
338-
for (char c : pwd.toCharArray()) {
339-
mInputEditText.append(String.valueOf(c));
340-
}
341-
} else {
342-
mInputEditText.setText(pwd);
343-
}
339+
inputDigitalPassword(context, mInputEditText, pwd, keyboardViews, smallPayDialogFloating);
344340
});
345341
if (titleTextView != null) {
346342
titleTextView.setText(Lang.getString(R.id.wechat_payview_fingerprint_title));
@@ -443,6 +439,49 @@ public void onWindowDetached() {
443439
}
444440
}
445441

442+
private void inputDigitalPassword(Context context, EditText inputEditText, String pwd,
443+
List<View> keyboardViews, boolean smallPayDialogFloating) {
444+
int versionCode = getWeChatVersionCode(context);
445+
if (versionCode >= Constant.WeChat.WECHAT_VERSION_CODE_8_0_43) {
446+
DigitPasswordKeyPadInfo digitPasswordKeyPad = WeChatVersionControl.getDigitPasswordKeyPad(versionCode);
447+
inputEditText.getText().clear();
448+
View keyboardView = keyboardViews.get(0);
449+
// 在半高支付界面需要先激活inputEditText才能正常输入
450+
if (!smallPayDialogFloating) {
451+
((ViewGroup)inputEditText.getParent().getParent()).setAlpha(0.01f);
452+
inputEditText.setVisibility(View.VISIBLE);
453+
}
454+
ViewGroup.LayoutParams keyboardViewParams = keyboardView.getLayoutParams();
455+
int keyboardViewHeight = keyboardViewParams.height;
456+
keyboardViewParams.height = 2;
457+
inputEditText.requestFocus();
458+
inputEditText.post(() -> {
459+
for (char c : pwd.toCharArray()) {
460+
View digitView = ViewUtils.findViewByName(keyboardView, context.getPackageName(),
461+
digitPasswordKeyPad.keys.get(String.valueOf(c)));
462+
if (digitView != null) {
463+
ViewUtils.performActionClick(digitView);
464+
}
465+
}
466+
// inputEditText.setVisibility(View.VISIBLE); 副作用反制
467+
keyboardView.post(() -> inputEditText.setVisibility(View.GONE));
468+
keyboardView.postDelayed(() -> {
469+
((ViewGroup)inputEditText.getParent().getParent()).setAlpha(1f);
470+
keyboardViewParams.height = keyboardViewHeight;
471+
}, 1000);
472+
});
473+
return;
474+
}
475+
if (getWeChatVersionCode(context) >= Constant.WeChat.WECHAT_VERSION_CODE_8_0_18) {
476+
inputEditText.getText().clear();
477+
for (char c : pwd.toCharArray()) {
478+
inputEditText.append(String.valueOf(c));
479+
}
480+
return;
481+
}
482+
inputEditText.setText(pwd);
483+
}
484+
446485
private boolean isSmallPayDialogFloating(ViewGroup passwordLayout) {
447486
ViewGroup floatRootView = ((ViewGroup) passwordLayout.getParent().getParent().getParent().getParent().getParent());
448487
int []location = new int[]{0,0};
Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.surcumference.fingerprint.util;
22

3+
import com.surcumference.fingerprint.bean.DigitPasswordKeyPadInfo;
4+
35
public class AlipayVersionControl {
46

5-
public static DigitPasswordKeyPad getDigitPasswordKeyPad(int alipayVersion) {
7+
public static DigitPasswordKeyPadInfo getDigitPasswordKeyPad(int alipayVersion) {
68
//10.2.0.8026
79
if (alipayVersion >= 291) {
8-
return new DigitPasswordKeyPad("com.alipay.mobile.antui",
10+
return new DigitPasswordKeyPadInfo("com.alipay.mobile.antui",
911
new String[]{"au_num_1"},
1012
new String[]{"au_num_2"},
1113
new String[]{"au_num_3"},
@@ -17,7 +19,7 @@ public static DigitPasswordKeyPad getDigitPasswordKeyPad(int alipayVersion) {
1719
new String[]{"au_num_9"},
1820
new String[]{"au_num_0"});
1921
} else {
20-
return new DigitPasswordKeyPad("com.alipay.android.phone.safepaybase",
22+
return new DigitPasswordKeyPadInfo("com.alipay.android.phone.safepaybase",
2123
new String[]{"key_num_1"},
2224
new String[]{"key_num_2"},
2325
new String[]{"key_num_3"},
@@ -30,32 +32,4 @@ public static DigitPasswordKeyPad getDigitPasswordKeyPad(int alipayVersion) {
3032
new String[]{"key_num_0"});
3133
}
3234
}
33-
34-
public static class DigitPasswordKeyPad {
35-
public String modulePackageName;
36-
public String[] key1;
37-
public String[] key2;
38-
public String[] key3;
39-
public String[] key4;
40-
public String[] key5;
41-
public String[] key6;
42-
public String[] key7;
43-
public String[] key8;
44-
public String[] key9;
45-
public String[] key0;
46-
47-
public DigitPasswordKeyPad(String modulePackageName, String[] key1, String[] key2, String[] key3, String[] key4, String[] key5, String[] key6, String[] key7, String[] key8, String[] key9, String[] key0) {
48-
this.modulePackageName = modulePackageName;
49-
this.key1 = key1;
50-
this.key2 = key2;
51-
this.key3 = key3;
52-
this.key4 = key4;
53-
this.key5 = key5;
54-
this.key6 = key6;
55-
this.key7 = key7;
56-
this.key8 = key8;
57-
this.key9 = key9;
58-
this.key0 = key0;
59-
}
60-
}
6135
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.surcumference.fingerprint.util;
2+
3+
import com.surcumference.fingerprint.Constant;
4+
import com.surcumference.fingerprint.bean.DigitPasswordKeyPadInfo;
5+
6+
public class WeChatVersionControl {
7+
8+
public static DigitPasswordKeyPadInfo getDigitPasswordKeyPad(int versionCode) {
9+
return new DigitPasswordKeyPadInfo(Constant.PACKAGE_NAME_WECHAT,
10+
new String[]{"tenpay_keyboard_1"},
11+
new String[]{"tenpay_keyboard_2"},
12+
new String[]{"tenpay_keyboard_3"},
13+
new String[]{"tenpay_keyboard_4"},
14+
new String[]{"tenpay_keyboard_5"},
15+
new String[]{"tenpay_keyboard_6"},
16+
new String[]{"tenpay_keyboard_7"},
17+
new String[]{"tenpay_keyboard_8"},
18+
new String[]{"tenpay_keyboard_9"},
19+
new String[]{"tenpay_keyboard_0"});
20+
}
21+
22+
}

app/src/main/java/com/surcumference/fingerprint/util/paydialog/WeChatPayDialog.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.surcumference.fingerprint.util.paydialog;
22

3-
import android.graphics.Color;
43
import android.view.View;
54
import android.view.ViewGroup;
65
import android.widget.EditText;
@@ -67,7 +66,6 @@ public static WeChatPayDialog findFrom(int versionCode, ViewGroup rootView) {
6766
+ " shownInScreen: " + ViewUtils.isShownInScreen(view)
6867
+ " attachToParent: " + (view.getParent() != null));
6968
if (view.getParent() != null) {
70-
view.setBackgroundColor(Color.RED);
7169
payDialog.keyboardViews.add((View)view.getParent());
7270
}
7371
}

release/update_riru_alipay.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"version": "4.8.0",
3-
"versionCode": "27",
4-
"zipUrl": "https://file.xdow.net/d/download/fingerprintpay/4.8.0/riru-module-xfingerprint-pay-alipay-v4.8.0-release.zip",
2+
"version": "4.8.1",
3+
"versionCode": "28",
4+
"zipUrl": "https://file.xdow.net/d/download/fingerprintpay/4.8.1/riru-module-xfingerprint-pay-alipay-v4.8.1-release.zip",
55
"changelog": "https://gitee.com/eritpchy/FingerprintPay/raw/main/CHANGELOG.md"
66
}

0 commit comments

Comments
 (0)