Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
160 commits
Select commit Hold shift + click to select a range
e8187f8
Push initial Zygisk module, remove LSPosed support (WIP)
frknkrc44 Feb 23, 2026
22e6e40
Remove unload
frknkrc44 Feb 23, 2026
23321ab
Improve AppDataIsolationHook
frknkrc44 Feb 23, 2026
384c65e
Use class check for hookedMethod
frknkrc44 Feb 24, 2026
f32b8c4
Improve the argument handling
frknkrc44 Feb 24, 2026
6d2852b
Fix some package manager hooks
frknkrc44 Feb 24, 2026
5768c32
Enable multidex back, remove not required R8 rules
frknkrc44 Feb 24, 2026
2f292c8
Return back to getDeclaredMethod
frknkrc44 Feb 24, 2026
0f2104e
Fix accessibility hook
frknkrc44 Feb 24, 2026
cc2372f
Use "callMethod" for package settings
frknkrc44 Feb 24, 2026
df7d9bc
Add method to find fields correctly
frknkrc44 Feb 24, 2026
f3282ff
Add app signature verification and reinstall support
frknkrc44 Feb 24, 2026
961bf54
Improve the signature verification and reinstall support
frknkrc44 Feb 24, 2026
aecddb1
Add restoring config from service after reinstall support
frknkrc44 Feb 24, 2026
9f476ad
Switch to invokeExactPlain
frknkrc44 Feb 24, 2026
173d344
Return back to invokeExact, use CURRENT as target type
frknkrc44 Feb 24, 2026
2118ebd
Remove dumpArgs from the docs
frknkrc44 Feb 24, 2026
2b5aac5
Optimize imports
frknkrc44 Feb 24, 2026
def2eb0
Optimize hooks
frknkrc44 Feb 24, 2026
364137a
Add proper waitForService
frknkrc44 Feb 24, 2026
08026bc
Add package name and uid cache
frknkrc44 Feb 24, 2026
2fcc6f0
Revert some changes
frknkrc44 Feb 24, 2026
419cc7a
Fix soft reboot by replacing unwanted return value
frknkrc44 Feb 26, 2026
2f361e8
Optimize removeCachedAppEntry
frknkrc44 Feb 26, 2026
2a22b6a
Add timestamp for non-master branch builds, fix file path for app
frknkrc44 Feb 26, 2026
a93f9ae
Try to fix ImmHook, add action.sh
frknkrc44 Feb 27, 2026
1081db1
Fix versioning
frknkrc44 Feb 27, 2026
2544f9f
Fix 15+ ImmHook support properly
frknkrc44 Feb 27, 2026
511e50c
Try to improve Android 14 or below support, add OS info to log
frknkrc44 Mar 2, 2026
4fc6509
Add "service version name" getter
frknkrc44 Mar 2, 2026
0f5618b
Try to optimize hook code
frknkrc44 Mar 5, 2026
7423717
Improve hooking side
frknkrc44 Mar 6, 2026
42c7b9b
Optimize the hook applier and other things
frknkrc44 Mar 7, 2026
383fc88
Try to fix Android 12- support
frknkrc44 Mar 8, 2026
700aa1f
Improve methods
frknkrc44 Mar 8, 2026
922d632
Show some logs into non-debug builds too
frknkrc44 Mar 8, 2026
0b47708
Remove uid cache
frknkrc44 Mar 8, 2026
6d74636
Improve preset cache support
frknkrc44 Mar 8, 2026
d525ee8
Try to improve Android 12 support again (11- works fine)
frknkrc44 Mar 9, 2026
e838d44
Do not export the manager activity like Xposed module
frknkrc44 Mar 9, 2026
2acc92b
Remove the preset cache
frknkrc44 Mar 9, 2026
f335a1c
Clear stack traces
frknkrc44 Mar 9, 2026
869b7e5
Move TAG as interface field
frknkrc44 Mar 9, 2026
fec5615
Add Samsung related fixes
frknkrc44 Mar 9, 2026
37363e7
Improve stack trace cleaning
frknkrc44 Mar 11, 2026
54ae5cd
Clean up the code a bit
frknkrc44 Mar 11, 2026
fefaecd
Change the zygote project hierarchy
frknkrc44 Mar 11, 2026
8f51b65
Convert work mode to dialog, add accessibility apps preset
frknkrc44 Mar 11, 2026
a23190b
Fix some warnings and make AS happy
frknkrc44 Mar 11, 2026
7e31b3b
Skip scanning the framework package (WIP)
frknkrc44 Mar 11, 2026
9a05d63
Skip detector apps for accessibility apps, add more detector apps int…
frknkrc44 Mar 11, 2026
79803d1
Fix filter log sort
frknkrc44 Mar 15, 2026
f1a52c9
Add ability to upload debug APK and ZIP for PRs
frknkrc44 Mar 15, 2026
3ecaf70
Check for logd runs and do not print to logd when it is not working
frknkrc44 Mar 17, 2026
64d39fd
Shorten logWithLevel
frknkrc44 Mar 17, 2026
5c6b90f
Export log* functions as JvmStatic
frknkrc44 Mar 17, 2026
e5bc7a7
Implement hook disabler to prevent conflicts
frknkrc44 Mar 19, 2026
8c1d011
Use newValue for getLocale
frknkrc44 Mar 24, 2026
5641003
Update androidvmtools version
frknkrc44 Mar 24, 2026
cf7ab1f
Make the update dialog less annoying, also optimize imports
frknkrc44 Mar 24, 2026
5ffa483
Add more meaningful declaration for test build check
frknkrc44 Mar 24, 2026
7f052e4
Try to improve PR actions
frknkrc44 Mar 24, 2026
5b5a6dc
Switch to initial ZygoteLoader C implementation by ThePedroo
frknkrc44 Mar 25, 2026
cf39b46
Add new packages into presets
frknkrc44 Mar 26, 2026
115dd5e
Try to fix Android 17 Beta 3+ crash
frknkrc44 Mar 27, 2026
eddb542
Revert "Switch to initial ZygoteLoader C implementation by ThePedroo"
frknkrc44 Mar 27, 2026
f20c332
Implement waitForService for onActiveUid delays
frknkrc44 Mar 27, 2026
5b4384e
Move dp calculation functions
frknkrc44 Mar 28, 2026
73b00f8
Improve enabled indicator checks
frknkrc44 Mar 28, 2026
64033ba
Add "Enable/Disable Internet" functionality
frknkrc44 Mar 28, 2026
2760a5a
Add more descriptions
frknkrc44 Mar 28, 2026
e0e1d23
Improve ImmHook (WIP)
frknkrc44 Mar 29, 2026
567ab73
Improve ImmHook again
frknkrc44 Mar 29, 2026
eb6f70b
Move some logs to debug builds
frknkrc44 Mar 29, 2026
07cd02e
Improve the warning message
frknkrc44 Mar 29, 2026
e6b13ce
Improve dialogs
frknkrc44 Mar 29, 2026
05f9383
Fix enable internet icon
frknkrc44 Mar 29, 2026
a33b2a3
Try to use binderLocalScope for uid query
frknkrc44 Mar 29, 2026
3079439
Improve calculate im list function
frknkrc44 Mar 29, 2026
4d69a4d
Improve the non-valid keyboard warning
frknkrc44 Mar 29, 2026
e6a92e3
Check for firstOrNull instead of any
frknkrc44 Mar 29, 2026
6f665ff
Fix wrongly parsed log
frknkrc44 Mar 29, 2026
069913f
Improve the warning message again
frknkrc44 Mar 29, 2026
0eef475
Move listHook contents into getEnabledInputMethodList hook
frknkrc44 Apr 1, 2026
3096021
Add some documentation for JsonConfig
frknkrc44 Apr 1, 2026
65598e6
Try to fix parameter count checker
frknkrc44 Apr 2, 2026
03aeb46
Add -1 parameter count as PARAMETER_COUNT_UNKNOWN
frknkrc44 Apr 2, 2026
e417f53
Unify package hiding function
frknkrc44 Apr 2, 2026
bb7f1bf
Prevent HMA-OSS selected as target app
frknkrc44 Apr 2, 2026
322b497
Accept null array for calling apps
frknkrc44 Apr 2, 2026
e5f3c40
Fix argument indexes for SDK29
frknkrc44 Apr 2, 2026
c7b0542
Ignore if packageSettings returns null
frknkrc44 Apr 2, 2026
e0ad056
upgrade androidvmtools and panamaport
frknkrc44 Apr 4, 2026
c0a6a86
Fix a specific system crash
frknkrc44 Apr 10, 2026
bf42621
Convert log* message to lambda function
frknkrc44 Apr 14, 2026
b335028
Try to fix log view
frknkrc44 Apr 14, 2026
354f0a3
Try to fix potential accessibility based detections
frknkrc44 Apr 14, 2026
ce79f04
Add "returnType", rename isParcel/returnParcel variable
frknkrc44 Apr 14, 2026
afcd7c3
Optimize the logging methods
frknkrc44 Apr 14, 2026
cbe6976
Reorganize the Logcat class
frknkrc44 Apr 14, 2026
3ef2f61
Try to fix system app checks
frknkrc44 Apr 15, 2026
18a6815
Try to fix accessibility hook behavior
frknkrc44 Apr 15, 2026
f4fcea6
Try to improve the accessibility hook performance
frknkrc44 Apr 15, 2026
cc8e2f9
Move calculateReturnedAccessibilityList functions into the hook
frknkrc44 Apr 15, 2026
8bc0ec0
Remove getInstalledAccessibilityServiceList hook
frknkrc44 Apr 15, 2026
bb038aa
Move enableInternet to PrefManager
frknkrc44 Apr 17, 2026
2a5d37b
Replace if with when in HomeFragment
frknkrc44 Apr 17, 2026
fa4bb79
Fix log parsing
frknkrc44 Apr 17, 2026
b1e969a
Try to fix isCallerInstallerOfRecord hook
frknkrc44 Apr 17, 2026
18a478d
Try to implement FD read/write
frknkrc44 Apr 18, 2026
440dfaa
Send config to the backend before saving into app
frknkrc44 Apr 18, 2026
79ff3d9
Add "Nuko" app icon by OukaroMF
frknkrc44 Apr 19, 2026
80fbc75
Add foreground tick for selected icon
frknkrc44 Apr 19, 2026
81aa5f3
Fix new icon
frknkrc44 Apr 19, 2026
2ec3dcb
merge master branch changes
frknkrc44 Apr 20, 2026
602d96b
update androidvmtools
frknkrc44 Apr 21, 2026
c8de22a
Switch to Coil
frknkrc44 Apr 21, 2026
78cb896
Fix comparation errors
frknkrc44 Apr 25, 2026
492feb3
Refresh stats after retrieving the package list
frknkrc44 Apr 25, 2026
c1ab149
Improve the preset lists
frknkrc44 Apr 25, 2026
2f62293
Move manifest string checker logic in root apps preset
frknkrc44 Apr 25, 2026
6113aae
Merge all log pages into one
frknkrc44 Apr 25, 2026
318fc80
Add version info to injection message
frknkrc44 Apr 27, 2026
538a7e4
Add partial backup/restore (WIP)
frknkrc44 May 7, 2026
e3e6c7b
Fix number format
frknkrc44 May 7, 2026
615c522
Add more clean steps for cleanRemnantsFromConfig
frknkrc44 May 8, 2026
e730020
Change random generator
frknkrc44 May 8, 2026
e9ea923
Trim config on backup mode only
frknkrc44 May 8, 2026
3d47e52
Prevent showing empty screen on restore config
frknkrc44 May 8, 2026
c17fc7e
Add item count indicator properly
frknkrc44 May 8, 2026
187d279
Optimize BackupRestoreFragment code
frknkrc44 May 8, 2026
b2be3a6
Simplify clearUninstalledAppConfigs
frknkrc44 May 8, 2026
881cbdb
Try to avoid .use for output stream
frknkrc44 May 8, 2026
d3c6522
Fix margins of Switch widgets
frknkrc44 May 8, 2026
dd97cc1
Optimize imports
frknkrc44 May 8, 2026
f93177d
Trim config on both backup and restore
frknkrc44 May 8, 2026
7d4ef8b
Show toolbar on pre restore config
frknkrc44 May 8, 2026
680e9f7
Remove xposed code
frknkrc44 May 9, 2026
106f7f8
Try to support late-load mode
frknkrc44 May 11, 2026
9a1fcc8
Use alternative method to find ClassLoader
frknkrc44 May 11, 2026
0d34076
Use 11- mode as fallback
frknkrc44 May 11, 2026
2037026
Simplify 12+ mode
frknkrc44 May 11, 2026
75cbe52
Upgrade dependencies
frknkrc44 May 11, 2026
4e0116a
Try to fix AppDataIsolationHook
frknkrc44 May 11, 2026
e6189ab
Do not pull ProcessRecord details when detail log is not enabled
frknkrc44 May 11, 2026
37738bc
Move query name getter to below
frknkrc44 May 11, 2026
aefdd30
Change getInstallerPackageName hook for 13+
frknkrc44 May 11, 2026
ba32f2c
Remove more repeating codes
frknkrc44 May 11, 2026
36d3df0
Separate ZL and service utils
frknkrc44 May 11, 2026
94a5f5d
Move isCallerInstallerOfRecord
frknkrc44 May 12, 2026
24c2f03
Remove repeated codes a bit
frknkrc44 May 19, 2026
9a1cf29
Improve code readability a bit
frknkrc44 May 21, 2026
4345f14
Remove user 0 requirement from manager app
frknkrc44 May 22, 2026
2f88d4f
Move unnecessary variables to logD message
frknkrc44 May 22, 2026
2b0f0ef
Make app signature check less prioritized
frknkrc44 May 22, 2026
9dec4db
Simplify appUid checks
frknkrc44 May 22, 2026
07ed44c
Make settings replacement checks more reliable
frknkrc44 May 22, 2026
4b6667b
Return early when a package is excluded
frknkrc44 May 22, 2026
8a78556
Remove some probably unnecessary checks
frknkrc44 May 22, 2026
9471ed3
Change versioning
frknkrc44 May 22, 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
3 changes: 2 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ jobs:
- name: Build all
id: buildAll
run: |
./gradlew assemble
./gradlew :app:assemble
./gradlew :zygote:assemble
echo "releaseName=$(ls app/build/outputs/apk/release/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT
echo "debugName=$(ls app/build/outputs/apk/debug/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT
echo "releaseFile=$(ls app/build/outputs/apk/release/*.apk)" >> $GITHUB_OUTPUT
Expand Down
22 changes: 17 additions & 5 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,23 @@ jobs:
id: buildDebug
run: |
./gradlew assembleDebug
echo "debugName=$(ls app/build/outputs/apk/debug/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT
echo "debugAPKName=$(ls app/build/outputs/apk/debug/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT
echo "debugZIPName=$(ls zygote/build/outputs/magisk/debug/*.zip | awk -F '(/|.zip)' '{print $6}')" >> $GITHUB_OUTPUT

- name: Upload debug
- name: Upload debug APK
if: success()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: ${{ steps.buildDebug.outputs.debugName }}
path: "app/build/outputs/apk/debug/*.apk"
archive: false
name: ${{ steps.buildDebug.outputs.debugAPKName }}
path: |
app/build/outputs/apk/debug/*.apk

- name: Upload debug ZIP
if: success()
uses: actions/upload-artifact@v7
with:
archive: false
name: ${{ steps.buildDebug.outputs.debugZIPName }}
path: |
zygote/build/outputs/magisk/debug/*.zip
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,6 @@ lint/tmp/

updates/
translators.json

.kotlin/
xposed/
1 change: 1 addition & 0 deletions CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
- [IAmNotADeveloper](https://github.com/xfqwdsj/IAmNotADeveloper) - hiding developer options idea
- [BetterKnownInstalled](https://github.com/Pixel-Props/BetterKnownInstalled) - package installer spoofing idea
- [0bbedCode](https://github.com/0bbedCode) - ID checker
- [vova7878](https://github.com/vova7878) - ZygoteLoader, AndroidVMTools and PanamaPort
- All translators
- All root community
- You (if you are not a robot 🤖)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Although it's bad practice to detect the installation of specific apps, not ever

Additionally, some apps use various loopholes to acquire your app list, in order to use it as fingerprinting data or for other nefarious purposes.

This module can work as an Xposed module to hide apps or reject app list requests.
This module can work as an Zygisk module to hide apps or reject app list requests.

## About HMA-OSS

Expand Down
2 changes: 1 addition & 1 deletion README_id.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Meskipun merupakan praktik yang buruk untuk mendeteksi pemasangan aplikasi terte

Selain itu, beberapa aplikasi menggunakan berbagai celah untuk memperoleh daftar aplikasi anda, untuk menggunakannya sebagai data fingerprinting atau untuk tujuan lain yang tidak diinginkan.

Modul ini dapat berfungsi sebagai modul Xposed untuk menyembunyikan aplikasi atau menolak permintaan daftar aplikasi.
Modul ini dapat berfungsi sebagai modul Zygisk untuk menyembunyikan aplikasi atau menolak permintaan daftar aplikasi.

## Saya ingin berkontribusi dalam terjemahan
Anda dapat berkontribusi dalam penerjemahan [Di Sini](https://crowdin.com/project/frknkrc44-hma-oss).
Expand Down
2 changes: 1 addition & 1 deletion README_ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@

さらに、一部のアプリはさまざまな抜け穴を利用してアプリリストを取得し、それをフィンガープリンティングデータとして使用したり、その他の不正な目的に使用したりします。

このモジュールは、アプリを非表示にしたり、アプリリストの要求を拒否したりする Xposed モジュールとして機能します。
このモジュールは、アプリを非表示にしたり、アプリリストの要求を拒否したりする Zygisk モジュールとして機能します。

## 翻訳に貢献する
[こちら](https://crowdin.com/project/frknkrc44-hma-oss)から翻訳に貢献することができます。
Expand Down
2 changes: 1 addition & 1 deletion README_tr.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Belirli uygulamaların kurulu olup olmadığını tespit etmek kötü bir yönte

Ayrıca bazı uygulamalar uygulama listenizi ele geçirmek, parmak izi verileri olarak kullanmak veya başka kötü niyetli amaçlar için çeşitli açıklardan yararlanır.

Bu modül, uygulamaları gizlemek veya uygulama listesi isteklerini reddetmek için çalışabilen bir Xposed modülüdür.
Bu modül, uygulamaları gizlemek veya uygulama listesi isteklerini reddetmek için çalışabilen bir Zygisk modülüdür.

## Çeviriye katkıda bulunmak istiyorum
[Buraya tıklayarak](https://crowdin.com/project/frknkrc44-hma-oss) çeviriye katkıda bulunabilirsiniz.
Expand Down
2 changes: 1 addition & 1 deletion README_zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
## 关于该模块
虽然“检测安装的应用”是不正确的做法,但是并不是所有的与 root 相关联的插件类应用都提供了随机包名支持。这就意味着检测到安装了此类应用(如 Fake Location 、存储空间隔离)与检测到了 root 本身区别不大。(会使用检测手段的 app 可不会认为你是在“我就蹭蹭不进去”)
与此同时,部分“不安分”的应用会使用各种漏洞绕过系统权限来获取你的应用列表,从而对你建立用户画像。(如陈叔叔将安装了 V2Ray 的用户分为一类),或是类似于某某校园某某乐跑的软件会要求你卸载作弊软件。
该模块提供了一些检测方式用于测试您是否成功地隐藏了某些特定的包名,如 Magisk/Edxposed Manager;同时可作为 Xposed 模块用于隐藏应用列表或特定应用,保护隐私。
该模块提供了一些检测方式用于测试您是否成功地隐藏了某些特定的包名,如 Magisk Manager;同时可作为 Zygisk 模块用于隐藏应用列表或特定应用,保护隐私。

## 更新日志
[参考发布页面](https://github.com/frknkrc44/HMA-OSS/commits)
17 changes: 6 additions & 11 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import com.android.build.gradle.internal.api.BaseVariantOutputImpl
import com.google.gson.JsonParser
import org.jose4j.json.internal.json_simple.JSONObject
import java.io.DataInputStream
Expand Down Expand Up @@ -122,6 +121,10 @@ android {
viewBinding = true
}

base {
archivesName = "${rootProject.name}-${defaultConfig.versionName!!.replace("/", "_")}"
}

packaging {
dex.useLegacyPackaging = true
resources {
Expand All @@ -148,13 +151,13 @@ autoResConfig {

dependencies {
implementation(projects.common)
runtimeOnly(projects.xposed)

implementation(libs.androidx.navigation.fragment.ktx)
implementation(libs.androidx.navigation.ui.ktx)
implementation(libs.androidx.preference.ktx)
implementation(libs.androidx.swiperefreshlayout)
implementation(libs.com.github.bumptech.glide)
implementation(libs.io.coilkt.coil3.coil)
implementation(libs.io.coilkt.coil3.coil.network.okhttp)
implementation(libs.dev.androidbroadcast.vbpd)
implementation(libs.dev.androidbroadcast.vbpd.reflection)
implementation(libs.com.github.topjohnwu.libsu.core)
Expand All @@ -165,11 +168,3 @@ dependencies {
implementation(libs.androidx.appcompat.appcompat)
implementation(libs.material)
}

android.applicationVariants.all {
outputs.all {
(this as BaseVariantOutputImpl).apply {
outputFileName = "${rootProject.name.replace(" ", "_")}-${versionName}-${buildType.name}.apk"
}
}
}
3 changes: 0 additions & 3 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@
public static ** valueOf(java.lang.String);
}

-keep class icu.nullptr.hidemyapplist.data.UpdateData { *; }
-keep class icu.nullptr.hidemyapplist.data.UpdateData$* { *; }

-keep,allowoptimization class * extends androidx.preference.PreferenceFragmentCompat
-keepclassmembers class org.frknkrc44.hma_oss.databinding.** {
public <methods>;
Expand Down
19 changes: 1 addition & 18 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,7 @@
android:name="org.frknkrc44.hma_oss.ui.activity.MainActivity"
android:exported="true"
android:configChanges="assetsPaths|colorMode|density|fontScale|fontWeightAdjustment|grammaticalGender|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|resourcesUnused|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="de.robv.android.xposed.category.MODULE_SETTINGS" />
</intent-filter>
</activity>
android:windowSoftInputMode="adjustPan" />

<activity-alias
android:name=".MainActivityLauncher"
Expand Down Expand Up @@ -93,17 +88,5 @@
android:exported="true"
tools:ignore="ExportedContentProvider" />

<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Hide your app list, settings, package installers and more." />
<meta-data
android:name="xposedminversion"
android:value="82" />
<meta-data
android:name="xposedscope"
android:resource="@array/xposed_scope" />
</application>
</manifest>
6 changes: 0 additions & 6 deletions app/src/main/java/icu/nullptr/hidemyapplist/MyApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,11 @@ import icu.nullptr.hidemyapplist.receiver.AppChangeReceiver
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.service.ServiceClient
import icu.nullptr.hidemyapplist.ui.util.showToast
import icu.nullptr.hidemyapplist.util.ConfigUtils.Companion.getLocale
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import me.zhanghai.android.appiconloader.AppIconLoader
import org.frknkrc44.hma_oss.R
import kotlin.system.exitProcess

class MyApp : Application() {
companion object {
Expand All @@ -33,10 +31,6 @@ class MyApp : Application() {
override fun onCreate() {
super.onCreate()
hmaApp = this
if (!filesDir.absolutePath.startsWith("/data/user/0/")) {
showToast(R.string.do_not_dual)
exitProcess(0)
}
AppChangeReceiver.register(this)
ConfigManager.init()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.os.Build
import android.os.ParcelFileDescriptor
import android.util.Log
import icu.nullptr.hidemyapplist.MyApp.Companion.hmaApp
import icu.nullptr.hidemyapplist.common.CollectionUtils.removeIfWithCount
import icu.nullptr.hidemyapplist.common.Constants
import icu.nullptr.hidemyapplist.common.JsonConfig
import icu.nullptr.hidemyapplist.common.settings_presets.ReplacementItem
Expand Down Expand Up @@ -42,8 +43,13 @@ object ConfigManager {
fun init() {
val configFileIsNew = !configFile.exists()
if (configFileIsNew) {
config = JsonConfig()
configFile.writeText(config.toString())
runCatching {
val rawConfig = ServiceClient.readConfig()!!
config = JsonConfig.parse(rawConfig)
}.onFailure {
config = JsonConfig()
configFile.writeText(config.toString())
}
}
runCatching {
if (!configFileIsNew) config = JsonConfig.parse(configFile.readText())
Expand Down Expand Up @@ -145,6 +151,15 @@ object ConfigManager {
PackageHelper.invalidateCache()
}

var disabledHooks: List<JsonConfig.HookItem>
get() = config.disabledHooks
set(elements) {
config.disabledHooks.clear()
config.disabledHooks.addAll(elements)
saveConfig()
showToast(R.string.settings_need_reboot)
}

fun importConfig(json: String) {
config = JsonConfig.parse(json)
config.configVersion = BuildConfig.CONFIG_VERSION
Expand Down Expand Up @@ -269,38 +284,31 @@ object ConfigManager {
saveConfig()
}

fun clearUninstalledAppConfigs(onFinish: (success: Boolean) -> Unit) {
fun clearUninstalledAppConfigs(inConfig: JsonConfig = config, onFinish: (success: Boolean) -> Unit) {
PackageHelper.invalidateCache { throwable ->
if (throwable == null) {
// --- STEP 1: Clear uninstalled app configs ---
val scopeMarkedToRemove = mutableListOf<String>()
config.scope.keys.forEach { packageName ->
if (!PackageHelper.exists(packageName)) {
scopeMarkedToRemove.add(packageName)
}
}

if (scopeMarkedToRemove.isNotEmpty()) {
scopeMarkedToRemove.forEach { config.scope.remove(it) }
val scopeRemoveCount = inConfig.scope.removeIfWithCount { pkg, _ ->
!PackageHelper.exists(pkg)
}

// --- STEP 2: Clear uninstalled apps from templates ---
var cleanedAppCount = 0
config.templates.forEach { (key, value) ->
inConfig.templates.forEach { (key, value) ->
val newList = value.appList.mapNotNull { if (PackageHelper.exists(it)) it else null }.toSet()
val count = value.appList.size - newList.size

if (count > 0) {
cleanedAppCount += count
config.templates[key] = JsonConfig.Template(
inConfig.templates[key] = JsonConfig.Template(
isWhitelist = value.isWhitelist,
appList = newList
)
}
}

ServiceClient.log(Log.INFO, TAG, "Pruned ${scopeMarkedToRemove.size} app config(s) and $cleanedAppCount app(s) from template(s)")
if (scopeMarkedToRemove.isNotEmpty() || cleanedAppCount > 0) {
if ((scopeRemoveCount > 0 || cleanedAppCount > 0) && inConfig == config) {
ServiceClient.log(Log.INFO, TAG, "Pruned $scopeRemoveCount app config(s) and $cleanedAppCount app(s) from template(s)")
saveConfig()
}

Expand All @@ -310,4 +318,20 @@ object ConfigManager {
}
}
}

fun getRawConfig(deepCopy: Boolean): JsonConfig {
if (deepCopy) {
val scopeCopy = config.scope.toMutableMap()
val templateCopy = config.templates.toMutableMap()
val settingsTemplateCopy = config.settingsTemplates.toMutableMap()

return config.copy(
scope = scopeCopy,
templates = templateCopy,
settingsTemplates = settingsTemplateCopy,
)
}

return config
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,12 @@ object PrefManager {
set(value) = pref.edit { putInt(PREF_ENABLE_INTERNET, value) }

fun setEnableInternet(value: Boolean) {
enableInternet = if (value) {
Constants.ENABLE_INTERNET_ON
} else {
Constants.ENABLE_INTERNET_OFF
enableInternet = if (value) {
Constants.ENABLE_INTERNET_ON
} else {
Constants.ENABLE_INTERNET_OFF
}
}
}

var disableUpdate: Boolean
get() = pref.getBoolean(PREF_DISABLE_UPDATE, false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@ object ServiceClient : IHMAService, IBinder.DeathRecipient {
service?.serviceVersionName
} catch (_: Throwable) { null }

override fun getLoadedHooks() = service?.loadedHooks

override fun readFD(type: Int) = service?.readFD(type)

override fun writeFD(type: Int, fd: ParcelFileDescriptor) {
Expand Down
Loading
Loading