Skip to content

Commit 7ba30be

Browse files
committed
Fixed UnionPay pay dialog shown after pay
1 parent 0bffc61 commit 7ba30be

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

app/src/main/java/com/surcumference/fingerprint/plugin/impl/unionpay/UnionPayBasePlugin.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import com.wei.android.lib.fingerprintidentify.FingerprintIdentify;
4747
import com.wei.android.lib.fingerprintidentify.base.BaseFingerprint;
4848

49+
import java.util.Map;
4950
import java.util.WeakHashMap;
5051

5152
public class UnionPayBasePlugin implements IAppPlugin {
@@ -61,6 +62,8 @@ public class UnionPayBasePlugin implements IAppPlugin {
6162

6263
private int mWeChatVersionCode = 0;
6364

65+
private Map<Activity, Boolean> mActivityResumedMap = new WeakHashMap<>();
66+
6467
@Override
6568
public int getVersionCode(Context context) {
6669
if (mWeChatVersionCode != 0) {
@@ -71,6 +74,7 @@ public int getVersionCode(Context context) {
7174
}
7275

7376
protected synchronized void initFingerPrintLock(Context context, Runnable onSuccessUnlockRunnable) {
77+
L.d("指纹识别开始");
7478
mMockCurrentUser = true;
7579
mFingerprintIdentify = new FingerprintIdentify(context.getApplicationContext());
7680
mFingerprintIdentify.setSupportAndroidL(true);
@@ -173,6 +177,7 @@ public synchronized void showFingerPrintDialog(@Nullable Activity activity, View
173177
FingerprintIdentify fingerprintIdentify = mFingerprintIdentify;
174178
if (fingerprintIdentify != null) {
175179
fingerprintIdentify.cancelIdentify();
180+
L.d("指纹识别取消1");
176181
}
177182
if (!mPwdActivityDontShowFlag) {
178183
Task.onMain(mPwdActivityReShowDelayTimeMsec, () -> finalPayRootLayout.setAlpha(1));
@@ -309,6 +314,7 @@ private void inputDigitPassword(View rootView, String password) {
309314
@Override
310315
public void onActivityResumed(Activity activity) {
311316
L.d("Activity onResume =", activity);
317+
mActivityResumedMap.put(activity, true);
312318
final String activityClzName = activity.getClass().getName();
313319
if (activityClzName.contains(".UPActivityReactNative")) {
314320

@@ -330,12 +336,14 @@ public void onActivityCreated(Activity activity) {
330336
@Override
331337
public void onActivityPaused(Activity activity) {
332338
L.d("Activity onPause =", activity);
339+
mActivityResumedMap.remove(activity);
333340
final String activityClzName = activity.getClass().getName();
334341
if (activityClzName.contains(".UPActivityReactNative")) {
335342
hidePreviousPayDialog();
336343
} else if (activityClzName.contains(".PayWalletActivity")) {
337344
hidePreviousPayDialog();
338345
}
346+
stopAndRemoveTargetActivityViewObserver(activity);
339347
}
340348

341349
@Override
@@ -347,6 +355,7 @@ private void watchPayView(Activity activity) {
347355
stopAndRemoveCurrentActivityViewObserver();
348356
ActivityViewObserver activityViewObserver = new ActivityViewObserver(activity);
349357
activityViewObserver.setViewIdentifyText("请输入支付密码");
358+
activityViewObserver.setWatchActivityViewOnly(true);
350359
activityViewObserver.start(100, new ActivityViewObserver.IActivityViewListener() {
351360
@Override
352361
public void onViewFounded(ActivityViewObserver observer, View view) {
@@ -368,6 +377,10 @@ public void onViewFounded(ActivityViewObserver observer, View view) {
368377
ActivityViewObserver.IActivityViewListener l = this;
369378
observer.stop();
370379

380+
if (!mActivityResumedMap.containsKey(activity)) {
381+
return;
382+
}
383+
371384
onPayDialogShown(observer.getTargetActivity(), (ViewGroup) rootView);
372385
View.OnAttachStateChangeListener listener = mView2OnAttachStateChangeListenerMap.get(view);
373386
if (listener != null) {
@@ -406,6 +419,7 @@ protected void onPayDialogDismiss(Context context) {
406419
FingerprintIdentify fingerPrintIdentify = mFingerprintIdentify;
407420
if (fingerPrintIdentify != null) {
408421
fingerPrintIdentify.cancelIdentify();
422+
L.d("指纹识别取消2");
409423
}
410424
mMockCurrentUser = false;
411425
}
@@ -419,6 +433,16 @@ protected void stopAndRemoveCurrentActivityViewObserver() {
419433
}
420434
}
421435

436+
protected void stopAndRemoveTargetActivityViewObserver(Activity activity) {
437+
ActivityViewObserver activityViewObserver = mActivityViewObserver;
438+
if (activityViewObserver != null) {
439+
if (activity == activityViewObserver.getTargetActivity()) {
440+
activityViewObserver.stop();
441+
mActivityViewObserver = null;
442+
}
443+
}
444+
}
445+
422446
protected void doSettingsMenuInject(final Activity activity) {
423447

424448
View rootView = activity.getWindow().getDecorView();

app/src/main/java/com/surcumference/fingerprint/util/ActivityViewObserver.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.lang.ref.WeakReference;
1313
import java.util.ArrayList;
14+
import java.util.Collections;
1415
import java.util.LinkedHashSet;
1516
import java.util.List;
1617
import java.util.Set;
@@ -21,6 +22,7 @@ public class ActivityViewObserver {
2122
private boolean mRunning = false;
2223
private String mViewIdentifyType;
2324
private String[] mViewIdentifyTexts;
25+
private boolean mWatchActivityViewOnly = false;
2426

2527
public ActivityViewObserver(Activity weakRefActivity) {
2628
this.mActivityRef = new WeakReference<>(weakRefActivity);
@@ -34,6 +36,10 @@ public void setViewIdentifyText(String ...viewIdentifyTexts) {
3436
this.mViewIdentifyTexts = viewIdentifyTexts;
3537
}
3638

39+
public void setWatchActivityViewOnly(boolean on) {
40+
this.mWatchActivityViewOnly = on;
41+
}
42+
3743
public void start(long loopMSec, IActivityViewListener listener) {
3844
if (TextUtils.isEmpty(this.mViewIdentifyType) && (mViewIdentifyTexts == null || mViewIdentifyTexts.length == 0)) {
3945
throw new IllegalArgumentException("Error: ViewIdentifyType or ViewIdentifyTexts not set");
@@ -73,7 +79,9 @@ private void task(long loopMSec, IActivityViewListener listener) {
7379
}
7480

7581
List<View> viewList = new ArrayList<>();
76-
List<View> decorViewList = ViewUtils.getWindowManagerViews();
82+
List<View> decorViewList = mWatchActivityViewOnly
83+
? Collections.singletonList(activity.getWindow().getDecorView())
84+
: ViewUtils.getWindowManagerViews();
7785
for (View decorView : decorViewList) {
7886
if (decorView instanceof ViewGroup) {
7987
} else {

0 commit comments

Comments
 (0)