Skip to content

Commit ead8243

Browse files
committed
+ 3.9.22
+ 适配支付宝10.2.13.7000 + 适配淘宝9.20.0 + QQ屏下指纹优化
1 parent d982790 commit ead8243

File tree

5 files changed

+129
-76
lines changed

5 files changed

+129
-76
lines changed

app/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ apply plugin: 'com.android.application'
33
def ADB_PATH = "${android.getSdkDirectory()}/platform-tools/adb"
44
android {
55

6-
compileSdkVersion 26
7-
buildToolsVersion "26.0.2"
6+
compileSdkVersion 30
7+
buildToolsVersion "30.0.2"
88
defaultConfig {
99
applicationId "com.surcumference.fingerprintpay"
1010
minSdkVersion 14
11-
targetSdkVersion 26
11+
targetSdkVersion 30
1212
versionCode 21
13-
versionName "3.9.21"
13+
versionName "3.9.22"
1414
buildConfigField "String", "APP_PRODUCT_NAME", "\"WeChatFp\""
1515
}
1616

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.yyxx.wechatfp.util;
2+
3+
public class TaobaoVersionControl {
4+
5+
public static DigitPasswordKeyPad getDigitPasswordKeyPad(int taobaoVersion) {
6+
//9.20.0
7+
if (taobaoVersion >= 323) {
8+
return new DigitPasswordKeyPad("com.taobao.taobao",
9+
new String[]{"au_num_1"},
10+
new String[]{"au_num_2"},
11+
new String[]{"au_num_3"},
12+
new String[]{"au_num_4"},
13+
new String[]{"au_num_5"},
14+
new String[]{"au_num_6"},
15+
new String[]{"au_num_7"},
16+
new String[]{"au_num_8"},
17+
new String[]{"au_num_9"},
18+
new String[]{"au_num_0"});
19+
} else {
20+
return new DigitPasswordKeyPad("com.taobao.taobao",
21+
new String[]{"key_num_1"},
22+
new String[]{"key_num_2"},
23+
new String[]{"key_num_3"},
24+
new String[]{"key_num_4", "key_4"},
25+
new String[]{"key_num_5"},
26+
new String[]{"key_num_6"},
27+
new String[]{"key_num_7"},
28+
new String[]{"key_num_8"},
29+
new String[]{"key_num_9"},
30+
new String[]{"key_num_0"});
31+
}
32+
}
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+
}
61+
}

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedAlipayPlugin.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ public void run() {
119119
if (mCurrentActivity != activity) {
120120
return;
121121
}
122-
123-
if (ViewUtil.findViewByName(activity, "com.alipay.android.app", "simplePwdLayout") == null
122+
if (ViewUtil.findViewByName(activity, (mAlipayVersionCode >= 352 /** 10.2.13.7000 */ ? "com.alipay.android.safepaysdk" : "com.alipay.android.app"), "simplePwdLayout") == null
124123
&& ViewUtil.findViewByName(activity, "com.alipay.android.phone.safepaybase", "mini_linSimplePwdComponent") == null
125124
&& ViewUtil.findViewByName(activity, "com.alipay.android.phone.mobilecommon.verifyidentity", "input_et_password") == null ) {
126125
return;
@@ -330,7 +329,8 @@ public void showFingerPrintDialog(final Activity activity) {
330329
onCompleteRunnable.run();
331330
});
332331

333-
AlertDialog dialog = new AlertDialog.Builder(new ContextThemeWrapper(context, android.R.style.Theme_Holo_Light_Dialog_MinWidth)).setView(rootVLinearLayout).setOnDismissListener(dialogInterface -> {
332+
AlertDialog dialog = new AlertDialog.Builder(new ContextThemeWrapper(context, android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q ? android.R.style.Theme_DeviceDefault_DayNight : android.R.style.Theme_Holo_Light_Dialog_MinWidth))
333+
.setView(rootVLinearLayout).setOnDismissListener(dialogInterface -> {
334334
FingerprintIdentify fingerprintIdentify = mFingerprintIdentify;
335335
if (fingerprintIdentify != null) {
336336
fingerprintIdentify.cancelIdentify();
@@ -344,8 +344,7 @@ public void showFingerPrintDialog(final Activity activity) {
344344
}
345345
}).setCancelable(false).create();
346346
mFingerPrintAlertDialog = dialog;
347-
dialog.show();
348-
347+
Task.onMain(100, dialog::show);
349348
} catch (OutOfMemoryError e) {
350349
}
351350
}

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedQQPlugin.java

Lines changed: 18 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.app.Activity;
55
import android.content.Context;
66
import android.content.pm.PackageInfo;
7-
import android.graphics.Bitmap;
87
import android.graphics.Color;
98
import android.graphics.drawable.ColorDrawable;
109
import android.graphics.drawable.Drawable;
@@ -19,7 +18,6 @@
1918
import android.view.ViewGroup;
2019
import android.view.ViewTreeObserver;
2120
import android.widget.EditText;
22-
import android.widget.ImageView;
2321
import android.widget.LinearLayout;
2422
import android.widget.TextView;
2523
import android.widget.Toast;
@@ -32,7 +30,6 @@
3230
import com.yyxx.wechatfp.network.updateCheck.UpdateFactory;
3331
import com.yyxx.wechatfp.util.Config;
3432
import com.yyxx.wechatfp.util.DpUtil;
35-
import com.yyxx.wechatfp.util.ImageUtil;
3633
import com.yyxx.wechatfp.util.KeyboardUtils;
3734
import com.yyxx.wechatfp.util.PermissionUtils;
3835
import com.yyxx.wechatfp.util.QQUtils;
@@ -54,7 +51,6 @@
5451
import de.robv.android.xposed.XposedHelpers;
5552
import de.robv.android.xposed.callbacks.XC_LoadPackage;
5653

57-
import static com.yyxx.wechatfp.Constant.ICON_FINGER_PRINT_ALIPAY_BASE64;
5854

5955
/**
6056
* Created by Jason on 2017/9/8.
@@ -212,7 +208,7 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
212208
boolean longPassword = payDialog.isLongPassword();
213209
ViewGroup editCon = longPassword ? (ViewGroup) payDialog.inputEditText.getParent().getParent().getParent()
214210
: (ViewGroup) payDialog.inputEditText.getParent().getParent();
215-
ImageView fingerprintImageView = prepareFingerprintView(context);
211+
View fingerprintView = prepareFingerprintView(context);
216212

217213
Runnable switchToPwdRunnable = () -> {
218214
if (activity != mCurrentPayActivity) {
@@ -230,8 +226,8 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
230226
payDialog.keyboardView.setVisibility(View.VISIBLE);
231227
}
232228
}
233-
if (fingerprintImageView.getVisibility() != View.GONE) {
234-
fingerprintImageView.setVisibility(View.GONE);
229+
if (fingerprintView.getVisibility() != View.GONE) {
230+
fingerprintView.setVisibility(View.GONE);
235231
}
236232
if (payDialog.titleTextView != null) {
237233
if (mQQVersionCode >= QQ_VERSION_CODE_7_3_0) {
@@ -277,8 +273,8 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
277273
});
278274
}
279275
}
280-
if (fingerprintImageView.getVisibility() != View.VISIBLE) {
281-
fingerprintImageView.setVisibility(View.VISIBLE);
276+
if (fingerprintView.getVisibility() != View.VISIBLE) {
277+
fingerprintView.setVisibility(View.VISIBLE);
282278
}
283279
if (payDialog.titleTextView != null) {
284280
payDialog.titleTextView.setText(Lang.getString(R.id.qq_payview_fingerprint_title));
@@ -300,7 +296,7 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
300296
resumeFingerprintIdentify();
301297
};
302298

303-
fingerprintImageView.setOnClickListener(v -> {
299+
fingerprintView.setOnClickListener(v -> {
304300
switchToPwdRunnable.run();
305301
});
306302

@@ -316,13 +312,13 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
316312
}
317313

318314
ViewGroup viewGroup = ((ViewGroup)(editCon.getParent()));
319-
removeAllFingerprintImageView(viewGroup);
315+
removeAllFingerprintView(viewGroup);
320316

321317
int keyboardViewPosition = ViewUtil.findChildViewPosition(viewGroup, payDialog.keyboardView);
322318
if (keyboardViewPosition >= 0) {
323-
viewGroup.addView(fingerprintImageView, keyboardViewPosition);
319+
viewGroup.addView(fingerprintView, keyboardViewPosition);
324320
} else {
325-
viewGroup.addView(fingerprintImageView);
321+
viewGroup.addView(fingerprintView);
326322
}
327323

328324
mCurrentPayActivity = activity;
@@ -348,7 +344,7 @@ private void initPayActivity(Activity activity, int retryDelay, int retryCountdo
348344
}
349345
}
350346

351-
private void removeAllFingerprintImageView(ViewGroup viewGroup) {
347+
private void removeAllFingerprintView(ViewGroup viewGroup) {
352348
List<View> pendingRemoveList = new ArrayList<>();
353349

354350
int childCount = viewGroup.getChildCount();
@@ -364,44 +360,20 @@ private void removeAllFingerprintImageView(ViewGroup viewGroup) {
364360
}
365361
}
366362

367-
private ImageView prepareFingerprintView(Context context) {
363+
private View prepareFingerprintView(Context context) {
368364

369-
ImageView imageView = new ImageView(context);
370-
imageView.setTag(TAG_FINGER_PRINT_IMAGE);
371-
Bitmap bitmap = null;
372-
try {
373-
bitmap = ImageUtil.base64ToBitmap(ICON_FINGER_PRINT_ALIPAY_BASE64);
374-
imageView.setImageBitmap(bitmap);
375-
} catch (OutOfMemoryError e) {
376-
}
377-
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(DpUtil.dip2px(context, 40), DpUtil.dip2px(context, 40));
365+
TextView textView = new TextView(context);
366+
textView.setTag(TAG_FINGER_PRINT_IMAGE);
367+
textView.setText("使用密码");
368+
textView.setTextSize(16);
369+
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
378370
params.gravity = Gravity.CENTER;
379371
if (mQQVersionCode >= QQ_VERSION_CODE_7_3_0) {
380372
//QQ居然拿键盘底部来定位... To TP工程师. 你们的Activity太重了
381373
params.bottomMargin = DpUtil.dip2px(context, 30);
382374
}
383-
imageView.setLayoutParams(params);
384-
385-
final Bitmap bitmapFinal = bitmap;
386-
imageView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
387-
@Override
388-
public void onViewAttachedToWindow(View v) {
389-
}
390-
391-
@Override
392-
public void onViewDetachedFromWindow(View v) {
393-
try {
394-
if (bitmapFinal != null) {
395-
bitmapFinal.recycle();
396-
}
397-
} catch (Exception e) {
398-
L.e(e);
399-
}
400-
cancelFingerprintIdentify();
401-
L.d("onViewDetachedFromWindow");
402-
}
403-
});
404-
return imageView;
375+
textView.setLayoutParams(params);
376+
return textView;
405377
}
406378

407379

0 commit comments

Comments
 (0)