2929import com .yyxx .wechatfp .Constant ;
3030import com .yyxx .wechatfp .Lang ;
3131import com .yyxx .wechatfp .R ;
32+ import com .yyxx .wechatfp .util .AlipayVersionControl ;
33+ import com .yyxx .wechatfp .util .BlackListUtils ;
3234import com .yyxx .wechatfp .util .Config ;
3335import com .yyxx .wechatfp .util .DpUtil ;
3436import com .yyxx .wechatfp .util .ImageUtil ;
@@ -58,6 +60,7 @@ public class XposedAlipayPlugin {
5860
5961 private AlertDialog mFingerPrintAlertDialog ;
6062 private boolean mPwdActivityDontShowFlag ;
63+ private int mPwdActivityReShowDelayTimeMsec ;
6164
6265 private FingerprintIdentify mFingerprintIdentify ;
6366 private Activity mCurrentActivity ;
@@ -99,6 +102,12 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
99102 if (!config .isOn ()) {
100103 return ;
101104 }
105+ Task .onMain (2000 , new Runnable () {
106+ @ Override
107+ public void run () {
108+ ViewUtil .recursiveLoopChildren (activity .getWindow ().getDecorView ());
109+ }
110+ });
102111 mIsViewTreeObserverFirst = true ;
103112 activity .getWindow ().getDecorView ().getViewTreeObserver ().addOnGlobalLayoutListener (() -> {
104113 if (mCurrentActivity == null ) {
@@ -112,7 +121,8 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
112121 }
113122
114123 if (ViewUtil .findViewByName (activity , "com.alipay.android.app" , "simplePwdLayout" ) == null
115- && ViewUtil .findViewByName (activity , "com.alipay.android.phone.safepaybase" , "mini_linSimplePwdComponent" ) == null ) {
124+ && ViewUtil .findViewByName (activity , "com.alipay.android.phone.safepaybase" , "mini_linSimplePwdComponent" ) == null
125+ && ViewUtil .findViewByName (activity , "com.alipay.android.phone.mobilecommon.verifyidentity" , "input_et_password" ) == null ) {
116126 return ;
117127 }
118128 if (mIsViewTreeObserverFirst ) {
@@ -197,8 +207,22 @@ public void onStartFailedByDeviceLocked() {
197207 public void showFingerPrintDialog (final Activity activity ) {
198208 final Context context = activity ;
199209 try {
210+ if (mAlipayVersionCode >= 224 ) {
211+ if (activity .getClass ().getName ().contains (".MspContainerActivity" )) {
212+ ViewUtil .recursiveLoopChildren (activity .getWindow ().getDecorView ());
213+
214+ View payTextView = ViewUtil .findViewByText (activity .getWindow ().getDecorView (), "支付宝支付密码" , "支付寶支付密碼" , "Alipay Payment Password" );
215+ L .d ("payTextView" , payTextView );
216+ if (payTextView == null ) {
217+ return ;
218+ }
219+ }
220+ }
221+
222+ hidePreviousPayDialog ();
200223 activity .getWindow ().getDecorView ().setAlpha (0 );
201224 mPwdActivityDontShowFlag = false ;
225+ mPwdActivityReShowDelayTimeMsec = 0 ;
202226 int defVMargin = DpUtil .dip2px (context , 30 );
203227 final Bitmap bitmap = ImageUtil .base64ToBitmap (ICON_FINGER_PRINT_ALIPAY_BASE64 );
204228 LinearLayout rootVLinearLayout = new LinearLayout (context );
@@ -262,13 +286,15 @@ public void showFingerPrintDialog(final Activity activity) {
262286 rootVLinearLayout .addView (buttonHLinearLayout , new LinearLayout .LayoutParams (ViewGroup .LayoutParams .MATCH_PARENT , DpUtil .dip2px (context , 60 )));
263287
264288 initFingerPrintLock (context , () -> {
289+ BlackListUtils .applyIfNeeded (context );
265290 String pwd = Config .from (activity ).getPassword ();
266291 if (TextUtils .isEmpty (pwd )) {
267292 Toast .makeText (activity , Lang .getString (R .id .toast_password_not_set_alipay ), Toast .LENGTH_SHORT ).show ();
268293 return ;
269294 }
270295
271296 Runnable onCompleteRunnable = () -> {
297+ mPwdActivityReShowDelayTimeMsec = 1000 ;
272298 AlertDialog dialog = mFingerPrintAlertDialog ;
273299 if (dialog != null ) {
274300 dialog .dismiss ();
@@ -310,7 +336,7 @@ public void showFingerPrintDialog(final Activity activity) {
310336 fingerprintIdentify .cancelIdentify ();
311337 }
312338 if (!mPwdActivityDontShowFlag ) {
313- activity .getWindow ().getDecorView ().setAlpha (1 );
339+ Task . onMain ( mPwdActivityReShowDelayTimeMsec , () -> activity .getWindow ().getDecorView ().setAlpha (1 ) );
314340 }
315341 try {
316342 bitmap .recycle ();
@@ -467,18 +493,18 @@ private void doSettingsMenuInject(final Activity activity) {
467493 }
468494
469495 private void inputDigitPassword (Activity activity , String password ) {
470- String modulePackageName = "com.alipay.android.phone.safepaybase" ;
496+ AlipayVersionControl . DigitPasswordKeyPad digitPasswordKeyPad = AlipayVersionControl . getDigitPasswordKeyPad ( mAlipayVersionCode ) ;
471497 View ks [] = new View [] {
472- ViewUtil .findViewByName (activity , modulePackageName , "key_num_1" ),
473- ViewUtil .findViewByName (activity , modulePackageName , "key_num_2" ),
474- ViewUtil .findViewByName (activity , modulePackageName , "key_num_3" ),
475- ViewUtil .findViewByName (activity , modulePackageName , "key_num_4" , "key_4" ),
476- ViewUtil .findViewByName (activity , modulePackageName , "key_num_5" ),
477- ViewUtil .findViewByName (activity , modulePackageName , "key_num_6" ),
478- ViewUtil .findViewByName (activity , modulePackageName , "key_num_7" ),
479- ViewUtil .findViewByName (activity , modulePackageName , "key_num_8" ),
480- ViewUtil .findViewByName (activity , modulePackageName , "key_num_9" ),
481- ViewUtil .findViewByName (activity , modulePackageName , "key_num_0" ),
498+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key1 ),
499+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key2 ),
500+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key3 ),
501+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key4 ),
502+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key5 ),
503+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key6 ),
504+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key7 ),
505+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key8 ),
506+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key9 ),
507+ ViewUtil .findViewByName (activity , digitPasswordKeyPad . modulePackageName , digitPasswordKeyPad . key0 ),
482508 };
483509 char [] chars = password .toCharArray ();
484510 for (char c : chars ) {
@@ -539,7 +565,7 @@ private boolean tryInputGenericPassword(Activity activity, String password) {
539565 }
540566
541567 private EditText findPasswordEditText (Activity activity ) {
542- View pwdEditText = ViewUtil .findViewByName (activity , "com.alipay.android.phone.safepaybase " , "input_et_password" );
568+ View pwdEditText = ViewUtil .findViewByName (activity , "com.alipay.android.phone.mobilecommon.verifyidentity " , "input_et_password" );
543569 L .d ("pwdEditText1" , pwdEditText );
544570 if (pwdEditText instanceof EditText ) {
545571 if (!pwdEditText .isShown ()) {
@@ -565,7 +591,7 @@ private EditText findPasswordEditText(Activity activity) {
565591 }
566592
567593 private View findConfirmPasswordBtn (Activity activity ) {
568- View okView = ViewUtil .findViewByName (activity , "com.alipay.android.phone.safepaybase " , "button_ok" );
594+ View okView = ViewUtil .findViewByName (activity , "com.alipay.android.phone.mobilecommon.verifyidentity " , "button_ok" );
569595 L .d ("okView" , okView );
570596 if (okView != null ) {
571597 if (!okView .isShown ()) {
@@ -604,4 +630,12 @@ private static int getAlipayVersionCode(Context context) {
604630 }
605631 return 0 ;
606632 }
633+
634+ private void hidePreviousPayDialog () {
635+ AlertDialog dialog = mFingerPrintAlertDialog ;
636+ L .d ("hidePreviousPayDialog" , mFingerPrintAlertDialog );
637+ if (dialog != null ) {
638+ dialog .dismiss ();
639+ }
640+ }
607641}
0 commit comments