├── .gitattributes
├── app
├── .gitignore
├── src
│ └── main
│ │ ├── play_store_512.png
│ │ ├── res
│ │ ├── font
│ │ │ ├── jetbrainsmonoregular.ttf
│ │ │ └── jetbrainsmono.xml
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_monochrome.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_monochrome.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_monochrome.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_monochrome.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ ├── ic_launcher_background.png
│ │ │ ├── ic_launcher_foreground.png
│ │ │ └── ic_launcher_monochrome.png
│ │ ├── values-land
│ │ │ └── dimens.xml
│ │ ├── values-w1240dp
│ │ │ └── dimens.xml
│ │ ├── values-w600dp
│ │ │ └── dimens.xml
│ │ ├── values-pt-rPT
│ │ │ └── strings.xml
│ │ ├── values
│ │ │ ├── styles.xml
│ │ │ ├── bools.xml
│ │ │ ├── themable.xml
│ │ │ ├── dimens.xml
│ │ │ ├── colors.xml
│ │ │ └── arrays.xml
│ │ ├── mipmap-anydpi-v26
│ │ │ └── ic_launcher.xml
│ │ ├── values-v31
│ │ │ └── bools.xml
│ │ ├── xml
│ │ │ ├── full_backup_content.xml
│ │ │ ├── shared_file_paths.xml
│ │ │ ├── data_extraction_rules.xml
│ │ │ ├── credits_preferences.xml
│ │ │ ├── app_info_preferences.xml
│ │ │ ├── network_security_config.xml
│ │ │ ├── privacy_preferences.xml
│ │ │ ├── security_preferences.xml
│ │ │ ├── theme_preferences.xml
│ │ │ └── debugging_preferences.xml
│ │ ├── drawable
│ │ │ ├── baseline_keyboard_arrow_right_24.xml
│ │ │ ├── baseline_privacy_tip_24.xml
│ │ │ ├── baseline_access_time_24.xml
│ │ │ ├── baseline_people_24.xml
│ │ │ ├── ic_baseline_download_24.xml
│ │ │ ├── ic_baseline_warning_24.xml
│ │ │ ├── baseline_check_24.xml
│ │ │ ├── baseline_close_24.xml
│ │ │ ├── bg_baseline_circle_24.xml
│ │ │ ├── ic_baseline_delete_24.xml
│ │ │ ├── ic_baseline_info_24.xml
│ │ │ ├── baseline_arrow_back_24.xml
│ │ │ ├── ic_baseline_error_24.xml
│ │ │ ├── ic_baseline_keyboard_return_24.xml
│ │ │ ├── ic_patreon.xml
│ │ │ ├── ic_baseline_storage_24.xml
│ │ │ ├── ic_baseline_delete_outline_24.xml
│ │ │ ├── ic_baseline_security_24.xml
│ │ │ ├── ic_baseline_add_box_24.xml
│ │ │ ├── ic_baseline_list_24.xml
│ │ │ ├── ic_baseline_numbers_24.xml
│ │ │ ├── baseline_verified_user_24.xml
│ │ │ ├── ic_baseline_vpn_key_24.xml
│ │ │ ├── ic_baseline_system_update_24.xml
│ │ │ ├── ic_baseline_upload_file_24.xml
│ │ │ ├── ic_reboot_24.xml
│ │ │ ├── ic_baseline_notifications_24.xml
│ │ │ ├── ic_baseline_refresh_24.xml
│ │ │ ├── baseline_favorite_24.xml
│ │ │ ├── baseline_save_24.xml
│ │ │ ├── baseline_system_update_24.xml
│ │ │ ├── baseline_cloud_download_24.xml
│ │ │ ├── baseline_network_wifi_24.xml
│ │ │ ├── ic_baseline_delete_forever_24.xml
│ │ │ ├── ic_baseline_sort_by_alpha_24.xml
│ │ │ ├── ic_gitlab.xml
│ │ │ ├── baseline_block_24.xml
│ │ │ ├── baseline_notification_important_24.xml
│ │ │ ├── ic_baseline_lock_24.xml
│ │ │ ├── ic_baseline_update_24.xml
│ │ │ ├── ic_xda.xml
│ │ │ ├── ic_baseline_extension_24.xml
│ │ │ ├── baseline_copy_all_24.xml
│ │ │ ├── ic_baseline_cloud_off_24.xml
│ │ │ ├── baseline_restart_alt_24.xml
│ │ │ ├── ic_baseline_hide_source_24.xml
│ │ │ ├── ic_baseline_bug_report_24.xml
│ │ │ ├── ic_baseline_monetization_on_24.xml
│ │ │ ├── ic_baseline_android_24.xml
│ │ │ ├── ic_baseline_support_24.xml
│ │ │ ├── baseline_monetization_on_24.xml
│ │ │ ├── ic_baseline_paypal_24.xml
│ │ │ ├── ic_baseline_palette_24.xml
│ │ │ ├── ic_baseline_telegram_24.xml
│ │ │ ├── ic_baseline_design_services_24.xml
│ │ │ ├── ic_github.xml
│ │ │ ├── ic_baseline_settings_24.xml
│ │ │ ├── ic_baseline_language_24.xml
│ │ │ ├── ic_baseline_discord_24.xml
│ │ │ ├── ic_baseline_app_settings_alt_24.xml
│ │ │ ├── ic_foreground.xml
│ │ │ └── ic_baseline_blur_on_24.xml
│ │ ├── menu
│ │ │ ├── compat_menu.xml
│ │ │ ├── update_nav.xml
│ │ │ ├── setup_bottom_nav.xml
│ │ │ ├── bottom_nav_install.xml
│ │ │ └── bottom_nav_menu.xml
│ │ ├── values-night
│ │ │ └── themes.xml
│ │ ├── values-night-v31
│ │ │ └── themes.xml
│ │ ├── layout
│ │ │ ├── dialog_checkbox.xml
│ │ │ ├── preference_material_switch.xml
│ │ │ ├── custom_repo_input.xml
│ │ │ ├── settings_activity.xml
│ │ │ ├── webview.xml
│ │ │ ├── installer_wrap.xml
│ │ │ ├── installer.xml
│ │ │ └── markdown_view.xml
│ │ ├── raw
│ │ │ ├── gstatic_root_ca
│ │ │ ├── androidacy_root_ca
│ │ │ ├── sentry_io_root_ca
│ │ │ ├── gh_main_crt
│ │ │ ├── gh_root_ca
│ │ │ └── sentry_root_ca
│ │ ├── values-v27
│ │ │ └── themes.xml
│ │ ├── values-v29
│ │ │ └── themes.xml
│ │ ├── values-th
│ │ │ └── strings.xml
│ │ └── values-lt
│ │ │ └── strings.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── fox2code
│ │ │ └── mmm
│ │ │ ├── NotificationTypeCst.kt
│ │ │ ├── OverScrollManager.kt
│ │ │ ├── utils
│ │ │ ├── room
│ │ │ │ ├── ReposListDatabase.kt
│ │ │ │ ├── ModuleListCacheDatabase.kt
│ │ │ │ ├── ReposList.kt
│ │ │ │ └── ModuleListCache.kt
│ │ │ ├── FastException.kt
│ │ │ ├── TimberUtils.kt
│ │ │ ├── io
│ │ │ │ ├── net
│ │ │ │ │ └── HttpException.kt
│ │ │ │ ├── FileUtils.kt
│ │ │ │ └── GMSProviderInstaller.kt
│ │ │ ├── ProcessHelper.kt
│ │ │ └── SyncManager.kt
│ │ │ ├── XRepo.kt
│ │ │ ├── markdown
│ │ │ ├── MarkdownChip.kt
│ │ │ └── MarkdownUrlLinker.kt
│ │ │ ├── background
│ │ │ └── BackgroundBootListener.kt
│ │ │ ├── ExpiredActivity.kt
│ │ │ ├── module
│ │ │ └── ModuleSorter.kt
│ │ │ ├── settings
│ │ │ ├── LongClickablePreference.kt
│ │ │ └── SharedPreferenceDataStore.kt
│ │ │ ├── repo
│ │ │ ├── CustomRepoData.kt
│ │ │ └── RepoModule.kt
│ │ │ ├── Constants.kt
│ │ │ └── XHooks.kt
│ │ └── assets
│ │ ├── module_installer_test.sh
│ │ ├── module_installer_wrapper.sh
│ │ └── anykernel3_installer.sh
└── roomSchemas
│ └── com.fox2code.mmm.utils.room.ReposListDatabase
│ └── 1.json
├── fastlane
└── metadata
│ └── android
│ ├── zh-Hans
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ja
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ko
│ ├── short_description.txt
│ └── full_description.txt
│ ├── zh-Hant
│ ├── short_description.txt
│ └── full_description.txt
│ ├── bs
│ ├── short_description.txt
│ └── full_description.txt
│ ├── cs
│ ├── short_description.txt
│ └── full_description.txt
│ ├── nb-NO
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pl
│ ├── short_description.txt
│ └── full_description.txt
│ ├── de
│ ├── short_description.txt
│ └── full_description.txt
│ ├── es
│ ├── short_description.txt
│ └── full_description.txt
│ ├── hu
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ro
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ru
│ ├── short_description.txt
│ └── full_description.txt
│ ├── vi
│ ├── short_description.txt
│ └── full_description.txt
│ ├── id
│ ├── short_description.txt
│ └── full_description.txt
│ ├── nl-NL
│ ├── short_description.txt
│ └── full_description.txt
│ ├── pt-BR
│ ├── short_description.txt
│ └── full_description.txt
│ ├── sv
│ ├── short_description.txt
│ └── full_description.txt
│ ├── tr
│ ├── short_description.txt
│ └── full_description.txt
│ ├── uk
│ ├── short_description.txt
│ └── full_description.txt
│ ├── ar
│ ├── short_description.txt
│ └── full_description.txt
│ ├── da
│ ├── short_description.txt
│ └── full_description.txt
│ ├── en-US
│ ├── short_description.txt
│ └── full_description.txt
│ └── it
│ ├── short_description.txt
│ └── full_description.txt
├── docs
├── dark_screenshot.png
├── light_screenshot.png
└── examples
│ ├── example_module.zip
│ ├── rainbow_module.zip
│ ├── example_module
│ ├── module.prop
│ └── customize.sh
│ └── rainbow_module
│ ├── module.prop
│ └── customize.sh
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── question.md
│ ├── config.yml
│ ├── feature_request.md
│ └── bug_report.md
├── dependabot.yml
└── workflows
│ ├── dependencies.yml
│ └── build-debug.yml
├── .gitignore
├── rundebug
├── settings.gradle.kts
└── gradle.properties
/.gitattributes:
--------------------------------------------------------------------------------
1 | # assets/*.db are binary
2 |
3 | *.db binary
4 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /default
3 | /release
4 | /mapping.txt
5 | /.vscode
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-Hans/short_description.txt:
--------------------------------------------------------------------------------
1 | Magick 模块管理器,官方应用程序已放弃对它的支持。
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/short_description.txt:
--------------------------------------------------------------------------------
1 | 公式アプリがサポートを終了した Magisk モジュールマネージャーだよ。
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ko/short_description.txt:
--------------------------------------------------------------------------------
1 | 공식 앱이 지원을 중단했기 때문에 만들어진 매지스크 모듈 매니저입니다.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-Hant/short_description.txt:
--------------------------------------------------------------------------------
1 | 一個 Magisk模組的模組管理工具,因為Magisk官方不支援了。
2 |
--------------------------------------------------------------------------------
/docs/dark_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/docs/dark_screenshot.png
--------------------------------------------------------------------------------
/docs/light_screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/docs/light_screenshot.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-Hant/full_description.txt:
--------------------------------------------------------------------------------
1 | 本應用程式非Magisk或者其開發者的官方支持App
2 |
3 | 這些模組與本應用程式無關。請通知
4 | 倉庫管理員。
5 |
--------------------------------------------------------------------------------
/app/src/main/play_store_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/play_store_512.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/bs/short_description.txt:
--------------------------------------------------------------------------------
1 | Menadžer modula za Magisk jer je zvanična aplikacija ukinula podršku.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs/short_description.txt:
--------------------------------------------------------------------------------
1 | Správce modulů pro Magisk místo původního v aplikaci , který byl ukončen.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nb-NO/short_description.txt:
--------------------------------------------------------------------------------
1 | En modulhåndterer for Magisk fordi det offisielle støtten er trukket.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/short_description.txt:
--------------------------------------------------------------------------------
1 | AMM jest prostą w użyciu aplikacją zarządzającą modułami Magisk/KernelSU.
2 |
--------------------------------------------------------------------------------
/docs/examples/example_module.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/docs/examples/example_module.zip
--------------------------------------------------------------------------------
/docs/examples/rainbow_module.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/docs/examples/rainbow_module.zip
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | Ein Modul-Manager für Magisk, weil die offizielle App dies nicht mehr kann.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/short_description.txt:
--------------------------------------------------------------------------------
1 | Un administrador de módulos para Magisk porque la oficial dejó de admitirlo.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hu/short_description.txt:
--------------------------------------------------------------------------------
1 | Egy modulkezező a Magisk-hez, mert az alkalmazás már nem támogatja azokat.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ro/short_description.txt:
--------------------------------------------------------------------------------
1 | Manager de module Magisk, deoarece aplicația oficială a renunțat la suport.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/short_description.txt:
--------------------------------------------------------------------------------
1 | Менеджер модулей Magisk на замену офиц. приложению без поддержки репозиториев.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/vi/short_description.txt:
--------------------------------------------------------------------------------
1 | Một trình quản lý mô-đun cho Magisk vì ứng dụng chính thức đã ngừng hỗ trợ nó.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-Hans/full_description.txt:
--------------------------------------------------------------------------------
1 | 此应用程序未受到 Magisk 或其官方人员的支持。
2 |
3 | 此应用程序中显示的模块与本程序无关。
4 | 如有需要请先联系仓库拥有者。
5 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/fastlane/metadata/android/id/short_description.txt:
--------------------------------------------------------------------------------
1 | Sebuah manajer modul untuk Magisk karena Magisk sudah tidak menyediakannya lagi.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl-NL/short_description.txt:
--------------------------------------------------------------------------------
1 | Modulebeheerder voor Magisk vermits de officiële app dit niet meer ondersteund.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/short_description.txt:
--------------------------------------------------------------------------------
1 | Um gerenciador de módulos do Magisk, pois o app oficial removeu esta função.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sv/short_description.txt:
--------------------------------------------------------------------------------
1 | En modulhanterare för Magisk eftersom den officiella appen inte längre gör det.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/short_description.txt:
--------------------------------------------------------------------------------
1 | Magisk için bir modül yöneticisidir çünkü resmi uygulama bunun desteğini kesti.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/short_description.txt:
--------------------------------------------------------------------------------
1 | Менеджер модулів для Magisk, оскільки офіційний додаток припинив його підтримку.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ar/short_description.txt:
--------------------------------------------------------------------------------
1 | Androidacy مدير إضافات Magisk هو تطبيق سهل الاستخدام لإدارة إضافات Magisk / KernelSU.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/da/short_description.txt:
--------------------------------------------------------------------------------
1 | En modul manager for Magisk, fordi Magisk valgte at droppe understøttelse til dette.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Androidacy Module Manager is an easy to use Magisk/KernelSU module management app.
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/short_description.txt:
--------------------------------------------------------------------------------
1 | Androidacy Module Manager è un'app facile da usare per gestire moduli Magisk/KernelSU.
2 |
--------------------------------------------------------------------------------
/app/src/main/res/font/jetbrainsmonoregular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/font/jetbrainsmonoregular.ttf
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | patreon: Androidacy
2 | custom: ["https://www.androidacy.com/membership-join/#utm_source=github&utm_medium=web&utm_campaign=ghsponsors"]
3 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Question
3 | about: Question about this project
4 | title: ''
5 | labels: question
6 | assignees: ''
7 |
8 | ---
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ja/full_description.txt:
--------------------------------------------------------------------------------
1 | このアプリは Magisk またはその開発者によって公式にサポートされていないよ。
2 |
3 | このアプリに表示されているモジュールは完全に連携していないよ。
4 | 代わりにリポジトリのオーナーに連絡してね。
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Androidacy/MagiskModuleManager/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/da/full_description.txt:
--------------------------------------------------------------------------------
1 | Denne app er ikke officielt understøttet af Magisk eller dets udviklere.
2 |
3 | Modulerne vist i denne app er ikke tilknyttet denne app. Venligst kontakt
4 | repo-ejere i stedet.
5 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Fox2Code Telegram group
4 | url: https://t.me/Fox2Code_Chat
5 | about: Join the Telegram group if you want to discuss with the community.
6 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/bs/full_description.txt:
--------------------------------------------------------------------------------
1 | Magisk ili njegovi programeri službeno ne podržavaju ovu aplikaciju.
2 |
3 | Moduli prikazani u ovoj aplikaciji nisu povezani s ovom aplikacijom.
4 | Molimo kontaktirajte vlasnike repozitorija.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/hu/full_description.txt:
--------------------------------------------------------------------------------
1 | Ez az app hivatalosan nem támogatott a Magisk fejlesztői által.
2 |
3 | Az itt megjelenített modulok nem kapcsolódnak ehhez az apphoz. Kérdés esetén
4 | lépj kapcsolatba a repo üzemeltetővel.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nb-NO/full_description.txt:
--------------------------------------------------------------------------------
1 | Dette programmet har ikke offisiell støtte av Magisk eller dets utviklere.
2 |
3 | Modulene vist i programmet er ikke tilknyttet programmet.
4 | Kontakt respektive eiere av pakkebrønner ved feil.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ru/full_description.txt:
--------------------------------------------------------------------------------
1 | Это приложение не связано с Magisk или его разработчиками.
2 |
3 | Модули, показанные в приложении, сами по себе. В случае проблем
4 | свяжитесь с владельцами репозиториев, где публикуются модули.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/uk/full_description.txt:
--------------------------------------------------------------------------------
1 | Цей додаток офіційно не підтримується Magisk або його розробниками.
2 |
3 | Модулі, показані в цьому додатку, не пов’язані з цим додатком. Будь ласка зв'яжіться
4 | натомість власники репозиторіїв.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/sv/full_description.txt:
--------------------------------------------------------------------------------
1 | Den här appen stöda inte officiellt av Magisk eller dess utvecklare.
2 |
3 | Modulerna som visas i den här appen är inte tillhandahållna i samröre med den. Vänligen
4 | kontakta förrådsägare istället.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/cs/full_description.txt:
--------------------------------------------------------------------------------
1 | Tato aplikace není oficiálně podporována společností Magisk ani jejími vývojáři.
2 |
3 | Moduly zobrazené v této aplikaci nejsou spojeny s touto aplikací. Prosím kontaktujte
4 | místo toho autory repozitářů.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/it/full_description.txt:
--------------------------------------------------------------------------------
1 | Questa app non è ufficialmente supportata da Magisk o dai suoi sviluppatori.
2 |
3 | I moduli mostrati in questa app non sono affiliati a questa app. Si prega di contattare
4 | i proprietari della repository.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/tr/full_description.txt:
--------------------------------------------------------------------------------
1 | Bu uygulama Magisk veya geliştiricileri tarafından resmi olarak desteklenmiyor.
2 |
3 | Bu uygulamada gösterilen modüller bu uygulamayla ilişkili değildir.
4 | Onun yerine lütfen depo sahipleriyle iletişime geçin.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/nl-NL/full_description.txt:
--------------------------------------------------------------------------------
1 | Deze app wordt niet officieel ondersteund door Magisk en zijn ontwikkelaars.
2 |
3 | De modules die in deze app getoond worden zijn onafhankelijk van de app. Contacteer de beheerders van de repo voor ondersteuning.
4 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/pt-BR/full_description.txt:
--------------------------------------------------------------------------------
1 | Este aplicativo não é oficialmente suportado pelo Magisk ou seus desenvolvedores.
2 |
3 | Os módulos exibidos neste aplicativo não têm afiliação com o AMM.
4 | Por favor, contate os donos dos respectivos repositórios.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/id/full_description.txt:
--------------------------------------------------------------------------------
1 | Aplikasi ini tidak didukung secara resmi oleh Magisk atau oleh para pengembang Magisk.
2 |
3 | Modul-modul yang ditampilkan dalam aplikasi ini tidak memiliki afiliasi terhadap aplikasi ini. Mohon hubungi
4 | pemilik repo saja.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ro/full_description.txt:
--------------------------------------------------------------------------------
1 | Această aplicație nu este susținută oficial de Magisk sau de dezvoltatorii săi.
2 |
3 | Modulele afișate în această aplicație nu sunt afiliate cu această aplicație. Vă rog să
4 | contactați proprietarii depozitelor în schimb.
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/es/full_description.txt:
--------------------------------------------------------------------------------
1 | Esta aplicación no cuenta con el apoyo oficial de Magisk o sus desarrolladores.
2 |
3 | Los módulos que se muestran en esta aplicación no están afiliados a esta aplicación. Por favor contactar
4 | propietarios de repos en su lugar.
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/full_description.txt:
--------------------------------------------------------------------------------
1 | Diese App wird nicht von Magisk oder seinen Entwicklern unterstützt.
2 |
3 | Die Module, die in dieser App angezeigt werden, werden nicht von den App-Entwicklern verwaltet.
4 | Bitte kontaktieren Sie stattdessen die Repository-Besitzer.
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w1240dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/vi/full_description.txt:
--------------------------------------------------------------------------------
1 | Ứng dụng này không được hỗ trợ chính thức bởi Magisk hoặc các nhà phát triển của Magisk.
2 |
3 | Những mô-đun được hiển thị trong ứng dụng không có bất kỳ liên kết nào đối với ứng dụng này.
4 | Vui lòng liên hệ người sở hữu mô-đun khi có thắc mắc.
5 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/app/src/main/res/values-pt-rPT/strings.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/
5 | .DS_Store
6 | /build
7 | /app/build
8 | /app/default
9 | /app/fdroid
10 | /app/play
11 | /captures
12 | .externalNativeBuild
13 | .cxx
14 | local.properties
15 | sentry.properties
16 | androidacy.properties
17 | app/google-services.json
18 | signing.properties
19 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ko/full_description.txt:
--------------------------------------------------------------------------------
1 | Androidacy 모듈 관리자를 사용하면 Magisk 및 KernelSU용 모듈을 관리할 수 있습니다. Androidacy 모듈 리포지토리에서 모듈을 찾아보고, 검색하고, 다운로드하거나 호환되는 온라인 소스를 비롯한 다른 소스에서 모듈을 설치할 수 있습니다. 또한 모듈을 활성화, 비활성화 및 제거하는 등 설치된 모듈을 관리할 수 있습니다.
2 |
3 | 이 앱은 Magisk, Google 또는 해당 개발자와 어떠한 제휴 관계도 없습니다. 리포지토리는 독립적으로 관리되며, 트위터를 통해서는 이에대한 지원을 받을수 없습니다.
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/NotificationTypeCst.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm
6 |
7 | internal interface NotificationTypeCst
--------------------------------------------------------------------------------
/docs/examples/example_module/module.prop:
--------------------------------------------------------------------------------
1 | id=fox_mmm_example
2 | name=AMM Example Module
3 | version=v1.0
4 | versionCode=1
5 | author=Fox2Code
6 | description=Androidacy Module Manager example module
7 | minApi=21
8 | minMagisk=19000
9 | support=https://github.com/Androidacy/MagiskModuleManager
10 | donate=https://paypal.me/fox2code
11 | config=com.fox2code.mmm
12 |
--------------------------------------------------------------------------------
/docs/examples/rainbow_module/module.prop:
--------------------------------------------------------------------------------
1 | id=fox_mmm_rainbow
2 | name=AMM Rainbow Module
3 | version=v1.0
4 | versionCode=1
5 | author=Fox2Code
6 | description=Androidacy Module Manager rainbow module
7 | minApi=21
8 | minMagisk=19000
9 | support=https://github.com/Androidacy/MagiskModuleManager
10 | donate=https://paypal.me/fox2code
11 | config=com.fox2code.mmm
12 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 |
4 | version: 2
5 | updates:
6 | - package-ecosystem: "gradle" # See documentation for possible values
7 | directory: "/" # Location of package manifests
8 | schedule:
9 | interval: "weekly"
10 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/bools.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | false
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v31/bools.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | true
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/full_backup_content.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_keyboard_arrow_right_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_privacy_tip_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themable.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 | false
8 |
9 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/ar/full_description.txt:
--------------------------------------------------------------------------------
1 | يسمح لك Androidacy مدير إضافات Magisk بإدارة الإضافات ل Magisk و KernelSU. تصفح الإضافات وابحث عنها وقم بتنزيلها من ريبو Androidacy، أو قم بتثبيت الإضافات من أي مصدر آخر ، بما في ذلك المصادر المتوافقة عبر الإنترنت. يمكنك أيضا إدارة الإضافات المثبتة، بما في ذلك تفعيلها وتعطيلها وإلغاء تثبيتها.
2 |
3 | لاحظ أن هذا التطبيق ليس له أي ارتباط مع Magisk أو Google أو أي من مطوريها. تتم إدارة الريبوز بشكل مستقل ولا يمكننا تقديم الدعم لها.
4 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/OverScrollManager.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm
6 |
7 | class OverScrollManager {
8 | interface OverScrollHelper {
9 | val overScrollInsetTop: Int
10 | val overScrollInsetBottom: Int
11 | }
12 | }
--------------------------------------------------------------------------------
/fastlane/metadata/android/pl/full_description.txt:
--------------------------------------------------------------------------------
1 | AMM (Menedżer Modułów Androidacy) umożliwia zarządzanie modułami dla Magisk i KernelSU. Przeglądaj, wyszukuj i pobieraj moduły z repozytorium modułów Androidacy lub instaluj moduły z dowolnego innego źródła, w tym z kompatybilnych źródeł online. Możesz także zarządzać zainstalowanymi modułami, w tym włączać je, wyłączać i odinstalowywać.
2 |
3 | Aplikacja nie jest powiązana z Magisk, Google ani żadnym z ich programistów. Repozytoria są zarządzane niezależnie i nie możemy zapewnić dla nich wsparcia.
4 |
--------------------------------------------------------------------------------
/rundebug:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | #
3 | # Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
4 | #
5 |
6 | # File created to run debug when IDE is failing.
7 | ./gradlew app:assembleDefaultDebug
8 | adb install -r -t -d ./app/build/outputs/apk/default/debug/app-default-debug.apk
9 | if [ "$?" == "0" ]; then
10 | adb shell am start com.fox2code.mmm.debug/com.fox2code.mmm.MainActivity
11 | fi
12 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | Androidacy Module Manager allows you to manage modules for Magisk and KernelSU. Browse, search, and download modules from the Androidacy Module Repository, or install modules from any other source, including compatible online sources. You can also manage your installed modules, including enabling, disabling, and uninstalling them.
2 |
3 | Note that this app has no affiliation with Magisk, Google, or any of their developers. Repositories are independently managed and we cannot provide support for them.
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | 8dp
7 | 8dp
8 | 5dp
9 | 10dp
10 | 20dp
11 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/room/ReposListDatabase.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.room
6 |
7 | import androidx.room.Database
8 | import androidx.room.RoomDatabase
9 |
10 | @Database(entities = [ReposList::class], version = 1)
11 | abstract class ReposListDatabase : RoomDatabase() {
12 | abstract fun reposListDao(): ReposListDao
13 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/FastException.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils
6 |
7 | class FastException private constructor() : RuntimeException() {
8 | @Synchronized
9 | override fun fillInStackTrace(): Throwable {
10 | return this
11 | }
12 |
13 | companion object {
14 | val INSTANCE = FastException()
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/res/font/jetbrainsmono.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_access_time_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/room/ModuleListCacheDatabase.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.room
6 |
7 | import androidx.room.Database
8 | import androidx.room.RoomDatabase
9 |
10 | @Database(entities = [ModuleListCache::class], version = 1)
11 | abstract class ModuleListCacheDatabase : RoomDatabase() {
12 | abstract fun moduleListCacheDao(): ModuleListCacheDao
13 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_people_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/shared_file_paths.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/compat_menu.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_download_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/update_nav.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_warning_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_check_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/XRepo.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm
6 |
7 | import androidx.annotation.Keep
8 |
9 | /**
10 | * Class made to expose some repo functions to xposed modules.
11 | * It will not be obfuscated on release builds
12 | */
13 | @Keep
14 | abstract class XRepo {
15 | @get:Keep
16 | abstract val isEnabledByDefault: Boolean
17 |
18 | @get:Keep
19 | @set:Keep
20 | abstract var isEnabled: Boolean
21 |
22 | @get:Keep
23 | abstract val name: String?
24 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_close_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_baseline_circle_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_delete_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_info_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_arrow_back_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_error_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_keyboard_return_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_patreon.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_storage_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_delete_outline_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_security_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/room/ReposList.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.room
6 |
7 | import androidx.room.Entity
8 |
9 | @Entity(tableName = "ReposList", primaryKeys = ["id"], indices = [androidx.room.Index(value = ["id"], unique = true)])
10 | data class ReposList(
11 | var id: String,
12 | var url: String,
13 | var enabled: Boolean,
14 | var donate: String?,
15 | var support: String?,
16 | var submitModule: String?,
17 | var lastUpdate: Int,
18 | var name: String,
19 | var website: String?
20 | )
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_add_box_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_list_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night-v31/themes.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
14 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/TimberUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils
6 |
7 | import com.fox2code.mmm.BuildConfig
8 | import com.fox2code.mmm.MainApplication.ReleaseTree
9 | import timber.log.Timber
10 | import timber.log.Timber.Forest.plant
11 |
12 | object TimberUtils {
13 |
14 | @JvmStatic
15 | fun configTimber() {
16 | // init timber
17 | // init timber
18 | if (BuildConfig.DEBUG) {
19 | plant(Timber.DebugTree())
20 | } else {
21 | plant(ReleaseTree())
22 | }
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_numbers_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_verified_user_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_vpn_key_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_checkbox.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
9 |
10 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_system_update_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_upload_file_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_reboot_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/preference_material_switch.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/assets/module_installer_test.sh:
--------------------------------------------------------------------------------
1 | #!/sbin/sh
2 | #
3 | # Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
4 | #
5 |
6 | # This script is only used to test debug builds
7 |
8 | umask 022
9 |
10 | API=$(getprop ro.build.version.sdk)
11 | OUTFD=$2
12 | ZIPFILE=$3
13 | MODPATH="${ZIPFILE%/*}"
14 |
15 | ui_print() { echo "$1"; }
16 | abort() {
17 | ui_print "$1"
18 | [ -f $MODPATH/customize.sh ] && rm -f $MODPATH/customize.sh
19 | exit 1
20 | }
21 |
22 | ui_print "! Using rootless installer test script"
23 |
24 | unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2
25 |
26 | [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh
27 |
28 | ui_print "- Done"
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_notifications_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_refresh_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_favorite_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_save_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_system_update_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_cloud_download_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_network_wifi_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_delete_forever_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_sort_by_alpha_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_gitlab.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: "[BUG] REPLACE_ME"
5 | labels: bug, waiting for triage
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Device info(please complete the following information):**
27 | - Device: [e.g. iPhone6]
28 | - OS: [ROM and version, ie Havoc-OS 4.12]
29 | - App Version [e.g. 22]
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_block_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_notification_important_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_lock_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_update_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_xda.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_extension_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/markdown/MarkdownChip.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.markdown
6 |
7 | import androidx.annotation.StringRes
8 | import com.fox2code.mmm.R
9 |
10 | enum class MarkdownChip(
11 | @field:StringRes @param:StringRes val title: Int,
12 | @field:StringRes @param:StringRes val desc: Int
13 | ) {
14 | CHANGE_BOOT(
15 | R.string.module_can_change_boot,
16 | R.string.module_can_change_boot_desc
17 | ),
18 | NEED_RAMDISK(
19 | R.string.module_needs_ramdisk, R.string.module_needs_ramdisk_desc
20 | ),
21 | MIN_MAGISK(R.string.module_min_magisk_chip, 0), MIN_SDK(
22 | R.string.module_min_sdk_chip, 0
23 | ),
24 | MAX_SDK(R.string.module_max_sdk_chip, 0)
25 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_copy_all_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_cloud_off_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_restart_alt_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_hide_source_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_bug_report_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_monetization_on_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_android_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_support_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/setup_bottom_nav.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_monetization_on_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/.github/workflows/dependencies.yml:
--------------------------------------------------------------------------------
1 | name: Dependencies
2 | on:
3 | push:
4 | branches:
5 | - master # run the action on your projects default branch
6 | paths-ignore:
7 | - '**.md'
8 |
9 | jobs:
10 | build:
11 | name: Dependencies
12 | runs-on: ubuntu-latest
13 | permissions: # The Dependency Submission API requires write permission
14 | contents: write
15 | steps:
16 | - name: 'Checkout Repository'
17 | uses: actions/checkout@v3
18 |
19 | - name: Set up JDK 17
20 | uses: actions/setup-java@v3
21 | with:
22 | java-version: 17
23 | distribution: 'temurin'
24 |
25 | - name: Setup Android SDK
26 | uses: android-actions/setup-android@v2
27 |
28 | - name: Setup Gradle
29 | uses: gradle/gradle-build-action@v2
30 |
31 | - name: Change wrapper permissions
32 | run: chmod +x ./gradlew
33 |
34 | - name: Run snapshot action
35 | uses: mikepenz/gradle-dependency-submission@v1
36 | with:
37 | gradle-project-path: "."
38 | gradle-build-module: ":app"
--------------------------------------------------------------------------------
/app/src/main/res/menu/bottom_nav_install.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/docs/examples/example_module/customize.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
5 | #
6 |
7 | if [ -n "$MMM_EXT_SUPPORT" ]; then
8 | ui_print "#!useExt"
9 | mmm_exec() {
10 | ui_print "$(echo "#!$@")"
11 | }
12 | else
13 | mmm_exec() { true; }
14 | abort "! This module need to be executed in Androidacy Module Manager"
15 | exit 1
16 | fi
17 |
18 | ui_print "- Doing stuff"
19 | ui_print "- Current state: LOADING"
20 | mmm_exec showLoading
21 | sleep 4
22 | mmm_exec setLastLine "- Current state: LOADING AGAIN"
23 | sleep 4
24 | mmm_exec setLastLine "- Current state: LOADED"
25 | mmm_exec hideLoading
26 | ui_print "- Doing more stuff"
27 | sleep 4
28 | # You can even set youtube links as support links
29 | # Note: Button only appear once install ended
30 | mmm_exec setSupportLink "https://youtu.be/dQw4w9WgXcQ"
31 | ui_print "- Modules installer can also set custom shortcut"
32 | abort "! Check top right button to see where it goes"
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_paypal_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/bottom_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_palette_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/io/net/HttpException.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.io.net
6 |
7 | import androidx.annotation.Keep
8 | import java.io.IOException
9 |
10 | class HttpException : IOException {
11 | val errorCode: Int
12 |
13 | internal constructor(text: String?, errorCode: Int) : super(text) {
14 | this.errorCode = errorCode
15 | }
16 |
17 | @Keep
18 | constructor(errorCode: Int) : super("Received error code: $errorCode") {
19 | this.errorCode = errorCode
20 | }
21 |
22 | fun shouldTimeout(): Boolean {
23 | return when (errorCode) {
24 | 419, 429, 503 -> true
25 | else -> false
26 | }
27 | }
28 |
29 | companion object {
30 | fun shouldTimeout(exception: Exception?): Boolean {
31 | return exception is HttpException &&
32 | exception.shouldTimeout()
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_telegram_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_design_services_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_github.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | @file:Suppress("UnstableApiUsage")
6 |
7 | plugins {
8 | id("com.gradle.enterprise") version("3.13")
9 | }
10 |
11 | gradleEnterprise {
12 | if (System.getenv("CI") != null) {
13 | buildScan {
14 | publishAlways()
15 | termsOfServiceUrl = "https://gradle.com/terms-of-service"
16 | termsOfServiceAgree = "yes"
17 | }
18 | }
19 | }
20 |
21 | dependencyResolutionManagement {
22 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
23 | repositories {
24 | google()
25 | mavenCentral()
26 | maven {
27 | setUrl("https://jitpack.io")
28 | }
29 | gradlePluginPortal()
30 | }
31 | }
32 |
33 | enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
34 |
35 | // val isCiServer = System.getenv().containsKey("CI")
36 | // Cache build artifacts, so expensive operations do not need to be re-computed
37 | buildCache {
38 | local {
39 | isEnabled = true
40 | }
41 | }
42 |
43 | rootProject.name = "MagiskModuleManager"
44 | include(":app")
45 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_settings_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/gstatic_root_ca:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
3 | A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
4 | b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
5 | MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
6 | YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
7 | aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
8 | jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
9 | xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
10 | 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
11 | snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
12 | U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
13 | 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
14 | BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
15 | AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
16 | yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
17 | 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
18 | AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
19 | DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
20 | HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
21 | -----END CERTIFICATE-----
22 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/androidacy_root_ca:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
3 | A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
4 | b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
5 | MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
6 | YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
7 | aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
8 | jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
9 | xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
10 | 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
11 | snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
12 | U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
13 | 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
14 | BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
15 | AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
16 | yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
17 | 38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
18 | AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
19 | DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
20 | HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
21 | -----END CERTIFICATE-----
22 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/background/BackgroundBootListener.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.background
6 |
7 | import android.content.BroadcastReceiver
8 | import android.content.Context
9 | import android.content.Intent
10 | import com.fox2code.mmm.MainApplication
11 | import com.fox2code.mmm.utils.io.net.Http
12 |
13 | class BackgroundBootListener : BroadcastReceiver() {
14 | override fun onReceive(context: Context, intent: Intent) {
15 | if (BOOT_COMPLETED != intent.action) return
16 | if (!MainApplication.isBackgroundUpdateCheckEnabled) return
17 | if (!Http.hasConnectivity(context)) return
18 | // clear boot shared prefs
19 | MainApplication.bootSharedPreferences!!.edit().clear().apply()
20 | synchronized(BackgroundUpdateChecker.lock) {
21 | Thread {
22 | BackgroundUpdateChecker.onMainActivityCreate(context)
23 | BackgroundUpdateChecker.doCheck(context)
24 | }.start()
25 | }
26 | }
27 |
28 | companion object {
29 | private const val BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"
30 | }
31 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | ## For more details on how to configure your build environment visit
2 | # http://www.gradle.org/docs/current/userguide/build_environment.html
3 | #
4 | # Specifies the JVM arguments used for the daemon process.
5 | # The setting is particularly useful for tweaking memory settings.
6 | # Default value: -Xmx1024m -XX:MaxPermSize=256m
7 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
8 | #
9 | # When configured, Gradle will run in incubating parallel mode.
10 | # This option should only be used with decoupled projects. More details, visit
11 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
12 | # org.gradle.parallel=true
13 | #Tue Jul 18 21:42:11 EDT 2023
14 | #android.defaults.buildfeatures.buildconfig=true
15 | android.enableJetifier=false
16 | android.enableR8.fullMode=true
17 | android.useAndroidX=true
18 | org.gradle.caching=true
19 | org.gradle.configuration-cache=false # temporarily disabled due to https://github.com/getsentry/sentry-android-gradle-plugin/issues/554
20 | org.gradle.configuration-cache.problems=warn
21 | org.gradle.jvmargs=-Xmx1536M -Dorg.gradle.android.cache-fix.ignoreVersionCheck\=true -Dkotlin.daemon.jvm.options\="-Xmx1536M" -Dfile.encoding\=UTF-8 -XX\:+UseParallelGC -XX\:ReservedCodeCacheSize\=768m
22 | org.gradle.parallel=true
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_language_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/credits_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
14 |
20 |
21 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/sentry_io_root_ca:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
3 | MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4 | d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
5 | QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
6 | MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
7 | b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
8 | 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
9 | CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
10 | nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
11 | 43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
12 | T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
13 | gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
14 | BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
15 | TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
16 | DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
17 | hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
18 | 06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
19 | PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
20 | YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
21 | CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
22 | -----END CERTIFICATE-----
23 |
--------------------------------------------------------------------------------
/app/src/main/assets/module_installer_wrapper.sh:
--------------------------------------------------------------------------------
1 | #!/sbin/sh
2 |
3 | #
4 | # Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
5 | #
6 |
7 | # echo before loading util_functions
8 | ui_print() { echo "$1"; }
9 |
10 | OUTFD=$2
11 | ZIPFILE=$3
12 | TMPDIR=/dev/tmp
13 |
14 | # Prevent setenforce because it can causes issues on some devices
15 | setenforce() { true; }
16 | # prevent old modules from disabling hidden_apis, please use LSPosed library instead.
17 | # See: https://github.com/LSPosed/AndroidHiddenApiBypass
18 | settings() {
19 | if [ "$1" == "put" ] && [ "$2" == "global" ] && ([ "$3" == "hidden_api_policy" ] || \
20 | [ "$3" == "hidden_api_policy_p_apps" ] || [ "$3" == "hidden_api_policy_pre_p_apps" ]); then
21 | true
22 | else
23 | "$(which settings)" "$@"
24 | fi
25 | }
26 |
27 | rm -rf $TMPDIR 2>/dev/null
28 | mkdir -p $TMPDIR
29 | chcon u:object_r:system_file:s0 $TMPDIR || true
30 | cd $TMPDIR
31 |
32 | abort() {
33 | ui_print "$1"
34 | rm -rf $TMPDIR
35 | exit 1
36 | }
37 |
38 | unzip -o "$ZIPFILE" "META-INF/com/google/android/update-binary" -d $TMPDIR >&2
39 | [ ! -f "$TMPDIR/META-INF/com/google/android/update-binary" ] && abort "! Unable to extract zip file!"
40 |
41 | . "$TMPDIR/META-INF/com/google/android/update-binary"
42 |
43 | rm -rf $TMPDIR
44 | exit 0
45 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/ProcessHelper.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 | package com.fox2code.mmm.utils
5 |
6 | import android.app.AlarmManager
7 | import android.app.PendingIntent
8 | import android.content.Context
9 | import android.content.Intent
10 | import com.fox2code.mmm.MainActivity
11 | import java.util.concurrent.ThreadLocalRandom
12 | import kotlin.system.exitProcess
13 |
14 | enum class ProcessHelper {
15 | ;
16 |
17 | companion object {
18 | private val sPendingIntentId = ThreadLocalRandom.current().nextInt(100, 1000000 + 1)
19 | fun restartApplicationProcess(context: Context) {
20 | val mStartActivity = Intent(context, MainActivity::class.java)
21 | mStartActivity.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
22 | val mPendingIntent = PendingIntent.getActivity(
23 | context, sPendingIntentId,
24 | mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
25 | )
26 | val mgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
27 | mgr[AlarmManager.RTC, System.currentTimeMillis() + 100] = mPendingIntent
28 | exitProcess(0) // Exit app process
29 | }
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_discord_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/gh_main_crt:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIID0zCCArugAwIBAgIQVmcdBOpPmUxvEIFHWdJ1lDANBgkqhkiG9w0BAQwFADB7
3 | MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYD
4 | VQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UE
5 | AwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTE5MDMxMjAwMDAwMFoXDTI4
6 | MTIzMTIzNTk1OVowgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpOZXcgSmVyc2V5
7 | MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBO
8 | ZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgRUNDIENlcnRpZmljYXRpb24gQXV0
9 | aG9yaXR5MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGqxUWqn5aCPnetUkb1PGWthL
10 | q8bVttHmc3Gu3ZzWDGH926CJA7gFFOxXzu5dP+Ihs8731Ip54KODfi2X0GHE8Znc
11 | JZFjq38wo7Rw4sehM5zzvy5cU7Ffs30yf4o043l5o4HyMIHvMB8GA1UdIwQYMBaA
12 | FKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1
13 | xmNjmjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zARBgNVHSAECjAI
14 | MAYGBFUdIAAwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5j
15 | b20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEEKDAmMCQG
16 | CCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZIhvcNAQEM
17 | BQADggEBABns652JLCALBIAdGN5CmXKZFjK9Dpx1WywV4ilAbe7/ctvbq5AfjJXy
18 | ij0IckKJUAfiORVsAYfZFhr1wHUrxeZWEQff2Ji8fJ8ZOd+LygBkc7xGEJuTI42+
19 | FsMuCIKchjN0djsoTI0DQoWz4rIjQtUfenVqGtF8qmchxDM6OW1TyaLtYiKou+JV
20 | bJlsQ2uRl9EMC5MCHdK8aXdJ5htN978UeAOwproLtOGFfy/cQjutdAFI3tZs4RmY
21 | CV4Ks2dH/hzg1cEo70qLRDEmBDeNiXQ2Lu+lIg+DdEmSx/cQwgwp+7e9un/jX9Wf
22 | 8qn0dNW44bOwgeThpWOjzOoEeJBuv/c=
23 | -----END CERTIFICATE-----
24 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/ExpiredActivity.kt:
--------------------------------------------------------------------------------
1 | package com.fox2code.mmm
2 |
3 | import android.annotation.SuppressLint
4 | import android.content.Intent
5 | import android.net.Uri
6 | import android.os.Bundle
7 | import androidx.appcompat.app.AppCompatActivity
8 | import com.google.android.material.button.MaterialButton
9 |
10 | class ExpiredActivity : AppCompatActivity() {
11 | @SuppressLint("RestrictedApi")
12 | override fun onCreate(savedInstanceState: Bundle?) {
13 | super.onCreate(savedInstanceState)
14 | setContentView(R.layout.activity_expired)
15 | // download_button leads to the download page and uninstall_button leads to the uninstall dialog
16 | val downloadBtn = findViewById(R.id.download_button)
17 | val uninstallBtn = findViewById(R.id.uninstall_button)
18 | downloadBtn.setOnClickListener {
19 | // open https://www.androidacy.com/downloads/?view=FoxMMM
20 | startActivity(
21 | Intent(
22 | Intent.ACTION_VIEW,
23 | Uri.parse("https://www.androidacy.com/downloads/?view=FoxMMM")
24 | )
25 | )
26 | }
27 | uninstallBtn.setOnClickListener {
28 | // open system uninstall dialog
29 | val intent = Intent(Intent.ACTION_DELETE)
30 | // discover our package name
31 | intent.data = Uri.parse("package:$packageName")
32 | startActivity(intent)
33 | }
34 | }
35 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/custom_repo_input.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
22 |
23 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_app_settings_alt_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | #70000000
7 | #70FFFFFF
8 | #00000000
9 | #FF000000
10 | #FFFFFFFF
11 | @color/transparent
12 | @color/white_transparent
13 |
14 | #FF9B08
15 | @android:color/white
16 |
17 | #FF202020
18 | #FF111111
19 | #FFFFFFFF
20 | #FFFFFFFF
21 | #3A3A3A
22 | #424242
23 | #2196F3
24 | #2196F3
25 | #1976D2
26 | #3F51B5
27 | #3F51B5
28 | #303F9F
29 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/settings_activity.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
12 |
20 |
21 |
32 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/module/ModuleSorter.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.module
6 |
7 | import androidx.annotation.DrawableRes
8 | import com.fox2code.mmm.R
9 |
10 | enum class ModuleSorter(@field:DrawableRes @JvmField val icon: Int) : Comparator {
11 | UPDATE(R.drawable.ic_baseline_update_24) {
12 | override operator fun next(): ModuleSorter {
13 | return ALPHA
14 | }
15 | },
16 | ALPHA(R.drawable.ic_baseline_sort_by_alpha_24) {
17 | override fun compare(holder1: ModuleHolder, holder2: ModuleHolder): Int {
18 | val type1 = holder1.type
19 | val type2 = holder2.type
20 | if (type1 === type2 && type1 === ModuleHolder.Type.INSTALLABLE) {
21 | var compare = holder1.filterLevel.compareTo(holder2.filterLevel)
22 | if (compare != 0) return compare
23 | compare = holder1.mainModuleNameLowercase
24 | .compareTo(holder2.mainModuleNameLowercase)
25 | if (compare != 0) return compare
26 | }
27 | return super.compare(holder1, holder2)
28 | }
29 |
30 | override operator fun next(): ModuleSorter {
31 | return UPDATE
32 | }
33 | };
34 |
35 | override fun compare(holder1: ModuleHolder, holder2: ModuleHolder): Int {
36 | return holder1.compareTo(holder2)
37 | }
38 |
39 | abstract operator fun next(): ModuleSorter?
40 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_foreground.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
10 |
11 |
16 |
20 |
21 |
26 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/gh_root_ca:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIEyDCCA7CgAwIBAgIQDPW9BitWAvR6uFAsI8zwZjANBgkqhkiG9w0BAQsFADBh
3 | MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4 | d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
5 | MjAeFw0yMTAzMzAwMDAwMDBaFw0zMTAzMjkyMzU5NTlaMFkxCzAJBgNVBAYTAlVT
6 | MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMzAxBgNVBAMTKkRpZ2lDZXJ0IEdsb2Jh
7 | bCBHMiBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTCCASIwDQYJKoZIhvcNAQEBBQAD
8 | ggEPADCCAQoCggEBAMz3EGJPprtjb+2QUlbFbSd7ehJWivH0+dbn4Y+9lavyYEEV
9 | cNsSAPonCrVXOFt9slGTcZUOakGUWzUb+nv6u8W+JDD+Vu/E832X4xT1FE3LpxDy
10 | FuqrIvAxIhFhaZAmunjZlx/jfWardUSVc8is/+9dCopZQ+GssjoP80j812s3wWPc
11 | 3kbW20X+fSP9kOhRBx5Ro1/tSUZUfyyIxfQTnJcVPAPooTncaQwywa8WV0yUR0J8
12 | osicfebUTVSvQpmowQTCd5zWSOTOEeAqgJnwQ3DPP3Zr0UxJqyRewg2C/Uaoq2yT
13 | zGJSQnWS+Jr6Xl6ysGHlHx+5fwmY6D36g39HaaECAwEAAaOCAYIwggF+MBIGA1Ud
14 | EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHSFgMBmx9833s+9KTeqAx2+7c0XMB8G
15 | A1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA4GA1UdDwEB/wQEAwIBhjAd
16 | BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdgYIKwYBBQUHAQEEajBoMCQG
17 | CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQAYIKwYBBQUHMAKG
18 | NGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RH
19 | Mi5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29t
20 | L0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDA9BgNVHSAENjA0MAsGCWCGSAGG/WwC
21 | ATAHBgVngQwBATAIBgZngQwBAgEwCAYGZ4EMAQICMAgGBmeBDAECAzANBgkqhkiG
22 | 9w0BAQsFAAOCAQEAkPFwyyiXaZd8dP3A+iZ7U6utzWX9upwGnIrXWkOH7U1MVl+t
23 | wcW1BSAuWdH/SvWgKtiwla3JLko716f2b4gp/DA/JIS7w7d7kwcsr4drdjPtAFVS
24 | slme5LnQ89/nD/7d+MS5EHKBCQRfz5eeLjJ1js+aWNJXMX43AYGyZm0pGrFmCW3R
25 | bpD0ufovARTFXFZkAdl9h6g4U5+LXUZtXMYnhIHUfoyMo5tS58aI7Dd8KvvwVVo4
26 | chDYABPPTHPbqjc1qCmBaZx2vN4Ye5DUys/vZwP9BFohFrH/6j/f3IL16/RZkiMN
27 | JCqVJUzKoZHm1Lesh3Sz8W2jmdv51b2EQJ8HmA==
28 | -----END CERTIFICATE-----
29 |
--------------------------------------------------------------------------------
/app/src/main/assets/anykernel3_installer.sh:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (c) 2019-2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | #
4 |
5 | if [ -z "$AK3TMPFS" ]; then
6 | echo "AK3TMPFS is not defined? Are you running FoxMMM?"
7 | exit 1
8 | fi
9 |
10 | if [ ! -e "$AK3TMPFS" ]; then
11 | mkdir $AK3TMPFS
12 | chmod 755 $AK3TMPFS
13 | fi
14 |
15 | ZIPFILE=$3;
16 |
17 | # Mount tmpfs early
18 | mount -t tmpfs -o size=400M,noatime tmpfs $AK3TMPFS;
19 | mount | grep -q " $AK3TMPFS " || exit 1;
20 |
21 | unzip -p $Z tools*/busybox > $AK3TMPFS/busybox;
22 | unzip -p $Z META-INF/com/google/android/update-binary > $AK3TMPFS/update-binary;
23 | ##
24 |
25 | chmod 755 $AK3TMPFS/busybox;
26 | $AK3TMPFS/busybox chmod 755 $AK3TMPFS/update-binary;
27 | $AK3TMPFS/busybox chown root:root $AK3TMPFS/busybox $AK3TMPFS/update-binary;
28 |
29 | # work around Android passing the app what is actually a non-absolute path
30 | AK3TMPFS=$($AK3TMPFS/busybox readlink -f $AK3TMPFS);
31 |
32 | # AK3 allows the zip to be flashed from anywhere so avoids any need to remount /
33 | if $AK3TMPFS/busybox grep -q AnyKernel3 $AK3TMPFS/update-binary; then
34 | # work around more restrictive upstream SELinux policies for Magisk <19306
35 | magiskpolicy --live "allow kernel app_data_file file write" || true;
36 | else
37 | echo "Module is not an AnyKernel3 module!"
38 | exit 1
39 | fi;
40 |
41 | # update-binary
42 | ASH_STANDALONE=1 AKHOME=$AK3TMPFS/anykernel $AK3TMPFS/busybox ash $AK3TMPFS/update-binary 3 1 "$Z";
43 | RC=$?;
44 |
45 | # Original script delete all generated files,
46 | # But we just need to unmount as we store everything inside tmpfs
47 | umount $AK3TMPFS;
48 |
49 | return $RC;
--------------------------------------------------------------------------------
/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 | - system
10 | - dark
11 | - black
12 | - transparent_light
13 |
14 | - light
15 |
16 |
17 |
18 | - @string/theme_system
19 | - @string/theme_dark
20 | - @string/theme_black
21 |
22 | - @string/theme_transparent_light
23 | - @string/theme_light
24 |
25 |
26 |
27 | - @string/update_frequency_15
28 | - @string/update_frequency_30
29 | - @string/update_frequency_60
30 | - @string/update_frequency_360
31 | - @string/update_frequency_720
32 | - @string/update_frequency_1440
33 |
34 |
35 | - 15
36 | - 30
37 | - 60
38 | - 360
39 | - 720
40 | - 1440
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/webview.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
10 |
11 |
19 |
20 |
25 |
26 |
27 |
28 |
29 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/app_info_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
12 |
17 |
22 |
27 |
32 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 | androidacy.com
8 |
9 |
10 |
11 |
12 |
13 | github.com
14 |
15 |
16 |
17 |
18 |
19 | githubusercontent.com
20 |
21 |
22 |
23 |
24 |
25 | gstatic.com
26 |
27 |
28 |
29 |
30 |
31 | ingest.sentry.io
32 |
33 |
34 |
35 |
36 |
37 | sentry.io
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/privacy_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
28 |
29 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/sentry_root_ca:
--------------------------------------------------------------------------------
1 | -----BEGIN CERTIFICATE-----
2 | MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3 | TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4 | cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5 | WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6 | ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7 | MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8 | h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9 | 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10 | A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11 | T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12 | B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13 | B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14 | KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15 | OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16 | jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17 | qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18 | rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19 | HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20 | hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21 | ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22 | 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23 | NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24 | ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25 | TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26 | jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27 | oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28 | 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29 | mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30 | emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31 | -----END CERTIFICATE-----
32 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/settings/LongClickablePreference.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.settings
6 |
7 | import android.content.Context
8 | import android.util.AttributeSet
9 | import android.view.View
10 | import androidx.preference.Preference
11 | import androidx.preference.PreferenceViewHolder
12 |
13 | class LongClickablePreference : Preference {
14 | var onPreferenceLongClickListener: OnPreferenceLongClickListener? = null
15 |
16 | constructor(
17 | context: Context,
18 | attrs: AttributeSet?,
19 | defStyleAttr: Int,
20 | defStyleRes: Int
21 | ) : super(context, attrs, defStyleAttr, defStyleRes)
22 |
23 | constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
24 | context,
25 | attrs,
26 | defStyleAttr
27 | )
28 |
29 | constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
30 | constructor(context: Context) : super(context)
31 |
32 | override fun onBindViewHolder(holder: PreferenceViewHolder) {
33 | super.onBindViewHolder(holder)
34 | holder.itemView.setOnLongClickListener { _: View? -> performLongClick() }
35 | }
36 |
37 | private fun performLongClick(): Boolean {
38 | if (!this.isEnabled || !this.isSelectable) {
39 | return false
40 | }
41 | return if (onPreferenceLongClickListener != null) {
42 | onPreferenceLongClickListener!!.onPreferenceLongClick(this)
43 | } else false
44 | }
45 |
46 | fun interface OnPreferenceLongClickListener {
47 | /**
48 | * Called when a preference has been clicked.
49 | *
50 | * @param preference The preference that was clicked
51 | * @return `true` if the click was handled
52 | */
53 | fun onPreferenceLongClick(preference: Preference): Boolean
54 | }
55 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/repo/CustomRepoData.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 | package com.fox2code.mmm.repo
5 |
6 | import com.fox2code.mmm.utils.io.net.Http.Companion.doHttpGet
7 | import org.json.JSONException
8 | import org.json.JSONObject
9 | import java.io.File
10 | import java.io.IOException
11 | import java.nio.charset.StandardCharsets
12 |
13 | class CustomRepoData internal constructor(url: String?, cacheRoot: File?) : RepoData(
14 | url!!, cacheRoot!!
15 | ) {
16 | var loadedExternal = false
17 |
18 | var override: String? = null
19 | override val isEnabledByDefault: Boolean
20 | get() = override != null || loadedExternal
21 |
22 | @Throws(IOException::class, JSONException::class)
23 | fun quickPrePopulate() {
24 | val jsonObject = JSONObject(
25 | String(
26 | doHttpGet(
27 | url,
28 | false
29 | ), StandardCharsets.UTF_8
30 | )
31 | )
32 | // make sure there's at least a name and a modules or data object
33 | require(!(!jsonObject.has("name") || !jsonObject.has("modules") && !jsonObject.has("data"))) { "Invalid repo: $url" }
34 | name = jsonObject.getString("name").trim { it <= ' ' }
35 | website = jsonObject.optString("website")
36 | support = jsonObject.optString("support")
37 | donate = jsonObject.optString("donate")
38 | submitModule = jsonObject.optString("submitModule")
39 | }
40 |
41 | fun toJSON(): Any? {
42 | return try {
43 | JSONObject()
44 | .put("id", preferenceId)
45 | .put("name", name)
46 | .put("website", website)
47 | .put("support", support)
48 | .put("donate", donate)
49 | .put("submitModule", submitModule)
50 | } catch (ignored: JSONException) {
51 | null
52 | }
53 | }
54 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/room/ModuleListCache.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.room
6 |
7 | import androidx.room.Entity
8 |
9 | @Entity(tableName = "modulelistcache", primaryKeys = ["codename"], indices = [androidx.room.Index(value = ["codename"], unique = true)])
10 | class ModuleListCache (
11 | var codename: String,
12 | var version: String,
13 | var versionCode: Int,
14 | var author: String,
15 | var description: String,
16 | var minApi: Int,
17 | var maxApi: Int,
18 | var minMagisk: Int,
19 | var needRamdisk: Boolean,
20 | var support: String,
21 | var donate: String,
22 | var config: String,
23 | var changeBoot: Boolean,
24 | var mmtReborn: Boolean,
25 | var repoId: String,
26 | var lastUpdate: Long,
27 | var name: String,
28 | var safe: Boolean,
29 | var stats: Int
30 | ) {
31 | // functions:
32 | // getAll(): List
33 | // getByCodename(codename: String): ModuleListCache
34 | // insert(moduleListCache: ModuleListCache)
35 | // update(moduleListCache: ModuleListCache)
36 | // delete(moduleListCache: ModuleListCache)
37 | // deleteAll()
38 | // count(): Int
39 |
40 | // get fun
41 | // getVersion(codename: String): String
42 | // getVersionCode(codename: String): Int
43 | // getAuthor(codename: String): String
44 | // getDescription(codename: String): String
45 | // getMinApi(codename: String): Int
46 | // getMaxApi(codename: String): Int
47 | // getMinMagisk(codename: String): Int
48 | // getNeedRamdisk(codename: String): Boolean
49 | // getSupport(codename: String): String
50 | // getDonate(codename: String): String
51 | // getConfig(codename: String): String
52 | // getChangeBoot(codename: String): Boolean
53 | // getMmtReborn(codename: String): Boolean
54 | // getRepoId(codename: String): String
55 | // getLastUpdate(codename: String): Long
56 | }
--------------------------------------------------------------------------------
/app/src/main/res/xml/security_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
15 |
16 |
17 |
18 |
26 |
27 |
35 |
36 |
37 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/installer_wrap.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
12 |
25 |
26 |
34 |
35 |
42 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/io/FileUtils.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.utils.io
6 |
7 | import android.content.Context
8 | import com.fox2code.mmm.MainApplication
9 | import org.apache.commons.io.FileUtils
10 | import org.chromium.net.CronetEngine
11 | import timber.log.Timber
12 | import java.io.File
13 | import java.io.IOException
14 | import java.net.URL
15 |
16 | class FileUtils {
17 | private var urlFactoryInstalled = false
18 |
19 | fun ensureCacheDirs() {
20 | try {
21 | FileUtils.forceMkdir(
22 | File(
23 | (MainApplication.getInstance().dataDir.toString() + "/cache/WebView/Default/HTTP Cache/Code Cache/wasm").replace(
24 | "//".toRegex(),
25 | "/"
26 | )
27 | )
28 | )
29 | FileUtils.forceMkdir(
30 | File(
31 | (MainApplication.getInstance().dataDir.toString() + "/cache/WebView/Default/HTTP Cache/Code Cache/js").replace(
32 | "//".toRegex(),
33 | "/"
34 | )
35 | )
36 | )
37 | FileUtils.forceMkdir(
38 | File(
39 | (MainApplication.getInstance().dataDir.toString() + "/cache/cronet").replace(
40 | "//".toRegex(),
41 | "/"
42 | )
43 | )
44 | )
45 | } catch (e: IOException) {
46 | Timber.e("Could not create cache dirs")
47 | }
48 | }
49 |
50 | fun ensureURLHandler(context: Context?) {
51 | if (!urlFactoryInstalled) {
52 | try {
53 | URL.setURLStreamHandlerFactory(
54 | CronetEngine.Builder(context).build().createURLStreamHandlerFactory()
55 | )
56 | urlFactoryInstalled = true
57 | } catch (ignored: Error) {
58 | // Ignore
59 | }
60 | }
61 | }
62 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_blur_on_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/docs/examples/rainbow_module/customize.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
5 | #
6 |
7 | if [ ! "$ANSI_SUPPORT" == "true" ] || [ ! -n "$MMM_EXT_SUPPORT" ]; then
8 | abort "! This module need to be executed in Androidacy Module Manager with ANSI support"
9 | exit 1
10 | fi
11 |
12 | ui_print "#!useExt"
13 | mmm_exec() {
14 | ui_print "$(echo -e "#!$@")"
15 | }
16 |
17 | ESC=""
18 | # ESC="\e"
19 | RED="$ESC[91m"
20 | ORANGE="$ESC[33m"
21 | YELLOW="$ESC[93m"
22 | GREEN="$ESC[92m"
23 | CYAN="$ESC[96m"
24 | BLUE="$ESC[94m"
25 | PURPLE="$ESC[95m"
26 | RESET="$ESC[0m"
27 |
28 | ui_replace() {
29 | mmm_exec setLastLine "$1"
30 | }
31 |
32 | ui_print "${RED}R${ORANGE}A${YELLOW}I${GREEN}N${CYAN}B${BLUE}O${PURPLE}W${RESET}"
33 | mmm_exec showLoading
34 | sleep 1
35 | ui_replace "${PURPLE}R${RED}A${ORANGE}I${YELLOW}N${GREEN}B${CYAN}O${BLUE}W${RESET}"
36 | sleep 1
37 | ui_replace "${BLUE}R${PURPLE}A${RED}I${ORANGE}N${YELLOW}B${GREEN}O${CYAN}W${RESET}"
38 | sleep 1
39 | ui_replace "${CYAN}R${BLUE}A${PURPLE}I${RED}N${ORANGE}B${YELLOW}O${GREEN}W${RESET}"
40 | sleep 1
41 | ui_replace "${GREEN}R${CYAN}A${BLUE}I${PURPLE}N${RED}B${ORANGE}O${YELLOW}W${RESET}"
42 | sleep 1
43 | ui_replace "${YELLOW}R${GREEN}A${CYAN}I${BLUE}N${PURPLE}B${RED}O${ORANGE}W${RESET}"
44 | sleep 1
45 | ui_replace "${ORANGE}R${YELLOW}A${GREEN}I${CYAN}N${BLUE}B${PURPLE}O${RED}W${RESET}"
46 | sleep 1
47 | ui_replace "${RED}R${ORANGE}A${YELLOW}I${GREEN}N${CYAN}B${BLUE}O${PURPLE}W${RESET}"
48 | sleep 1
49 | ui_replace "${PURPLE}R${RED}A${ORANGE}I${YELLOW}N${GREEN}B${CYAN}O${BLUE}W${RESET}"
50 | sleep 1
51 | ui_replace "${BLUE}R${PURPLE}A${RED}I${ORANGE}N${YELLOW}B${GREEN}O${CYAN}W${RESET}"
52 | sleep 1
53 | ui_replace "${CYAN}R${BLUE}A${PURPLE}I${RED}N${ORANGE}B${YELLOW}O${GREEN}W${RESET}"
54 | sleep 1
55 | ui_replace "${GREEN}R${CYAN}A${BLUE}I${PURPLE}N${RED}B${ORANGE}O${YELLOW}W${RESET}"
56 | sleep 1
57 | ui_replace "${YELLOW}R${GREEN}A${CYAN}I${BLUE}N${PURPLE}B${RED}O${ORANGE}W${RESET}"
58 | sleep 1
59 | ui_replace "${ORANGE}R${YELLOW}A${GREEN}I${CYAN}N${BLUE}B${PURPLE}O${RED}W${RESET}"
60 | sleep 1
61 | ui_replace "${RED}R${ORANGE}A${YELLOW}I${GREEN}N${CYAN}B${BLUE}O${PURPLE}W${RESET}"
62 | mmm_exec hideLoading
63 |
64 | abort "! Rainbow module is not installable :3"
65 |
66 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/repo/RepoModule.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.repo
6 |
7 | import androidx.annotation.StringRes
8 | import com.fox2code.mmm.MainApplication
9 | import com.fox2code.mmm.manager.ModuleInfo
10 |
11 | class RepoModule {
12 | val repoData: RepoData
13 |
14 | val moduleInfo: ModuleInfo
15 |
16 | val id: String
17 |
18 | var repoName: String? = null
19 |
20 | var lastUpdated: Long = 0
21 |
22 | var propUrl: String? = null
23 |
24 | var zipUrl: String? = null
25 |
26 | var notesUrl: String? = null
27 |
28 | var checksum: String? = null
29 |
30 | var processed = false
31 |
32 | @StringRes
33 | var qualityText = 0
34 |
35 | var qualityValue = 0
36 | var safe: Boolean
37 |
38 | constructor(repoData: RepoData, id: String) {
39 | this.repoData = repoData
40 | moduleInfo = ModuleInfo(id)
41 | this.id = id
42 | moduleInfo.flags = moduleInfo.flags or ModuleInfo.FLAG_METADATA_INVALID
43 | safe = moduleInfo.safe
44 | }
45 |
46 | // allows all fields to be set-
47 | constructor(
48 | repoData: RepoData,
49 | id: String,
50 | name: String?,
51 | description: String?,
52 | author: String?,
53 | donate: String?,
54 | config: String?,
55 | support: String?,
56 | version: String?,
57 | versionCode: Int
58 | ) {
59 | this.repoData = repoData
60 | moduleInfo = ModuleInfo(id)
61 | this.id = id
62 | moduleInfo.name = name
63 | moduleInfo.description = description
64 | moduleInfo.author = author
65 | moduleInfo.donate = donate
66 | moduleInfo.config = config
67 | moduleInfo.support = support
68 | moduleInfo.version = version
69 | moduleInfo.versionCode = versionCode.toLong()
70 | moduleInfo.flags = moduleInfo.flags or ModuleInfo.FLAG_METADATA_INVALID and ModuleInfo.FLAG_MM_REMOTE_MODULE
71 | safe = moduleInfo.safe
72 | // if mainapplication.repomodules has this module, set the flag for remote module
73 | if (MainApplication.getInstance().repoModules.containsKey(id)) {
74 | moduleInfo.flags = moduleInfo.flags or ModuleInfo.FLAG_MM_REMOTE_MODULE
75 | }
76 | }
77 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/installer.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
11 |
12 |
23 |
24 |
32 |
33 |
34 |
42 |
43 |
50 |
51 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/io/GMSProviderInstaller.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021-2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 | package com.fox2code.mmm.utils.io
5 |
6 | import android.content.Context
7 | import android.content.pm.PackageManager
8 | import com.fox2code.mmm.MainApplication
9 | import timber.log.Timber
10 |
11 | /**
12 | * Open implementation of ProviderInstaller.installIfNeeded
13 | * (Compatible with MicroG even without signature spoofing)
14 | */
15 | // Note: This code is MIT because I took it from another unpublished project I had
16 | // I might upstream this to MicroG at some point
17 | enum class GMSProviderInstaller {
18 | ;
19 |
20 | companion object {
21 | private var called = false
22 |
23 | fun installIfNeeded(context: Context?) {
24 | if (context == null) {
25 | throw NullPointerException("Context must not be null")
26 | }
27 | if (called) return
28 | called = true
29 | try {
30 | // Trust default GMS implementation
31 | val remote = context.createPackageContext(
32 | "com.google.android.gms",
33 | Context.CONTEXT_INCLUDE_CODE or Context.CONTEXT_IGNORE_SECURITY
34 | )
35 | val cl =
36 | remote.classLoader.loadClass("com.google.android.gms.common.security.ProviderInstallerImpl")
37 | cl.getDeclaredMethod("insertProvider", Context::class.java).invoke(null, remote)
38 | if (MainApplication.forceDebugLogging) Timber.i("Installed GMS security providers!")
39 | // next, try cronet provider
40 | val cronet = context.createPackageContext(
41 | "com.google.android.gms",
42 | Context.CONTEXT_INCLUDE_CODE or Context.CONTEXT_IGNORE_SECURITY
43 | )
44 | val cronetCl =
45 | cronet.classLoader.loadClass("com.google.android.gms.common.security.ProviderInstallerImpl")
46 | cronetCl.getDeclaredMethod("insertProvider", Context::class.java).invoke(null, cronet)
47 | } catch (e: PackageManager.NameNotFoundException) {
48 | Timber.w("No GMS Implementation are installed on this device")
49 | } catch (e: Exception) {
50 | Timber.w(e)
51 | }
52 | }
53 | }
54 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/Constants.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm
6 |
7 | @Suppress("unused")
8 | enum class Constants {
9 | ;
10 |
11 | companion object {
12 | const val EXTRA_DOWNLOAD_TITLE: String = "Download"
13 | const val MAGISK_VER_CODE_FLAT_MODULES = 19000
14 | const val MAGISK_VER_CODE_UTIL_INSTALL = 20400
15 | const val MAGISK_VER_CODE_PATH_SUPPORT = 21000
16 | const val MAGISK_VER_CODE_INSTALL_COMMAND = 21200
17 | const val MAGISK_VER_CODE_MAGISK_ZYGOTE = 24000
18 | const val INTENT_INSTALL_INTERNAL =
19 | BuildConfig.APPLICATION_ID + ".intent.action.INSTALL_MODULE_INTERNAL"
20 | const val INTENT_ANDROIDACY_INTERNAL =
21 | BuildConfig.APPLICATION_ID + ".intent.action.OPEN_ANDROIDACY_INTERNAL"
22 | const val EXTRA_INSTALL_PATH = "extra_install_path"
23 | const val EXTRA_INSTALL_NAME = "extra_install_name"
24 | const val EXTRA_INSTALL_CONFIG = "extra_install_config"
25 | const val EXTRA_INSTALL_CHECKSUM = "extra_install_checksum"
26 | const val EXTRA_INSTALL_MMT_REBORN = "extra_install_mmt_reborn"
27 | const val EXTRA_INSTALL_NO_EXTENSIONS = "extra_install_no_extensions"
28 | const val EXTRA_INSTALL_TEST_ROOTLESS = "extra_install_test_rootless"
29 | const val EXTRA_ANDROIDACY_COMPAT_LEVEL = "extra_androidacy_compat_level"
30 | const val EXTRA_ANDROIDACY_ALLOW_INSTALL = "extra_androidacy_allow_install"
31 | const val EXTRA_ANDROIDACY_ACTIONBAR_TITLE = "extra_androidacy_actionbar_title"
32 | const val EXTRA_ANDROIDACY_ACTIONBAR_CONFIG = "extra_androidacy_actionbar_config"
33 | const val EXTRA_MARKDOWN_URL = "extra_markdown_url"
34 | const val EXTRA_MARKDOWN_TITLE = "extra_markdown_title"
35 | const val EXTRA_MARKDOWN_CONFIG = "extra_markdown_config"
36 | const val EXTRA_MARKDOWN_CHANGE_BOOT = "extra_markdown_change_boot"
37 | const val EXTRA_MARKDOWN_NEEDS_RAMDISK = "extra_markdown_needs_ramdisk"
38 | const val EXTRA_MARKDOWN_MIN_MAGISK = "extra_markdown_min_magisk"
39 | const val EXTRA_MARKDOWN_MIN_API = "extra_markdown_min_api"
40 | const val EXTRA_MARKDOWN_MAX_API = "extra_markdown_max_api"
41 | const val EXTRA_FADE_OUT = "extra_fade_out"
42 | const val EXTRA_FROM_MANAGER = "extra_from_manager"
43 | }
44 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/markdown/MarkdownUrlLinker.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.markdown
6 |
7 | import com.fox2code.mmm.MainApplication
8 | import timber.log.Timber
9 |
10 | enum class MarkdownUrlLinker {
11 | ;
12 |
13 | private class LinkifyTask(val start: Int, val end: Int) {
14 | companion object {
15 | val NULL = LinkifyTask(0, 0)
16 | }
17 | }
18 |
19 | companion object {
20 | fun urlLinkify(url: String): String {
21 | var index = url.indexOf("https://")
22 | if (index == -1) return url
23 | val linkifyTasks = ArrayList()
24 | var extra = 0
25 | while (index != -1) {
26 | var end = url.indexOf(' ', index)
27 | end = if (end == -1) url.indexOf('\n', index) else url.indexOf('\n', index)
28 | .coerceAtMost(end)
29 | if (end == -1) end = url.length
30 | if (index == 0 || '\n' == url[index - 1] || ' ' == url[index - 1]) {
31 | val endDomain = url.indexOf('/', index + 9)
32 | val endCh = url[end - 1]
33 | if (endDomain != -1 && endDomain < end && endCh != '>' && endCh != ')' && endCh != ']') {
34 | linkifyTasks.add(LinkifyTask(index, end))
35 | extra += end - index + 4
36 | if (MainApplication.forceDebugLogging) Timber.d("Linkify url: %s", url.substring(end))
37 | }
38 | }
39 | index = url.indexOf("https://", end)
40 | }
41 | if (linkifyTasks.isEmpty()) return url
42 | var prev = LinkifyTask.NULL
43 | val stringBuilder = StringBuilder(url.length + extra)
44 | for (linkifyTask in linkifyTasks) {
45 | stringBuilder.append(url, prev.end, linkifyTask.start).append('[')
46 | .append(url, linkifyTask.start, linkifyTask.end).append("](")
47 | .append(url, linkifyTask.start, linkifyTask.end).append(')')
48 | prev = linkifyTask
49 | }
50 | if (prev.end != url.length) stringBuilder.append(url, prev.end, url.length)
51 | if (MainApplication.forceDebugLogging) Timber.i("Added Markdown link to " + linkifyTasks.size + " urls")
52 | return stringBuilder.toString()
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/app/src/main/res/values-v27/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v29/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/markdown_view.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
12 |
13 |
22 |
23 |
27 |
28 |
33 |
34 |
40 |
41 |
48 |
49 |
50 |
51 |
52 |
53 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/utils/SyncManager.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 | package com.fox2code.mmm.utils
5 |
6 | /**
7 | * Manager that want both to be thread safe and not to worry about thread safety
8 | * [.scan] and [.update] can be called from multiple
9 | * thread at the same time, [.scanInternal] will only be
10 | * called from one thread at a time only.
11 | */
12 | abstract class SyncManager {
13 | protected val syncLock = Any()
14 | private var syncing = false
15 | private var lastSync: Long = 0
16 | fun scanAsync() {
17 | if (!syncing) {
18 | Thread({ this.scan() }, "Scan Thread").start()
19 | }
20 | }
21 |
22 | fun scan() {
23 | update(null)
24 | }
25 |
26 | // MultiThread friendly method
27 | @Suppress("NAME_SHADOWING")
28 | fun update(updateListener: UpdateListener?) {
29 | var updateListener = updateListener
30 | if (updateListener == null) updateListener = NO_OP
31 | if (!syncing) {
32 | // Do scan
33 | synchronized(syncLock) {
34 | if (System.currentTimeMillis() < lastSync + 50L) return // Skip sync if it was synced too recently
35 | syncing = true
36 | try {
37 | scanInternal(updateListener)
38 | } finally {
39 | lastSync = System.currentTimeMillis()
40 | syncing = false
41 | }
42 | }
43 | } else {
44 | // Wait for current scan
45 | synchronized(syncLock) { Thread.yield() }
46 | }
47 | }
48 |
49 | // Pause execution until the scan is completed if one is currently running
50 | fun afterScan() {
51 | if (syncing) synchronized(syncLock) { Thread.yield() }
52 | }
53 |
54 | fun runAfterScan(runnable: Runnable) {
55 | synchronized(syncLock) { runnable.run() }
56 | }
57 |
58 | fun afterUpdate() {
59 | if (syncing) synchronized(syncLock) { Thread.yield() }
60 | }
61 |
62 | fun runAfterUpdate(runnable: Runnable) {
63 | synchronized(syncLock) { runnable.run() }
64 | }
65 |
66 | // This method can't be called twice at the same time.
67 | protected abstract fun scanInternal(updateListener: UpdateListener)
68 | interface UpdateListener {
69 | fun update(value: Int)
70 | }
71 |
72 | companion object {
73 | private val NO_OP: UpdateListener = object : UpdateListener {
74 | override fun update(value: Int) {
75 |
76 | }
77 | }
78 | }
79 | }
--------------------------------------------------------------------------------
/app/src/main/res/values-th/strings.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 | สิทธิรูทถูกปฏิเสธโดยแอป Magisk
7 | กำลังโหลด
8 | อัพเดทได้
9 | ติดตั้งแล้ว
10 | ข้อมูลออนไลน์
11 | ดาวน์โหลดล้มเหลว
12 | การตั้งค่ากิจกรรม
13 | มีแอปเวอร์ชั่นใหม่พร้อมใช้งาน
14 | ไม่พบคำอธิบาย
15 | ติดตั้งโมดูล
16 | อัพเกรดโมดูล
17 | สนับสนุน
18 | บริจาค
19 | อัพเดท
20 | ติดตั้ง
21 | คำอธิบาย
22 | การกำหนดค่า
23 | รายงานจุดบกพร่อง
24 | ยอมรับโมดูล
25 | รีบูท
26 | ภาษา
27 | การอัพเดทครั้งล่าสุด
28 | ข้อมูลโมดูล
29 | โมดูลโดย
30 | ติดดาวโมดูล
31 | ไม่สามารถเปลี่ยนบูท
32 | ต้องการหน่วยข้อมูลแรมดิส
33 | ไม่สามารถเข้าถึง รูท หรือ Magisk
34 | แอป Magisk ไม่ได้ติดตั้งบนอุปกรณ์เครื่องนี้
35 | แอปอยู่ในโหมดล็อกดาวน์
36 | ไม่สามารถเชื่อมต่ออินเทอร์เน็ต
37 | ไม่สามารถเปิด ตัวแสดงเนื้อหาเว็บได้
38 | ดาวน์โหลดโมดูล
39 | เว็บไซต์
40 | ถอนการติดตั้ง
41 | ต้องการแอนดรอยด์12ขึ้นไป
42 | ดาวน์โหลดโมดูล
43 | ต้องการหน่วยข้อมูลแรมดิสเพื่อติดตั้ง
44 | โมดูลตัวนี้อาจเปลี่ยนไฟล์อิมเมจบูท
45 |
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/XHooks.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm
6 |
7 | import android.content.Context
8 | import android.content.Intent
9 | import android.content.pm.PackageManager
10 | import android.webkit.WebView
11 | import androidx.annotation.Keep
12 | import com.fox2code.mmm.manager.ModuleManager
13 | import com.fox2code.mmm.repo.RepoManager
14 |
15 | /**
16 | * Class made to expose some manager functions to xposed modules.
17 | * It will not be obfuscated on release builds
18 | *
19 | * TODO: Evaluate usage and deprecate if not needed
20 | */
21 | @Suppress("UNUSED_PARAMETER")
22 | @Keep
23 | enum class XHooks {
24 | ;
25 |
26 | companion object {
27 | @Keep
28 | fun onRepoManagerInitialize() {
29 | // Call addXRepo here if you are an XPosed module
30 | }
31 |
32 | @Keep
33 | fun onRepoManagerInitialized() {
34 | }
35 |
36 | @Keep
37 | fun isModuleActive(moduleId: String?): Boolean {
38 | return ModuleManager.isModuleActive(moduleId!!)
39 | }
40 |
41 | @Keep
42 | @Throws(PackageManager.NameNotFoundException::class)
43 | fun checkConfigTargetExists(context: Context, packageName: String, config: String) {
44 | if ("org.lsposed.manager" == config && "org.lsposed.manager" == packageName &&
45 | (isModuleActive("riru_lsposed") || isModuleActive("zygisk_lsposed"))
46 | ) return // Skip check for lsposed as it is probably injected into the system.
47 | context.packageManager.getPackageInfo(packageName, 0)
48 | }
49 |
50 | @Suppress("UNUSED_PARAMETER")
51 | @Keep
52 | fun getConfigIntent(context: Context, packageName: String?, config: String?): Intent? {
53 | return context.packageManager.getLaunchIntentForPackage(packageName!!)
54 | }
55 |
56 | @Keep
57 | fun onWebViewInitialize(webView: WebView?, allowInstall: Boolean) {
58 | if (webView == null) throw NullPointerException("WebView is null!")
59 | }
60 |
61 | @Keep
62 | fun addXRepo(url: String?, fallbackName: String?): XRepo {
63 | return url?.let { RepoManager.iNSTANCE_UNSAFE?.addOrGet(it, fallbackName) }!!
64 | }
65 |
66 | @Keep
67 | fun getXRepo(url: String?): XRepo {
68 | return RepoManager.iNSTANCE_UNSAFE?.get(url)
69 | ?: throw NullPointerException("Repo not found!")
70 | }
71 |
72 | @get:Keep
73 | val xRepos: Collection
74 | get() = RepoManager.iNSTANCE_UNSAFE!!.xRepos
75 | }
76 | }
--------------------------------------------------------------------------------
/app/src/main/kotlin/com/fox2code/mmm/settings/SharedPreferenceDataStore.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2023 to present Androidacy and contributors. Names, logos, icons, and the Androidacy name are all trademarks of Androidacy and may not be used without license. See LICENSE for more information.
3 | */
4 |
5 | package com.fox2code.mmm.settings
6 |
7 | import android.content.SharedPreferences
8 | import androidx.preference.PreferenceDataStore
9 | import com.fox2code.mmm.MainApplication
10 | import timber.log.Timber
11 |
12 | class SharedPreferenceDataStore(sharedPreferences: SharedPreferences) : PreferenceDataStore() {
13 | private val mSharedPreferences: SharedPreferences
14 |
15 | init {
16 | if (MainApplication.forceDebugLogging) Timber.d("SharedPreferenceDataStore: %s", sharedPreferences)
17 | mSharedPreferences = sharedPreferences
18 | }
19 |
20 | val sharedPreferences: SharedPreferences
21 | get() {
22 | if (MainApplication.forceDebugLogging) Timber.d("getSharedPreferences: %s", mSharedPreferences)
23 | return mSharedPreferences
24 | }
25 |
26 | override fun putString(key: String, value: String?) {
27 | mSharedPreferences.edit().putString(key, value).apply()
28 | }
29 |
30 | override fun putStringSet(key: String, values: Set?) {
31 | mSharedPreferences.edit().putStringSet(key, values).apply()
32 | }
33 |
34 | override fun putInt(key: String, value: Int) {
35 | mSharedPreferences.edit().putInt(key, value).apply()
36 | }
37 |
38 | override fun putLong(key: String, value: Long) {
39 | mSharedPreferences.edit().putLong(key, value).apply()
40 | }
41 |
42 | override fun putFloat(key: String, value: Float) {
43 | mSharedPreferences.edit().putFloat(key, value).apply()
44 | }
45 |
46 | override fun putBoolean(key: String, value: Boolean) {
47 | mSharedPreferences.edit().putBoolean(key, value).apply()
48 | }
49 |
50 | override fun getString(key: String, defValue: String?): String? {
51 | return mSharedPreferences.getString(key, defValue)
52 | }
53 |
54 | override fun getStringSet(key: String, defValues: Set?): Set? {
55 | return mSharedPreferences.getStringSet(key, defValues)
56 | }
57 |
58 | override fun getInt(key: String, defValue: Int): Int {
59 | return mSharedPreferences.getInt(key, defValue)
60 | }
61 |
62 | override fun getLong(key: String, defValue: Long): Long {
63 | return mSharedPreferences.getLong(key, defValue)
64 | }
65 |
66 | override fun getFloat(key: String, defValue: Float): Float {
67 | return mSharedPreferences.getFloat(key, defValue)
68 | }
69 |
70 | override fun getBoolean(key: String, defValue: Boolean): Boolean {
71 | return mSharedPreferences.getBoolean(key, defValue)
72 | }
73 | }
--------------------------------------------------------------------------------
/app/src/main/res/values-lt/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | AMM
4 | Nepavyko pasiekti root ar Magisk
5 | Root buvo neleista per Magisk programėle
6 | Magisk nėra suinstaliuota
7 | Kraunama…
8 | Atnaujinama
9 | Instaliuota
10 | Internetinė repozitorija
11 | Nepavyko atsiųsti failo
12 | Nepavyko prisijungti prie interneto
13 | Nepavyko atidaryti sisteminio WebView
14 | Nustatymai
15 | Nėra aprašymo.
16 | Atsiųsti modulį
17 | Instaliuoti modulį
18 | Atnaujinti modulį
19 | Puslapis
20 | Pagalba
21 | Aukoti
22 | Atnaujinti
23 | Instaliuoti
24 | Aprašymas
25 | Ištrinti
26 | Konfigūruoti
27 | Pranešti klaidas
28 | Pasiūlyti modulį
29 | Perkrauti
30 | Kalba
31 | Paskutinis atnaujinimas:
32 | Repozitorija:
33 | Sukurė
34 | Atsiuntimas:
35 | Žvaigždutės:
36 | Reikia ramdisk
37 | Galima pakeisti paleidima
38 | Šiam moduliui galimai reikės pakeisti boot image
39 | Minim. Magisk %s
40 | Fox Magisk Modulių tvarkyklė
41 | Androidacy Modulių tvarkyklė
42 | Programėlė kritinio užrakinimo režime
43 | Pasiekiama nauja programėlės versija
44 | Reikia Android 12+
45 | Šiam moduliui reikia paleidimo ramdisk
46 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/theme_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
15 |
16 |
20 |
21 |
22 |
31 |
32 |
40 |
41 |
48 |
49 |
56 |
57 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/.github/workflows/build-debug.yml:
--------------------------------------------------------------------------------
1 | #file: noinspection SpellCheckingInspection
2 | name: Generate APK Debug
3 |
4 | on:
5 | push:
6 | branches:
7 | - '*'
8 | paths-ignore:
9 | - '**.md'
10 | pull_request:
11 | branches:
12 | - '*'
13 | paths-ignore:
14 | - '**.md'
15 | workflow_dispatch:
16 |
17 | jobs:
18 | build:
19 |
20 | runs-on: ubuntu-latest
21 | permissions:
22 | contents: read
23 | packages: write
24 |
25 | steps:
26 | - name: Check out repository
27 | uses: actions/checkout@v3
28 | with:
29 | submodules: true
30 |
31 | - name: Set up Java 17
32 | uses: actions/setup-java@v3
33 | with:
34 | java-version: 17
35 | distribution: 'temurin'
36 |
37 | - name: Setup Android SDK
38 | uses: android-actions/setup-android@v2
39 |
40 | - name: Setup Gradle
41 | uses: gradle/gradle-build-action@v2
42 | with:
43 | gradle-home-cache-includes: |
44 | caches
45 | notifications
46 | jdks
47 | ${{ github.workspace }}/.gradle/configuration-cache
48 |
49 | - name: Change wrapper permissions
50 | run: chmod +x ./gradlew
51 |
52 | # temporary disabled
53 | # - name: Run tests
54 | # run: ./gradlew test
55 |
56 | - name: Build apk debug
57 | run: ./gradlew app:assembleDefaultDebug
58 |
59 | # will not upload, just build to check if it builds
60 | - name: Build apk fdroid-debug
61 | run: ./gradlew app:assembleFdroidDebug
62 |
63 | # UPLOAD ARTIFACT SECTION
64 | # Will be shorter, when https://github.com/actions/upload-artifact/pull/354 will be merged
65 | # AMMM-default-debug
66 | - name: Upload AMMM-default-arm64-v8a-debug
67 | uses: actions/upload-artifact@v4
68 | with:
69 | name: AMMM-default-arm64-v8a-debug
70 | path: app/build/outputs/apk/default/debug/*-default-arm64-v8a-debug.apk
71 |
72 | - name: Upload AMMM-default-armeabi-v7a-debug
73 | uses: actions/upload-artifact@v4
74 | with:
75 | name: AMMM-default-armeabi-v7a-debug
76 | path: app/build/outputs/apk/default/debug/*-default-armeabi-v7a-debug.apk
77 |
78 | - name: Upload AMMM-default-universal-debug
79 | uses: actions/upload-artifact@v4
80 | with:
81 | name: AMMM-default-universal-debug
82 | path: app/build/outputs/apk/default/debug/*-default-universal-debug.apk
83 |
84 | - name: Upload AMMM-default-x86-debug
85 | uses: actions/upload-artifact@v4
86 | with:
87 | name: AMMM-default-x86-debug
88 | path: app/build/outputs/apk/default/debug/*-default-x86-debug.apk
89 |
90 | - name: Upload AMMM-default-x86_64-debug
91 | uses: actions/upload-artifact@v4
92 | with:
93 | name: AMMM-default-x86_64-debug
94 | path: app/build/outputs/apk/default/debug/*-default-x86_64-debug.apk
95 |
--------------------------------------------------------------------------------
/app/roomSchemas/com.fox2code.mmm.utils.room.ReposListDatabase/1.json:
--------------------------------------------------------------------------------
1 | {
2 | "formatVersion": 1,
3 | "database": {
4 | "version": 1,
5 | "identityHash": "7ad41628a74233e6c6d2f88142274d85",
6 | "entities": [
7 | {
8 | "tableName": "ReposList",
9 | "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `url` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `donate` TEXT, `support` TEXT, `submitModule` TEXT, `lastUpdate` INTEGER NOT NULL, `name` TEXT NOT NULL, `website` TEXT, PRIMARY KEY(`id`))",
10 | "fields": [
11 | {
12 | "fieldPath": "id",
13 | "columnName": "id",
14 | "affinity": "TEXT",
15 | "notNull": true
16 | },
17 | {
18 | "fieldPath": "url",
19 | "columnName": "url",
20 | "affinity": "TEXT",
21 | "notNull": true
22 | },
23 | {
24 | "fieldPath": "enabled",
25 | "columnName": "enabled",
26 | "affinity": "INTEGER",
27 | "notNull": true
28 | },
29 | {
30 | "fieldPath": "donate",
31 | "columnName": "donate",
32 | "affinity": "TEXT",
33 | "notNull": false
34 | },
35 | {
36 | "fieldPath": "support",
37 | "columnName": "support",
38 | "affinity": "TEXT",
39 | "notNull": false
40 | },
41 | {
42 | "fieldPath": "submitModule",
43 | "columnName": "submitModule",
44 | "affinity": "TEXT",
45 | "notNull": false
46 | },
47 | {
48 | "fieldPath": "lastUpdate",
49 | "columnName": "lastUpdate",
50 | "affinity": "INTEGER",
51 | "notNull": true
52 | },
53 | {
54 | "fieldPath": "name",
55 | "columnName": "name",
56 | "affinity": "TEXT",
57 | "notNull": true
58 | },
59 | {
60 | "fieldPath": "website",
61 | "columnName": "website",
62 | "affinity": "TEXT",
63 | "notNull": false
64 | }
65 | ],
66 | "primaryKey": {
67 | "autoGenerate": false,
68 | "columnNames": [
69 | "id"
70 | ]
71 | },
72 | "indices": [
73 | {
74 | "name": "index_ReposList_id",
75 | "unique": true,
76 | "columnNames": [
77 | "id"
78 | ],
79 | "orders": [],
80 | "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_ReposList_id` ON `${TABLE_NAME}` (`id`)"
81 | }
82 | ],
83 | "foreignKeys": []
84 | }
85 | ],
86 | "views": [],
87 | "setupQueries": [
88 | "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
89 | "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '7ad41628a74233e6c6d2f88142274d85')"
90 | ]
91 | }
92 | }
--------------------------------------------------------------------------------
/app/src/main/res/xml/debugging_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
15 |
16 |
24 |
25 |
33 |
34 |
42 |
43 |
48 |
49 |
54 |
55 |
61 |
62 |
67 |
68 |
69 |
--------------------------------------------------------------------------------