124a0cefbSTomasz Sapetaimport { NativeModules, EventSubscription } from 'react-native'; 224a0cefbSTomasz Sapeta 324a0cefbSTomasz Sapetaimport MockKernel from '../kernel/MockKernel'; 424a0cefbSTomasz Sapetaimport addListenerWithNativeCallback from '../utils/addListenerWithNativeCallback'; 524a0cefbSTomasz Sapeta 624a0cefbSTomasz Sapetaconst NativeKernel = NativeModules.ExponentKernel || MockKernel; 724a0cefbSTomasz Sapeta 8f67462bcSTomasz Sapetaexport type DevMenuSettings = { 9*8b9cba7eSEvan Bacon motionGestureEnabled?: boolean; 10*8b9cba7eSEvan Bacon touchGestureEnabled?: boolean; 11f67462bcSTomasz Sapeta}; 12f67462bcSTomasz Sapeta 1324a0cefbSTomasz Sapetaexport type DevMenuItem = { 1424a0cefbSTomasz Sapeta label: string; 1524a0cefbSTomasz Sapeta isEnabled: boolean; 1624a0cefbSTomasz Sapeta detail?: string; 1724a0cefbSTomasz Sapeta}; 1824a0cefbSTomasz Sapeta 19f67462bcSTomasz Sapetaexport async function getSettingsAsync(): Promise<DevMenuSettings | null> { 20f67462bcSTomasz Sapeta if (!NativeKernel.getDevMenuSettingsAsync) { 21f67462bcSTomasz Sapeta return null; 22f67462bcSTomasz Sapeta } 23f67462bcSTomasz Sapeta return await NativeKernel.getDevMenuSettingsAsync(); 24f67462bcSTomasz Sapeta} 25f67462bcSTomasz Sapeta 26*8b9cba7eSEvan Baconexport async function setSettingAsync(key: keyof DevMenuSettings, value?: boolean): Promise<void> { 27f67462bcSTomasz Sapeta await NativeKernel.setDevMenuSettingAsync(key, value); 28f67462bcSTomasz Sapeta} 29f67462bcSTomasz Sapeta 3024a0cefbSTomasz Sapetaexport async function doesCurrentTaskEnableDevtoolsAsync(): Promise<boolean> { 3124a0cefbSTomasz Sapeta return await NativeKernel.doesCurrentTaskEnableDevtoolsAsync(); 3224a0cefbSTomasz Sapeta} 3324a0cefbSTomasz Sapeta 3424a0cefbSTomasz Sapetaexport async function closeAsync(): Promise<void> { 3524a0cefbSTomasz Sapeta return await NativeKernel.closeDevMenuAsync(); 3624a0cefbSTomasz Sapeta} 3724a0cefbSTomasz Sapeta 3824a0cefbSTomasz Sapetaexport async function getItemsToShowAsync(): Promise<{ [key: string]: DevMenuItem }> { 3924a0cefbSTomasz Sapeta return await NativeKernel.getDevMenuItemsToShowAsync(); 4024a0cefbSTomasz Sapeta} 4124a0cefbSTomasz Sapeta 4224a0cefbSTomasz Sapetaexport async function isOnboardingFinishedAsync(): Promise<boolean> { 4324a0cefbSTomasz Sapeta return await NativeKernel.getIsOnboardingFinishedAsync(); 4424a0cefbSTomasz Sapeta} 4524a0cefbSTomasz Sapeta 4624a0cefbSTomasz Sapetaexport async function setOnboardingFinishedAsync(finished: boolean): Promise<void> { 4724a0cefbSTomasz Sapeta await NativeKernel.setIsOnboardingFinishedAsync(finished); 4824a0cefbSTomasz Sapeta} 4924a0cefbSTomasz Sapeta 5024a0cefbSTomasz Sapetaexport async function selectItemWithKeyAsync(key: string): Promise<void> { 5124a0cefbSTomasz Sapeta await NativeKernel.selectDevMenuItemWithKeyAsync(key); 5224a0cefbSTomasz Sapeta} 5324a0cefbSTomasz Sapeta 5424a0cefbSTomasz Sapetaexport async function reloadAppAsync(): Promise<void> { 5524a0cefbSTomasz Sapeta await NativeKernel.reloadAppAsync(); 5624a0cefbSTomasz Sapeta} 5724a0cefbSTomasz Sapeta 5824a0cefbSTomasz Sapetaexport async function goToHomeAsync(): Promise<void> { 5924a0cefbSTomasz Sapeta await NativeKernel.goToHomeAsync(); 6024a0cefbSTomasz Sapeta} 6124a0cefbSTomasz Sapeta 62*8b9cba7eSEvan Baconexport function listenForCloseRequests(listener: (event: any) => Promise<any>): EventSubscription { 6324a0cefbSTomasz Sapeta return addListenerWithNativeCallback('ExponentKernel.requestToCloseDevMenu', listener); 6424a0cefbSTomasz Sapeta} 65