接入原生壳生命周期事件
新增 app.lifecycle HostBridge 能力与 H5 订阅入口 Expo 壳通过 React Native AppState 注入真实前后台状态 Tauri 壳通过主窗口 focus 和 blur 注入真实激活状态 更新壳能力漂移检查、测试和架构文档
This commit is contained in:
@@ -6,6 +6,7 @@ import {
|
||||
normalizeHostBridgeColorScheme,
|
||||
normalizeHostBridgeExportFileName,
|
||||
normalizeHostBridgeExternalUrl,
|
||||
normalizeHostBridgeLifecycleState,
|
||||
} from './hostBridge';
|
||||
|
||||
describe('HostBridge shared contract helpers', () => {
|
||||
@@ -49,6 +50,7 @@ describe('HostBridge shared contract helpers', () => {
|
||||
test('识别 HostBridge 能力白名单', () => {
|
||||
expect(isHostBridgeCapability('appearance.getColorScheme')).toBe(true);
|
||||
expect(isHostBridgeCapability('share.open')).toBe(true);
|
||||
expect(isHostBridgeCapability('app.lifecycle')).toBe(true);
|
||||
expect(isHostBridgeCapability('app.setBadgeCount')).toBe(true);
|
||||
expect(isHostBridgeCapability('navigation.canGoBack')).toBe(true);
|
||||
expect(isHostBridgeCapability('unknown.capability')).toBe(false);
|
||||
@@ -71,4 +73,11 @@ describe('HostBridge shared contract helpers', () => {
|
||||
expect(normalizeHostBridgeColorScheme('unspecified')).toBe('unknown');
|
||||
expect(normalizeHostBridgeColorScheme(null)).toBe('unknown');
|
||||
});
|
||||
|
||||
test('归一化宿主生命周期状态', () => {
|
||||
expect(normalizeHostBridgeLifecycleState('active')).toBe('active');
|
||||
expect(normalizeHostBridgeLifecycleState('background')).toBe('background');
|
||||
expect(normalizeHostBridgeLifecycleState('extension')).toBe('inactive');
|
||||
expect(normalizeHostBridgeLifecycleState(null)).toBe('inactive');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -35,6 +35,7 @@ export type HostBridgeMethod = (typeof HOST_BRIDGE_METHODS)[number];
|
||||
export const HOST_BRIDGE_CAPABILITIES = [
|
||||
...HOST_BRIDGE_METHODS,
|
||||
'host.events',
|
||||
'app.lifecycle',
|
||||
'navigation.canGoBack',
|
||||
] as const;
|
||||
|
||||
@@ -103,6 +104,22 @@ export type NavigationCanGoBackEventPayload = {
|
||||
canGoBack: boolean;
|
||||
};
|
||||
|
||||
export type HostAppLifecycleState = 'active' | 'inactive' | 'background';
|
||||
|
||||
export type AppLifecycleEventPayload = {
|
||||
state: HostAppLifecycleState;
|
||||
focused: boolean;
|
||||
nativeState?: string;
|
||||
};
|
||||
|
||||
export function normalizeHostBridgeLifecycleState(
|
||||
rawState: unknown,
|
||||
): HostAppLifecycleState {
|
||||
return rawState === 'active' || rawState === 'background'
|
||||
? rawState
|
||||
: 'inactive';
|
||||
}
|
||||
|
||||
export type HostAppearanceColorScheme = 'light' | 'dark' | 'unknown';
|
||||
|
||||
export type AppearanceColorSchemeResult = {
|
||||
|
||||
Reference in New Issue
Block a user