fix(keyboard): limit adaptation to Xiaomi Facebook IAB
This commit is contained in:
@@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -37,10 +37,11 @@ export function getKeyboardAdaptEnvironment(
|
|||||||
export function shouldEnableKeyboardAdaptation(
|
export function shouldEnableKeyboardAdaptation(
|
||||||
environment: KeyboardAdaptEnvironment,
|
environment: KeyboardAdaptEnvironment,
|
||||||
): boolean {
|
): boolean {
|
||||||
return environment.isInAppBrowser;
|
return environment.usesXiaomiFacebookFallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function shouldUseInAppKeyboardFallback(): boolean {
|
export function shouldUseInAppKeyboardFallback(): boolean {
|
||||||
if (typeof navigator === "undefined") return false;
|
if (typeof navigator === "undefined") return false;
|
||||||
return getKeyboardAdaptEnvironment(navigator.userAgent).usesXiaomiFacebookFallback;
|
return getKeyboardAdaptEnvironment(navigator.userAgent)
|
||||||
|
.usesXiaomiFacebookFallback;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
/**
|
/**
|
||||||
* 软键盘避让 hook。
|
* 软键盘避让 hook。
|
||||||
*
|
*
|
||||||
* 目标环境:小米系设备上的 Facebook IAB 等软键盘覆盖页面但 viewport 信号不稳定的浏览器。
|
* 目标环境:小米系 Android 设备上的 Facebook IAB。
|
||||||
*
|
*
|
||||||
* 策略:
|
* 策略:
|
||||||
* 1. 持续写入 --app-viewport-height,聊天页高度不再只依赖 100dvh。
|
* 1. 持续写入 --app-viewport-height,聊天页高度不再只依赖 100dvh。
|
||||||
@@ -87,7 +87,7 @@ export function useKeyboardHeight({
|
|||||||
if (!shouldEnableKeyboardAdaptation(environment)) {
|
if (!shouldEnableKeyboardAdaptation(environment)) {
|
||||||
resetKeyboardVars();
|
resetKeyboardVars();
|
||||||
log.debug("[keyboard] disabled", {
|
log.debug("[keyboard] disabled", {
|
||||||
reason: "regular-browser",
|
reason: "not-xiaomi-facebook-iab",
|
||||||
environment,
|
environment,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user