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