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