smstuebe / xamarin-fingerprint

Xamarin and MvvMCross plugin for authenticate a user via fingerprint sensor
Microsoft Public License
494 stars 118 forks source link

Dialog box closed when the phone is standby #99

Closed cap-dbaronnet closed 4 years ago

cap-dbaronnet commented 6 years ago

Steps to reproduce

  1. Launch the Sample on Android 8 or highter

  2. Click on button "Authentificate"

  3. Put the phone on standby via the "Power" button

  4. Return to the application

Expected behavior

The same behavior as on Android <8 that is to say that the popup remains displayed when we return in the application Example: galaxy-s7

Actual behavior

The popup disappears and the application considers that the authentication has been canceled by the user Example: galaxy-s8

When I debug the library, I notice that the method "OnResume" of the class "FingerprintDialogFragment" is not called back from the background

I try to add the permission mentioned below in the crashlog but the problem is the same

Crashlog

[System.err] java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=28229, uid=10367 requires android.permission.INTERACT_ACROSS_USERS [System.err] at android.os.Parcel.readException(Parcel.java:1958) [System.err] at android.os.Parcel.readException(Parcel.java:1904) [System.err] at android.sec.clipboard.IClipboardService$Stub$Proxy.isEnabled(IClipboardService.java:757) [System.err] at com.samsung.android.content.clipboard.SemClipboardManager.isEnabled(SemClipboardManager.java:1008) [System.err] at android.widget.TextView.getSecClipboardEnabled(TextView.java:16133) [System.err] at android.widget.TextView.onDetachedFromWindowInternal(TextView.java:7178) [System.err] at android.view.View.dispatchDetachedFromWindow(View.java:18659) [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [chatty] uid=10367(u0_a367) sms.fingerprint.sample identical 2 lines [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [System.err] at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:4001) [System.err] at android.view.ViewRootImpl.doDie(ViewRootImpl.java:7267) [System.err] at android.view.ViewRootImpl.die(ViewRootImpl.java:7244) [System.err] at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:483) [System.err] at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:421) [System.err] at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:131) [System.err] at android.app.Dialog.dismissDialog(Dialog.java:462) [System.err] at android.app.Dialog.dismiss(Dialog.java:445) [System.err] at android.app.DialogFragment.dismissInternal(DialogFragment.java:290) [System.err] at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:280) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.n_onAnimationEnd(Native Method) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.onAnimationEnd(TaskAnimationListener.java:41) [System.err] at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:552) [System.err] at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1209) [System.err] at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1449) [System.err] at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) [System.err] at android.animation.AnimationHandler.-wrap2(Unknown Source:0) [System.err] at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) [System.err] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909) [System.err] at android.view.Choreographer.doCallbacks(Choreographer.java:723) [System.err] at android.view.Choreographer.doFrame(Choreographer.java:655) [System.err] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) [System.err] at android.os.Handler.handleCallback(Handler.java:789) [System.err] at android.os.Handler.dispatchMessage(Handler.java:98) [System.err] at android.os.Looper.loop(Looper.java:164) [System.err] at android.app.ActivityThread.main(ActivityThread.java:6938) [System.err] at java.lang.reflect.Method.invoke(Native Method) [System.err] at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) [System.err] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) [System.err] java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=28229, uid=10367 requires android.permission.INTERACT_ACROSS_USERS [System.err] at android.os.Parcel.readException(Parcel.java:1958) [System.err] at android.os.Parcel.readException(Parcel.java:1904) [System.err] at android.sec.clipboard.IClipboardService$Stub$Proxy.isEnabled(IClipboardService.java:757) [System.err] at com.samsung.android.content.clipboard.SemClipboardManager.isEnabled(SemClipboardManager.java:1008) [System.err] at android.widget.TextView.getSecClipboardEnabled(TextView.java:16133) [System.err] at android.widget.TextView.onDetachedFromWindowInternal(TextView.java:7178) [System.err] at android.view.View.dispatchDetachedFromWindow(View.java:18659) [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [chatty] uid=10367(u0_a367) sms.fingerprint.sample identical 2 lines [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [System.err] at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:4001) [System.err] at android.view.ViewRootImpl.doDie(ViewRootImpl.java:7267) [System.err] at android.view.ViewRootImpl.die(ViewRootImpl.java:7244) [System.err] at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:483) [System.err] at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:421) [System.err] at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:131) [System.err] at android.app.Dialog.dismissDialog(Dialog.java:462) [System.err] at android.app.Dialog.dismiss(Dialog.java:445) [System.err] at android.app.DialogFragment.dismissInternal(DialogFragment.java:290) [System.err] at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:280) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.n_onAnimationEnd(Native Method) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.onAnimationEnd(TaskAnimationListener.java:41) [System.err] at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:552) [System.err] at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1209) [System.err] at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1449) [System.err] at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) [System.err] at android.animation.AnimationHandler.-wrap2(Unknown Source:0) [System.err] at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) [System.err] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909) [System.err] at android.view.Choreographer.doCallbacks(Choreographer.java:723) [System.err] at android.view.Choreographer.doFrame(Choreographer.java:655) [System.err] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) [System.err] at android.os.Handler.handleCallback(Handler.java:789) [System.err] at android.os.Handler.dispatchMessage(Handler.java:98) [System.err] at android.os.Looper.loop(Looper.java:164) [System.err] at android.app.ActivityThread.main(ActivityThread.java:6938) [System.err] at java.lang.reflect.Method.invoke(Native Method) [System.err] at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) [System.err] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) [System.err] java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=28229, uid=10367 requires android.permission.INTERACT_ACROSS_USERS [System.err] at android.os.Parcel.readException(Parcel.java:1958) [System.err] at android.os.Parcel.readException(Parcel.java:1904) [System.err] at android.sec.clipboard.IClipboardService$Stub$Proxy.isEnabled(IClipboardService.java:757) [System.err] at com.samsung.android.content.clipboard.SemClipboardManager.isEnabled(SemClipboardManager.java:1008) [System.err] at android.widget.TextView.getSecClipboardEnabled(TextView.java:16133) [System.err] at android.widget.TextView.onDetachedFromWindowInternal(TextView.java:7178) [System.err] at android.view.View.dispatchDetachedFromWindow(View.java:18659) [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [chatty] uid=10367(u0_a367) sms.fingerprint.sample identical 3 lines [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [System.err] at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:4001) [System.err] at android.view.ViewRootImpl.doDie(ViewRootImpl.java:7267) [System.err] at android.view.ViewRootImpl.die(ViewRootImpl.java:7244) [System.err] at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:483) [System.err] at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:421) [System.err] at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:131) [System.err] at android.app.Dialog.dismissDialog(Dialog.java:462) [System.err] at android.app.Dialog.dismiss(Dialog.java:445) [System.err] at android.app.DialogFragment.dismissInternal(DialogFragment.java:290) [System.err] at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:280) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.n_onAnimationEnd(Native Method) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.onAnimationEnd(TaskAnimationListener.java:41) [System.err] at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:552) [System.err] at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1209) [System.err] at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1449) [System.err] at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) [System.err] at android.animation.AnimationHandler.-wrap2(Unknown Source:0) [System.err] at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) [System.err] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909) [System.err] at android.view.Choreographer.doCallbacks(Choreographer.java:723) [System.err] at android.view.Choreographer.doFrame(Choreographer.java:655) [System.err] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) [System.err] at android.os.Handler.handleCallback(Handler.java:789) [System.err] at android.os.Handler.dispatchMessage(Handler.java:98) [System.err] at android.os.Looper.loop(Looper.java:164) [System.err] at android.app.ActivityThread.main(ActivityThread.java:6938) [System.err] at java.lang.reflect.Method.invoke(Native Method) [System.err] at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) [System.err] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) [System.err] java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=28229, uid=10367 requires android.permission.INTERACT_ACROSS_USERS [System.err] at android.os.Parcel.readException(Parcel.java:1958) [System.err] at android.os.Parcel.readException(Parcel.java:1904) [System.err] at android.sec.clipboard.IClipboardService$Stub$Proxy.isEnabled(IClipboardService.java:757) [System.err] at com.samsung.android.content.clipboard.SemClipboardManager.isEnabled(SemClipboardManager.java:1008) [System.err] at android.widget.TextView.getSecClipboardEnabled(TextView.java:16133) [System.err] at android.widget.TextView.onDetachedFromWindowInternal(TextView.java:7178) [System.err] at android.view.View.dispatchDetachedFromWindow(View.java:18659) [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [chatty] uid=10367(u0_a367) sms.fingerprint.sample identical 3 lines [System.err] at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3878) [System.err] at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:4001) [System.err] at android.view.ViewRootImpl.doDie(ViewRootImpl.java:7267) [System.err] at android.view.ViewRootImpl.die(ViewRootImpl.java:7244) [System.err] at android.view.WindowManagerGlobal.removeViewLocked(WindowManagerGlobal.java:483) [System.err] at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:421) [System.err] at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:131) [System.err] at android.app.Dialog.dismissDialog(Dialog.java:462) [System.err] at android.app.Dialog.dismiss(Dialog.java:445) [System.err] at android.app.DialogFragment.dismissInternal(DialogFragment.java:290) [System.err] at android.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:280) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.n_onAnimationEnd(Native Method) [System.err] at md51d96ac6e587108d507c72b13219e2598.TaskAnimationListener.onAnimationEnd(TaskAnimationListener.java:41) [System.err] at android.animation.Animator$AnimatorListener.onAnimationEnd(Animator.java:552) [System.err] at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1209) [System.err] at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1449) [System.err] at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146) [System.err] at android.animation.AnimationHandler.-wrap2(Unknown Source:0) [System.err] at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54) [System.err] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:909) [System.err] at android.view.Choreographer.doCallbacks(Choreographer.java:723) [System.err] at android.view.Choreographer.doFrame(Choreographer.java:655) [System.err] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897) [System.err] at android.os.Handler.handleCallback(Handler.java:789) [System.err] at android.os.Handler.dispatchMessage(Handler.java:98) [System.err] at android.os.Looper.loop(Looper.java:164) [System.err] at android.app.ActivityThread.main(ActivityThread.java:6938) [System.err] at java.lang.reflect.Method.invoke(Native Method) [System.err] at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) [System.err] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

Configuration

Version of the Plugin: 1.4.6

Platform: Anddroid 8.0 and Android 8.1.0

Device: Samsung Galaxy S8 and Nexus 6P

smsissuechecker commented 6 years ago

Hi @damienb,

I'm the friendly issue checker. Thanks for using the issue template :star2: I appreciate it very much. I'm sure, the maintainers of this repository will answer, soon.

smstuebe commented 6 years ago

I think this is by design, because handling this state is hard, because you have to check state etc. That's why I cancel the authentication on OnPause

https://github.com/smstuebe/xamarin-fingerprint/blob/8a2860ecae6bd7e246121256c388daeaaf3efdec/src/Plugin.Fingerprint.Android/Dialog/FingerprintDialogFragment.cs#L81-L87

You get a Canceled as result. If you want it to show again, show it again yourself :)

This behavior might change in the future when I don't have to rely on my own implementation and use the standard one instead (see #97).

cap-dbaronnet commented 6 years ago

Thank you for your answer. However, I receive a cancel and there is an exception in logs (which is why I think something is not going normally). Moreover, managing the cancel at the application level is not easy because it is necessary to differentiate a true cancel from a false. Would not you have another idea to fix this problem?

smstuebe commented 4 years ago

lifecycle is now completely managed by biometric prompt