├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── workflows
│ ├── bin.yaml
│ ├── build.yaml
│ ├── lint.yaml
│ └── release-please.yml
├── .gitmodules
├── CHANGELOG.md
├── LICENSE
├── README.md
├── build
└── build_bin.sh
├── dex
├── .gitignore
├── README.md
├── app
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ ├── android
│ │ │ │ ├── os
│ │ │ │ │ └── SystemProperties.java
│ │ │ │ └── util
│ │ │ │ │ ├── TypedXmlPullParser.java
│ │ │ │ │ ├── TypedXmlSerializer.java
│ │ │ │ │ └── XmlApi30.java
│ │ │ ├── com
│ │ │ │ ├── android
│ │ │ │ │ ├── internal
│ │ │ │ │ │ └── util
│ │ │ │ │ │ │ ├── BinaryXmlPullParser.java
│ │ │ │ │ │ │ ├── BinaryXmlSerializer.java
│ │ │ │ │ │ │ ├── FastDataInput.java
│ │ │ │ │ │ │ ├── FastDataOutput.java
│ │ │ │ │ │ │ ├── FastXmlSerializer.java
│ │ │ │ │ │ │ ├── HexDump.java
│ │ │ │ │ │ │ ├── ModifiedUtf8.java
│ │ │ │ │ │ │ ├── XmlPullParserWrapper.java
│ │ │ │ │ │ │ ├── XmlSerializerWrapper.java
│ │ │ │ │ │ │ └── XmlUtils.java
│ │ │ │ │ ├── org
│ │ │ │ │ │ └── kxml2
│ │ │ │ │ │ │ └── io
│ │ │ │ │ │ │ ├── KXmlParser.java
│ │ │ │ │ │ │ └── KXmlSerializer.java
│ │ │ │ │ ├── providers
│ │ │ │ │ │ └── settings
│ │ │ │ │ │ │ ├── SettingsState.java
│ │ │ │ │ │ │ ├── SettingsStateApi26.java
│ │ │ │ │ │ │ └── SettingsStateApi31.java
│ │ │ │ │ └── server
│ │ │ │ │ │ └── display
│ │ │ │ │ │ └── DisplayControlHidden.java
│ │ │ │ └── xayah
│ │ │ │ │ └── dex
│ │ │ │ │ ├── BaseUtil.java
│ │ │ │ │ ├── CCHelper.java
│ │ │ │ │ ├── CCUtil.java
│ │ │ │ │ ├── FakeContext.java
│ │ │ │ │ ├── HiddenApiHelper.java
│ │ │ │ │ ├── HiddenApiUtil.java
│ │ │ │ │ ├── HttpUtil.java
│ │ │ │ │ ├── NotificationUtil.java
│ │ │ │ │ └── SsaidUtil.java
│ │ │ └── libcore
│ │ │ │ ├── internal
│ │ │ │ └── StringPool.java
│ │ │ │ ├── io
│ │ │ │ └── IoUtils.java
│ │ │ │ └── util
│ │ │ │ ├── HexEncoding.java
│ │ │ │ └── XmlObjectFactory.java
│ │ └── res
│ │ │ ├── drawable
│ │ │ ├── ic_launcher_background.xml
│ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── values-night
│ │ │ └── themes.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── themes.xml
│ │ │ └── xml
│ │ │ ├── backup_rules.xml
│ │ │ └── data_extraction_rules.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── xayah
│ │ └── dex
│ │ └── ExampleUnitTest.java
├── build.gradle.kts
├── gradle.properties
├── gradle
│ ├── libs.versions.toml
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── hiddenapi
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── aidl
│ │ └── android
│ │ │ ├── app
│ │ │ └── INotificationManager.aidl
│ │ │ └── content
│ │ │ └── pm
│ │ │ └── ParceledListSlice.aidl
│ │ └── java
│ │ └── android
│ │ ├── app
│ │ └── AppOpsManagerHidden.java
│ │ ├── content
│ │ ├── IContentProvider.java
│ │ └── pm
│ │ │ ├── BaseParceledListSlice.java
│ │ │ ├── PackageManagerHidden.java
│ │ │ └── ParceledListSlice.java
│ │ ├── os
│ │ ├── ServiceManager.java
│ │ └── UserHandleHidden.java
│ │ └── view
│ │ └── SurfaceControlHidden.java
└── settings.gradle.kts
├── docs
└── static
│ └── img
│ ├── afdian.svg
│ ├── bmc-button.svg
│ └── pp_h_rgb.svg
├── fastlane
└── metadata
│ └── android
│ └── en-US
│ ├── full_description.txt
│ ├── images
│ ├── icon.png
│ └── phoneScreenshots
│ │ ├── 01.jpg
│ │ ├── 02.jpg
│ │ ├── 03.jpg
│ │ ├── 04.jpg
│ │ ├── 05.jpg
│ │ └── 06.jpg
│ └── short_description.txt
├── source-next
├── .gitignore
├── app
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── databackup
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── aidl
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── databackup
│ │ │ │ └── rootservice
│ │ │ │ └── IRemoteRootService.aidl
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── databackup
│ │ │ │ ├── App.kt
│ │ │ │ ├── database
│ │ │ │ ├── AppDataBase.kt
│ │ │ │ ├── dao
│ │ │ │ │ └── AppDao.kt
│ │ │ │ └── entity
│ │ │ │ │ └── App.kt
│ │ │ │ ├── feature
│ │ │ │ ├── MainActivity.kt
│ │ │ │ ├── MainViewModel.kt
│ │ │ │ ├── backup
│ │ │ │ │ ├── BackupPreviewScreen.kt
│ │ │ │ │ └── apps
│ │ │ │ │ │ ├── AppsViewModel.kt
│ │ │ │ │ │ └── BackupAppsScreen.kt
│ │ │ │ ├── dashboard
│ │ │ │ │ └── DashboardScreen.kt
│ │ │ │ └── setup
│ │ │ │ │ ├── PermissionsViewModel.kt
│ │ │ │ │ ├── SetupActivity.kt
│ │ │ │ │ └── SetupScreens.kt
│ │ │ │ ├── rootservice
│ │ │ │ └── RemoteRootService.kt
│ │ │ │ ├── ui
│ │ │ │ ├── component
│ │ │ │ │ ├── ActionButton.kt
│ │ │ │ │ ├── Chip.kt
│ │ │ │ │ ├── Effect.kt
│ │ │ │ │ ├── FilterButton.kt
│ │ │ │ │ ├── ListItem.kt
│ │ │ │ │ ├── Modifier.kt
│ │ │ │ │ ├── PermissionCard.kt
│ │ │ │ │ ├── SegmentProgressIndicator.kt
│ │ │ │ │ ├── StorageCard.kt
│ │ │ │ │ └── TransitionSpec.kt
│ │ │ │ └── theme
│ │ │ │ │ ├── Color.kt
│ │ │ │ │ ├── Theme.kt
│ │ │ │ │ └── Type.kt
│ │ │ │ ├── util
│ │ │ │ ├── BaseViewModel.kt
│ │ │ │ ├── DataStoreHelper.kt
│ │ │ │ ├── DatabaseHelper.kt
│ │ │ │ ├── FlowHelper.kt
│ │ │ │ ├── LogHelper.kt
│ │ │ │ ├── NavHelper.kt
│ │ │ │ ├── NotificationHelper.kt
│ │ │ │ ├── PathHelper.kt
│ │ │ │ ├── ProcessHelper.kt
│ │ │ │ ├── ShellHelper.kt
│ │ │ │ ├── SortsAndFiltersHelper.kt
│ │ │ │ ├── StorageHelper.kt
│ │ │ │ └── WorkManagerHelper.kt
│ │ │ │ └── workers
│ │ │ │ └── AppsUpdateWorker.kt
│ │ └── res
│ │ │ ├── anim
│ │ │ └── fast_out_extra_slow_in.xml
│ │ │ ├── drawable
│ │ │ ├── ic_animated_check.xml
│ │ │ ├── ic_animated_chevron_right_to_down.xml
│ │ │ ├── ic_animated_database.xml
│ │ │ ├── ic_animated_gamepad_2.xml
│ │ │ ├── ic_animated_resource_package.xml
│ │ │ ├── ic_animated_user.xml
│ │ │ ├── ic_animted_arrow_up_down_a_z.xml
│ │ │ ├── ic_archive.xml
│ │ │ ├── ic_archive_restore.xml
│ │ │ ├── ic_arrow_down_a_z.xml
│ │ │ ├── ic_arrow_left.xml
│ │ │ ├── ic_arrow_up_a_z.xml
│ │ │ ├── ic_badge_info.xml
│ │ │ ├── ic_bell.xml
│ │ │ ├── ic_book_a.xml
│ │ │ ├── ic_book_down.xml
│ │ │ ├── ic_book_text.xml
│ │ │ ├── ic_book_up.xml
│ │ │ ├── ic_book_user.xml
│ │ │ ├── ic_calendar_check.xml
│ │ │ ├── ic_check.xml
│ │ │ ├── ic_chevron_down.xml
│ │ │ ├── ic_chevron_right.xml
│ │ │ ├── ic_circle_x.xml
│ │ │ ├── ic_clock.xml
│ │ │ ├── ic_cloud_upload.xml
│ │ │ ├── ic_database.xml
│ │ │ ├── ic_folder.xml
│ │ │ ├── ic_funnel.xml
│ │ │ ├── ic_gamepad_2.xml
│ │ │ ├── ic_hash.xml
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ ├── ic_layout_grid.xml
│ │ │ ├── ic_message_circle.xml
│ │ │ ├── ic_package_2.xml
│ │ │ ├── ic_phone.xml
│ │ │ ├── ic_resource_package.xml
│ │ │ ├── ic_search.xml
│ │ │ ├── ic_settings.xml
│ │ │ ├── ic_user.xml
│ │ │ ├── ic_user_round.xml
│ │ │ ├── ic_wifi.xml
│ │ │ ├── img_empty.xml
│ │ │ └── img_setup.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.webp
│ │ │ └── ic_launcher_round.webp
│ │ │ ├── values-ar
│ │ │ └── strings.xml
│ │ │ ├── values-bn
│ │ │ └── strings.xml
│ │ │ ├── values-bs
│ │ │ └── strings.xml
│ │ │ ├── values-ca
│ │ │ └── strings.xml
│ │ │ ├── values-cs
│ │ │ └── strings.xml
│ │ │ ├── values-de
│ │ │ └── strings.xml
│ │ │ ├── values-es
│ │ │ └── strings.xml
│ │ │ ├── values-fa
│ │ │ └── strings.xml
│ │ │ ├── values-fi
│ │ │ └── strings.xml
│ │ │ ├── values-fil
│ │ │ └── strings.xml
│ │ │ ├── values-fr
│ │ │ └── strings.xml
│ │ │ ├── values-hr
│ │ │ └── strings.xml
│ │ │ ├── values-hu
│ │ │ └── strings.xml
│ │ │ ├── values-in
│ │ │ └── strings.xml
│ │ │ ├── values-it
│ │ │ └── strings.xml
│ │ │ ├── values-ko
│ │ │ └── strings.xml
│ │ │ ├── values-ml
│ │ │ └── strings.xml
│ │ │ ├── values-nb-rNO
│ │ │ └── strings.xml
│ │ │ ├── values-night-v31
│ │ │ └── colors.xml
│ │ │ ├── values-night
│ │ │ └── colors.xml
│ │ │ ├── values-pl
│ │ │ └── strings.xml
│ │ │ ├── values-pt-rBR
│ │ │ └── strings.xml
│ │ │ ├── values-ro
│ │ │ └── strings.xml
│ │ │ ├── values-ru
│ │ │ └── strings.xml
│ │ │ ├── values-sr
│ │ │ └── strings.xml
│ │ │ ├── values-sv
│ │ │ └── strings.xml
│ │ │ ├── values-ta
│ │ │ └── strings.xml
│ │ │ ├── values-tr
│ │ │ └── strings.xml
│ │ │ ├── values-uk
│ │ │ └── strings.xml
│ │ │ ├── values-uz
│ │ │ └── strings.xml
│ │ │ ├── values-v31
│ │ │ └── colors.xml
│ │ │ ├── values-vi
│ │ │ └── strings.xml
│ │ │ ├── values-zh-rCN
│ │ │ └── strings.xml
│ │ │ ├── values-zh-rHK
│ │ │ └── strings.xml
│ │ │ ├── values-zh-rTW
│ │ │ └── strings.xml
│ │ │ ├── values
│ │ │ ├── colors.xml
│ │ │ ├── strings.xml
│ │ │ └── themes.xml
│ │ │ └── xml
│ │ │ ├── backup_rules.xml
│ │ │ └── data_extraction_rules.xml
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── xayah
│ │ └── databackup
│ │ └── ExampleUnitTest.kt
├── build.gradle.kts
├── gradle.properties
├── gradle
│ ├── libs.versions.toml
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── hiddenapi
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── hiddenapi
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── android
│ │ │ │ ├── app
│ │ │ │ ├── ActivityThread.java
│ │ │ │ └── ContextImpl.java
│ │ │ │ ├── content
│ │ │ │ └── pm
│ │ │ │ │ ├── PackageManagerHidden.java
│ │ │ │ │ └── UserInfo.java
│ │ │ │ └── os
│ │ │ │ ├── UserHandleHidden.java
│ │ │ │ └── UserManagerHidden.java
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── hiddenapi
│ │ │ └── Refine.kt
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── xayah
│ │ └── hiddenapi
│ │ └── ExampleUnitTest.kt
├── native
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── libnative
│ │ │ └── ExampleInstrumentedTest.kt
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── jni
│ │ │ ├── CMakeLists.txt
│ │ │ └── nativelib
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ └── nativelib.cpp
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── libnative
│ │ │ └── NativeLib.kt
│ │ └── test
│ │ └── java
│ │ └── com
│ │ └── xayah
│ │ └── libnative
│ │ └── ExampleUnitTest.kt
└── settings.gradle.kts
└── source
├── .gitignore
├── app
├── .gitignore
├── build.gradle.kts
├── proguard-rules.pro
└── src
│ ├── arm64-v8a
│ └── assets
│ │ └── bin.zip
│ ├── armeabi-v7a
│ └── assets
│ │ └── bin.zip
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── databackup
│ │ │ ├── DataBackupApplication.kt
│ │ │ ├── MainActivity.kt
│ │ │ └── SplashActivity.kt
│ └── res
│ │ ├── drawable
│ │ ├── ic_launcher_foreground.xml
│ │ ├── ic_launcher_foreground_tonal.xml
│ │ ├── ic_rounded_acute.xml
│ │ ├── ic_rounded_adjust_circle.xml
│ │ ├── ic_rounded_android.xml
│ │ ├── ic_rounded_android_circle.xml
│ │ ├── ic_rounded_apps.xml
│ │ ├── ic_rounded_arrow_circle_down.xml
│ │ ├── ic_rounded_arrow_circle_up.xml
│ │ ├── ic_rounded_badge.xml
│ │ ├── ic_rounded_cancel.xml
│ │ ├── ic_rounded_cancel_circle.xml
│ │ ├── ic_rounded_check_circle.xml
│ │ ├── ic_rounded_database.xml
│ │ ├── ic_rounded_database_circle.xml
│ │ ├── ic_rounded_deployed_code.xml
│ │ ├── ic_rounded_emoticon.xml
│ │ ├── ic_rounded_folder_open.xml
│ │ ├── ic_rounded_history.xml
│ │ ├── ic_rounded_image.xml
│ │ ├── ic_rounded_key.xml
│ │ ├── ic_rounded_lan.xml
│ │ ├── ic_rounded_link.xml
│ │ ├── ic_rounded_manage_accounts.xml
│ │ ├── ic_rounded_not_started.xml
│ │ ├── ic_rounded_not_started_circle.xml
│ │ ├── ic_rounded_package_2.xml
│ │ ├── ic_rounded_package_2_circle.xml
│ │ ├── ic_rounded_pending_circle.xml
│ │ ├── ic_rounded_person.xml
│ │ └── ic_rounded_stadia_controller.xml
│ │ ├── font
│ │ └── jetbrains_mono_regular.ttf
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.webp
│ │ └── ic_launcher_round.webp
│ │ ├── raw
│ │ └── keep.xml
│ │ ├── values-ar
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-bn
│ │ └── strings.xml
│ │ ├── values-bs
│ │ └── strings.xml
│ │ ├── values-ca
│ │ └── strings.xml
│ │ ├── values-cs
│ │ └── strings.xml
│ │ ├── values-de
│ │ └── strings.xml
│ │ ├── values-es
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-fa
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-fi
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-fil
│ │ └── strings.xml
│ │ ├── values-fr
│ │ └── strings.xml
│ │ ├── values-hr
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-hu
│ │ └── strings.xml
│ │ ├── values-in
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-it
│ │ └── strings.xml
│ │ ├── values-ko
│ │ └── strings.xml
│ │ ├── values-ml
│ │ └── strings.xml
│ │ ├── values-nb-rNO
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-night-v31
│ │ └── colors.xml
│ │ ├── values-night
│ │ └── colors.xml
│ │ ├── values-pl
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-ro
│ │ └── strings.xml
│ │ ├── values-ru
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-sr
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-sv
│ │ └── strings.xml
│ │ ├── values-ta
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-tr
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-uk
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-uz
│ │ └── strings.xml
│ │ ├── values-v31
│ │ └── colors.xml
│ │ ├── values-vi
│ │ └── strings.xml
│ │ ├── values-zh-rCN
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-zh-rHK
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ ├── plurals.xml
│ │ └── strings.xml
│ │ ├── values
│ │ ├── arrays.xml
│ │ ├── colors.xml
│ │ ├── plurals.xml
│ │ ├── strings.xml
│ │ └── themes.xml
│ │ └── xml
│ │ ├── backup_rules.xml
│ │ └── data_extraction_rules.xml
│ ├── x86
│ └── assets
│ │ └── bin.zip
│ └── x86_64
│ └── assets
│ └── bin.zip
├── build-logic
├── .gitignore
├── convention
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ └── kotlin
│ │ ├── ApplicationCommonConventionPlugin.kt
│ │ ├── ApplicationComposeConventionPlugin.kt
│ │ ├── ApplicationHiltConventionPlugin.kt
│ │ ├── ApplicationHiltWorkConventionPlugin.kt
│ │ ├── LibraryAndroidTestConventionPlugin.kt
│ │ ├── LibraryCommonConventionPlugin.kt
│ │ ├── LibraryComposeConventionPlugin.kt
│ │ ├── LibraryFirebaseConventionPlugin.kt
│ │ ├── LibraryHiltConventionPlugin.kt
│ │ ├── LibraryHiltWorkConventionPlugin.kt
│ │ ├── LibraryProtobufConventionPlugin.kt
│ │ ├── LibraryRoomConventionPlugin.kt
│ │ └── LibraryTestConventionPlugin.kt
├── gradle.properties
└── settings.gradle.kts
├── build.gradle.kts
├── core
├── common
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── common
│ │ └── util
│ │ ├── BuildConfigUtil.kt
│ │ └── ListUtil.kt
├── data
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ ├── androidTest
│ │ └── kotlin
│ │ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── data
│ │ │ └── repository
│ │ │ └── UnitTest.kt
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── data
│ │ │ ├── module
│ │ │ └── RemoteRootServiceModule.kt
│ │ │ ├── repository
│ │ │ ├── AppsRepo.kt
│ │ │ ├── CloudRepository.kt
│ │ │ ├── DirectoryRepository.kt
│ │ │ ├── FilesRepo.kt
│ │ │ ├── LabelsRepo.kt
│ │ │ ├── ListDataRepo.kt
│ │ │ ├── MediaRepository.kt
│ │ │ ├── PackageRepository.kt
│ │ │ ├── SettingsDataRepo.kt
│ │ │ ├── TaskRepository.kt
│ │ │ ├── UsersRepo.kt
│ │ │ └── WorkRepo.kt
│ │ │ └── util
│ │ │ └── DataTypeUtil.kt
│ │ └── res
│ │ └── values
│ │ └── ids.xml
├── database
│ ├── .gitignore
│ ├── build.gradle.kts
│ ├── schemas
│ │ └── com.xayah.core.database.AppDatabase
│ │ │ ├── 1.json
│ │ │ ├── 2.json
│ │ │ ├── 3.json
│ │ │ ├── 4.json
│ │ │ ├── 5.json
│ │ │ ├── 6.json
│ │ │ └── 7.json
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── database
│ │ ├── AppDatabase.kt
│ │ ├── DatabaseMigration.kt
│ │ ├── DatabaseModule.kt
│ │ ├── dao
│ │ ├── CloudDao.kt
│ │ ├── DirectoryDao.kt
│ │ ├── LabelDao.kt
│ │ ├── MediaDao.kt
│ │ ├── PackageDao.kt
│ │ └── TaskDao.kt
│ │ └── util
│ │ └── Converters.kt
├── datastore
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── datastore
│ │ ├── Boolean.kt
│ │ ├── ConstantUtil.kt
│ │ ├── DbPreferencesDataSource.kt
│ │ ├── Int.kt
│ │ ├── Long.kt
│ │ ├── String.kt
│ │ ├── Util.kt
│ │ └── di
│ │ ├── CoroutineScopesModule.kt
│ │ ├── DataStoreModule.kt
│ │ └── DispatchersModule.kt
├── hiddenapi
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── aidl
│ │ └── android
│ │ │ └── content
│ │ │ └── pm
│ │ │ └── IPackageManager.aidl
│ │ ├── java
│ │ └── android
│ │ │ ├── app
│ │ │ ├── ActivityManagerHidden.java
│ │ │ ├── ActivityThread.java
│ │ │ ├── AppOpsManagerHidden.java
│ │ │ └── ContextImpl.java
│ │ │ ├── content
│ │ │ └── pm
│ │ │ │ ├── PackageManagerHidden.java
│ │ │ │ └── UserInfo.java
│ │ │ ├── os
│ │ │ ├── MemoryFileHidden.java
│ │ │ ├── ServiceManager.java
│ │ │ ├── UserHandleHidden.java
│ │ │ └── UserManagerHidden.java
│ │ │ └── view
│ │ │ └── SurfaceControlHidden.java
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── hiddenapi
│ │ └── HiddenApiUtil.kt
├── model
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── aidl
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── core
│ │ │ │ └── model
│ │ │ │ └── database
│ │ │ │ └── PackagePermission.aidl
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── core
│ │ │ │ └── model
│ │ │ │ ├── App.kt
│ │ │ │ ├── Data.kt
│ │ │ │ ├── Enum.kt
│ │ │ │ ├── File.kt
│ │ │ │ ├── SettingsData.kt
│ │ │ │ ├── Target.kt
│ │ │ │ ├── Typealias.kt
│ │ │ │ ├── database
│ │ │ │ ├── CloundEntity.kt
│ │ │ │ ├── DirectoryEntity.kt
│ │ │ │ ├── LabelEntity.kt
│ │ │ │ ├── MediaEntity.kt
│ │ │ │ ├── PackageEntity.kt
│ │ │ │ ├── TaskDetailEntity.kt
│ │ │ │ └── TaskEntity.kt
│ │ │ │ └── util
│ │ │ │ └── ModelUtil.kt
│ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ │ └── test
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── model
│ │ └── UnitTest.kt
├── network
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── network
│ │ │ ├── client
│ │ │ ├── CloudClient.kt
│ │ │ ├── FTPClientImpl.kt
│ │ │ ├── SFTPClientImpl.kt
│ │ │ ├── SMBClientImpl.kt
│ │ │ └── WebDAVClientImpl.kt
│ │ │ ├── io
│ │ │ ├── CountingInputStreamImpl.kt
│ │ │ └── CountingOutputStreamImpl.kt
│ │ │ ├── model
│ │ │ └── GitHub.kt
│ │ │ ├── retrofit
│ │ │ └── GitHubRepository.kt
│ │ │ └── util
│ │ │ └── ModelUtil.kt
│ │ └── res
│ │ └── values
│ │ └── ids.xml
├── provider
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── provider
│ │ │ ├── CrashProvider.kt
│ │ │ └── FileProvider.kt
│ │ └── res
│ │ └── xml
│ │ └── file_paths.xml
├── rootservice
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── aidl
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── rootservice
│ │ │ ├── IRemoteRootService.aidl
│ │ │ └── parcelables
│ │ │ ├── PathParcelable.aidl
│ │ │ ├── StatFsParcelable.aidl
│ │ │ └── StorageStatsParcelable.aidl
│ │ └── kotlin
│ │ └── com
│ │ └── xayah
│ │ └── core
│ │ └── rootservice
│ │ ├── impl
│ │ └── RemoteRootServiceImpl.kt
│ │ ├── parcelables
│ │ ├── PathParcelable.kt
│ │ ├── StatFsParcelable.kt
│ │ └── StorageStatsParcelable.kt
│ │ ├── service
│ │ └── RemoteRootService.kt
│ │ └── util
│ │ ├── CoroutineUtil.kt
│ │ ├── ExceptionUtil.kt
│ │ └── SsaidUtil.kt
├── service
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── service
│ │ │ ├── AbstractProcessingService.kt
│ │ │ ├── AbstractProcessingServiceProxy.kt
│ │ │ ├── medium
│ │ │ ├── AbstractMediumService.kt
│ │ │ ├── backup
│ │ │ │ ├── AbstractBackupService.kt
│ │ │ │ ├── BackupServiceCloudImpl.kt
│ │ │ │ ├── BackupServiceLocalImpl.kt
│ │ │ │ ├── ProcessingServiceProxyCloudImpl.kt
│ │ │ │ └── ProcessingServiceProxyLocalImpl.kt
│ │ │ └── restore
│ │ │ │ ├── AbstractRestoreService.kt
│ │ │ │ ├── ProcessingServiceProxyCloudImpl.kt
│ │ │ │ ├── ProcessingServiceProxyLocalImpl.kt
│ │ │ │ ├── RestoreServiceCloudImpl.kt
│ │ │ │ └── RestoreServiceLocalImpl.kt
│ │ │ ├── model
│ │ │ └── Preprocessing.kt
│ │ │ ├── packages
│ │ │ ├── AbstractPackagesService.kt
│ │ │ ├── backup
│ │ │ │ ├── AbstractBackupService.kt
│ │ │ │ ├── BackupServiceCloudImpl.kt
│ │ │ │ ├── BackupServiceLocalImpl.kt
│ │ │ │ ├── ProcessingServiceProxyCloudImpl.kt
│ │ │ │ └── ProcessingServiceProxyLocalImpl.kt
│ │ │ └── restore
│ │ │ │ ├── AbstractRestoreService.kt
│ │ │ │ ├── ProcessingServiceProxyCloudImpl.kt
│ │ │ │ ├── ProcessingServiceProxyLocalImpl.kt
│ │ │ │ ├── RestoreServiceCloudImpl.kt
│ │ │ │ └── RestoreServiceLocalImpl.kt
│ │ │ └── util
│ │ │ ├── CommonBackupUtil.kt
│ │ │ ├── MediumBackupUtil.kt
│ │ │ ├── MediumRestoreUtil.kt
│ │ │ ├── PackagesBackupUtil.kt
│ │ │ └── PackagesRestoreUtil.kt
│ │ └── res
│ │ └── values
│ │ └── ids.xml
├── systemapi
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ ├── android
│ │ ├── os
│ │ │ └── SystemProperties.java
│ │ └── util
│ │ │ ├── TypedXmlPullParser.java
│ │ │ ├── TypedXmlSerializer.java
│ │ │ └── XmlApi30.java
│ │ ├── com
│ │ └── android
│ │ │ ├── internal
│ │ │ └── util
│ │ │ │ ├── BinaryXmlPullParser.java
│ │ │ │ ├── BinaryXmlSerializer.java
│ │ │ │ ├── FastDataInput.java
│ │ │ │ ├── FastDataOutput.java
│ │ │ │ ├── FastXmlSerializer.java
│ │ │ │ ├── HexDump.java
│ │ │ │ ├── ModifiedUtf8.java
│ │ │ │ ├── XmlPullParserWrapper.java
│ │ │ │ ├── XmlSerializerWrapper.java
│ │ │ │ └── XmlUtils.java
│ │ │ ├── org
│ │ │ └── kxml2
│ │ │ │ └── io
│ │ │ │ ├── KXmlParser.java
│ │ │ │ └── KXmlSerializer.java
│ │ │ ├── providers
│ │ │ └── settings
│ │ │ │ ├── SettingsState.java
│ │ │ │ ├── SettingsStateApi26.java
│ │ │ │ └── SettingsStateApi31.java
│ │ │ └── server
│ │ │ └── display
│ │ │ └── DisplayControl.java
│ │ └── libcore
│ │ ├── internal
│ │ └── StringPool.java
│ │ ├── io
│ │ └── IoUtils.java
│ │ └── util
│ │ ├── HexEncoding.java
│ │ └── XmlObjectFactory.java
├── ui
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ ├── bear.lottie
│ │ ├── loading.lottie
│ │ └── squirrel.lottie
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── ui
│ │ │ ├── component
│ │ │ ├── Animation.kt
│ │ │ ├── Button.kt
│ │ │ ├── Card.kt
│ │ │ ├── Chip.kt
│ │ │ ├── Common.kt
│ │ │ ├── Dialog.kt
│ │ │ ├── Divider.kt
│ │ │ ├── Effects.kt
│ │ │ ├── Image.kt
│ │ │ ├── ModalBottomSheet.kt
│ │ │ ├── ModalMenu.kt
│ │ │ ├── ModalPopup.kt
│ │ │ ├── Modifier.kt
│ │ │ ├── ProgressIndicator.kt
│ │ │ ├── Scaffold.kt
│ │ │ ├── ScrollBar.kt
│ │ │ ├── SegmentedButton.kt
│ │ │ ├── Settings.kt
│ │ │ ├── Shape.kt
│ │ │ ├── Slot.kt
│ │ │ ├── Spacer.kt
│ │ │ ├── Surface.kt
│ │ │ ├── Text.kt
│ │ │ ├── TextField.kt
│ │ │ └── TopBar.kt
│ │ │ ├── material3
│ │ │ ├── AlertDialog.kt
│ │ │ ├── AndroidAlertDialog.kt
│ │ │ ├── Card.kt
│ │ │ ├── Divider.kt
│ │ │ ├── DynamicTonalPalette.kt
│ │ │ ├── Elevation.kt
│ │ │ ├── Menu.kt
│ │ │ ├── ProgressIndicator.kt
│ │ │ ├── SegmentedButton.kt
│ │ │ ├── Shapes.kt
│ │ │ ├── Snackbar.kt
│ │ │ ├── SnackbarHostState.kt
│ │ │ ├── Surface.kt
│ │ │ ├── TonalPalette.kt
│ │ │ ├── Typography.kt
│ │ │ ├── pullrefresh
│ │ │ │ ├── PullRefresh.kt
│ │ │ │ ├── PullRefreshIndicator.kt
│ │ │ │ ├── PullRefreshIndicatorTransform.kt
│ │ │ │ └── PullRefreshState.kt
│ │ │ ├── tokens
│ │ │ │ ├── CircularProgressIndicatorTokens.kt
│ │ │ │ ├── DividerTokens.kt
│ │ │ │ ├── ElevatedCardTokens.kt
│ │ │ │ ├── ElevationTokens.kt
│ │ │ │ ├── FilledCardTokens.kt
│ │ │ │ ├── LinearProgressIndicatorTokens.kt
│ │ │ │ ├── MenuTokens.kt
│ │ │ │ ├── MotionTokens.kt
│ │ │ │ ├── OutlinedCardTokens.kt
│ │ │ │ ├── OutlinedSegmentedButtonTokens.kt
│ │ │ │ ├── PaletteTokens.kt
│ │ │ │ ├── ShapeKeyTokens.kt
│ │ │ │ ├── ShapeTokens.kt
│ │ │ │ └── TypographyKeyTokens.kt
│ │ │ ├── util
│ │ │ │ ├── InlineClassHelper.kt
│ │ │ │ ├── ListUtils.kt
│ │ │ │ └── MathHelpers.kt
│ │ │ └── window
│ │ │ │ ├── Popup.kt
│ │ │ │ └── SecureFlagPolicy.kt
│ │ │ ├── model
│ │ │ ├── Card.kt
│ │ │ ├── Dialog.kt
│ │ │ ├── ModalMenu.kt
│ │ │ ├── ProgressIndicator.kt
│ │ │ └── TopBar.kt
│ │ │ ├── route
│ │ │ └── Routes.kt
│ │ │ ├── theme
│ │ │ ├── Color.kt
│ │ │ ├── Theme.kt
│ │ │ ├── ThemedColorDarkTokens.kt
│ │ │ ├── ThemedColorLightTokens.kt
│ │ │ ├── ThemedColorScheme.kt
│ │ │ ├── ThemedColorSchemeKeyTokens.kt
│ │ │ ├── ThemedDynamicTonalPalette.kt
│ │ │ └── Type.kt
│ │ │ ├── token
│ │ │ ├── AnimationTokens.kt
│ │ │ ├── ChipTokens.kt
│ │ │ ├── DialogTokens.kt
│ │ │ ├── ModalMenuTokens.kt
│ │ │ ├── ScrollBarTokens.kt
│ │ │ ├── SizeTokens.kt
│ │ │ ├── SnackbarTokens.kt
│ │ │ └── TextFieldTokens.kt
│ │ │ ├── util
│ │ │ ├── Card.kt
│ │ │ ├── ModelUtil.kt
│ │ │ ├── NavHostController.kt
│ │ │ ├── OperationState.kt
│ │ │ └── StringResource.kt
│ │ │ └── viewmodel
│ │ │ └── BaseViewModel.kt
│ │ └── res
│ │ ├── anim
│ │ └── fast_out_extra_slow_in.xml
│ │ ├── drawable
│ │ ├── ic_animated_tick.xml
│ │ ├── ic_rounded_counter_1.xml
│ │ ├── ic_rounded_counter_2.xml
│ │ ├── ic_rounded_counter_3.xml
│ │ └── ic_rounded_hourglass_empty.xml
│ │ └── values
│ │ └── ids.xml
├── util
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── core
│ │ │ └── util
│ │ │ ├── ActivityUtil.kt
│ │ │ ├── CodingUtil.kt
│ │ │ ├── ContextUtil.kt
│ │ │ ├── CoroutineUtil.kt
│ │ │ ├── DateUtil.kt
│ │ │ ├── FileUtil.kt
│ │ │ ├── GsonUtil.kt
│ │ │ ├── HashUtil.kt
│ │ │ ├── LanguageUtil.kt
│ │ │ ├── LogUtil.kt
│ │ │ ├── NavControllerUtil.kt
│ │ │ ├── NotificationUtil.kt
│ │ │ ├── PathUtil.kt
│ │ │ ├── StringUtil.kt
│ │ │ ├── SymbolUtil.kt
│ │ │ ├── command
│ │ │ ├── AppopsUtil.kt
│ │ │ ├── BaseUtil.kt
│ │ │ ├── PackageUtil.kt
│ │ │ ├── PmUtil.kt
│ │ │ ├── PreparationUtil.kt
│ │ │ ├── SELinuxUtil.kt
│ │ │ ├── TarUtil.kt
│ │ │ └── TreeUtil.kt
│ │ │ ├── model
│ │ │ └── Command.kt
│ │ │ └── module
│ │ │ ├── FlowUtil.kt
│ │ │ ├── GsonModule.kt
│ │ │ └── Qualifier.kt
│ │ └── res
│ │ ├── values
│ │ └── ids.xml
│ │ └── xml
│ │ └── file_paths.xml
└── work
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── kotlin
│ └── com
│ │ └── xayah
│ │ └── core
│ │ └── work
│ │ ├── WorkManagerInitializer.kt
│ │ └── workers
│ │ ├── AppsFastInitWorker.kt
│ │ ├── AppsFastUpdateWorker.kt
│ │ ├── AppsInitWorker.kt
│ │ ├── AppsLoadWorker.kt
│ │ ├── AppsUpdateWorker.kt
│ │ ├── FilesLoadWorker.kt
│ │ └── FilesUpdateWorker.kt
│ └── res
│ └── values
│ └── ids.xml
├── feature
├── crash
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── feature
│ │ │ └── crash
│ │ │ ├── CrashHandler.kt
│ │ │ ├── MainActivity.kt
│ │ │ └── MainViewModel.kt
│ │ └── res
│ │ └── values
│ │ └── ids.xml
├── flavor
│ ├── alpha
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── res
│ │ │ └── values
│ │ │ └── strings.xml
│ ├── foss
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ └── premium
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── google-services.json
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── res
│ │ └── values
│ │ ├── ids.xml
│ │ └── strings.xml
├── main
│ ├── cloud
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── cloud
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── IndexViewModel.kt
│ │ │ │ └── add
│ │ │ │ ├── FTPSetup.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── IndexViewModel.kt
│ │ │ │ ├── SFTPSetup.kt
│ │ │ │ ├── SMBSetup.kt
│ │ │ │ └── WebDAVSetup.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── configurations
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── configurations
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ └── IndexViewModel.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── dashboard
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── dashboard
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── IndexViewModel.kt
│ │ │ │ └── Model.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── details
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── details
│ │ │ │ ├── AppDetails.kt
│ │ │ │ ├── DetailsScreen.kt
│ │ │ │ ├── DetailsViewModel.kt
│ │ │ │ └── FileDetails.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── directory
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── directory
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── IndexViewModel.kt
│ │ │ │ └── Model.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── history
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── history
│ │ │ │ ├── HistoryScreen.kt
│ │ │ │ ├── HistoryViewModel.kt
│ │ │ │ ├── TaskDetailsScreen.kt
│ │ │ │ └── TaskDetailsViewModel.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── list
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── list
│ │ │ │ ├── ListActions.kt
│ │ │ │ ├── ListActionsViewModel.kt
│ │ │ │ ├── ListBottomSheet.kt
│ │ │ │ ├── ListBottomSheetViewModel.kt
│ │ │ │ ├── ListItems.kt
│ │ │ │ ├── ListItemsViewModel.kt
│ │ │ │ ├── ListScreen.kt
│ │ │ │ ├── ListTopBar.kt
│ │ │ │ ├── ListTopBarViewModel.kt
│ │ │ │ └── ListViewModel.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── processing
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── processing
│ │ │ │ ├── AbstractMediumProcessingViewModel.kt
│ │ │ │ ├── AbstractPackagesProcessingViewModel.kt
│ │ │ │ ├── AbstractProcessingViewModel.kt
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── medium
│ │ │ │ ├── backup
│ │ │ │ │ ├── BackupViewModelImpl.kt
│ │ │ │ │ ├── NavHost.kt
│ │ │ │ │ └── Setup.kt
│ │ │ │ └── restore
│ │ │ │ │ ├── NavHost.kt
│ │ │ │ │ ├── RestoreViewModelImpl.kt
│ │ │ │ │ └── Setup.kt
│ │ │ │ └── packages
│ │ │ │ ├── backup
│ │ │ │ ├── BackupViewModelImpl.kt
│ │ │ │ ├── NavHost.kt
│ │ │ │ └── Setup.kt
│ │ │ │ └── restore
│ │ │ │ ├── NavHost.kt
│ │ │ │ ├── RestoreViewModelImpl.kt
│ │ │ │ └── Setup.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ ├── restore
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── xayah
│ │ │ │ └── feature
│ │ │ │ └── main
│ │ │ │ └── restore
│ │ │ │ ├── Component.kt
│ │ │ │ ├── Index.kt
│ │ │ │ ├── IndexViewModel.kt
│ │ │ │ └── reload
│ │ │ │ ├── Index.kt
│ │ │ │ └── IndexViewModel.kt
│ │ │ └── res
│ │ │ └── values
│ │ │ └── ids.xml
│ └── settings
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ └── com
│ │ │ └── xayah
│ │ │ └── feature
│ │ │ └── main
│ │ │ └── settings
│ │ │ ├── Component.kt
│ │ │ ├── Index.kt
│ │ │ ├── IndexViewModel.kt
│ │ │ ├── Item.kt
│ │ │ ├── about
│ │ │ ├── Index.kt
│ │ │ ├── IndexViewModel.kt
│ │ │ └── Translators.kt
│ │ │ ├── backup
│ │ │ └── Index.kt
│ │ │ ├── blacklist
│ │ │ ├── Index.kt
│ │ │ └── IndexViewModel.kt
│ │ │ ├── language
│ │ │ ├── Index.kt
│ │ │ └── IndexViewModel.kt
│ │ │ └── restore
│ │ │ └── Index.kt
│ │ └── res
│ │ ├── drawable
│ │ └── logo_weblate.xml
│ │ ├── raw
│ │ ├── contributors.json
│ │ ├── translators.json
│ │ └── translators_revision.json
│ │ └── values
│ │ └── ids.xml
└── setup
│ ├── .gitignore
│ ├── build.gradle.kts
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── kotlin
│ └── com
│ │ └── xayah
│ │ └── feature
│ │ └── setup
│ │ ├── Component.kt
│ │ ├── MainActivity.kt
│ │ ├── Model.kt
│ │ ├── NavHost.kt
│ │ ├── Routes.kt
│ │ └── page
│ │ ├── one
│ │ ├── Index.kt
│ │ └── IndexViewModel.kt
│ │ └── two
│ │ ├── Index.kt
│ │ └── IndexViewModel.kt
│ └── res
│ └── values
│ └── ids.xml
├── gradle.properties
├── gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── native
├── .gitignore
├── build.gradle.kts
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── jni
│ ├── CMakeLists.txt
│ ├── external
│ │ ├── CMakeLists.txt
│ │ └── tar
│ │ │ ├── CMakeLists.txt
│ │ │ ├── tar-config
│ │ │ └── config.h
│ │ │ ├── tar-gnu-embedded
│ │ │ ├── alloca.h
│ │ │ ├── assert.h
│ │ │ ├── configmake.h
│ │ │ ├── ctype.h
│ │ │ ├── dirent.h
│ │ │ ├── error.h
│ │ │ ├── fcntl.h
│ │ │ ├── fnmatch.h
│ │ │ ├── getopt-cdefs.h
│ │ │ ├── getopt.h
│ │ │ ├── inttypes.h
│ │ │ ├── langinfo.h
│ │ │ ├── limits.h
│ │ │ ├── locale.h
│ │ │ ├── malloc
│ │ │ │ ├── dynarray-skeleton.gl.h
│ │ │ │ ├── dynarray.gl.h
│ │ │ │ └── scratch_buffer.gl.h
│ │ │ ├── selinux
│ │ │ │ ├── context.h
│ │ │ │ ├── label.h
│ │ │ │ └── selinux.h
│ │ │ ├── signal.h
│ │ │ ├── stdckdint.h
│ │ │ ├── stddef.h
│ │ │ ├── stdint.h
│ │ │ ├── stdio.h
│ │ │ ├── stdlib.h
│ │ │ ├── string.h
│ │ │ ├── strings.h
│ │ │ ├── sys
│ │ │ │ ├── random.h
│ │ │ │ ├── stat.h
│ │ │ │ ├── time.h
│ │ │ │ └── types.h
│ │ │ ├── time.h
│ │ │ ├── uchar.h
│ │ │ ├── unicase.h
│ │ │ ├── unictype.h
│ │ │ ├── uninorm.h
│ │ │ ├── unistd.h
│ │ │ ├── unitypes.h
│ │ │ ├── uniwidth.h
│ │ │ ├── utime.h
│ │ │ ├── wchar.h
│ │ │ └── wctype.h
│ │ │ └── tar-lib-embedded
│ │ │ └── rmt-command.h
│ └── nativelib
│ │ ├── CMakeLists.txt
│ │ └── nativelib.cpp
│ └── kotlin
│ └── com
│ └── xayah
│ └── libnative
│ └── NativeLib.kt
└── settings.gradle.kts
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # custom: ['https://www.buymeacoffee.com/XayahSuSuSu', 'https://afdian.net/a/XayahSuSuSu']
2 | custom: ['https://paypal.me/XayahSuSuSu', 'https://afdian.net/a/XayahSuSuSu']
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: "[Bug] "
5 | labels: bug
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 | **Smartphone (please complete the following information):**
27 | - Device: [e.g. Xiaomi 10 Ultra]
28 | - OS: [e.g. MIUI14, Android13]
29 | - Version [e.g. Beta-4.3.7]
30 |
31 | **Additional context**
32 | Add any other context about the problem here.
33 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: "[Feature] "
5 | labels: enhancement
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the feature**
11 | A clear and concise description.
12 |
--------------------------------------------------------------------------------
/.github/workflows/bin.yaml:
--------------------------------------------------------------------------------
1 | name: Bin
2 |
3 | on:
4 | push:
5 | paths:
6 | - build/**
7 | pull_request:
8 | paths:
9 | - build/**
10 | workflow_dispatch:
11 | inputs:
12 |
13 | jobs:
14 | build:
15 | name: "Build bin"
16 | runs-on: ubuntu-latest
17 | container: registry.gitlab.com/fdroid/fdroidserver:buildserver-bookworm
18 | steps:
19 | - name: Checkout
20 | uses: actions/checkout@v4
21 | with:
22 | submodules: 'recursive'
23 |
24 | - name: Build
25 | run: bash -e -x build/build_bin.sh all all 1> /dev/null
26 |
27 | - name: Upload
28 | uses: actions/upload-artifact@v4
29 | with:
30 | name: Bin
31 | path: '**/build_bin/built_in/**/bin.zip'
--------------------------------------------------------------------------------
/.github/workflows/release-please.yml:
--------------------------------------------------------------------------------
1 | on:
2 | workflow_dispatch:
3 | inputs:
4 |
5 | permissions:
6 | contents: write
7 | pull-requests: write
8 |
9 | name: Release notes
10 |
11 | jobs:
12 | release-please:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: googleapis/release-please-action@v4
16 | with:
17 | token: ${{ secrets.MY_RELEASE_PLEASE_TOKEN }}
18 | release-type: simple
19 | skip-github-release: true
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "source/native/src/main/jni/external/tar/tar"]
2 | path = source/native/src/main/jni/external/tar/tar
3 | url = https://github.com/XayahSuSuSu/tar
4 |
--------------------------------------------------------------------------------
/dex/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | local.properties
11 |
--------------------------------------------------------------------------------
/dex/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /release
3 |
--------------------------------------------------------------------------------
/dex/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/dex/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
14 |
15 |
--------------------------------------------------------------------------------
/dex/app/src/main/java/com/android/providers/settings/SettingsState.java:
--------------------------------------------------------------------------------
1 | package com.android.providers.settings;
2 |
3 | public interface SettingsState {
4 | static final String SYSTEM_PACKAGE_NAME = "android";
5 | static final int MAX_BYTES_PER_APP_PACKAGE_UNLIMITED = -1;
6 |
7 | static final int SETTINGS_TYPE_GLOBAL = 0;
8 | static final int SETTINGS_TYPE_SYSTEM = 1;
9 | static final int SETTINGS_TYPE_SECURE = 2;
10 | static final int SETTINGS_TYPE_SSAID = 3;
11 | static final int SETTINGS_TYPE_CONFIG = 4;
12 |
13 | static final int SETTINGS_TYPE_MASK = 0xF0000000;
14 | static final int SETTINGS_TYPE_SHIFT = 28;
15 |
16 | static int makeKey(int type, int userId) {
17 | return (type << SETTINGS_TYPE_SHIFT) | userId;
18 | }
19 |
20 | Setting getSettingLocked(String name);
21 |
22 | boolean insertSettingLocked(String name, String value, String tag, boolean makeDefault, String packageName);
23 |
24 | interface Setting {
25 | String getValue();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/dex/app/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Script Dex
3 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/dex/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/dex/app/src/test/java/com/xayah/dex/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.xayah.dex;
2 |
3 | import org.junit.Test;
4 |
5 | public class ExampleUnitTest {
6 | @Test
7 | public void test_CCHelper() {
8 | System.out.println(new CCHelper().s2t("You Only live once! 生如长河,渡船千艘,唯自渡方是真渡。开启, 台湾, 香港, 时钟, 尽力, 日志"));
9 | System.out.println(new CCHelper().t2s("You Only live once! 生如長河,渡船千艘,唯自渡方是真渡。開啟, 台灣, 香港, 時鐘, 儘力, 日誌"));
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/dex/build.gradle.kts:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | @Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
3 | plugins {
4 | alias(libs.plugins.androidApplication) apply false
5 | alias(libs.plugins.androidLibrary) apply false
6 | }
7 | true // Needed to make the Suppress annotation work for the plugins block
--------------------------------------------------------------------------------
/dex/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/dex/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/dex/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Feb 20 22:27:22 CST 2024
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/dex/hiddenapi/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/dex/hiddenapi/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.androidLibrary)
3 | }
4 |
5 | android {
6 | namespace = "com.xayah.hiddenapi"
7 | compileSdk = 34
8 |
9 | buildTypes {
10 | release {
11 | isMinifyEnabled = false
12 | }
13 | }
14 |
15 | buildFeatures {
16 | aidl = true
17 | }
18 |
19 | compileOptions {
20 | sourceCompatibility = JavaVersion.VERSION_17
21 | targetCompatibility = JavaVersion.VERSION_17
22 | }
23 | }
24 |
25 | dependencies {
26 | annotationProcessor(libs.refine.annotation.processor)
27 | compileOnly(libs.refine.annotation)
28 | }
--------------------------------------------------------------------------------
/dex/hiddenapi/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/dex/hiddenapi/src/main/aidl/android/content/pm/ParceledListSlice.aidl:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2011, The Android Open Source Project
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package android.content.pm;
18 |
19 | parcelable ParceledListSlice;
20 |
21 | // https://cs.android.com/android/platform/superproject/+/android-8.0.0_r51:frameworks/base/core/java/android/content/pm/ParceledListSlice.aidl
--------------------------------------------------------------------------------
/dex/hiddenapi/src/main/java/android/content/IContentProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2006 The Android Open Source Project
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package android.content;
18 |
19 | import android.os.IInterface;
20 |
21 | /**
22 | * The ipc interface to talk to a content provider.
23 | *
24 | * @hide
25 | */
26 | public interface IContentProvider extends IInterface {
27 | }
28 |
29 | // https://cs.android.com/android/platform/superproject/+/android-8.0.0_r51:frameworks/base/core/java/android/content/IContentProvider.java
--------------------------------------------------------------------------------
/dex/hiddenapi/src/main/java/android/os/ServiceManager.java:
--------------------------------------------------------------------------------
1 | package android.os;
2 |
3 | /**
4 | * @see ServiceManager.java
5 | */
6 | public final class ServiceManager {
7 | public static IBinder getService(String name) {
8 | throw new RuntimeException("Stub!");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/dex/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | gradlePluginPortal()
6 | }
7 | }
8 | dependencyResolutionManagement {
9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
10 | repositories {
11 | google()
12 | mavenCentral()
13 | }
14 | }
15 |
16 | rootProject.name = "Script Dex"
17 | include(":app")
18 | include(":hiddenapi")
19 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | DataBackup is based on speed-backup. It was born with the consent of the author.
2 |
3 | DataBackup is intended to back up and restore the data of your apps.
4 |
5 | Root access is needed.
6 |
7 | It works on arm64-v8a(4 as suffix), armeabi-v7a(3 as suffix), x86_64(2 as suffix) and x86(1 as suffix) devices with Android 9 or higher.
8 |
9 |
Features include:
10 | * Multi-user Support
11 | * 100% Data Integrity
12 | * Fast
13 | * Easy
14 | * ...
15 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/fastlane/metadata/android/en-US/images/phoneScreenshots/06.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Back up/Restore your data.
--------------------------------------------------------------------------------
/source-next/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | local.properties
11 |
--------------------------------------------------------------------------------
/source-next/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source-next/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/source-next/app/src/androidTest/java/com/xayah/databackup/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.xayah.databackup", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/source-next/app/src/main/aidl/com/xayah/databackup/rootservice/IRemoteRootService.aidl:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.rootservice;
2 |
3 | interface IRemoteRootService {
4 | ParcelFileDescriptor getInstalledAppInfos();
5 | ParcelFileDescriptor getInstalledAppStorages();
6 | List getUsers();
7 | }
8 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/App.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup
2 |
3 | import android.app.Application
4 |
5 | class App : Application() {
6 | companion object {
7 | lateinit var application: Application
8 | }
9 |
10 | override fun onCreate() {
11 | super.onCreate()
12 | application = this
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/database/AppDataBase.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.database
2 |
3 | import androidx.room.Database
4 | import androidx.room.RoomDatabase
5 | import com.xayah.databackup.database.dao.AppDao
6 | import com.xayah.databackup.database.entity.App
7 |
8 | @Database(
9 | entities = [App::class],
10 | version = 1
11 | )
12 | abstract class AppDatabase : RoomDatabase() {
13 | abstract fun appDao(): AppDao
14 | }
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/ui/component/Effect.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.ui.component
2 |
3 | import androidx.compose.runtime.Composable
4 | import androidx.compose.runtime.DisposableEffect
5 | import androidx.lifecycle.Lifecycle
6 | import androidx.lifecycle.LifecycleEventObserver
7 | import androidx.lifecycle.compose.LocalLifecycleOwner
8 |
9 | @Composable
10 | inline fun OnResume(crossinline block: () -> Unit) {
11 | val owner = LocalLifecycleOwner.current
12 | DisposableEffect(owner) {
13 | val observer = LifecycleEventObserver { _, event ->
14 | if (event == Lifecycle.Event.ON_RESUME) {
15 | block()
16 | }
17 | }
18 | owner.lifecycle.addObserver(observer)
19 | onDispose {
20 | owner.lifecycle.removeObserver(observer)
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/ui/component/TransitionSpec.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.ui.component
2 |
3 | import androidx.compose.animation.AnimatedContentTransitionScope
4 | import androidx.compose.animation.ContentTransform
5 | import androidx.compose.animation.SizeTransform
6 | import androidx.compose.animation.fadeIn
7 | import androidx.compose.animation.fadeOut
8 | import androidx.compose.animation.slideInVertically
9 | import androidx.compose.animation.slideOutVertically
10 | import androidx.compose.animation.togetherWith
11 |
12 | fun textTransitionSpec(): AnimatedContentTransitionScope.() -> ContentTransform = {
13 | if (targetState > initialState) {
14 | slideInVertically { height -> height } + fadeIn() togetherWith
15 | slideOutVertically { height -> -height } + fadeOut()
16 | } else {
17 | slideInVertically { height -> -height } + fadeIn() togetherWith
18 | slideOutVertically { height -> height } + fadeOut()
19 | }.using(
20 | SizeTransform(clip = false)
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/ui/theme/Color.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.ui.theme
2 |
3 | import androidx.compose.ui.graphics.Color
4 |
5 | val Purple80 = Color(0xFFD0BCFF)
6 | val PurpleGrey80 = Color(0xFFCCC2DC)
7 | val Pink80 = Color(0xFFEFB8C8)
8 |
9 | val Purple40 = Color(0xFF6650a4)
10 | val PurpleGrey40 = Color(0xFF625b71)
11 | val Pink40 = Color(0xFF7D5260)
12 |
13 | val GreenPrimaryDark = Color(0xFF91D5AD)
14 | val GreenOnPrimaryDark = Color(0xFF003822)
15 | val GreenPrimaryContainerDark = Color(0xFF025233)
16 | val GreenOnPrimaryContainerDark = Color(0xFFACF2C8)
17 | val GreenSurfaceContainerDark = Color(0xFF1B211D)
18 |
19 | val GreenPrimaryLight = Color(0xFF266A4A)
20 | val GreenOnPrimaryLight = Color(0xFFFFFFFF)
21 | val GreenPrimaryContainerLight = Color(0xFFACF2C8)
22 | val GreenOnPrimaryContainerLight = Color(0xFF002112)
23 | val GreenSurfaceContainerLight = Color(0xFFEAEFE9)
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/BaseViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import androidx.lifecycle.ViewModel
4 | import androidx.lifecycle.viewModelScope
5 | import kotlinx.coroutines.launch
6 | import kotlinx.coroutines.sync.Mutex
7 | import kotlinx.coroutines.sync.withLock
8 | import kotlinx.coroutines.withContext
9 | import kotlin.coroutines.CoroutineContext
10 |
11 | abstract class BaseViewModel : ViewModel() {
12 | private val mMutex = Mutex()
13 |
14 | fun withLock(context: CoroutineContext, block: suspend () -> Unit) {
15 | viewModelScope.launch {
16 | withContext(context) {
17 | mMutex.withLock {
18 | block.invoke()
19 | }
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/DatabaseHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import androidx.room.Room
4 | import com.xayah.databackup.App
5 | import com.xayah.databackup.database.AppDatabase
6 |
7 | object DatabaseHelper {
8 | private val database = Room.databaseBuilder(
9 | App.application,
10 | AppDatabase::class.java,
11 | "database-databackup"
12 | ).build()
13 |
14 | val appDao = database.appDao()
15 | }
16 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/FlowHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import kotlinx.coroutines.flow.Flow
4 | import kotlinx.coroutines.flow.combine
5 |
6 | fun combine(
7 | flow: Flow,
8 | flow2: Flow,
9 | flow3: Flow,
10 | flow4: Flow,
11 | flow5: Flow,
12 | flow6: Flow,
13 | transform: suspend (T1, T2, T3, T4, T5, T6) -> R
14 | ): Flow = combine(
15 | combine(flow, flow2, flow3, ::Triple),
16 | combine(flow4, flow5, flow6, ::Triple),
17 | ) { t1, t2 ->
18 | transform(
19 | t1.first,
20 | t1.second,
21 | t1.third,
22 | t2.first,
23 | t2.second,
24 | t2.third,
25 | )
26 | }
27 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/LogHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import android.util.Log
4 |
5 | object LogHelper {
6 | fun d(tag: String, msg: String) {
7 | Log.d(tag, msg)
8 | }
9 |
10 | fun i(tag: String, msg: String) {
11 | Log.i(tag, msg)
12 | }
13 |
14 | fun w(tag: String, msg: String) {
15 | Log.w(tag, msg)
16 | }
17 |
18 | fun e(tag: String, msg: String) {
19 | Log.e(tag, msg)
20 | }
21 |
22 | fun e(tag: String, msg: String, tr: Throwable) {
23 | Log.e(tag, msg, tr)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/NavHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import androidx.navigation.NavDestination.Companion.hasRoute
4 | import androidx.navigation.NavHostController
5 |
6 | /**
7 | * Navigate to target route with debounce handled.
8 | */
9 | inline fun NavHostController.navigateSafely(route: T) {
10 | if (currentDestination?.hasRoute() != true) {
11 | navigate(route) { launchSingleTop = true }
12 | }
13 | }
14 |
15 | /**
16 | * Pop back stack safely.
17 | */
18 | fun NavHostController.popBackStackSafely() {
19 | navigateUp()
20 | }
21 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/PathHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import android.annotation.SuppressLint
4 |
5 | @SuppressLint("SdCardPath")
6 | object PathHelper {
7 | fun getAppUserDir(userId: Int, packageName: String): String = "/data/user/$userId/$packageName"
8 | fun getAppUserDeDir(userId: Int, packageName: String): String = "/data/user_de/$userId/$packageName"
9 | fun getAppDataDir(userId: Int, packageName: String): String = "/data/media/${userId}/Android/data/$packageName"
10 | fun getAppObbDir(userId: Int, packageName: String): String = "/data/media/${userId}/Android/obb/$packageName"
11 | fun getAppMediaDir(userId: Int, packageName: String): String = "/data/media/${userId}/Android/media/$packageName"
12 | }
13 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/ProcessHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import android.app.Activity
4 | import android.os.Process
5 | import kotlin.system.exitProcess
6 |
7 | object ProcessHelper {
8 | fun killSelf(context: Activity) {
9 | context.finishAffinity()
10 | Process.killProcess(Process.myPid())
11 | exitProcess(0)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/StorageHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import java.text.DecimalFormat
4 | import kotlin.math.pow
5 |
6 | private const val UNIT = 1024F
7 |
8 | val Long.formatToStorageSize: String
9 | get() {
10 | var unit = "Bytes"
11 | var size = this.toFloat()
12 | val gb = UNIT.pow(3)
13 | val mb = UNIT.pow(2)
14 | val kb = UNIT
15 | if (this > gb) {
16 | size = this / gb
17 | unit = "GB"
18 | } else if (this > mb) {
19 | size = this / mb
20 | unit = "MB"
21 | } else if (this > kb) {
22 | size = this / kb
23 | unit = "KB"
24 | }
25 | return if (size == 0F) "0.00 $unit" else "${DecimalFormat("#.00").format(size)} $unit"
26 | }
27 |
--------------------------------------------------------------------------------
/source-next/app/src/main/java/com/xayah/databackup/util/WorkManagerHelper.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup.util
2 |
3 | import androidx.work.ExistingWorkPolicy
4 | import androidx.work.WorkManager
5 | import com.xayah.databackup.App
6 | import com.xayah.databackup.workers.AppsUpdateWorker
7 |
8 | object WorkManagerHelper {
9 | private const val APPS_UPDATE_WORK_NAME = "apps_update_work"
10 |
11 | fun enqueueAppsUpdateWork() {
12 | WorkManager.getInstance(App.application)
13 | .enqueueUniqueWork(APPS_UPDATE_WORK_NAME, ExistingWorkPolicy.KEEP, AppsUpdateWorker.buildRequest())
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/anim/fast_out_extra_slow_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_arrow_left.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_bell.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_chevron_down.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_chevron_right.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_clock.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_folder.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_funnel.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_message_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_phone.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
15 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_search.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_user.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/drawable/ic_user_round.xml:
--------------------------------------------------------------------------------
1 |
7 |
14 |
21 |
22 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values-cs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Vítejte v aplikaci DataBackup
4 | DataBackup
5 | Aktualizovat záznamy
6 | Detekce prostředí
7 | Start
8 |
9 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values-night-v31/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @android:color/system_accent1_200
4 | @android:color/system_accent1_800
5 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #76D1FF
4 | #003549
5 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values-sv/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Start
4 | Välkommen till DataBackup
5 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values-v31/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @android:color/system_accent1_100
4 | @android:color/system_accent1_400
5 | @color/colorPrimary
6 | @android:color/system_accent1_600
7 | @android:color/system_accent1_0
8 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFBB86FC
4 | #FF6200EE
5 | #FF3700B3
6 | #FF03DAC5
7 | #FF018786
8 | #FF000000
9 | #FFFFFFFF
10 |
11 | #C1E8FF
12 | #219BCC
13 | @color/colorPrimary
14 | #00668B
15 | #ffffff
16 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/source-next/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/source-next/app/src/test/java/com/xayah/databackup/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.databackup
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/source-next/build.gradle.kts:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | plugins {
3 | alias(libs.plugins.android.application) apply false
4 | alias(libs.plugins.android.library) apply false
5 | alias(libs.plugins.kotlin.android) apply false
6 | alias(libs.plugins.kotlin.compose) apply false
7 | alias(libs.plugins.kotlin.jvm) apply false
8 | alias(libs.plugins.kotlin.ksp) apply false
9 | alias(libs.plugins.kotlin.serialization) apply false
10 | alias(libs.plugins.refine) apply false
11 | }
--------------------------------------------------------------------------------
/source-next/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source-next/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/source-next/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Jan 12 15:54:47 CST 2025
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/source-next/hiddenapi/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source-next/hiddenapi/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.android.library)
3 | alias(libs.plugins.kotlin.android)
4 | }
5 |
6 | android {
7 | namespace = "com.xayah.hiddenapi"
8 | compileSdk = libs.versions.compileSdk.get().toInt()
9 |
10 | defaultConfig {
11 | minSdk = libs.versions.minSdk.get().toInt()
12 |
13 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
14 | }
15 |
16 | compileOptions {
17 | sourceCompatibility = JavaVersion.VERSION_11
18 | targetCompatibility = JavaVersion.VERSION_11
19 | }
20 | kotlinOptions {
21 | jvmTarget = "11"
22 | }
23 | }
24 |
25 | dependencies {
26 | implementation(libs.androidx.core.ktx)
27 | implementation(libs.androidx.appcompat)
28 | testImplementation(libs.junit)
29 | androidTestImplementation(libs.androidx.junit)
30 | androidTestImplementation(libs.androidx.espresso.core)
31 |
32 | // Refine
33 | annotationProcessor(libs.refine.annotation.processor)
34 | compileOnly(libs.refine.annotation)
35 | }
--------------------------------------------------------------------------------
/source-next/hiddenapi/src/androidTest/java/com/xayah/hiddenapi/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.hiddenapi
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.xayah.hiddenapi.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/source-next/hiddenapi/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source-next/hiddenapi/src/main/kotlin/com/xayah/hiddenapi/Refine.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.hiddenapi
2 |
3 | inline fun Any.castTo(): T {
4 | return this as T
5 | }
6 |
--------------------------------------------------------------------------------
/source-next/hiddenapi/src/test/java/com/xayah/hiddenapi/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.hiddenapi
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/source-next/native/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source-next/native/src/androidTest/java/com/xayah/libnative/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.libnative
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.xayah.libnative.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/source-next/native/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source-next/native/src/main/jni/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.22.1)
2 |
3 | project("native")
4 |
5 | add_subdirectory(nativelib)
6 |
--------------------------------------------------------------------------------
/source-next/native/src/main/jni/nativelib/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | add_compile_options(
2 | -O3
3 | -fPIC
4 | -ffunction-sections
5 | -fdata-sections
6 | -D_FORTIFY_SOURCE=0
7 | -ffile-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}=/src
8 | )
9 |
10 | add_link_options(
11 | -s
12 | -flto
13 | -Wl,--gc-sections
14 | -Wl,--build-id=none
15 | -Wl,--hash-style=both
16 | )
17 |
18 | add_library(nativelib SHARED
19 | nativelib.cpp
20 | )
21 |
22 | target_link_libraries(nativelib
23 | android
24 | log
25 | )
26 |
--------------------------------------------------------------------------------
/source-next/native/src/main/kotlin/com/xayah/libnative/NativeLib.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.libnative
2 |
3 | object NativeLib {
4 | external fun calculateTreeSize(path: String): Long
5 | external fun getUidGid(path: String): IntArray
6 | }
7 |
--------------------------------------------------------------------------------
/source-next/native/src/test/java/com/xayah/libnative/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.libnative
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/source-next/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | google {
4 | content {
5 | includeGroupByRegex("com\\.android.*")
6 | includeGroupByRegex("com\\.google.*")
7 | includeGroupByRegex("androidx.*")
8 | }
9 | }
10 | mavenCentral()
11 | gradlePluginPortal()
12 | }
13 | }
14 | dependencyResolutionManagement {
15 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
16 | repositories {
17 | google()
18 | mavenCentral()
19 | maven("https://jitpack.io")
20 | }
21 | }
22 |
23 | rootProject.name = "DataBackup"
24 | include(":app")
25 | include(":hiddenapi")
26 | include(":native")
27 |
--------------------------------------------------------------------------------
/source/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea
5 | .DS_Store
6 | /build
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | local.properties
11 |
--------------------------------------------------------------------------------
/source/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | /arm64-v8aFoss
3 | /arm64-v8aPremium
4 | /arm64-v8aAlpha
5 | /armeabi-v7aFoss
6 | /armeabi-v7aPremium
7 | /armeabi-v7aAlpha
8 | /x86Foss
9 | /x86Premium
10 | /x86Alpha
11 | /x86_64Foss
12 | /x86_64Premium
13 | /x86_64Alpha
14 |
--------------------------------------------------------------------------------
/source/app/src/arm64-v8a/assets/bin.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/arm64-v8a/assets/bin.zip
--------------------------------------------------------------------------------
/source/app/src/armeabi-v7a/assets/bin.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/armeabi-v7a/assets/bin.zip
--------------------------------------------------------------------------------
/source/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_adjust_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_android.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_arrow_circle_down.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_arrow_circle_up.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_cancel.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_cancel_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_check_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_deployed_code.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_emoticon.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_folder_open.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_image.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_not_started.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_not_started_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_package_2.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/drawable/ic_rounded_pending_circle.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/source/app/src/main/res/font/jetbrains_mono_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/font/jetbrains_mono_regular.ttf
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-hdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-mdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
--------------------------------------------------------------------------------
/source/app/src/main/res/raw/keep.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-cs/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Vítejte v aplikaci DataBackup
4 | DataBackup
5 | Aktualizovat záznamy
6 | Detekce prostředí
7 | Start
8 |
9 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-fa/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-in/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-night-v31/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @android:color/system_accent1_200
4 | @android:color/system_accent1_800
5 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #76D1FF
4 | #003549
5 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-sv/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Start
4 | Välkommen till DataBackup
5 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-ta/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-uk/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-v31/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | @android:color/system_accent1_100
4 | @android:color/system_accent1_400
5 | @color/colorPrimary
6 | @android:color/system_accent1_600
7 | @android:color/system_accent1_0
8 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-zh-rCN/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | - %d 秒
4 |
5 |
6 | - %d 分钟
7 |
8 |
9 | - %d 小时
10 |
11 |
12 | - %d 天
13 |
14 |
15 | - %d 项
16 |
17 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-zh-rHK/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | - %d 秒
4 |
5 |
6 | - %d 分鐘
7 |
8 |
9 | - %d 小時
10 |
11 |
12 | - %d 天
13 |
14 |
15 | - %d 項
16 |
17 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values-zh-rTW/plurals.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | - %d 秒
4 |
5 |
6 | - %d 分鐘
7 |
8 |
9 | - %d 小時
10 |
11 |
12 | - %d 天
13 |
14 |
15 | - %d 項
16 |
17 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #C1E8FF
4 | #219BCC
5 | @color/colorPrimary
6 | #00668B
7 | #ffffff
8 |
--------------------------------------------------------------------------------
/source/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
13 |
--------------------------------------------------------------------------------
/source/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/source/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/source/app/src/x86/assets/bin.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/x86/assets/bin.zip
--------------------------------------------------------------------------------
/source/app/src/x86_64/assets/bin.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/XayahSuSuSu/Android-DataBackup/c27c51f1044d12757ea0e3bc84768ea9c8330034/source/app/src/x86_64/assets/bin.zip
--------------------------------------------------------------------------------
/source/build-logic/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/build-logic/convention/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/ApplicationHiltWorkConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.api.dsl.ApplicationExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class ApplicationHiltWorkConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | extensions.getByType().apply {
11 | dependencies {
12 | add("implementation", catalogLibs.findLibrary("hilt.work").get())
13 | add("kapt", catalogLibs.findLibrary("hilt.work.compiler").get())
14 | }
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryAndroidTestConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class LibraryAndroidTestConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | extensions.getByType().apply {
11 | defaultConfig {
12 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
13 | }
14 | dependencies {
15 | add("androidTestImplementation", catalogLibs.findLibrary("androidx.test.ext.junit").get())
16 | add("androidTestImplementation", catalogLibs.findLibrary("espresso.core").get())
17 | }
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryFirebaseConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class LibraryFirebaseConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | pluginManager.apply("com.google.gms.google-services")
11 | pluginManager.apply("com.google.firebase.crashlytics")
12 |
13 | extensions.getByType().apply {
14 | dependencies {
15 | // Firebase
16 | add("implementation", platform(catalogLibs.findLibrary("firebase-bom").get()))
17 | add("implementation", catalogLibs.findLibrary("firebase.crashlytics").get())
18 | add("implementation", catalogLibs.findLibrary("firebase.analytics").get())
19 | }
20 | }
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryHiltConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.configure
5 | import org.gradle.kotlin.dsl.dependencies
6 | import org.gradle.kotlin.dsl.getByType
7 | import org.jetbrains.kotlin.gradle.plugin.KaptExtension
8 |
9 | class LibraryHiltConventionPlugin : Plugin {
10 | override fun apply(target: Project) {
11 | with(target) {
12 | pluginManager.apply("org.jetbrains.kotlin.kapt")
13 | pluginManager.apply("com.google.dagger.hilt.android")
14 |
15 | extensions.getByType().apply {
16 | dependencies {
17 | add("implementation", catalogLibs.findLibrary("hilt.android").get())
18 | add("kapt", catalogLibs.findLibrary("hilt.android.compiler").get())
19 | }
20 | }
21 |
22 | extensions.configure {
23 | correctErrorTypes = true
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryHiltWorkConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class LibraryHiltWorkConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | extensions.getByType().apply {
11 | dependencies {
12 | add("implementation", catalogLibs.findLibrary("hilt.work").get())
13 | add("kapt", catalogLibs.findLibrary("hilt.work.compiler").get())
14 | }
15 | }
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryProtobufConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class LibraryProtobufConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | pluginManager.apply("org.jetbrains.kotlin.plugin.serialization")
11 |
12 | extensions.getByType().apply {
13 | dependencies {
14 | add("implementation", catalogLibs.findLibrary("serialization.protobuf").get())
15 | }
16 | }
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/source/build-logic/convention/src/main/kotlin/LibraryTestConventionPlugin.kt:
--------------------------------------------------------------------------------
1 | import com.android.build.gradle.LibraryExtension
2 | import org.gradle.api.Plugin
3 | import org.gradle.api.Project
4 | import org.gradle.kotlin.dsl.dependencies
5 | import org.gradle.kotlin.dsl.getByType
6 |
7 | class LibraryTestConventionPlugin : Plugin {
8 | override fun apply(target: Project) {
9 | with(target) {
10 | extensions.getByType().apply {
11 | dependencies {
12 | add("testImplementation", catalogLibs.findLibrary("junit").get())
13 | }
14 | }
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/source/build-logic/gradle.properties:
--------------------------------------------------------------------------------
1 | # Gradle properties are not passed to included builds https://github.com/gradle/gradle/issues/2534
2 | org.gradle.parallel=true
3 | org.gradle.caching=true
4 | org.gradle.configureondemand=true
5 |
--------------------------------------------------------------------------------
/source/build-logic/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencyResolutionManagement {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | versionCatalogs {
7 | create("libs") {
8 | from(files("../gradle/libs.versions.toml"))
9 | }
10 | }
11 | }
12 |
13 | rootProject.name = "build-logic"
14 | include(":convention")
15 |
--------------------------------------------------------------------------------
/source/build.gradle.kts:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | plugins {
4 | alias(libs.plugins.android.application) apply false
5 | alias(libs.plugins.kotlin.android) apply false
6 | alias(libs.plugins.kapt) apply false
7 | alias(libs.plugins.hilt.android) apply false
8 | alias(libs.plugins.com.android.library) apply false
9 | alias(libs.plugins.ksp) apply false
10 | alias(libs.plugins.gms.google.services) apply false
11 | alias(libs.plugins.firebase.crashlytics) apply false
12 | alias(libs.plugins.serialization) apply false
13 | alias(libs.plugins.compose.compiler) apply false
14 | }
15 |
--------------------------------------------------------------------------------
/source/core/common/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/common/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.library.common)
3 | alias(libs.plugins.library.compose)
4 | }
5 |
6 | android {
7 | namespace = "com.xayah.core.common"
8 | }
9 |
10 | dependencies {
11 | implementation(libs.androidx.activity.compose)
12 | }
--------------------------------------------------------------------------------
/source/core/common/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/common/src/main/kotlin/com/xayah/core/common/util/ListUtil.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.common.util
2 |
3 | fun List.toLineString() = joinToString(separator = "\n")
4 | fun List.trim() = filter { it.isNotEmpty() }
5 | fun List.toPathString() = joinToString(separator = "/")
6 | fun List.toSpaceString() = joinToString(separator = " ")
7 | fun List.toPureString() = joinToString(separator = "")
--------------------------------------------------------------------------------
/source/core/data/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/data/src/androidTest/kotlin/com/xayah/core/data/repository/UnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.data.repository;
2 |
3 | import androidx.test.ext.junit.runners.AndroidJUnit4
4 | import com.topjohnwu.superuser.Shell
5 | import com.xayah.core.util.command.PackageUtil
6 | import kotlinx.coroutines.runBlocking
7 | import org.junit.Test
8 | import org.junit.runner.RunWith
9 |
10 | @RunWith(AndroidJUnit4::class)
11 | class UnitTest {
12 | /**
13 | * @see MuntashirAkon/AppManager#82
14 | */
15 | @Test
16 | fun testKeyStoreDetection() {
17 | val uid = 10481
18 | Shell.cmd("su $uid -c keystore_cli_v2 list").exec().apply {
19 | println(out)
20 | }
21 | println(runBlocking { PackageUtil.hasKeystore("su", uid) })
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/source/core/data/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/data/src/main/kotlin/com/xayah/core/data/module/RemoteRootServiceModule.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.data.module
2 |
3 | import android.content.Context
4 | import com.xayah.core.rootservice.service.RemoteRootService
5 | import dagger.Module
6 | import dagger.Provides
7 | import dagger.hilt.InstallIn
8 | import dagger.hilt.android.qualifiers.ApplicationContext
9 | import dagger.hilt.components.SingletonComponent
10 | import javax.inject.Singleton
11 |
12 | @Module
13 | @InstallIn(SingletonComponent::class)
14 | object RemoteRootServiceModule {
15 | @Provides
16 | @Singleton
17 | fun provideService(@ApplicationContext context: Context): RemoteRootService = RemoteRootService(context)
18 | }
19 |
--------------------------------------------------------------------------------
/source/core/data/src/main/kotlin/com/xayah/core/data/repository/SettingsDataRepo.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.data.repository
2 |
3 | import com.xayah.core.datastore.DbPreferencesDataSource
4 | import com.xayah.core.datastore.KeyAppsUpdateTime
5 | import com.xayah.core.datastore.KeyCompressionType
6 | import com.xayah.core.model.CompressionType
7 | import com.xayah.core.model.SettingsData
8 | import kotlinx.coroutines.flow.Flow
9 | import javax.inject.Inject
10 |
11 | class SettingsDataRepo @Inject constructor(
12 | private val dbPreferencesDataSource: DbPreferencesDataSource,
13 | ) {
14 | val settingsData: Flow = dbPreferencesDataSource.settingsData
15 |
16 | suspend fun setCompressionType(value: CompressionType) {
17 | dbPreferencesDataSource.edit(KeyCompressionType, value.name)
18 | }
19 |
20 | suspend fun setAppsUpdateTime(value: Long) {
21 | dbPreferencesDataSource.edit(KeyAppsUpdateTime, value)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/source/core/data/src/main/kotlin/com/xayah/core/data/util/DataTypeUtil.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.data.util
2 |
3 | import com.xayah.core.model.DataType
4 | import com.xayah.core.util.PathUtil
5 |
6 | fun DataType.srcDir(userId: Int): String = when (this) {
7 | DataType.PACKAGE_USER -> PathUtil.getPackageUserDir(userId)
8 | DataType.PACKAGE_USER_DE -> PathUtil.getPackageUserDeDir(userId)
9 | DataType.PACKAGE_DATA -> PathUtil.getPackageDataDir(userId)
10 | DataType.PACKAGE_OBB -> PathUtil.getPackageObbDir(userId)
11 | DataType.PACKAGE_MEDIA -> PathUtil.getPackageMediaDir(userId)
12 | else -> ""
13 | }
14 |
--------------------------------------------------------------------------------
/source/core/database/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/database/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.library.common)
3 | alias(libs.plugins.library.hilt)
4 | alias(libs.plugins.library.room)
5 | alias(libs.plugins.library.protobuf)
6 | }
7 |
8 | android {
9 | namespace = "com.xayah.core.database"
10 | }
11 |
12 | dependencies {
13 | implementation(libs.androidx.activity.compose)
14 |
15 | // Core
16 | implementation(project(":core:model"))
17 | implementation(project(":core:util"))
18 |
19 | // Gson
20 | implementation(libs.gson)
21 | }
22 |
--------------------------------------------------------------------------------
/source/core/database/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/database/src/main/kotlin/com/xayah/core/database/dao/CloudDao.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.database.dao
2 |
3 | import androidx.room.Dao
4 | import androidx.room.Delete
5 | import androidx.room.Query
6 | import androidx.room.Upsert
7 | import com.xayah.core.model.database.CloudEntity
8 | import kotlinx.coroutines.flow.Flow
9 |
10 | @Dao
11 | interface CloudDao {
12 | @Upsert(entity = CloudEntity::class)
13 | suspend fun upsert(item: CloudEntity)
14 |
15 | @Upsert(entity = CloudEntity::class)
16 | suspend fun upsert(items: List)
17 |
18 | @Query("SELECT * FROM CloudEntity WHERE name = :name LIMIT 1")
19 | suspend fun queryByName(name: String): CloudEntity?
20 |
21 | @Query("SELECT * FROM CloudEntity WHERE activated = 1")
22 | suspend fun queryActivated(): List
23 |
24 | @Query("SELECT * FROM CloudEntity")
25 | fun queryFlow(): Flow>
26 |
27 | @Query("SELECT * FROM CloudEntity")
28 | suspend fun query(): List
29 |
30 | @Delete(entity = CloudEntity::class)
31 | suspend fun delete(item: CloudEntity)
32 | }
33 |
--------------------------------------------------------------------------------
/source/core/database/src/main/kotlin/com/xayah/core/database/util/Converters.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.database.util
2 |
3 | import androidx.room.TypeConverter
4 | import com.google.gson.reflect.TypeToken
5 | import com.xayah.core.model.database.PackagePermission
6 | import com.xayah.core.util.GsonUtil
7 |
8 | class StringListConverters {
9 | @TypeConverter
10 | fun fromStringListJson(json: String): List =
11 | GsonUtil().fromJson(json, object : TypeToken>() {}.type)
12 |
13 | @TypeConverter
14 | fun toStringListJson(list: List): String =
15 | GsonUtil().toJson(list)
16 |
17 | @TypeConverter
18 | fun fromPermissionListJson(json: String): List =
19 | GsonUtil().fromJson(json, object : TypeToken>() {}.type)
20 |
21 | @TypeConverter
22 | fun toPermissionListJson(list: List): String =
23 | GsonUtil().toJson(list)
24 | }
25 |
--------------------------------------------------------------------------------
/source/core/datastore/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/datastore/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.library.common)
3 | alias(libs.plugins.library.hilt)
4 | }
5 |
6 | android {
7 | namespace = "com.xayah.core.datastore"
8 | }
9 |
10 | dependencies {
11 | // Core
12 | implementation(project(":core:model"))
13 | implementation(project(":core:common"))
14 |
15 | // Preferences DataStore
16 | implementation(libs.androidx.datastore.preferences)
17 |
18 | // Gson
19 | implementation(libs.gson)
20 | }
21 |
--------------------------------------------------------------------------------
/source/core/datastore/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/datastore/src/main/kotlin/com/xayah/core/datastore/di/CoroutineScopesModule.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.datastore.di
2 |
3 | import com.xayah.core.datastore.di.DbDispatchers.Default
4 | import dagger.Module
5 | import dagger.Provides
6 | import dagger.hilt.InstallIn
7 | import dagger.hilt.components.SingletonComponent
8 | import kotlinx.coroutines.CoroutineDispatcher
9 | import kotlinx.coroutines.CoroutineScope
10 | import kotlinx.coroutines.SupervisorJob
11 | import javax.inject.Qualifier
12 | import javax.inject.Singleton
13 |
14 | @Retention(AnnotationRetention.RUNTIME)
15 | @Qualifier
16 | annotation class ApplicationScope
17 |
18 | @Module
19 | @InstallIn(SingletonComponent::class)
20 | internal object CoroutineScopesModule {
21 | @Provides
22 | @Singleton
23 | @ApplicationScope
24 | fun providesCoroutineScope(
25 | @Dispatcher(Default) dispatcher: CoroutineDispatcher,
26 | ): CoroutineScope = CoroutineScope(SupervisorJob() + dispatcher)
27 | }
28 |
--------------------------------------------------------------------------------
/source/core/datastore/src/main/kotlin/com/xayah/core/datastore/di/DispatchersModule.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.datastore.di
2 |
3 | import com.xayah.core.datastore.di.DbDispatchers.Default
4 | import com.xayah.core.datastore.di.DbDispatchers.IO
5 | import dagger.Module
6 | import dagger.Provides
7 | import dagger.hilt.InstallIn
8 | import dagger.hilt.components.SingletonComponent
9 | import kotlinx.coroutines.CoroutineDispatcher
10 | import kotlinx.coroutines.Dispatchers
11 | import javax.inject.Qualifier
12 | import kotlin.annotation.AnnotationRetention.RUNTIME
13 |
14 | @Qualifier
15 | @Retention(RUNTIME)
16 | annotation class Dispatcher(val dbDispatchers: DbDispatchers)
17 |
18 | enum class DbDispatchers {
19 | Default,
20 | IO,
21 | }
22 |
23 | @Module
24 | @InstallIn(SingletonComponent::class)
25 | object DispatchersModule {
26 | @Provides
27 | @Dispatcher(IO)
28 | fun providesIODispatcher(): CoroutineDispatcher = Dispatchers.IO
29 |
30 | @Provides
31 | @Dispatcher(Default)
32 | fun providesDefaultDispatcher(): CoroutineDispatcher = Dispatchers.Default
33 | }
34 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/hiddenapi/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.library.common)
3 | }
4 |
5 | android {
6 | namespace = "com.xayah.core.hiddenapi"
7 |
8 | buildTypes {
9 | release {
10 | isMinifyEnabled = false
11 | }
12 | }
13 |
14 | buildFeatures {
15 | aidl = true
16 | }
17 | }
18 |
19 | dependencies {
20 | implementation(libs.androidx.core.ktx)
21 | implementation(libs.androidx.appcompat)
22 | annotationProcessor(libs.refine.annotation.processor)
23 | compileOnly(libs.refine.annotation)
24 |
25 | // Core
26 | implementation(project(":core:common"))
27 | }
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/app/ActivityManagerHidden.java:
--------------------------------------------------------------------------------
1 | package android.app;
2 |
3 | import dev.rikka.tools.refine.RefineAs;
4 |
5 | /**
6 | * @see ActivityManager.java
7 | */
8 | @RefineAs(ActivityManager.class)
9 | public class ActivityManagerHidden {
10 | public void forceStopPackageAsUser(String packageName, int userId) {
11 | throw new RuntimeException("Stub!");
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/app/ActivityThread.java:
--------------------------------------------------------------------------------
1 | package android.app;
2 |
3 | /**
4 | * @see ActivityThread.java
5 | */
6 | public class ActivityThread {
7 | public static ActivityThread systemMain() {
8 | throw new RuntimeException("Stub!");
9 | }
10 |
11 | public ContextImpl getSystemContext() {
12 | throw new RuntimeException("Stub!");
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/app/ContextImpl.java:
--------------------------------------------------------------------------------
1 | package android.app;
2 |
3 | import android.content.Context;
4 |
5 | public abstract class ContextImpl extends Context {
6 | }
7 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/os/MemoryFileHidden.java:
--------------------------------------------------------------------------------
1 | package android.os;
2 |
3 | import java.io.FileDescriptor;
4 |
5 | import dev.rikka.tools.refine.RefineAs;
6 |
7 | /**
8 | * @see MemoryFile.java
9 | */
10 | @RefineAs(MemoryFile.class)
11 | public class MemoryFileHidden {
12 | public FileDescriptor getFileDescriptor() {
13 | throw new RuntimeException("Stub!");
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/os/ServiceManager.java:
--------------------------------------------------------------------------------
1 | package android.os;
2 |
3 | /**
4 | * @see ServiceManager.java
5 | */
6 | public final class ServiceManager {
7 | public static IBinder getService(String name) {
8 | throw new RuntimeException("Stub!");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/os/UserHandleHidden.java:
--------------------------------------------------------------------------------
1 | package android.os;
2 |
3 | import dev.rikka.tools.refine.RefineAs;
4 |
5 | /**
6 | * @see UserHandle.java
7 | */
8 | @RefineAs(UserHandle.class)
9 | public class UserHandleHidden {
10 | public static UserHandle of(int userId) {
11 | throw new RuntimeException("Stub!");
12 | }
13 |
14 | public int getIdentifier() {
15 | throw new RuntimeException("Stub!");
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/java/android/os/UserManagerHidden.java:
--------------------------------------------------------------------------------
1 | package android.os;
2 |
3 | import android.content.Context;
4 | import android.content.pm.UserInfo;
5 |
6 | import java.util.List;
7 |
8 | import dev.rikka.tools.refine.RefineAs;
9 |
10 | /**
11 | * @see UserManager.java
12 | */
13 | @RefineAs(UserManager.class)
14 | public class UserManagerHidden {
15 | public static UserManager get(Context context) {
16 | throw new RuntimeException("Stub!");
17 | }
18 |
19 | public List getUsers() {
20 | throw new RuntimeException("Stub!");
21 | }
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/source/core/hiddenapi/src/main/kotlin/com/xayah/core/hiddenapi/HiddenApiUtil.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.hiddenapi
2 |
3 | inline fun Any.castTo(): T {
4 | return this as T
5 | }
6 |
--------------------------------------------------------------------------------
/source/core/model/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/source/core/model/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | alias(libs.plugins.library.common)
3 | alias(libs.plugins.library.room)
4 | alias(libs.plugins.library.test)
5 | alias(libs.plugins.library.protobuf)
6 | }
7 |
8 | android {
9 | namespace = "com.xayah.core.model"
10 |
11 | buildFeatures {
12 | aidl = true
13 | }
14 | }
15 |
16 | dependencies {
17 | // Core
18 | implementation(project(":core:common"))
19 | compileOnly(project(":core:hiddenapi"))
20 |
21 | // Gson
22 | implementation(libs.gson)
23 | }
24 |
--------------------------------------------------------------------------------
/source/core/model/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/source/core/model/src/main/aidl/com/xayah/core/model/database/PackagePermission.aidl:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model.database;
2 | parcelable PackagePermission;
--------------------------------------------------------------------------------
/source/core/model/src/main/kotlin/com/xayah/core/model/App.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model
2 |
3 | data class App(
4 | val id: Long,
5 | val packageName: String,
6 | val label: String,
7 | val preserveId: Long,
8 | val isSystemApp: Boolean,
9 | val selectionFlag: Int,
10 | val selected: Boolean,
11 | )
12 |
--------------------------------------------------------------------------------
/source/core/model/src/main/kotlin/com/xayah/core/model/File.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model
2 |
3 | data class File(
4 | val id: Long,
5 | val name: String,
6 | val path: String,
7 | val preserveId: Long,
8 | val selected: Boolean,
9 | )
10 |
--------------------------------------------------------------------------------
/source/core/model/src/main/kotlin/com/xayah/core/model/SettingsData.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model
2 |
3 | val DEFAULT_COMPRESSION_TYPE = CompressionType.ZSTD
4 | const val DEFAULT_APPS_UPDATE_TIME = 0L
5 |
6 | data class SettingsData(
7 | val compressionType: CompressionType = DEFAULT_COMPRESSION_TYPE,
8 | val appsUpdateTime: Long = DEFAULT_APPS_UPDATE_TIME,
9 | )
10 |
--------------------------------------------------------------------------------
/source/core/model/src/main/kotlin/com/xayah/core/model/Target.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model
2 |
3 | enum class Target {
4 | Apps,
5 | Files
6 | }
--------------------------------------------------------------------------------
/source/core/model/src/main/kotlin/com/xayah/core/model/Typealias.kt:
--------------------------------------------------------------------------------
1 | package com.xayah.core.model
2 |
3 | typealias WeblateSrcItems = List