diff --git a/packages/core/ui/core/view-base/index.d.ts b/packages/core/ui/core/view-base/index.d.ts index 4e7313dbd..1c88ea81b 100644 --- a/packages/core/ui/core/view-base/index.d.ts +++ b/packages/core/ui/core/view-base/index.d.ts @@ -83,6 +83,11 @@ export interface ShowModalOptions { * An optional parameter specifying whether the modal view can be dismissed when not in full-screen mode. */ cancelable?: boolean; + /** + * An optional parameter specifying the windowSoftInputMode of the dialog window + * For possible values see https://developer.android.com/reference/android/view/WindowManager.LayoutParams#softInputMode + */ + windowSoftInputMode?: number; }; /** * An optional parameter specifying whether the modal view can be dismissed when not in full-screen mode. diff --git a/packages/core/ui/core/view-base/index.ts b/packages/core/ui/core/view-base/index.ts index 67e4010b0..39a585c24 100644 --- a/packages/core/ui/core/view-base/index.ts +++ b/packages/core/ui/core/view-base/index.ts @@ -87,6 +87,12 @@ export interface ShowModalOptions { * An optional parameter specifying whether the modal view can be dismissed when not in full-screen mode. */ cancelable?: boolean; + + /** + * An optional parameter specifying the windowSoftInputMode of the dialog window. + * For possible values see https://developer.android.com/reference/android/view/WindowManager.LayoutParams#softInputMode + */ + windowSoftInputMode?: number; }; /** * An optional parameter specifying whether the modal view can be dismissed when not in full-screen mode. diff --git a/packages/core/ui/core/view/index.android.ts b/packages/core/ui/core/view/index.android.ts index 0a3e50b7b..fe7b0b7d4 100644 --- a/packages/core/ui/core/view/index.android.ts +++ b/packages/core/ui/core/view/index.android.ts @@ -76,6 +76,7 @@ interface DialogOptions { animated: boolean; stretched: boolean; cancelable: boolean; + windowSoftInputMode: number; shownCallback: () => void; dismissCallback: () => void; } @@ -168,6 +169,7 @@ function initializeDialogFragment() { class DialogFragmentImpl extends androidx.fragment.app.DialogFragment { public owner: View; private _fullscreen: boolean; + private _windowSoftInputMode: number; private _animated: boolean; private _stretched: boolean; private _cancelable: boolean; @@ -192,6 +194,7 @@ function initializeDialogFragment() { this._stretched = options.stretched; this._dismissCallback = options.dismissCallback; this._shownCallback = options.shownCallback; + this._windowSoftInputMode = options.windowSoftInputMode; this.setStyle(androidx.fragment.app.DialogFragment.STYLE_NO_TITLE, 0); let theme = this.getTheme(); @@ -229,6 +232,16 @@ function initializeDialogFragment() { owner._setupAsRootView(this.getActivity()); owner._isAddedToNativeVisualTree = true; + // we need to set the window SoftInputMode here. + // it wont work is set in onStart + const window = this.getDialog().getWindow(); + if (this._windowSoftInputMode !== undefined) { + window.setSoftInputMode(this._windowSoftInputMode); + } else { + // the dialog seems to not follow the default activity softInputMode, + // thus set we set it here. + window.setSoftInputMode((owner._context).getWindow().getAttributes().softInputMode); + } return owner.nativeViewProtected; } @@ -672,10 +685,14 @@ export class View extends ViewCommon { df.setArguments(args); let cancelable = true; + let windowSoftInputMode: number; - if (options.android && (options).android.cancelable !== undefined) { - cancelable = !!(options).android.cancelable; - console.log('ShowModalOptions.android.cancelable is deprecated. Use ShowModalOptions.cancelable instead.'); + if (options.android) { + if ((options).android.cancelable !== undefined) { + cancelable = !!(options).android.cancelable; + console.log('ShowModalOptions.android.cancelable is deprecated. Use ShowModalOptions.cancelable instead.'); + } + windowSoftInputMode = (options).android.windowSoftInputMode; } cancelable = options.cancelable !== undefined ? !!options.cancelable : cancelable; @@ -686,6 +703,7 @@ export class View extends ViewCommon { animated: !!options.animated, stretched: !!options.stretched, cancelable: cancelable, + windowSoftInputMode: windowSoftInputMode, shownCallback: () => this._raiseShownModallyEvent(), dismissCallback: () => this.closeModal(), };