From eee4082a1afee545b34e00db291e489988254e5e Mon Sep 17 00:00:00 2001 From: Toxblh Date: Wed, 29 Aug 2018 00:08:46 +0100 Subject: [PATCH] + Added NightShift Widget + Updated icons for illumination and added icons for NightShift --- MTMR.xcodeproj/project.pbxproj | 10 ++++ .../ill_down.imageset/Contents.json | 2 +- .../ill_down.imageset/KeyboardBrightDown.png | Bin 0 -> 1515 bytes .../ill_down.imageset/ill_down.png | Bin 2418 -> 0 bytes .../ill_up.imageset/Contents.json | 2 +- .../ill_up.imageset/KeyboardBrightUp.png | Bin 0 -> 1524 bytes .../ill_up.imageset/ill_up.png | Bin 2960 -> 0 bytes .../nightShiftOff.imageset/Contents.json | 24 +++++++++ .../nightShiftOff.imageset/NightShift.png | Bin 0 -> 2150 bytes .../nightShiftOn.imageset/Contents.json | 21 ++++++++ .../NightShiftEnabled.png | Bin 0 -> 3386 bytes MTMR/CBridge/CBBlueLightClient.h | 34 ++++++++++++ MTMR/CBridge/TouchBarPrivateApi-Bridging.h | 3 +- MTMR/ItemsParsing.swift | 16 +++++- MTMR/TouchBarController.swift | 4 ++ MTMR/Widgets/NightShiftBarItem.swift | 50 ++++++++++++++++++ 16 files changed, 162 insertions(+), 4 deletions(-) create mode 100644 MTMR/Assets.xcassets/ill_down.imageset/KeyboardBrightDown.png delete mode 100644 MTMR/Assets.xcassets/ill_down.imageset/ill_down.png create mode 100644 MTMR/Assets.xcassets/ill_up.imageset/KeyboardBrightUp.png delete mode 100644 MTMR/Assets.xcassets/ill_up.imageset/ill_up.png create mode 100644 MTMR/Assets.xcassets/nightShiftOff.imageset/Contents.json create mode 100644 MTMR/Assets.xcassets/nightShiftOff.imageset/NightShift.png create mode 100644 MTMR/Assets.xcassets/nightShiftOn.imageset/Contents.json create mode 100644 MTMR/Assets.xcassets/nightShiftOn.imageset/NightShiftEnabled.png create mode 100644 MTMR/CBridge/CBBlueLightClient.h create mode 100644 MTMR/Widgets/NightShiftBarItem.swift diff --git a/MTMR.xcodeproj/project.pbxproj b/MTMR.xcodeproj/project.pbxproj index d431b04..e601167 100644 --- a/MTMR.xcodeproj/project.pbxproj +++ b/MTMR.xcodeproj/project.pbxproj @@ -34,6 +34,8 @@ B059D622205E03F5006E6B86 /* TouchBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B059D621205E03F5006E6B86 /* TouchBarController.swift */; }; B059D624205E04F3006E6B86 /* CustomButtonTouchBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B059D623205E04F3006E6B86 /* CustomButtonTouchBarItem.swift */; }; B059D62D205F11E8006E6B86 /* DFRFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B059D62C205F11E8006E6B86 /* DFRFoundation.framework */; }; + B08173272135F02B005D4908 /* NightShiftBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = B08173262135F02B005D4908 /* NightShiftBarItem.swift */; }; + B081732A2135F354005D4908 /* CoreBrightness.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B08173292135F354005D4908 /* CoreBrightness.framework */; }; B082B253205C7D8000BC04DC /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B082B252205C7D8000BC04DC /* AppDelegate.swift */; }; B082B257205C7D8000BC04DC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B082B256205C7D8000BC04DC /* Assets.xcassets */; }; B082B25A205C7D8000BC04DC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B082B258205C7D8000BC04DC /* Main.storyboard */; }; @@ -87,6 +89,9 @@ B059D629205E13E5006E6B86 /* TouchBarPrivateApi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TouchBarPrivateApi.h; sourceTree = ""; }; B059D62A205F0E7D006E6B86 /* TouchBarPrivateApi-Bridging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TouchBarPrivateApi-Bridging.h"; sourceTree = ""; }; B059D62C205F11E8006E6B86 /* DFRFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = DFRFoundation.framework; path = ../../../../../System/Library/PrivateFrameworks/DFRFoundation.framework; sourceTree = ""; }; + B08173262135F02B005D4908 /* NightShiftBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NightShiftBarItem.swift; sourceTree = ""; }; + B08173282135F128005D4908 /* CBBlueLightClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CBBlueLightClient.h; sourceTree = ""; }; + B08173292135F354005D4908 /* CoreBrightness.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBrightness.framework; path = ../../../../../System/Library/PrivateFrameworks/CoreBrightness.framework; sourceTree = ""; }; B082B24F205C7D8000BC04DC /* MTMR.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MTMR.app; sourceTree = BUILT_PRODUCTS_DIR; }; B082B252205C7D8000BC04DC /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; B082B256205C7D8000BC04DC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -118,6 +123,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + B081732A2135F354005D4908 /* CoreBrightness.framework in Frameworks */, B059D62D205F11E8006E6B86 /* DFRFoundation.framework in Frameworks */, B09EB1E6207C0F8E00D5C1E0 /* MultitouchSupport.framework in Frameworks */, ); @@ -136,6 +142,7 @@ B059D62B205F11E8006E6B86 /* Frameworks */ = { isa = PBXGroup; children = ( + B08173292135F354005D4908 /* CoreBrightness.framework */, B09EB1E5207C0F8E00D5C1E0 /* MultitouchSupport.framework */, B059D62C205F11E8006E6B86 /* DFRFoundation.framework */, ); @@ -230,6 +237,7 @@ 6042B6A92083E27000C525C8 /* DeprecatedCarbonAPI.c */, 60173D3C20C0031B002C305F /* LaunchAtLoginController.h */, 60173D3D20C0031B002C305F /* LaunchAtLoginController.m */, + B08173282135F128005D4908 /* CBBlueLightClient.h */, ); path = CBridge; sourceTree = ""; @@ -247,6 +255,7 @@ 60F7D453208CC31400ABF5D2 /* InputSourceBarItem.swift */, 60C44AFC20A373A100C0EC91 /* MusicBarItem.swift */, 60669B4220AD8FA80074E817 /* GroupBarItem.swift */, + B08173262135F02B005D4908 /* NightShiftBarItem.swift */, ); path = Widgets; sourceTree = ""; @@ -381,6 +390,7 @@ B0F3112520C9E35F0076BB88 /* SupportNSTouchBar.swift in Sources */, 6042B6AA2083E27000C525C8 /* DeprecatedCarbonAPI.c in Sources */, B09EB1E4207C082000D5C1E0 /* HapticFeedback.swift in Sources */, + B08173272135F02B005D4908 /* NightShiftBarItem.swift in Sources */, 60F7D454208CC31400ABF5D2 /* InputSourceBarItem.swift in Sources */, 36A778BE20A6C27100B38714 /* GeneralExtensions.swift in Sources */, 60669B4320AD8FA80074E817 /* GroupBarItem.swift in Sources */, diff --git a/MTMR/Assets.xcassets/ill_down.imageset/Contents.json b/MTMR/Assets.xcassets/ill_down.imageset/Contents.json index 9b00565..c593265 100644 --- a/MTMR/Assets.xcassets/ill_down.imageset/Contents.json +++ b/MTMR/Assets.xcassets/ill_down.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "universal", - "filename" : "ill_down.png", + "filename" : "KeyboardBrightDown.png", "scale" : "2x" }, { diff --git a/MTMR/Assets.xcassets/ill_down.imageset/KeyboardBrightDown.png b/MTMR/Assets.xcassets/ill_down.imageset/KeyboardBrightDown.png new file mode 100644 index 0000000000000000000000000000000000000000..697f213b147ce8a132db21b9319fd75d629bc957 GIT binary patch literal 1515 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z81_l2o1NIQQFd{@Cx}5WK3yM;Ui-FqgOrctk#n9D9Agr-7huMKFh_1oE zC==+@M3B4e451bvi=nHJ#AX4qAd&`9&|3v$R;1=cxMTtY6zmH#0~>v;66hM8^K`Ye5o1R}Ho%5|=ed5=a_TlC6qMld@8iOORp<7-!(L@06IXk0flPk5#n| zFeO;|=BH$)Rk|dWq}mx77+UBWSm+uWgczDz8CX~uo7?E4sX=l9NXEG+HL)bWC?r2W z#}4d^To6~mSkGL~7@`+h1yr+*J}4g{m-V?sDzz}C}BTi>sYkP77SdaTB_ zZ=ze7(DSpO)7?F1wKXuXC@?T`I502?pfL+xvMgizu*>)Rc{`h%>vMPA&yM*T^>+CT zb?L?7{MR=Y`Ts3lA^iK{m;a^tTwdpwd|mM;Kem70|7a(_A=ra9V z`}z6e`;+r(=X6_`?G69FHMgX%_iW|Q&p%CWrrbHc^M>r~cQ>zZyJ%@*_I#=2qkPTm wWzV<^XV3a_Gyml*aprtL!6A+s=7@&Wy@|)J+ys@tp00i_>zopr0J{wOpa1{> literal 0 HcmV?d00001 diff --git a/MTMR/Assets.xcassets/ill_down.imageset/ill_down.png b/MTMR/Assets.xcassets/ill_down.imageset/ill_down.png deleted file mode 100644 index 0d3a01e5cdd146aff5d4516a9698a6c2866ce438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2418 zcmb_e`#Tei7oU5{GG?h}F1=PSN-c`Sl>3lNBBoqZUM9D#4a2mOjpdd%TOneNun0-m z%HEOELc-&=P;$4oncIu6_xmS&pYM6j=X}mN&vTyVJkR;zd?;=%_CUphiU0rrh;p#G zxWgU)Vwe0*tn#id+#%UmE7YZ3J4W1fEp4aX9p&H?3jpi^{|hMq%CT5Yzrj`wU4;mRe4#ox+mzET0U^hgJIHoVg)*l@o8i(26WvsU zN>pg>vNVJaZU0?X`K2=NJ80i@d6_DP_s=}9V!8M;NaABce7uWAf&?8dDO}smS#G?M z7~WM$AAEUJ8E0;4DCpAu?)`k`2p7gx z42ZvgaI7c5mH_RisqcH*xV7j*d5XTfHG*bn!I-Aq`CiCtsLx*X}I=1(qFbt+96_K&#C*};@%Q?*2yyv0#yvWChP6?LZfO*i(~$$ z)R7xz5~_21pDac@u32ZI=6ELoLkpI9Kk?Ur%*~vP_OGVaIE5^C1ye1;*%z_|ov1@g zkwO(AQh0>hpcGfc_?G|Ftks)M_8n&`?nc0=oi2K99YiWcSiE8^|$A*6S9T&g?yi1N?eVg!Aml{%1 zcj`QG%vtTji0RQ}Z6XD$zO!tX1>dL-zph{2Z`rx%s3AC#kYP_hCc8IBQW~kVCAfrh z8Yl3XMJu3w4WWo9GPnIm#grZvlPh&Mr)K1M9_1AZ7v)Z-C?u@Tca?JTUFEA$L}&O( z*nn-}*<}^sI5oP!ww`V6fpXI4V||zeyR;yFnW zZd@(!&@l|T1&?!G-?cPKt+{$`{aMG~)Ec63vIe+H z7-GZ2kt1_b*VPSZ`fD0%hNP=XlH~dW+}_FOMVSu_s1*kfuft-l0LJva?_XKab{!dR z3m7v;e<${2&cLMn+-pJf=4|nDZBcW&$M0k)DnW(F#;p33X+j%nF{_T>WCLJ-7?O?| z&kCl@d%EP-fDgi2nOJC9M;&wa8l}K#Ykb8gXu3@ za`HLu%kKjxLeq4FX3V7aVPztn7(OG(_2KrDZqU&qbF$U^{t7#W?ZM;!zlL1bW+p#~9q+@+BkHc3 zbi3)IF80sF|1|^JNacVVL8cE0f<#rq1Mj#*$dcOykzUJQ5j{>W`jfgUJ9dMDe1_wN zZ6ud|XW#m;<`4geQ@4+xOtw7A>2lHi(d&#GncSF84Ec~^3|`ggYvpX`dXL9=iCCU} zbl&j8ik6jEAlh??%Wn%xEn?w)P^@zG+eOhPCVv(CI0)R^S0@Dj0=a+oGYH2t<<1z; zelI#>!@1ZQ+d@sn+Y?jkAg38gFquP zb$A~*xkvFw+0$c3^ZUQuj+2Umc1#?|wD3C)y;)%bPiS)T^EfvuU#mA!(>{B>4_k(N z;)cAJhD%TH96Wam05#G~uB^KIcXv<IZBsN$+dcFnO!BXl?cBS4gLQdlSbE`3lnc zjOD}2)m>Q;r8`0#+6fA4f<><&cdlI%wK?yVNzG}!uy7V+#(VPaN*>Ad^3zbN%Vc$Kz2w?aCeTVsYA9t@}kXwLg4&z`7>*|6raDYlidN+%2K zl{_sA8h3A{o3hJN%UOG1!bF>G)C}8@T&M}ZRTVKrvl7r1{-LfP=Oww$QZn_zvTb>a zG@L(?oKwi9gjONcq4s%o53euuu@Gjw(RiFchRitK)9z3I^2UI*eF!SXM)cQLry%-5 zRxac|i?C4$m^E&(UpEix-M4%l8HE}-|D|{uIC%`G@L9X+%6R=W@LKeUl(B=sZ0$6V z_cn66uGa9;=(+WX%0cb$kgKO#QsyeplH~vRZ`w%1npIVPV47ql?0n$!Uj49hFvgbO zpwwybrcT986NHR-x=BW_YT7kRMQDIi=mwbdzTrL5UB{%Y)Fzut3^ZCB#@afk1 zhhP9d-{RI&q(4DJyZaNnfsSUR=Uxq;4h6_8`x7?{8$c#%^`B25IDyb*|Fq3N3jx(f zydJ7_ZGTKKZ{wD6eJLTyKYCl~vG+*xHb;bE!kb|OrFQ?5#K;r-Q?8p+pSP`K?}#P< N%GSlE+A84oe*i0Bj{X1u diff --git a/MTMR/Assets.xcassets/ill_up.imageset/Contents.json b/MTMR/Assets.xcassets/ill_up.imageset/Contents.json index 3d34b88..b99b980 100644 --- a/MTMR/Assets.xcassets/ill_up.imageset/Contents.json +++ b/MTMR/Assets.xcassets/ill_up.imageset/Contents.json @@ -6,7 +6,7 @@ }, { "idiom" : "universal", - "filename" : "ill_up.png", + "filename" : "KeyboardBrightUp.png", "scale" : "2x" }, { diff --git a/MTMR/Assets.xcassets/ill_up.imageset/KeyboardBrightUp.png b/MTMR/Assets.xcassets/ill_up.imageset/KeyboardBrightUp.png new file mode 100644 index 0000000000000000000000000000000000000000..e27fd3918fcc0875161e2c0472f1a55f52d26852 GIT binary patch literal 1524 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z81_l2o1NIQQFd{@Cx}5WK3yM;Ui-FqgOrctk#n9D9Agr-7huMKFh_1oE zC==+@M3B4e451bvi=nHJ#AX4qAd&`9&|3v$R;1=cxMTtY6zmH#0~>v;66hM8^K`Ye5o1R}Ho%5|=ed5=a_TlC6qMld@8iOORp<7-!(L@06IXk0flPk5#n| zFeO;|=BH$)Rk|dWq}mx77+UBWSm+uWgczDz8CY1EnAqr}sX=l9NXEG+HL)bWC?r2W z#}4d^To6~mSkGL~7@`+h1yr+*J}4g{IZFlkO0E=Izm&Vv@F3(u@dnL)_fNCFT~j&o z{*dB&&hO7_^i>vyx;ij02{bUUC@?T`ATf_{o(X+atG`}d-t70@>DTuj3tfM=ZuZR_ zslDe4=9c~A&*t&3ovv*C=FZeFntMI?FU7ZJ?{2SNyX3?jFMEA4uhsLn*}Yq$x6HrR zYxlD3<$Le!{(geD+_d&o^^TKke)A;V*nV~Olu7TicAb8=WoGGl$GlAbTJ61_J6~=+ z=bF5hsWSF^(Rs(kXTRteOf7cL-1cqC?0Z+lnU3cs{YtW~K6!qZH17|MyPp1++C@66 zRrOV`S5Dif!UXomERHMln}6=Uxc_f%%&*nUrp&(9eZ_Lx?I$ZM&aqy8_-X6 z*%G$IPxHIM?S%VF+Bw~JY22NrX1z1IYRT^d5m>?k7%ZV*nVB@^AG=j__y(vb_H^}g JS?83{1OQZ%1L6Px literal 0 HcmV?d00001 diff --git a/MTMR/Assets.xcassets/ill_up.imageset/ill_up.png b/MTMR/Assets.xcassets/ill_up.imageset/ill_up.png deleted file mode 100644 index 4639ae7415fc9bd686ea1c6ad6d6c2b5f2c87711..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2960 zcmcIm`8yO07afM|6vl3NMKZ|PGi0(xG)Z=143fsaL@~^eW$elF+P!4UHlxTArYJr{ zg-o_EB8+wH44?OZ_`dTz=bn4+bAGtb{psQ@5VyG4Mc4rV0GFwWq2;;u{Y%yh=e5qR zzUW+-g7i(TSkDo`>Yi}!+5AoHg8%>yzJJL8$SV*!Z&XYT^{m1Q)~3S=0wLnPTbe8{ z2Ji-9!c3VLKbb&?YWJaDj37~2aj7KV42O!8Y4oGOeqvvL#eliG(3NS6cFs?k<-ELJ zrBA-e{lkI78J4C8=9G*`xZDMUwT9muQ#TsBriams+T9X^>!DHYT}#x{dP%AO3#@;@ zpD=Dm8Q?Bs4X~A$m!x>7C1({$D5UDwY58V`E~XhCF=2VV7eX+s8TO8to!n941CkEX zB-!0ae}ysfc5~u4As!&5yHbJISa1`tW}R9@=6ruOcwVYA1OP9y`~3$WLfRxOCmrk} zrmRwnTI9Tsq)s{KTI;N?&CC3yR9X*1$yxvf=PIlBAUwVNY(r!3Zn=5u!TmE@B1ta~ zswJnZj0UvnjE5oDp@WpIF{SxjNP^3QqO^@S+iV)p`qyzlPhcg$4T~cSRjQM2kl1J8 zMM0Z%Apc{+vK#00fsVkab(6{hk_5d2{}JHzK_rD+nyc>Xz`~c-B{$d zk<0e%qbQLNR8qK=h}_6)b@Ik;-i$+AnfG6V+=cvuL=Sbaok_QsEoP73o|VuA!`{We zx2%=CjI(AAJko^zG;sc25lNQMN@DSCrc7DZNE+bau)b9}WGQ9p)t#LAb=)Ld!7TLM zD5Ot6zP0Y7h_Q6(9LZ)%H#n41zbjYH9#|BAvIrZzI{_7h^AyztAgZm>uOVaNPr$dL zj7l9+idp<*p+kC+=VQOH!7cq;TE;H|?;bruMpwG=FbE*I0M?pZ$Eh@rwqCdJoIvKM z)k~Bvk(NQ47HYNU^w~k?&ikxP`M!G$LjgDZ&9SteKyi)ap2|z-r?l<|NgJ*k;0~>5 z)@XKr4=nA~NwQ4g2?aN#3Jh~B35rz_I=JErIpt#*n!D2vaq- z649~3fe-`c+=Mkd&}%1fceZv$hA`_1o{;5koK%3aO+O`Ja0Bi(Nd?lSwt!={eW-WI z;p?kqH;TK)x)0{C9^bf52u8Y=jK!C!2FhKg*W%Nova)mn99{+$1E}0~+>Ry@NYn$) z3#Yfqx4%>M6x(X7T!@0A^)orzj5!}1^B1IKRGA(7WkXM+}&-xXJ$igD|#{Lu-=-On#TN088+Z%n}%35U<0+GRKQQLMa!Yc^b{ z7I5~-E%*alMxnT3^R&fa3RhW>!fz5EBi-D6{v#aI z^z66R9%ObWxfgz!)Kp(0^0L=~y%mRun$05R+R54oY8XEP{;(zRJMNIBg`*uYM%jq!Ff?Gt)v35+84!V!|3<1BB3ot(rq8oaxs(E1gJR)s^2sVw!{CcuN6FG&uEBcEIk>Zg|7ZNIeWs zRP0ynQyk{RGxz8j)E3q^2lOe@&b&uHay6>o`fEaoQcXggBpacVJ6fj22a^JxiyKXH zQ9tJCPyXcd(^yj!eJgtA2yItkoK&wVY@{B@VXqieR*U5u4eN2?!?kEr&vnIV#`VAfav7a!&IC7i|?X$ zdPHV13+U;;6ENh{Y@p}-+J~9naGrw9O6ct>zT*&=XvO-k?So+ENG#p@3oX46*Tfm; zWL;rjkac;#JQ)@j1Hl#&$8uf`s&qJ9#774LG>9>wEdTd7i2>UZg^ z$OB(Vw55NCT{CGcERS!#hC)S?Gx9wuK@9n# zdgKs}3E~BG>%<~uRyRDmfng>!L?O$%aYP*`cP#yCk~rr4qZjci!3`@aw^Y0`9QJ-4 zB7`^zA03w;6TRUa%3ntC`QAS|7fc-Hs85Kxbfz2PMoW%NR5w3Kstt*h#E!c2+@@Lp9!-b+E_FS&(A`Wpi$ zJLa8UheZA9oOZ(QfSUT8Bn&qY(4}DRHWlxC6Wl2ROtCWC>J0@=H z^!7%wi)MUniCZI*+dl9Se&jc1rzmL?Ko&OJ)O}Y!4#INVHJ_fNL0>?Te*|^nkA2?v zPr);VV%I%eJy#z6>F5~%-`F@ac$PH=@MaDd?ClanS15+dx?9G%M%|mhNJKJSFCX7Z zEz?Od&r}D0xN>_}2-|eEDX6xCJilPddDYxL%G;~B+`V17ozO87o;IdcNHv=sy|D+( zQJ;$Oa+l~i5Yl*!lIERa@*W&-AaM85$tLq5z8-F5?m-klQHugkug#JpS z&r*Ax-E3W7);g!f(WHMreeTm(Yf1gQwz6)iPfIu}DHj{4a#?lu;Vg^bm@F51NfU_Z zUm3O6;0XVefm-ZANWOwur&}tqyi5;rlf7tJ2r*fXQ+@>JnU2o1NIQQFd{@Cx}5WK3yM;Ui-FqgOrctk#n9D9Agr-7huMKFh_1oE zC==+@M3B4e451bvi=nHJ#AX4qAd&`9&|3v$R;1=cxMTtY6zmH#0~>v;66hM8^K`Ye5o1R}Ho%5|=ed5=a_TlC6qMld@8iOORp<7-!(L@06IXk0flPk5#n| zFeO;|=BH$)Rk|dWq}mx77+UBWSm+uWgculD8CX~u03!iS4U!8$GR{S*i6!|(A^G_^ zc3@xRg18FCdggk@5WUDMpqg#;LHP(NUqLc0SQMCR?YMwCVI_ba*S5av>@1P zLo!(3&a}=J4HP*3IUp(Vv2q>LL8pM`RxvN1PojSq#I+9|^Shw6(L-Gm zGU;S=6=@PU=qJD`&!M$1;Q#*FvNLzTxw*Ui@x0wT-yN_|KR0Ld=lL^jtKZ!`dm%vC zmvt7GiD-t_g^&d+5Bv{lTV2+@{^z2KQCNcJDg$K^sy!@Zq*?lTMRO(mdpWnMZ z{bfvdKd<6#5!KUIgeukl&e`B>@&1jOT-L|N^-?t zcKXMxCfTx+MeUm>y-GWruA3SZ82MrQlKv%&Y+fA8jk_pzf9qsdR~M%I)>z4lvYyAf z)m}b-xI1i9{KbfdoPfwp;cl~om!17R_uQk^SB@QQRH@^*&FmAM@?UR?=d|nx5!;u{ z-@J*hUrpRD7;;q&XuHZR)rXX)ScuMa;s z@w}}3ac*k;)+N0y=@$NVnID!M*c=m`==r(yV?h(=)@^&1Zfo5xx2iUA?d`AcInOHm z{33hm_2GxD5*W-gc*j*%{xR13Vd%N0JxY6hE~!*s{dq7ww{`OD{|pD_ zzDun%{=O~2b@g9%hNHLcEv>y|b2%raa<_TsJVA^0-zlHhUA%HnwYK5KUFUD2cV2cM z(lkHw@>SypmkQktcPjIr9cE~6KihONRdYG3-Jh#|%S0}2x^Swa=WLtowRch5r|pcH zJZ&0J!GWvcGX;15b#G{JI`rOzy`8mDS&3bwp|98QSqsa35pF$;-%6L0wx(pRUSqe< zR{YMz)X*No)$hWEfvm6|f#Yk;VhRrJO-zZHcuw6xzG7xTn++F(?W!J^)M#bt;yK`) zP^S_TYsPBxT{&^urq1hU%?fny&;7BBV^M9h)DA5(PE%+Wa|mwajcBxY`BNU>-_oE5 Ps{B1&{an^LB{Ts5;aXCi literal 0 HcmV?d00001 diff --git a/MTMR/Assets.xcassets/nightShiftOn.imageset/Contents.json b/MTMR/Assets.xcassets/nightShiftOn.imageset/Contents.json new file mode 100644 index 0000000..04be4c7 --- /dev/null +++ b/MTMR/Assets.xcassets/nightShiftOn.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "NightShiftEnabled.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MTMR/Assets.xcassets/nightShiftOn.imageset/NightShiftEnabled.png b/MTMR/Assets.xcassets/nightShiftOn.imageset/NightShiftEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..442bae1a4608345737135c477723a7932d548f5e GIT binary patch literal 3386 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 + +typedef struct { + int hour; + int minute; +} Time; + +typedef struct { + Time fromTime; + Time toTime; +} Schedule; + +typedef struct { + BOOL active; + BOOL enabled; + BOOL sunSchedulePermitted; + int mode; + Schedule schedule; + unsigned long long disableFlags; +} Status; + +@interface CBBlueLightClient: NSObject +- (BOOL) setEnabled:(BOOL)enabled; +- (BOOL) setMode:(int)mode; +- (void) getBlueLightStatus: (Status *)status; +@end diff --git a/MTMR/CBridge/TouchBarPrivateApi-Bridging.h b/MTMR/CBridge/TouchBarPrivateApi-Bridging.h index 70634c7..158b8a4 100644 --- a/MTMR/CBridge/TouchBarPrivateApi-Bridging.h +++ b/MTMR/CBridge/TouchBarPrivateApi-Bridging.h @@ -9,7 +9,8 @@ #import "TouchBarPrivateApi.h" #import "TouchBarSupport.h" #import "DeprecatedCarbonAPI.h" -#include "LaunchAtLoginController.h" +#import "CBBlueLightClient.h" +#import "LaunchAtLoginController.h" NS_ASSUME_NONNULL_BEGIN diff --git a/MTMR/ItemsParsing.swift b/MTMR/ItemsParsing.swift index 4147ff2..ab5935b 100644 --- a/MTMR/ItemsParsing.swift +++ b/MTMR/ItemsParsing.swift @@ -177,7 +177,16 @@ class SupportedTypesHolder { parameters: [:] ) }, - ] + + "nightShift": {_ in + return ( + item: .nightShift(), + action: .none, + longAction: .none, + parameters: [:] + ) + } + ] static let sharedInstance = SupportedTypesHolder() @@ -211,6 +220,7 @@ enum ItemType: Decodable { case inputsource() case music(interval: Double) case groupBar(items: [BarItemDefinition]) + case nightShift() private enum CodingKeys: String, CodingKey { case type @@ -242,6 +252,7 @@ enum ItemType: Decodable { case inputsource case music case groupBar + case nightShift } init(from decoder: Decoder) throws { @@ -298,6 +309,9 @@ enum ItemType: Decodable { case .groupBar: let items = try container.decode([BarItemDefinition].self, forKey: .items) self = .groupBar(items: items) + + case .nightShift: + self = .nightShift() } } } diff --git a/MTMR/TouchBarController.swift b/MTMR/TouchBarController.swift index ce0bac3..3e6ad50 100644 --- a/MTMR/TouchBarController.swift +++ b/MTMR/TouchBarController.swift @@ -44,6 +44,8 @@ extension ItemType { return "com.toxblh.mtmr.music." case .groupBar(items: _): return "com.toxblh.mtmr.groupBar." + case .nightShift(items: _): + return "com.toxblh.mtmr.nightShift." } } @@ -279,6 +281,8 @@ class TouchBarController: NSObject, NSTouchBarDelegate { barItem = MusicBarItem(identifier: identifier, interval: interval) case .groupBar(items: let items): barItem = GroupBarItem(identifier: identifier, items: items) + case .nightShift(): + barItem = NightShiftBarItem(identifier: identifier) } if let action = self.action(forItem: item), let item = barItem as? CustomButtonTouchBarItem { diff --git a/MTMR/Widgets/NightShiftBarItem.swift b/MTMR/Widgets/NightShiftBarItem.swift new file mode 100644 index 0000000..471acf0 --- /dev/null +++ b/MTMR/Widgets/NightShiftBarItem.swift @@ -0,0 +1,50 @@ +// +// nightShift.swift +// MTMR +// +// Created by Anton Palgunov on 28/08/2018. +// Copyright © 2018 Anton Palgunov. All rights reserved. +// + +import Foundation + +class NightShiftBarItem: CustomButtonTouchBarItem { + private let nsclient = CBBlueLightClient() + + private var blueLightStatus: Status { + var status: Status = Status() + nsclient.getBlueLightStatus(&status) + return status + } + + private var isNightShiftEnabled: Bool { + return self.blueLightStatus.enabled.boolValue + } + + private func setNightShift(state: Bool) { + self.nsclient.setEnabled(state) + } + + init(identifier: NSTouchBarItem.Identifier) { + super.init(identifier: identifier, title: "") + self.isBordered = false + self.setWidth(value: 28) + + self.tapClosure = { [weak self] in self?.nightShiftAction() } + + self.refresh() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func nightShiftAction() { + self.setNightShift(state: !self.isNightShiftEnabled) + self.refresh() + } + + func refresh() { + self.image = isNightShiftEnabled ? #imageLiteral(resourceName: "nightShiftOn") : #imageLiteral(resourceName: "nightShiftOff") + } +}