Skip to content

Commit

Permalink
- Added an checkbox in Pif Manager. Keep All Keys which allows any …
Browse files Browse the repository at this point in the history
…unrecognized key to be kept in the json file when using smart paste. This allows support for future keys that could be added but are unrecognized today. (Example: `KERNEL`)

- Added `Cleanup DG` but in Pif Manager to clean up Droidguard cached files. Helps in some situations.
- Miscellaneous small improvements.
  • Loading branch information
badabing2005 committed Jan 29, 2024
1 parent 4f6ef29 commit d914cff
Show file tree
Hide file tree
Showing 10 changed files with 255 additions and 76 deletions.
138 changes: 99 additions & 39 deletions Main.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion build-on-mac.spec
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ exe = EXE(pyz,
icon='images/icon-dark-256.icns')
app = BUNDLE(exe,
name='PixelFlasher.app',
version='6.7.0.0',
version='6.7.1.0',
icon='./images/icon-dark-256.icns',
bundle_identifier='com.badabing.pixelflasher')
2 changes: 1 addition & 1 deletion build.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
rm -rf build dist
VERSION=6.7.0.0
VERSION=6.7.1.0
NAME="PixelFlasher"
DIST_NAME="PixelFlasher"

Expand Down
5 changes: 4 additions & 1 deletion config.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ def __init__(self):
'auto_fill': False,
'force_first_api': False,
'first_api_value_when_forced': "25",
'sort_keys': True
'sort_keys': True,
'keep_unknown': True
}

self.scrcpy = {
Expand Down Expand Up @@ -337,6 +338,8 @@ def load(cls, file_path):
conf.pif['first_api_value_when_forced'] = pif_data['first_api_value_when_forced']
with contextlib.suppress(KeyError):
conf.pif['sort_keys'] = pif_data['sort_keys']
with contextlib.suppress(KeyError):
conf.pif['keep_unknown'] = pif_data['keep_unknown']

# read the scrcpy section
scrcpy_folder = ''
Expand Down
2 changes: 1 addition & 1 deletion constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

APPNAME = 'PixelFlasher'
CONFIG_FILE_NAME = 'PixelFlasher.json'
VERSION = '6.7.0.0'
VERSION = '6.7.1.0'
SDKVERSION = '33.0.3'
MAIN_WIDTH = 1400
MAIN_HEIGHT = 1040
Expand Down
54 changes: 44 additions & 10 deletions phone.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ def __init__(self, id, mode, true_mode = None):
self._magisk_modules_summary = None
self._magisk_apks = None
self._magisk_config_path = None
self._apatch_version = None
self._apatch_app_version = None
self._apatch_version_code = None
self._apatch_app_version_code = None
self._has_init_boot = None
self.packages = {}
self.backups = {}
Expand Down Expand Up @@ -1894,29 +1898,42 @@ def swipe(self, coords):
@property
def magisk_app_version(self):
if self._magisk_app_version is None and self.mode == 'adb' and get_magisk_package():
self._magisk_app_version, self._magisk_app_version_code = self.get_app_version(get_magisk_package())
return self._magisk_app_version

# ----------------------------------------------------------------------------
# property apatch_app_version
# ----------------------------------------------------------------------------
@property
def apatch_app_version(self):
if self._apatch_app_version is None and self.mode == 'adb':
self._apatch_app_version, self._apatch_app_version_code = self.get_app_version('me.bmax.apatch')
return self._apatch_app_version

# ----------------------------------------------------------------------------
# method app_version
# ----------------------------------------------------------------------------
def get_app_version(self, pkg):
version = ''
versionCode = ''
if pkg and self.mode == 'adb':
try:
theCmd = f"\"{get_adb()}\" -s {self.id} shell dumpsys package {get_magisk_package()}"
theCmd = f"\"{get_adb()}\" -s {self.id} shell dumpsys package {pkg}"
res = run_shell(theCmd)
data = res.stdout.split('\n')
version = None
versionCode = None
for line in data:
if re.search('versionCode', line):
versionCode = line.split('=')
versionCode = versionCode[1]
versionCode = versionCode.split(' ')
versionCode = versionCode[0]
self._magisk_app_version_code = versionCode
if re.search('versionName', line):
version = line.split('=')
version = version[1]
except Exception:
return ''
if version and versionCode:
self._magisk_app_version = f"{str(version)}:{str(versionCode)}"
else:
self._magisk_app_version = ''
return self._magisk_app_version
return '', ''
# return version, versionCode
return f"{str(version)}:{str(versionCode)}", versionCode

# ----------------------------------------------------------------------------
# property magisk_app_version_code
Expand All @@ -1928,13 +1945,30 @@ def magisk_app_version_code(self):
else:
return self._magisk_app_version_code

# ----------------------------------------------------------------------------
# property apatch_app_version_code
# ----------------------------------------------------------------------------
@property
def apatch_app_version_code(self):
if self._apatch_app_version_code is None:
return ''
else:
return self._apatch_app_version_code

# ----------------------------------------------------------------------------
# Method get_uncached_magisk_app_version
# ----------------------------------------------------------------------------
def get_uncached_magisk_app_version(self):
self._magisk_app_version = None
return self.magisk_app_version

# ----------------------------------------------------------------------------
# Method get_uncached_apatch_app_version
# ----------------------------------------------------------------------------
def get_uncached_apatch_app_version(self):
self._apatch_app_version = None
return self.apatch_app_version

# ----------------------------------------------------------------------------
# Method is_display_unlocked
# ----------------------------------------------------------------------------
Expand Down
35 changes: 26 additions & 9 deletions pif_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@ def __init__(self, *args, parent=None, config=None, **kwargs):
with contextlib.suppress(KeyError):
self.sort_keys_checkbox.SetValue(self.config.pif['sort_keys'])
self.sort_keys_checkbox.SetToolTip(f"Sorts json keys")
# keep_unknown
self.keep_unknown_checkbox = wx.CheckBox(parent=self, id=wx.ID_ANY, label=u"Keep All keys", pos=wx.DefaultPosition, size=wx.DefaultSize, style=0)
if self.config.pif:
with contextlib.suppress(KeyError):
self.keep_unknown_checkbox.SetValue(self.config.pif['keep_unknown'])
self.keep_unknown_checkbox.SetToolTip(f"Does not remove non standard / unrecognized keys")

# Console
self.console_stc = stc.StyledTextCtrl(self)
Expand Down Expand Up @@ -177,9 +183,6 @@ def __init__(self, *args, parent=None, config=None, **kwargs):
self.cleanup_dg_button = wx.Button(self, wx.ID_ANY, u"Cleanup DG", wx.DefaultPosition, wx.DefaultSize, 0)
self.cleanup_dg_button.SetToolTip(u"Cleanup Droidguard Cache")
self.cleanup_dg_button.Enable(False)
self.cleanup_dg_button.Hide()
if self.config.enable_dg_clean:
self.cleanup_dg_button.Show()

# Process build.prop button
self.process_build_prop_button = wx.Button(self, wx.ID_ANY, u"Process build.prop(s)", wx.DefaultPosition, wx.DefaultSize, 0)
Expand Down Expand Up @@ -300,6 +303,8 @@ def __init__(self, *args, parent=None, config=None, **kwargs):
console_label_sizer.Add(self.force_first_api_checkbox, 0, wx.ALIGN_CENTER_VERTICAL)
console_label_sizer.AddSpacer(10)
console_label_sizer.Add(self.sort_keys_checkbox, 0, wx.ALIGN_CENTER_VERTICAL)
console_label_sizer.AddSpacer(10)
console_label_sizer.Add(self.keep_unknown_checkbox, 0, wx.ALIGN_CENTER_VERTICAL)

stc_sizer = wx.BoxSizer(wx.VERTICAL)
stc_sizer.Add(self.active_pif_stc, 1, wx.EXPAND | wx.ALL, 10)
Expand Down Expand Up @@ -365,6 +370,7 @@ def __init__(self, *args, parent=None, config=None, **kwargs):
self.add_missing_keys_checkbox.Bind(wx.EVT_CHECKBOX, self.onAutoFill)
self.force_first_api_checkbox.Bind(wx.EVT_CHECKBOX, self.onForceFirstAPI)
self.sort_keys_checkbox.Bind(wx.EVT_CHECKBOX, self.onSortKeys)
self.keep_unknown_checkbox.Bind(wx.EVT_CHECKBOX, self.onKeepUnknown)
self.auto_update_pif_checkbox.Bind(wx.EVT_CHECKBOX, self.onAutoUpdatePif)
self.auto_check_pi_checkbox.Bind(wx.EVT_CHECKBOX, self.onAutoCheckPlayIntegrity)
self.disable_uiautomator_checkbox.Bind(wx.EVT_CHECKBOX, self.onDisableUIAutomator)
Expand Down Expand Up @@ -408,6 +414,7 @@ def init(self, refresh=False):
self.enable_buttons = False
self.pif_version_label.SetLabel('')
self.sort_keys = self.sort_keys_checkbox.IsChecked()
self.keep_unknown = self.keep_unknown_checkbox.IsChecked()

if self.force_first_api_checkbox.IsChecked():
self.first_api = self.first_api_value
Expand Down Expand Up @@ -1041,7 +1048,7 @@ def process_props(self, prop_files):
v = v.replace(f'${key}', processed_dict[key])
processed_dict[k] = v.strip()

donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys)
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.keep_unknown)
self.console_stc.SetValue(donor_json_string)
# print(donor_json_string)

Expand Down Expand Up @@ -1115,7 +1122,7 @@ def ProcessBuildPropFolder(self, e):
v = v.replace(f'${key}', processed_dict[key])
processed_dict[k] = v.strip()

json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys)
json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.keep_unknown)

# not needed if we don't want to auto-fill first api
json_dict = json5.loads(json_string)
Expand Down Expand Up @@ -1271,9 +1278,9 @@ def SmartPasteUp(self, event):
json_string = json.dumps(json_dict, indent=4, sort_keys=True)
processed_dict = self.load_json_with_rules(json_string, self.advanced_props_support)
if first_api == '' or self.force_first_api_checkbox.IsChecked():
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api_value, self.sort_keys)
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api_value, self.sort_keys, self.keep_unknown)
else:
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, None, self.sort_keys)
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, None, self.sort_keys, self.keep_unknown)
self.active_pif_stc.SetValue(donor_json_string)

# Auto Update pif.json
Expand Down Expand Up @@ -1326,6 +1333,16 @@ def onSortKeys(self, event):
self.config.pif['sort_keys'] = status


# -----------------------------------------------
# onKeepUnknown
# -----------------------------------------------
def onKeepUnknown(self, event):
self.keep_unknown_checkbox = event.GetEventObject()
status = self.keep_unknown_checkbox.GetValue()
self.keep_unknown = status
self.config.pif['keep_unknown'] = status


# -----------------------------------------------
# onForceFirstAPI
# -----------------------------------------------
Expand Down Expand Up @@ -1436,7 +1453,7 @@ def ReProcess(self, event):
self._on_spin('start')
active_pif = self.active_pif_stc.GetValue()
processed_dict = self.load_json_with_rules(active_pif, self.advanced_props_support)
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys)
donor_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys, self.keep_unknown)
self.console_stc.SetValue(donor_json_string)

except Exception:
Expand Down Expand Up @@ -1471,7 +1488,7 @@ def ReProcessJsonFile(self, event):
data = json5.load(f)
json_string = json.dumps(data, indent=4, sort_keys=True)
processed_dict = self.load_json_with_rules(json_string, self.advanced_props_support)
reprocessed_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys)
reprocessed_json_string = process_dict(processed_dict, self.add_missing_keys_checkbox.IsChecked(), self.advanced_props_support, self.first_api, self.sort_keys, self.keep_unknown)
if count == 1:
self.console_stc.SetValue(reprocessed_json_string)
else:
Expand Down
Loading

0 comments on commit d914cff

Please sign in to comment.