Skip to content

Commit 3d81eb6

Browse files
committed
+ support Alipay version 10.3.10.8310
* 调整微信指纹图标 + 4.6.0
1 parent 092eaa7 commit 3d81eb6

File tree

9 files changed

+79
-17
lines changed

9 files changed

+79
-17
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ android {
99
minSdkVersion 14
1010
targetSdkVersion 30
1111
versionCode 22
12-
versionName "4.5.0"
12+
versionName "4.6.0"
1313
buildConfigField "String", "APP_PRODUCT_NAME", "\"FingerprintPay\""
1414
}
1515

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

Lines changed: 3 additions & 2 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static String getString(int res) {
132132
case R.id.settings_sub_title_update_modules_same_time:
133133
return tr("将同时升级以下模块", "將同時升級以下模塊", "The following modules will be upgraded at the same time");
134134
case R.id.fingerprint_verification:
135-
return tr("请验证已有指纹", "請驗證已有指紋", "Fingerprint verification");
135+
return tr("请验证指纹", "請驗證指紋", "Fingerprint verification");
136136
case R.id.wechat_general:
137137
return tr("通用", "一般", "General");
138138
case R.id.app_settings_name:

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

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

3+
import static com.surcumference.fingerprint.Constant.ICON_ALIPAY_SETTING_ENTRY_BASE64;
34
import static com.surcumference.fingerprint.Constant.PACKAGE_NAME_ALIPAY;
45

56
import android.app.Activity;
@@ -13,6 +14,7 @@
1314
import android.view.View;
1415
import android.view.ViewGroup;
1516
import android.widget.EditText;
17+
import android.widget.ImageView;
1618
import android.widget.LinearLayout;
1719
import android.widget.ListView;
1820
import android.widget.TextView;
@@ -26,6 +28,7 @@
2628
import com.surcumference.fingerprint.util.BlackListUtils;
2729
import com.surcumference.fingerprint.util.Config;
2830
import com.surcumference.fingerprint.util.DpUtils;
31+
import com.surcumference.fingerprint.util.ImageUtils;
2932
import com.surcumference.fingerprint.util.NotifyUtils;
3033
import com.surcumference.fingerprint.util.StyleUtils;
3134
import com.surcumference.fingerprint.util.Task;
@@ -66,7 +69,6 @@ protected void onActivityCreated(Activity activity) {
6669
L.d("activity", activity);
6770
try {
6871
final String activityClzName = activity.getClass().getName();
69-
mCurrentActivity = activity;
7072
if (BuildConfig.DEBUG) {
7173
L.d("activity", activity, "clz", activityClzName);
7274
}
@@ -83,6 +85,7 @@ protected void onActivityCreated(Activity activity) {
8385
return;
8486
}
8587
mIsViewTreeObserverFirst = true;
88+
int alipayVersionCode = getAlipayVersionCode(activity);
8689
activity.getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(() -> {
8790
if (mCurrentActivity == null) {
8891
return;
@@ -95,7 +98,21 @@ protected void onActivityCreated(Activity activity) {
9598
if (mCurrentActivity != activity) {
9699
return;
97100
}
98-
if (ViewUtils.findViewByName(activity, (getAlipayVersionCode(activity) >= 352 /** 10.2.13.7000 */ ? "com.alipay.android.safepaysdk" : "com.alipay.android.app"), "simplePwdLayout") == null
101+
if (alipayVersionCode >= 661 /** 10.3.10.8310 */) {
102+
if (ViewUtils.findViewByName(activity, "com.alipay.android.phone.mobilecommon.verifyidentity", "simplePwdLayout") == null
103+
&& ViewUtils.findViewByName(activity, "com.alipay.android.phone.mobilecommon.verifyidentity", "mini_linSimplePwdComponent") == null
104+
&& ViewUtils.findViewByName(activity, "com.alipay.android.phone.mobilecommon.verifyidentity", "input_et_password") == null ) {
105+
return;
106+
}
107+
108+
if (mIsViewTreeObserverFirst) {
109+
if (showFingerPrintDialog(activity)) {
110+
mIsViewTreeObserverFirst = false;
111+
}
112+
}
113+
return;
114+
}
115+
if (ViewUtils.findViewByName(activity, (alipayVersionCode >= 352 /** 10.2.13.7000 */ ? "com.alipay.android.safepaysdk" : "com.alipay.android.app"), "simplePwdLayout") == null
99116
&& ViewUtils.findViewByName(activity, "com.alipay.android.phone.safepaybase", "mini_linSimplePwdComponent") == null
100117
&& ViewUtils.findViewByName(activity, "com.alipay.android.phone.safepaysdk", "mini_linSimplePwdComponent") == null
101118
&& ViewUtils.findViewByName(activity, "com.alipay.android.phone.mobilecommon.verifyidentity", "input_et_password") == null ) {
@@ -132,6 +149,12 @@ protected void onActivityCreated(Activity activity) {
132149
}
133150
}
134151

152+
153+
public void onActivityResumed(Activity activity) {
154+
L.d("activity resumed", activity);
155+
mCurrentActivity = activity;
156+
}
157+
135158
public void initFingerPrintLock(final Context context, final Runnable onSuccessUnlockCallback) {
136159
mFingerprintIdentify = new FingerprintIdentify(context);
137160
mFingerprintIdentify.setSupportAndroidL(true);
@@ -178,15 +201,15 @@ public void onStartFailedByDeviceLocked() {
178201
}
179202
}
180203

181-
public void showFingerPrintDialog(final Activity activity) {
204+
public boolean showFingerPrintDialog(final Activity activity) {
182205
final Context context = activity;
183206
try {
184207
if (getAlipayVersionCode(activity) >= 224) {
185208
if (activity.getClass().getName().contains(".MspContainerActivity")) {
186209
View payTextView = ViewUtils.findViewByText(activity.getWindow().getDecorView(), "支付宝支付密码", "支付寶支付密碼", "Alipay Payment Password");
187210
L.d("payTextView", payTextView);
188211
if (payTextView == null) {
189-
return;
212+
return false;
190213
}
191214
}
192215
}
@@ -260,6 +283,7 @@ public void showFingerPrintDialog(final Activity activity) {
260283
Task.onMain(100, () -> mFingerPrintAlertDialog = alipayPayView.showInDialog());
261284
} catch (OutOfMemoryError e) {
262285
}
286+
return true;
263287
}
264288

265289
/**
@@ -321,6 +345,14 @@ private void doSettingsMenuInject_10_1_38(final Activity activity) {
321345
L.e(e);
322346
}
323347

348+
int versionCode = getAlipayVersionCode(activity);
349+
if (versionCode >= 661 /** 10.3.10.8310 */) {
350+
ImageView itemIconImageView = new ImageView(activity);
351+
itemIconImageView.setImageBitmap(ImageUtils.base64ToBitmap(ICON_ALIPAY_SETTING_ENTRY_BASE64));
352+
LinearLayout.LayoutParams itemIconImageViewLayoutParams = new LinearLayout.LayoutParams(DpUtils.dip2px(activity, 24), DpUtils.dip2px(activity, 24));
353+
itemIconImageViewLayoutParams.leftMargin = DpUtils.dip2px(activity, 12);
354+
itemHlinearLayout.addView(itemIconImageView, itemIconImageViewLayoutParams);
355+
}
324356
itemHlinearLayout.addView(itemNameText, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1));
325357
itemHlinearLayout.addView(itemSummerText, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT));
326358

@@ -330,9 +362,20 @@ private void doSettingsMenuInject_10_1_38(final Activity activity) {
330362
LinearLayout rootLinearLayout = new LinearLayout(activity);
331363
rootLinearLayout.setOrientation(LinearLayout.VERTICAL);
332364
rootLinearLayout.addView(lineTopView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
333-
rootLinearLayout.addView(itemHlinearLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DpUtils.dip2px(activity, 45)));
334365
LinearLayout.LayoutParams lineParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1);
335-
lineParams.bottomMargin = DpUtils.dip2px(activity, 20);
366+
367+
if (versionCode >= 661 /** 10.3.10.8310 */) {
368+
lineTopView.setVisibility(View.INVISIBLE);
369+
itemHlinearLayout.setBackground(new XDrawable.Builder().defaultColor(Color.WHITE)
370+
.pressedColor(0xFFEBEBEB).round(32).create());
371+
lineBottomView.setVisibility(View.INVISIBLE);
372+
lineParams.bottomMargin = DpUtils.dip2px(activity, 8);
373+
rootLinearLayout.addView(itemHlinearLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DpUtils.dip2px(activity, 50)));
374+
} else {
375+
rootLinearLayout.addView(itemHlinearLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DpUtils.dip2px(activity, 45)));
376+
lineParams.bottomMargin = DpUtils.dip2px(activity, 20);
377+
}
378+
336379
rootLinearLayout.addView(lineBottomView, lineParams);
337380

338381
listView.addHeaderView(rootLinearLayout);

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -254,8 +254,9 @@ protected void onPayDialogShown(ViewGroup rootView) {
254254
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
255255
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
256256
fingerPrintLayout.setLayoutParams(layoutParams);
257-
ImageView fingerprintImageView = new ImageView(context);
258257

258+
fingerPrintLayout.setClipChildren(false);
259+
ImageView fingerprintImageView = new ImageView(context);
259260
try {
260261
final Bitmap bitmap = ImageUtils.base64ToBitmap(Constant.ICON_FINGER_PRINT_WECHAT_BASE64);
261262
fingerprintImageView.setImageBitmap(bitmap);
@@ -279,8 +280,11 @@ public void onWindowDetached() {
279280
} catch (OutOfMemoryError e) {
280281
L.d(e);
281282
}
282-
fingerPrintLayout.addView(fingerprintImageView);
283-
283+
fingerprintImageView.setScaleY(4F);
284+
fingerprintImageView.setScaleX(4F);
285+
RelativeLayout.LayoutParams fingerprintImageViewLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
286+
fingerprintImageViewLayoutParams.topMargin = DpUtils.dip2px(context, 24);
287+
fingerPrintLayout.addView(fingerprintImageView, fingerprintImageViewLayoutParams);
284288

285289
final Runnable switchToFingerprintRunnable = ()-> {
286290
mInputEditText.setVisibility(View.GONE);
@@ -290,6 +294,9 @@ public void onWindowDetached() {
290294
passwordLayout.removeView(fingerPrintLayoutLast);
291295
}
292296
passwordLayout.addView(fingerPrintLayout);
297+
passwordLayout.setClipChildren(false);
298+
((ViewGroup)passwordLayout.getParent()).setClipChildren(false);
299+
((ViewGroup)passwordLayout.getParent().getParent()).setClipChildren(false);
293300

294301
initFingerPrintLock(context, ()-> {
295302
BlackListUtils.applyIfNeeded(context);

app/src/main/java/com/surcumference/fingerprint/plugin/magisk/AlipayPlugin.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.os.Bundle;
66

77
import androidx.annotation.Keep;
8+
import androidx.annotation.NonNull;
89

910
import com.surcumference.fingerprint.BuildConfig;
1011
import com.surcumference.fingerprint.bean.PluginTarget;
@@ -54,6 +55,11 @@ public static void init() {
5455
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
5556
plugin.onActivityCreated(activity);
5657
}
58+
59+
@Override
60+
public void onActivityResumed(@NonNull Activity activity) {
61+
plugin.onActivityResumed(activity);
62+
}
5763
});
5864
}
5965
}

app/src/main/java/com/surcumference/fingerprint/plugin/xposed/AlipayPlugin.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
4343
onActivityCreated((Activity) param.thisObject);
4444
}
4545
});
46+
XposedHelpers.findAndHookMethod(Activity.class, "onResume", new XC_MethodHook() {
47+
48+
@TargetApi(21)
49+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
50+
onActivityResumed((Activity) param.thisObject);
51+
}
52+
});
4653
} catch (Throwable l) {
4754
XposedBridge.log(l);
4855
}

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;
@@ -49,7 +48,6 @@ public static WeChatPayDialog findFrom(int versionCode, ViewGroup rootView) {
4948
}
5049
if (view instanceof EditText) {
5150
payDialog.inputEditText = (EditText)view;
52-
view.setBackgroundColor(Color.RED);
5351
}
5452
} else if (view.getClass().getName().endsWith(".MyKeyboardWindow")) {
5553
L.d("密码键盘:" + view);

app/src/main/java/com/surcumference/fingerprint/view/AlipayPayView.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.surcumference.fingerprint.view;
22

33
import static com.surcumference.fingerprint.Constant.ICON_FINGER_PRINT_ALIPAY_BASE64;
4-
import static com.surcumference.fingerprint.Constant.ICON_FINGER_PRINT_CLOSE;
4+
import static com.surcumference.fingerprint.Constant.ICON_FINGER_PRINT_CLOSE_BASE64;
55

66
import android.app.AlertDialog;
77
import android.content.Context;
@@ -61,7 +61,7 @@ private void init(Context context) {
6161

6262
mCloseImageContainer = new FrameLayout(context);
6363
ImageView closeImage = new ImageView(context);
64-
closeImage.setImageBitmap(ImageUtils.base64ToBitmap(ICON_FINGER_PRINT_CLOSE));
64+
closeImage.setImageBitmap(ImageUtils.base64ToBitmap(ICON_FINGER_PRINT_CLOSE_BASE64));
6565
mCloseImageContainer.setPadding(DpUtils.dip2px(context, 10),DpUtils.dip2px(context, 15),DpUtils.dip2px(context, 15),DpUtils.dip2px(context, 10));
6666
mCloseImageContainer.addView(closeImage, new FrameLayout.LayoutParams(DpUtils.dip2px(context, 22), DpUtils.dip2px(context, 22)));
6767

0 commit comments

Comments
 (0)