1import { NativeModules, EventSubscription } from 'react-native'; 2 3import MockKernel from '../kernel/MockKernel'; 4import addListenerWithNativeCallback from '../utils/addListenerWithNativeCallback'; 5 6const NativeKernel = NativeModules.ExponentKernel || MockKernel; 7 8export type DevMenuSettings = { 9 motionGestureEnabled?: boolean; 10 touchGestureEnabled?: boolean; 11}; 12 13export type DevMenuItem = { 14 label: string; 15 isEnabled: boolean; 16 detail?: string; 17}; 18 19export async function getSettingsAsync(): Promise<DevMenuSettings | null> { 20 if (!NativeKernel.getDevMenuSettingsAsync) { 21 return null; 22 } 23 return await NativeKernel.getDevMenuSettingsAsync(); 24} 25 26export async function setSettingAsync(key: keyof DevMenuSettings, value?: boolean): Promise<void> { 27 await NativeKernel.setDevMenuSettingAsync(key, value); 28} 29 30export async function doesCurrentTaskEnableDevtoolsAsync(): Promise<boolean> { 31 return await NativeKernel.doesCurrentTaskEnableDevtoolsAsync(); 32} 33 34export async function closeAsync(): Promise<void> { 35 return await NativeKernel.closeDevMenuAsync(); 36} 37 38export async function getItemsToShowAsync(): Promise<{ [key: string]: DevMenuItem }> { 39 return await NativeKernel.getDevMenuItemsToShowAsync(); 40} 41 42export async function isOnboardingFinishedAsync(): Promise<boolean> { 43 return await NativeKernel.getIsOnboardingFinishedAsync(); 44} 45 46export async function setOnboardingFinishedAsync(finished: boolean): Promise<void> { 47 await NativeKernel.setIsOnboardingFinishedAsync(finished); 48} 49 50export async function selectItemWithKeyAsync(key: string): Promise<void> { 51 await NativeKernel.selectDevMenuItemWithKeyAsync(key); 52} 53 54export async function reloadAppAsync(): Promise<void> { 55 await NativeKernel.reloadAppAsync(); 56} 57 58export async function goToHomeAsync(): Promise<void> { 59 await NativeKernel.goToHomeAsync(); 60} 61 62export function listenForCloseRequests(listener: (event: any) => Promise<any>): EventSubscription { 63 return addListenerWithNativeCallback('ExponentKernel.requestToCloseDevMenu', listener); 64} 65