diff --git a/packages/core/utils/android/index.ts b/packages/core/utils/android/index.ts index ecad29011..6ce42f554 100644 --- a/packages/core/utils/android/index.ts +++ b/packages/core/utils/android/index.ts @@ -1,5 +1,6 @@ import { Application } from '../../application'; import { Trace } from '../../trace'; +import { topmost } from '../../ui/frame/frame-stack'; let application: android.app.Application; let applicationContext: android.content.Context; @@ -67,7 +68,9 @@ export function dismissSoftInput(nativeView?: android.view.View): void { } windowToken = nativeView.getWindowToken(); } else if (getCurrentActivity() instanceof androidx.appcompat.app.AppCompatActivity) { - const decorView = getCurrentActivity().getWindow().getDecorView(); + const modalDialog = (topmost()?._modalParent ?? topmost())?.modal?._dialogFragment?.getDialog(); + const window = (modalDialog ?? getCurrentActivity()).getWindow(); + const decorView = window.getDecorView(); if (decorView) { windowToken = decorView.getWindowToken(); decorView.requestFocus(); diff --git a/packages/core/utils/index.android.ts b/packages/core/utils/index.android.ts index 429ea7eed..4f68331ad 100644 --- a/packages/core/utils/index.android.ts +++ b/packages/core/utils/index.android.ts @@ -2,6 +2,7 @@ import { Trace } from '../trace'; import { getFileExtension } from './common'; import { SDK_VERSION } from './constants'; import { android as AndroidUtils } from './native-helper'; +import { topmost } from '../ui/frame/frame-stack'; export { clearInterval, clearTimeout, setInterval, setTimeout } from '../timer'; export * from './common'; @@ -178,10 +179,10 @@ export function dismissSoftInput(nativeView?: any): void { export function dismissKeyboard() { dismissSoftInput(); - - const activity = AndroidUtils.getCurrentActivity(); - if (activity) { - const focus = activity.getCurrentFocus(); + const modalDialog = (topmost()?._modalParent ?? topmost())?.modal?._dialogFragment?.getDialog(); + const view = modalDialog ?? AndroidUtils.getCurrentActivity(); + if (view) { + const focus = view.getCurrentFocus(); if (focus) { focus.clearFocus();