Compare commits

..
Author SHA1 Message Date
qnblackcat b83081fd57 v17.21.3-2.1 2022-06-01 22:26:49 +07:00
qnblackcat c74b5203f7 added IAmYouTube (credit: PoomSmart) 2022-06-01 21:52:06 +07:00
qnblackcat 920b7c4882 update description 2022-05-29 10:12:21 +07:00
qnblackcat d469f31270 fixed #179 2022-05-29 10:09:20 +07:00
qnblackcat f910c416ef v17.20.3-2.1 2022-05-25 13:04:32 +07:00
qnblackcat fb0e5073ae temporary fix for issue #54 2022-05-24 01:13:41 +07:00
qnblackcat f9e05fee77 update submodules 2022-05-24 01:12:42 +07:00
qnblackcat ec7eec660b fix YTCastconfirm, code clean up 2022-05-21 12:51:11 +07:00
qnblackcat 2e6c19c060 update description 2022-05-21 12:50:50 +07:00
qnblackcat bb3b8ed310 v17.19.3-2.1 2022-05-20 21:44:58 +07:00
qnblackcat b94a5cc967 hide Previous/Next button 2022-05-20 21:38:33 +07:00
qnblackcat 8b50a3c1b7 more? 2022-05-20 21:29:30 +07:00
qnblackcat 025dc4d2cb update submodules 2022-05-20 20:58:46 +07:00
qnblackcat 9860fdb4e8 v17.19.2-2.1-F3 2022-05-17 10:07:23 +07:00
qnblackcat 5e9d719882 fix app crash upon launching on some devices 2022-05-17 09:44:54 +07:00
qnblackcat f63cfa8b43 update Makefile 2022-05-17 09:43:12 +07:00
qnblackcat 37b6b1e07e update description 2022-05-17 09:43:01 +07:00
qnblackcat 1827ece773 v17.19.2-2.1 2022-05-16 17:31:50 +07:00
qnblackcat f9e98fa04d update submodules 2022-05-16 16:52:25 +07:00
qnblackcat 2c5d0545d7 added YTMiniPlayerEnabler by level3tjg 2022-05-16 11:56:29 +07:00
qnblackcat 3c33e6fed0 update Header.h 2022-05-16 11:55:33 +07:00
qnblackcat daa004d027 update Makefile 2022-05-16 11:55:24 +07:00
qnblackcat 556f4dd8cf update submodules 2022-05-16 10:21:16 +07:00
qnblackcat 68855e71bf update description 2022-05-10 20:48:40 +07:00
qnblackcat 8fcf17572d colored things that should be colored :/ 2022-05-10 20:38:25 +07:00
qnblackcat 94c58965c7 update Makefile 2022-05-10 20:10:04 +07:00
qnblackcat 5e7b7717ff remove old codes 2022-05-10 20:09:47 +07:00
Nguyễn Đạt 1a99fa819e Merge pull request #149 from BandarHL/main
Update OLED Dark mode: code clean up, better performance.
2022-05-10 19:39:12 +07:00
BandarHelal 0c8376fc60 Update OLED Dark mode feature
well, instead of hooking every view for YouTube to change the color, you can achieve the same results with less code by hooking the Color palette (YTColorPalette).
2022-05-09 23:39:02 +03:00
11 changed files with 340 additions and 322 deletions
+16 -18
View File
@@ -1,5 +1,18 @@
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h" #import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
@interface SSOConfiguration : NSObject
@end
@interface YTMainAppControlsOverlayView: UIView
@end
@interface YTPlaylistHeaderViewController : UIViewController
@property (nonatomic, strong, readwrite) UIView *downloadsButton;
@end
@interface ASWAppSwitcherCollectionViewCell: UIView
@end
@interface YTMainAppVideoPlayerOverlayView : UIView @interface YTMainAppVideoPlayerOverlayView : UIView
- (UIViewController *)_viewControllerForAncestor; - (UIViewController *)_viewControllerForAncestor;
@end @end
@@ -7,31 +20,13 @@
@interface YTWatchMiniBarView : UIView @interface YTWatchMiniBarView : UIView
@end @end
@interface YTAsyncCollectionView : UIView
@end
@interface YTPlayerViewController (YTAFS) @interface YTPlayerViewController (YTAFS)
- (void)autoFullscreen; - (void)autoFullscreen;
@end @end
@interface YTTopAlignedView : UIView
@end
@interface YTLightweightQTMButton : UIView
@end
@interface NIAttributedLabel : UIView
@end
@interface YTShareMainView : UIView
@end
@interface ASScrollView : UIView @interface ASScrollView : UIView
@end @end
@interface ASCollectionView : UIView
@end
@interface UIKeyboardLayoutStar : UIView @interface UIKeyboardLayoutStar : UIView
@end @end
@@ -42,4 +37,7 @@
@end @end
@interface UIPredictionViewController : UIViewController @interface UIPredictionViewController : UIViewController
@end
@interface SponsorBlockSettingsController : UITableViewController
@end @end
+2 -1
View File
@@ -1,6 +1,8 @@
uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib uYouPlus_INJECT_DYLIBS = Tweaks/uYou/Library/MobileSubstrate/DynamicLibraries/uYou.dylib .theos/obj/libcolorpicker.dylib .theos/obj/iSponsorBlock.dylib .theos/obj/YTUHD.dylib .theos/obj/YouPiP.dylib .theos/obj/YouTubeDislikesReturn.dylib .theos/obj/YoutubeSpeed.dylib
TARGET = iphone:clang:latest:12.0
uYouPlus_USE_FLEX = 0 uYouPlus_USE_FLEX = 0
uYouPlus_USE_FISHHOOK = 0
ARCHS = arm64 ARCHS = arm64
MODULES = jailed MODULES = jailed
FINALPACKAGE = 1 FINALPACKAGE = 1
@@ -12,7 +14,6 @@ BUNDLE_ID = com.google.ios.youtube
uYouPlus_FILES = uYouPlus.xm Settings.xm uYouPlus_FILES = uYouPlus.xm Settings.xm
uYouPlus_IPA = ./tmp/Payload/YouTube.app uYouPlus_IPA = ./tmp/Payload/YouTube.app
### Important: edit the path to your decrypted YouTube IPA!!!
include $(THEOS)/makefiles/common.mk include $(THEOS)/makefiles/common.mk
include $(THEOS_MAKE_PATH)/tweak.mk include $(THEOS_MAKE_PATH)/tweak.mk
+14 -14
View File
@@ -1,6 +1,5 @@
![cydia-1900000830-iphone-0-1628105716 3](https://user-images.githubusercontent.com/52943116/135612614-3d3138cb-2a3d-4ed1-9244-905bab8f5c9f.PNG) ![cydia-1900000830-iphone-0-1628105716 3](https://user-images.githubusercontent.com/52943116/135612614-3d3138cb-2a3d-4ed1-9244-905bab8f5c9f.PNG)
# Table of Contents # Table of Contents
* [Credits](#credits) * [Credits](#credits)
@@ -10,8 +9,7 @@
* [Installation](#installation) * [Installation](#installation)
* [Support the developers!](#support-the-developers) * [Support the developers!](#support-the-developers)
* [FAQ](#faq) * [FAQ](#faq)
* [Building (optional)](#building-optional) * [Building](#building-optional)
# Credits # Credits
@@ -21,9 +19,9 @@
- [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock. - [HASHBANG Productions](https://github.com/hbang) for [Alderis Color Picker](https://github.com/hbang/Alderis) - a dependency of iSponsorBlock.
- [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [NoYTPremium](https://github.com/PoomSmart/NoYTPremium/), [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTAutoFullScreen](https://github.com/PoomSmart/YTAutoFullScreen/), [YTReExplore](https://github.com/PoomSmart/YTReExplore/), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html), [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html), and [Return YouTube Dislike](https://github.com/PoomSmart/Return-YouTube-Dislikes) - [PoomSmart](https://twitter.com/poomsmart) - the developer of many tweaks used by uYouPlus, include: [NoYTPremium](https://github.com/PoomSmart/NoYTPremium/), [YouRememberCaption](https://www.ios-repo-updates.com/repository/poomsmart/package/com.ps.youremembercaption/), [YTClassicVideoQuality](https://poomsmart.github.io/repo/depictions/ytclassicvideoquality.html), [YTNoCheckLocalNetwork](https://poomsmart.github.io/repo/depictions/ytnochecklocalnetwork.html), [YTSystemAppearance](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html), [YTAutoFullScreen](https://github.com/PoomSmart/YTAutoFullScreen/), [YTReExplore](https://github.com/PoomSmart/YTReExplore/), [IAmYouTube](https://github.com/PoomSmart/IAmYouTube), [YTUHD](https://poomsmart.github.io/repo/depictions/ytuhd.html), [YouPiP](https://poomsmart.github.io/repo/depictions/youpip.html), and [Return YouTube Dislike](https://github.com/PoomSmart/Return-YouTube-Dislikes)
- [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards). - [level3tjg](https://twitter.com/level3tjg) - for [YTNoHoverCards](https://github.com/level3tjg/YTNoHoverCards) and [YTMiniplayerEnabler](https://github.com/level3tjg/YTMiniplayerEnabler).
- [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/) - [Lyvendia](https://github.com/Lyvendia/) for [YTSpeed](https://github.com/Lyvendia/YTSpeed/)
@@ -33,7 +31,6 @@
- [theos team](https://github.com/theos/theos) for theos & theos-jailed. - [theos team](https://github.com/theos/theos) for theos & theos-jailed.
# Features # Features
1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info! 1. **uYou:** uYou has a ton of features that I can't list them all. Visit [here](https://miro92.com/repo/depictions/?p=com.miro.uyou) for more info!
@@ -63,6 +60,8 @@
12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed 12. **YTSpeed**: add 2.25, 2.5, 2.75, and 3x playback speed
13. **YTMiniplayerEnabler**: enable Miniplayer for all YouTube videos.
</details> </details>
# Known issues # Known issues
@@ -71,7 +70,6 @@
- Issues that related to **uYouPlus** are [here](https://github.com/qnblackcat/uYouPlus/issues/) - Issues that related to **uYouPlus** are [here](https://github.com/qnblackcat/uYouPlus/issues/)
# Download # Download
- **uYouPlus** (or you can call it uYou+) requires iOS & iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases). - **uYouPlus** (or you can call it uYou+) requires iOS & iPadOS 13.0 or later. The latest version of **uYouPlus** can be found in the [Release tab](https://github.com/qnblackcat/uYouPlus/releases).
@@ -80,21 +78,21 @@
- My official AtlStore repo: https://qnblackcat.github.io/AltStore/ - My official AtlStore repo: https://qnblackcat.github.io/AltStore/
- [Open in AltStore (v17.18.4-2.1)](https://tinyurl.com/bdzxtdrx) - It will take a while to install because AltStore needs to download the IPA. - [Open in AltStore (v17.21.3-2.1)](https://tinyurl.com/52j8xeee) - It will take a while to install because AltStore needs to download the IPA.
- Version info: _(last update: May 09)_ - Version info: _(last update: June 01)_
<details> <details>
<summary> ▶︎ Expand</summary> <summary> ▶︎ Expand</summary>
| **Tweaks/App** | **Version** | **Open source** | | **Tweaks/App** | **Version** | **Open source** |
| :------------: | :----------:| :-------------: | | :------------: | :----------:| :-------------: |
| **YouTube** | 17.18.4 | ✖︎ | | **YouTube** | 17.21.3 | ✖︎ |
| [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ | | [uYou](https://github.com/MiRO92/uYou-for-YouTube) | 2.1 | ✖︎ |
| [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ | | [Open in YouTube](https://github.com/CokePokes/YoutubeExtensions/) | 1.2 | ✖︎ |
| **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) | | **Return YouTube Dislike** | 1.6.4 | [✔︎](https://github.com/PoomSmart/Return-YouTube-Dislikes) |
| **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) | | **iSponsorBlock** | 1.0-14 | [✔︎](https://github.com/Galactic-Dev/iSponsorBlock) |
| **Alderis Color Picker** | 1.1.2| [✔︎](https://github.com/hbang/Alderis) | | **Alderis Color Picker** | 1.2| [✔︎](https://github.com/hbang/Alderis) |
| **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) | | **NoYTPremium** | 1.0.4 | [✔︎](https://github.com/PoomSmart/NoYTPremium/) |
| **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) | | **YouRememberCaption** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/youremembercaption.html) |
| **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) | | **YTClassicVideoQuality** | 1.0.1 | [✔︎](https://github.com/PoomSmart/YTClassicVideoQuality) |
@@ -103,11 +101,13 @@
| **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) | | **YTSystemAppearance** | 1.0.0 | [✔︎](https://poomsmart.github.io/repo/depictions/ytsystemappearance.html) |
| **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) | | **YTUHD** | 1.2.7 | [✔︎](https://github.com/PoomSmart/YTUHD) |
| **YouPiP** | 1.7.0 | [✔︎](https://github.com/PoomSmart/YouPiP) | | **YouPiP** | 1.7.0 | [✔︎](https://github.com/PoomSmart/YouPiP) |
| **IAmYouTube** | 1.2.0 | [✔︎](https://github.com/PoomSmart/IAmYouTube) |
| **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) | | **YTSpeed** | 1.0.1 | [✔︎](https://github.com/Lyvendia/YTSpeed) |
| **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) | | **YTAutoFullScreen** | 1.0.3 | [✔︎](https://github.com/PoomSmart/YTAutoFullScreen/) |
| **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) | | **YTReExplore** | 1.0.2 | [✔︎](https://github.com/PoomSmart/YTReExplore) |
| **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) | | **BigYTMiniPlayer** | 1.0-1 | [✔︎](https://github.com/Galactic-Dev/BigYTMiniPlayer) |
| **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) | | **YTCastConfirm** | 1.0.0 | [✔︎](https://github.com/JamieBerghmans/YTCastConfirm) |
| **YTMiniplayerEnabler** | 0.0.2 | [✔︎](https://github.com/level3tjg/YTMiniplayerEnabler) |
</details> </details>
@@ -117,7 +117,7 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
# Support the developers # Support the developers
<details> <details>
<summary>MiRO92</summary> <summary>▶︎ MiRO92</summary>
- CashApp: https://cash.app/$MiRO92M - CashApp: https://cash.app/$MiRO92M
@@ -125,14 +125,14 @@ See [Installation - Wiki](https://github.com/qnblackcat/uYouPlus/wiki/Installati
</details> </details>
<details> <details>
<summary>Poomsmart</summary> <summary>▶︎ Poomsmart</summary>
- Paypal: https://poomsmart.github.io/ - Paypal: https://poomsmart.github.io/
</details> </details>
<details> <details>
<summary>Galactic-dev</summary> <summary>▶︎ Galactic-dev</summary>
- Paypal: https://www.paypal.com/paypalme/DBrett684 - Paypal: https://www.paypal.com/paypalme/DBrett684
+23 -4
View File
@@ -18,6 +18,8 @@ extern BOOL bigYTMiniPlayer();
extern BOOL hideCC(); extern BOOL hideCC();
extern BOOL hideAutoplaySwitch(); extern BOOL hideAutoplaySwitch();
extern BOOL castConfirm(); extern BOOL castConfirm();
extern BOOL ytMiniPlayer();
extern BOOL hidePreviousAndNextButton();
// Settings // Settings
%hook YTAppSettingsPresentationData %hook YTAppSettingsPresentationData
@@ -29,13 +31,30 @@ extern BOOL castConfirm();
[mutableOrder insertObject:@(uYouPlusSection) atIndex:insertIndex + 1]; [mutableOrder insertObject:@(uYouPlusSection) atIndex:insertIndex + 1];
return mutableOrder; return mutableOrder;
} }
%end %end
%hook YTSettingsSectionItemManager %hook YTSettingsSectionItemManager
%new - (void)updateuYouPlusSectionWithEntry:(id)entry { %new - (void)updateuYouPlusSectionWithEntry:(id)entry {
YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"]; YTSettingsViewController *delegate = [self valueForKey:@"_dataDelegate"];
YTSettingsSectionItem *hidePreviousAndNextButton = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Hide Previous and Next button" titleDescription:@"Hide Previous and Next button in video controls overlay."];
hidePreviousAndNextButton.hasSwitch = YES;
hidePreviousAndNextButton.switchVisible = YES;
hidePreviousAndNextButton.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePreviousAndNextButton_enabled"];
hidePreviousAndNextButton.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"hidePreviousAndNextButton_enabled"];
return YES;
};
YTSettingsSectionItem *ytMiniPlayer = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Enable the Miniplayer for all YouTube videos" titleDescription:@"Kid videos for example."];
ytMiniPlayer.hasSwitch = YES;
ytMiniPlayer.switchVisible = YES;
ytMiniPlayer.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
ytMiniPlayer.switchBlock = ^BOOL (YTSettingsCell *cell, BOOL enabled) {
[[NSUserDefaults standardUserDefaults] setBool:enabled forKey:@"ytMiniPlayer_enabled"];
return YES;
};
YTSettingsSectionItem *castConfirm = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Confirm alert before casting (YTCastConfirm)" titleDescription:@"Show a confirm alert before casting to prevent accidentally hijacking TV."]; YTSettingsSectionItem *castConfirm = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"Confirm alert before casting (YTCastConfirm)" titleDescription:@"Show a confirm alert before casting to prevent accidentally hijacking TV."];
castConfirm.hasSwitch = YES; castConfirm.hasSwitch = YES;
castConfirm.switchVisible = YES; castConfirm.switchVisible = YES;
@@ -108,7 +127,7 @@ extern BOOL castConfirm();
return YES; return YES;
}; };
YTSettingsSectionItem *oledDarkMode = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"WARNING: OLED Dark mode only works when YouTube is in Dark theme. App restart is required (In case OLED dark mode doesn't work: just switch between Light/Dark theme, then restart the app)."]; YTSettingsSectionItem *oledDarkMode = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Dark mode (Experimental)" titleDescription:@"App restart might be needed after switching between Light/Dark theme to fully apply changes. In case OLED Dark mode doesn't work: just switch between Light/Dark theme, then restart the app."];
oledDarkMode.hasSwitch = YES; oledDarkMode.hasSwitch = YES;
oledDarkMode.switchVisible = YES; oledDarkMode.switchVisible = YES;
oledDarkMode.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"]; oledDarkMode.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oled_enabled"];
@@ -117,7 +136,7 @@ extern BOOL castConfirm();
return YES; return YES;
}; };
YTSettingsSectionItem *oledKeyBoard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Keyboard" titleDescription:@"Might not working properly in some cases . App restart is required."]; YTSettingsSectionItem *oledKeyBoard = [[%c(YTSettingsSectionItem) alloc] initWithTitle:@"OLED Keyboard (Experimental)" titleDescription:@"Might not working properly in some cases. App restart is required."];
oledKeyBoard.hasSwitch = YES; oledKeyBoard.hasSwitch = YES;
oledKeyBoard.switchVisible = YES; oledKeyBoard.switchVisible = YES;
oledKeyBoard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"]; oledKeyBoard.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
@@ -126,7 +145,7 @@ extern BOOL castConfirm();
return YES; return YES;
}; };
NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, hideAutoplaySwitch, hideCC, hideHUD, hoverCardItem, bigYTMiniPlayer, oledKeyBoard, oledDarkMode,reExplore]]; NSMutableArray <YTSettingsSectionItem *> *sectionItems = [NSMutableArray arrayWithArray:@[autoFull, castConfirm, ytMiniPlayer, hideAutoplaySwitch, hideCC, hideHUD, hidePreviousAndNextButton, hoverCardItem, bigYTMiniPlayer, oledKeyBoard, oledDarkMode,reExplore]];
[delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO]; [delegate setSectionItems:sectionItems forCategory:uYouPlusSection title:@"uYouPlus" titleDescription:nil headerHidden:NO];
} }
+279 -279
View File
@@ -1,9 +1,9 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import <Foundation/Foundation.h> #import <Foundation/Foundation.h>
#import <objc/runtime.h> #import <objc/runtime.h>
#import <dlfcn.h>
#import "Header.h" #import "Header.h"
#import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h" #import "Tweaks/YouTubeHeader/YTVideoQualitySwitchOriginalController.h"
#import "Tweaks/YouTubeHeader/YTSettingsSectionItem.h"
#import "Tweaks/YouTubeHeader/YTPlayerViewController.h" #import "Tweaks/YouTubeHeader/YTPlayerViewController.h"
#import "Tweaks/YouTubeHeader/YTWatchController.h" #import "Tweaks/YouTubeHeader/YTWatchController.h"
#import "Tweaks/YouTubeHeader/YTIGuideResponse.h" #import "Tweaks/YouTubeHeader/YTIGuideResponse.h"
@@ -11,6 +11,10 @@
#import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h" #import "Tweaks/YouTubeHeader/YTIPivotBarSupportedRenderers.h"
#import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h" #import "Tweaks/YouTubeHeader/YTIPivotBarRenderer.h"
#import "Tweaks/YouTubeHeader/YTIBrowseRequest.h" #import "Tweaks/YouTubeHeader/YTIBrowseRequest.h"
#import "Tweaks/YouTubeHeader/YTCommonColorPalette.h"
#define YT_BUNDLE_ID @"com.google.ios.youtube"
#define YT_NAME @"YouTube"
BOOL hideHUD() { BOOL hideHUD() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideHUD_enabled"];
@@ -21,6 +25,9 @@ BOOL oled() {
BOOL oledKB() { BOOL oledKB() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"oledKeyBoard_enabled"];
} }
BOOL isDarkMode() {
return ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1);
}
BOOL autoFullScreen() { BOOL autoFullScreen() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"autofull_enabled"];
} }
@@ -39,20 +46,42 @@ BOOL hideCC() {
BOOL hideAutoplaySwitch() { BOOL hideAutoplaySwitch() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"hideAutoplaySwitch_enabled"];
} }
BOOL hidePreviousAndNextButton() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"hidePreviousAndNextButton_enabled"];
}
BOOL castConfirm() { BOOL castConfirm() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"]; return [[NSUserDefaults standardUserDefaults] boolForKey:@"castConfirm_enabled"];
} }
BOOL ytMiniPlayer() {
return [[NSUserDefaults standardUserDefaults] boolForKey:@"ytMiniPlayer_enabled"];
}
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; // Tweaks
// YTMiniPlayerEnabler: https://github.com/level3tjg/YTMiniplayerEnabler/
%hook YTWatchMiniBarViewController
- (void)updateMiniBarPlayerStateFromRenderer {
if (ytMiniPlayer()) {}
else { return %orig; }
}
%end
// Hide CC / Autoplay switch // Hide CC / Autoplay switch
%hook YTMainAppControlsOverlayView %hook YTMainAppControlsOverlayView
- (void)setClosedCaptionsOrSubtitlesButtonAvailable:(BOOL)arg1 { // hide CC?!
if (hideCC()) { return %orig(NO); }
else { return %orig; }
}
- (void)setAutoplaySwitchButtonRenderer:(id)arg1 {
if (hideAutoplaySwitch()) {}
else { return %orig; }
}
- (void)layoutSubviews { - (void)layoutSubviews {
%orig; if (hidePreviousAndNextButton()) {
if (hideAutoplaySwitch()) MSHookIvar<YTMainAppControlsOverlayView *>(self, "_nextButton").hidden = YES;
MSHookIvar<UIView *>(self, "_autonavSwitch").hidden = YES; MSHookIvar<YTMainAppControlsOverlayView *>(self, "_previousButton").hidden = YES;
if (hideCC()) %orig;
MSHookIvar<UIView *>(self, "_closedCaptionsOrSubtitlesButton").hidden = YES; }
return %orig;
} }
%end %end
@@ -118,8 +147,8 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
rootViewController = [rootViewController presentedViewController]; rootViewController = [rootViewController presentedViewController];
} }
[rootViewController presentViewController:alertController animated:YES completion:nil]; [rootViewController presentViewController:alertController animated:YES completion:nil];
} } else { return %orig; }
return %orig;
} }
%end %end
@@ -176,333 +205,304 @@ UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
- (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {} - (void)showSurveyWithRenderer:(id)arg1 surveyParentResponder:(id)arg2 {}
%end %end
// OLED // Hide the download playlist button of uYou cuz it's broken
// Thanks u/DGh0st for his very well explained comment - https://www.reddit.com/r/jailbreakdevelopers/comments/9uape7/comment/e94sq80/ %hook YTPlaylistHeaderViewController
// Thanks sinfool for his flex patch which brings OLED Dark mode for YouTube - "Color Customizer (YouTube) OLED" - (void)viewDidLoad {
%orig;
self.downloadsButton.hidden = YES;
}
%end
// IAmYouTube - https://github.com/PoomSmart/IAmYouTube/
%hook YTVersionUtils
+ (NSString *)appName { return YT_NAME; }
+ (NSString *)appID { return YT_BUNDLE_ID; }
%end
%hook GCKBUtils
+ (NSString *)appIdentifier { return YT_BUNDLE_ID; }
%end
%hook GPCDeviceInfo
+ (NSString *)bundleId { return YT_BUNDLE_ID; }
%end
%hook OGLBundle
+ (NSString *)shortAppName { return YT_NAME; }
%end
%hook GVROverlayView
+ (NSString *)appName { return YT_NAME; }
%end
%hook OGLPhenotypeFlagServiceImpl
- (NSString *)bundleId { return YT_BUNDLE_ID; }
%end
%hook SSOConfiguration
- (id)initWithClientID:(id)clientID supportedAccountServices:(id)supportedAccountServices {
self = %orig;
[self setValue:YT_NAME forKey:@"_shortAppName"];
[self setValue:YT_BUNDLE_ID forKey:@"_applicationIdentifier"];
return self;
}
%end
%hook NSBundle
- (NSString *)bundleIdentifier {
NSArray *address = [NSThread callStackReturnAddresses];
Dl_info info = {0};
if (dladdr((void *)[address[2] longLongValue], &info) == 0)
return %orig;
NSString *path = [NSString stringWithUTF8String:info.dli_fname];
if ([path hasPrefix:NSBundle.mainBundle.bundlePath])
return YT_BUNDLE_ID;
return %orig;
}
- (id)objectForInfoDictionaryKey:(NSString *)key {
if ([key isEqualToString:@"CFBundleIdentifier"])
return YT_BUNDLE_ID;
if ([key isEqualToString:@"CFBundleDisplayName"] || [key isEqualToString:@"CFBundleName"])
return YT_NAME;
return %orig;
}
%end
// Workaround for issue #54
// %hook YTMainAppVideoPlayerOverlayViewController
// - (void)updateRelatedVideos {
// if ([[NSUserDefaults standardUserDefaults] boolForKey:@"relatedVideosAtTheEndOfYTVideos"] == NO) {}
// else { return %orig; }
// }
// %end
// OLED dark mode by BandarHL
UIColor* oledColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0];
%group gOLED %group gOLED
%hook UIView %hook YTCommonColorPalette
- (void)setBackgroundColor:(id)arg1 { - (UIColor *)brandBackgroundSolid {
if ([self.nextResponder isKindOfClass:%c(YTLinkCell)]) if (self.pageStyle == 1) {
arg1 = oledColor; return oledColor;
if ([self.nextResponder isKindOfClass:%c(YTCommentsHeaderView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSearchView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSearchBoxView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelHeaderView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTEngagementPanelView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPivotBarView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTHUDMessageView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTChipCloudCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatTextCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YCHLiveChatViewerEngagementCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTSlideForActionsView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPlaylistHeaderView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTAsyncCollectionView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTFeedHeaderView)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTMessageCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTPlaylistPanelProminentThumbnailVideoCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(ASWAppSwitcherCollectionViewCell)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTEditSheetControllerHeader)])
arg1 = oledColor;
if ([self.nextResponder isKindOfClass:%c(YTDialogContainerScrollView)])
arg1 = oledColor;
%orig;
}
%end
%hook YTLightweightQTMButton
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(YTShareMainView)])
arg1 = oledColor;
%orig;
}
- (void)setCustomTitleColor:(id)arg1 { %orig([UIColor whiteColor]); }
%end
%hook NIAttributedLabel
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(UIScrollView)])
arg1 = oledColor;
%orig;
}
%end
%hook UIControl // this sucks I know :/
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(YTShareMainView)])
arg1 = oledColor;
%orig;
}
%end
%hook YTAsyncCollectionView
- (void)setBackgroundColor:(id)arg1 {
if([self.nextResponder isKindOfClass:%c(YTRelatedVideosCollectionViewController)]) {
arg1 = [oledColor colorWithAlphaComponent:0.0];
} else if([self.nextResponder isKindOfClass:%c(YTFullscreenMetadataHighlightsCollectionViewController)]) {
arg1 = [oledColor colorWithAlphaComponent:0.0];
} else {
arg1 = oledColor;
} }
%orig; return %orig;
}
- (UIColor *)brandBackgroundPrimary {
if (self.pageStyle == 1) {
return oledColor;
}
return %orig;
}
- (UIColor *)brandBackgroundSecondary {
if (self.pageStyle == 1) {
return oledColor;
}
return %orig;
}
- (UIColor *)staticBrandBlack {
if (self.pageStyle == 1) {
return oledColor;
}
return %orig;
}
- (UIColor *)generalBackgroundA {
if (self.pageStyle == 1) {
return oledColor;
}
return %orig;
} }
%end %end
%hook YTWatchMiniBarView // Account view controller
- (void)setBackgroundColor:(id)arg1 { %hook YTAccountPanelBodyViewController
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; - (UIColor *)backgroundColor:(NSInteger)pageStyle {
%orig; if (pageStyle == 1) {
return oledColor;
}
return %orig;
} }
%end %end
%hook YTPlaylistMiniBarView %hook YTInnerTubeCollectionViewController
- (void)setBackgroundColor:(id)arg1 { - (UIColor *)backgroundColor:(NSInteger)pageStyle {
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; if (pageStyle == 1) {
%orig; return oledColor;
}
return %orig;
} }
%end %end
%hook _LNPopupBarContentView // uYou player // Explore
- (void)setBackgroundColor:(id)arg1 { %hook ASScrollView
arg1 = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]; - (void)didMoveToWindow {
%orig; if (isDarkMode()) {
} self.backgroundColor = oledColor;
%end %orig;
}
%hook YTTopAlignedView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
- (void)didMoveToWindow { // Dune - https://github.com/Skittyblock/Dune/blob/9b1df9790230115b7553cc9dbadf36889018d7f9/Tweak.xm#L70
MSHookIvar<UIView *>(self, "_contentView").backgroundColor = oledColor;
%orig;
} }
%end %end
// uYou's page
%hook DownloadedVC %hook DownloadedVC
- (id)ytBackgroundColor { return oledColor; } - (UIColor *)ytBackgroundColor {
if (isDarkMode()) {
return oledColor;
}
return %orig;
}
%end %end
%hook DownloadsPagerVC %hook DownloadsPagerVC
- (id)ytBackgroundColor { return oledColor; } - (UIColor *)ytBackgroundColor {
if (isDarkMode()) {
return oledColor;
}
return %orig;
}
%end %end
%hook DownloadingVC %hook DownloadingVC
- (id)ytBackgroundColor { return oledColor; } - (UIColor *)ytBackgroundColor {
if (isDarkMode()) {
return oledColor;
}
return %orig;
}
%end %end
%hook PlayerVC %hook PlayerVC
- (id)ytBackgroundColor { return oledColor; } - (UIColor *)ytBackgroundColor {
%end if (isDarkMode()) {
return oledColor;
%hook ASScrollView // Explore }
- (void)didMoveToWindow { return %orig;
self.backgroundColor = oledColor;
%orig;
} }
%end %end
%hook ASCollectionView // your videos // SponsorBlock settings
- (void)didMoveToWindow { %hook SponsorBlockSettingsController
self.backgroundColor = oledColor; - (void)viewDidLoad {
%orig; if (self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark) {
%orig;
self.tableView.backgroundColor = oledColor;
} else { return %orig; }
} }
%end %end
%hook YTDialogContainerScrollView // YT player
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } %hook YTWatchMiniBarView
- (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig([UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.9]);
}
return %orig;
}
%end %end
%hook MDXQueueView // Cast queue // Search View
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } %hook YTSearchBarView
- (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig (oledColor);
}
return %orig;
}
%end %end
%hook YTChannelProfileEditorView %hook YTSearchBoxView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig (oledColor);
}
return %orig;
}
%end %end
%hook YTChannelSubMenuView // // Comment view
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } %hook YTCreateCommentAccessoryView // community reply comment
%end - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
%hook YTChannelListSubMenuView // sub - return %orig (oledColor);
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } }
%end return %orig;
}
%hook YTCommentView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTCreateCommentAccessoryView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end %end
%hook YTCreateCommentTextView %hook YTCreateCommentTextView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
- (void)setTextColor:(id)arg1 { %orig([UIColor whiteColor]); } if (isDarkMode()) {
return %orig (oledColor);
}
return %orig;
}
- (void)setTextColor:(UIColor *)color { // fix black text in #Shorts video's comment
if (isDarkMode()) {
return %orig ([UIColor whiteColor]);
}
return %orig;
}
%end %end
%hook YCHLiveChatActionPanelView %hook YTFormattedStringLabel // YT is werid...
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig ([UIColor clearColor]);
}
return %orig;
}
%end %end
%hook YTEmojiTextView %hook YCHLiveChatActionPanelView // live chat comment
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig (oledColor);
}
return %orig;
}
%end %end
%hook YTShareTitleView // Share sheet %hook YTEmojiTextView // live chat comment
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig (oledColor);
}
return %orig;
}
%end %end
%hook YTNavigationBar // Separation lines
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } %hook YTCollectionSeparatorView
- (void)setBarTintColor:(id)arg1 { %orig(oledColor); } - (void)didMoveToWindow {
%end if (isDarkMode()) {}
else { return %orig; }
%hook YTPrivacyTosFooterView }
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTEngagementPanelHeaderView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTChannelMobileHeaderView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTInlineSignInView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTHeaderView //Stt bar
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTTabTitlesView // Tab bar - mychannel
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSettingsCell // Settings
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTHorizontalCardListView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTShortsGalleryHeaderView // upload videos heaer (gallery)
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook GOODialogView // 3 dots menu
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTCollectionView //sharesheet
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end %end
// Open link with...
%hook ASWAppSwitchingSheetHeaderView %hook ASWAppSwitchingSheetHeaderView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
if (isDarkMode()) {
return %orig (oledColor);
}
}
%end %end
%hook ASWAppSwitchingSheetFooterView %hook ASWAppSwitchingSheetFooterView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); } - (void)setBackgroundColor:(UIColor *)color {
%end if (isDarkMode()) {
return %orig (oledColor);
%hook YTCollectionSeparatorView }
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
- (void)didMoveToWindow {}
%end
%hook YTShareBusyView // sharesheet load
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTPageView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTWatchView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSearchBarView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSearchBoxView
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTSearchSuggestionCollectionViewCell
- (void)updateColors {}
%end
%hook UISearchBarBackground
- (void)setBarTintColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTMealBarPromoView // Offline
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
////
/*
%hook UICollectionView
- (void)setBackgroundColor:(id)arg1 {
if ([self.nextResponder isKindOfClass:%c(UICollectionViewControllerWrapperView)])
arg1 = oledColor;
%orig;
} }
%end %end
%hook _ASDisplayView // edit your videos %hook ASWAppSwitcherCollectionViewCell
- (void)layoutSubviews { - (void)didMoveToWindow {
if ([self.nextResponder isKindOfClass:%c(ELMView)]) if (isDarkMode()) {
self.backgroundColor = oledColor; self.subviews[1].backgroundColor = oledColor;
%orig;
}
} }
%end %end
%hook YTChannelProfileDescriptionEditorView // edit profile Description
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
%hook YTChannelProfileNameEditorView // edit profile Name
- (void)setBackgroundColor:(id)arg1 { %orig(oledColor); }
%end
hook GOOTextField
- (void)setBackgroundColor:(id)arg1 { // edit profile Description
arg1 = oledColor;
%orig;
}
%end
%hook GOOMultilineTextField//
- (void)setBackgroundColor:(id)arg1 { // edit profile Name
arg1 = oledColor;
%orig;
}
%end
*/
%end %end
%group gOLEDKB // OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e %group gOLEDKB // OLED keyboard by @ichitaso <3 - http://gist.github.com/ichitaso/935100fd53a26f18a9060f7195a1be0e
@@ -600,7 +600,7 @@ static void replaceTab(YTIGuideResponse *response) {
%ctor { %ctor {
%init; %init;
if (oled() && ([[NSUserDefaults standardUserDefaults] integerForKey:@"page_style"] == 1)) { if (oled()) {
%init(gOLED); %init(gOLED);
} }
if (oledKB()) { if (oledKB()) {