Skip to content
This repository has been archived by the owner on Jan 20, 2025. It is now read-only.

Commit

Permalink
Merge pull request #282 from leminlimez/v4.2.1
Browse files Browse the repository at this point in the history
v4.2.1
  • Loading branch information
leminlimez authored Dec 12, 2024
2 parents 26f0e45 + f178c29 commit 94f643f
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 58 deletions.
7 changes: 6 additions & 1 deletion devicemanagement/device_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
elif isinstance(tweak, BasicPlistTweak) or isinstance(tweak, RdarFixTweak) or isinstance(tweak, AdvancedPlistTweak):
basic_plists = tweak.apply_tweak(basic_plists, self.allow_risky_tweaks)
basic_plists_ownership[tweak.file_location] = tweak.owner
if tweak.owner == 0:
if tweak.enabled and tweak.owner == 0:
uses_domains = True
elif isinstance(tweak, NullifyFileTweak):
tweak.apply_tweak(files_data)
Expand All @@ -323,6 +323,11 @@ def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
else:
if gestalt_plist != None:
gestalt_plist = tweak.apply_tweak(gestalt_plist)
elif tweak.enabled:
# no mobilegestalt file provided but applying mga tweaks, give warning
show_error_msg("No mobilegestalt file provided! Please select your file to apply mobilegestalt tweaks.")
update_label("Failed.")
return
# set the custom gestalt keys
if gestalt_plist != None:
gestalt_plist = CustomGestaltTweaks.apply_tweaks(gestalt_plist)
Expand Down
6 changes: 3 additions & 3 deletions gui/main_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings
from tweaks.daemons_tweak import Daemon

App_Version = "4.2"
App_Version = "4.2.1"
App_Build = 0

class Page(Enum):
Expand Down Expand Up @@ -906,12 +906,12 @@ def update_label(self, txt: str):
def update_bar(self, percent):
self.ui.restoreProgressBar.setValue(int(percent))
def on_removeTweaksBtn_clicked(self):
# TODO: Add safety here
# TODO: Add threading here
self.device_manager.apply_changes(resetting=True, update_label=self.update_label)
def on_resetGestaltBtn_clicked(self):
self.device_manager.reset_mobilegestalt(self.settings, update_label=self.update_label)

@QtCore.Slot()
def on_applyTweaksBtn_clicked(self):
# TODO: Add safety here
# TODO: Add threading here
self.device_manager.apply_changes(update_label=self.update_label)
11 changes: 4 additions & 7 deletions tweaks/eligibility_tweak.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .tweak_classes import Tweak, TweakModifyType
from .tweak_classes import Tweak
from Sparserestore.restore import FileToRestore
from devicemanagement.constants import Version

Expand All @@ -22,11 +22,8 @@ def replace_region_code(plist_path: str, original_code: str = "US", new_code: st
return plistlib.dumps(updated_plist_data)

class EligibilityTweak(Tweak):
def __init__(
self,
min_version: Version = Version("1.0")
):
super().__init__(key=None, value=["Method 1", "Method 2"], edit_type=TweakModifyType.PICKER, min_version=min_version)
def __init__(self):
super().__init__(key=None, value=["Method 1", "Method 2"])
self.code = "US"
self.method = 0 # between 0 and 1

Expand Down Expand Up @@ -89,7 +86,7 @@ def apply_tweak(self) -> list[FileToRestore]:

class AITweak(Tweak):
def __init__(self):
super().__init__(key=None, value="", min_version=Version("18.1"))
super().__init__(key=None, value="")

def set_language_code(self, lang: str):
self.value = lang
Expand Down
46 changes: 18 additions & 28 deletions tweaks/tweak_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,15 @@
from devicemanagement.constants import Version
from .basic_plist_locations import FileLocation

class TweakModifyType(Enum):
TOGGLE = 1
TEXT = 2
PICKER = 3

class Tweak:
def __init__(
self,
key: str,
value: any = 1,
edit_type: TweakModifyType = TweakModifyType.TOGGLE,
min_version: Version = Version("1.0"),
owner: int = 501, group: int = 501
):
self.key = key
self.value = value
self.min_version = min_version
self.edit_type = edit_type
self.owner = owner
self.group = group
self.enabled = False
Expand All @@ -33,20 +24,16 @@ def set_value(self, new_value: any, toggle_enabled: bool = True):
if toggle_enabled:
self.enabled = True

def is_compatible(self, device_ver: str):
return Version(device_ver) >= self.min_version

def apply_tweak(self):
raise NotImplementedError

class NullifyFileTweak(Tweak):
def __init__(
self,
file_location: FileLocation,
min_version: Version = Version("1.0"),
owner: int = 501, group: int = 501
):
super().__init__(key=None, value=None, min_version=min_version, owner=owner, group=group)
super().__init__(key=None, value=None, owner=owner, group=group)
self.file_location = file_location

def apply_tweak(self, other_tweaks: dict):
Expand All @@ -60,12 +47,10 @@ def __init__(
file_location: FileLocation,
key: str,
value: any = True,
edit_type: TweakModifyType = TweakModifyType.TOGGLE,
min_version: Version = Version("1.0"),
owner: int = 501, group: int = 501,
is_risky: bool = False
):
super().__init__(key=key, value=value, edit_type=edit_type, min_version=min_version, owner=owner, group=group)
super().__init__(key=key, value=value, owner=owner, group=group)
self.file_location = file_location
self.is_risky = is_risky

Expand All @@ -83,12 +68,10 @@ def __init__(
self,
file_location: FileLocation,
keyValues: dict,
edit_type: TweakModifyType = TweakModifyType.TOGGLE,
min_version: Version = Version("1.0"),
owner: int = 501, group: int = 501,
is_risky: bool = False
):
super().__init__(file_location=file_location, key=None, value=keyValues, edit_type=edit_type, min_version=min_version, owner=owner, group=group, is_risky=is_risky)
super().__init__(file_location=file_location, key=None, value=keyValues, owner=owner, group=group, is_risky=is_risky)

def set_multiple_values(self, keys: list[str], value: any):
for key in keys:
Expand Down Expand Up @@ -182,6 +165,15 @@ def apply_tweak(self, other_tweaks: dict, risky_allowed: bool = False) -> dict:


class MobileGestaltTweak(Tweak):
def __init__(
self,
key: str, subkey: str = None,
value: any = 1,
owner: int = 501, group: int = 501
):
super().__init__(key, value, owner, group)
self.subkey = subkey

def apply_tweak(self, plist: dict):
if not self.enabled:
return plist
Expand All @@ -196,10 +188,9 @@ class MobileGestaltPickerTweak(Tweak):
def __init__(
self,
key: str, subkey: str = None,
values: list = [1],
min_version: Version = Version("1.0")
values: list = [1]
):
super().__init__(key=key, value=values, edit_type=TweakModifyType.PICKER, min_version=min_version)
super().__init__(key=key, value=values)
self.subkey = subkey
self.selected_option = 0 # index of the selected option

Expand All @@ -221,8 +212,8 @@ def get_selected_option(self) -> int:
return self.selected_option

class MobileGestaltMultiTweak(Tweak):
def __init__(self, keyValues: dict, min_version: Version = Version("1.0")):
super().__init__(key=None, min_version=min_version)
def __init__(self, keyValues: dict):
super().__init__(key=None)
self.keyValues = keyValues
# key values looks like ["key name" = value]

Expand All @@ -237,10 +228,9 @@ class FeatureFlagTweak(Tweak):
def __init__(
self,
flag_category: str, flag_names: list,
is_list: bool=True, inverted: bool=False,
min_version: Version = Version("1.0")
is_list: bool=True, inverted: bool=False
):
super().__init__(key=None, min_version=min_version)
super().__init__(key=None)
self.flag_category = flag_category
self.flag_names = flag_names
self.is_list = is_list
Expand Down
34 changes: 15 additions & 19 deletions tweaks/tweaks.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
from devicemanagement.constants import Version
from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, TweakModifyType, BasicPlistTweak, AdvancedPlistTweak, RdarFixTweak, NullifyFileTweak
from .tweak_classes import MobileGestaltTweak, MobileGestaltMultiTweak, MobileGestaltPickerTweak, FeatureFlagTweak, BasicPlistTweak, AdvancedPlistTweak, RdarFixTweak, NullifyFileTweak
from .eligibility_tweak import EligibilityTweak, AITweak
from .basic_plist_locations import FileLocation

tweaks = {
## MobileGestalt Tweaks
"DynamicIsland": MobileGestaltPickerTweak("oPeik/9e8lQWMszEjbPzng", "ArtworkDeviceSubType", [2436, 2556, 2796, 2976, 2622, 2868]),
"DynamicIsland": MobileGestaltPickerTweak("oPeik/9e8lQWMszEjbPzng", subkey="ArtworkDeviceSubType", values=[2436, 2556, 2796, 2976, 2622, 2868]),
"RdarFix": RdarFixTweak(),
"ModelName": MobileGestaltTweak("oPeik/9e8lQWMszEjbPzng", "ArtworkDeviceProductDescription", "", TweakModifyType.TEXT),
"ModelName": MobileGestaltTweak("oPeik/9e8lQWMszEjbPzng", subkey="ArtworkDeviceProductDescription", value=""),
"BootChime": MobileGestaltTweak("QHxt+hGLaBPbQJbXiUJX3w"),
"ChargeLimit": MobileGestaltTweak("37NVydb//GP/GrhuTN+exg"),
"CollisionSOS": MobileGestaltTweak("HCzWusHQwZDea6nNhaKndw"),
"TapToWake": MobileGestaltTweak("yZf3GTRMGTuwSV/lD7Cagw"),
"CameraButton": MobileGestaltMultiTweak({"CwvKxM2cEogD3p+HYgaW0Q": 1, "oOV1jhJbdV3AddkcCg0AEA": 1}, min_version=Version("18.0")),
"CameraButton": MobileGestaltMultiTweak({"CwvKxM2cEogD3p+HYgaW0Q": 1, "oOV1jhJbdV3AddkcCg0AEA": 1}),
"Parallax": MobileGestaltTweak("UIParallaxCapability", value=0),
"StageManager": MobileGestaltTweak("qeaj75wk3HF4DwQ8qbIi7g", value=1),
"Medusa": MobileGestaltMultiTweak({"mG0AnH/Vy1veoqoLRAIgTA": 1, "UCG5MkVahJxG1YULbbd5Bg": 1, "ZYqko/XM5zD3XBfN5RmaXA": 1, "nVh/gwNpy7Jv1NOk00CMrw": 1, "uKc7FPnEO++lVhHWHFlGbQ": 1}),
Expand All @@ -25,23 +25,20 @@
"InternalInstall": MobileGestaltTweak("EqrsVvjcYDdxHBiQmGhAWw"),
"EUEnabler": EligibilityTweak(),
"AOD": MobileGestaltMultiTweak(
{"2OOJf1VhaM7NxfRok3HbWQ": 1, "j8/Omm6s1lsmTDFsXjsBfA": 1},
min_version=Version("18.0")),
"AODVibrancy": MobileGestaltTweak("ykpu7qyhqFweVMKtxNylWA", min_version=Version("18.0")),
{"2OOJf1VhaM7NxfRok3HbWQ": 1, "j8/Omm6s1lsmTDFsXjsBfA": 1}),
"AODVibrancy": MobileGestaltTweak("ykpu7qyhqFweVMKtxNylWA"),

## Feature Flag Tweaks
"ClockAnim": FeatureFlagTweak(flag_category='SpringBoard',
flag_names=['SwiftUITimeAnimation'],
min_version=Version("18.0")),
flag_names=['SwiftUITimeAnimation']),
"Lockscreen": FeatureFlagTweak(flag_category="SpringBoard",
flag_names=['AutobahnQuickSwitchTransition', 'SlipSwitch', 'PosterEditorKashida'],
min_version=Version("18.0")),
"PhotoUI": FeatureFlagTweak(flag_category='Photos', flag_names=['Lemonade'], is_list=False, inverted=True, min_version=Version("18.0")),
"AI": FeatureFlagTweak(flag_category='SpringBoard', flag_names=['Domino', 'SuperDomino'], min_version=Version("18.1")),
flag_names=['AutobahnQuickSwitchTransition', 'SlipSwitch', 'PosterEditorKashida']),
"PhotoUI": FeatureFlagTweak(flag_category='Photos', flag_names=['Lemonade'], is_list=False, inverted=True),
"AI": FeatureFlagTweak(flag_category='SpringBoard', flag_names=['Domino', 'SuperDomino']),

## AI Enabler
"AIEligibility": AITweak(),
"AIGestalt": MobileGestaltTweak("A62OafQ85EJAiiqKn4agtg", min_version=Version("18.1")),
"AIGestalt": MobileGestaltTweak("A62OafQ85EJAiiqKn4agtg"),
"SpoofModel": MobileGestaltPickerTweak("h9jDsbgj7xIVeIQ8S3/X3Q", values=[
# Default
"Placeholder", # 0 | Original
Expand Down Expand Up @@ -81,7 +78,7 @@
"iPad13,9", # 24 | iPad Pro (12.9-inch) (M1) (C)
"iPad13,16", # 25 | iPad Air (M1) (W)
"iPad13,17", # 26 | iPad Air (M1) (C)
], min_version=Version("18.1")),
]),
"SpoofHardware": MobileGestaltPickerTweak("oYicEKzVTz4/CxxE05pEgQ", values=[
# Default
"Placeholder", # 0 | Original
Expand Down Expand Up @@ -121,7 +118,7 @@
"J522xAP", # 24 | iPad Pro (12.9-inch) (M1) (C)
"J407AP", # 25 | iPad Air (M1) (W)
"J408AP", # 26 | iPad Air (M1) (C)
], min_version=Version("18.1")),
]),
"SpoofCPU": MobileGestaltPickerTweak("5pYKlGnYYBzGvAlIU8RjEQ", values=[
# Default
"Placeholder", # 0 | Original
Expand Down Expand Up @@ -161,13 +158,12 @@
"t8103", # 24 | iPad Pro (12.9-inch) (M1) (C)
"t8103", # 25 | iPad Air (M1) (W)
"t8103", # 26 | iPad Air (M1) (C)
], min_version=Version("18.1")),
]),

## Springboard Tweaks
"LockScreenFootnote": BasicPlistTweak(
FileLocation.footnote,
key="LockScreenFootnote", value="",
edit_type=TweakModifyType.TEXT
key="LockScreenFootnote", value=""
),
"SBDontLockAfterCrash": BasicPlistTweak(
FileLocation.springboard,
Expand Down

0 comments on commit 94f643f

Please sign in to comment.