From 69169b9512009960d21ddc6aa928f0654aa7dcf5 Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Fri, 27 Sep 2024 22:21:12 -0400 Subject: [PATCH] rdar/status bar fix --- .DS_Store | Bin 10244 -> 14340 bytes cli_app.py | 6 ++- devicemanagement/device_manager.py | 5 ++- gui/main_window.py | 10 +++++ qt/mainwindow.ui | 9 ++++- qt/mainwindow_ui.py | 8 +++- qt/ui_mainwindow.py | 8 +++- tweaks/basic_plist_locations.py | 3 ++ tweaks/tweak_classes.py | 60 +++++++++++++++++++++++++++++ tweaks/tweaks.py | 3 +- 10 files changed, 104 insertions(+), 8 deletions(-) diff --git a/.DS_Store b/.DS_Store index fc39c7b49f085713747f51bc9858a1526fae1c8e..e4c46681cdfa1bada523b65e002672e2156ec333 100644 GIT binary patch delta 766 zcmah{J8#oa7(I5K2Z}3fsiYzn#Y5T(P!o57f+#3`43(foLM=;GXdZ+}PUF-z5FwQc zMJ!CwUEv2Xp~wqis)Shi7hT(#0hM!&BBd(C*Nf8$e^tZB@!{tK4f(3n#B7t#9Jp6)XBWwW0J6FC~?n(2egmGI+|@LkAU3sNe-^ za^?ISCs=O?fi_FldWGBrS`nM9YuJxh z-MCwxoa|^(-Cx8WdnL-rp-NDP>8OO_klytF=&eh7;<|ZHBVgp l;$nX8g1mr7G>E&pC7$I|iG{fG@;z~o9YpHHlB$og`U9!ks;K|~ delta 292 zcmZoEXbF&DU|?W$DortDU{C-uIe-{M3-C-V6q~3gIoZI3MH0woFa=^ppg4nPPJVJy zPJR+d(Z-8r>=Pg4Zf56T;b1hK%%gBvo|Peqp_Cz$A%`IaStSDlQ#w$G<>X%q_LCPX zSx=Tx=I8wZG?M>66l}IoKEN_@vI-{y12aQ9$c)J!RE|x)Eijjj@h4DW-R3&Mn@p1{ z1O+E&h!kvA5nabL`M1jM$wlJQo0m)YGYT>T%?APnZXn?b^1;T7- 0 and picker_choice <= len(values): tweak.set_selected_option(picker_choice-1) + tweaks["RdarFix"].set_di_type(values[tweak.get_selected_option()]) elif picker_choice == len(values)+1: tweak.set_enabled(False) else: diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py index bdbb2ad..5626313 100644 --- a/devicemanagement/device_manager.py +++ b/devicemanagement/device_manager.py @@ -10,7 +10,7 @@ from pymobiledevice3.lockdown import create_using_usbmux from devicemanagement.constants import Device, Version from devicemanagement.data_singleton import DataSingleton -from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak +from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak, RdarFixTweak from tweaks.basic_plist_locations import FileLocation from Sparserestore.restore import restore_files, FileToRestore @@ -48,6 +48,7 @@ class DeviceManager: locale=ld.locale, ld=ld ) + tweaks["RdarFix"].get_rdar_mode(vals['ProductType']) self.devices.append(dev) except Exception as e: print(f"ERROR with lockdown device with UUID {device.serial}") @@ -124,7 +125,7 @@ class DeviceManager: eligibility_files = tweak.apply_tweak() elif isinstance(tweak, AITweak): ai_file = tweak.apply_tweak() - elif isinstance(tweak, BasicPlistTweak): + elif isinstance(tweak, BasicPlistTweak) or isinstance(tweak, RdarFixTweak): basic_plists = tweak.apply_tweak(basic_plists) else: if gestalt_plist != None: diff --git a/gui/main_window.py b/gui/main_window.py index 74384c1..b022701 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -116,6 +116,7 @@ class MainWindow(QtWidgets.QMainWindow): ## MOBILE GESTALT PAGE ACTIONS self.ui.dynamicIslandDrp.activated.connect(self.on_dynamicIslandDrp_activated) + self.ui.rdarFixChk.clicked.connect(self.on_rdarFixChk_clicked) self.ui.modelNameChk.toggled.connect(self.on_modelNameChk_clicked) self.ui.modelNameTxt.textEdited.connect(self.on_modelNameTxt_textEdited) @@ -213,6 +214,12 @@ class MainWindow(QtWidgets.QMainWindow): self.ui.dynamicIslandDrp.removeItem(5) except: pass + rdar_title = tweaks["RdarFix"].get_rdar_title() + if rdar_title == "hide": + self.ui.rdarFixChk.hide() + else: + self.ui.rdarFixChk.show() + self.ui.rdarFixChk.setText(f"{rdar_title} (modifies resolution)") if Version(self.device_manager.data_singleton.current_device.version) >= Version("18.1"): self.ui.enableAIChk.show() self.ui.languageLbl.hide() @@ -348,6 +355,9 @@ class MainWindow(QtWidgets.QMainWindow): tweaks["DynamicIsland"].set_enabled(False) else: tweaks["DynamicIsland"].set_selected_option(index - 1) + tweaks["RdarFix"].set_di_type(tweaks["DynamicIsland"].value[tweaks["DynamicIsland"].get_selected_option()]) + def on_rdarFixChk_clicked(self, checked: bool): + tweaks["RdarFix"].set_enabled(checked) def on_modelNameChk_clicked(self, checked: bool): tweaks["ModelName"].set_enabled(checked) diff --git a/qt/mainwindow.ui b/qt/mainwindow.ui index 11bd4ea..f0ce940 100644 --- a/qt/mainwindow.ui +++ b/qt/mainwindow.ui @@ -1566,7 +1566,7 @@ QToolButton:pressed { - Nugget GUI - Version 3.0 (beta 1) + Nugget GUI - Version 3.0 (beta 2) Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter @@ -1875,6 +1875,13 @@ QComboBox QAbstractItemView::item:hover { + + + + Fix RDAR (modifies resolution) + + + diff --git a/qt/mainwindow_ui.py b/qt/mainwindow_ui.py index c091846..d16c52a 100644 --- a/qt/mainwindow_ui.py +++ b/qt/mainwindow_ui.py @@ -1009,6 +1009,11 @@ class Ui_Nugget(object): self.verticalLayout_8.addWidget(self.dynamicIslandDrp) + self.rdarFixChk = QCheckBox(self.gestaltPageContent) + self.rdarFixChk.setObjectName(u"rdarFixChk") + + self.verticalLayout_8.addWidget(self.rdarFixChk) + self.modelNameChk = QCheckBox(self.gestaltPageContent) self.modelNameChk.setObjectName(u"modelNameChk") @@ -2549,7 +2554,7 @@ class Ui_Nugget(object): self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None)) self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None)) self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None)) - self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0 (beta 1)", None)) + self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0 (beta 2)", None)) self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None)) self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None)) self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None)) @@ -2561,6 +2566,7 @@ class Ui_Nugget(object): self.dynamicIslandDrp.setItemText(6, QCoreApplication.translate("Nugget", u"2868 (iPhone 16 Pro Max Dynamic Island)", None)) self.dynamicIslandDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None)) + self.rdarFixChk.setText(QCoreApplication.translate("Nugget", u"Fix RDAR (modifies resolution)", None)) self.modelNameChk.setText(QCoreApplication.translate("Nugget", u"Change Device Model Name", None)) self.modelNameTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Model Name", None)) self.bootChimeChk.setText(QCoreApplication.translate("Nugget", u"Enable Boot Chime", None)) diff --git a/qt/ui_mainwindow.py b/qt/ui_mainwindow.py index d1ea245..552fde6 100644 --- a/qt/ui_mainwindow.py +++ b/qt/ui_mainwindow.py @@ -1009,6 +1009,11 @@ class Ui_Nugget(object): self.verticalLayout_8.addWidget(self.dynamicIslandDrp) + self.rdarFixChk = QCheckBox(self.gestaltPageContent) + self.rdarFixChk.setObjectName(u"rdarFixChk") + + self.verticalLayout_8.addWidget(self.rdarFixChk) + self.modelNameChk = QCheckBox(self.gestaltPageContent) self.modelNameChk.setObjectName(u"modelNameChk") @@ -2549,7 +2554,7 @@ class Ui_Nugget(object): self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None)) self.libiBtn.setText(QCoreApplication.translate("Nugget", u"pymobiledevice3", None)) self.qtBtn.setText(QCoreApplication.translate("Nugget", u"Qt Creator", None)) - self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0 (beta 1)", None)) + self.label.setText(QCoreApplication.translate("Nugget", u"Nugget GUI - Version 3.0 (beta 2)", None)) self.statusBarLbl.setText(QCoreApplication.translate("Nugget", u"Mobile Gestalt", None)) self.label_9.setText(QCoreApplication.translate("Nugget", u"Device Subtype Preset", None)) self.dynamicIslandDrp.setItemText(0, QCoreApplication.translate("Nugget", u"None", None)) @@ -2561,6 +2566,7 @@ class Ui_Nugget(object): self.dynamicIslandDrp.setItemText(6, QCoreApplication.translate("Nugget", u"2868 (iPhone 16 Pro Max Dynamic Island)", None)) self.dynamicIslandDrp.setCurrentText(QCoreApplication.translate("Nugget", u"None", None)) + self.rdarFixChk.setText(QCoreApplication.translate("Nugget", u"Fix RDAR (modifies resolution)", None)) self.modelNameChk.setText(QCoreApplication.translate("Nugget", u"Change Device Model Name", None)) self.modelNameTxt.setPlaceholderText(QCoreApplication.translate("Nugget", u"Model Name", None)) self.bootChimeChk.setText(QCoreApplication.translate("Nugget", u"Enable Boot Chime", None)) diff --git a/tweaks/basic_plist_locations.py b/tweaks/basic_plist_locations.py index 2bc9ad5..d8328f0 100644 --- a/tweaks/basic_plist_locations.py +++ b/tweaks/basic_plist_locations.py @@ -1,6 +1,9 @@ from enum import Enum class FileLocation(Enum): + # Mobile Gestalt + resolution = "/var/Managed Preferences/mobile/com.apple.iokit.IOMobileGraphicsFamily.plist" + # Springboard Options springboard = "/var/Managed Preferences/mobile/com.apple.springboard.plist" footnote = "/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles/Library/ConfigurationProfiles/SharedDeviceConfiguration.plist" diff --git a/tweaks/tweak_classes.py b/tweaks/tweak_classes.py index 8942d70..a94f1b1 100644 --- a/tweaks/tweak_classes.py +++ b/tweaks/tweak_classes.py @@ -62,6 +62,66 @@ class BasicPlistTweak(Tweak): else: other_tweaks[self.file_location] = {self.key: self.value} return other_tweaks + + +class RdarFixTweak(BasicPlistTweak): + def __init__(self, divider_below: bool = False): + super().__init__(label="Fix RDAR (modifies resolution)", file_location=FileLocation.resolution, key=None, divider_below=divider_below) + self.mode = 0 + + def get_rdar_mode(self, model: str) -> int: + if (model == "iPhone11,2" or model == "iPhone11,4" or model == "iPhone11,6" + or model == "iPhone11,8" + or model == "iPhone12,1" or model == "iPhone12,3" or model == "iPhone12,5"): + self.mode = 1 + elif (model == "iPhone13,1" or model == "iPhone13,2" or model == "iPhone13,3" or model == "iPhone13,4" + or model == "iPhone14,4" or model == "iPhone14,5" or model == "iPhone14,2" or model == "iPhone14,3" + or model == "iPhone14,7" or model == "iPhone14,8"): + self.mode = 2 + elif (model == "iPhone12,8" or model == "iPhone14,6"): + self.mode = 3 + return self.mode + + def get_rdar_title(self) -> str: + if self.mode == 1 or self.mode == 3: + return "Fix RDAR" + elif self.mode == 2: + return "Dynamic Island Status Bar Fix" + return "hide" + + def set_di_type(self, type: int): + self.di_type = type + + def apply_tweak(self, other_tweaks: dict) -> dict: + if not self.enabled: + return other_tweaks + if self.mode == 1 or self.mode == 3: + plist = { + "canvas_height": 1791, + "canvas_width": 828 + } + other_tweaks[self.file_location] = plist + elif self.mode == 2: + width = 2868 + height = 1320 + if self.di_type == 2556: + width = 1179 + height = 2556 + elif self.di_type == 2796 or self.di_type == 2976: + width = 1290 + height = 2796 + elif self.di_type == 2622: + width = 1206 + height = 2622 + elif self.di_type == 2868: + width = 1320 + height = 2868 + plist = { + "canvas_height": height, + "canvas_width": width + } + other_tweaks[self.file_location] = plist + return other_tweaks class MobileGestaltTweak(Tweak): diff --git a/tweaks/tweaks.py b/tweaks/tweaks.py index 9d2065e..775dd49 100644 --- a/tweaks/tweaks.py +++ b/tweaks/tweaks.py @@ -1,5 +1,5 @@ from devicemanagement.constants import Version -from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, TweakModifyType, BasicPlistTweak +from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, TweakModifyType, BasicPlistTweak, RdarFixTweak from .eligibility_tweak import EligibilityTweak, AITweak from .basic_plist_locations import FileLocation @@ -7,6 +7,7 @@ from .basic_plist_locations import FileLocation tweaks = { ## MobileGestalt Tweaks "DynamicIsland": MobileGestaltPickerTweak("Toggle Dynamic Island", "oPeik/9e8lQWMszEjbPzng", "ArtworkDeviceSubType", [2436, 2556, 2796, 2976, 2622, 2868]), + "RdarFix": RdarFixTweak(), "ModelName": MobileGestaltTweak("Set Device Model Name", "oPeik/9e8lQWMszEjbPzng", "ArtworkDeviceProductDescription", "", TweakModifyType.TEXT), "BootChime": MobileGestaltTweak("Toggle Boot Chime", "QHxt+hGLaBPbQJbXiUJX3w"), "ChargeLimit": MobileGestaltTweak("Toggle Charge Limit", "37NVydb//GP/GrhuTN+exg"),