xref: /expo/home/menu/DevMenuModule.ts (revision 9155fd2f)
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