Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
3671d41
test binder
JingMatrix Mar 24, 2026
a456ccf
Start refactoring daemon into Kotlin
JingMatrix Mar 25, 2026
069cf26
Refactor phase 1
JingMatrix Mar 25, 2026
19aa44e
Refactor phase 2
JingMatrix Mar 25, 2026
a54004b
Refactor phase 3 and 4 (part done)
JingMatrix Mar 25, 2026
d1f4cd9
Refactor phase 5
JingMatrix Mar 25, 2026
cf240e5
Fix compilation errors
JingMatrix Mar 25, 2026
3073b6f
Refactor phase 6
JingMatrix Mar 25, 2026
248af09
Complete implementation
JingMatrix Mar 26, 2026
c5becbe
Fix i18n support
JingMatrix Mar 26, 2026
558b04b
Correct JNI names
JingMatrix Mar 26, 2026
e924625
Fix databasehelper initilization
JingMatrix Mar 26, 2026
75a8ede
Fix runtime bugs
JingMatrix Mar 26, 2026
c22dfcf
Fix notification
JingMatrix Mar 26, 2026
6fcc6f5
Fix manager
JingMatrix Mar 26, 2026
2579c9a
Fix manager status
JingMatrix Mar 26, 2026
727854f
Add docs
JingMatrix Mar 26, 2026
a472c42
fix compilation
JingMatrix Mar 26, 2026
4372185
fix format
JingMatrix Mar 26, 2026
37f2509
Add cache permission fix
JingMatrix Mar 26, 2026
e35a380
Refactor CacheConfig
JingMatrix Mar 26, 2026
a579895
update readme
JingMatrix Mar 26, 2026
eca6421
catch package parsing error
JingMatrix Mar 26, 2026
b08ed54
[skip ci] improve doc
JingMatrix Mar 26, 2026
80e382f
Remove Java code
JingMatrix Mar 26, 2026
ba9e6de
minor improvements
JingMatrix Mar 26, 2026
8dab518
Support Android 17 beta3
JingMatrix Mar 27, 2026
03541fc
improve logging
JingMatrix Mar 27, 2026
5e35893
Fix proguard rules
JingMatrix Mar 27, 2026
e2f2179
Fix enable modules
JingMatrix Mar 27, 2026
8b6cedb
Add cli feature
JingMatrix Mar 28, 2026
9dc1046
Fix notification
JingMatrix Mar 28, 2026
3e17a1d
Fix package filtering
JingMatrix Mar 28, 2026
a0ad43c
Fix modules loading
JingMatrix Mar 28, 2026
9d36dad
Force socket listening
JingMatrix Mar 29, 2026
6bbbe0b
Force IContentProvider.call signature
JingMatrix Mar 29, 2026
3aa5d8a
Fix comments
JingMatrix Mar 29, 2026
5f29e5d
Force using readonly database for getModulePrefs
JingMatrix Mar 29, 2026
6a96f84
Fix database deadlock and improve structure
JingMatrix Mar 31, 2026
cfe5d40
Avoid using two database connections
JingMatrix Mar 31, 2026
f6e6313
Remove log watchlog completely
JingMatrix Mar 31, 2026
76e431c
Discard workaround for early database reading
JingMatrix Mar 31, 2026
865ca63
Update daemonState
JingMatrix Mar 31, 2026
d015eb6
Remove user configuration of dex obfuscation
JingMatrix Mar 31, 2026
510c407
Unify logging styles of LOGD and LOGV
JingMatrix Mar 31, 2026
2cd74bf
Bypass SQLiteCompatibilityWalFlags check to prevent SecurityException
JingMatrix Mar 31, 2026
44eaa17
Merge branch 'master' into refactor
JingMatrix Mar 31, 2026
ff8ce9a
Tune log levels
JingMatrix Mar 31, 2026
d83c178
Add libxposed namespace to the obfuscation list
JingMatrix Mar 31, 2026
0e84ff3
Allow toggling status notification
JingMatrix Apr 1, 2026
dad88bd
Add receiver of ACTION_CONFIGURATION_CHANGED
JingMatrix Apr 1, 2026
b9522e4
Restore re-injection logic of sendToBridge
JingMatrix Apr 1, 2026
dd60508
Fix bugs in manager service
JingMatrix Apr 1, 2026
510d0fa
Distinguish two type of Vector manager
JingMatrix Apr 1, 2026
8c5f200
Add workaround based static fields
JingMatrix Apr 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ plugins {
alias(libs.plugins.nav.safeargs)
alias(libs.plugins.autoresconfig)
alias(libs.plugins.materialthemebuilder)
alias(libs.plugins.lsplugin.resopt)
alias(libs.plugins.lsplugin.apksign)
}

Expand Down
47 changes: 0 additions & 47 deletions app/src/main/java/org/lsposed/manager/ConfigManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -178,25 +178,6 @@ public static boolean setVerboseLogEnabled(boolean enabled) {
}
}

public static boolean isLogWatchdogEnabled() {
try {
return LSPManagerServiceHolder.getService().isLogWatchdogEnabled();
} catch (RemoteException e) {
Log.e(App.TAG, Log.getStackTraceString(e));
return false;
}
}

public static boolean setLogWatchdog(boolean enabled) {
try {
LSPManagerServiceHolder.getService().setLogWatchdog(enabled);
return true;
} catch (RemoteException e) {
Log.e(App.TAG, Log.getStackTraceString(e));
return false;
}
}

public static ParcelFileDescriptor getLog(boolean verbose) {
try {
return verbose ? LSPManagerServiceHolder.getService().getVerboseLog() : LSPManagerServiceHolder.getService().getModulesLog();
Expand Down Expand Up @@ -336,15 +317,6 @@ public static boolean setHiddenIcon(boolean hide) {
}
}

public static String getApi() {
try {
return LSPManagerServiceHolder.getService().getApi();
} catch (RemoteException e) {
Log.e(App.TAG, Log.getStackTraceString(e));
return e.toString();
}
}

public static List<String> getDenyListPackages() {
List<String> list = new ArrayList<>();
try {
Expand All @@ -363,25 +335,6 @@ public static void flashZip(String zipPath, ParcelFileDescriptor outputStream) {
}
}

public static boolean isDexObfuscateEnabled() {
try {
return LSPManagerServiceHolder.getService().getDexObfuscate();
} catch (RemoteException e) {
Log.e(App.TAG, Log.getStackTraceString(e));
return false;
}
}

public static boolean setDexObfuscateEnabled(boolean enabled) {
try {
LSPManagerServiceHolder.getService().setDexObfuscate(enabled);
return true;
} catch (RemoteException e) {
Log.e(App.TAG, Log.getStackTraceString(e));
return false;
}
}

public static int getDex2OatWrapperCompatibility() {
try {
return LSPManagerServiceHolder.getService().getDex2OatWrapperCompatibility();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ private void updateStates(Activity activity, boolean binderAlive, boolean needUp
binding.statusTitle.setText(R.string.activated);
binding.statusIcon.setImageResource(R.drawable.ic_round_check_circle_24);
}
binding.statusSummary.setText(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d) - %s",
ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode(), ConfigManager.getApi()));
binding.statusSummary.setText(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d)",
ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode()));
binding.developerWarningCard.setVisibility(isDeveloper() ? View.VISIBLE : View.GONE);
} else {
boolean isMagiskInstalled = ConfigManager.isMagiskInstalled();
Expand All @@ -177,7 +177,6 @@ private void updateStates(Activity activity, boolean binderAlive, boolean needUp

if (ConfigManager.isBinderAlive()) {
binding.apiVersion.setText(String.valueOf(ConfigManager.getXposedApiVersion()));
binding.api.setText(ConfigManager.isDexObfuscateEnabled() ? R.string.enabled : R.string.not_enabled);
binding.frameworkVersion.setText(String.format(LocaleDelegate.getDefaultLocale(), "%1$s (%2$d)", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode()));
binding.managerPackageName.setText(activity.getPackageName());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
Expand All @@ -196,7 +195,6 @@ private void updateStates(Activity activity, boolean binderAlive, boolean needUp
}
} else {
binding.apiVersion.setText(R.string.not_installed);
binding.api.setText(R.string.not_installed);
binding.frameworkVersion.setText(R.string.not_installed);
binding.managerPackageName.setText(activity.getPackageName());
}
Expand All @@ -213,10 +211,6 @@ private void updateStates(Activity activity, boolean binderAlive, boolean needUp
"\n" +
binding.apiVersion.getText() +
"\n\n" +
activity.getString(R.string.settings_xposed_api_call_protection) +
"\n" +
binding.api.getText() +
"\n\n" +
activity.getString(R.string.info_dex2oat_wrapper) +
"\n" +
binding.dex2oatWrapper.getText() +
Expand All @@ -242,7 +236,6 @@ private void updateStates(Activity activity, boolean binderAlive, boolean needUp
binding.systemAbi.getText();
var map = new HashMap<String, String>();
map.put("apiVersion", binding.apiVersion.getText().toString());
map.put("api", binding.api.getText().toString());
map.put("frameworkVersion", binding.frameworkVersion.getText().toString());
map.put("systemAbi", Arrays.toString(Build.SUPPORTED_ABIS));
binding.copyInfo.setOnClickListener(v -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
getChildFragmentManager().beginTransaction().add(R.id.setting_container, new PreferenceFragment()).commitNow();
}
if (ConfigManager.isBinderAlive()) {
binding.toolbar.setSubtitle(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d) - %s", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode(), ConfigManager.getApi()));
binding.toolbar.setSubtitle(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d)", ConfigManager.getXposedVersionName(), ConfigManager.getXposedVersionCode()));
} else {
binding.toolbar.setSubtitle(String.format(LocaleDelegate.getDefaultLocale(), "%s (%d) - %s", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE, getString(R.string.not_installed)));
}
Expand Down Expand Up @@ -134,18 +134,6 @@ public void onDetach() {
parentFragment = null;
}

private boolean setNotificationPreferenceEnabled(MaterialSwitchPreference notificationPreference, boolean preferenceEnabled) {
var notificationEnabled = ConfigManager.enableStatusNotification();
if (notificationPreference != null) {
notificationPreference.setEnabled(!notificationEnabled || preferenceEnabled);
notificationPreference.setSummaryOn(preferenceEnabled ?
notificationPreference.getContext().getString(R.string.settings_enable_status_notification_summary) :
notificationPreference.getContext().getString(R.string.settings_enable_status_notification_summary) + "\n" +
notificationPreference.getContext().getString(R.string.disable_status_notification_error));
}
return notificationEnabled;
}

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
final String SYSTEM = "SYSTEM";
Expand All @@ -161,37 +149,17 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
prefVerboseLogs.setOnPreferenceChangeListener((preference, newValue) -> ConfigManager.setVerboseLogEnabled(!(boolean) newValue));
}

MaterialSwitchPreference prefLogWatchDog = findPreference("enable_log_watchdog");
if (prefLogWatchDog != null) {
prefLogWatchDog.setEnabled(!BuildConfig.DEBUG && installed);
if (BuildConfig.DEBUG) ConfigManager.setLogWatchdog(true);
prefLogWatchDog.setChecked(!installed || ConfigManager.isLogWatchdogEnabled());
prefLogWatchDog.setOnPreferenceChangeListener((preference, newValue) -> ConfigManager.setLogWatchdog((boolean) newValue));
}

MaterialSwitchPreference prefDexObfuscate = findPreference("enable_dex_obfuscate");
if (prefDexObfuscate != null) {
prefDexObfuscate.setEnabled(installed);
prefDexObfuscate.setChecked(!installed || ConfigManager.isDexObfuscateEnabled());
prefDexObfuscate.setOnPreferenceChangeListener((preference, newValue) -> {
parentFragment.showHint(R.string.reboot_required, true, R.string.reboot, v -> ConfigManager.reboot());
return ConfigManager.setDexObfuscateEnabled((boolean) newValue);
});
}

MaterialSwitchPreference notificationPreference = findPreference("enable_status_notification");
if (notificationPreference != null) {
notificationPreference.setVisible(installed);
if (installed) {
notificationPreference.setChecked(setNotificationPreferenceEnabled(notificationPreference, !App.isParasitic || ShortcutUtil.isLaunchShortcutPinned()));
notificationPreference.setChecked(ConfigManager.enableStatusNotification());
notificationPreference.setSummaryOn(R.string.settings_enable_status_notification_summary);
notificationPreference.setEnabled(true);
}
notificationPreference.setOnPreferenceChangeListener((p, v) -> {
var succeeded = ConfigManager.setEnableStatusNotification((boolean) v);
if ((boolean) v && App.isParasitic && !ShortcutUtil.isLaunchShortcutPinned()) {
setNotificationPreferenceEnabled(notificationPreference, false);
}
return succeeded;
});
notificationPreference.setOnPreferenceChangeListener((p, v) ->
ConfigManager.setEnableStatusNotification((boolean) v)
);
}

Preference shortcut = findPreference("add_shortcut");
Expand All @@ -203,7 +171,6 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
}
shortcut.setOnPreferenceClickListener(preference -> {
if (!ShortcutUtil.requestPinLaunchShortcut(() -> {
setNotificationPreferenceEnabled(notificationPreference, true);
App.getPreferences().edit().putBoolean("never_show_welcome", true).apply();
parentFragment.showHint(R.string.settings_shortcut_pinned_hint, false);
})) {
Expand Down
6 changes: 2 additions & 4 deletions app/src/main/java/org/lsposed/manager/util/UpdateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,12 @@ public void onResponse(@NonNull Call call, @NonNull Response response) {
if (!response.isSuccessful()) return;
var body = response.body();
if (body == null) return;
String api = ConfigManager.isBinderAlive() ? ConfigManager.getApi() : "riru";
try {
var info = JsonParser.parseReader(body.charStream()).getAsJsonObject();
var notes = info.get("body").getAsString();
var assetsArray = info.getAsJsonArray("assets");
for (var assets : assetsArray) {
checkAssets(assets.getAsJsonObject(), notes, api.toLowerCase(Locale.ROOT));
checkAssets(assets.getAsJsonObject(), notes);
}
} catch (Throwable t) {
Log.e(App.TAG, t.getMessage(), t);
Expand All @@ -79,11 +78,10 @@ public void onFailure(@NonNull Call call, @NonNull IOException e) {
App.getOkHttpClient().newCall(request).enqueue(callback);
}

private static void checkAssets(JsonObject assets, String releaseNotes, String api) {
private static void checkAssets(JsonObject assets, String releaseNotes) {
var pref = App.getPreferences();
var name = assets.get("name").getAsString();
var splitName = name.split("-");
if (!splitName[3].equals(api)) return;
pref.edit()
.putInt("latest_version", Integer.parseInt(splitName[2]))
.putLong("latest_check", Instant.now().getEpochSecond())
Expand Down
13 changes: 0 additions & 13 deletions app/src/main/res/layout/fragment_home.xml
Original file line number Diff line number Diff line change
Expand Up @@ -272,19 +272,6 @@
android:layout_height="wrap_content"
android:text="@string/not_installed" />

<com.google.android.material.textview.MaterialTextView
style="@style/DeviceInfoDialogLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/settings_xposed_api_call_protection" />

<com.google.android.material.textview.MaterialTextView
android:id="@+id/api"
style="@style/DeviceInfoDialogValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/not_installed" />

<com.google.android.material.textview.MaterialTextView
style="@style/DeviceInfoDialogLabel"
android:layout_width="match_parent"
Expand Down
3 changes: 0 additions & 3 deletions app/src/main/res/values-af/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -194,13 +194,10 @@
<string name="settings_unsupported_pin_shortcut_summary">Die huidige versteklanseerder ondersteun nie penkortpaaie nie</string>
<string name="settings_enable_status_notification">Statuskennisgewing</string>
<string name="settings_enable_status_notification_summary">Wys \'n kennisgewing wat parasitiese bestuurder kan oopmaak</string>
<string name="disable_status_notification_error">Geen kortpad nie, kan nie kennisgewing deaktiveer nie</string>
<string name="settings_update_channel">Dateer kanaal op</string>
<string name="update_channel_stable">Stabiel</string>
<string name="update_channel_bate">Beta</string>
<string name="update_channel_nightly">Nag bou</string>
<string name="settings_xposed_api_call_protection">Xposed API-oproepbeskerming</string>
<string name="settings_xposed_api_call_protection_summary">Blokkeer dinamies gelaaide modulekode om Xposed API te gebruik, dit kan sommige modules breek, maar bevoordeel sekuriteit</string>
<!-- Module Repo -->
<string name="module_readme">Lees my</string>
<string name="module_releases">Vrystellings</string>
Expand Down
5 changes: 0 additions & 5 deletions app/src/main/res/values-ar/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,6 @@
<string name="settings_group_framework">إطار العمل</string>
<string name="settings_disable_verbose_log">تعطيل السجلات المفصّلة</string>
<string name="settings_disable_verbose_log_summary">الإبلاغ عن مشاكل طلب لتضمين السجلات المفصولة</string>
<string name="settings_enable_log_watchdog">تمكين مراقبة السجل</string>
<string name="settings_enable_log_watchdog_summary">يقوم مراقب السجل الخاص بـ LSPosed بتعديل خصائص النظام، والتي يمكن استغلالها للكشف عن LSPosed</string>
<string name="pure_black_dark_theme">السمة السوداء المظلمة</string>
<string name="pure_black_dark_theme_summary">استخدام السمة السوداء الخالصة إذا تم تمكين السمة المظلمة</string>
<string name="settings_group_theme">السمة</string>
Expand Down Expand Up @@ -206,13 +204,10 @@
<string name="settings_unsupported_pin_shortcut_summary">المشغل الافتراضي الحالي لا يدعم اختصارات الدبوس</string>
<string name="settings_enable_status_notification">إشعارات الحالة</string>
<string name="settings_enable_status_notification_summary">إظهار إشعار يمكنه فتح مدير الطفيليات</string>
<string name="disable_status_notification_error">لا يوجد اختصار، لا يمكن تعطيل الإشعار</string>
<string name="settings_update_channel">قناة التحديث</string>
<string name="update_channel_stable">مستقر</string>
<string name="update_channel_bate">تجريبي</string>
<string name="update_channel_nightly">البناء الليلي</string>
<string name="settings_xposed_api_call_protection">حماية استدعاء Xposed API</string>
<string name="settings_xposed_api_call_protection_summary">حظر رمز الوحدة الذي يتم تحميله ديناميكيًا لاستخدام Xposed API ، قد يؤدي ذلك إلى كسر بعض الوحدات ولكنه يفيد الأمان</string>
<!-- Module Repo -->
<string name="module_readme">اقرأني</string>
<string name="module_releases">إصدارات</string>
Expand Down
3 changes: 0 additions & 3 deletions app/src/main/res/values-bg/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -194,13 +194,10 @@
<string name="settings_unsupported_pin_shortcut_summary">Текущият стартер по подразбиране не поддържа преки пътища</string>
<string name="settings_enable_status_notification">Известие за състоянието</string>
<string name="settings_enable_status_notification_summary">Показване на известие, което може да отвори паразитен мениджър</string>
<string name="disable_status_notification_error">Няма пряк път, не мога да деактивирам известието</string>
<string name="settings_update_channel">Актуализиране на канала</string>
<string name="update_channel_stable">Стабилен</string>
<string name="update_channel_bate">Бета</string>
<string name="update_channel_nightly">Нощно изграждане</string>
<string name="settings_xposed_api_call_protection">Защита на повикванията на Xposed API</string>
<string name="settings_xposed_api_call_protection_summary">Блокиране на динамично зареждания код на модула, за да се използва Xposed API, това може да наруши някои модули, но е от полза за сигурността</string>
<!-- Module Repo -->
<string name="module_readme">Readme</string>
<string name="module_releases">Освобождава</string>
Expand Down
Loading
Loading