4646import com .wei .android .lib .fingerprintidentify .FingerprintIdentify ;
4747import com .wei .android .lib .fingerprintidentify .base .BaseFingerprint ;
4848
49+ import java .util .Map ;
4950import java .util .WeakHashMap ;
5051
5152public 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 ();
0 commit comments