fix(keyboard): limit adaptation to Xiaomi Facebook IAB

This commit is contained in:
2026-07-01 12:01:12 +08:00
parent fd1a2bad3c
commit 27c9e107a2
3 changed files with 78 additions and 4 deletions
@@ -0,0 +1,73 @@
import { describe, expect, it } from "vitest";
import { shouldEnableKeyboardAdaptation } from "../environment";
import type { KeyboardAdaptEnvironment } from "../types";
function makeEnvironment(
overrides: Partial<KeyboardAdaptEnvironment> = {},
): KeyboardAdaptEnvironment {
return {
platform: "android",
osName: "Android",
osVersion: "16",
deviceVendor: "Xiaomi",
deviceModel: "2211133C",
isAndroid: true,
isIOS: false,
isMobile: true,
browserName: "Facebook",
browserVersion: "566.0.0.48.73",
isInAppBrowser: true,
inAppBrowserName: "facebook",
isXiaomiFamilyDevice: true,
isFacebookInAppBrowser: true,
hasVisualViewport: true,
hasVirtualKeyboard: true,
usesXiaomiFacebookFallback: true,
...overrides,
};
}
describe("shouldEnableKeyboardAdaptation", () => {
it("enables only for Xiaomi Android Facebook in-app browser fallback", () => {
expect(shouldEnableKeyboardAdaptation(makeEnvironment())).toBe(true);
expect(
shouldEnableKeyboardAdaptation(
makeEnvironment({
platform: "ios",
osName: "iOS",
osVersion: "18",
deviceVendor: "Apple",
deviceModel: "iPhone",
isAndroid: false,
isIOS: true,
isXiaomiFamilyDevice: false,
usesXiaomiFacebookFallback: false,
}),
),
).toBe(false);
expect(
shouldEnableKeyboardAdaptation(
makeEnvironment({
browserName: "Instagram",
inAppBrowserName: "instagram",
isFacebookInAppBrowser: false,
usesXiaomiFacebookFallback: false,
}),
),
).toBe(false);
expect(
shouldEnableKeyboardAdaptation(
makeEnvironment({
deviceVendor: "Samsung",
deviceModel: "SM-G991B",
isXiaomiFamilyDevice: false,
usesXiaomiFacebookFallback: false,
}),
),
).toBe(false);
});
});
+3 -2
View File
@@ -37,10 +37,11 @@ export function getKeyboardAdaptEnvironment(
export function shouldEnableKeyboardAdaptation(
environment: KeyboardAdaptEnvironment,
): boolean {
return environment.isInAppBrowser;
return environment.usesXiaomiFacebookFallback;
}
export function shouldUseInAppKeyboardFallback(): boolean {
if (typeof navigator === "undefined") return false;
return getKeyboardAdaptEnvironment(navigator.userAgent).usesXiaomiFacebookFallback;
return getKeyboardAdaptEnvironment(navigator.userAgent)
.usesXiaomiFacebookFallback;
}
+2 -2
View File
@@ -2,7 +2,7 @@
/**
* 软键盘避让 hook。
*
* 目标环境:小米系设备上的 Facebook IAB 等软键盘覆盖页面但 viewport 信号不稳定的浏览器
* 目标环境:小米系 Android 设备上的 Facebook IAB。
*
* 策略:
* 1. 持续写入 --app-viewport-height,聊天页高度不再只依赖 100dvh。
@@ -87,7 +87,7 @@ export function useKeyboardHeight({
if (!shouldEnableKeyboardAdaptation(environment)) {
resetKeyboardVars();
log.debug("[keyboard] disabled", {
reason: "regular-browser",
reason: "not-xiaomi-facebook-iab",
environment,
});
return;