mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
fix(editor): android keyboard can not be opened (#10502)
Close [BS-2674](https://linear.app/affine-design/issue/BS-2674/[android]-%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%8C%BA%E5%9F%9F%E7%82%B9%E5%87%BB%E5%90%8E%E6%97%A0%E6%B3%95%E6%BF%80%E6%B4%BB%E9%94%AE%E7%9B%98) [BS-2609](https://linear.app/affine-design/issue/BS-2609/[android]-%E8%BE%93%E5%85%A5%E7%9A%84-toolbar-%E6%B2%A1%E6%9C%89%E4%BA%86)
This commit is contained in:
@@ -2,6 +2,7 @@ import { AffineContext } from '@affine/core/components/context';
|
||||
import { AppFallback } from '@affine/core/mobile/components/app-fallback';
|
||||
import { configureMobileModules } from '@affine/core/mobile/modules';
|
||||
import { HapticProvider } from '@affine/core/mobile/modules/haptics';
|
||||
import { VirtualKeyboardProvider } from '@affine/core/mobile/modules/virtual-keyboard';
|
||||
import { router } from '@affine/core/mobile/router';
|
||||
import { configureCommonModules } from '@affine/core/modules';
|
||||
import { I18nProvider } from '@affine/core/modules/i18n';
|
||||
@@ -99,6 +100,44 @@ framework.impl(HapticProvider, {
|
||||
selectionChanged: () => Promise.reject('Not supported'),
|
||||
selectionEnd: () => Promise.reject('Not supported'),
|
||||
});
|
||||
framework.impl(VirtualKeyboardProvider, {
|
||||
onChange: callback => {
|
||||
if (!visualViewport) {
|
||||
console.warn('visualViewport is not supported');
|
||||
return () => {};
|
||||
}
|
||||
|
||||
const listener = () => {
|
||||
if (!visualViewport) return;
|
||||
const windowHeight = window.innerHeight;
|
||||
|
||||
/**
|
||||
* ┌───────────────┐ - window top
|
||||
* │ │
|
||||
* │ │
|
||||
* │ │
|
||||
* │ │
|
||||
* │ │
|
||||
* └───────────────┘ - keyboard top --
|
||||
* │ │ │ keyboard height in layout viewport
|
||||
* └───────────────┘ - page(html) bottom --
|
||||
* │ │ │ visualViewport.offsetTop
|
||||
* └───────────────┘ - window bottom --
|
||||
*/
|
||||
callback({
|
||||
visible: window.innerHeight - visualViewport.height > 0,
|
||||
height: windowHeight - visualViewport.height - visualViewport.offsetTop,
|
||||
});
|
||||
};
|
||||
|
||||
visualViewport.addEventListener('resize', listener);
|
||||
visualViewport.addEventListener('scroll', listener);
|
||||
return () => {
|
||||
visualViewport?.removeEventListener('resize', listener);
|
||||
visualViewport?.removeEventListener('scroll', listener);
|
||||
};
|
||||
},
|
||||
});
|
||||
const frameworkProvider = framework.provider();
|
||||
|
||||
// setup application lifecycle events, and emit application start event
|
||||
|
||||
Reference in New Issue
Block a user