1 import ABI49_0_0ExpoModulesCore
2 
3 let brightnessChangeEvent = "Expo.brightnessDidChange"
4 
5 public class BrightnessModule: Module {
6   private var hasListeners = false
7 
8   public func definition() -> ModuleDefinition {
9     Name("ExpoBrightness")
10 
11     OnCreate {
12       appContext?.permissions?.register([
13         BrightnessPermissionsRequester()
14       ])
15     }
16 
17     Events(brightnessChangeEvent)
18 
19     AsyncFunction("getPermissionsAsync") { (promise: Promise) in
20       guard let permissions = appContext?.permissions else {
21         throw Exceptions.PermissionsModuleNotFound()
22       }
23       permissions.getPermissionUsingRequesterClass(
24         BrightnessPermissionsRequester.self,
25         resolve: promise.resolver,
26         reject: promise.legacyRejecter
27       )
28     }
29 
30     AsyncFunction("requestPermissionsAsync") { (promise: Promise) in
31       guard let permissions = appContext?.permissions else {
32         throw Exceptions.PermissionsModuleNotFound()
33       }
34       permissions.askForPermission(
35         usingRequesterClass: BrightnessPermissionsRequester.self,
36         resolve: promise.resolver,
37         reject: promise.legacyRejecter
38       )
39     }
40 
41     AsyncFunction("setBrightnessAsync") { (brightnessValue: Double) in
42       UIScreen.main.brightness = brightnessValue
43     }
44     .runOnQueue(.main)
45 
46     AsyncFunction("getBrightnessAsync") {
47       return UIScreen.main.brightness
48     }
49 
50     OnStartObserving {
51       hasListeners = true
52       NotificationCenter.default.addObserver(
53         self,
54         selector: #selector(self.brightnessDidChange),
55         name: UIScreen.brightnessDidChangeNotification,
56         object: nil
57       )
58     }
59 
60     OnStopObserving {
61       hasListeners = false
62       NotificationCenter.default.removeObserver(
63         self,
64         name: UIScreen.brightnessDidChangeNotification,
65         object: nil
66       )
67     }
68 
69     AsyncFunction("getSystemBrightnessAsync") {}
70     AsyncFunction("setSystemBrightnessAsync") {}
71     AsyncFunction("useSystemBrightnessAsync") {}
72     AsyncFunction("isUsingSystemBrightnessAsync") {}
73     AsyncFunction("getSystemBrightnessModeAsync") {}
74     AsyncFunction("setSystemBrightnessModeAsync") {}
75   }
76 
77   @objc
78   private func brightnessDidChange() {
79     if !hasListeners {
80       return
81     }
82     sendEvent(brightnessChangeEvent, ["brightness": UIScreen.main.brightness])
83   }
84 }
85