Просмотр исходного кода

massive improvement to dark mode detection on tvOS and massive improvement on ho cleanly tool views get their backgrounds set

Kevin Bradley лет назад: 5
Родитель
Сommit
54cbc02fd3

+ 10 - 8
Classes/Core/Controllers/FLEXNavigationController.m

@@ -10,6 +10,7 @@
 #import "FLEXExplorerViewController.h"
 #import "FLEXTabList.h"
 #import "FLEXColor.h"
+#import "NSObject+FLEX_Reflection.h"
 
 @interface UINavigationController (Private) <UIGestureRecognizerDelegate>
 - (void)_gestureRecognizedInteractiveHide:(UIGestureRecognizer *)sender;
@@ -71,6 +72,14 @@
         
         self.didSetupPendingDismissButtons = YES;
     }
+    #if TARGET_OS_TV
+        if ([self darkMode]){
+            self.view.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.8];
+        } else {
+            self.view.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8];
+        }
+    #endif
+        
 }
 
 - (void)viewDidAppear:(BOOL)animated {
@@ -86,14 +95,7 @@
         }
     }
     //the timing is janky here but its better than nothing for now.
-#if TARGET_OS_TV
-    if ([[self view] darkMode]){
-        self.view.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.8];
-    } else {
-        self.view.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.8];
-    }
-#endif
-    
+
 }
 
 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {

+ 6 - 0
Classes/Utility/Categories/NSObject+FLEX_Reflection.h

@@ -8,11 +8,17 @@
 //
 
 #import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
 #import <objc/runtime.h>
 @class FLEXMirror, FLEXMethod, FLEXIvar, FLEXProperty, FLEXMethodBase, FLEXPropertyAttributes, FLEXProtocol;
 
 NS_ASSUME_NONNULL_BEGIN
 
+@interface NSObject (tvOS)
+- (UIViewController *)topViewController;
+- (BOOL)darkMode;
+@end
+
 /// Returns the type encoding string given the encoding for the return type and parameters, if any.
 /// @discussion Example usage for a \c void returning method which takes
 /// an \c int: @code FLEXTypeEncoding(@encode(void), @encode(int));

+ 10 - 0
Classes/Utility/Categories/NSObject+FLEX_Reflection.m

@@ -17,7 +17,17 @@
 #import "FLEXPropertyAttributes.h"
 #import "NSArray+FLEX.h"
 #import "FLEXUtility.h"
+#import "UIWindow+FLEX.h"
 
+@implementation NSObject (tvOS)
+
+- (UIViewController *)topViewController {
+    return [[[UIApplication sharedApplication] keyWindow] visibleViewController];
+}
+- (BOOL)darkMode {
+    return [[[self topViewController] view] darkMode];
+}
+@end
 
 NSString * FLEXTypeEncodingString(const char *returnType, NSUInteger count, ...) {
     if (returnType == NULL) return nil;

+ 4 - 0
Classes/Utility/Categories/UIView+FLEX_Layout.h

@@ -10,6 +10,10 @@
 
 #define Padding(p) UIEdgeInsetsMake(p, p, p, p)
 
+@interface UIView (darkMode)
+- (BOOL)darkMode;
+@end
+
 @interface UIView (FLEX_Layout)
 
 - (void)centerInView:(UIView *)view;

+ 16 - 0
Classes/Utility/Categories/UIView+FLEX_Layout.m

@@ -8,6 +8,22 @@
 
 #import "UIView+FLEX_Layout.h"
 
+@implementation UIView (darkMode)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+#pragma clang diagnostic ignored "-Wunguarded-availability"
+- (BOOL)darkMode {
+
+    if ([[self traitCollection] respondsToSelector:@selector(userInterfaceStyle)]){
+        return ([[self traitCollection] userInterfaceStyle] == UIUserInterfaceStyleDark);
+    } else {
+        return false;
+    }
+    return false;
+}
+#pragma clang diagnostic pop
+@end
+
 @implementation UIView (FLEX_Layout)
 
 - (void)centerInView:(UIView *)view {

+ 17 - 0
Classes/Utility/Categories/UIWindow+FLEX.h

@@ -0,0 +1,17 @@
+//
+//  UIWindow+FLEX.h
+//  FLEX
+//
+//  Created by Kevin Bradley on 12/23/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface UIWindow (FLEX)
+- (UIViewController *)visibleViewController;
+@end
+
+NS_ASSUME_NONNULL_END

+ 33 - 0
Classes/Utility/Categories/UIWindow+FLEX.m

@@ -0,0 +1,33 @@
+//
+//  UIWindow+FLEX.m
+//  FLEX
+//
+//  Created by Kevin Bradley on 12/23/20.
+//  Copyright © 2020 Flipboard. All rights reserved.
+//
+
+#import "UIWindow+FLEX.h"
+
+@implementation UIWindow (FLEX)
+
+- (UIViewController *)visibleViewController {
+    UIViewController *rootViewController = self.rootViewController;
+    return [UIWindow getVisibleViewControllerFrom:rootViewController];
+}
+
++ (UIViewController *) getVisibleViewControllerFrom:(UIViewController *) vc {
+    if ([vc isKindOfClass:[UINavigationController class]]) {
+        return [UIWindow getVisibleViewControllerFrom:[((UINavigationController *) vc) visibleViewController]];
+    } else if ([vc isKindOfClass:[UITabBarController class]]) {
+        return [UIWindow getVisibleViewControllerFrom:[((UITabBarController *) vc) selectedViewController]];
+    } else {
+        if (vc.presentedViewController) {
+            return [UIWindow getVisibleViewControllerFrom:vc.presentedViewController];
+        } else {
+            return vc;
+        }
+    }
+}
+
+
+@end

+ 0 - 4
Classes/Utility/FLEXColor.h

@@ -9,10 +9,6 @@
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
 
-@interface UIView (darkMode)
-- (BOOL)darkMode;
-@end
-
 #define UIColorFromRGB(rgbValue, alp) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:alp]
 
 NS_ASSUME_NONNULL_BEGIN

+ 0 - 16
Classes/Utility/FLEXColor.m

@@ -9,22 +9,6 @@
 #import "FLEXColor.h"
 #import "FLEXUtility.h"
 
-@implementation UIView (darkMode)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunguarded-availability-new"
-#pragma clang diagnostic ignored "-Wunguarded-availability"
-- (BOOL)darkMode {
-
-    if ([[self traitCollection] respondsToSelector:@selector(userInterfaceStyle)]){
-        return ([[self traitCollection] userInterfaceStyle] == UIUserInterfaceStyleDark);
-    } else {
-        return false;
-    }
-    return false;
-}
-#pragma clang diagnostic pop
-@end
-
 #if FLEX_AT_LEAST_IOS13_SDK
 #define FLEXDynamicColor(dynamic, static) ({ \
     UIColor *c; \

+ 8 - 0
FLEX.xcodeproj/project.pbxproj

@@ -18,6 +18,8 @@
 		2EF6B04D1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */; };
 		2EF6B04E1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */; };
 		325D7AAF2593AE4700CC6B10 /* Cursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 325D7AAE2593AE4700CC6B10 /* Cursor.png */; };
+		325D7AB32593F25B00CC6B10 /* UIWindow+FLEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 325D7AB12593F25B00CC6B10 /* UIWindow+FLEX.h */; };
+		325D7AB42593F25B00CC6B10 /* UIWindow+FLEX.m in Sources */ = {isa = PBXBuildFile; fileRef = 325D7AB22593F25B00CC6B10 /* UIWindow+FLEX.m */; };
 		32D4E15B259273E60027F238 /* fakes.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D4E15A259273E60027F238 /* fakes.h */; };
 		32D4E15D2592749D0027F238 /* fakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D4E15C2592749D0027F238 /* fakes.m */; };
 		32D4E15E2592749D0027F238 /* fakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 32D4E15C2592749D0027F238 /* fakes.m */; };
@@ -377,6 +379,8 @@
 		2EF6B04B1D494BE50006BDA5 /* FLEXNetworkCurlLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLEXNetworkCurlLogger.m; sourceTree = "<group>"; };
 		2EF6B04C1D494BE50006BDA5 /* FLEXNetworkCurlLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLEXNetworkCurlLogger.h; sourceTree = "<group>"; };
 		325D7AAE2593AE4700CC6B10 /* Cursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Cursor.png; sourceTree = SOURCE_ROOT; };
+		325D7AB12593F25B00CC6B10 /* UIWindow+FLEX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UIWindow+FLEX.h"; sourceTree = "<group>"; };
+		325D7AB22593F25B00CC6B10 /* UIWindow+FLEX.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIWindow+FLEX.m"; sourceTree = "<group>"; };
 		32D4E15A259273E60027F238 /* fakes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fakes.h; sourceTree = "<group>"; };
 		32D4E15C2592749D0027F238 /* fakes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = fakes.m; sourceTree = "<group>"; };
 		3A4C941F1B5B20570088C3F2 /* FLEX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FLEX.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1262,6 +1266,8 @@
 				C3694DC123EA147F006625D7 /* UIBarButtonItem+FLEX.m */,
 				C30199482409B38A00759E8E /* CALayer+FLEX.h */,
 				C30199492409B38A00759E8E /* CALayer+FLEX.m */,
+				325D7AB12593F25B00CC6B10 /* UIWindow+FLEX.h */,
+				325D7AB22593F25B00CC6B10 /* UIWindow+FLEX.m */,
 			);
 			path = Categories;
 			sourceTree = "<group>";
@@ -1447,6 +1453,7 @@
 				C312A13423ECBE5800E38049 /* FLEXBookmarksViewController.h in Headers */,
 				222C88221C7339DC007CA15F /* FLEXRealmDefines.h in Headers */,
 				779B1ED21C0C4D7C001F5E49 /* FLEXTableColumnHeader.h in Headers */,
+				325D7AB32593F25B00CC6B10 /* UIWindow+FLEX.h in Headers */,
 				3A4C94FD1B5B21410088C3F2 /* FLEXArgumentInputStructView.h in Headers */,
 				C3F646C1239EAA8F00D4A011 /* UIPasteboard+FLEX.h in Headers */,
 				94A515141C4CA1C00063292F /* FLEXManager.h in Headers */,
@@ -1819,6 +1826,7 @@
 				3A4C95411B5B21410088C3F2 /* FLEXNetworkTransactionCell.m in Sources */,
 				C3DFCD952416BC6500BB7084 /* FLEXFilteringTableViewController.m in Sources */,
 				C3F527BE2318603F009CBA07 /* FLEXShortcutsSection.m in Sources */,
+				325D7AB42593F25B00CC6B10 /* UIWindow+FLEX.m in Sources */,
 				3A4C94D61B5B21410088C3F2 /* FLEXObjectExplorerViewController.m in Sources */,
 				C383C3BD23B6B398007A321B /* UITextField+Range.m in Sources */,
 				3A4C94DE1B5B21410088C3F2 /* FLEXHeapEnumerator.m in Sources */,